@react-native/codegen 0.84.0-nightly-20251203-a5e6addc6 → 0.84.0-nightly-20251205-95cc1e767
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/CodegenSchema.d.ts +4 -13
- package/lib/CodegenSchema.js.flow +5 -13
- package/lib/cli/combine/combine-js-to-schema.js +6 -8
- package/lib/cli/combine/combine-js-to-schema.js.flow +6 -8
- package/lib/generators/Utils.js +49 -0
- package/lib/generators/Utils.js.flow +58 -0
- package/lib/generators/components/CppHelpers.js +35 -2
- package/lib/generators/components/CppHelpers.js.flow +35 -2
- package/lib/generators/components/GenerateEventEmitterCpp.js +11 -2
- package/lib/generators/components/GenerateEventEmitterCpp.js.flow +11 -2
- package/lib/generators/components/GenerateEventEmitterH.js +24 -9
- package/lib/generators/components/GenerateEventEmitterH.js.flow +24 -10
- package/lib/generators/modules/GenerateModuleH.js +24 -17
- package/lib/generators/modules/GenerateModuleH.js.flow +24 -17
- package/lib/generators/modules/GenerateModuleJavaSpec.js +48 -34
- package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +48 -34
- package/lib/generators/modules/GenerateModuleJniCpp.js +29 -28
- package/lib/generators/modules/GenerateModuleJniCpp.js.flow +29 -28
- package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js +36 -22
- package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js.flow +39 -24
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js +4 -3
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js.flow +4 -3
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js +7 -4
- package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js.flow +7 -4
- package/lib/generators/modules/GenerateModuleObjCpp/serializeEventEmitter.js +19 -6
- package/lib/generators/modules/GenerateModuleObjCpp/serializeEventEmitter.js.flow +19 -6
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js +22 -23
- package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +22 -23
- package/lib/parsers/error-utils.js +1 -1
- package/lib/parsers/error-utils.js.flow +1 -1
- package/lib/parsers/errors.js +0 -15
- package/lib/parsers/errors.js.flow +0 -22
- package/lib/parsers/flow/components/events.js +1 -1
- package/lib/parsers/flow/components/events.js.flow +1 -1
- package/lib/parsers/flow/modules/index.js +12 -1
- package/lib/parsers/flow/modules/index.js.flow +12 -1
- package/lib/parsers/flow/parser.js +0 -3
- package/lib/parsers/flow/parser.js.flow +2 -8
- package/lib/parsers/parser.js.flow +2 -10
- package/lib/parsers/parserMock.js +0 -3
- package/lib/parsers/parserMock.js.flow +2 -8
- package/lib/parsers/parsers-primitives.js +41 -47
- package/lib/parsers/parsers-primitives.js.flow +45 -56
- package/lib/parsers/typescript/components/events.js +1 -1
- package/lib/parsers/typescript/components/events.js.flow +1 -1
- package/lib/parsers/typescript/modules/index.js +12 -1
- package/lib/parsers/typescript/modules/index.js.flow +12 -1
- package/lib/parsers/typescript/parser.js +0 -3
- package/lib/parsers/typescript/parser.js.flow +2 -8
- package/package.json +2 -2
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
import type {AliasResolver} from './Utils';
|
|
24
24
|
|
|
25
25
|
const {unwrapNullable} = require('../../parsers/parsers-commons');
|
|
26
|
+
const {parseValidUnionType} = require('../Utils');
|
|
26
27
|
const {createAliasResolver, getModules} = require('./Utils');
|
|
27
28
|
|
|
28
29
|
type FilesOutput = Map<string, string>;
|
|
@@ -167,8 +168,6 @@ function translateReturnTypeToKind(
|
|
|
167
168
|
return 'StringKind';
|
|
168
169
|
case 'StringLiteralTypeAnnotation':
|
|
169
170
|
return 'StringKind';
|
|
170
|
-
case 'StringLiteralUnionTypeAnnotation':
|
|
171
|
-
return 'StringKind';
|
|
172
171
|
case 'BooleanTypeAnnotation':
|
|
173
172
|
return 'BooleanKind';
|
|
174
173
|
case 'BooleanLiteralTypeAnnotation':
|
|
@@ -185,17 +184,19 @@ function translateReturnTypeToKind(
|
|
|
185
184
|
);
|
|
186
185
|
}
|
|
187
186
|
case 'UnionTypeAnnotation':
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
const validUnionType = parseValidUnionType(realTypeAnnotation);
|
|
188
|
+
switch (validUnionType) {
|
|
189
|
+
case 'boolean':
|
|
190
|
+
return 'BooleanKind';
|
|
191
|
+
case 'number':
|
|
190
192
|
return 'NumberKind';
|
|
191
|
-
case '
|
|
193
|
+
case 'object':
|
|
192
194
|
return 'ObjectKind';
|
|
193
|
-
case '
|
|
195
|
+
case 'string':
|
|
194
196
|
return 'StringKind';
|
|
195
197
|
default:
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
);
|
|
198
|
+
(validUnionType: empty);
|
|
199
|
+
throw new Error(`Unsupported union member type`);
|
|
199
200
|
}
|
|
200
201
|
case 'NumberTypeAnnotation':
|
|
201
202
|
return 'NumberKind';
|
|
@@ -254,8 +255,6 @@ function translateParamTypeToJniType(
|
|
|
254
255
|
return 'Ljava/lang/String;';
|
|
255
256
|
case 'StringLiteralTypeAnnotation':
|
|
256
257
|
return 'Ljava/lang/String;';
|
|
257
|
-
case 'StringLiteralUnionTypeAnnotation':
|
|
258
|
-
return 'Ljava/lang/String;';
|
|
259
258
|
case 'BooleanTypeAnnotation':
|
|
260
259
|
return !isRequired ? 'Ljava/lang/Boolean;' : 'Z';
|
|
261
260
|
case 'BooleanLiteralTypeAnnotation':
|
|
@@ -272,17 +271,19 @@ function translateParamTypeToJniType(
|
|
|
272
271
|
);
|
|
273
272
|
}
|
|
274
273
|
case 'UnionTypeAnnotation':
|
|
275
|
-
|
|
276
|
-
|
|
274
|
+
const validUnionType = parseValidUnionType(realTypeAnnotation);
|
|
275
|
+
switch (validUnionType) {
|
|
276
|
+
case 'boolean':
|
|
277
|
+
return !isRequired ? 'Ljava/lang/Boolean;' : 'Z';
|
|
278
|
+
case 'number':
|
|
277
279
|
return !isRequired ? 'Ljava/lang/Double;' : 'D';
|
|
278
|
-
case '
|
|
280
|
+
case 'object':
|
|
279
281
|
return 'Lcom/facebook/react/bridge/ReadableMap;';
|
|
280
|
-
case '
|
|
282
|
+
case 'string':
|
|
281
283
|
return 'Ljava/lang/String;';
|
|
282
284
|
default:
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
);
|
|
285
|
+
(validUnionType: empty);
|
|
286
|
+
throw new Error(`Unsupported union member type`);
|
|
286
287
|
}
|
|
287
288
|
case 'NumberTypeAnnotation':
|
|
288
289
|
return !isRequired ? 'Ljava/lang/Double;' : 'D';
|
|
@@ -338,8 +339,6 @@ function translateReturnTypeToJniType(
|
|
|
338
339
|
return 'Ljava/lang/String;';
|
|
339
340
|
case 'StringLiteralTypeAnnotation':
|
|
340
341
|
return 'Ljava/lang/String;';
|
|
341
|
-
case 'StringLiteralUnionTypeAnnotation':
|
|
342
|
-
return 'Ljava/lang/String;';
|
|
343
342
|
case 'BooleanTypeAnnotation':
|
|
344
343
|
return nullable ? 'Ljava/lang/Boolean;' : 'Z';
|
|
345
344
|
case 'BooleanLiteralTypeAnnotation':
|
|
@@ -356,17 +355,19 @@ function translateReturnTypeToJniType(
|
|
|
356
355
|
);
|
|
357
356
|
}
|
|
358
357
|
case 'UnionTypeAnnotation':
|
|
359
|
-
|
|
360
|
-
|
|
358
|
+
const validUnionType = parseValidUnionType(realTypeAnnotation);
|
|
359
|
+
switch (validUnionType) {
|
|
360
|
+
case 'boolean':
|
|
361
|
+
return nullable ? 'Ljava/lang/Boolean;' : 'Z';
|
|
362
|
+
case 'number':
|
|
361
363
|
return nullable ? 'Ljava/lang/Double;' : 'D';
|
|
362
|
-
case '
|
|
363
|
-
return 'Lcom/facebook/react/bridge/
|
|
364
|
-
case '
|
|
364
|
+
case 'object':
|
|
365
|
+
return 'Lcom/facebook/react/bridge/ReadableMap;';
|
|
366
|
+
case 'string':
|
|
365
367
|
return 'Ljava/lang/String;';
|
|
366
368
|
default:
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
);
|
|
369
|
+
(validUnionType: empty);
|
|
370
|
+
throw new Error(`Unsupported union member type`);
|
|
370
371
|
}
|
|
371
372
|
case 'NumberTypeAnnotation':
|
|
372
373
|
return nullable ? 'Ljava/lang/Double;' : 'D';
|
|
@@ -41,7 +41,11 @@ const {
|
|
|
41
41
|
unwrapNullable,
|
|
42
42
|
wrapNullable,
|
|
43
43
|
} = require('../../../parsers/parsers-commons');
|
|
44
|
-
const {
|
|
44
|
+
const {
|
|
45
|
+
HeterogeneousUnionError,
|
|
46
|
+
capitalize,
|
|
47
|
+
parseValidUnionType,
|
|
48
|
+
} = require('../../Utils');
|
|
45
49
|
class StructCollector {
|
|
46
50
|
constructor() {
|
|
47
51
|
_defineProperty(this, '_structs', new Map());
|
|
@@ -89,27 +93,37 @@ class StructCollector {
|
|
|
89
93
|
case 'MixedTypeAnnotation':
|
|
90
94
|
throw new Error('Mixed types are unsupported in structs');
|
|
91
95
|
case 'UnionTypeAnnotation':
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
type
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
96
|
+
try {
|
|
97
|
+
const validUnionType = parseValidUnionType(typeAnnotation);
|
|
98
|
+
switch (validUnionType) {
|
|
99
|
+
case 'boolean':
|
|
100
|
+
return wrapNullable(nullable, {
|
|
101
|
+
type: 'BooleanTypeAnnotation',
|
|
102
|
+
});
|
|
103
|
+
case 'number':
|
|
104
|
+
return wrapNullable(nullable, {
|
|
105
|
+
type: 'NumberTypeAnnotation',
|
|
106
|
+
});
|
|
107
|
+
case 'object':
|
|
108
|
+
// This isn't smart enough to actually know how to generate the
|
|
109
|
+
// options on the native side. So we just treat it as an unknown object type
|
|
110
|
+
return wrapNullable(nullable, {
|
|
111
|
+
type: 'GenericObjectTypeAnnotation',
|
|
112
|
+
});
|
|
113
|
+
case 'string':
|
|
114
|
+
return wrapNullable(nullable, {
|
|
115
|
+
type: 'StringTypeAnnotation',
|
|
116
|
+
});
|
|
117
|
+
default:
|
|
118
|
+
validUnionType;
|
|
119
|
+
throw new Error(`Unsupported union member types`);
|
|
120
|
+
}
|
|
121
|
+
} catch (ex) {
|
|
122
|
+
// TODO(T247151345): Implement proper heterogeneous union support.
|
|
123
|
+
if (ex instanceof HeterogeneousUnionError) {
|
|
124
|
+
return wrapNullable(nullable, typeAnnotation);
|
|
125
|
+
}
|
|
126
|
+
throw ex;
|
|
113
127
|
}
|
|
114
128
|
default: {
|
|
115
129
|
return wrapNullable(nullable, typeAnnotation);
|
|
@@ -23,11 +23,11 @@ import type {
|
|
|
23
23
|
NativeModuleNumberTypeAnnotation,
|
|
24
24
|
NativeModuleObjectTypeAnnotation,
|
|
25
25
|
NativeModuleTypeAliasTypeAnnotation,
|
|
26
|
+
NativeModuleUnionTypeAnnotation,
|
|
26
27
|
Nullable,
|
|
27
28
|
NumberLiteralTypeAnnotation,
|
|
28
29
|
ReservedTypeAnnotation,
|
|
29
30
|
StringLiteralTypeAnnotation,
|
|
30
|
-
StringLiteralUnionTypeAnnotation,
|
|
31
31
|
StringTypeAnnotation,
|
|
32
32
|
} from '../../../CodegenSchema';
|
|
33
33
|
import type {AliasResolver} from '../Utils';
|
|
@@ -36,7 +36,11 @@ const {
|
|
|
36
36
|
unwrapNullable,
|
|
37
37
|
wrapNullable,
|
|
38
38
|
} = require('../../../parsers/parsers-commons');
|
|
39
|
-
const {
|
|
39
|
+
const {
|
|
40
|
+
HeterogeneousUnionError,
|
|
41
|
+
capitalize,
|
|
42
|
+
parseValidUnionType,
|
|
43
|
+
} = require('../../Utils');
|
|
40
44
|
|
|
41
45
|
type StructContext = 'CONSTANTS' | 'REGULAR';
|
|
42
46
|
|
|
@@ -63,7 +67,7 @@ export type StructProperty = $ReadOnly<{
|
|
|
63
67
|
export type StructTypeAnnotation =
|
|
64
68
|
| StringTypeAnnotation
|
|
65
69
|
| StringLiteralTypeAnnotation
|
|
66
|
-
|
|
|
70
|
+
| NativeModuleUnionTypeAnnotation
|
|
67
71
|
| NativeModuleNumberTypeAnnotation
|
|
68
72
|
| NumberLiteralTypeAnnotation
|
|
69
73
|
| BooleanLiteralTypeAnnotation
|
|
@@ -129,27 +133,38 @@ class StructCollector {
|
|
|
129
133
|
case 'MixedTypeAnnotation':
|
|
130
134
|
throw new Error('Mixed types are unsupported in structs');
|
|
131
135
|
case 'UnionTypeAnnotation':
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
type
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
136
|
+
try {
|
|
137
|
+
const validUnionType = parseValidUnionType(typeAnnotation);
|
|
138
|
+
switch (validUnionType) {
|
|
139
|
+
case 'boolean':
|
|
140
|
+
return wrapNullable(nullable, {
|
|
141
|
+
type: 'BooleanTypeAnnotation',
|
|
142
|
+
});
|
|
143
|
+
case 'number':
|
|
144
|
+
return wrapNullable(nullable, {
|
|
145
|
+
type: 'NumberTypeAnnotation',
|
|
146
|
+
});
|
|
147
|
+
case 'object':
|
|
148
|
+
// This isn't smart enough to actually know how to generate the
|
|
149
|
+
// options on the native side. So we just treat it as an unknown object type
|
|
150
|
+
return wrapNullable(nullable, {
|
|
151
|
+
type: 'GenericObjectTypeAnnotation',
|
|
152
|
+
});
|
|
153
|
+
case 'string':
|
|
154
|
+
return wrapNullable(nullable, {
|
|
155
|
+
type: 'StringTypeAnnotation',
|
|
156
|
+
});
|
|
157
|
+
default:
|
|
158
|
+
(validUnionType: empty);
|
|
159
|
+
throw new Error(`Unsupported union member types`);
|
|
160
|
+
}
|
|
161
|
+
} catch (ex) {
|
|
162
|
+
// TODO(T247151345): Implement proper heterogeneous union support.
|
|
163
|
+
if (ex instanceof HeterogeneousUnionError) {
|
|
164
|
+
return wrapNullable(nullable, typeAnnotation);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
throw ex;
|
|
153
168
|
}
|
|
154
169
|
default: {
|
|
155
170
|
return wrapNullable(nullable, typeAnnotation);
|
|
@@ -80,8 +80,9 @@ function toObjCType(
|
|
|
80
80
|
return 'NSString *';
|
|
81
81
|
case 'StringLiteralTypeAnnotation':
|
|
82
82
|
return 'NSString *';
|
|
83
|
-
case '
|
|
84
|
-
|
|
83
|
+
case 'UnionTypeAnnotation':
|
|
84
|
+
// TODO(T247151345): Implement proper heterogeneous union support. This is unsafe.
|
|
85
|
+
return 'NSObject *';
|
|
85
86
|
case 'NumberTypeAnnotation':
|
|
86
87
|
return wrapCxxOptional('double', isRequired);
|
|
87
88
|
case 'NumberLiteralTypeAnnotation':
|
|
@@ -160,7 +161,7 @@ function toObjCValue(
|
|
|
160
161
|
return value;
|
|
161
162
|
case 'StringLiteralTypeAnnotation':
|
|
162
163
|
return value;
|
|
163
|
-
case '
|
|
164
|
+
case 'UnionTypeAnnotation':
|
|
164
165
|
return value;
|
|
165
166
|
case 'NumberTypeAnnotation':
|
|
166
167
|
return wrapPrimitive('double');
|
|
@@ -96,8 +96,9 @@ function toObjCType(
|
|
|
96
96
|
return 'NSString *';
|
|
97
97
|
case 'StringLiteralTypeAnnotation':
|
|
98
98
|
return 'NSString *';
|
|
99
|
-
case '
|
|
100
|
-
|
|
99
|
+
case 'UnionTypeAnnotation':
|
|
100
|
+
// TODO(T247151345): Implement proper heterogeneous union support. This is unsafe.
|
|
101
|
+
return 'NSObject *';
|
|
101
102
|
case 'NumberTypeAnnotation':
|
|
102
103
|
return wrapCxxOptional('double', isRequired);
|
|
103
104
|
case 'NumberLiteralTypeAnnotation':
|
|
@@ -183,7 +184,7 @@ function toObjCValue(
|
|
|
183
184
|
return value;
|
|
184
185
|
case 'StringLiteralTypeAnnotation':
|
|
185
186
|
return value;
|
|
186
|
-
case '
|
|
187
|
+
case 'UnionTypeAnnotation':
|
|
187
188
|
return value;
|
|
188
189
|
case 'NumberTypeAnnotation':
|
|
189
190
|
return wrapPrimitive('double');
|
|
@@ -68,8 +68,9 @@ function toObjCType(
|
|
|
68
68
|
return 'NSString *';
|
|
69
69
|
case 'StringLiteralTypeAnnotation':
|
|
70
70
|
return 'NSString *';
|
|
71
|
-
case '
|
|
72
|
-
|
|
71
|
+
case 'UnionTypeAnnotation':
|
|
72
|
+
// TODO(T247151345): Implement proper heterogeneous union support. This is unsafe.
|
|
73
|
+
return 'NSObject *';
|
|
73
74
|
case 'NumberTypeAnnotation':
|
|
74
75
|
return wrapCxxOptional('double', isRequired);
|
|
75
76
|
case 'NumberLiteralTypeAnnotation':
|
|
@@ -149,8 +150,10 @@ function toObjCValue(
|
|
|
149
150
|
return RCTBridgingTo('String');
|
|
150
151
|
case 'StringLiteralTypeAnnotation':
|
|
151
152
|
return RCTBridgingTo('String');
|
|
152
|
-
case '
|
|
153
|
-
return
|
|
153
|
+
case 'UnionTypeAnnotation':
|
|
154
|
+
return !isRequired
|
|
155
|
+
? `!RCTNilIfNull(${value}) ? std::optional<NSObject *>{} : std::optional<NSObject *>(${value})`
|
|
156
|
+
: value;
|
|
154
157
|
case 'NumberTypeAnnotation':
|
|
155
158
|
return RCTBridgingTo('Double');
|
|
156
159
|
case 'NumberLiteralTypeAnnotation':
|
|
@@ -87,8 +87,9 @@ function toObjCType(
|
|
|
87
87
|
return 'NSString *';
|
|
88
88
|
case 'StringLiteralTypeAnnotation':
|
|
89
89
|
return 'NSString *';
|
|
90
|
-
case '
|
|
91
|
-
|
|
90
|
+
case 'UnionTypeAnnotation':
|
|
91
|
+
// TODO(T247151345): Implement proper heterogeneous union support. This is unsafe.
|
|
92
|
+
return 'NSObject *';
|
|
92
93
|
case 'NumberTypeAnnotation':
|
|
93
94
|
return wrapCxxOptional('double', isRequired);
|
|
94
95
|
case 'NumberLiteralTypeAnnotation':
|
|
@@ -173,8 +174,10 @@ function toObjCValue(
|
|
|
173
174
|
return RCTBridgingTo('String');
|
|
174
175
|
case 'StringLiteralTypeAnnotation':
|
|
175
176
|
return RCTBridgingTo('String');
|
|
176
|
-
case '
|
|
177
|
-
return
|
|
177
|
+
case 'UnionTypeAnnotation':
|
|
178
|
+
return !isRequired
|
|
179
|
+
? `!RCTNilIfNull(${value}) ? std::optional<NSObject *>{} : std::optional<NSObject *>(${value})`
|
|
180
|
+
: value;
|
|
178
181
|
case 'NumberTypeAnnotation':
|
|
179
182
|
return RCTBridgingTo('Double');
|
|
180
183
|
case 'NumberLiteralTypeAnnotation':
|
|
@@ -8,16 +8,29 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
const {toPascalCase} = require('../../Utils');
|
|
11
|
+
const {parseValidUnionType, toPascalCase} = require('../../Utils');
|
|
12
12
|
function getEventEmitterTypeObjCType(eventEmitter) {
|
|
13
|
-
const
|
|
14
|
-
switch (type) {
|
|
13
|
+
const typeAnnotation = eventEmitter.typeAnnotation.typeAnnotation;
|
|
14
|
+
switch (typeAnnotation.type) {
|
|
15
15
|
case 'StringTypeAnnotation':
|
|
16
16
|
return 'NSString *_Nonnull';
|
|
17
17
|
case 'StringLiteralTypeAnnotation':
|
|
18
18
|
return 'NSString *_Nonnull';
|
|
19
|
-
case '
|
|
20
|
-
|
|
19
|
+
case 'UnionTypeAnnotation':
|
|
20
|
+
const validUnionType = parseValidUnionType(typeAnnotation);
|
|
21
|
+
switch (validUnionType) {
|
|
22
|
+
case 'boolean':
|
|
23
|
+
return 'BOOL';
|
|
24
|
+
case 'number':
|
|
25
|
+
return 'NSNumber *_Nonnull';
|
|
26
|
+
case 'object':
|
|
27
|
+
return 'NSDictionary *';
|
|
28
|
+
case 'string':
|
|
29
|
+
return 'NSString *_Nonnull';
|
|
30
|
+
default:
|
|
31
|
+
validUnionType;
|
|
32
|
+
throw new Error(`Unsupported union member type`);
|
|
33
|
+
}
|
|
21
34
|
case 'NumberTypeAnnotation':
|
|
22
35
|
case 'NumberLiteralTypeAnnotation':
|
|
23
36
|
return 'NSNumber *_Nonnull';
|
|
@@ -39,7 +52,7 @@ function getEventEmitterTypeObjCType(eventEmitter) {
|
|
|
39
52
|
`Unsupported eventType for ${eventEmitter.name}. Found: ${eventEmitter.typeAnnotation.typeAnnotation.type}`,
|
|
40
53
|
);
|
|
41
54
|
default:
|
|
42
|
-
type;
|
|
55
|
+
typeAnnotation.type;
|
|
43
56
|
throw new Error(
|
|
44
57
|
`Unsupported eventType for ${eventEmitter.name}. Found: ${eventEmitter.typeAnnotation.typeAnnotation.type}`,
|
|
45
58
|
);
|
|
@@ -10,20 +10,33 @@
|
|
|
10
10
|
|
|
11
11
|
import type {NativeModuleEventEmitterShape} from '../../../CodegenSchema';
|
|
12
12
|
|
|
13
|
-
const {toPascalCase} = require('../../Utils');
|
|
13
|
+
const {parseValidUnionType, toPascalCase} = require('../../Utils');
|
|
14
14
|
|
|
15
15
|
function getEventEmitterTypeObjCType(
|
|
16
16
|
eventEmitter: NativeModuleEventEmitterShape,
|
|
17
17
|
): string {
|
|
18
|
-
const
|
|
18
|
+
const typeAnnotation = eventEmitter.typeAnnotation.typeAnnotation;
|
|
19
19
|
|
|
20
|
-
switch (type) {
|
|
20
|
+
switch (typeAnnotation.type) {
|
|
21
21
|
case 'StringTypeAnnotation':
|
|
22
22
|
return 'NSString *_Nonnull';
|
|
23
23
|
case 'StringLiteralTypeAnnotation':
|
|
24
24
|
return 'NSString *_Nonnull';
|
|
25
|
-
case '
|
|
26
|
-
|
|
25
|
+
case 'UnionTypeAnnotation':
|
|
26
|
+
const validUnionType = parseValidUnionType(typeAnnotation);
|
|
27
|
+
switch (validUnionType) {
|
|
28
|
+
case 'boolean':
|
|
29
|
+
return 'BOOL';
|
|
30
|
+
case 'number':
|
|
31
|
+
return 'NSNumber *_Nonnull';
|
|
32
|
+
case 'object':
|
|
33
|
+
return 'NSDictionary *';
|
|
34
|
+
case 'string':
|
|
35
|
+
return 'NSString *_Nonnull';
|
|
36
|
+
default:
|
|
37
|
+
(validUnionType: empty);
|
|
38
|
+
throw new Error(`Unsupported union member type`);
|
|
39
|
+
}
|
|
27
40
|
case 'NumberTypeAnnotation':
|
|
28
41
|
case 'NumberLiteralTypeAnnotation':
|
|
29
42
|
return 'NSNumber *_Nonnull';
|
|
@@ -45,7 +58,7 @@ function getEventEmitterTypeObjCType(
|
|
|
45
58
|
`Unsupported eventType for ${eventEmitter.name}. Found: ${eventEmitter.typeAnnotation.typeAnnotation.type}`,
|
|
46
59
|
);
|
|
47
60
|
default:
|
|
48
|
-
(type: empty);
|
|
61
|
+
(typeAnnotation.type: empty);
|
|
49
62
|
throw new Error(
|
|
50
63
|
`Unsupported eventType for ${eventEmitter.name}. Found: ${eventEmitter.typeAnnotation.typeAnnotation.type}`,
|
|
51
64
|
);
|
|
@@ -15,7 +15,7 @@ const {
|
|
|
15
15
|
wrapNullable,
|
|
16
16
|
} = require('../../../parsers/parsers-commons');
|
|
17
17
|
const {wrapOptional} = require('../../TypeUtils/Objective-C');
|
|
18
|
-
const {capitalize} = require('../../Utils');
|
|
18
|
+
const {capitalize, parseValidUnionType} = require('../../Utils');
|
|
19
19
|
const {getNamespacedStructName} = require('./Utils');
|
|
20
20
|
const invariant = require('invariant');
|
|
21
21
|
const ProtocolMethodTemplate = ({returnObjCType, methodName, params}) =>
|
|
@@ -210,8 +210,9 @@ function getParamObjCType(
|
|
|
210
210
|
return notStruct(wrapOptional('NSString *', !nullable));
|
|
211
211
|
case 'StringLiteralTypeAnnotation':
|
|
212
212
|
return notStruct(wrapOptional('NSString *', !nullable));
|
|
213
|
-
case '
|
|
214
|
-
|
|
213
|
+
case 'UnionTypeAnnotation':
|
|
214
|
+
// TODO(T247151345): Implement proper heterogeneous union support. This is unsafe.
|
|
215
|
+
return notStruct(wrapOptional('NSObject *', !nullable));
|
|
215
216
|
case 'NumberTypeAnnotation':
|
|
216
217
|
return notStruct(isRequired ? 'double' : 'NSNumber *');
|
|
217
218
|
case 'NumberLiteralTypeAnnotation':
|
|
@@ -284,10 +285,6 @@ function getReturnObjCType(methodName, nullableTypeAnnotation) {
|
|
|
284
285
|
// TODO: Can NSString * returns not be _Nullable?
|
|
285
286
|
// In the legacy codegen, we don't surround NSSTring * with _Nullable
|
|
286
287
|
return wrapOptional('NSString *', isRequired);
|
|
287
|
-
case 'StringLiteralUnionTypeAnnotation':
|
|
288
|
-
// TODO: Can NSString * returns not be _Nullable?
|
|
289
|
-
// In the legacy codegen, we don't surround NSSTring * with _Nullable
|
|
290
|
-
return wrapOptional('NSString *', isRequired);
|
|
291
288
|
case 'NumberTypeAnnotation':
|
|
292
289
|
return wrapOptional('NSNumber *', isRequired);
|
|
293
290
|
case 'NumberLiteralTypeAnnotation':
|
|
@@ -314,19 +311,21 @@ function getReturnObjCType(methodName, nullableTypeAnnotation) {
|
|
|
314
311
|
);
|
|
315
312
|
}
|
|
316
313
|
case 'UnionTypeAnnotation':
|
|
317
|
-
|
|
318
|
-
|
|
314
|
+
const validUnionType = parseValidUnionType(typeAnnotation);
|
|
315
|
+
switch (validUnionType) {
|
|
316
|
+
case 'boolean':
|
|
319
317
|
return wrapOptional('NSNumber *', isRequired);
|
|
320
|
-
case '
|
|
318
|
+
case 'number':
|
|
319
|
+
return wrapOptional('NSNumber *', isRequired);
|
|
320
|
+
case 'object':
|
|
321
321
|
return wrapOptional('NSDictionary *', isRequired);
|
|
322
|
-
case '
|
|
322
|
+
case 'string':
|
|
323
323
|
// TODO: Can NSString * returns not be _Nullable?
|
|
324
324
|
// In the legacy codegen, we don't surround NSSTring * with _Nullable
|
|
325
325
|
return wrapOptional('NSString *', isRequired);
|
|
326
326
|
default:
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
);
|
|
327
|
+
validUnionType;
|
|
328
|
+
throw new Error(`Unsupported union member type`);
|
|
330
329
|
}
|
|
331
330
|
case 'GenericObjectTypeAnnotation':
|
|
332
331
|
return wrapOptional('NSDictionary *', isRequired);
|
|
@@ -356,8 +355,6 @@ function getReturnJSType(methodName, nullableTypeAnnotation) {
|
|
|
356
355
|
return 'StringKind';
|
|
357
356
|
case 'StringLiteralTypeAnnotation':
|
|
358
357
|
return 'StringKind';
|
|
359
|
-
case 'StringLiteralUnionTypeAnnotation':
|
|
360
|
-
return 'StringKind';
|
|
361
358
|
case 'NumberTypeAnnotation':
|
|
362
359
|
return 'NumberKind';
|
|
363
360
|
case 'NumberLiteralTypeAnnotation':
|
|
@@ -386,17 +383,19 @@ function getReturnJSType(methodName, nullableTypeAnnotation) {
|
|
|
386
383
|
);
|
|
387
384
|
}
|
|
388
385
|
case 'UnionTypeAnnotation':
|
|
389
|
-
|
|
390
|
-
|
|
386
|
+
const validUnionType = parseValidUnionType(typeAnnotation);
|
|
387
|
+
switch (validUnionType) {
|
|
388
|
+
case 'boolean':
|
|
389
|
+
return 'BooleanKind';
|
|
390
|
+
case 'number':
|
|
391
391
|
return 'NumberKind';
|
|
392
|
-
case '
|
|
392
|
+
case 'object':
|
|
393
393
|
return 'ObjectKind';
|
|
394
|
-
case '
|
|
394
|
+
case 'string':
|
|
395
395
|
return 'StringKind';
|
|
396
396
|
default:
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
);
|
|
397
|
+
validUnionType;
|
|
398
|
+
throw new Error(`Unsupported union member types`);
|
|
400
399
|
}
|
|
401
400
|
default:
|
|
402
401
|
typeAnnotation.type;
|