@react-native-windows/codegen 0.74.2 → 0.74.4

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.
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.translateCommandParamType = exports.translateComponentEventType = exports.translateComponentPropsFieldType = void 0;
4
+ const AliasManaging_1 = require("./AliasManaging");
5
+ // eslint-disable-next-line complexity
6
+ function translateComponentPropsFieldType(type, aliases, baseAliasName, options) {
7
+ switch (type.type) {
8
+ case 'StringTypeAnnotation':
9
+ return { type: options.cppStringType, initializer: type.default ? `{${type.default}}` : '', alreadySupportsOptionalOrHasDefault: !!type.default };
10
+ case 'FloatTypeAnnotation':
11
+ return { type: 'float', initializer: type.default ? `{${type.default}}` : '{}', alreadySupportsOptionalOrHasDefault: !!type.default };
12
+ case 'DoubleTypeAnnotation':
13
+ return { type: 'double', initializer: type.default ? `{${type.default}}` : '{}', alreadySupportsOptionalOrHasDefault: !!type.default };
14
+ case 'Int32TypeAnnotation':
15
+ return { type: 'int32_t', initializer: type.default ? `{${type.default}}` : '{}', alreadySupportsOptionalOrHasDefault: !!type.default };
16
+ case 'BooleanTypeAnnotation':
17
+ return { type: 'bool', initializer: type.default ? `{${type.default}}` : '{}', alreadySupportsOptionalOrHasDefault: !!type.default };
18
+ case 'ArrayTypeAnnotation':
19
+ let arrayTemplateArg = '';
20
+ switch (type.elementType.type) {
21
+ case 'BooleanTypeAnnotation':
22
+ arrayTemplateArg = 'bool';
23
+ break;
24
+ case 'DoubleTypeAnnotation':
25
+ arrayTemplateArg = 'double';
26
+ break;
27
+ case 'FloatTypeAnnotation':
28
+ arrayTemplateArg = 'float';
29
+ break;
30
+ case 'Int32TypeAnnotation':
31
+ arrayTemplateArg = 'int32_t';
32
+ break;
33
+ case 'StringTypeAnnotation':
34
+ arrayTemplateArg = options.cppStringType;
35
+ break;
36
+ case 'ArrayTypeAnnotation':
37
+ const innerType = translateComponentPropsFieldType(type.elementType, aliases, baseAliasName, options);
38
+ arrayTemplateArg = `std::vector<${innerType.type}>`;
39
+ break;
40
+ case 'ObjectTypeAnnotation':
41
+ arrayTemplateArg = translateComponentPropsFieldType(type.elementType, aliases, baseAliasName, options).type;
42
+ break;
43
+ case 'ReservedPropTypeAnnotation':
44
+ switch (type.elementType.name) {
45
+ case 'ColorPrimitive':
46
+ arrayTemplateArg = 'winrt::Microsoft::ReactNative::Color';
47
+ break;
48
+ case 'DimensionPrimitive':
49
+ case 'EdgeInsetsPrimitive':
50
+ case 'ImageRequestPrimitive':
51
+ case 'ImageSourcePrimitive':
52
+ case 'PointPrimitive':
53
+ arrayTemplateArg = 'winrt::Microsoft::ReactNative::JSValue'; // TODO - better handling for these types than JSValue
54
+ break;
55
+ default:
56
+ throw new Error(`Unhandled ReservedPropTypeAnnotation type: ${type.elementType.name}`);
57
+ }
58
+ break;
59
+ case 'StringEnumTypeAnnotation':
60
+ arrayTemplateArg = options.cppStringType; // TODO - better enum type handling than just passing a string
61
+ break;
62
+ default:
63
+ throw new Error(`Unhandled type: ${type.type}`);
64
+ }
65
+ return { type: `std::vector<${arrayTemplateArg}>`, initializer: '' };
66
+ case 'ReservedPropTypeAnnotation':
67
+ switch (type.name) {
68
+ case 'ColorPrimitive':
69
+ return { type: 'winrt::Microsoft::ReactNative::Color', initializer: '{nullptr}', alreadySupportsOptionalOrHasDefault: true };
70
+ case 'DimensionPrimitive':
71
+ case 'EdgeInsetsPrimitive':
72
+ case 'ImageRequestPrimitive':
73
+ case 'ImageSourcePrimitive':
74
+ case 'PointPrimitive':
75
+ return { type: 'winrt::Microsoft::ReactNative::JSValue', initializer: '{nullptr}', alreadySupportsOptionalOrHasDefault: true }; // TODO - better handling for these types than JSValue
76
+ default:
77
+ throw new Error(`Unhandled ReservedPropTypeAnnotation type: ${type.name}`);
78
+ }
79
+ case 'ObjectTypeAnnotation': {
80
+ return { type: (0, AliasManaging_1.getAnonymousAliasCppName)(aliases, baseAliasName, type), initializer: '' };
81
+ }
82
+ case 'MixedTypeAnnotation':
83
+ return { type: 'winrt::Microsoft::ReactNative::JSValue', initializer: '{nullptr}', alreadySupportsOptionalOrHasDefault: true };
84
+ case 'Int32EnumTypeAnnotation':
85
+ return { type: 'int32_t', initializer: '' }; // TODO - better enum type handling than just passing a string
86
+ case 'StringEnumTypeAnnotation':
87
+ return { type: options.cppStringType, initializer: '' }; // TODO - better enum type handling than just passing an int
88
+ default:
89
+ throw new Error(`Unhandled type: ${type.type}`);
90
+ }
91
+ }
92
+ exports.translateComponentPropsFieldType = translateComponentPropsFieldType;
93
+ function translateComponentEventType(type, aliases, baseAliasName, options) {
94
+ switch (type.type) {
95
+ case 'StringTypeAnnotation':
96
+ return { type: options.cppStringType, initializer: '' };
97
+ case 'FloatTypeAnnotation':
98
+ return { type: 'float', initializer: '{}' };
99
+ case 'DoubleTypeAnnotation':
100
+ return { type: 'double', initializer: '{}' };
101
+ case 'Int32TypeAnnotation':
102
+ return { type: 'int32_t', initializer: '{}' };
103
+ case 'BooleanTypeAnnotation':
104
+ return { type: 'bool', initializer: '{}' };
105
+ case 'ArrayTypeAnnotation':
106
+ {
107
+ let arrayTemplateArg = '';
108
+ switch (type.elementType.type) {
109
+ case 'BooleanTypeAnnotation':
110
+ arrayTemplateArg = 'bool';
111
+ break;
112
+ case 'DoubleTypeAnnotation':
113
+ arrayTemplateArg = 'double';
114
+ break;
115
+ case 'FloatTypeAnnotation':
116
+ arrayTemplateArg = 'float';
117
+ break;
118
+ case 'Int32TypeAnnotation':
119
+ arrayTemplateArg = 'int32_t';
120
+ break;
121
+ case 'StringTypeAnnotation':
122
+ arrayTemplateArg = options.cppStringType;
123
+ break;
124
+ case 'ArrayTypeAnnotation':
125
+ const innerType = translateComponentEventType(type.elementType, aliases, baseAliasName, options);
126
+ arrayTemplateArg = `std::vector<${innerType.type}>`;
127
+ break;
128
+ case 'ObjectTypeAnnotation':
129
+ arrayTemplateArg = translateComponentEventType(type.elementType, aliases, baseAliasName, options).type;
130
+ break;
131
+ case 'StringEnumTypeAnnotation':
132
+ arrayTemplateArg = options.cppStringType; // TODO - better enum type handling than just passing a string
133
+ break;
134
+ default:
135
+ throw new Error(`Unhandled type: ${type.type}`);
136
+ }
137
+ return { type: `std::vector<${arrayTemplateArg}>`, initializer: '{}' };
138
+ }
139
+ case 'ObjectTypeAnnotation': {
140
+ return { type: (0, AliasManaging_1.getAnonymousAliasCppName)(aliases, baseAliasName, type), initializer: '' };
141
+ }
142
+ case 'StringEnumTypeAnnotation':
143
+ return { type: options.cppStringType, initializer: '' }; // TODO - better enum type handling than just passing a string
144
+ default:
145
+ throw new Error(`Unhandled type: ${type.type}`);
146
+ }
147
+ }
148
+ exports.translateComponentEventType = translateComponentEventType;
149
+ function translateCommandParamType(type, aliases, baseAliasName, options) {
150
+ switch (type.type) {
151
+ case 'StringTypeAnnotation':
152
+ return { type: options.cppStringType, initializer: '' };
153
+ case 'FloatTypeAnnotation':
154
+ return { type: 'float', initializer: '{}' };
155
+ case 'DoubleTypeAnnotation':
156
+ return { type: 'double', initializer: '{}' };
157
+ case 'Int32TypeAnnotation':
158
+ return { type: 'int32_t', initializer: '{}' };
159
+ case 'BooleanTypeAnnotation':
160
+ return { type: 'bool', initializer: '{}' };
161
+ case 'ArrayTypeAnnotation':
162
+ {
163
+ let arrayTemplateArg = '';
164
+ switch (type.elementType.type) {
165
+ case 'BooleanTypeAnnotation':
166
+ arrayTemplateArg = 'bool';
167
+ break;
168
+ case 'DoubleTypeAnnotation':
169
+ arrayTemplateArg = 'double';
170
+ break;
171
+ case 'FloatTypeAnnotation':
172
+ arrayTemplateArg = 'float';
173
+ break;
174
+ case 'Int32TypeAnnotation':
175
+ arrayTemplateArg = 'int32_t';
176
+ break;
177
+ case 'StringTypeAnnotation':
178
+ arrayTemplateArg = options.cppStringType;
179
+ break;
180
+ case 'GenericTypeAnnotation': // TODO verify schema - Getting this type when running codegen on all the built in types
181
+ arrayTemplateArg = 'winrt::Microsoft::ReactNative::JSValue';
182
+ break;
183
+ default:
184
+ throw new Error(`Unhandled type: ${type.elementType.type} - ${JSON.stringify(type.elementType, null, 2)}`);
185
+ }
186
+ return { type: `std::vector<${arrayTemplateArg}>`, initializer: '{}' };
187
+ }
188
+ case 'ReservedTypeAnnotation':
189
+ if (type.name !== 'RootTag') {
190
+ throw new Error(`Unhandled ReservedTypeAnnotation: ${type.name}`);
191
+ }
192
+ return { type: 'bool', initializer: '{-1}' };
193
+ default:
194
+ throw new Error(`Unhandled type: ${type.type}`);
195
+ }
196
+ }
197
+ exports.translateCommandParamType = translateCommandParamType;
198
+ //# sourceMappingURL=PropObjectTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropObjectTypes.js","sourceRoot":"","sources":["../../src/generators/PropObjectTypes.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropTypeAnnotation, ObjectTypeAnnotation, EventTypeAnnotation, CommandParamTypeAnnotation } from '@react-native/codegen/lib/CodegenSchema';\nimport type { CppCodegenOptions } from './ObjectTypes';\nimport {\n AliasMap,\n getAnonymousAliasCppName,\n} from './AliasManaging';\n\n\n// eslint-disable-next-line complexity\nexport function translateComponentPropsFieldType(type: PropTypeAnnotation,\n aliases: AliasMap<ObjectTypeAnnotation<PropTypeAnnotation>>,\n baseAliasName: string,\n options: CppCodegenOptions): { type: string, initializer: string, alreadySupportsOptionalOrHasDefault?: boolean } {\n switch (type.type) {\n case 'StringTypeAnnotation':\n return { type: options.cppStringType, initializer: type.default ? `{${type.default}}` : '', alreadySupportsOptionalOrHasDefault: !!type.default };\n case 'FloatTypeAnnotation':\n return { type: 'float', initializer: type.default ? `{${type.default}}` : '{}', alreadySupportsOptionalOrHasDefault: !!type.default };\n case 'DoubleTypeAnnotation':\n return { type: 'double', initializer: type.default ? `{${type.default}}` : '{}', alreadySupportsOptionalOrHasDefault: !!type.default };\n case 'Int32TypeAnnotation':\n return { type: 'int32_t', initializer: type.default ? `{${type.default}}` : '{}', alreadySupportsOptionalOrHasDefault: !!type.default };\n case 'BooleanTypeAnnotation':\n return { type: 'bool', initializer: type.default ? `{${type.default}}` : '{}', alreadySupportsOptionalOrHasDefault: !!type.default };\n case 'ArrayTypeAnnotation':\n\n let arrayTemplateArg = '';\n switch (type.elementType.type) {\n case 'BooleanTypeAnnotation':\n arrayTemplateArg = 'bool';\n break;\n case 'DoubleTypeAnnotation':\n arrayTemplateArg = 'double';\n break;\n case 'FloatTypeAnnotation':\n arrayTemplateArg = 'float';\n break;\n case 'Int32TypeAnnotation':\n arrayTemplateArg = 'int32_t';\n break;\n case 'StringTypeAnnotation':\n arrayTemplateArg = options.cppStringType;\n break;\n case 'ArrayTypeAnnotation':\n const innerType = translateComponentPropsFieldType(type.elementType, aliases, baseAliasName, options);\n arrayTemplateArg = `std::vector<${innerType.type}>`;\n break;\n case 'ObjectTypeAnnotation':\n arrayTemplateArg = translateComponentPropsFieldType(type.elementType, aliases, baseAliasName, options).type;\n break;\n case 'ReservedPropTypeAnnotation':\n switch (type.elementType.name) {\n case 'ColorPrimitive':\n arrayTemplateArg = 'winrt::Microsoft::ReactNative::Color';\n break;\n case 'DimensionPrimitive':\n case 'EdgeInsetsPrimitive':\n case 'ImageRequestPrimitive':\n case 'ImageSourcePrimitive':\n case 'PointPrimitive':\n arrayTemplateArg = 'winrt::Microsoft::ReactNative::JSValue'; // TODO - better handling for these types than JSValue\n break;\n default:\n throw new Error(`Unhandled ReservedPropTypeAnnotation type: ${type.elementType.name}`);\n }\n break;\n case 'StringEnumTypeAnnotation':\n arrayTemplateArg = options.cppStringType; // TODO - better enum type handling than just passing a string\n break;\n default:\n throw new Error(`Unhandled type: ${type.type}`);\n }\n\n return { type: `std::vector<${arrayTemplateArg}>`, initializer: '' };\n case 'ReservedPropTypeAnnotation':\n switch (type.name) {\n case 'ColorPrimitive':\n return { type: 'winrt::Microsoft::ReactNative::Color', initializer: '{nullptr}', alreadySupportsOptionalOrHasDefault: true };\n case 'DimensionPrimitive':\n case 'EdgeInsetsPrimitive':\n case 'ImageRequestPrimitive':\n case 'ImageSourcePrimitive':\n case 'PointPrimitive':\n return { type: 'winrt::Microsoft::ReactNative::JSValue', initializer: '{nullptr}', alreadySupportsOptionalOrHasDefault: true }; // TODO - better handling for these types than JSValue\n default:\n throw new Error(`Unhandled ReservedPropTypeAnnotation type: ${type.name}`);\n }\n case 'ObjectTypeAnnotation': {\n return { type: getAnonymousAliasCppName<ObjectTypeAnnotation<PropTypeAnnotation>>(aliases, baseAliasName, type), initializer: '' };\n }\n case 'MixedTypeAnnotation':\n return { type: 'winrt::Microsoft::ReactNative::JSValue', initializer: '{nullptr}', alreadySupportsOptionalOrHasDefault: true };\n case 'Int32EnumTypeAnnotation':\n return { type: 'int32_t', initializer: '' }; // TODO - better enum type handling than just passing a string\n case 'StringEnumTypeAnnotation':\n return { type: options.cppStringType, initializer: '' }; // TODO - better enum type handling than just passing an int\n default:\n throw new Error(`Unhandled type: ${(type as any).type}`);\n }\n}\n\nexport function translateComponentEventType(type: EventTypeAnnotation,\n aliases: AliasMap<ObjectTypeAnnotation<EventTypeAnnotation>>,\n baseAliasName: string,\n options: CppCodegenOptions): { type: string, initializer: string, alreadySupportsOptionalOrHasDefault?: boolean } {\n switch (type.type) {\n case 'StringTypeAnnotation':\n return { type: options.cppStringType, initializer: '' };\n case 'FloatTypeAnnotation':\n return { type: 'float', initializer: '{}' };\n case 'DoubleTypeAnnotation':\n return { type: 'double', initializer: '{}' };\n case 'Int32TypeAnnotation':\n return { type: 'int32_t', initializer: '{}' };\n case 'BooleanTypeAnnotation':\n return { type: 'bool', initializer: '{}' };\n case 'ArrayTypeAnnotation':\n {\n let arrayTemplateArg = '';\n switch (type.elementType.type) {\n case 'BooleanTypeAnnotation':\n arrayTemplateArg = 'bool';\n break;\n case 'DoubleTypeAnnotation':\n arrayTemplateArg = 'double';\n break;\n case 'FloatTypeAnnotation':\n arrayTemplateArg = 'float';\n break;\n case 'Int32TypeAnnotation':\n arrayTemplateArg = 'int32_t';\n break;\n case 'StringTypeAnnotation':\n arrayTemplateArg = options.cppStringType;\n break;\n case 'ArrayTypeAnnotation':\n const innerType = translateComponentEventType(type.elementType, aliases, baseAliasName, options);\n arrayTemplateArg = `std::vector<${innerType.type}>`;\n break;\n case 'ObjectTypeAnnotation':\n arrayTemplateArg = translateComponentEventType(type.elementType, aliases, baseAliasName, options).type;\n break;\n case 'StringEnumTypeAnnotation':\n arrayTemplateArg = options.cppStringType; // TODO - better enum type handling than just passing a string\n break;\n default:\n throw new Error(`Unhandled type: ${type.type}`);\n }\n\n return { type: `std::vector<${arrayTemplateArg}>`, initializer: '{}' };\n }\n case 'ObjectTypeAnnotation': {\n return { type: getAnonymousAliasCppName<ObjectTypeAnnotation<EventTypeAnnotation>>(aliases, baseAliasName, type), initializer: '' };\n }\n case 'StringEnumTypeAnnotation':\n return { type: options.cppStringType, initializer: '' }; // TODO - better enum type handling than just passing a string\n default:\n throw new Error(`Unhandled type: ${(type as any).type}`);\n }\n}\n\n\nexport function translateCommandParamType(type: CommandParamTypeAnnotation,\n aliases: AliasMap<ObjectTypeAnnotation<CommandParamTypeAnnotation>>,\n baseAliasName: string,\n options: CppCodegenOptions): { type: string, initializer: string, alreadySupportsOptionalOrHasDefault?: boolean } {\n switch (type.type) {\n case 'StringTypeAnnotation':\n return { type: options.cppStringType, initializer: '' };\n case 'FloatTypeAnnotation':\n return { type: 'float', initializer: '{}' };\n case 'DoubleTypeAnnotation':\n return { type: 'double', initializer: '{}' };\n case 'Int32TypeAnnotation':\n return { type: 'int32_t', initializer: '{}' };\n case 'BooleanTypeAnnotation':\n return { type: 'bool', initializer: '{}' };\n case 'ArrayTypeAnnotation':\n {\n let arrayTemplateArg = '';\n switch (type.elementType.type) {\n case 'BooleanTypeAnnotation':\n arrayTemplateArg = 'bool';\n break;\n case 'DoubleTypeAnnotation':\n arrayTemplateArg = 'double';\n break;\n case 'FloatTypeAnnotation':\n arrayTemplateArg = 'float';\n break;\n case 'Int32TypeAnnotation':\n arrayTemplateArg = 'int32_t';\n break;\n case 'StringTypeAnnotation':\n arrayTemplateArg = options.cppStringType;\n break;\n case 'GenericTypeAnnotation' as any: // TODO verify schema - Getting this type when running codegen on all the built in types\n arrayTemplateArg = 'winrt::Microsoft::ReactNative::JSValue';\n break;\n default:\n throw new Error(`Unhandled type: ${(type.elementType as any).type} - ${JSON.stringify(type.elementType, null, 2)}`);\n }\n\n return { type: `std::vector<${arrayTemplateArg}>`, initializer: '{}' };\n }\n case 'ReservedTypeAnnotation': \n if ((type.name as any) !== 'RootTag') {\n throw new Error(`Unhandled ReservedTypeAnnotation: ${type.name}`)\n }\n return { type: 'bool', initializer: '{-1}' };\n default:\n throw new Error(`Unhandled type: ${(type as any).type}`);\n }\n}"]}
@@ -13,6 +13,8 @@ export interface SharedOptions {
13
13
  modulesCxx: boolean;
14
14
  modulesTypeScriptTypes: boolean;
15
15
  modulesWindows: boolean;
16
+ componentsWindows: boolean;
17
+ internalComponents: boolean;
16
18
  namespace: string;
17
19
  outputDirectory: string;
18
20
  cppStringType: CppStringTypes;
@@ -28,7 +30,7 @@ interface Config {
28
30
  }
29
31
  export declare function parseFile(filename: string): SchemaType;
30
32
  export declare function combineSchemas(files: string[]): SchemaType;
31
- export declare function generate({ libraryName, methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, namespace, outputDirectory, cppStringType, separateDataTypes, moduleSpecName, schema, }: Options, { /*generators,*/ test }: Config): boolean;
33
+ export declare function generate({ libraryName, methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, internalComponents, componentsWindows, namespace, outputDirectory, cppStringType, separateDataTypes, moduleSpecName, schema, }: Options, { /*generators,*/ test }: Config): boolean;
32
34
  export interface CodeGenOptions extends SharedOptions {
33
35
  file?: string;
34
36
  files?: string[];
@@ -14,6 +14,7 @@ const path_1 = __importDefault(require("path"));
14
14
  const fs_1 = __importDefault(require("@react-native-windows/fs"));
15
15
  const globby_1 = __importDefault(require("globby"));
16
16
  const GenerateNM2_1 = require("./generators/GenerateNM2");
17
+ const GenerateComponentWindows_1 = require("./generators/GenerateComponentWindows");
17
18
  const GenerateTypeScript_1 = require("./generators/GenerateTypeScript");
18
19
  // Load @react-native/codegen from react-native
19
20
  const rnPath = path_1.default.dirname(require.resolve('react-native/package.json'));
@@ -137,7 +138,7 @@ function combineSchemas(files) {
137
138
  }, { modules: {} });
138
139
  }
139
140
  exports.combineSchemas = combineSchemas;
140
- function generate({ libraryName, methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, namespace, outputDirectory, cppStringType, separateDataTypes, moduleSpecName, schema, }, { /*generators,*/ test }) {
141
+ function generate({ libraryName, methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, internalComponents, componentsWindows, namespace, outputDirectory, cppStringType, separateDataTypes, moduleSpecName, schema, }, { /*generators,*/ test }) {
141
142
  schemaValidator.validate(schema);
142
143
  const componentOutputdir = path_1.default.join(outputDirectory, 'react/components', libraryName);
143
144
  const generatedFiles = new Map();
@@ -175,17 +176,17 @@ function generate({ libraryName, methodOnly, modulesCxx, modulesTypeScriptTypes,
175
176
  normalizeFileMap(generated, outputDirectory, generatedFiles);
176
177
  });
177
178
  if (Object.keys(schema.modules).some(moduleName => schema.modules[moduleName].type === 'Component')) {
178
- const componentGenerators = [
179
- generatorComponentDescriptorH,
180
- generatorEventEmitterCPP,
181
- generatorEventEmitterH,
182
- generatorPropsCPP,
183
- generatorPropsH,
184
- generatorShadowNodeCPP,
185
- generatorShadowNodeH,
186
- generatorStateCPP,
187
- generatorStateH,
188
- ];
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
+ }
189
190
  componentGenerators.forEach(generator => {
190
191
  const generated = generator(libraryName, schema, moduleSpecName);
191
192
  normalizeFileMap(generated, componentOutputdir, generatedFiles);
@@ -205,13 +206,15 @@ function runCodeGen(options) {
205
206
  : combineSchemas(globby_1.default.sync(options.files));
206
207
  const libraryName = options.libraryName;
207
208
  const moduleSpecName = 'moduleSpecName';
208
- const { methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, namespace, outputDirectory, cppStringType, separateDataTypes, } = options;
209
+ const { methodOnly, modulesCxx, modulesTypeScriptTypes, modulesWindows, componentsWindows, internalComponents, namespace, outputDirectory, cppStringType, separateDataTypes, } = options;
209
210
  return generate({
210
211
  libraryName,
211
212
  methodOnly,
212
213
  modulesCxx,
213
214
  modulesTypeScriptTypes,
214
215
  modulesWindows,
216
+ componentsWindows,
217
+ internalComponents,
215
218
  namespace,
216
219
  outputDirectory,
217
220
  cppStringType,
@@ -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 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 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 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 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 separateDataTypes,\n } = options;\n return generate(\n {\n libraryName,\n methodOnly,\n modulesCxx,\n modulesTypeScriptTypes,\n modulesWindows,\n namespace,\n outputDirectory,\n cppStringType,\n separateDataTypes,\n moduleSpecName,\n schema,\n },\n {generators: [], test: options.test},\n );\n}\n"]}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-native-windows/codegen",
3
- "version": "0.74.2",
3
+ "version": "0.74.4",
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
@@ -69,6 +69,18 @@ const argv = yargs.options({
69
69
  describe: 'generate data types in a separate file',
70
70
  default: false,
71
71
  },
72
+ componentsWindows: {
73
+ type: 'boolean',
74
+ describe: 'generate component cpp files for custom native components',
75
+ default: false,
76
+ },
77
+ internalComponents: {
78
+ type: 'boolean',
79
+ describe:
80
+ 'generate non-ABI cpp/h for internal usage of built in native components [Only used within RNW itself]',
81
+ default: false,
82
+ hidden: true,
83
+ },
72
84
  }).argv;
73
85
 
74
86
  if ((argv.file && argv.files) || (!argv.file && !argv.files)) {
@@ -18,20 +18,20 @@ export function getAliasCppName(typeName: string): string {
18
18
  return `${preferredModuleName}Spec_${typeName}`;
19
19
  }
20
20
 
21
- export interface AliasMap {
22
- types: {[name: string]: NativeModuleObjectTypeAnnotation | undefined};
21
+ export interface AliasMap<T = NativeModuleObjectTypeAnnotation> {
22
+ types: {[name: string]: T | undefined};
23
23
  jobs: string[];
24
24
  }
25
25
 
26
26
  const ExtendedObjectKey = '$RNW-TURBOMODULE-ALIAS';
27
- interface ExtendedObject extends NativeModuleObjectTypeAnnotation {
27
+ type ExtendedObject<T> = {
28
28
  '$RNW-TURBOMODULE-ALIAS'?: string;
29
- }
29
+ } & T;
30
30
 
31
- function recordAnonymousAlias(
32
- aliases: AliasMap,
31
+ function recordAnonymousAlias<T = NativeModuleObjectTypeAnnotation>(
32
+ aliases: AliasMap<T>,
33
33
  baseAliasName: string,
34
- extended: ExtendedObject,
34
+ extended: ExtendedObject<T>,
35
35
  ): string {
36
36
  extended[ExtendedObjectKey] = baseAliasName;
37
37
  aliases.types[baseAliasName] = extended;
@@ -39,16 +39,16 @@ function recordAnonymousAlias(
39
39
  return baseAliasName;
40
40
  }
41
41
 
42
- export function getAnonymousAliasCppName(
43
- aliases: AliasMap,
42
+ export function getAnonymousAliasCppName<T = NativeModuleObjectTypeAnnotation>(
43
+ aliases: AliasMap<T>,
44
44
  baseAliasName: string,
45
- objectType: NativeModuleObjectTypeAnnotation,
45
+ objectType: T,
46
46
  ): string {
47
47
  // someone found an anonymous object literal type
48
48
  // if the ExtendedObjectKey flag has been set
49
49
  // then it is a known one
50
50
  // this happens because method signatures are generate twice in spec and error messages
51
- const extended = <ExtendedObject>objectType;
51
+ const extended = <ExtendedObject<T>>objectType;
52
52
  const key = extended[ExtendedObjectKey];
53
53
  if (key !== undefined) {
54
54
  return getAliasCppName(key);
@@ -59,7 +59,7 @@ export function getAnonymousAliasCppName(
59
59
  // associate the name with this object literal type and return
60
60
  if (aliases.types[baseAliasName] === undefined) {
61
61
  return getAliasCppName(
62
- recordAnonymousAlias(aliases, baseAliasName, extended),
62
+ recordAnonymousAlias<T>(aliases, baseAliasName, extended),
63
63
  );
64
64
  }
65
65