Răsfoiți Sursa

fix: upgrade jsdom, langchain/openai, replace download with https (#797)

* fix: rush-sdk version

* fix: dependabot security

* fix: upgrade jsdom, del translate

* fix: upgrade langchain/openai

* fix: snapshot
chenjiawei.inizio 4 luni în urmă
părinte
comite
e716e43cdd

+ 0 - 2
apps/cli/package.json

@@ -19,13 +19,11 @@
     "fs-extra": "^9.1.0",
     "commander": "^11.0.0",
     "chalk": "^5.3.0",
-    "download": "8.0.0",
     "tar": "7.4.3",
     "inquirer": "^9.2.7",
     "ignore": "~7.0.5"
   },
   "devDependencies": {
-    "@types/download": "8.0.5",
     "@types/fs-extra": "11.0.4",
     "@types/node": "^18",
     "@types/inquirer": "9.0.7",

+ 68 - 31
apps/cli/src/create-app/index.ts

@@ -4,29 +4,59 @@
  */
 
 import path from 'path';
-
 import { execSync } from 'child_process';
 import inquirer from 'inquirer';
 import fs from 'fs-extra';
 import chalk from 'chalk';
-import download from 'download';
 import * as tar from 'tar';
-
-const args = process.argv.slice(2);
+import https from 'https';
 
 const updateFlowGramVersions = (dependencies: any[], latestVersion: string) => {
-  for(const packageName in dependencies) {
+  for (const packageName in dependencies) {
     if (packageName.startsWith('@flowgram.ai')) {
-      dependencies[packageName] = latestVersion
+      dependencies[packageName] = latestVersion;
     }
   }
+};
+
+// 使用 https 下载文件
+function downloadFile(url: string, dest: string): Promise<void> {
+  return new Promise((resolve, reject) => {
+    const file = fs.createWriteStream(dest);
+
+    https
+      .get(url, (response) => {
+        if (response.statusCode !== 200) {
+          reject(new Error(`Download failed: ${response.statusCode}`));
+          return;
+        }
+
+        response.pipe(file);
+
+        file.on('finish', () => {
+          file.close();
+          resolve();
+        });
+      })
+      .on('error', (err) => {
+        fs.unlink(dest, () => reject(err));
+      });
+
+    file.on('error', (err) => {
+      fs.unlink(dest, () => reject(err));
+    });
+  });
 }
 
 export const createApp = async (projectName?: string) => {
   console.log(chalk.green('Welcome to @flowgram.ai/create-app CLI!'));
-  const latest = execSync('npm view @flowgram.ai/demo-fixed-layout version --tag=latest latest').toString().trim();
+  const latest = execSync(
+    'npm view @flowgram.ai/demo-fixed-layout version --tag=latest latest'
+  )
+    .toString()
+    .trim();
 
-  let folderName = ''
+  let folderName = '';
 
   if (!projectName) {
     // 询问用户选择 demo 项目
@@ -42,14 +72,23 @@ export const createApp = async (projectName?: string) => {
           { name: 'Free Layout Demo Simple', value: 'demo-free-layout-simple' },
           { name: 'Free Layout Nextjs Demo', value: 'demo-nextjs' },
           { name: 'Free Layout Vite Demo Simple', value: 'demo-vite' },
-          { name: 'Demo Playground for infinite canvas', value: 'demo-playground' }
+          { name: 'Demo Playground for infinite canvas', value: 'demo-playground' },
         ],
       },
     ]);
 
     folderName = repo;
   } else {
-    if (['fixed-layout', 'free-layout', 'fixed-layout-simple', 'free-layout-simple', 'playground', 'nextjs'].includes(projectName)) {
+    if (
+      [
+        'fixed-layout',
+        'free-layout',
+        'fixed-layout-simple',
+        'free-layout-simple',
+        'playground',
+        'nextjs',
+      ].includes(projectName)
+    ) {
       folderName = `demo-${projectName}`;
     } else {
       console.error('Invalid projectName. Please run "npx create-app" to choose demo.');
@@ -59,45 +98,47 @@ export const createApp = async (projectName?: string) => {
 
   try {
     const targetDir = path.join(process.cwd());
+
     // 下载 npm 包的 tarball
     const downloadPackage = async () => {
       try {
-        // 从 npm registry 下载 tarball 文件
-        const tarballBuffer = await download(`https://registry.npmjs.org/@flowgram.ai/${folderName}/-/${folderName}-${latest}.tgz`);
-
-        // 确保目标文件夹存在
-        fs.ensureDirSync(targetDir);
-
-        // 创建一个临时文件名来保存 tarball 数据
+        const url = `https://registry.npmjs.org/@flowgram.ai/${folderName}/-/${folderName}-${latest}.tgz`;
         const tempTarballPath = path.join(process.cwd(), `${folderName}.tgz`);
 
-        // 将下载的 tarball 写入临时文件
-        fs.writeFileSync(tempTarballPath, tarballBuffer);
+        console.log(chalk.blue(`Downloading ${url} ...`));
+        await downloadFile(url, tempTarballPath);
+
+        fs.ensureDirSync(targetDir);
 
-        // 解压 tarball 文件到目标文件夹
         await tar.x({
           file: tempTarballPath,
           C: targetDir,
         });
 
-        fs.renameSync(path.join(targetDir, 'package'), path.join(targetDir, folderName))
+        fs.renameSync(
+          path.join(targetDir, 'package'),
+          path.join(targetDir, folderName)
+        );
 
-        // 删除下载的 tarball 文件
         fs.unlinkSync(tempTarballPath);
         return true;
-
       } catch (error) {
         console.error(`Error downloading or extracting package: ${error}`);
         return false;
       }
     };
+
     const res = await downloadPackage();
 
-    // 下载完成后,执行操作,替换 package.json 文件内部的所有 @flowgram.ai 包版本为 latest
+    // 替换 package.json 内部的 @flowgram.ai 包版本为 latest
     const pkgJsonPath = path.join(targetDir, folderName, 'package.json');
     const data = fs.readFileSync(pkgJsonPath, 'utf-8');
 
-    const packageLatestVersion = execSync('npm view @flowgram.ai/core version --tag=latest latest').toString().trim();
+    const packageLatestVersion = execSync(
+      'npm view @flowgram.ai/core version --tag=latest latest'
+    )
+      .toString()
+      .trim();
 
     const jsonData = JSON.parse(data);
     if (jsonData.dependencies) {
@@ -108,23 +149,19 @@ export const createApp = async (projectName?: string) => {
       updateFlowGramVersions(jsonData.devDependencies, packageLatestVersion);
     }
 
-    // 修改完成后写入
     fs.writeFileSync(pkgJsonPath, JSON.stringify(jsonData, null, 2), 'utf-8');
 
     if (res) {
-      // 克隆项目
       console.log(chalk.green(`${folderName} Demo project created successfully!`));
-
       console.log(chalk.yellow('Run the following commands to start:'));
       console.log(chalk.cyan(`  cd ${folderName}`));
       console.log(chalk.cyan('  npm install'));
       console.log(chalk.cyan('  npm start'));
     } else {
-      console.log(chalk.red('Download failed'))
+      console.log(chalk.red('Download failed'));
     }
-
   } catch (error) {
     console.error('Error downloading repo:', error);
     return;
   }
-}
+};

+ 0 - 1
apps/cli/src/materials/materials.ts

@@ -22,7 +22,6 @@ const _types: string[] = [
   "effects",
   "plugins",
   "shared",
-  "typings",
   "validate",
   "form-plugins",
   "hooks",

+ 58 - 4
apps/cli/src/utils/npm.ts

@@ -5,8 +5,10 @@
 
 import { execSync } from 'child_process';
 import { existsSync } from 'fs';
+import fs from 'fs-extra';
 import path from 'path';
-import download from 'download';
+import https from 'https';
+import * as tar from 'tar';
 
 export async function getLatestVersion(packageName: string): Promise<string> {
   return execSync(`npm view ${packageName} version --tag=latest`)
@@ -14,6 +16,35 @@ export async function getLatestVersion(packageName: string): Promise<string> {
     .trim();
 }
 
+// 使用 https 下载文件
+function downloadFile(url: string, dest: string): Promise<void> {
+  return new Promise((resolve, reject) => {
+    const file = fs.createWriteStream(dest);
+
+    https
+      .get(url, (response) => {
+        if (response.statusCode !== 200) {
+          reject(new Error(`Download failed: ${response.statusCode}`));
+          return;
+        }
+
+        response.pipe(file);
+
+        file.on('finish', () => {
+          file.close();
+          resolve();
+        });
+      })
+      .on('error', (err) => {
+        fs.unlink(dest, () => reject(err));
+      });
+
+    file.on('error', (err) => {
+      fs.unlink(dest, () => reject(err));
+    });
+  });
+}
+
 export async function loadNpm(packageName: string): Promise<string> {
   const packageLatestVersion = await getLatestVersion(packageName);
 
@@ -26,18 +57,41 @@ export async function loadNpm(packageName: string): Promise<string> {
     return packagePath;
   }
 
-  // download else
   try {
+    // 获取 tarball 地址
     const tarballUrl = execSync(
       `npm view ${packageName}@${packageLatestVersion} dist.tarball`,
     )
       .toString()
       .trim();
-    await download(tarballUrl, packagePath, { extract: true, strip: 1 });
+
+    // 临时 tarball 路径
+    const tempTarballPath = path.join(
+      __dirname,
+      `./.download/${packageName}-${packageLatestVersion}.tgz`,
+    );
+
+    // 确保目录存在
+    fs.ensureDirSync(path.dirname(tempTarballPath));
+
+    // 下载 tarball
+    await downloadFile(tarballUrl, tempTarballPath);
+
+    fs.ensureDirSync(packagePath);
+
+    // 解压到目标目录
+    await tar.x({
+      file: tempTarballPath,
+      cwd: packagePath,
+      strip: 1,
+    });
+
+    // 删除临时文件
+    fs.unlinkSync(tempTarballPath);
+
     return packagePath;
   } catch (error) {
     console.error(`Error downloading or extracting package: ${error}`);
     throw error;
   }
 }
-

+ 0 - 2
apps/create-app/package.json

@@ -19,12 +19,10 @@
     "fs-extra": "^9.1.0",
     "commander": "^11.0.0",
     "chalk": "^5.3.0",
-    "download": "8.0.0",
     "tar": "7.4.3",
     "inquirer": "^9.2.7"
   },
   "devDependencies": {
-    "@types/download": "8.0.5",
     "@types/fs-extra": "11.0.4",
     "@types/node": "^18",
     "@types/inquirer": "9.0.7",

+ 70 - 38
apps/create-app/src/index.ts

@@ -4,35 +4,68 @@
  */
 
 import path from 'path';
-
 import { execSync } from 'child_process';
 import inquirer from 'inquirer';
 import fs from 'fs-extra';
 import { Command } from 'commander';
 import chalk from 'chalk';
-import download from 'download';
 import * as tar from 'tar';
+import https from 'https';
+import http from 'http';
 
 const program = new Command();
-
 const args = process.argv.slice(2);
 
 const updateFlowGramVersions = (dependencies: any[], latestVersion: string) => {
-  for(const packageName in dependencies) {
+  for (const packageName in dependencies) {
     if (packageName.startsWith('@flowgram.ai')) {
-      dependencies[packageName] = latestVersion
+      dependencies[packageName] = latestVersion;
     }
   }
+};
+
+// 使用 http/https 下载文件
+function downloadFile(url: string, dest: string): Promise<void> {
+  return new Promise((resolve, reject) => {
+    const lib = url.startsWith('https') ? https : http;
+
+    const file = fs.createWriteStream(dest);
+
+    const request = lib.get(url, (response) => {
+      if (response.statusCode !== 200) {
+        reject(new Error(`Download failed: ${response.statusCode}`));
+        return;
+      }
+
+      response.pipe(file);
+
+      file.on('finish', () => {
+        file.close();
+        resolve();
+      });
+    });
+
+    request.on('error', (err) => {
+      fs.unlink(dest, () => reject(err));
+    });
+
+    file.on('error', (err) => {
+      fs.unlink(dest, () => reject(err));
+    });
+  });
 }
 
 const main = async () => {
-  console.log(chalk.green('Welcome to @flowgram.ai/create-app CLI!'));
-  const latest = execSync('npm view @flowgram.ai/demo-fixed-layout version --tag=latest latest').toString().trim();
+  console.log(chalk.green('Welcome to @flowgram.ai/create-app CLI!123123'));
+  const latest = execSync(
+    'npm view @flowgram.ai/demo-fixed-layout version --tag=latest latest'
+  )
+    .toString()
+    .trim();
 
-  let folderName = ''
+  let folderName = '';
 
   if (!args?.length) {
-    // 询问用户选择 demo 项目
     const { repo } = await inquirer.prompt([
       {
         type: 'list',
@@ -45,14 +78,23 @@ const main = async () => {
           { name: 'Free Layout Demo Simple', value: 'demo-free-layout-simple' },
           { name: 'Free Layout Nextjs Demo', value: 'demo-nextjs' },
           { name: 'Free Layout Vite Demo Simple', value: 'demo-vite' },
-          { name: 'Demo Playground for infinite canvas', value: 'demo-playground' }
+          { name: 'Demo Playground for infinite canvas', value: 'demo-playground' },
         ],
       },
     ]);
 
     folderName = repo;
   } else {
-    if (['fixed-layout', 'free-layout', 'fixed-layout-simple', 'free-layout-simple', 'playground', 'nextjs'].includes(args[0])) {
+    if (
+      [
+        'fixed-layout',
+        'free-layout',
+        'fixed-layout-simple',
+        'free-layout-simple',
+        'playground',
+        'nextjs',
+      ].includes(args[0])
+    ) {
       folderName = `demo-${args[0]}`;
     } else {
       console.error('Invalid argument. Please run "npx create-app" to choose demo.');
@@ -62,45 +104,42 @@ const main = async () => {
 
   try {
     const targetDir = path.join(process.cwd());
-    // 下载 npm 包的 tarball
+
     const downloadPackage = async () => {
       try {
-        // 从 npm registry 下载 tarball 文件
-        const tarballBuffer = await download(`https://registry.npmjs.org/@flowgram.ai/${folderName}/-/${folderName}-${latest}.tgz`);
-
-        // 确保目标文件夹存在
-        fs.ensureDirSync(targetDir);
-
-        // 创建一个临时文件名来保存 tarball 数据
         const tempTarballPath = path.join(process.cwd(), `${folderName}.tgz`);
+        const url = `https://registry.npmjs.org/@flowgram.ai/${folderName}/-/${folderName}-${latest}.tgz`;
+
+        console.log(chalk.blue(`Downloading ${url} ...`));
+        await downloadFile(url, tempTarballPath);
 
-        // 将下载的 tarball 写入临时文件
-        fs.writeFileSync(tempTarballPath, tarballBuffer);
+        fs.ensureDirSync(targetDir);
 
-        // 解压 tarball 文件到目标文件夹
         await tar.x({
           file: tempTarballPath,
           C: targetDir,
         });
 
-        fs.renameSync(path.join(targetDir, 'package'), path.join(targetDir, folderName))
-
-        // 删除下载的 tarball 文件
+        fs.renameSync(path.join(targetDir, 'package'), path.join(targetDir, folderName));
         fs.unlinkSync(tempTarballPath);
-        return true;
 
+        return true;
       } catch (error) {
         console.error(`Error downloading or extracting package: ${error}`);
         return false;
       }
     };
+
     const res = await downloadPackage();
 
-    // 下载完成后,执行操作,替换 package.json 文件内部的所有 @flowgram.ai 包版本为 latest
     const pkgJsonPath = path.join(targetDir, folderName, 'package.json');
     const data = fs.readFileSync(pkgJsonPath, 'utf-8');
 
-    const packageLatestVersion = execSync('npm view @flowgram.ai/core version --tag=latest latest').toString().trim();
+    const packageLatestVersion = execSync(
+      'npm view @flowgram.ai/core version --tag=latest latest'
+    )
+      .toString()
+      .trim();
 
     const jsonData = JSON.parse(data);
     if (jsonData.dependencies) {
@@ -111,31 +150,24 @@ const main = async () => {
       updateFlowGramVersions(jsonData.devDependencies, packageLatestVersion);
     }
 
-    // 修改完成后写入
     fs.writeFileSync(pkgJsonPath, JSON.stringify(jsonData, null, 2), 'utf-8');
 
     if (res) {
-      // 克隆项目
       console.log(chalk.green(`${folderName} Demo project created successfully!`));
-
       console.log(chalk.yellow('Run the following commands to start:'));
       console.log(chalk.cyan(`  cd ${folderName}`));
       console.log(chalk.cyan('  npm install'));
       console.log(chalk.cyan('  npm start'));
     } else {
-      console.log(chalk.red('Download failed'))
+      console.log(chalk.red('Download failed'));
     }
-
   } catch (error) {
     console.error('Error downloading repo:', error);
     return;
   }
-}
-
-program
-  .version('1.0.0')
-  .description('Create a demo project')
+};
 
+program.version('1.0.0').description('Create a demo project');
 program.parse(process.argv);
 
 main();

+ 1 - 4
apps/docs/package.json

@@ -7,9 +7,7 @@
     "docs": "cross-env NODE_OPTIONS=--max-old-space-size=8192 tsx ./scripts/auto-generate.ts",
     "dev": "rspress dev",
     "lint": "eslint ./components --cache",
-    "preview": "rspress preview",
-    "translate:zh": "tsx ./scripts/translate.ts zh",
-    "translate:en": "tsx ./scripts/translate.ts en"
+    "preview": "rspress preview"
   },
   "dependencies": {
     "@rspress/core": "2.0.0-beta.24",
@@ -57,7 +55,6 @@
     "eslint": "^8.54.0",
     "globals": "^15.11.0",
     "typescript-eslint": "^8.8.1",
-    "openai": "~4.98.0",
     "dotenv": "~16.5.0",
     "tsx": "~4.19.4",
     "shx": "0.4.0",

+ 0 - 154
apps/docs/scripts/translate.ts

@@ -1,154 +0,0 @@
-/**
- * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
- * SPDX-License-Identifier: MIT
- */
-
-/**
- * How to use it:
- * - cd apps/docs
- * - Add apps/docs/.env file, to set OPENAI_API_KEY, OPENAI_BASE_URL, OPENAI_MODEL
- * - Use `git add .` to add all changed docs to git staged changes
- * - Run `npm run translate:zh` to translate all zh files to en
- */
-
-import * as process from 'process';
-import path from 'path';
-import fs from 'fs';
-import { execSync } from 'child_process';
-
-import { ChatCompletionMessageParam } from 'openai/resources/chat';
-import OpenAI from 'openai';
-
-// eslint-disable-next-line import/no-extraneous-dependencies
-import 'dotenv/config';
-
-const languages = ['zh', 'en'];
-const __dirname = path.dirname(new URL(import.meta.url).pathname);
-
-const ai = new OpenAI({
-  apiKey: process.env.OPENAI_API_KEY,
-  baseURL: process.env.OPENAI_BASE_URL,
-});
-const model = process.env.OPENAI_MODEL!;
-
-const sourceLang = process.argv[2];
-
-if (!languages.includes(sourceLang)) {
-  console.error(`Invalid language: ${sourceLang}`);
-  process.exit(1);
-}
-
-const targetLangs = languages.filter((_lang) => _lang !== sourceLang);
-
-async function translateContent(
-  content: string,
-  targetLang: string,
-  previousTargetContent?: string
-) {
-  let systemPrompts = `
-You are a translator.
-You will translate the following content from ${sourceLang} to ${targetLang}.\n
-`;
-
-  console.log('previousTargetContent', previousTargetContent);
-
-  //   if (previousTargetContent) {
-  //     systemPrompts += `
-  // The target file is translated previously, here is the content:
-  // ${previousTargetContent}
-  // Only translate the content that is different in ${sourceLang}.\n
-  // `;
-  //   }
-
-  systemPrompts += `
-Constraint:
-- ONLY RETURN THE TRANSLATED CONTENT, NO OTHER TEXT.
-  `;
-
-  const messages: ChatCompletionMessageParam[] = [
-    {
-      role: 'system',
-      content: systemPrompts,
-    },
-    { role: 'user', content },
-  ];
-
-  const response = await ai.chat.completions.create({
-    model,
-    messages,
-  });
-
-  return response.choices[0].message.content ?? '';
-}
-
-async function translateFiles() {
-  // 1. Get Stage Changed Documentations for source language
-  const gitDiffOutput = execSync('git diff --cached --name-only', {
-    encoding: 'utf-8',
-  });
-  const allChangedFiles: string[] = gitDiffOutput.split('\n').filter(Boolean);
-
-  console.log('Get Diff files:', allChangedFiles);
-
-  const sourceLangFolder = path.join(__dirname, '../src', sourceLang);
-  const sourceLangFolderAbs = path.join('apps/docs/src', sourceLang);
-
-  // Find all *.md, *.mdx files in sourceLangFolder
-  const diffMarkdownFiles: string[] = allChangedFiles
-    .filter(
-      (file) =>
-        file.includes(sourceLangFolderAbs) && (file.endsWith('.md') || file.endsWith('.mdx'))
-    )
-    .map((file) => path.relative(sourceLangFolderAbs, file));
-
-  console.log('Files to be translated:', diffMarkdownFiles);
-
-  // 2. For each file, translate it to other language
-  await Promise.all(
-    diffMarkdownFiles.map(async (file) => {
-      for (const targetLang of targetLangs) {
-        const targetLangFolder = path.join(__dirname, '../src', targetLang);
-
-        const sourceFile = path.join(sourceLangFolder, file);
-        const targetFile = path.join(targetLangFolder, file);
-
-        if (!fs.existsSync(sourceFile)) {
-          console.error(`Source file not found: ${sourceFile}`);
-          continue;
-        }
-
-        // 2.1. Read the file
-        const sourceContent = fs.readFileSync(sourceFile, 'utf-8');
-
-        console.log(`Translate ${sourceFile} to ${targetFile}`);
-        console.log(sourceContent);
-        console.log('\n\n\n\n\n');
-
-        const previousTargetContent = fs.existsSync(targetFile)
-          ? fs.readFileSync(targetFile, 'utf-8')
-          : undefined;
-
-        // 2.2. Translate the content
-        const targetContent = await translateContent(
-          sourceContent,
-          targetLang,
-          previousTargetContent
-        );
-
-        // 2.3. Write the translated file
-        if (!fs.existsSync(path.dirname(targetFile))) {
-          fs.mkdirSync(path.dirname(targetFile), { recursive: true });
-        }
-        fs.writeFileSync(targetFile, targetContent);
-
-        console.log(`Translated: ${targetFile}`);
-        console.log(targetContent);
-        console.log('\n\n\n\n\n');
-      }
-    })
-  );
-}
-
-translateFiles().catch((err) => {
-  console.error('Error generating docs:', err);
-});

+ 1 - 1
common/autoinstallers/rush-commitlint/package.json

@@ -11,7 +11,7 @@
   "dependencies": {
     "@commitlint/cli": "^17.2.0",
     "@commitlint/config-conventional": "^17.2.0",
-    "@rushstack/rush-sdk": "5.100.2",
+    "@rushstack/rush-sdk": "^5.150.0",
     "commitizen": "^4.2.6",
     "cz-customizable": "^7.2.1"
   },

+ 117 - 208
common/autoinstallers/rush-commitlint/pnpm-lock.yaml

@@ -1,9 +1,5 @@
 lockfileVersion: '6.0'
 
-settings:
-  autoInstallPeers: true
-  excludeLinksFromLockfile: false
-
 dependencies:
   '@commitlint/cli':
     specifier: ^17.2.0
@@ -12,8 +8,8 @@ dependencies:
     specifier: ^17.2.0
     version: 17.8.1
   '@rushstack/rush-sdk':
-    specifier: 5.100.2
-    version: 5.100.2(@types/node@20.17.24)
+    specifier: ^5.150.0
+    version: 5.150.0(@types/node@20.17.24)
   commitizen:
     specifier: ^4.2.6
     version: 4.3.1(@types/node@20.17.24)(typescript@5.8.2)
@@ -295,8 +291,26 @@ packages:
       '@jridgewell/sourcemap-codec': 1.5.0
     dev: false
 
-  /@rushstack/node-core-library@3.59.6(@types/node@20.17.24):
-    resolution: {integrity: sha512-bMYJwNFfWXRNUuHnsE9wMlW/mOB4jIwSUkRKtu02CwZhQdmzMsUbxE0s1xOLwTpNIwlzfW/YT7OnOHgDffLgYg==}
+  /@pnpm/lockfile.types@1.0.3:
+    resolution: {integrity: sha512-A7vUWktnhDkrIs+WmXm7AdffJVyVYJpQUEouya/DYhB+Y+tQ3BXjZ6CV0KybqLgI/8AZErgCJqFxA0GJH6QDjA==}
+    engines: {node: '>=18.12'}
+    dependencies:
+      '@pnpm/patching.types': 1.0.0
+      '@pnpm/types': 12.2.0
+    dev: false
+
+  /@pnpm/patching.types@1.0.0:
+    resolution: {integrity: sha512-juCdQCC1USqLcOhVPl1tYReoTO9YH4fTullMnFXXcmpsDM7Dkn3tzuOQKC3oPoJ2ozv+0EeWWMtMGqn2+IM3pQ==}
+    engines: {node: '>=18.12'}
+    dev: false
+
+  /@pnpm/types@12.2.0:
+    resolution: {integrity: sha512-5RtwWhX39j89/Tmyv2QSlpiNjErA357T/8r1Dkg+2lD3P7RuS7Xi2tChvmOC3VlezEFNcWnEGCOeKoGRkDuqFA==}
+    engines: {node: '>=18.12'}
+    dev: false
+
+  /@rushstack/lookup-by-path@0.5.9(@types/node@20.17.24):
+    resolution: {integrity: sha512-xGdjy6Mj2FDccpzo+wGDWmQoTzZQDjlEFNWbiKeIdA/TkIcOoK+6t0Ppka4XE+od0vggZD6Hqk9kZoXuY8lu+A==}
     peerDependencies:
       '@types/node': '*'
     peerDependenciesMeta:
@@ -304,25 +318,61 @@ packages:
         optional: true
     dependencies:
       '@types/node': 20.17.24
-      colors: 1.2.5
-      fs-extra: 7.0.1
+    dev: false
+
+  /@rushstack/node-core-library@5.11.0(@types/node@20.17.24):
+    resolution: {integrity: sha512-I8+VzG9A0F3nH2rLpPd7hF8F7l5Xb7D+ldrWVZYegXM6CsKkvWc670RlgK3WX8/AseZfXA/vVrh0bpXe2Y2UDQ==}
+    peerDependencies:
+      '@types/node': '*'
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
+    dependencies:
+      '@types/node': 20.17.24
+      ajv: 8.13.0
+      ajv-draft-04: 1.0.0(ajv@8.13.0)
+      ajv-formats: 3.0.1(ajv@8.13.0)
+      fs-extra: 11.3.0
       import-lazy: 4.0.0
       jju: 1.4.0
       resolve: 1.22.10
       semver: 7.5.4
-      z-schema: 5.0.5
     dev: false
 
-  /@rushstack/rush-sdk@5.100.2(@types/node@20.17.24):
-    resolution: {integrity: sha512-+4DKbXj6R8vilRYswH8Lb+WIuIoD29/ZjMmazKBKXJTm3x7sgGJy45ozAZbfeXvdOTzqsg11NzIbwaDm8rRhLQ==}
+  /@rushstack/package-deps-hash@4.3.10(@types/node@20.17.24):
+    resolution: {integrity: sha512-jqKuD39WnG7E82Y7D5c2yAJLQRC/kv/C6PkPeGcegDl7owmt1pxfiRsoMqK+8W3z2eg4wa4VtuT/DtiLYTDGew==}
     dependencies:
-      '@rushstack/node-core-library': 3.59.6(@types/node@20.17.24)
-      '@types/node-fetch': 2.6.2
+      '@rushstack/node-core-library': 5.11.0(@types/node@20.17.24)
+    transitivePeerDependencies:
+      - '@types/node'
+    dev: false
+
+  /@rushstack/rush-sdk@5.150.0(@types/node@20.17.24):
+    resolution: {integrity: sha512-ReSRRDgtBIwD0uJFzNOp9ahAFOAi5gxhtVYgoQNcgdzOOLxqKdTFOo4saKKuSfxH74GEz8ZaDdkuj/0nQDBWZg==}
+    dependencies:
+      '@pnpm/lockfile.types': 1.0.3
+      '@rushstack/lookup-by-path': 0.5.9(@types/node@20.17.24)
+      '@rushstack/node-core-library': 5.11.0(@types/node@20.17.24)
+      '@rushstack/package-deps-hash': 4.3.10(@types/node@20.17.24)
+      '@rushstack/terminal': 0.15.0(@types/node@20.17.24)
       tapable: 2.2.1
     transitivePeerDependencies:
       - '@types/node'
     dev: false
 
+  /@rushstack/terminal@0.15.0(@types/node@20.17.24):
+    resolution: {integrity: sha512-vXQPRQ+vJJn4GVqxkwRe+UGgzNxdV8xuJZY2zem46Y0p3tlahucH9/hPmLGj2i9dQnUBFiRnoM9/KW7PYw8F4Q==}
+    peerDependencies:
+      '@types/node': '*'
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
+    dependencies:
+      '@rushstack/node-core-library': 5.11.0(@types/node@20.17.24)
+      '@types/node': 20.17.24
+      supports-color: 8.1.1
+    dev: false
+
   /@tsconfig/node10@1.0.11:
     resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
     dev: false
@@ -351,13 +401,6 @@ packages:
     resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
     dev: false
 
-  /@types/node-fetch@2.6.2:
-    resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==}
-    dependencies:
-      '@types/node': 20.17.24
-      form-data: 3.0.3
-    dev: false
-
   /@types/node@20.17.24:
     resolution: {integrity: sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==}
     dependencies:
@@ -392,6 +435,37 @@ packages:
     hasBin: true
     dev: false
 
+  /ajv-draft-04@1.0.0(ajv@8.13.0):
+    resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==}
+    peerDependencies:
+      ajv: ^8.5.0
+    peerDependenciesMeta:
+      ajv:
+        optional: true
+    dependencies:
+      ajv: 8.13.0
+    dev: false
+
+  /ajv-formats@3.0.1(ajv@8.13.0):
+    resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+    peerDependencies:
+      ajv: ^8.0.0
+    peerDependenciesMeta:
+      ajv:
+        optional: true
+    dependencies:
+      ajv: 8.13.0
+    dev: false
+
+  /ajv@8.13.0:
+    resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==}
+    dependencies:
+      fast-deep-equal: 3.1.3
+      json-schema-traverse: 1.0.0
+      require-from-string: 2.0.2
+      uri-js: 4.4.1
+    dev: false
+
   /ajv@8.17.1:
     resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
     dependencies:
@@ -459,10 +533,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: false
 
-  /asynckit@0.4.0:
-    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
-    dev: false
-
   /at-least-node@1.0.0:
     resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
     engines: {node: '>= 4.0.0'}
@@ -510,14 +580,6 @@ packages:
     engines: {node: '>=6'}
     dev: false
 
-  /call-bind-apply-helpers@1.0.2:
-    resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
-    engines: {node: '>= 0.4'}
-    dependencies:
-      es-errors: 1.3.0
-      function-bind: 1.1.2
-    dev: false
-
   /callsites@3.1.0:
     resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
     engines: {node: '>=6'}
@@ -628,25 +690,6 @@ packages:
     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
     dev: false
 
-  /colors@1.2.5:
-    resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==}
-    engines: {node: '>=0.1.90'}
-    dev: false
-
-  /combined-stream@1.0.8:
-    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
-    engines: {node: '>= 0.8'}
-    dependencies:
-      delayed-stream: 1.0.0
-    dev: false
-
-  /commander@9.5.0:
-    resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
-    engines: {node: ^12.20.0 || >=14}
-    requiresBuild: true
-    dev: false
-    optional: true
-
   /commitizen@4.3.1(@types/node@20.17.24)(typescript@5.8.2):
     resolution: {integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==}
     engines: {node: '>= 12'}
@@ -846,11 +889,6 @@ packages:
       clone: 1.0.4
     dev: false
 
-  /delayed-stream@1.0.0:
-    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
-    engines: {node: '>=0.4.0'}
-    dev: false
-
   /detect-file@1.0.0:
     resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
     engines: {node: '>=0.10.0'}
@@ -873,15 +911,6 @@ packages:
       is-obj: 2.0.0
     dev: false
 
-  /dunder-proto@1.0.1:
-    resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      es-errors: 1.3.0
-      gopd: 1.2.0
-    dev: false
-
   /editor@1.0.0:
     resolution: {integrity: sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==}
     dev: false
@@ -903,33 +932,6 @@ packages:
       is-arrayish: 0.2.1
     dev: false
 
-  /es-define-property@1.0.1:
-    resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
-    engines: {node: '>= 0.4'}
-    dev: false
-
-  /es-errors@1.3.0:
-    resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
-    engines: {node: '>= 0.4'}
-    dev: false
-
-  /es-object-atoms@1.1.1:
-    resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
-    engines: {node: '>= 0.4'}
-    dependencies:
-      es-errors: 1.3.0
-    dev: false
-
-  /es-set-tostringtag@2.1.0:
-    resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
-    engines: {node: '>= 0.4'}
-    dependencies:
-      es-errors: 1.3.0
-      get-intrinsic: 1.3.0
-      has-tostringtag: 1.0.2
-      hasown: 2.0.2
-    dev: false
-
   /escalade@3.2.0:
     resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
     engines: {node: '>=6'}
@@ -1046,16 +1048,6 @@ packages:
       resolve-dir: 1.0.1
     dev: false
 
-  /form-data@3.0.3:
-    resolution: {integrity: sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==}
-    engines: {node: '>= 6'}
-    dependencies:
-      asynckit: 0.4.0
-      combined-stream: 1.0.8
-      es-set-tostringtag: 2.1.0
-      mime-types: 2.1.35
-    dev: false
-
   /fs-extra@11.3.0:
     resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
     engines: {node: '>=14.14'}
@@ -1065,15 +1057,6 @@ packages:
       universalify: 2.0.1
     dev: false
 
-  /fs-extra@7.0.1:
-    resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
-    engines: {node: '>=6 <7 || >=8'}
-    dependencies:
-      graceful-fs: 4.2.11
-      jsonfile: 4.0.0
-      universalify: 0.1.2
-    dev: false
-
   /fs-extra@9.1.0:
     resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
     engines: {node: '>=10'}
@@ -1097,30 +1080,6 @@ packages:
     engines: {node: 6.* || 8.* || >= 10.*}
     dev: false
 
-  /get-intrinsic@1.3.0:
-    resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind-apply-helpers: 1.0.2
-      es-define-property: 1.0.1
-      es-errors: 1.3.0
-      es-object-atoms: 1.1.1
-      function-bind: 1.1.2
-      get-proto: 1.0.1
-      gopd: 1.2.0
-      has-symbols: 1.1.0
-      hasown: 2.0.2
-      math-intrinsics: 1.1.0
-    dev: false
-
-  /get-proto@1.0.1:
-    resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
-    engines: {node: '>= 0.4'}
-    dependencies:
-      dunder-proto: 1.0.1
-      es-object-atoms: 1.1.1
-    dev: false
-
   /get-stream@6.0.1:
     resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
     engines: {node: '>=10'}
@@ -1186,11 +1145,6 @@ packages:
       which: 1.3.1
     dev: false
 
-  /gopd@1.2.0:
-    resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
-    engines: {node: '>= 0.4'}
-    dev: false
-
   /graceful-fs@4.2.11:
     resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
     dev: false
@@ -1210,18 +1164,6 @@ packages:
     engines: {node: '>=8'}
     dev: false
 
-  /has-symbols@1.1.0:
-    resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
-    engines: {node: '>= 0.4'}
-    dev: false
-
-  /has-tostringtag@1.0.2:
-    resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-symbols: 1.1.0
-    dev: false
-
   /hasown@2.0.2:
     resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
     engines: {node: '>= 0.4'}
@@ -1464,12 +1406,6 @@ packages:
     requiresBuild: true
     dev: false
 
-  /jsonfile@4.0.0:
-    resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
-    optionalDependencies:
-      graceful-fs: 4.2.11
-    dev: false
-
   /jsonfile@6.1.0:
     resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
     dependencies:
@@ -1510,16 +1446,6 @@ packages:
     resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
     dev: false
 
-  /lodash.get@4.4.2:
-    resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
-    deprecated: This package is deprecated. Use the optional chaining (?.) operator instead.
-    dev: false
-
-  /lodash.isequal@4.5.0:
-    resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
-    deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
-    dev: false
-
   /lodash.isfunction@3.0.9:
     resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==}
     dev: false
@@ -1598,11 +1524,6 @@ packages:
     engines: {node: '>=8'}
     dev: false
 
-  /math-intrinsics@1.1.0:
-    resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
-    engines: {node: '>= 0.4'}
-    dev: false
-
   /meow@8.1.2:
     resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
     engines: {node: '>=10'}
@@ -1636,18 +1557,6 @@ packages:
       picomatch: 2.3.1
     dev: false
 
-  /mime-db@1.52.0:
-    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
-    engines: {node: '>= 0.6'}
-    dev: false
-
-  /mime-types@2.1.35:
-    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
-    engines: {node: '>= 0.6'}
-    dependencies:
-      mime-db: 1.52.0
-    dev: false
-
   /mimic-fn@1.2.0:
     resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
     engines: {node: '>=4'}
@@ -1860,6 +1769,11 @@ packages:
     engines: {node: '>=8.6'}
     dev: false
 
+  /punycode@2.3.1:
+    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+    engines: {node: '>=6'}
+    dev: false
+
   /quick-lru@4.0.1:
     resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
     engines: {node: '>=8'}
@@ -2140,6 +2054,13 @@ packages:
       has-flag: 4.0.0
     dev: false
 
+  /supports-color@8.1.1:
+    resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+    engines: {node: '>=10'}
+    dependencies:
+      has-flag: 4.0.0
+    dev: false
+
   /supports-preserve-symlinks-flag@1.0.0:
     resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
     engines: {node: '>= 0.4'}
@@ -2260,16 +2181,17 @@ packages:
   /undici-types@6.19.8:
     resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
 
-  /universalify@0.1.2:
-    resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
-    engines: {node: '>= 4.0.0'}
-    dev: false
-
   /universalify@2.0.1:
     resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
     engines: {node: '>= 10.0.0'}
     dev: false
 
+  /uri-js@4.4.1:
+    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+    dependencies:
+      punycode: 2.3.1
+    dev: false
+
   /user-home@2.0.0:
     resolution: {integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==}
     engines: {node: '>=0.10.0'}
@@ -2292,11 +2214,6 @@ packages:
       spdx-expression-parse: 3.0.1
     dev: false
 
-  /validator@13.12.0:
-    resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==}
-    engines: {node: '>= 0.10'}
-    dev: false
-
   /wcwidth@1.0.1:
     resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
     dependencies:
@@ -2378,14 +2295,6 @@ packages:
     engines: {node: '>=10'}
     dev: false
 
-  /z-schema@5.0.5:
-    resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==}
-    engines: {node: '>=8.0.0'}
-    hasBin: true
-    dependencies:
-      lodash.get: 4.4.2
-      lodash.isequal: 4.5.0
-      validator: 13.12.0
-    optionalDependencies:
-      commander: 9.5.0
-    dev: false
+settings:
+  autoInstallPeers: true
+  excludeLinksFromLockfile: false

Fișier diff suprimat deoarece este prea mare
+ 139 - 238
common/config/rush/pnpm-lock.yaml


+ 2 - 2
packages/canvas-engine/renderer/__tests__/layers/__snapshots__/flow-label-layer.test.tsx.snap

@@ -98,7 +98,7 @@ exports[`flow-label-layer > test render 1`] = `
   >
     <div
       data-label-id="mock"
-      style="font-size: 12px; color: rgb(187, 191, 196); text-align: center; white-space: nowrap; line-height: 20px;"
+      style="font-size: 12px; color: rgb(187, 191, 196); text-align: center; white-space: nowrap; background-color: var(--g-editor-background); line-height: 20px;"
     >
       123
     </div>
@@ -109,7 +109,7 @@ exports[`flow-label-layer > test render 1`] = `
   >
     <div
       data-label-id="mock"
-      style="font-size: 12px; color: rgb(187, 191, 196); text-align: center; white-space: nowrap; line-height: 20px; width: 100px; transform: rotate(90deg);"
+      style="font-size: 12px; color: rgb(187, 191, 196); text-align: center; white-space: nowrap; background-color: var(--g-editor-background); line-height: 20px; width: 100px; transform: rotate(90deg);"
     >
       catch-text
     </div>

+ 1 - 1
packages/common/command/package.json

@@ -37,7 +37,7 @@
     "@types/react-dom": "^18",
     "@vitest/coverage-v8": "^0.32.0",
     "eslint": "^8.54.0",
-    "jsdom": "^22.1.0",
+    "jsdom": "^26.1.0",
     "tsup": "^8.0.1",
     "typescript": "^5.8.3",
     "vitest": "^0.34.6"

+ 1 - 1
packages/common/history-storage/package.json

@@ -44,7 +44,7 @@
     "@vitest/coverage-v8": "^0.32.0",
     "eslint": "^8.54.0",
     "fake-indexeddb": "5.0.2",
-    "jsdom": "^22.1.0",
+    "jsdom": "^26.1.0",
     "tsup": "^8.0.1",
     "typescript": "^5.8.3",
     "vitest": "^0.34.6"

+ 1 - 1
packages/common/history/package.json

@@ -40,7 +40,7 @@
     "@types/lodash-es": "^4.17.12",
     "@vitest/coverage-v8": "^0.32.0",
     "eslint": "^8.54.0",
-    "jsdom": "^22.1.0",
+    "jsdom": "^26.1.0",
     "tsup": "^8.0.1",
     "typescript": "^5.8.3",
     "vitest": "^0.34.6"

+ 1 - 1
packages/common/reactive/package.json

@@ -37,7 +37,7 @@
     "@types/react-dom": "^18",
     "@vitest/coverage-v8": "^0.32.0",
     "eslint": "^8.54.0",
-    "jsdom": "^22.1.0",
+    "jsdom": "^26.1.0",
     "react": "^18",
     "react-dom": "^18",
     "tsup": "^8.0.1",

+ 1 - 1
packages/common/utils/package.json

@@ -39,7 +39,7 @@
     "@types/react-dom": "^18",
     "@vitest/coverage-v8": "^0.32.0",
     "eslint": "^8.54.0",
-    "jsdom": "^22.1.0",
+    "jsdom": "^26.1.0",
     "react": "^18",
     "react-dom": "^18",
     "tsup": "^8.0.1",

+ 2 - 2
packages/runtime/js-core/package.json

@@ -28,8 +28,8 @@
     "watch": "npm run build:fast -- --dts-resolve --watch --ignore-watch dist"
   },
   "dependencies": {
-    "@langchain/openai": "^0.5.11",
-    "@langchain/core": "^0.3.57",
+    "@langchain/openai": "0.5.18",
+    "@langchain/core": "^0.3.58",
     "lodash-es": "^4.17.21",
     "uuid": "^9.0.0",
     "zod": "^3.24.4"

+ 2 - 2
packages/runtime/nodejs/package.json

@@ -32,8 +32,8 @@
     "@fastify/cors": "^8.2.1",
     "@fastify/swagger": "^8.5.1",
     "@fastify/swagger-ui": "4.1.0",
-    "@langchain/openai": "^0.5.11",
-    "@langchain/core": "^0.3.57",
+    "@langchain/openai": "0.5.18",
+    "@langchain/core": "^0.3.58",
     "@fastify/websocket": "^10.0.1",
     "@trpc/server": "^10.27.1",
     "trpc-openapi": "^1.2.0",

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff