@react-native-windows/codegen 0.72.0 → 0.72.1

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 (33) hide show
  1. package/CHANGELOG.md +14 -5
  2. package/lib-commonjs/Cli.js +13 -0
  3. package/lib-commonjs/Cli.js.map +1 -1
  4. package/lib-commonjs/generators/AliasGen.d.ts +2 -1
  5. package/lib-commonjs/generators/AliasGen.js +9 -9
  6. package/lib-commonjs/generators/AliasGen.js.map +1 -1
  7. package/lib-commonjs/generators/GenerateNM2.d.ts +4 -2
  8. package/lib-commonjs/generators/GenerateNM2.js +7 -3
  9. package/lib-commonjs/generators/GenerateNM2.js.map +1 -1
  10. package/lib-commonjs/generators/ObjectTypes.d.ts +6 -2
  11. package/lib-commonjs/generators/ObjectTypes.js +9 -9
  12. package/lib-commonjs/generators/ObjectTypes.js.map +1 -1
  13. package/lib-commonjs/generators/ParamTypes.d.ts +3 -2
  14. package/lib-commonjs/generators/ParamTypes.js +27 -27
  15. package/lib-commonjs/generators/ParamTypes.js.map +1 -1
  16. package/lib-commonjs/generators/ReturnTypes.d.ts +3 -2
  17. package/lib-commonjs/generators/ReturnTypes.js +7 -7
  18. package/lib-commonjs/generators/ReturnTypes.js.map +1 -1
  19. package/lib-commonjs/generators/ValidateMethods.d.ts +2 -1
  20. package/lib-commonjs/generators/ValidateMethods.js +15 -15
  21. package/lib-commonjs/generators/ValidateMethods.js.map +1 -1
  22. package/lib-commonjs/index.d.ts +10 -13
  23. package/lib-commonjs/index.js +6 -4
  24. package/lib-commonjs/index.js.map +1 -1
  25. package/package.json +1 -1
  26. package/src/Cli.ts +19 -2
  27. package/src/generators/AliasGen.ts +18 -6
  28. package/src/generators/GenerateNM2.ts +11 -2
  29. package/src/generators/ObjectTypes.ts +15 -3
  30. package/src/generators/ParamTypes.ts +43 -9
  31. package/src/generators/ReturnTypes.ts +18 -3
  32. package/src/generators/ValidateMethods.ts +32 -4
  33. package/src/index.ts +18 -14
@@ -1 +1 @@
1
- {"version":3,"file":"ReturnTypes.js","sourceRoot":"","sources":["../../src/generators/ReturnTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;AAOb,+CAAyD;AAEzD,SAAS,mBAAmB,CAC1B,IAAgD,EAChD,OAAiB,EACjB,aAAqB;IAErB,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,uBAAuB;YAC1B,OAAO,MAAM,CAAC;QAChB,KAAK,wBAAwB;YAC3B,OAAO,iBAAiB,mBAAmB,CACzC,IAAI,CAAC,cAAc,EACnB,OAAO,EACP,aAAa,CACd,GAAG,CAAC;QACP;YACE,OAAO,IAAA,wCAA0B,EAC/B,IAAI,EACJ,OAAO,EACP,aAAa,EACb,qBAAqB,CACtB,CAAC;KACL;AACH,CAAC;AAED,SAAgB,uBAAuB,CACrC,IAAgD,EAChD,OAAiB,EACjB,aAAqB;IAErB,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,aAAa,CAAC,CAAC;AAC3E,CAAC;AAND,0DAMC;AAED,SAAgB,uBAAuB,CACrC,IAAgD,EAChD,OAAiB,EACjB,aAAqB;IAErB,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,aAAa,CAAC,CAAC;AAC3E,CAAC;AAND,0DAMC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {\n NativeModuleReturnTypeAnnotation,\n Nullable,\n} from '@react-native/codegen/lib/CodegenSchema';\nimport {AliasMap} from './AliasManaging';\nimport {translateFieldOrReturnType} from './ObjectTypes';\n\nfunction translateReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n): string {\n switch (type.type) {\n case 'VoidTypeAnnotation':\n case 'PromiseTypeAnnotation':\n return 'void';\n case 'NullableTypeAnnotation':\n return `std::optional<${translateReturnType(\n type.typeAnnotation,\n aliases,\n baseAliasName,\n )}>`;\n default:\n return translateFieldOrReturnType(\n type,\n aliases,\n baseAliasName,\n 'translateReturnType',\n );\n }\n}\n\nexport function translateSpecReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n) {\n return translateReturnType(type, aliases, `${baseAliasName}_returnType`);\n}\n\nexport function translateImplReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n) {\n return translateReturnType(type, aliases, `${baseAliasName}_returnType`);\n}\n"]}
1
+ {"version":3,"file":"ReturnTypes.js","sourceRoot":"","sources":["../../src/generators/ReturnTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;;AAOb,+CAA4E;AAE5E,SAAS,mBAAmB,CAC1B,IAAgD,EAChD,OAAiB,EACjB,aAAqB,EACrB,OAA0B;IAE1B,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,uBAAuB;YAC1B,OAAO,MAAM,CAAC;QAChB,KAAK,wBAAwB;YAC3B,OAAO,iBAAiB,mBAAmB,CACzC,IAAI,CAAC,cAAc,EACnB,OAAO,EACP,aAAa,EACb,OAAO,CACR,GAAG,CAAC;QACP;YACE,OAAO,IAAA,wCAA0B,EAC/B,IAAI,EACJ,OAAO,EACP,aAAa,EACb,qBAAqB,EACrB,OAAO,CACR,CAAC;KACL;AACH,CAAC;AAED,SAAgB,uBAAuB,CACrC,IAAgD,EAChD,OAAiB,EACjB,aAAqB,EACrB,OAA0B;IAE1B,OAAO,mBAAmB,CACxB,IAAI,EACJ,OAAO,EACP,GAAG,aAAa,aAAa,EAC7B,OAAO,CACR,CAAC;AACJ,CAAC;AAZD,0DAYC;AAED,SAAgB,uBAAuB,CACrC,IAAgD,EAChD,OAAiB,EACjB,aAAqB,EACrB,OAA0B;IAE1B,OAAO,mBAAmB,CACxB,IAAI,EACJ,OAAO,EACP,GAAG,aAAa,aAAa,EAC7B,OAAO,CACR,CAAC;AACJ,CAAC;AAZD,0DAYC","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n * @format\n */\n\n'use strict';\n\nimport type {\n NativeModuleReturnTypeAnnotation,\n Nullable,\n} from '@react-native/codegen/lib/CodegenSchema';\nimport {AliasMap} from './AliasManaging';\nimport {CppCodegenOptions, translateFieldOrReturnType} from './ObjectTypes';\n\nfunction translateReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n): string {\n switch (type.type) {\n case 'VoidTypeAnnotation':\n case 'PromiseTypeAnnotation':\n return 'void';\n case 'NullableTypeAnnotation':\n return `std::optional<${translateReturnType(\n type.typeAnnotation,\n aliases,\n baseAliasName,\n options,\n )}>`;\n default:\n return translateFieldOrReturnType(\n type,\n aliases,\n baseAliasName,\n 'translateReturnType',\n options,\n );\n }\n}\n\nexport function translateSpecReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n) {\n return translateReturnType(\n type,\n aliases,\n `${baseAliasName}_returnType`,\n options,\n );\n}\n\nexport function translateImplReturnType(\n type: Nullable<NativeModuleReturnTypeAnnotation>,\n aliases: AliasMap,\n baseAliasName: string,\n options: CppCodegenOptions,\n) {\n return translateReturnType(\n type,\n aliases,\n `${baseAliasName}_returnType`,\n options,\n );\n}\n"]}
@@ -5,4 +5,5 @@
5
5
  */
6
6
  import type { NativeModuleSchema } from '@react-native/codegen/lib/CodegenSchema';
7
7
  import { AliasMap } from './AliasManaging';
8
- export declare function generateValidateMethods(nativeModule: NativeModuleSchema, aliases: AliasMap): [string, string];
8
+ import type { CppCodegenOptions } from './ObjectTypes';
9
+ export declare function generateValidateMethods(nativeModule: NativeModuleSchema, aliases: AliasMap, options: CppCodegenOptions): [string, string];
@@ -12,27 +12,27 @@ function isMethodSync(funcType) {
12
12
  return (funcType.returnTypeAnnotation.type !== 'VoidTypeAnnotation' &&
13
13
  funcType.returnTypeAnnotation.type !== 'PromiseTypeAnnotation');
14
14
  }
15
- function getPossibleMethodSignatures(prop, funcType, aliases, baseAliasName) {
16
- const args = (0, ParamTypes_1.translateArgs)(funcType.params, aliases, baseAliasName);
15
+ function getPossibleMethodSignatures(prop, funcType, aliases, baseAliasName, options) {
16
+ const args = (0, ParamTypes_1.translateArgs)(funcType.params, aliases, baseAliasName, options);
17
17
  if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {
18
18
  if (funcType.returnTypeAnnotation.elementType) {
19
- args.push(`::React::ReactPromise<${(0, ReturnTypes_1.translateImplReturnType)(funcType.returnTypeAnnotation.elementType, aliases, baseAliasName)}> &&result`);
19
+ args.push(`::React::ReactPromise<${(0, ReturnTypes_1.translateImplReturnType)(funcType.returnTypeAnnotation.elementType, aliases, baseAliasName, options)}> &&result`);
20
20
  }
21
21
  else {
22
22
  args.push('::React::ReactPromise<::React::JSValue> &&result');
23
23
  }
24
24
  }
25
25
  // TODO: be much more exhastive on the possible method signatures that can be used..
26
- const sig = `REACT_${isMethodSync(funcType) ? 'SYNC_' : ''}METHOD(${prop.name}) ${(0, ReturnTypes_1.translateImplReturnType)(funcType.returnTypeAnnotation, aliases, baseAliasName)} ${prop.name}(${args.join(', ')}) noexcept { /* implementation */ }`;
27
- const staticsig = `REACT_${isMethodSync(funcType) ? 'SYNC_' : ''}METHOD(${prop.name}) static ${(0, ReturnTypes_1.translateImplReturnType)(funcType.returnTypeAnnotation, aliases, baseAliasName)} ${prop.name}(${args.join(', ')}) noexcept { /* implementation */ }`;
26
+ const sig = `REACT_${isMethodSync(funcType) ? 'SYNC_' : ''}METHOD(${prop.name}) ${(0, ReturnTypes_1.translateImplReturnType)(funcType.returnTypeAnnotation, aliases, baseAliasName, options)} ${prop.name}(${args.join(', ')}) noexcept { /* implementation */ }`;
27
+ 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 */ }`;
28
28
  return [sig, staticsig];
29
29
  }
30
- function translatePossibleMethodSignatures(prop, funcType, aliases, baseAliasName) {
31
- return getPossibleMethodSignatures(prop, funcType, aliases, baseAliasName)
30
+ function translatePossibleMethodSignatures(prop, funcType, aliases, baseAliasName, options) {
31
+ return getPossibleMethodSignatures(prop, funcType, aliases, baseAliasName, options)
32
32
  .map(sig => `" ${sig}\\n"`)
33
33
  .join('\n ');
34
34
  }
35
- function renderProperties(properties, aliases, tuple) {
35
+ function renderProperties(properties, aliases, tuple, options) {
36
36
  // TODO: generate code for constants
37
37
  return properties
38
38
  .filter(prop => prop.name !== 'getConstants')
@@ -43,11 +43,11 @@ function renderProperties(properties, aliases, tuple) {
43
43
  const funcType = prop.typeAnnotation.type === 'NullableTypeAnnotation'
44
44
  ? prop.typeAnnotation.typeAnnotation
45
45
  : prop.typeAnnotation;
46
- const traversedArgs = (0, ParamTypes_1.translateSpecArgs)(funcType.params, aliases, propAliasName);
47
- const translatedReturnParam = (0, ReturnTypes_1.translateSpecReturnType)(funcType.returnTypeAnnotation, aliases, propAliasName);
46
+ const traversedArgs = (0, ParamTypes_1.translateSpecArgs)(funcType.params, aliases, propAliasName, options);
47
+ const translatedReturnParam = (0, ReturnTypes_1.translateSpecReturnType)(funcType.returnTypeAnnotation, aliases, propAliasName, options);
48
48
  if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {
49
49
  if (funcType.returnTypeAnnotation.elementType) {
50
- traversedArgs.push(`Promise<${(0, ReturnTypes_1.translateSpecReturnType)(funcType.returnTypeAnnotation.elementType, aliases, propAliasName)}>`);
50
+ traversedArgs.push(`Promise<${(0, ReturnTypes_1.translateSpecReturnType)(funcType.returnTypeAnnotation.elementType, aliases, propAliasName, options)}>`);
51
51
  }
52
52
  else {
53
53
  traversedArgs.push('Promise<::React::JSValue>');
@@ -60,15 +60,15 @@ function renderProperties(properties, aliases, tuple) {
60
60
  return ` REACT_SHOW_METHOD_SPEC_ERRORS(
61
61
  ${index},
62
62
  "${prop.name}",
63
- ${translatePossibleMethodSignatures(prop, funcType, aliases, propAliasName)});`;
63
+ ${translatePossibleMethodSignatures(prop, funcType, aliases, propAliasName, options)});`;
64
64
  }
65
65
  })
66
66
  .join('\n');
67
67
  }
68
- function generateValidateMethods(nativeModule, aliases) {
68
+ function generateValidateMethods(nativeModule, aliases, options) {
69
69
  const properties = nativeModule.spec.properties;
70
- const traversedProperties = renderProperties(properties, aliases, false);
71
- const traversedPropertyTuples = renderProperties(properties, aliases, true);
70
+ const traversedProperties = renderProperties(properties, aliases, false, options);
71
+ const traversedPropertyTuples = renderProperties(properties, aliases, true, options);
72
72
  return [traversedPropertyTuples, traversedProperties];
73
73
  }
74
74
  exports.generateValidateMethods = generateValidateMethods;
@@ -1 +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 NativeModuleFunctionTypeAnnotation,\n NativeModulePropertyShape,\n NativeModuleSchema,\n} from '@react-native/codegen/lib/CodegenSchema';\nimport {AliasMap} from './AliasManaging';\nimport {translateArgs, translateSpecArgs} 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): string[] {\n const args = translateArgs(funcType.params, aliases, baseAliasName);\n if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {\n if (funcType.returnTypeAnnotation.elementType) {\n args.push(\n `::React::ReactPromise<${translateImplReturnType(\n funcType.returnTypeAnnotation.elementType,\n aliases,\n baseAliasName,\n )}> &&result`,\n );\n } else {\n args.push('::React::ReactPromise<::React::JSValue> &&result');\n }\n }\n\n // TODO: be much more exhastive 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 )} ${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 )} ${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): string {\n return getPossibleMethodSignatures(prop, funcType, aliases, baseAliasName)\n .map(sig => `\" ${sig}\\\\n\"`)\n .join('\\n ');\n}\n\nfunction renderProperties(\n properties: ReadonlyArray<NativeModulePropertyShape>,\n aliases: AliasMap,\n tuple: boolean,\n): string {\n // TODO: generate code for constants\n return properties\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 );\n\n const translatedReturnParam = translateSpecReturnType(\n funcType.returnTypeAnnotation,\n aliases,\n propAliasName,\n );\n\n if (funcType.returnTypeAnnotation.type === 'PromiseTypeAnnotation') {\n if (funcType.returnTypeAnnotation.elementType) {\n traversedArgs.push(\n `Promise<${translateSpecReturnType(\n funcType.returnTypeAnnotation.elementType,\n aliases,\n propAliasName,\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 )});`;\n }\n })\n .join('\\n');\n}\n\nexport function generateValidateMethods(\n nativeModule: NativeModuleSchema,\n aliases: AliasMap,\n): [string, string] {\n const properties = nativeModule.spec.properties;\n const traversedProperties = renderProperties(properties, aliases, false);\n const traversedPropertyTuples = renderProperties(properties, aliases, true);\n return [traversedPropertyTuples, traversedProperties];\n}\n"]}
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 NativeModuleFunctionTypeAnnotation,\n NativeModulePropertyShape,\n NativeModuleSchema,\n} from '@react-native/codegen/lib/CodegenSchema';\nimport {AliasMap} from './AliasManaging';\nimport type {CppCodegenOptions} from './ObjectTypes';\nimport {translateArgs, translateSpecArgs} 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 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 exhastive 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 properties: ReadonlyArray<NativeModulePropertyShape>,\n aliases: AliasMap,\n tuple: boolean,\n options: CppCodegenOptions,\n): string {\n // TODO: generate code for constants\n return properties\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 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 .join('\\n');\n}\n\nexport function generateValidateMethods(\n nativeModule: NativeModuleSchema,\n aliases: AliasMap,\n options: CppCodegenOptions,\n): [string, string] {\n const properties = nativeModule.spec.properties;\n const traversedProperties = renderProperties(\n properties,\n aliases,\n false,\n options,\n );\n const traversedPropertyTuples = renderProperties(\n properties,\n aliases,\n true,\n options,\n );\n return [traversedPropertyTuples, traversedProperties];\n}\n"]}
@@ -4,16 +4,21 @@
4
4
  *
5
5
  * @format
6
6
  */
7
+ import type { CppStringTypes } from './generators/GenerateNM2';
7
8
  import type { SchemaType } from '@react-native/codegen/lib/CodegenSchema';
8
- interface Options {
9
+ export type { CppStringTypes } from './generators/GenerateNM2';
10
+ export interface SharedOptions {
9
11
  libraryName: string;
10
12
  methodOnly: boolean;
11
13
  modulesCxx: boolean;
12
- moduleSpecName: string;
13
14
  modulesTypeScriptTypes: boolean;
14
15
  modulesWindows: boolean;
15
16
  namespace: string;
16
17
  outputDirectory: string;
18
+ cppStringType: CppStringTypes;
19
+ }
20
+ interface Options extends SharedOptions {
21
+ moduleSpecName: string;
17
22
  schema: SchemaType;
18
23
  }
19
24
  interface Config {
@@ -22,18 +27,10 @@ interface Config {
22
27
  }
23
28
  export declare function parseFile(filename: string): SchemaType;
24
29
  export declare function combineSchemas(files: string[]): SchemaType;
25
- export declare function generate({ libraryName, methodOnly, modulesCxx, moduleSpecName, modulesTypeScriptTypes, modulesWindows, namespace, outputDirectory, schema, }: Options, { /*generators,*/ test }: Config): boolean;
26
- export type CodeGenOptions = {
30
+ export declare function generate({ libraryName, methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, namespace, outputDirectory, cppStringType, moduleSpecName, schema, }: Options, { /*generators,*/ test }: Config): boolean;
31
+ export interface CodeGenOptions extends SharedOptions {
27
32
  file?: string;
28
33
  files?: string[];
29
- libraryName: string;
30
- methodOnly: boolean;
31
- modulesCxx: boolean;
32
- modulesTypeScriptTypes: boolean;
33
- modulesWindows: boolean;
34
- namespace: string;
35
- outputDirectory: string;
36
34
  test: boolean;
37
- };
35
+ }
38
36
  export declare function runCodeGen(options: CodeGenOptions): boolean;
39
- export {};
@@ -28,7 +28,7 @@ function getParser(isTypeScript) {
28
28
  return new fp.FlowParser();
29
29
  }
30
30
  }
31
- const schemaValidator = require(path_1.default.resolve(rncodegenPath, 'lib/schemaValidator'));
31
+ const schemaValidator = require(path_1.default.resolve(rncodegenPath, 'lib/SchemaValidator'));
32
32
  function normalizeFileMap(map, outputDir, outMap) {
33
33
  for (const [fileName, contents] of map) {
34
34
  const location = path_1.default.join(outputDir, fileName);
@@ -137,7 +137,7 @@ function combineSchemas(files) {
137
137
  }, { modules: {} });
138
138
  }
139
139
  exports.combineSchemas = combineSchemas;
140
- function generate({ libraryName, methodOnly, modulesCxx, moduleSpecName, modulesTypeScriptTypes, modulesWindows, namespace, outputDirectory, schema, }, { /*generators,*/ test }) {
140
+ function generate({ libraryName, methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, namespace, outputDirectory, cppStringType, moduleSpecName, schema, }, { /*generators,*/ test }) {
141
141
  schemaValidator.validate(schema);
142
142
  const componentOutputdir = path_1.default.join(outputDirectory, 'react/components', libraryName);
143
143
  const generatedFiles = new Map();
@@ -145,6 +145,7 @@ function generate({ libraryName, methodOnly, modulesCxx, moduleSpecName, modules
145
145
  const generateNM2 = (0, GenerateNM2_1.createNM2Generator)({
146
146
  methodOnly,
147
147
  namespace,
148
+ cppStringType,
148
149
  });
149
150
  const generateJsiModuleH = require(path_1.default.resolve(rncodegenPath, 'lib/generators/modules/GenerateModuleH')).generate;
150
151
  const generateJsiModuleCpp = require(path_1.default.resolve(rncodegenPath, 'lib/generators/modules/GenerateModuleCpp')).generate;
@@ -203,16 +204,17 @@ function runCodeGen(options) {
203
204
  : combineSchemas(globby_1.default.sync(options.files));
204
205
  const libraryName = options.libraryName;
205
206
  const moduleSpecName = 'moduleSpecName';
206
- const { methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, namespace, outputDirectory, } = options;
207
+ const { methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, namespace, outputDirectory, cppStringType, } = options;
207
208
  return generate({
208
209
  libraryName,
209
210
  methodOnly,
210
211
  modulesCxx,
211
- moduleSpecName,
212
212
  modulesTypeScriptTypes,
213
213
  modulesWindows,
214
214
  namespace,
215
215
  outputDirectory,
216
+ cppStringType,
217
+ moduleSpecName,
216
218
  schema,
217
219
  }, { generators: [], test: options.test });
218
220
  }
@@ -1 +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 {createNM2Generator} from './generators/GenerateNM2';\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\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\ninterface Options {\n libraryName: string;\n methodOnly: boolean;\n modulesCxx: boolean;\n moduleSpecName: string;\n modulesTypeScriptTypes: boolean;\n modulesWindows: boolean;\n namespace: string;\n outputDirectory: 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 moduleSpecName,\n modulesTypeScriptTypes,\n modulesWindows,\n namespace,\n outputDirectory,\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 });\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 generatorComponentDescriptorH,\n generatorEventEmitterCPP,\n generatorEventEmitterH,\n generatorPropsCPP,\n generatorPropsH,\n generatorShadowNodeCPP,\n generatorShadowNodeH,\n generatorStateCPP,\n generatorStateH,\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 type CodeGenOptions = {\n file?: string;\n files?: string[];\n libraryName: string;\n methodOnly: boolean;\n modulesCxx: boolean;\n modulesTypeScriptTypes: boolean;\n modulesWindows: boolean;\n namespace: string;\n outputDirectory: 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 namespace,\n outputDirectory,\n } = options;\n return generate(\n {\n libraryName,\n methodOnly,\n modulesCxx,\n moduleSpecName,\n modulesTypeScriptTypes,\n modulesWindows,\n namespace,\n outputDirectory,\n schema,\n },\n {generators: [], test: options.test},\n );\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AAEH,gDAAwB;AACxB,kEAA0C;AAC1C,oDAA4B;AAE5B,0DAA4D;AAC5D,wEAGyC;AAMzC,+CAA+C;AAC/C,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC;AAC1E,MAAM,aAAa,GAAG,cAAI,CAAC,OAAO,CAChC,OAAO,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAC,CAAC,CACzE,CAAC;AAEF,SAAS,SAAS,CAAC,YAAqB;IACtC,IAAI,YAAY,EAAE;QAChB,MAAM,EAAE,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC7B,aAAa,EACb,+BAA+B,CAChC,CAAC,CAAC;QACH,OAAO,IAAI,EAAE,CAAC,gBAAgB,EAAE,CAAC;KAClC;SAAM;QACL,MAAM,EAAE,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAC3E,OAAO,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;KAC5B;AACH,CAAC;AAED,MAAM,eAAe,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC1C,aAAa,EACb,qBAAqB,CACtB,CAAC,CAAC;AAuBH,SAAS,gBAAgB,CACvB,GAAwB,EACxB,SAAiB,EACjB,MAA2B;IAE3B,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE;QACtC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,cAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;KAChD;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,GAAwB,EACxB,SAAiB;IAEjB,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,gBAAM;SAC5B,IAAI,CAAC,CAAC,GAAG,SAAS,KAAK,EAAE,GAAG,SAAS,QAAQ,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;SACjE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,iBAAiB,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE7E,IACE,gBAAgB,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM;QACpD,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAClC,gBAAgB,CAAC,QAAQ,CACvB,cAAI,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CACtD,CACF;QAED,OAAO,IAAI,CAAC;IAEd,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE;QACtC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC5B,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;SACV;QAED,MAAM,eAAe,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,eAAe,KAAK,QAAQ,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,cAAc,CAAC,CAAC;YACzC,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;SACV;KACF;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CAAC,GAAwB,EAAE,SAAiB;IAClE,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEhD,sFAAsF;IACtF,MAAM,gBAAgB,GAAG,gBAAM,CAAC,IAAI,CAClC,CAAC,GAAG,SAAS,KAAK,EAAE,GAAG,SAAS,QAAQ,CAAC,EACzC,EAAC,QAAQ,EAAE,IAAI,EAAC,CACjB,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7E,gBAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;QACtC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE;YAC7D,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACvC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;SAC7B;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE;QACtC,IAAI;YACF,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;YAExD,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC3B,MAAM,eAAe,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC1D,mFAAmF;gBACnF,IAAI,eAAe,KAAK,QAAQ,EAAE;oBAChC,SAAS;iBACV;aACF;YAED,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAClC,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACtC;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,GAAG,KAAK,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,OAAO,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;SACpE;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,SAAS,CAAC,QAAgB;IACxC,IAAI;QACF,MAAM,YAAY,GAChB,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC;QACxE,MAAM,QAAQ,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvE,kDAAkD;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,UAAU,EAAE;YACd,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE;gBAChC,IAAI,QAAQ,EAAE;oBACZ,4GAA4G;oBAC5G,IAAI,QAAQ,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE;wBACjD,IAAA,2CAAsB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBACpC;yBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE;wBACjE,IAAA,2CAAsB,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC;qBACrC;iBACF;aACF;SACF;QACD,OAAO,MAAM,CAAC;KACf;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,CAAC,YAAY,KAAK,EAAE;YACtB,CAAC,CAAC,OAAO,GAAG,IAAI,QAAQ,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;SAC3C;QACD,MAAM,CAAC,CAAC;KACT;AACH,CAAC;AA5BD,8BA4BC;AAED,SAAgB,cAAc,CAAC,KAAe;IAC5C,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;QACnB,MAAM,QAAQ,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,IACE,QAAQ;YACR,CAAC,+CAA+C,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC7D,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAC3C;YACA,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,GAAG,EAAC,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAC,CAAC;SACzD;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,EAAC,OAAO,EAAE,EAAE,EAAC,CACd,CAAC;AACJ,CAAC;AAhBD,wCAgBC;AAED,SAAgB,QAAQ,CACtB,EACE,WAAW,EACX,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,SAAS,EACT,eAAe,EACf,aAAa,EACb,cAAc,EACd,MAAM,GACE,EACV,EAAC,eAAe,CAAC,IAAI,EAAS;IAE9B,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,kBAAkB,GAAG,cAAI,CAAC,IAAI,CAClC,eAAe,EACf,kBAAkB,EAClB,WAAW,CACZ,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,cAAc,CAAC,GAAG,CAChB,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,EAC3C,0CAA0C,CAC3C,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,gCAAkB,EAAC;QACrC,UAAU;QACV,SAAS;QACT,aAAa;KACd,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC7C,aAAa,EACb,wCAAwC,CACzC,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,oBAAoB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC/C,aAAa,EACb,0CAA0C,CAC3C,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,eAAe,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC1C,aAAa,EACb,0CAA0C,CAC3C,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC5C,aAAa,EACb,4CAA4C,CAC7C,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,oBAAoB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC/C,aAAa,EACb,+CAA+C,CAChD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,sBAAsB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CACjD,aAAa,EACb,iDAAiD,CAClD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,6BAA6B,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CACxD,aAAa,EACb,wDAAwD,CACzD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,sBAAsB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CACjD,aAAa,EACb,iDAAiD,CAClD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,wBAAwB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CACnD,aAAa,EACb,mDAAmD,CACpD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC5C,aAAa,EACb,4CAA4C,CAC7C,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,eAAe,GAAG,OAAO,CAAC,cAAI,CAAC,OAAO,CAC1C,aAAa,EACb,0CAA0C,CAC3C,CAAC,CAAC,QAAQ,CAAC;IAEZ,MAAM,gBAAgB,GAAG,EAAE,CAAC;IAE5B,IAAI,cAAc,EAAE;QAClB,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACpC;IAED,IAAI,UAAU,EAAE;QACd,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC1C,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;KAC7C;IAED,IAAI,sBAAsB,EAAE;QAC1B,gBAAgB,CAAC,IAAI,CAAC,uCAAkB,CAAC,CAAC;KAC3C;IAED,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACnC,MAAM,SAAS,GAAwB,SAAS,CAC9C,WAAW,EACX,MAAM,EACN,cAAc,CACf,CAAC;QACF,gBAAgB,CAAC,SAAS,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IACE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC9B,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,WAAW,CAC9D,EACD;QACA,MAAM,mBAAmB,GAAG;YAC1B,6BAA6B;YAC7B,wBAAwB;YACxB,sBAAsB;YACtB,iBAAiB;YACjB,eAAe;YACf,sBAAsB;YACtB,oBAAoB;YACpB,iBAAiB;YACjB,eAAe;SAChB,CAAC;QAEF,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACtC,MAAM,SAAS,GAAwB,SAAS,CAC9C,WAAW,EACX,MAAM,EACN,cAAc,CACf,CAAC;YACF,gBAAgB,CAAC,SAAS,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;KACJ;IAED,IAAI,IAAI,KAAK,IAAI,EAAE;QACjB,OAAO,oBAAoB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;KAC9D;IAED,OAAO,eAAe,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;AAC1D,CAAC;AAzID,4BAyIC;AAQD,SAAgB,UAAU,CAAC,OAAuB;IAChD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;QACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI;QACzB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;QACzB,CAAC,CAAC,cAAc,CAAC,gBAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,cAAc,GAAG,gBAAgB,CAAC;IACxC,MAAM,EACJ,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,SAAS,EACT,eAAe,EACf,aAAa,GACd,GAAG,OAAO,CAAC;IACZ,OAAO,QAAQ,CACb;QACE,WAAW;QACX,UAAU;QACV,UAAU;QACV,sBAAsB;QACtB,cAAc;QACd,SAAS;QACT,eAAe;QACf,aAAa;QACb,cAAc;QACd,MAAM;KACP,EACD,EAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CACrC,CAAC;AACJ,CAAC;AAlCD,gCAkCC","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 {\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 namespace: string;\n outputDirectory: string;\n cppStringType: CppStringTypes;\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 namespace,\n outputDirectory,\n cppStringType,\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 });\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 generatorComponentDescriptorH,\n generatorEventEmitterCPP,\n generatorEventEmitterH,\n generatorPropsCPP,\n generatorPropsH,\n generatorShadowNodeCPP,\n generatorShadowNodeH,\n generatorStateCPP,\n generatorStateH,\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 namespace,\n outputDirectory,\n cppStringType,\n } = options;\n return generate(\n {\n libraryName,\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n namespace,\n outputDirectory,\n cppStringType,\n moduleSpecName,\n schema,\n },\n {generators: [], test: options.test},\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-native-windows/codegen",
3
- "version": "0.72.0",
3
+ "version": "0.72.1",
4
4
  "description": "Generators for react-native-codegen targeting react-native-windows",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "repository": {
package/src/Cli.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import yargs from 'yargs';
9
- import {runCodeGen} from './index';
9
+ import {CodeGenOptions, runCodeGen} from './index';
10
10
 
11
11
  const argv = yargs.options({
12
12
  file: {
@@ -58,6 +58,12 @@ const argv = yargs.options({
58
58
  required: true,
59
59
  describe: 'Used for part of the path generated within the codegen dir',
60
60
  },
61
+ cppStringType: {
62
+ choices: ['std::string', 'std::wstring'],
63
+ describe:
64
+ 'C++ string type in generated code, should be "std::string" or "std::wstring"',
65
+ default: 'std::string',
66
+ },
61
67
  }).argv;
62
68
 
63
69
  if ((argv.file && argv.files) || (!argv.file && !argv.files)) {
@@ -65,7 +71,18 @@ if ((argv.file && argv.files) || (!argv.file && !argv.files)) {
65
71
  process.exit(1);
66
72
  }
67
73
 
68
- const changesNecessary = runCodeGen(argv);
74
+ if (
75
+ argv.cppStringType !== 'std::string' &&
76
+ argv.cppStringType !== 'std::wstring'
77
+ ) {
78
+ console.error('cppStringType should be "std::string" or "std::wstring".');
79
+ process.exit(1);
80
+ }
81
+
82
+ // type casting is necessary here because
83
+ // cppStringType does not become union of string literals
84
+ // until yargs.options get improved in the future
85
+ const changesNecessary = runCodeGen(<CodeGenOptions>argv);
69
86
 
70
87
  if (argv.test && changesNecessary) {
71
88
  console.error(
@@ -13,13 +13,14 @@ import type {
13
13
  Nullable,
14
14
  } from '@react-native/codegen/lib/CodegenSchema';
15
15
  import {AliasMap, getAliasCppName} from './AliasManaging';
16
- import {translateField} from './ObjectTypes';
16
+ import {CppCodegenOptions, translateField} from './ObjectTypes';
17
17
 
18
18
  function translateObjectBody(
19
19
  type: NativeModuleObjectTypeAnnotation,
20
20
  aliases: AliasMap,
21
21
  baseAliasName: string,
22
22
  prefix: string,
23
+ options: CppCodegenOptions,
23
24
  ) {
24
25
  return type.properties
25
26
  .map((prop: NamedShape<Nullable<NativeModuleBaseTypeAnnotation>>) => {
@@ -32,6 +33,7 @@ function translateObjectBody(
32
33
  propType,
33
34
  aliases,
34
35
  `${baseAliasName}_${prop.name}`,
36
+ options,
35
37
  )} ${prop.name};`;
36
38
  return `${first}\n${second}`;
37
39
  })
@@ -56,12 +58,13 @@ function generateSingleAlias(
56
58
  aliases: AliasMap,
57
59
  aliasName: string,
58
60
  aliasCode: AliasCodeMap,
61
+ options: CppCodegenOptions,
59
62
  ): void {
60
63
  const aliasType = <NativeModuleObjectTypeAnnotation>aliases.types[aliasName];
61
64
  aliasCode[aliasName] = `
62
65
  REACT_STRUCT(${getAliasCppName(aliasName)})
63
66
  struct ${getAliasCppName(aliasName)} {
64
- ${translateObjectBody(aliasType, aliases, aliasName, ' ')}
67
+ ${translateObjectBody(aliasType, aliases, aliasName, ' ', options)}
65
68
  };
66
69
  `;
67
70
  }
@@ -70,6 +73,7 @@ function generateNestedAliasesInCorrectOrder(
70
73
  aliases: AliasMap,
71
74
  aliasCode: AliasCodeMap,
72
75
  aliasOrder: string[],
76
+ options: CppCodegenOptions,
73
77
  ): void {
74
78
  // retrieve and clean all ungenerated aliases
75
79
  const jobs = aliases.jobs;
@@ -80,21 +84,29 @@ function generateNestedAliasesInCorrectOrder(
80
84
  // generate a new struct and all fields will be examined
81
85
  // new anonymous objects could be found
82
86
  // they will be stored in aliases.jobs
83
- generateSingleAlias(aliases, aliasName, aliasCode);
87
+ generateSingleAlias(aliases, aliasName, aliasCode, options);
84
88
  // nested C++ structs must be put before the current C++ struct
85
89
  // as they will be used in the current C++ struct
86
90
  // the order will be perfectly and easily ensured by doing this recursively
87
- generateNestedAliasesInCorrectOrder(aliases, aliasCode, aliasOrder);
91
+ generateNestedAliasesInCorrectOrder(
92
+ aliases,
93
+ aliasCode,
94
+ aliasOrder,
95
+ options,
96
+ );
88
97
  // all referenced C++ structs are generated
89
98
  // put the current one following them
90
99
  aliasOrder.push(aliasName);
91
100
  }
92
101
  }
93
102
 
94
- export function generateAliases(aliases: AliasMap): string {
103
+ export function generateAliases(
104
+ aliases: AliasMap,
105
+ options: CppCodegenOptions,
106
+ ): string {
95
107
  const aliasCode: AliasCodeMap = {};
96
108
  const aliasOrder: string[] = [];
97
- generateNestedAliasesInCorrectOrder(aliases, aliasCode, aliasOrder);
109
+ generateNestedAliasesInCorrectOrder(aliases, aliasCode, aliasOrder, options);
98
110
 
99
111
  // aliasOrder now has the correct order of C++ struct code
100
112
  let traversedAliasedStructs = '';
@@ -11,6 +11,9 @@ import {AliasMap, setPreferredModuleName} from './AliasManaging';
11
11
  import {createAliasMap, generateAliases} from './AliasGen';
12
12
  import {generateValidateConstants} from './ValidateConstants';
13
13
  import {generateValidateMethods} from './ValidateMethods';
14
+ import type {CppStringTypes} from './ObjectTypes';
15
+
16
+ export type {CppStringTypes} from './ObjectTypes';
14
17
 
15
18
  type FilesOutput = Map<string, string>;
16
19
 
@@ -46,9 +49,11 @@ struct ::_MODULE_NAME_::Spec : winrt::Microsoft::ReactNative::TurboModuleSpec {
46
49
  export function createNM2Generator({
47
50
  methodOnly,
48
51
  namespace,
52
+ cppStringType,
49
53
  }: {
50
54
  methodOnly: boolean;
51
55
  namespace: string;
56
+ cppStringType: CppStringTypes;
52
57
  }) {
53
58
  return (
54
59
  _libraryName: string,
@@ -74,7 +79,9 @@ export function createNM2Generator({
74
79
  const aliases: AliasMap = createAliasMap(nativeModule.aliasMap);
75
80
 
76
81
  // prepare methods
77
- const methods = generateValidateMethods(nativeModule, aliases);
82
+ const methods = generateValidateMethods(nativeModule, aliases, {
83
+ cppStringType,
84
+ });
78
85
  let tuples = `
79
86
  static constexpr auto methods = std::tuple{
80
87
  ${methods[0]}
@@ -98,7 +105,9 @@ ${errors}`;
98
105
  }
99
106
 
100
107
  // generate code for structs
101
- const traversedAliasedStructs = generateAliases(aliases);
108
+ const traversedAliasedStructs = generateAliases(aliases, {
109
+ cppStringType,
110
+ });
102
111
 
103
112
  files.set(
104
113
  `Native${preferredModuleName}Spec.g.h`,
@@ -18,13 +18,20 @@ import {
18
18
  getAnonymousAliasCppName,
19
19
  } from './AliasManaging';
20
20
 
21
+ export type CppStringTypes = 'std::string' | 'std::wstring';
22
+
23
+ export interface CppCodegenOptions {
24
+ cppStringType: CppStringTypes;
25
+ }
26
+
21
27
  function translateUnionReturnType(
22
28
  type: NativeModuleEnumDeclaration | NativeModuleUnionTypeAnnotation,
29
+ options: CppCodegenOptions,
23
30
  ): string {
24
31
  const memberType = type.memberType;
25
32
  switch (type.memberType) {
26
33
  case 'StringTypeAnnotation':
27
- return 'std::string';
34
+ return options.cppStringType;
28
35
  case 'NumberTypeAnnotation':
29
36
  return 'double';
30
37
  case 'ObjectTypeAnnotation':
@@ -41,12 +48,13 @@ export function translateFieldOrReturnType(
41
48
  aliases: AliasMap,
42
49
  baseAliasName: string,
43
50
  callerName: 'translateField' | 'translateReturnType',
51
+ options: CppCodegenOptions,
44
52
  ): string {
45
53
  // avoid: Property 'type' does not exist on type 'never'
46
54
  const returnType = type.type;
47
55
  switch (type.type) {
48
56
  case 'StringTypeAnnotation':
49
- return 'std::string';
57
+ return options.cppStringType;
50
58
  case 'NumberTypeAnnotation':
51
59
  case 'FloatTypeAnnotation':
52
60
  case 'DoubleTypeAnnotation':
@@ -62,6 +70,7 @@ export function translateFieldOrReturnType(
62
70
  aliases,
63
71
  `${baseAliasName}_element`,
64
72
  callerName,
73
+ options,
65
74
  )}>`;
66
75
  } else {
67
76
  return `::React::JSValueArray`;
@@ -87,10 +96,11 @@ export function translateFieldOrReturnType(
87
96
  aliases,
88
97
  baseAliasName,
89
98
  callerName,
99
+ options,
90
100
  )}>`;
91
101
  case 'EnumDeclaration':
92
102
  case 'UnionTypeAnnotation':
93
- return translateUnionReturnType(type);
103
+ return translateUnionReturnType(type, options);
94
104
  default:
95
105
  throw new Error(`Unhandled type in ${callerName}: ${returnType}`);
96
106
  }
@@ -100,11 +110,13 @@ export function translateField(
100
110
  type: Nullable<NativeModuleBaseTypeAnnotation>,
101
111
  aliases: AliasMap,
102
112
  baseAliasName: string,
113
+ options: CppCodegenOptions,
103
114
  ): string {
104
115
  return translateFieldOrReturnType(
105
116
  type,
106
117
  aliases,
107
118
  baseAliasName,
108
119
  'translateField',
120
+ options,
109
121
  );
110
122
  }