From 026bd0321268225539853339c148970b77711a5a Mon Sep 17 00:00:00 2001
From: "google-labs-jules[bot]"
<161369871+google-labs-jules[bot]@users.noreply.github.com>
Date: Tue, 3 Jun 2025 17:23:03 +0000
Subject: [PATCH 1/4] Refactor: Migrate project to ES6 modules
This commit finalizes the transition to ES6 modules for client-side JavaScript.
Key changes:
- Updated the main script tag in `src/_includes/components/footer.njk` to use `type="module"`. This enables modern JavaScript module loading in the browser.
- Verified that the existing JavaScript codebase in `src/assets/js/` is already using ES6 import/export syntax.
- Confirmed that Eleventy data files (`*.11tydata.js`) are compatible with the Node.js ES module environment (`"type": "module"` in `package.json`).
- Ensured the project builds successfully with these changes using `yarn build`.
- Performed a basic runtime test by starting the development server (`yarn start`) and fetching the homepage.
The project's build system (`esbuild` via Eleventy) was already configured to handle ES6 modules, so the primary changes involved updating the script inclusion method and verifying compatibility across the codebase.
---
src/_includes/components/footer.njk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/_includes/components/footer.njk b/src/_includes/components/footer.njk
index 14e83bf1..0923ec4b 100644
--- a/src/_includes/components/footer.njk
+++ b/src/_includes/components/footer.njk
@@ -5,4 +5,4 @@
-
+
From abcddae80874b498084d0ede121b41400a39484e Mon Sep 17 00:00:00 2001
From: "google-labs-jules[bot]"
<161369871+google-labs-jules[bot]@users.noreply.github.com>
Date: Tue, 3 Jun 2025 17:32:31 +0000
Subject: [PATCH 2/4] Refactor: Migrate project to ES6 modules and update
PostCSS config
This commit completes the transition to ES6 modules for client-side JavaScript and modernizes the PostCSS configuration.
Key changes:
- I updated the main script tag in `src/_includes/components/footer.njk` to use `type="module"`. This enables modern JavaScript module loading in the browser.
- I verified that the existing JavaScript codebase in `src/assets/js/` is already using ES6 import/export syntax.
- I confirmed that Eleventy data files (`*.11tydata.js`) are compatible with the Node.js ES module environment (`"type": "module"` in `package.json`).
- I updated `postcss.config.cjs` to `postcss.config.js` and updated its syntax to use ES6 `import` and `export default`.
- I ensured the project builds successfully with all these changes using `yarn build`, including correct CSS processing with the updated PostCSS configuration.
- I performed basic runtime tests by starting the development server (`yarn start`) and fetching the homepage.
The project's build system (`esbuild` via Eleventy for JS, and PostCSS for CSS) now consistently uses ES module patterns where applicable for both source code and configuration files.
---
postcss.config.cjs | 9 ---------
postcss.config.js | 13 +++++++++++++
2 files changed, 13 insertions(+), 9 deletions(-)
delete mode 100644 postcss.config.cjs
create mode 100644 postcss.config.js
diff --git a/postcss.config.cjs b/postcss.config.cjs
deleted file mode 100644
index 8fdc058d..00000000
--- a/postcss.config.cjs
+++ /dev/null
@@ -1,9 +0,0 @@
-module.exports = {
- plugins: [
- require('postcss-import'),
- require('postcss-custom-media')(),
- require('postcss-preset-env')({
- stage: 1, // Поддержка черновиков CSS (0-4, где 4 — стабильные)
- })
- ]
-};
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 00000000..cceaafb9
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,13 @@
+import postcssImport from 'postcss-import';
+import postcssCustomMedia from 'postcss-custom-media';
+import postcssPresetEnv from 'postcss-preset-env';
+
+export default {
+ plugins: [
+ postcssImport,
+ postcssCustomMedia(),
+ postcssPresetEnv({
+ stage: 1, // Поддержка черновиков CSS (0-4, где 4 — стабильные)
+ })
+ ]
+};
From f25271af435ad562b19e6310656a8b8b693e02d6 Mon Sep 17 00:00:00 2001
From: "google-labs-jules[bot]"
<161369871+google-labs-jules[bot]@users.noreply.github.com>
Date: Tue, 3 Jun 2025 17:47:32 +0000
Subject: [PATCH 3/4] Refactor: Migrate build scripts to TypeScript
This commit migrates the Eleventy configuration file (`.eleventy.js`) and the asset build script (`build-assets.js`) to TypeScript. Client-side JavaScript remains as ES6 modules.
Key changes:
- Added `typescript` and `@types/node` as dev dependencies.
- Created `tsconfig.json` for TypeScript configuration, targeting a modern Node.js ES module environment.
- Renamed `build-assets.js` to `build-assets.ts` and added type annotations.
- Renamed `.eleventy.js` to `.eleventy.ts` and added type annotations, including `UserConfig` from `@11ty/eleventy`.
- Updated `package.json` scripts (`watch`, `build`) to include a new `compile:config` script. This script uses `esbuild` to compile `.eleventy.ts` and `build-assets.ts` to JavaScript (ESM format) before Eleventy is run.
- Refined `esbuild` commands in `compile:config` to correctly handle external dependencies for Node.js (e.g., `path`, `@11ty/eleventy`, `child_process`, `esbuild` itself) and inter-dependencies between the build scripts (`./build-assets.js` from `.eleventy.ts`).
Both `yarn build` and `yarn start` have been verified to work correctly with the new TypeScript setup, ensuring that the site builds and serves as expected.
---
.eleventy.js | 78 ++++++++++++-----------------------
.eleventy.ts | 85 ++++++++++++++++++++++++++++++++++++++
build-assets.js | 106 ++++++++++++++++++++++--------------------------
build-assets.ts | 66 ++++++++++++++++++++++++++++++
package.json | 9 ++--
tsconfig.json | 32 +++++++++++++++
yarn.lock | 17 ++++++++
7 files changed, 280 insertions(+), 113 deletions(-)
create mode 100644 .eleventy.ts
create mode 100644 build-assets.ts
create mode 100644 tsconfig.json
diff --git a/.eleventy.js b/.eleventy.js
index 72a94392..89f21ec8 100644
--- a/.eleventy.js
+++ b/.eleventy.js
@@ -1,87 +1,58 @@
+// .eleventy.ts
import path from "path";
import { EleventyRenderPlugin } from "@11ty/eleventy";
import eleventyNavigationPlugin from "@11ty/eleventy-navigation";
import buildAssets from "./build-assets.js";
-
-const now = String(Date.now());
-
-// создаем коллекции на основе папок
-// например newsByYear = { 2025: [{}], 2024: [{}], ... }
-const makeCollection = (collection, folderName) => {
+var now = String(Date.now());
+var makeCollection = (collection, folderName) => {
const files = collection.getFilteredByGlob(`./pages/${folderName}/**/*.md`);
return files.reduce((years, post) => {
const year = path.dirname(post.inputPath).split("/").pop();
- if (!years[year]) years[year] = [];
-
- // добавляем в начало
- // years[year].push(post);
+ if (!years[year]) {
+ years[year] = [];
+ }
years[year].unshift(post);
return years;
}, {});
};
-
-export default function (eleventyConfig) {
- // Enable quiet mode to reduce console noise
+function eleventy_default(eleventyConfig) {
eleventyConfig.setQuietMode(true);
-
eleventyConfig.addPlugin(eleventyNavigationPlugin);
-
- // https://www.11ty.dev/docs/plugins/render/#renderfile
eleventyConfig.addPlugin(EleventyRenderPlugin);
-
- // Copy all images directly to dist.
eleventyConfig.addPassthroughCopy({ "src/assets/images": "/assets/images" });
- // Copy robots.txt, etc to dist.
eleventyConfig.addPassthroughCopy({ "src/assets/static/*": "/" });
-
- // папки для создания авто-коллекций
- // @see makeCollection
const folders = ["news"];
folders.forEach((folderName) => {
- eleventyConfig.addCollection(`${folderName}ByYear`, (collection) =>
- makeCollection(collection, folderName)
+ eleventyConfig.addCollection(
+ `${folderName}ByYear`,
+ (collection) => makeCollection(collection, folderName)
);
});
-
- // Отображаем дату в человеко-понятном виде, например 11 февраля
- // @example {{ post.date | getHumanDate }}
- eleventyConfig.addFilter("getHumanDate", function (dateObj) {
+ eleventyConfig.addFilter("getHumanDate", function(dateObj) {
const date = new Date(dateObj);
const options = {
+ // Type options
day: "2-digit",
- month: "long",
- locale: "ru-RU",
+ month: "long"
};
return date.toLocaleDateString("ru-RU", options);
});
-
- // фильтр обрезает коллекцию
- // @example {{ collection | limit(2) }}
- eleventyConfig.addNunjucksFilter("limit", (array, limit) =>
- array.slice(0, limit)
+ eleventyConfig.addNunjucksFilter(
+ "limit",
+ (array, limit) => (
+ // Type array and limit
+ array.slice(0, limit)
+ )
);
-
- // TODO: фильтр для создания архива по годам
- // eleventyConfig.addFilter("getYears", function (collection) {
- // return Object.keys(collection);
- // });
-
- // текущий год доступен глобально
eleventyConfig.addGlobalData(
"getGlobalCurrentYear",
- new Date().getFullYear().toString()
+ (/* @__PURE__ */ new Date()).getFullYear().toString()
);
-
- // Add cache busting with {% version %} time string
- eleventyConfig.addShortcode("version", function () {
+ eleventyConfig.addShortcode("version", function() {
return now;
});
-
- // Build JS and CSS assets
eleventyConfig.on("beforeBuild", buildAssets);
-
eleventyConfig.addWatchTarget("./src/assets/");
-
return {
templateFormats: ["md", "njk", "html"],
dir: {
@@ -89,7 +60,10 @@ export default function (eleventyConfig) {
output: "dist",
includes: "../src/_includes",
data: "../src/_data",
- layouts: "../src/_includes/layouts",
- },
+ layouts: "../src/_includes/layouts"
+ }
};
+}
+export {
+ eleventy_default as default
};
diff --git a/.eleventy.ts b/.eleventy.ts
new file mode 100644
index 00000000..396e1f3f
--- /dev/null
+++ b/.eleventy.ts
@@ -0,0 +1,85 @@
+import path from "path";
+import { EleventyRenderPlugin } from "@11ty/eleventy";
+import eleventyNavigationPlugin from "@11ty/eleventy-navigation";
+import buildAssets from "./build-assets.js"; // Points to the compiled .ts output
+import type { UserConfig, CollectionItem } from "@11ty/eleventy"; // Import UserConfig and CollectionItem
+
+const now: string = String(Date.now());
+
+// Define a type for the 'years' accumulator object in makeCollection
+interface YearCollection {
+ [year: string]: CollectionItem[];
+}
+
+// Define a type for the collection API object passed to makeCollection
+interface EleventyCollectionApi {
+ getFilteredByGlob(glob: string): CollectionItem[];
+}
+
+const makeCollection = (collection: EleventyCollectionApi, folderName: string): YearCollection => {
+ const files: CollectionItem[] = collection.getFilteredByGlob(`./pages/${folderName}/**/*.md`);
+ return files.reduce((years: YearCollection, post: CollectionItem) => {
+ const year = path.dirname(post.inputPath).split("/").pop() as string; // Ensure year is string
+ if (!years[year]) {
+ years[year] = [];
+ }
+ years[year].unshift(post);
+ return years;
+ }, {});
+};
+
+export default function (eleventyConfig: UserConfig): UserConfig { // Type eleventyConfig and return type
+ eleventyConfig.setQuietMode(true);
+ eleventyConfig.addPlugin(eleventyNavigationPlugin);
+ eleventyConfig.addPlugin(EleventyRenderPlugin);
+
+ eleventyConfig.addPassthroughCopy({ "src/assets/images": "/assets/images" });
+ eleventyConfig.addPassthroughCopy({ "src/assets/static/*": "/" });
+
+ const folders: string[] = ["news"];
+ folders.forEach((folderName: string) => {
+ eleventyConfig.addCollection(`${folderName}ByYear`, (collection: EleventyCollectionApi) =>
+ makeCollection(collection, folderName)
+ );
+ });
+
+ eleventyConfig.addFilter("getHumanDate", function (dateObj: string | Date): string { // Type dateObj
+ const date = new Date(dateObj);
+ const options: Intl.DateTimeFormatOptions = { // Type options
+ day: "2-digit",
+ month: "long",
+ };
+ return date.toLocaleDateString("ru-RU", options);
+ });
+
+ eleventyConfig.addNunjucksFilter("limit", (array: any[], limit: number): any[] => // Type array and limit
+ array.slice(0, limit)
+ );
+
+ eleventyConfig.addGlobalData(
+ "getGlobalCurrentYear",
+ new Date().getFullYear().toString()
+ );
+
+ eleventyConfig.addShortcode("version", function (): string {
+ return now;
+ });
+
+ // Type the buildAssets function if its signature is known, otherwise any
+ // Assuming buildAssets is async () => Promise as per build-assets.ts
+ eleventyConfig.on("beforeBuild", buildAssets as () => Promise);
+
+ eleventyConfig.addWatchTarget("./src/assets/");
+
+ // Ensure the return object matches Eleventy's expected config structure (implicitly typed by UserConfig return type)
+ return {
+ templateFormats: ["md", "njk", "html"],
+ dir: {
+ input: "pages",
+ output: "dist",
+ includes: "../src/_includes",
+ data: "../src/_data",
+ layouts: "../src/_includes/layouts",
+ },
+ };
+}
diff --git a/build-assets.js b/build-assets.js
index 6840afcd..d13229df 100644
--- a/build-assets.js
+++ b/build-assets.js
@@ -1,64 +1,54 @@
-import { build } from 'esbuild';
-import { YAMLPlugin } from 'esbuild-yaml';
-import { exec } from 'child_process';
-
-const input = 'src/assets';
-const output = 'dist/assets';
-
-/**
- * Собираем JS файлы
- */
+// build-assets.ts
+import { build } from "esbuild";
+import { YAMLPlugin } from "esbuild-yaml";
+import { exec } from "child_process";
+var input = "src/assets";
+var output = "dist/assets";
async function buildJavaScript(isProduction) {
- console.log('= 1 = Сборка JS файлов...');
- await build({
- entryPoints: [`${input}/js/index.js`],
- bundle: true,
- outdir: `${output}/js`,
- minify: isProduction,
- sourcemap: !isProduction,
- target: 'es6',
- plugins: [YAMLPlugin()],
- });
+ console.log("= 1 = \u0421\u0431\u043E\u0440\u043A\u0430 JS \u0444\u0430\u0439\u043B\u043E\u0432...");
+ const options = {
+ entryPoints: [`${input}/js/index.js`],
+ bundle: true,
+ outdir: `${output}/js`,
+ minify: isProduction,
+ sourcemap: !isProduction,
+ target: "es6",
+ plugins: [YAMLPlugin()]
+ };
+ await build(options);
}
-
-/**
- * Собираем CSS файлы с помощью PostCSS
- */
async function buildStyles(isProduction) {
- console.log('= 2 = Сборка CSS файлов...');
-
- const postcssInputs = [
- `${input}/styles/index.css`,
- `${input}/styles/critical.css`
- ].join(' ');
-
- const noMapOption = isProduction ? '' : '--no-map';
- const postcssCommand = `postcss ${postcssInputs} --dir ${output}/styles --config postcss.config.cjs ${noMapOption}`;
-
- return new Promise((resolve, reject) => {
- exec(postcssCommand, (error, stdout, stderr) => {
- if (error) {
- console.error('PostCSS Error:', stderr);
- console.error('PostCSS Stdout:', stdout); // Also log stdout for more context
- reject(error);
- } else {
- resolve();
- }
- });
+ console.log("= 2 = \u0421\u0431\u043E\u0440\u043A\u0430 CSS \u0444\u0430\u0439\u043B\u043E\u0432...");
+ const postcssInputs = [
+ `${input}/styles/index.css`,
+ `${input}/styles/critical.css`
+ ].join(" ");
+ const noMapOption = isProduction ? "" : "--no-map";
+ const postcssCommand = `postcss ${postcssInputs} --dir ${output}/styles --config postcss.config.js ${noMapOption}`;
+ return new Promise((resolve, reject) => {
+ exec(postcssCommand, (error, stdout, stderr) => {
+ if (error) {
+ console.error("PostCSS Error:", stderr);
+ console.error("PostCSS Stdout:", stdout);
+ reject(error);
+ } else {
+ resolve();
+ }
});
+ });
+}
+async function eleventyBuildAssets() {
+ const isProduction = process.env.NODE_ENV === "production";
+ console.log(`\u041F\u0440\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u043E \u0432 \u043E\u043A\u0440\u0443\u0436\u0435\u043D\u0438\u0438: ${isProduction ? "production" : "development"}`);
+ try {
+ await buildJavaScript(isProduction);
+ await buildStyles(isProduction);
+ console.log("\u2705 CSS \u0438 JS \u0444\u0430\u0439\u043B\u044B \u0441\u043E\u0431\u0440\u0430\u043D\u044B \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E.");
+ } catch (e) {
+ console.error("Overall build failed:", e);
+ process.exit(1);
+ }
}
-
-// Main build function exported for Eleventy
-export default async () => {
- const isProduction = process.env.NODE_ENV === 'production';
- console.log(`Проложение запущено в окружении: ${isProduction ? 'production' : 'development'}`);
-
- try {
- await buildJavaScript(isProduction);
- await buildStyles(isProduction);
- console.log('✅ CSS и JS файлы собраны корректно.');
- } catch (e) {
- console.error('Overall build failed:', e);
- process.exit(1); // Ensure process exits on failure
- }
+export {
+ eleventyBuildAssets as default
};
diff --git a/build-assets.ts b/build-assets.ts
new file mode 100644
index 00000000..0dcba3c1
--- /dev/null
+++ b/build-assets.ts
@@ -0,0 +1,66 @@
+import { build, BuildOptions } from 'esbuild';
+import { YAMLPlugin } from 'esbuild-yaml';
+import { exec, ChildProcess } from 'child_process'; // Import ChildProcess for typing if needed, though exec types from @types/node are usually sufficient
+
+const input: string = 'src/assets';
+const output: string = 'dist/assets';
+
+/**
+ * Собираем JS файлы
+ */
+async function buildJavaScript(isProduction: boolean): Promise {
+ console.log('= 1 = Сборка JS файлов...');
+ const options: BuildOptions = {
+ entryPoints: [`${input}/js/index.js`],
+ bundle: true,
+ outdir: `${output}/js`,
+ minify: isProduction,
+ sourcemap: !isProduction,
+ target: 'es6',
+ plugins: [YAMLPlugin()],
+ };
+ await build(options);
+}
+
+/**
+ * Собираем CSS файлы с помощью PostCSS
+ */
+async function buildStyles(isProduction: boolean): Promise {
+ console.log('= 2 = Сборка CSS файлов...');
+
+ const postcssInputs: string = [
+ `${input}/styles/index.css`,
+ `${input}/styles/critical.css`
+ ].join(' ');
+
+ const noMapOption: string = isProduction ? '' : '--no-map';
+ // IMPORTANT: Update to use postcss.config.js
+ const postcssCommand: string = `postcss ${postcssInputs} --dir ${output}/styles --config postcss.config.js ${noMapOption}`;
+
+ return new Promise((resolve, reject) => {
+ exec(postcssCommand, (error, stdout, stderr) => {
+ if (error) {
+ console.error('PostCSS Error:', stderr);
+ console.error('PostCSS Stdout:', stdout); // Also log stdout for more context
+ reject(error);
+ } else {
+ resolve();
+ }
+ });
+ });
+}
+
+// Main build function exported for Eleventy
+export default async function eleventyBuildAssets(): Promise {
+ const isProduction: boolean = process.env.NODE_ENV === 'production';
+ console.log(`Проложение запущено в окружении: ${isProduction ? 'production' : 'development'}`);
+
+ try {
+ await buildJavaScript(isProduction);
+ await buildStyles(isProduction);
+ console.log('✅ CSS и JS файлы собраны корректно.');
+ } catch (e: any) { // Or unknown, then check type
+ console.error('Overall build failed:', e);
+ process.exit(1); // Ensure process exits on failure
+ }
+}
diff --git a/package.json b/package.json
index 7084b6f7..80fbbac2 100644
--- a/package.json
+++ b/package.json
@@ -11,9 +11,10 @@
},
"scripts": {
"clear": "rm -rf ./dist",
+ "compile:config": "esbuild .eleventy.ts --outfile=.eleventy.js --platform=node --format=esm --bundle --external:path --external:@11ty/eleventy --external:@11ty/eleventy-navigation --external:./build-assets.js && esbuild build-assets.ts --outfile=build-assets.js --platform=node --format=esm --bundle --external:child_process --external:esbuild --external:esbuild-yaml",
"start": "yarn watch",
- "watch": "yarn clear && eleventy --serve --watch",
- "build": "yarn clear && NODE_ENV=production eleventy",
+ "watch": "yarn clear && yarn compile:config && eleventy --serve --watch",
+ "build": "yarn clear && yarn compile:config && NODE_ENV=production eleventy",
"deploy": "yarn build && yarn transfer",
"transfer": "env-cmd -x rsync -az ./dist/ \\$SSH_HOST:\\$SSH_PATH"
},
@@ -27,7 +28,9 @@
"postcss-cli": "^11.0.1",
"postcss-custom-media": "^10.0.4",
"postcss-import": "^16.1.0",
- "postcss-preset-env": "^10.2.0"
+ "postcss-preset-env": "^10.2.0",
+ "typescript": "^5.0.0",
+ "@types/node": "^20.0.0"
},
"dependencies": {
"dayjs": "^1.11.6"
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..8f90e305
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,32 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "ESNext",
+ "moduleResolution": "Bundler", // Or "NodeNext", Bundler is often good with esbuild
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true, // Good for esbuild
+ "strict": true,
+ "noEmit": true, // True if tsc is only for type checking, esbuild handles transpile
+ "skipLibCheck": true, // Optional: Speeds up compilation by not checking lib files
+ "forceConsistentCasingInFileNames": true,
+ "rootDir": ".", // Or specify more granularly if needed
+ "baseUrl": ".", // Helps with path resolution if you use paths
+ "paths": { // Example, adjust if needed
+ "*": ["node_modules/*"]
+ },
+ "lib": ["ESNext", "DOM"] // Include DOM if any client-side types creep into build scripts, otherwise just ESNext
+ },
+ "include": [
+ "build-assets.ts", // To be created
+ ".eleventy.ts" // To be created
+ // Add other TS files or patterns like "src/**/*.ts" if client-side TS was in scope
+ ],
+ "exclude": [
+ "node_modules",
+ "dist",
+ "src/LEGACY", // Exclude legacy JS
+ "pages/**/*.js" // Exclude existing JS page data for now
+ ]
+}
diff --git a/yarn.lock b/yarn.lock
index 5835557d..d50c4ec2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -670,6 +670,13 @@
dependencies:
escape-string-regexp "^5.0.0"
+"@types/node@^20.0.0":
+ version "20.17.57"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.57.tgz#f807455e3303ba8ba08fcb1db90619356abfaa99"
+ integrity sha512-f3T4y6VU4fVQDKVqJV4Uppy8c1p/sVvS3peyqxyWnzkqXFJLRU7Y1Bl7rMS1Qe9z0v4M6McY0Fp9yBsgHJUsWQ==
+ dependencies:
+ undici-types "~6.19.2"
+
a-sync-waterfall@^1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz"
@@ -2306,11 +2313,21 @@ toidentifier@1.0.1:
resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz"
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+typescript@^5.0.0:
+ version "5.8.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e"
+ integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==
+
uc.micro@^2.0.0, uc.micro@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz"
integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==
+undici-types@~6.19.2:
+ version "6.19.8"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
+ integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
+
universalify@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz"
From a8cf6fa0dc86a63a166d65d91f69ecc122043700 Mon Sep 17 00:00:00 2001
From: "google-labs-jules[bot]"
<161369871+google-labs-jules[bot]@users.noreply.github.com>
Date: Tue, 3 Jun 2025 18:10:23 +0000
Subject: [PATCH 4/4] Refactor: Migrate build toolchain to ES Modules and
TypeScript
This commit encompasses several modernization efforts for the project's build process:
1. **Client-side JavaScript to ES Modules:**
* I updated the main script tag in `src/_includes/components/footer.njk` to use `type="module"`.
* I verified that the existing JavaScript codebase in `src/assets/js/` already uses ES6 import/export syntax.
2. **Build Scripts to TypeScript:**
* I migrated Eleventy configuration (`.eleventy.js` -> `.eleventy.ts`) and asset build script (`build-assets.js` -> `build-assets.ts`) to TypeScript.
* I added `typescript`, `@types/node` as dev dependencies.
* I created `tsconfig.json` for TypeScript configuration.
* I updated `package.json` scripts (`watch`, `build`) to include a `compile:config` script. This script uses `esbuild` to compile `.eleventy.ts`, `build-assets.ts` (and now `postcss.config.ts`) to JavaScript (ESM format) before Eleventy is run.
* I refined `esbuild` commands in `compile:config` to correctly handle external dependencies.
3. **PostCSS Configuration to TypeScript:**
* I migrated PostCSS configuration (`postcss.config.cjs` -> `postcss.config.js` (ESM) -> `postcss.config.ts`).
* I updated `tsconfig.json` to include `postcss.config.ts`.
* I added `postcss.config.ts` to the `compile:config` script in `package.json`.
* I installed `tsx` as a dev dependency to allow `postcss-load-config` to correctly process the TypeScript configuration file, even when a compiled `.js` version is present and specified.
I have verified that all build and development server processes (`yarn build`, `yarn start`) work correctly with these changes. Your project now uses a more modern and type-safe toolchain for its configuration and asset bundling processes.
---
package.json | 5 +-
postcss.config.js | 20 ++++--
postcss.config.ts | 21 ++++++
tsconfig.json | 5 +-
yarn.lock | 180 +++++++++++++++++++++++++++++++++++++++++++++-
5 files changed, 219 insertions(+), 12 deletions(-)
create mode 100644 postcss.config.ts
diff --git a/package.json b/package.json
index 80fbbac2..2533bc2f 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
},
"scripts": {
"clear": "rm -rf ./dist",
- "compile:config": "esbuild .eleventy.ts --outfile=.eleventy.js --platform=node --format=esm --bundle --external:path --external:@11ty/eleventy --external:@11ty/eleventy-navigation --external:./build-assets.js && esbuild build-assets.ts --outfile=build-assets.js --platform=node --format=esm --bundle --external:child_process --external:esbuild --external:esbuild-yaml",
+ "compile:config": "esbuild .eleventy.ts --outfile=.eleventy.js --platform=node --format=esm --bundle --external:path --external:@11ty/eleventy --external:@11ty/eleventy-navigation --external:./build-assets.js && esbuild build-assets.ts --outfile=build-assets.js --platform=node --format=esm --bundle --external:child_process --external:esbuild --external:esbuild-yaml && esbuild postcss.config.ts --outfile=postcss.config.js --platform=node --format=esm --bundle --external:postcss-import --external:postcss-custom-media --external:postcss-preset-env",
"start": "yarn watch",
"watch": "yarn clear && yarn compile:config && eleventy --serve --watch",
"build": "yarn clear && yarn compile:config && NODE_ENV=production eleventy",
@@ -30,7 +30,8 @@
"postcss-import": "^16.1.0",
"postcss-preset-env": "^10.2.0",
"typescript": "^5.0.0",
- "@types/node": "^20.0.0"
+ "@types/node": "^20.0.0",
+ "tsx": "^4.7.0"
},
"dependencies": {
"dayjs": "^1.11.6"
diff --git a/postcss.config.js b/postcss.config.js
index cceaafb9..46c88080 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -1,13 +1,19 @@
-import postcssImport from 'postcss-import';
-import postcssCustomMedia from 'postcss-custom-media';
-import postcssPresetEnv from 'postcss-preset-env';
-
-export default {
+// postcss.config.ts
+import postcssImport from "postcss-import";
+import postcssCustomMedia from "postcss-custom-media";
+import postcssPresetEnv from "postcss-preset-env";
+var config = {
plugins: [
- postcssImport,
+ postcssImport(),
+ // postcssImport is a function that returns a plugin
postcssCustomMedia(),
postcssPresetEnv({
- stage: 1, // Поддержка черновиков CSS (0-4, где 4 — стабильные)
+ stage: 1
+ // Поддержка черновиков CSS (0-4, где 4 — стабильные)
})
]
};
+var postcss_config_default = config;
+export {
+ postcss_config_default as default
+};
diff --git a/postcss.config.ts b/postcss.config.ts
new file mode 100644
index 00000000..a68041e1
--- /dev/null
+++ b/postcss.config.ts
@@ -0,0 +1,21 @@
+import postcssImport from 'postcss-import';
+import postcssCustomMedia from 'postcss-custom-media';
+import postcssPresetEnv from 'postcss-preset-env';
+import type { Plugin } from 'postcss'; // General type for PostCSS plugins
+
+// Define a type for the configuration structure if specific one isn't readily available
+interface PostcssConfig {
+ plugins: Plugin[];
+}
+
+const config: PostcssConfig = {
+ plugins: [
+ postcssImport(), // postcssImport is a function that returns a plugin
+ postcssCustomMedia(),
+ postcssPresetEnv({
+ stage: 1, // Поддержка черновиков CSS (0-4, где 4 — стабильные)
+ })
+ ]
+};
+
+export default config;
diff --git a/tsconfig.json b/tsconfig.json
index 8f90e305..b79eca27 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -19,8 +19,9 @@
"lib": ["ESNext", "DOM"] // Include DOM if any client-side types creep into build scripts, otherwise just ESNext
},
"include": [
- "build-assets.ts", // To be created
- ".eleventy.ts" // To be created
+ "build-assets.ts",
+ ".eleventy.ts",
+ "postcss.config.ts"
// Add other TS files or patterns like "src/**/*.ts" if client-side TS was in scope
],
"exclude": [
diff --git a/yarn.lock b/yarn.lock
index d50c4ec2..1be173d2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -497,126 +497,251 @@
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz#499600c5e1757a524990d5d92601f0ac3ce87f64"
integrity sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==
+"@esbuild/aix-ppc64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz#4e0f91776c2b340e75558f60552195f6fad09f18"
+ integrity sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==
+
"@esbuild/android-arm64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz#b9b8231561a1dfb94eb31f4ee056b92a985c324f"
integrity sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==
+"@esbuild/android-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz#bc766407f1718923f6b8079c8c61bf86ac3a6a4f"
+ integrity sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==
+
"@esbuild/android-arm@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.0.tgz#ca6e7888942505f13e88ac9f5f7d2a72f9facd2b"
integrity sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==
+"@esbuild/android-arm@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz#4290d6d3407bae3883ad2cded1081a234473ce26"
+ integrity sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==
+
"@esbuild/android-x64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.0.tgz#e765ea753bac442dfc9cb53652ce8bd39d33e163"
integrity sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==
+"@esbuild/android-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz#40c11d9cbca4f2406548c8a9895d321bc3b35eff"
+ integrity sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==
+
"@esbuild/darwin-arm64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz#fa394164b0d89d4fdc3a8a21989af70ef579fa2c"
integrity sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==
+"@esbuild/darwin-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz#49d8bf8b1df95f759ac81eb1d0736018006d7e34"
+ integrity sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==
+
"@esbuild/darwin-x64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz#91979d98d30ba6e7d69b22c617cc82bdad60e47a"
integrity sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==
+"@esbuild/darwin-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz#e27a5d92a14886ef1d492fd50fc61a2d4d87e418"
+ integrity sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==
+
"@esbuild/freebsd-arm64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz#b97e97073310736b430a07b099d837084b85e9ce"
integrity sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==
+"@esbuild/freebsd-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz#97cede59d638840ca104e605cdb9f1b118ba0b1c"
+ integrity sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==
+
"@esbuild/freebsd-x64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz#f3b694d0da61d9910ec7deff794d444cfbf3b6e7"
integrity sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==
+"@esbuild/freebsd-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz#71c77812042a1a8190c3d581e140d15b876b9c6f"
+ integrity sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==
+
"@esbuild/linux-arm64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz#f921f699f162f332036d5657cad9036f7a993f73"
integrity sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==
+"@esbuild/linux-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz#f7b7c8f97eff8ffd2e47f6c67eb5c9765f2181b8"
+ integrity sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==
+
"@esbuild/linux-arm@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz#cc49305b3c6da317c900688995a4050e6cc91ca3"
integrity sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==
+"@esbuild/linux-arm@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz#2a0be71b6cd8201fa559aea45598dffabc05d911"
+ integrity sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==
+
"@esbuild/linux-ia32@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz#3e0736fcfab16cff042dec806247e2c76e109e19"
integrity sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==
+"@esbuild/linux-ia32@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz#763414463cd9ea6fa1f96555d2762f9f84c61783"
+ integrity sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==
+
"@esbuild/linux-loong64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz#ea2bf730883cddb9dfb85124232b5a875b8020c7"
integrity sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==
+"@esbuild/linux-loong64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz#428cf2213ff786a502a52c96cf29d1fcf1eb8506"
+ integrity sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==
+
"@esbuild/linux-mips64el@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz#4cababb14eede09248980a2d2d8b966464294ff1"
integrity sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==
+"@esbuild/linux-mips64el@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz#5cbcc7fd841b4cd53358afd33527cd394e325d96"
+ integrity sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==
+
"@esbuild/linux-ppc64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz#8860a4609914c065373a77242e985179658e1951"
integrity sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==
+"@esbuild/linux-ppc64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz#0d954ab39ce4f5e50f00c4f8c4fd38f976c13ad9"
+ integrity sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==
+
"@esbuild/linux-riscv64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz#baf26e20bb2d38cfb86ee282dff840c04f4ed987"
integrity sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==
+"@esbuild/linux-riscv64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz#0e7dd30730505abd8088321e8497e94b547bfb1e"
+ integrity sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==
+
"@esbuild/linux-s390x@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz#8323afc0d6cb1b6dc6e9fd21efd9e1542c3640a4"
integrity sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==
+"@esbuild/linux-s390x@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz#5669af81327a398a336d7e40e320b5bbd6e6e72d"
+ integrity sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==
+
"@esbuild/linux-x64@0.25.0":
version "0.25.0"
resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz"
integrity sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==
+"@esbuild/linux-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz#b2357dd153aa49038967ddc1ffd90c68a9d2a0d4"
+ integrity sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==
+
"@esbuild/netbsd-arm64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz#935c6c74e20f7224918fbe2e6c6fe865b6c6ea5b"
integrity sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==
+"@esbuild/netbsd-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz#53b4dfb8fe1cee93777c9e366893bd3daa6ba63d"
+ integrity sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==
+
"@esbuild/netbsd-x64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz#414677cef66d16c5a4d210751eb2881bb9c1b62b"
integrity sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==
+"@esbuild/netbsd-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz#a0206f6314ce7dc8713b7732703d0f58de1d1e79"
+ integrity sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==
+
"@esbuild/openbsd-arm64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz#8fd55a4d08d25cdc572844f13c88d678c84d13f7"
integrity sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==
+"@esbuild/openbsd-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz#2a796c87c44e8de78001d808c77d948a21ec22fd"
+ integrity sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==
+
"@esbuild/openbsd-x64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz#0c48ddb1494bbc2d6bcbaa1429a7f465fa1dedde"
integrity sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==
+"@esbuild/openbsd-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz#28d0cd8909b7fa3953af998f2b2ed34f576728f0"
+ integrity sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==
+
"@esbuild/sunos-x64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz#86ff9075d77962b60dd26203d7352f92684c8c92"
integrity sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==
+"@esbuild/sunos-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz#a28164f5b997e8247d407e36c90d3fd5ddbe0dc5"
+ integrity sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==
+
"@esbuild/win32-arm64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz#849c62327c3229467f5b5cd681bf50588442e96c"
integrity sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==
+"@esbuild/win32-arm64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz#6eadbead38e8bd12f633a5190e45eff80e24007e"
+ integrity sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==
+
"@esbuild/win32-ia32@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz#f62eb480cd7cca088cb65bb46a6db25b725dc079"
integrity sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==
+"@esbuild/win32-ia32@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz#bab6288005482f9ed2adb9ded7e88eba9a62cc0d"
+ integrity sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==
+
"@esbuild/win32-x64@0.25.0":
version "0.25.0"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz#c8e119a30a7c8d60b9d2e22d2073722dde3b710b"
integrity sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==
+"@esbuild/win32-x64@0.25.5":
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz#7fc114af5f6563f19f73324b5d5ff36ece0803d1"
+ integrity sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==
+
"@isaacs/cliui@^8.0.2":
version "8.0.2"
resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz"
@@ -1122,6 +1247,37 @@ esbuild@^0.25.0:
"@esbuild/win32-ia32" "0.25.0"
"@esbuild/win32-x64" "0.25.0"
+esbuild@~0.25.0:
+ version "0.25.5"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.5.tgz#71075054993fdfae76c66586f9b9c1f8d7edd430"
+ integrity sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.25.5"
+ "@esbuild/android-arm" "0.25.5"
+ "@esbuild/android-arm64" "0.25.5"
+ "@esbuild/android-x64" "0.25.5"
+ "@esbuild/darwin-arm64" "0.25.5"
+ "@esbuild/darwin-x64" "0.25.5"
+ "@esbuild/freebsd-arm64" "0.25.5"
+ "@esbuild/freebsd-x64" "0.25.5"
+ "@esbuild/linux-arm" "0.25.5"
+ "@esbuild/linux-arm64" "0.25.5"
+ "@esbuild/linux-ia32" "0.25.5"
+ "@esbuild/linux-loong64" "0.25.5"
+ "@esbuild/linux-mips64el" "0.25.5"
+ "@esbuild/linux-ppc64" "0.25.5"
+ "@esbuild/linux-riscv64" "0.25.5"
+ "@esbuild/linux-s390x" "0.25.5"
+ "@esbuild/linux-x64" "0.25.5"
+ "@esbuild/netbsd-arm64" "0.25.5"
+ "@esbuild/netbsd-x64" "0.25.5"
+ "@esbuild/openbsd-arm64" "0.25.5"
+ "@esbuild/openbsd-x64" "0.25.5"
+ "@esbuild/sunos-x64" "0.25.5"
+ "@esbuild/win32-arm64" "0.25.5"
+ "@esbuild/win32-ia32" "0.25.5"
+ "@esbuild/win32-x64" "0.25.5"
+
escalade@^3.1.1, escalade@^3.2.0:
version "3.2.0"
resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz"
@@ -1241,7 +1397,7 @@ fs-extra@^11.0.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
-fsevents@~2.3.2:
+fsevents@~2.3.2, fsevents@~2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
@@ -1256,6 +1412,13 @@ get-caller-file@^2.0.5:
resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+get-tsconfig@^4.7.5:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e"
+ integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==
+ dependencies:
+ resolve-pkg-maps "^1.0.0"
+
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
@@ -2107,6 +2270,11 @@ require-directory@^2.1.1:
resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+resolve-pkg-maps@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
+ integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
+
resolve@^1.1.7:
version "1.22.2"
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz"
@@ -2313,6 +2481,16 @@ toidentifier@1.0.1:
resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz"
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+tsx@^4.7.0:
+ version "4.19.4"
+ resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.4.tgz#647b4141f4fdd9d773a9b564876773d2846901f4"
+ integrity sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==
+ dependencies:
+ esbuild "~0.25.0"
+ get-tsconfig "^4.7.5"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
typescript@^5.0.0:
version "5.8.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e"