@react-native-windows/codegen 0.0.0-canary.13 → 0.0.0-canary.130

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.
Files changed (61) hide show
  1. package/CHANGELOG.md +1125 -16
  2. package/README.md +1 -1
  3. package/bin.js +0 -0
  4. package/lib-commonjs/Cli.d.ts +7 -0
  5. package/lib-commonjs/Cli.js +103 -0
  6. package/lib-commonjs/Cli.js.map +1 -0
  7. package/lib-commonjs/generators/AliasGen.d.ts +12 -0
  8. package/lib-commonjs/generators/AliasGen.js +115 -0
  9. package/lib-commonjs/generators/AliasGen.js.map +1 -0
  10. package/lib-commonjs/generators/AliasManaging.d.ts +15 -0
  11. package/lib-commonjs/generators/AliasManaging.js +49 -0
  12. package/lib-commonjs/generators/AliasManaging.js.map +1 -0
  13. package/lib-commonjs/generators/GenerateComponentWindows.d.ts +13 -0
  14. package/lib-commonjs/generators/GenerateComponentWindows.js +469 -0
  15. package/lib-commonjs/generators/GenerateComponentWindows.js.map +1 -0
  16. package/lib-commonjs/generators/GenerateNM2.d.ts +15 -0
  17. package/lib-commonjs/generators/GenerateNM2.js +145 -0
  18. package/lib-commonjs/generators/GenerateNM2.js.map +1 -0
  19. package/lib-commonjs/generators/GenerateTypeScript.d.ts +11 -0
  20. package/lib-commonjs/generators/GenerateTypeScript.js +166 -0
  21. package/lib-commonjs/generators/GenerateTypeScript.js.map +1 -0
  22. package/lib-commonjs/generators/ObjectTypes.d.ts +13 -0
  23. package/lib-commonjs/generators/ObjectTypes.js +81 -0
  24. package/lib-commonjs/generators/ObjectTypes.js.map +1 -0
  25. package/lib-commonjs/generators/ParamTypes.d.ts +13 -0
  26. package/lib-commonjs/generators/ParamTypes.js +183 -0
  27. package/lib-commonjs/generators/ParamTypes.js.map +1 -0
  28. package/lib-commonjs/generators/PropObjectTypes.d.ts +18 -0
  29. package/lib-commonjs/generators/PropObjectTypes.js +208 -0
  30. package/lib-commonjs/generators/PropObjectTypes.js.map +1 -0
  31. package/lib-commonjs/generators/ReturnTypes.d.ts +10 -0
  32. package/lib-commonjs/generators/ReturnTypes.js +29 -0
  33. package/lib-commonjs/generators/ReturnTypes.js.map +1 -0
  34. package/lib-commonjs/generators/ValidateConstants.d.ts +8 -0
  35. package/lib-commonjs/generators/ValidateConstants.js +38 -0
  36. package/lib-commonjs/generators/ValidateConstants.js.map +1 -0
  37. package/lib-commonjs/generators/ValidateMethods.d.ts +14 -0
  38. package/lib-commonjs/generators/ValidateMethods.js +112 -0
  39. package/lib-commonjs/generators/ValidateMethods.js.map +1 -0
  40. package/lib-commonjs/index.d.ts +39 -0
  41. package/lib-commonjs/index.js +227 -0
  42. package/lib-commonjs/index.js.map +1 -0
  43. package/package.json +39 -21
  44. package/src/Cli.ts +69 -232
  45. package/src/generators/AliasGen.ts +195 -0
  46. package/src/generators/AliasManaging.ts +75 -0
  47. package/src/generators/GenerateComponentWindows.ts +616 -0
  48. package/src/generators/GenerateNM2.ts +128 -131
  49. package/src/generators/GenerateTypeScript.ts +250 -0
  50. package/src/generators/ObjectTypes.ts +95 -37
  51. package/src/generators/ParamTypes.ts +309 -53
  52. package/src/generators/PropObjectTypes.ts +223 -0
  53. package/src/generators/ReturnTypes.ts +38 -40
  54. package/src/generators/ValidateConstants.ts +50 -0
  55. package/src/generators/ValidateMethods.ts +270 -0
  56. package/src/index.ts +415 -0
  57. package/.eslintrc.js +0 -4
  58. package/.vscode/launch.json +0 -23
  59. package/CHANGELOG.json +0 -726
  60. package/jest.config.js +0 -1
  61. package/tsconfig.json +0 -5
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ * Licensed under the MIT License.
4
+ * @format
5
+ */
6
+ 'use strict';
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.generateValidateMethods = void 0;
9
+ const ParamTypes_1 = require("./ParamTypes");
10
+ const ReturnTypes_1 = require("./ReturnTypes");
11
+ function isMethodSync(funcType) {
12
+ return (funcType.returnTypeAnnotation.type !== 'VoidTypeAnnotation' &&
13
+ funcType.returnTypeAnnotation.type !== 'PromiseTypeAnnotation');
14
+ }
15
+ function getPossibleMethodSignatures(prop, funcType, aliases, baseAliasName, options) {
16
+ const args = (0, ParamTypes_1.translateArgs)(funcType.params, aliases, baseAliasName, options);
17
+ if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {
18
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
19
+ if (funcType.returnTypeAnnotation.elementType) {
20
+ args.push(`::React::ReactPromise<${(0, ReturnTypes_1.translateImplReturnType)(funcType.returnTypeAnnotation.elementType, aliases, baseAliasName, options)}> &&result`);
21
+ }
22
+ else {
23
+ args.push('::React::ReactPromise<::React::JSValue> &&result');
24
+ }
25
+ }
26
+ // TODO: be much more exhaustive on the possible method signatures that can be used..
27
+ const sig = `REACT_${isMethodSync(funcType) ? 'SYNC_' : ''}METHOD(${prop.name}) ${(0, ReturnTypes_1.translateImplReturnType)(funcType.returnTypeAnnotation, aliases, baseAliasName, options)} ${prop.name}(${args.join(', ')}) noexcept { /* implementation */ }`;
28
+ const staticsig = `REACT_${isMethodSync(funcType) ? 'SYNC_' : ''}METHOD(${prop.name}) static ${(0, ReturnTypes_1.translateImplReturnType)(funcType.returnTypeAnnotation, aliases, baseAliasName, options)} ${prop.name}(${args.join(', ')}) noexcept { /* implementation */ }`;
29
+ return [sig, staticsig];
30
+ }
31
+ function translatePossibleMethodSignatures(prop, funcType, aliases, baseAliasName, options) {
32
+ return getPossibleMethodSignatures(prop, funcType, aliases, baseAliasName, options)
33
+ .map(sig => `" ${sig}\\n"`)
34
+ .join('\n ');
35
+ }
36
+ function renderProperties(methods, aliases, tuple, options) {
37
+ // TODO: generate code for constants
38
+ const properties = methods
39
+ .filter(prop => prop.name !== 'getConstants')
40
+ .map((prop, index) => {
41
+ // TODO: prop.optional === true
42
+ // TODO: prop.typeAnnotation.type === 'NullableTypeAnnotation'
43
+ const propAliasName = prop.name;
44
+ const funcType = prop.typeAnnotation.type === 'NullableTypeAnnotation'
45
+ ? prop.typeAnnotation.typeAnnotation
46
+ : prop.typeAnnotation;
47
+ const traversedArgs = (0, ParamTypes_1.translateSpecArgs)(funcType.params, aliases, propAliasName, options);
48
+ const translatedReturnParam = (0, ReturnTypes_1.translateSpecReturnType)(funcType.returnTypeAnnotation, aliases, propAliasName, options);
49
+ if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {
50
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
51
+ if (funcType.returnTypeAnnotation.elementType) {
52
+ traversedArgs.push(`Promise<${(0, ReturnTypes_1.translateSpecReturnType)(funcType.returnTypeAnnotation.elementType, aliases, propAliasName, options)}>`);
53
+ }
54
+ else {
55
+ traversedArgs.push('Promise<::React::JSValue>');
56
+ }
57
+ }
58
+ if (tuple) {
59
+ return ` ${isMethodSync(funcType) ? 'Sync' : ''}Method<${translatedReturnParam}(${traversedArgs.join(', ')}) noexcept>{${index}, L"${prop.name}"},`;
60
+ }
61
+ else {
62
+ return ` REACT_SHOW_METHOD_SPEC_ERRORS(
63
+ ${index},
64
+ "${prop.name}",
65
+ ${translatePossibleMethodSignatures(prop, funcType, aliases, propAliasName, options)});`;
66
+ }
67
+ });
68
+ return { code: properties.join('\n'), numberOfProperties: properties.length };
69
+ }
70
+ function getPossibleEventEmitterSignatures(eventEmitter, aliases, options) {
71
+ const traversedArgs = (0, ParamTypes_1.translateEventEmitterArgs)(eventEmitter.typeAnnotation.typeAnnotation, aliases, eventEmitter.name, options);
72
+ return [
73
+ `REACT_EVENT(${eventEmitter.name}) std::function<void(${traversedArgs})> ${eventEmitter.name};`,
74
+ ];
75
+ }
76
+ function translatePossibleEventSignatures(eventEmitter, aliases, options) {
77
+ return getPossibleEventEmitterSignatures(eventEmitter, aliases, options)
78
+ .map(sig => `" ${sig}\\n"`)
79
+ .join('\n ');
80
+ }
81
+ function renderEventEmitters(eventEmitters, indexOffset, aliases, tuple, options) {
82
+ return eventEmitters
83
+ .map((eventEmitter, index) => {
84
+ const traversedArgs = (0, ParamTypes_1.translateEventEmitterArgs)(eventEmitter.typeAnnotation.typeAnnotation, aliases, eventEmitter.name, options);
85
+ if (tuple) {
86
+ return ` EventEmitter<void(${traversedArgs})>{${index + indexOffset}, L"${eventEmitter.name}"},`;
87
+ }
88
+ else {
89
+ return ` REACT_SHOW_EVENTEMITTER_SPEC_ERRORS(
90
+ ${index + indexOffset},
91
+ "${eventEmitter.name}",
92
+ ${translatePossibleEventSignatures(eventEmitter, aliases, options)});`;
93
+ }
94
+ })
95
+ .join('\n');
96
+ }
97
+ function generateValidateMethods(nativeModule, aliases, options) {
98
+ const methods = nativeModule.spec.methods;
99
+ const eventEmitters = nativeModule.spec.eventEmitters;
100
+ const traversedProperties = renderProperties(methods, aliases, false, options);
101
+ const traversedEventEmitters = renderEventEmitters(eventEmitters, traversedProperties.numberOfProperties, aliases, false, options);
102
+ const traversedPropertyTuples = renderProperties(methods, aliases, true, options);
103
+ const traversedEventEmitterTuples = renderEventEmitters(eventEmitters, traversedProperties.numberOfProperties, aliases, true, options);
104
+ return {
105
+ traversedPropertyTuples: traversedPropertyTuples.code,
106
+ traversedEventEmitterTuples,
107
+ traversedProperties: traversedProperties.code,
108
+ traversedEventEmitters,
109
+ };
110
+ }
111
+ exports.generateValidateMethods = generateValidateMethods;
112
+ //# sourceMappingURL=ValidateMethods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateMethods.js","sourceRoot":"","sources":["../../src/generators/ValidateMethods.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {\n NativeModuleEventEmitterShape,\n NativeModuleFunctionTypeAnnotation,\n NativeModulePropertyShape,\n NativeModuleSchema,\n} from '@react-native/codegen/lib/CodegenSchema';\nimport {AliasMap} from './AliasManaging';\nimport type {CppCodegenOptions} from './ObjectTypes';\nimport {\n translateArgs,\n translateSpecArgs,\n translateEventEmitterArgs,\n} from './ParamTypes';\nimport {translateImplReturnType, translateSpecReturnType} from './ReturnTypes';\n\nfunction isMethodSync(funcType: NativeModuleFunctionTypeAnnotation) {\n return (\n funcType.returnTypeAnnotation.type !== 'VoidTypeAnnotation' &&\n funcType.returnTypeAnnotation.type !== 'PromiseTypeAnnotation'\n );\n}\n\nfunction getPossibleMethodSignatures(\n prop: NativeModulePropertyShape,\n funcType: NativeModuleFunctionTypeAnnotation,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n): string[] {\n const args = translateArgs(funcType.params, aliases, baseAliasName, options);\n if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (funcType.returnTypeAnnotation.elementType) {\n args.push(\n `::React::ReactPromise<${translateImplReturnType(\n funcType.returnTypeAnnotation.elementType,\n aliases,\n baseAliasName,\n options,\n )}> &&result`,\n );\n } else {\n args.push('::React::ReactPromise<::React::JSValue> &&result');\n }\n }\n\n // TODO: be much more exhaustive on the possible method signatures that can be used..\n const sig = `REACT_${isMethodSync(funcType) ? 'SYNC_' : ''}METHOD(${\n prop.name\n }) ${translateImplReturnType(\n funcType.returnTypeAnnotation,\n aliases,\n baseAliasName,\n options,\n )} ${prop.name}(${args.join(', ')}) noexcept { /* implementation */ }`;\n\n const staticsig = `REACT_${isMethodSync(funcType) ? 'SYNC_' : ''}METHOD(${\n prop.name\n }) static ${translateImplReturnType(\n funcType.returnTypeAnnotation,\n aliases,\n baseAliasName,\n options,\n )} ${prop.name}(${args.join(', ')}) noexcept { /* implementation */ }`;\n\n return [sig, staticsig];\n}\n\nfunction translatePossibleMethodSignatures(\n prop: NativeModulePropertyShape,\n funcType: NativeModuleFunctionTypeAnnotation,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n): string {\n return getPossibleMethodSignatures(\n prop,\n funcType,\n aliases,\n baseAliasName,\n options,\n )\n .map(sig => `\" ${sig}\\\\n\"`)\n .join('\\n ');\n}\n\nfunction renderProperties(\n methods: ReadonlyArray<NativeModulePropertyShape>,\n aliases: AliasMap,\n tuple: boolean,\n options: CppCodegenOptions,\n): {code: string; numberOfProperties: number} {\n // TODO: generate code for constants\n const properties = methods\n .filter(prop => prop.name !== 'getConstants')\n .map((prop, index) => {\n // TODO: prop.optional === true\n // TODO: prop.typeAnnotation.type === 'NullableTypeAnnotation'\n const propAliasName = prop.name;\n const funcType =\n prop.typeAnnotation.type === 'NullableTypeAnnotation'\n ? prop.typeAnnotation.typeAnnotation\n : prop.typeAnnotation;\n\n const traversedArgs = translateSpecArgs(\n funcType.params,\n aliases,\n propAliasName,\n options,\n );\n\n const translatedReturnParam = translateSpecReturnType(\n funcType.returnTypeAnnotation,\n aliases,\n propAliasName,\n options,\n );\n\n if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (funcType.returnTypeAnnotation.elementType) {\n traversedArgs.push(\n `Promise<${translateSpecReturnType(\n funcType.returnTypeAnnotation.elementType,\n aliases,\n propAliasName,\n options,\n )}>`,\n );\n } else {\n traversedArgs.push('Promise<::React::JSValue>');\n }\n }\n\n if (tuple) {\n return ` ${\n isMethodSync(funcType) ? 'Sync' : ''\n }Method<${translatedReturnParam}(${traversedArgs.join(\n ', ',\n )}) noexcept>{${index}, L\"${prop.name}\"},`;\n } else {\n return ` REACT_SHOW_METHOD_SPEC_ERRORS(\n ${index},\n \"${prop.name}\",\n ${translatePossibleMethodSignatures(\n prop,\n funcType,\n aliases,\n propAliasName,\n options,\n )});`;\n }\n });\n\n return {code: properties.join('\\n'), numberOfProperties: properties.length};\n}\n\nfunction getPossibleEventEmitterSignatures(\n eventEmitter: NativeModuleEventEmitterShape,\n aliases: AliasMap,\n options: CppCodegenOptions,\n): string[] {\n const traversedArgs = translateEventEmitterArgs(\n eventEmitter.typeAnnotation.typeAnnotation,\n aliases,\n eventEmitter.name,\n options,\n );\n return [\n `REACT_EVENT(${eventEmitter.name}) std::function<void(${traversedArgs})> ${eventEmitter.name};`,\n ];\n}\n\nfunction translatePossibleEventSignatures(\n eventEmitter: NativeModuleEventEmitterShape,\n aliases: AliasMap,\n options: CppCodegenOptions,\n): string {\n return getPossibleEventEmitterSignatures(eventEmitter, aliases, options)\n .map(sig => `\" ${sig}\\\\n\"`)\n .join('\\n ');\n}\n\nfunction renderEventEmitters(\n eventEmitters: ReadonlyArray<NativeModuleEventEmitterShape>,\n indexOffset: number,\n aliases: AliasMap,\n tuple: boolean,\n options: CppCodegenOptions,\n): string {\n return eventEmitters\n .map((eventEmitter, index) => {\n const traversedArgs = translateEventEmitterArgs(\n eventEmitter.typeAnnotation.typeAnnotation,\n aliases,\n eventEmitter.name,\n options,\n );\n\n if (tuple) {\n return ` EventEmitter<void(${traversedArgs})>{${\n index + indexOffset\n }, L\"${eventEmitter.name}\"},`;\n } else {\n return ` REACT_SHOW_EVENTEMITTER_SPEC_ERRORS(\n ${index + indexOffset},\n \"${eventEmitter.name}\",\n ${translatePossibleEventSignatures(\n eventEmitter,\n aliases,\n options,\n )});`;\n }\n })\n .join('\\n');\n}\n\nexport function generateValidateMethods(\n nativeModule: NativeModuleSchema,\n aliases: AliasMap,\n options: CppCodegenOptions,\n): {\n traversedProperties: string;\n traversedEventEmitters: string;\n traversedPropertyTuples: string;\n traversedEventEmitterTuples: string;\n} {\n const methods = nativeModule.spec.methods;\n const eventEmitters = nativeModule.spec.eventEmitters;\n const traversedProperties = renderProperties(\n methods,\n aliases,\n false,\n options,\n );\n const traversedEventEmitters = renderEventEmitters(\n eventEmitters,\n traversedProperties.numberOfProperties,\n aliases,\n false,\n options,\n );\n const traversedPropertyTuples = renderProperties(\n methods,\n aliases,\n true,\n options,\n );\n const traversedEventEmitterTuples = renderEventEmitters(\n eventEmitters,\n traversedProperties.numberOfProperties,\n aliases,\n true,\n options,\n );\n return {\n traversedPropertyTuples: traversedPropertyTuples.code,\n traversedEventEmitterTuples,\n traversedProperties: traversedProperties.code,\n traversedEventEmitters,\n };\n}\n"]}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ * Licensed under the MIT License.
4
+ *
5
+ * @format
6
+ */
7
+ import type { CppStringTypes } from './generators/GenerateNM2';
8
+ import type { SchemaType } from '@react-native/codegen/lib/CodegenSchema';
9
+ export type { CppStringTypes } from './generators/GenerateNM2';
10
+ export interface SharedOptions {
11
+ libraryName: string;
12
+ methodOnly: boolean;
13
+ modulesCxx: boolean;
14
+ modulesTypeScriptTypes: boolean;
15
+ modulesWindows: boolean;
16
+ componentsWindows: boolean;
17
+ internalComponents: boolean;
18
+ namespace: string;
19
+ outputDirectory: string;
20
+ cppStringType: CppStringTypes;
21
+ separateDataTypes: boolean;
22
+ }
23
+ interface Options extends SharedOptions {
24
+ moduleSpecName: string;
25
+ schema: SchemaType;
26
+ }
27
+ interface Config {
28
+ generators: any[];
29
+ test?: boolean;
30
+ }
31
+ export declare function parseFile(filename: string): SchemaType;
32
+ export declare function combineSchemas(files: string[]): SchemaType;
33
+ export declare function generate({ libraryName, methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, internalComponents, componentsWindows, namespace, outputDirectory, cppStringType, separateDataTypes, moduleSpecName, schema, }: Options, { /*generators,*/ test }: Config): boolean;
34
+ export interface CodeGenOptions extends SharedOptions {
35
+ file?: string;
36
+ files?: string[];
37
+ test: boolean;
38
+ }
39
+ export declare function runCodeGen(options: CodeGenOptions): boolean;
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation.
4
+ * Licensed under the MIT License.
5
+ *
6
+ * @format
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.runCodeGen = exports.generate = exports.combineSchemas = exports.parseFile = void 0;
13
+ const path_1 = __importDefault(require("path"));
14
+ const fs_1 = __importDefault(require("@react-native-windows/fs"));
15
+ const globby_1 = __importDefault(require("globby"));
16
+ const GenerateNM2_1 = require("./generators/GenerateNM2");
17
+ const GenerateComponentWindows_1 = require("./generators/GenerateComponentWindows");
18
+ const GenerateTypeScript_1 = require("./generators/GenerateTypeScript");
19
+ // Load @react-native/codegen from react-native
20
+ const rnPath = path_1.default.dirname(require.resolve('react-native/package.json'));
21
+ const rncodegenPath = path_1.default.dirname(require.resolve('@react-native/codegen/package.json', { paths: [rnPath] }));
22
+ function getParser(isTypeScript) {
23
+ if (isTypeScript) {
24
+ const fp = require(path_1.default.resolve(rncodegenPath, 'lib/parsers/typescript/parser'));
25
+ return new fp.TypeScriptParser();
26
+ }
27
+ else {
28
+ const fp = require(path_1.default.resolve(rncodegenPath, 'lib/parsers/flow/parser'));
29
+ return new fp.FlowParser();
30
+ }
31
+ }
32
+ const schemaValidator = require(path_1.default.resolve(rncodegenPath, 'lib/SchemaValidator'));
33
+ function normalizeFileMap(map, outputDir, outMap) {
34
+ for (const [fileName, contents] of map) {
35
+ const location = path_1.default.join(outputDir, fileName);
36
+ outMap.set(path_1.default.normalize(location), contents);
37
+ }
38
+ }
39
+ function checkFilesForChanges(map, outputDir) {
40
+ let hasChanges = false;
41
+ outputDir = path_1.default.resolve(outputDir);
42
+ const globbyDir = outputDir.replace(/\\/g, '/');
43
+ const allExistingFiles = globby_1.default
44
+ .sync([`${globbyDir}/**`, `${globbyDir}/**/.*`], { absolute: true })
45
+ .map(_ => path_1.default.normalize(_));
46
+ const allGeneratedFiles = [...map.keys()].map(_ => path_1.default.normalize(_)).sort();
47
+ if (allExistingFiles.length !== allGeneratedFiles.length ||
48
+ !allGeneratedFiles.every(filepath => allExistingFiles.includes(path_1.default.normalize(path_1.default.resolve(process.cwd(), filepath)))))
49
+ return true;
50
+ for (const [fileName, contents] of map) {
51
+ if (!fs_1.default.existsSync(fileName)) {
52
+ hasChanges = true;
53
+ continue;
54
+ }
55
+ const currentContents = fs_1.default.readFileSync(fileName, 'utf8');
56
+ if (currentContents !== contents) {
57
+ console.log(`- ${fileName} has changed`);
58
+ hasChanges = true;
59
+ continue;
60
+ }
61
+ }
62
+ return hasChanges;
63
+ }
64
+ function writeMapToFiles(map, outputDir) {
65
+ let success = true;
66
+ outputDir = path_1.default.resolve(outputDir);
67
+ const globbyDir = outputDir.replace(/\\/g, '/');
68
+ // This ensures that we delete any generated files from modules that have been deleted
69
+ const allExistingFiles = globby_1.default.sync([`${globbyDir}/**`, `${globbyDir}/**/.*`], { absolute: true });
70
+ const allGeneratedFiles = [...map.keys()].map(_ => path_1.default.normalize(_)).sort();
71
+ allExistingFiles.forEach(existingFile => {
72
+ if (!allGeneratedFiles.includes(path_1.default.normalize(existingFile))) {
73
+ console.log('Deleting ', existingFile);
74
+ fs_1.default.unlinkSync(existingFile);
75
+ }
76
+ });
77
+ for (const [fileName, contents] of map) {
78
+ try {
79
+ fs_1.default.mkdirSync(path_1.default.dirname(fileName), { recursive: true });
80
+ if (fs_1.default.existsSync(fileName)) {
81
+ const currentContents = fs_1.default.readFileSync(fileName, 'utf8');
82
+ // Don't update the files if there are no changes as this breaks incremental builds
83
+ if (currentContents === contents) {
84
+ continue;
85
+ }
86
+ }
87
+ console.log('Writing ', fileName);
88
+ fs_1.default.writeFileSync(fileName, contents);
89
+ }
90
+ catch (error) {
91
+ success = false;
92
+ console.error(`Failed to write ${fileName} to ${fileName}`, error);
93
+ }
94
+ }
95
+ return success;
96
+ }
97
+ function parseFile(filename) {
98
+ try {
99
+ const isTypeScript = path_1.default.extname(filename) === '.ts' || path_1.default.extname(filename) === '.tsx';
100
+ const contents = fs_1.default.readFileSync(filename, 'utf8');
101
+ const schema = getParser(isTypeScript).parseString(contents, filename);
102
+ // there will be at most one turbo module per file
103
+ const moduleName = Object.keys(schema.modules)[0];
104
+ if (moduleName) {
105
+ const spec = schema.modules[moduleName];
106
+ if (spec.type === 'NativeModule') {
107
+ if (contents) {
108
+ // This is a temporary implementation until such information is added to the schema in facebook/react-native
109
+ if (contents.includes('TurboModuleRegistry.get<')) {
110
+ (0, GenerateTypeScript_1.setOptionalTurboModule)(spec, true);
111
+ }
112
+ else if (contents.includes('TurboModuleRegistry.getEnforcing<')) {
113
+ (0, GenerateTypeScript_1.setOptionalTurboModule)(spec, false);
114
+ }
115
+ }
116
+ }
117
+ }
118
+ return schema;
119
+ }
120
+ catch (e) {
121
+ if (e instanceof Error) {
122
+ e.message = `(${filename}): ${e.message}`;
123
+ }
124
+ throw e;
125
+ }
126
+ }
127
+ exports.parseFile = parseFile;
128
+ function combineSchemas(files) {
129
+ return files.reduce((merged, filename) => {
130
+ const contents = fs_1.default.readFileSync(filename, 'utf8');
131
+ if (contents &&
132
+ (/export\s+default\s+\(?codegenNativeComponent</.test(contents) ||
133
+ contents.includes('extends TurboModule'))) {
134
+ const schema = parseFile(filename);
135
+ merged.modules = { ...merged.modules, ...schema.modules };
136
+ }
137
+ return merged;
138
+ }, { modules: {} });
139
+ }
140
+ exports.combineSchemas = combineSchemas;
141
+ function generate({ libraryName, methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, internalComponents, componentsWindows, namespace, outputDirectory, cppStringType, separateDataTypes, moduleSpecName, schema, }, { /*generators,*/ test }) {
142
+ schemaValidator.validate(schema);
143
+ const componentOutputdir = path_1.default.join(outputDirectory, 'react/components', libraryName);
144
+ const generatedFiles = new Map();
145
+ generatedFiles.set(path_1.default.join(outputDirectory, '.clang-format'), 'DisableFormat: true\nSortIncludes: false');
146
+ const generateNM2 = (0, GenerateNM2_1.createNM2Generator)({
147
+ methodOnly,
148
+ namespace,
149
+ cppStringType,
150
+ separateDataTypes,
151
+ });
152
+ const generateJsiModuleH = require(path_1.default.resolve(rncodegenPath, 'lib/generators/modules/GenerateModuleH')).generate;
153
+ const generateJsiModuleCpp = require(path_1.default.resolve(rncodegenPath, 'lib/generators/modules/GenerateModuleCpp')).generate;
154
+ const generatorPropsH = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GeneratePropsH')).generate;
155
+ const generatorPropsCPP = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GeneratePropsCpp')).generate;
156
+ const generatorShadowNodeH = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GenerateShadowNodeH')).generate;
157
+ const generatorShadowNodeCPP = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GenerateShadowNodeCpp')).generate;
158
+ const generatorComponentDescriptorH = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GenerateComponentDescriptorH')).generate;
159
+ const generatorEventEmitterH = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GenerateEventEmitterH')).generate;
160
+ const generatorEventEmitterCPP = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GenerateEventEmitterCpp')).generate;
161
+ const generatorStateCPP = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GenerateStateCpp')).generate;
162
+ const generatorStateH = require(path_1.default.resolve(rncodegenPath, 'lib/generators/components/GenerateStateH')).generate;
163
+ const moduleGenerators = [];
164
+ if (modulesWindows) {
165
+ moduleGenerators.push(generateNM2);
166
+ }
167
+ if (modulesCxx) {
168
+ moduleGenerators.push(generateJsiModuleH);
169
+ moduleGenerators.push(generateJsiModuleCpp);
170
+ }
171
+ if (modulesTypeScriptTypes) {
172
+ moduleGenerators.push(GenerateTypeScript_1.generateTypeScript);
173
+ }
174
+ moduleGenerators.forEach(generator => {
175
+ const generated = generator(libraryName, schema, moduleSpecName);
176
+ normalizeFileMap(generated, outputDirectory, generatedFiles);
177
+ });
178
+ if (Object.keys(schema.modules).some(moduleName => schema.modules[moduleName].type === 'Component')) {
179
+ const componentGenerators = [];
180
+ if (internalComponents) {
181
+ componentGenerators.push(generatorComponentDescriptorH, generatorEventEmitterCPP, generatorEventEmitterH, generatorPropsCPP, generatorPropsH, generatorShadowNodeCPP, generatorShadowNodeH, generatorStateCPP, generatorStateH);
182
+ }
183
+ if (componentsWindows) {
184
+ const generateComponentWindows = (0, GenerateComponentWindows_1.createComponentGenerator)({
185
+ namespace,
186
+ cppStringType,
187
+ });
188
+ componentGenerators.push(generateComponentWindows);
189
+ }
190
+ componentGenerators.forEach(generator => {
191
+ const generated = generator(libraryName, schema, moduleSpecName);
192
+ normalizeFileMap(generated, componentOutputdir, generatedFiles);
193
+ });
194
+ }
195
+ if (test === true) {
196
+ return checkFilesForChanges(generatedFiles, outputDirectory);
197
+ }
198
+ return writeMapToFiles(generatedFiles, outputDirectory);
199
+ }
200
+ exports.generate = generate;
201
+ function runCodeGen(options) {
202
+ if (!options.file && !options.files)
203
+ throw new Error('Must specify file or files option');
204
+ const schema = options.file
205
+ ? parseFile(options.file)
206
+ : combineSchemas(globby_1.default.sync(options.files));
207
+ const libraryName = options.libraryName;
208
+ const moduleSpecName = 'moduleSpecName';
209
+ const { methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, componentsWindows, internalComponents, namespace, outputDirectory, cppStringType, separateDataTypes, } = options;
210
+ return generate({
211
+ libraryName,
212
+ methodOnly,
213
+ modulesCxx,
214
+ modulesTypeScriptTypes,
215
+ modulesWindows,
216
+ componentsWindows,
217
+ internalComponents,
218
+ namespace,
219
+ outputDirectory,
220
+ cppStringType,
221
+ separateDataTypes,
222
+ moduleSpecName,
223
+ schema,
224
+ }, { generators: [], test: options.test });
225
+ }
226
+ exports.runCodeGen = runCodeGen;
227
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport path from 'path';\nimport fs from '@react-native-windows/fs';\nimport globby from 'globby';\nimport type {CppStringTypes} from './generators/GenerateNM2';\nimport {createNM2Generator} from './generators/GenerateNM2';\nimport {createComponentGenerator} from './generators/GenerateComponentWindows';\nimport {\n generateTypeScript,\n setOptionalTurboModule,\n} from './generators/GenerateTypeScript';\nimport type {SchemaType} from '@react-native/codegen/lib/CodegenSchema';\nimport type {Parser} from '@react-native/codegen/lib/parsers/parser';\n\nexport type {CppStringTypes} from './generators/GenerateNM2';\n\n// Load @react-native/codegen from react-native\nconst rnPath = path.dirname(require.resolve('react-native/package.json'));\nconst rncodegenPath = path.dirname(\n require.resolve('@react-native/codegen/package.json', {paths: [rnPath]}),\n);\n\nfunction getParser(isTypeScript: boolean): Parser {\n if (isTypeScript) {\n const fp = require(path.resolve(\n rncodegenPath,\n 'lib/parsers/typescript/parser',\n ));\n return new fp.TypeScriptParser();\n } else {\n const fp = require(path.resolve(rncodegenPath, 'lib/parsers/flow/parser'));\n return new fp.FlowParser();\n }\n}\n\nconst schemaValidator = require(path.resolve(\n rncodegenPath,\n 'lib/SchemaValidator',\n));\n\nexport interface SharedOptions {\n libraryName: string;\n methodOnly: boolean;\n modulesCxx: boolean;\n modulesTypeScriptTypes: boolean;\n modulesWindows: boolean;\n componentsWindows: boolean;\n internalComponents: boolean;\n namespace: string;\n outputDirectory: string;\n cppStringType: CppStringTypes;\n separateDataTypes: boolean;\n}\n\ninterface Options extends SharedOptions {\n moduleSpecName: string;\n schema: SchemaType;\n}\n\ninterface Config {\n generators: any[] /*Generators[]*/;\n test?: boolean;\n}\n\nfunction normalizeFileMap(\n map: Map<string, string>,\n outputDir: string,\n outMap: Map<string, string>,\n): void {\n for (const [fileName, contents] of map) {\n const location = path.join(outputDir, fileName);\n outMap.set(path.normalize(location), contents);\n }\n}\n\nfunction checkFilesForChanges(\n map: Map<string, string>,\n outputDir: string,\n): boolean {\n let hasChanges = false;\n\n outputDir = path.resolve(outputDir);\n const globbyDir = outputDir.replace(/\\\\/g, '/');\n const allExistingFiles = globby\n .sync([`${globbyDir}/**`, `${globbyDir}/**/.*`], {absolute: true})\n .map(_ => path.normalize(_));\n const allGeneratedFiles = [...map.keys()].map(_ => path.normalize(_)).sort();\n\n if (\n allExistingFiles.length !== allGeneratedFiles.length ||\n !allGeneratedFiles.every(filepath =>\n allExistingFiles.includes(\n path.normalize(path.resolve(process.cwd(), filepath)),\n ),\n )\n )\n return true;\n\n for (const [fileName, contents] of map) {\n if (!fs.existsSync(fileName)) {\n hasChanges = true;\n continue;\n }\n\n const currentContents = fs.readFileSync(fileName, 'utf8');\n if (currentContents !== contents) {\n console.log(`- ${fileName} has changed`);\n hasChanges = true;\n continue;\n }\n }\n\n return hasChanges;\n}\n\nfunction writeMapToFiles(map: Map<string, string>, outputDir: string) {\n let success = true;\n\n outputDir = path.resolve(outputDir);\n const globbyDir = outputDir.replace(/\\\\/g, '/');\n\n // This ensures that we delete any generated files from modules that have been deleted\n const allExistingFiles = globby.sync(\n [`${globbyDir}/**`, `${globbyDir}/**/.*`],\n {absolute: true},\n );\n\n const allGeneratedFiles = [...map.keys()].map(_ => path.normalize(_)).sort();\n allExistingFiles.forEach(existingFile => {\n if (!allGeneratedFiles.includes(path.normalize(existingFile))) {\n console.log('Deleting ', existingFile);\n fs.unlinkSync(existingFile);\n }\n });\n\n for (const [fileName, contents] of map) {\n try {\n fs.mkdirSync(path.dirname(fileName), {recursive: true});\n\n if (fs.existsSync(fileName)) {\n const currentContents = fs.readFileSync(fileName, 'utf8');\n // Don't update the files if there are no changes as this breaks incremental builds\n if (currentContents === contents) {\n continue;\n }\n }\n\n console.log('Writing ', fileName);\n fs.writeFileSync(fileName, contents);\n } catch (error) {\n success = false;\n console.error(`Failed to write ${fileName} to ${fileName}`, error);\n }\n }\n\n return success;\n}\n\nexport function parseFile(filename: string): SchemaType {\n try {\n const isTypeScript =\n path.extname(filename) === '.ts' || path.extname(filename) === '.tsx';\n const contents = fs.readFileSync(filename, 'utf8');\n const schema = getParser(isTypeScript).parseString(contents, filename);\n // there will be at most one turbo module per file\n const moduleName = Object.keys(schema.modules)[0];\n if (moduleName) {\n const spec = schema.modules[moduleName];\n if (spec.type === 'NativeModule') {\n if (contents) {\n // This is a temporary implementation until such information is added to the schema in facebook/react-native\n if (contents.includes('TurboModuleRegistry.get<')) {\n setOptionalTurboModule(spec, true);\n } else if (contents.includes('TurboModuleRegistry.getEnforcing<')) {\n setOptionalTurboModule(spec, false);\n }\n }\n }\n }\n return schema;\n } catch (e) {\n if (e instanceof Error) {\n e.message = `(${filename}): ${e.message}`;\n }\n throw e;\n }\n}\n\nexport function combineSchemas(files: string[]): SchemaType {\n return files.reduce(\n (merged, filename) => {\n const contents = fs.readFileSync(filename, 'utf8');\n if (\n contents &&\n (/export\\s+default\\s+\\(?codegenNativeComponent</.test(contents) ||\n contents.includes('extends TurboModule'))\n ) {\n const schema = parseFile(filename);\n merged.modules = {...merged.modules, ...schema.modules};\n }\n return merged;\n },\n {modules: {}},\n );\n}\n\nexport function generate(\n {\n libraryName,\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n internalComponents,\n componentsWindows,\n namespace,\n outputDirectory,\n cppStringType,\n separateDataTypes,\n moduleSpecName,\n schema,\n }: Options,\n {/*generators,*/ test}: Config,\n): boolean {\n schemaValidator.validate(schema);\n\n const componentOutputdir = path.join(\n outputDirectory,\n 'react/components',\n libraryName,\n );\n\n const generatedFiles = new Map<string, string>();\n\n generatedFiles.set(\n path.join(outputDirectory, '.clang-format'),\n 'DisableFormat: true\\nSortIncludes: false',\n );\n\n const generateNM2 = createNM2Generator({\n methodOnly,\n namespace,\n cppStringType,\n separateDataTypes,\n });\n\n const generateJsiModuleH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/modules/GenerateModuleH',\n )).generate;\n const generateJsiModuleCpp = require(path.resolve(\n rncodegenPath,\n 'lib/generators/modules/GenerateModuleCpp',\n )).generate;\n const generatorPropsH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GeneratePropsH',\n )).generate;\n const generatorPropsCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GeneratePropsCpp',\n )).generate;\n const generatorShadowNodeH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateShadowNodeH',\n )).generate;\n const generatorShadowNodeCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateShadowNodeCpp',\n )).generate;\n const generatorComponentDescriptorH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateComponentDescriptorH',\n )).generate;\n const generatorEventEmitterH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateEventEmitterH',\n )).generate;\n const generatorEventEmitterCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateEventEmitterCpp',\n )).generate;\n const generatorStateCPP = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateStateCpp',\n )).generate;\n const generatorStateH = require(path.resolve(\n rncodegenPath,\n 'lib/generators/components/GenerateStateH',\n )).generate;\n\n const moduleGenerators = [];\n\n if (modulesWindows) {\n moduleGenerators.push(generateNM2);\n }\n\n if (modulesCxx) {\n moduleGenerators.push(generateJsiModuleH);\n moduleGenerators.push(generateJsiModuleCpp);\n }\n\n if (modulesTypeScriptTypes) {\n moduleGenerators.push(generateTypeScript);\n }\n\n moduleGenerators.forEach(generator => {\n const generated: Map<string, string> = generator(\n libraryName,\n schema,\n moduleSpecName,\n );\n normalizeFileMap(generated, outputDirectory, generatedFiles);\n });\n\n if (\n Object.keys(schema.modules).some(\n moduleName => schema.modules[moduleName].type === 'Component',\n )\n ) {\n const componentGenerators = [];\n\n if (internalComponents) {\n componentGenerators.push(\n generatorComponentDescriptorH,\n generatorEventEmitterCPP,\n generatorEventEmitterH,\n generatorPropsCPP,\n generatorPropsH,\n generatorShadowNodeCPP,\n generatorShadowNodeH,\n generatorStateCPP,\n generatorStateH,\n );\n }\n\n if (componentsWindows) {\n const generateComponentWindows = createComponentGenerator({\n namespace,\n cppStringType,\n });\n\n componentGenerators.push(generateComponentWindows);\n }\n\n componentGenerators.forEach(generator => {\n const generated: Map<string, string> = generator(\n libraryName,\n schema,\n moduleSpecName,\n );\n normalizeFileMap(generated, componentOutputdir, generatedFiles);\n });\n }\n\n if (test === true) {\n return checkFilesForChanges(generatedFiles, outputDirectory);\n }\n\n return writeMapToFiles(generatedFiles, outputDirectory);\n}\n\nexport interface CodeGenOptions extends SharedOptions {\n file?: string;\n files?: string[];\n test: boolean;\n}\n\nexport function runCodeGen(options: CodeGenOptions): boolean {\n if (!options.file && !options.files)\n throw new Error('Must specify file or files option');\n\n const schema = options.file\n ? parseFile(options.file)\n : combineSchemas(globby.sync(options.files!));\n\n const libraryName = options.libraryName;\n const moduleSpecName = 'moduleSpecName';\n const {\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n componentsWindows,\n internalComponents,\n namespace,\n outputDirectory,\n cppStringType,\n separateDataTypes,\n } = options;\n return generate(\n {\n libraryName,\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n componentsWindows,\n internalComponents,\n namespace,\n outputDirectory,\n cppStringType,\n separateDataTypes,\n moduleSpecName,\n schema,\n },\n {generators: [], test: options.test},\n );\n}\n"]}
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "@react-native-windows/codegen",
3
- "version": "0.0.0-canary.13",
3
+ "version": "0.0.0-canary.130",
4
4
  "description": "Generators for react-native-codegen targeting react-native-windows",
5
- "main": "index.js",
6
- "repository": "https://github.com/microsoft/react-native-windows",
5
+ "main": "lib-commonjs/index.js",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/microsoft/react-native-windows",
9
+ "directory": "packages/@react-native-windows/codegen"
10
+ },
7
11
  "license": "MIT",
8
12
  "private": false,
9
13
  "scripts": {
@@ -15,43 +19,57 @@
15
19
  "watch": "rnw-scripts watch"
16
20
  },
17
21
  "bin": {
18
- "codegen": "./bin.js"
22
+ "react-native-windows-codegen": "./bin.js"
19
23
  },
20
24
  "dependencies": {
25
+ "@react-native-windows/fs": "^0.0.0-canary.70",
21
26
  "chalk": "^4.1.0",
22
- "globby": "^9.2.0",
27
+ "globby": "^11.1.0",
28
+ "minimatch": "^10.0.3",
23
29
  "mustache": "^4.0.1",
24
- "react-native-tscodegen": "0.68.4",
25
30
  "source-map-support": "^0.5.19",
26
31
  "yargs": "^16.2.0"
27
32
  },
28
33
  "devDependencies": {
29
- "@rnw-scripts/eslint-config": "1.1.8",
30
- "@rnw-scripts/jest-unittest-config": "1.2.4",
31
- "@rnw-scripts/just-task": "2.2.1",
32
- "@rnw-scripts/ts-config": "2.0.1",
34
+ "@rnw-scripts/eslint-config": "1.2.38",
35
+ "@rnw-scripts/jest-unittest-config": "1.5.12",
36
+ "@rnw-scripts/just-task": "2.3.58",
37
+ "@rnw-scripts/ts-config": "2.0.6",
33
38
  "@types/chalk": "^2.2.0",
34
- "@types/globby": "^9.1.0",
35
- "@types/jest": "^26.0.20",
36
- "@types/node": "^14.14.22",
39
+ "@types/jest": "^29.2.2",
40
+ "@types/node": "^22.14.0",
37
41
  "@types/yargs": "16.0.0",
38
- "babel-jest": "^26.3.0",
39
- "eslint": "7.12.0",
40
- "jest": "^26.6.3",
41
- "just-scripts": "^1.3.3",
42
- "prettier": "1.19.1",
43
- "typescript": "^3.8.3"
42
+ "@typescript-eslint/eslint-plugin": "^7.1.1",
43
+ "@typescript-eslint/parser": "^7.1.1",
44
+ "babel-jest": "^29.6.3",
45
+ "eslint": "^8.19.0",
46
+ "jest": "^29.7.0",
47
+ "prettier": "2.8.8",
48
+ "typescript": "5.0.4"
49
+ },
50
+ "peerDependencies": {
51
+ "react-native": "*"
44
52
  },
53
+ "files": [
54
+ "bin.js",
55
+ "CHANGELOG.md",
56
+ "README.md",
57
+ "lib-commonjs",
58
+ "src"
59
+ ],
45
60
  "beachball": {
46
61
  "defaultNpmTag": "canary",
47
62
  "disallowedChangeTypes": [
48
63
  "major",
49
64
  "minor",
50
- "patch"
65
+ "patch",
66
+ "premajor",
67
+ "preminor",
68
+ "prepatch"
51
69
  ]
52
70
  },
53
71
  "promoteRelease": true,
54
72
  "engines": {
55
- "node": ">= 12.0.0"
73
+ "node": ">= 22"
56
74
  }
57
75
  }