zova-cli-set-front 1.2.119 → 1.2.121
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/templates/create/page/snippets/routes.ts +1 -1
- package/cli/templates/refactor/anotherRender/snippets/render.ts +1 -1
- package/cli/templates/refactor/anotherStyle/snippets/style.ts +1 -1
- package/dist/index.js +42 -26
- package/dist/lib/bean/cli.tools.metadata.d.ts +1 -0
- package/dist/lib/bean/toolsMetadata/generateConfig.d.ts +4 -4
- package/dist-cli/templates/create/page/snippets/routes.js +1 -1
- package/dist-cli/templates/refactor/anotherRender/snippets/render.js +1 -1
- package/dist-cli/templates/refactor/anotherStyle/snippets/style.js +1 -1
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { metadataCustomSnippet } from '@cabloy/cli';
|
|
2
2
|
|
|
3
|
-
const __snippet_declare = "import { ZPage<%=argv.nameMeta.fullCapitalize%> } from './.metadata/page/<%=argv.pageName%>.
|
|
3
|
+
const __snippet_declare = "import { ZPage<%=argv.nameMeta.fullCapitalize%> } from './.metadata/page/<%=argv.pageName%>.ts';\n";
|
|
4
4
|
const __snippet_body = '{ path: \'<%=argv.moduleInfo.name!==argv.pageName?argv.pageName:""%>\', component: ZPage<%=argv.nameMeta.fullCapitalize%> },';
|
|
5
5
|
|
|
6
6
|
export default metadataCustomSnippet({
|
|
@@ -19,7 +19,7 @@ export default metadataCustomSnippet({
|
|
|
19
19
|
ast = ast.replace(" } from 'zova';", ", Use } from 'zova';");
|
|
20
20
|
}
|
|
21
21
|
ast = ast
|
|
22
|
-
.replace("from 'zova-module-a-bean';", `from 'zova-module-a-bean';\nimport { ${argv.renderClassName} } from './render.${argv.renderName}.
|
|
22
|
+
.replace("from 'zova-module-a-bean';", `from 'zova-module-a-bean';\nimport { ${argv.renderClassName} } from './render.${argv.renderName}.tsx';`)
|
|
23
23
|
.replace(
|
|
24
24
|
'extends BeanRenderBase {',
|
|
25
25
|
`extends BeanRenderBase {\n @Use()\n $$$$render${argv.renderNameCapitalize}: ${argv.renderClassName};\n`,
|
|
@@ -19,7 +19,7 @@ export default metadataCustomSnippet({
|
|
|
19
19
|
ast = ast.replace(" } from 'zova';", ", Use } from 'zova';");
|
|
20
20
|
}
|
|
21
21
|
ast = ast
|
|
22
|
-
.replace("from 'zova-module-a-bean';", `from 'zova-module-a-bean';\nimport { ${argv.styleClassName} } from './style.${argv.styleName}.
|
|
22
|
+
.replace("from 'zova-module-a-bean';", `from 'zova-module-a-bean';\nimport { ${argv.styleClassName} } from './style.${argv.styleName}.ts';`)
|
|
23
23
|
.replace('extends BeanStyleBase {', `extends BeanStyleBase {\n @Use()\n $$$$style${argv.styleNameCapitalize}: ${argv.styleClassName};\n`);
|
|
24
24
|
// ok
|
|
25
25
|
return ast;
|
package/dist/index.js
CHANGED
|
@@ -1779,7 +1779,7 @@ export const OpenApiBaseURL = (sys: ZovaSys) => {
|
|
|
1779
1779
|
});
|
|
1780
1780
|
// output: openapi/index.ts
|
|
1781
1781
|
const indexFile = path.join(module.root, 'src/api/openapi/index.ts');
|
|
1782
|
-
await fse.outputFile(indexFile, "export * from './baseURL.
|
|
1782
|
+
await fse.outputFile(indexFile, "export * from './baseURL.ts';\nexport * from './schemas.ts';\nexport * from './types.ts';");
|
|
1783
1783
|
await this.helper.formatFile({
|
|
1784
1784
|
fileName: indexFile
|
|
1785
1785
|
});
|
|
@@ -1799,7 +1799,7 @@ export const OpenApiBaseURL = (sys: ZovaSys) => {
|
|
|
1799
1799
|
}
|
|
1800
1800
|
let contentSchemas = typeSchemas.join('\n');
|
|
1801
1801
|
if (contentSchemas.includes('components["schemas"]')) {
|
|
1802
|
-
contentSchemas = `import type { components } from './types.
|
|
1802
|
+
contentSchemas = `import type { components } from './types.ts';\n${contentSchemas}`;
|
|
1803
1803
|
}
|
|
1804
1804
|
contentSchemas = `// eslint-disable\n${contentSchemas}`;
|
|
1805
1805
|
return contentSchemas;
|
|
@@ -1959,8 +1959,8 @@ export const OpenApiBaseURL = (sys: ZovaSys) => {
|
|
|
1959
1959
|
if (contentSignatures.length > 0) importsOpenapiValue.push('OpenApiBaseURL');
|
|
1960
1960
|
if (contentTypes2.includes('components["schemas"]')) importsOpenapiType.push('components');
|
|
1961
1961
|
if (contentTypes2.includes('paths[')) importsOpenapiType.push('paths');
|
|
1962
|
-
const contentImportsOpenapiValue = importsOpenapiValue.length > 0 ? `import { ${importsOpenapiValue.join(', ')} } from './openapi/index.
|
|
1963
|
-
const contentImportsOpenapiType = importsOpenapiType.length > 0 ? `import type { ${importsOpenapiType.join(', ')} } from './openapi/index.
|
|
1962
|
+
const contentImportsOpenapiValue = importsOpenapiValue.length > 0 ? `import { ${importsOpenapiValue.join(', ')} } from './openapi/index.ts';` : '';
|
|
1963
|
+
const contentImportsOpenapiType = importsOpenapiType.length > 0 ? `import type { ${importsOpenapiType.join(', ')} } from './openapi/index.ts';` : '';
|
|
1964
1964
|
const contentImportsOpenapi = [contentImportsOpenapiValue, contentImportsOpenapiType].filter(item => !!item).join('\n');
|
|
1965
1965
|
// apiContent
|
|
1966
1966
|
const apiContent = `import { Api, BeanApiBase } from 'zova-module-a-api';
|
|
@@ -1989,7 +1989,7 @@ export class Api${apiName} extends BeanApiBase {
|
|
|
1989
1989
|
}
|
|
1990
1990
|
`);
|
|
1991
1991
|
}
|
|
1992
|
-
const contentImportsApiPath = importsApiPath.length > 0 ? `import { ${importsApiPath.join(', ')} } from '../api/${apiNameLower}.
|
|
1992
|
+
const contentImportsApiPath = importsApiPath.length > 0 ? `import { ${importsApiPath.join(', ')} } from '../api/${apiNameLower}.ts';` : '';
|
|
1993
1993
|
const apiMetaContent = `import { BeanBase } from 'zova';
|
|
1994
1994
|
import { ApiMeta } from 'zova-module-a-api';
|
|
1995
1995
|
${contentImportsApiPath}
|
|
@@ -2650,7 +2650,7 @@ class CliRefactorRenameComponent extends BeanCliBase {
|
|
|
2650
2650
|
const routesFile = path.join(targetDir, 'src/routes.ts');
|
|
2651
2651
|
let content = (await fse.readFile(routesFile)).toString();
|
|
2652
2652
|
//
|
|
2653
|
-
content = content.replace(`import { ZPage${argv.nameMeta.shortCapitalize} } from './.metadata/page/${argv.nameMeta.short}.
|
|
2653
|
+
content = content.replace(`import { ZPage${argv.nameMeta.shortCapitalize} } from './.metadata/page/${argv.nameMeta.short}.ts';`, `import { ZPage${argv.componentNameNewCapitalize} } from './.metadata/page/${argv.componentNameNew}.ts';`);
|
|
2654
2654
|
//
|
|
2655
2655
|
const ast = gogocode(content);
|
|
2656
2656
|
const astNode = ast.find('export const routes: IModuleRoute[] = [$_$]');
|
|
@@ -2776,8 +2776,8 @@ async function generateConfig(modulePath) {
|
|
|
2776
2776
|
if (!(await fse.pathExists(configFile))) return '';
|
|
2777
2777
|
// combine
|
|
2778
2778
|
const content = `/** config: begin */
|
|
2779
|
-
export * from '../config/config.
|
|
2780
|
-
import { config } from '../config/config.
|
|
2779
|
+
export * from '../config/config.ts';
|
|
2780
|
+
import { config } from '../config/config.ts';
|
|
2781
2781
|
/** config: end */
|
|
2782
2782
|
`;
|
|
2783
2783
|
return content;
|
|
@@ -2787,8 +2787,8 @@ async function generateConstant(modulePath) {
|
|
|
2787
2787
|
if (!(await fse.pathExists(constantFile))) return '';
|
|
2788
2788
|
// combine
|
|
2789
2789
|
const content = `/** constant: begin */
|
|
2790
|
-
export * from '../config/constants.
|
|
2791
|
-
import { constants } from '../config/constants.
|
|
2790
|
+
export * from '../config/constants.ts';
|
|
2791
|
+
import { constants } from '../config/constants.ts';
|
|
2792
2792
|
/** constant: end */
|
|
2793
2793
|
`;
|
|
2794
2794
|
return content;
|
|
@@ -2804,7 +2804,7 @@ async function generateLocale1(modulePath) {
|
|
|
2804
2804
|
for (const file of files) {
|
|
2805
2805
|
const localeName = path.basename(file, '.ts');
|
|
2806
2806
|
const className = `locale_${localeName.replace('-', '_')}`;
|
|
2807
|
-
contentImports.push(`import ${className} from '../config/locale/${localeName}.
|
|
2807
|
+
contentImports.push(`import ${className} from '../config/locale/${localeName}.ts';`);
|
|
2808
2808
|
contentLocales.push(` '${localeName}': ${className},`);
|
|
2809
2809
|
}
|
|
2810
2810
|
// combine
|
|
@@ -2820,7 +2820,7 @@ async function generateLocale2(contentLocales) {
|
|
|
2820
2820
|
if (!contentLocales) return '';
|
|
2821
2821
|
// combine
|
|
2822
2822
|
const content = `/** locale: begin */
|
|
2823
|
-
import { locales } from './locales.
|
|
2823
|
+
import { locales } from './locales.ts';
|
|
2824
2824
|
/** locale: end */
|
|
2825
2825
|
`;
|
|
2826
2826
|
return content;
|
|
@@ -2830,8 +2830,8 @@ async function generateError(modulePath) {
|
|
|
2830
2830
|
if (!(await fse.pathExists(errorFile))) return '';
|
|
2831
2831
|
// combine
|
|
2832
2832
|
const content = `/** error: begin */
|
|
2833
|
-
export * from '../config/errors.
|
|
2834
|
-
import { errors } from '../config/errors.
|
|
2833
|
+
export * from '../config/errors.ts';
|
|
2834
|
+
import { errors } from '../config/errors.ts';
|
|
2835
2835
|
/** error: end */
|
|
2836
2836
|
`;
|
|
2837
2837
|
return content;
|
|
@@ -2995,7 +2995,7 @@ async function generateMonkey_common(modulePath, commandName) {
|
|
|
2995
2995
|
if (!(await fse.pathExists(monkeyFile))) return '';
|
|
2996
2996
|
// combine
|
|
2997
2997
|
const content = `/** ${commandName}: begin */
|
|
2998
|
-
export * from '../${commandName}.
|
|
2998
|
+
export * from '../${commandName}.ts';
|
|
2999
2999
|
/** ${commandName}: end */
|
|
3000
3000
|
`;
|
|
3001
3001
|
return content;
|
|
@@ -3005,7 +3005,7 @@ async function generateMain_common(modulePath, commandName) {
|
|
|
3005
3005
|
if (!(await fse.pathExists(monkeyFile))) return '';
|
|
3006
3006
|
// combine
|
|
3007
3007
|
const content = `/** ${commandName}: begin */
|
|
3008
|
-
export * from '../${commandName}.
|
|
3008
|
+
export * from '../${commandName}.ts';
|
|
3009
3009
|
/** ${commandName}: end */
|
|
3010
3010
|
`;
|
|
3011
3011
|
return content;
|
|
@@ -3039,8 +3039,8 @@ async function globAllTsFiles(moduleName, modulePath) {
|
|
|
3039
3039
|
if (fileName.startsWith('_')) continue;
|
|
3040
3040
|
const parts = fileName.split('.').slice(0, -1);
|
|
3041
3041
|
const isIgnore = checkIgnoreOfParts(parts);
|
|
3042
|
-
const fileNameJS = fileName
|
|
3043
|
-
const fileNameJSRelative = path.relative(pathMetadata, filePath).replace(/\\/g, '/')
|
|
3042
|
+
const fileNameJS = fileName;
|
|
3043
|
+
const fileNameJSRelative = path.relative(pathMetadata, filePath).replace(/\\/g, '/');
|
|
3044
3044
|
const fileContent = fse.readFileSync(filePath).toString();
|
|
3045
3045
|
const isVirtual = fileContent.includes('@Virtual()');
|
|
3046
3046
|
const isPreload = fileContent.includes('@Preload()');
|
|
@@ -3304,7 +3304,7 @@ async function generateScope(moduleName, relativeNameCapitalize, scopeResources,
|
|
|
3304
3304
|
// combine
|
|
3305
3305
|
const content = `/** scope: begin */
|
|
3306
3306
|
import { ${contentImports.join(', ')} } from 'zova';
|
|
3307
|
-
import { Scope } from '${moduleName === 'a-bean' ? '../lib/scope.
|
|
3307
|
+
import { Scope } from '${moduleName === 'a-bean' ? '../lib/scope.ts' : 'zova-module-a-bean'}';
|
|
3308
3308
|
|
|
3309
3309
|
@Scope()
|
|
3310
3310
|
export class ScopeModule${relativeNameCapitalize} extends BeanScopeBase {}
|
|
@@ -3372,7 +3372,7 @@ async function generateScopeResourcesMeta(globFiles, metaName, _metaMeta, _scene
|
|
|
3372
3372
|
if (globFiles.length === 0) return '';
|
|
3373
3373
|
// combine
|
|
3374
3374
|
const content = `/** meta ${metaName}: begin */
|
|
3375
|
-
import { Meta${toUpperCaseFirstChar(metaName)} } from '../bean/meta.${metaName}.
|
|
3375
|
+
import { Meta${toUpperCaseFirstChar(metaName)} } from '../bean/meta.${metaName}.ts';
|
|
3376
3376
|
/** meta ${metaName}: end */
|
|
3377
3377
|
`;
|
|
3378
3378
|
return content;
|
|
@@ -3524,14 +3524,30 @@ class CliToolsMetadata extends BeanCliBase {
|
|
|
3524
3524
|
}
|
|
3525
3525
|
async _generateThis(moduleName, relativeNameCapitalize, modulePath) {
|
|
3526
3526
|
const thisDest = path.join(modulePath, 'src/.metadata/this.ts');
|
|
3527
|
-
|
|
3527
|
+
const exportLine = `export { ScopeModule${relativeNameCapitalize} as ScopeModule } from './index.ts';`;
|
|
3528
|
+
if (await fse.pathExists(thisDest)) {
|
|
3529
|
+
const content = await fse.readFile(thisDest, 'utf8');
|
|
3530
|
+
const migrated = this._migrateOwnedExport(content, exportLine);
|
|
3531
|
+
if (migrated !== content) await fse.writeFile(thisDest, migrated);
|
|
3532
|
+
return;
|
|
3533
|
+
}
|
|
3528
3534
|
const content = `export const __ThisModule__ = '${moduleName}';
|
|
3529
|
-
|
|
3535
|
+
${exportLine}
|
|
3530
3536
|
`;
|
|
3531
3537
|
// save
|
|
3532
3538
|
await fse.writeFile(thisDest, content);
|
|
3533
3539
|
}
|
|
3540
|
+
_migrateOwnedExport(content, exportLine) {
|
|
3541
|
+
const pattern = escapeRegExp(exportLine).replace('\\.ts', '\\.(?:js|ts)').replaceAll("'", '[\'"]');
|
|
3542
|
+
let seen = false;
|
|
3543
|
+
return content.replace(new RegExp(`^([ \\t]*)${pattern}([ \\t]*)(\\r?)(\\n|$)`, 'gm'), (_line, indent, trailing, carriageReturn, newline) => {
|
|
3544
|
+
if (seen) return '';
|
|
3545
|
+
seen = true;
|
|
3546
|
+
return `${indent}${exportLine}${trailing}${carriageReturn}${newline}`;
|
|
3547
|
+
});
|
|
3548
|
+
}
|
|
3534
3549
|
async _prependExportIfNeeded(jsContent, exportLine, sourceFile, modulePath) {
|
|
3550
|
+
jsContent = this._migrateOwnedExport(jsContent, exportLine);
|
|
3535
3551
|
const sourcePath = path.join(modulePath, sourceFile);
|
|
3536
3552
|
if ((await fse.pathExists(sourcePath)) && !jsContent.includes(exportLine)) {
|
|
3537
3553
|
return `${exportLine}\n${jsContent}`;
|
|
@@ -3544,10 +3560,10 @@ export { ScopeModule${relativeNameCapitalize} as ScopeModule } from './index.js'
|
|
|
3544
3560
|
if (await fse.pathExists(jsFile)) {
|
|
3545
3561
|
jsContent = (await fse.readFile(jsFile)).toString();
|
|
3546
3562
|
}
|
|
3547
|
-
jsContent = await this._prependExportIfNeeded(jsContent, "export * from './types/index.
|
|
3548
|
-
jsContent = await this._prependExportIfNeeded(jsContent, "export * from './lib/index.
|
|
3549
|
-
jsContent = await this._prependExportIfNeeded(jsContent, "export * from './.metadata/locales.
|
|
3550
|
-
jsContent = await this._prependExportIfNeeded(jsContent, "export * from './.metadata/index.
|
|
3563
|
+
jsContent = await this._prependExportIfNeeded(jsContent, "export * from './types/index.ts';", 'src/types/index.ts', modulePath);
|
|
3564
|
+
jsContent = await this._prependExportIfNeeded(jsContent, "export * from './lib/index.ts';", 'src/lib/index.ts', modulePath);
|
|
3565
|
+
jsContent = await this._prependExportIfNeeded(jsContent, "export * from './.metadata/locales.ts';", 'src/.metadata/locales.ts', modulePath);
|
|
3566
|
+
jsContent = await this._prependExportIfNeeded(jsContent, "export * from './.metadata/index.ts';", 'src/.metadata/index.ts', modulePath);
|
|
3551
3567
|
// trim empty
|
|
3552
3568
|
jsContent = jsContent.replace('export {};\n', '');
|
|
3553
3569
|
// write
|
|
@@ -9,6 +9,7 @@ export declare class CliToolsMetadata extends BeanCliBase {
|
|
|
9
9
|
_generateMetadata(moduleName: string, force: boolean): Promise<void>;
|
|
10
10
|
_generateLocales(modulePath: string, contentLocales: any): Promise<void>;
|
|
11
11
|
_generateThis(moduleName: string, relativeNameCapitalize: string, modulePath: string): Promise<void>;
|
|
12
|
+
_migrateOwnedExport(content: string, exportLine: string): string;
|
|
12
13
|
_prependExportIfNeeded(jsContent: string, exportLine: string, sourceFile: string, modulePath: string): Promise<string>;
|
|
13
14
|
_generateIndex(modulePath: string): Promise<void>;
|
|
14
15
|
_generatePackage(modulePath: string, beansPreload: string[]): Promise<void>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare function generateConfig(modulePath: string): Promise<"" | "/** config: begin */\nexport * from '../config/config.
|
|
2
|
-
export declare function generateConstant(modulePath: string): Promise<"" | "/** constant: begin */\nexport * from '../config/constants.
|
|
1
|
+
export declare function generateConfig(modulePath: string): Promise<"" | "/** config: begin */\nexport * from '../config/config.ts';\nimport { config } from '../config/config.ts';\n/** config: end */\n">;
|
|
2
|
+
export declare function generateConstant(modulePath: string): Promise<"" | "/** constant: begin */\nexport * from '../config/constants.ts';\nimport { constants } from '../config/constants.ts';\n/** constant: end */\n">;
|
|
3
3
|
export declare function generateLocale1(modulePath: string): Promise<string>;
|
|
4
|
-
export declare function generateLocale2(contentLocales: string): Promise<"" | "/** locale: begin */\nimport { locales } from './locales.
|
|
5
|
-
export declare function generateError(modulePath: string): Promise<"" | "/** error: begin */\nexport * from '../config/errors.
|
|
4
|
+
export declare function generateLocale2(contentLocales: string): Promise<"" | "/** locale: begin */\nimport { locales } from './locales.ts';\n/** locale: end */\n">;
|
|
5
|
+
export declare function generateError(modulePath: string): Promise<"" | "/** error: begin */\nexport * from '../config/errors.ts';\nimport { errors } from '../config/errors.ts';\n/** error: end */\n">;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { metadataCustomSnippet } from '@cabloy/cli';
|
|
2
|
-
const __snippet_declare = "import { ZPage<%=argv.nameMeta.fullCapitalize%> } from './.metadata/page/<%=argv.pageName%>.
|
|
2
|
+
const __snippet_declare = "import { ZPage<%=argv.nameMeta.fullCapitalize%> } from './.metadata/page/<%=argv.pageName%>.ts';\n";
|
|
3
3
|
const __snippet_body = '{ path: \'<%=argv.moduleInfo.name!==argv.pageName?argv.pageName:""%>\', component: ZPage<%=argv.nameMeta.fullCapitalize%> },';
|
|
4
4
|
export default metadataCustomSnippet({
|
|
5
5
|
file: 'src/routes.ts',
|
|
@@ -9,7 +9,7 @@ export default metadataCustomSnippet({
|
|
|
9
9
|
ast = ast.replace(" } from 'zova';", ", Use } from 'zova';");
|
|
10
10
|
}
|
|
11
11
|
ast = ast
|
|
12
|
-
.replace("from 'zova-module-a-bean';", `from 'zova-module-a-bean';\nimport { ${argv.renderClassName} } from './render.${argv.renderName}.
|
|
12
|
+
.replace("from 'zova-module-a-bean';", `from 'zova-module-a-bean';\nimport { ${argv.renderClassName} } from './render.${argv.renderName}.tsx';`)
|
|
13
13
|
.replace('extends BeanRenderBase {', `extends BeanRenderBase {\n @Use()\n $$$$render${argv.renderNameCapitalize}: ${argv.renderClassName};\n`);
|
|
14
14
|
// ok
|
|
15
15
|
return ast;
|
|
@@ -9,7 +9,7 @@ export default metadataCustomSnippet({
|
|
|
9
9
|
ast = ast.replace(" } from 'zova';", ", Use } from 'zova';");
|
|
10
10
|
}
|
|
11
11
|
ast = ast
|
|
12
|
-
.replace("from 'zova-module-a-bean';", `from 'zova-module-a-bean';\nimport { ${argv.styleClassName} } from './style.${argv.styleName}.
|
|
12
|
+
.replace("from 'zova-module-a-bean';", `from 'zova-module-a-bean';\nimport { ${argv.styleClassName} } from './style.${argv.styleName}.ts';`)
|
|
13
13
|
.replace('extends BeanStyleBase {', `extends BeanStyleBase {\n @Use()\n $$$$style${argv.styleNameCapitalize}: ${argv.styleClassName};\n`);
|
|
14
14
|
// ok
|
|
15
15
|
return ast;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-cli-set-front",
|
|
3
|
-
"version": "1.2.
|
|
4
|
-
"gitHead": "
|
|
3
|
+
"version": "1.2.121",
|
|
4
|
+
"gitHead": "d7aa87b8ca78e173f19522bac0e80ad02fea255f",
|
|
5
5
|
"description": "zova cli-set-front",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"framework",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"vite": "^8.3.4",
|
|
66
66
|
"yaml": "^2.8.3",
|
|
67
67
|
"zova-openapi": "^1.1.17",
|
|
68
|
-
"zova-vite": "^1.1.
|
|
68
|
+
"zova-vite": "^1.1.52"
|
|
69
69
|
},
|
|
70
70
|
"engines": {
|
|
71
71
|
"node": ">=24.11.0"
|