@idlizer/core 2.1.5 → 2.1.7
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/build/lib/src/LanguageWriters/ArgConvertors.d.ts +0 -1
- package/build/lib/src/LanguageWriters/ArgConvertors.js +8 -3
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +9 -4
- package/build/lib/src/LanguageWriters/LanguageWriter.js +4 -4
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +1 -0
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +16 -6
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +1 -0
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +55 -54
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.d.ts +1 -1
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +2 -2
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +1 -0
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -2
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +44 -9
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +7 -2
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +24 -10
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +3 -0
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +32 -7
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +6 -3
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +11 -9
- package/build/lib/src/config.d.ts +607 -44
- package/build/lib/src/config.js +18 -0
- package/build/lib/src/configDescriber.d.ts +1 -1
- package/build/lib/src/configDescriber.js +2 -2
- package/build/lib/src/from-idl/DtsPrinter.js +3 -2
- package/build/lib/src/from-idl/IDLLinter.js +1 -1
- package/build/lib/src/from-idl/deserialize.d.ts +7 -1
- package/build/lib/src/from-idl/deserialize.js +79 -33
- package/build/lib/src/idl.d.ts +4 -2
- package/build/lib/src/idl.js +64 -33
- package/build/lib/src/peer-generation/Materialized.js +1 -1
- package/build/lib/src/peer-generation/PeerLibrary.js +4 -4
- package/build/lib/src/peer-generation/idl/common.d.ts +1 -0
- package/build/lib/src/peer-generation/idl/common.js +8 -2
- package/build/lib/src/peer-generation/isMaterialized.js +4 -0
- package/build/lib/src/peer-generation/unions.js +1 -1
- package/build/lib/src/util.d.ts +2 -1
- package/build/lib/src/util.js +8 -3
- package/build/lib/src/visitor.d.ts +2 -0
- package/build/lib/src/visitor.js +108 -0
- package/package.json +2 -2
- package/webidl2.js/dist/webidl2.js +62 -16
|
@@ -130,16 +130,17 @@ export class ETSLambdaExpression extends LambdaExpression {
|
|
|
130
130
|
// UTILS //
|
|
131
131
|
////////////////////////////////////////////////////////////////
|
|
132
132
|
export function generateTypeCheckerName(typeName) {
|
|
133
|
-
typeName = typeName
|
|
134
|
-
.replaceAll('
|
|
133
|
+
typeName = typeName
|
|
134
|
+
.replaceAll('[]', 'BracketsArray')
|
|
135
|
+
.split('.').at(-1); // Todo: hack for namespaces. Remove when ready to use FQNames
|
|
135
136
|
return `is${typeName.replaceAll('[]', 'Brackets')}`;
|
|
136
137
|
}
|
|
137
138
|
export function generateEnumToNumericName(typeName) {
|
|
138
|
-
typeName = typeName.split(
|
|
139
|
+
typeName = typeName.split('.').at(-1); // Todo: hack for namespaces. Remove when ready to use FQNames
|
|
139
140
|
return `${typeName}_ToNumeric`;
|
|
140
141
|
}
|
|
141
142
|
export function generateEnumFromNumericName(typeName) {
|
|
142
|
-
typeName = typeName.split(
|
|
143
|
+
typeName = typeName.split('.').at(-1); // Todo: hack for namespaces. Remove when ready to use FQNames
|
|
143
144
|
return `${typeName}_FromNumeric`;
|
|
144
145
|
}
|
|
145
146
|
export function makeArrayTypeCheckCall(valueAccessor, typeName, writer) {
|
|
@@ -180,12 +181,22 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
180
181
|
return this.makeString(`${value} as ${type}`);
|
|
181
182
|
}
|
|
182
183
|
i32FromEnum(value, enumEntry) {
|
|
183
|
-
|
|
184
|
-
|
|
184
|
+
if (ETSLanguageWriter.isUseTypeChecker) {
|
|
185
|
+
const enumName = this.getNodeName(enumEntry);
|
|
186
|
+
return this.makeMethodCall('TypeChecker', generateEnumToNumericName(enumName), [value]);
|
|
187
|
+
}
|
|
188
|
+
return idl.isStringEnum(enumEntry)
|
|
189
|
+
? this.makeMethodCall(value.asString(), 'getOrdinal', [])
|
|
190
|
+
: this.makeMethodCall(value.asString(), 'valueOf', []);
|
|
185
191
|
}
|
|
186
192
|
enumFromI32(value, enumEntry) {
|
|
187
193
|
const enumName = this.getNodeName(enumEntry);
|
|
188
|
-
|
|
194
|
+
if (ETSLanguageWriter.isUseTypeChecker) {
|
|
195
|
+
return this.makeMethodCall('TypeChecker', generateEnumFromNumericName(enumName), [value]);
|
|
196
|
+
}
|
|
197
|
+
return idl.isStringEnum(enumEntry)
|
|
198
|
+
? this.makeString(`${enumName}.values()[${value.asString()}]`)
|
|
199
|
+
: this.makeMethodCall(enumName, 'fromValue', [value]);
|
|
189
200
|
}
|
|
190
201
|
makeDiscriminatorFromFields(convertor, value, accessors, duplicates) {
|
|
191
202
|
if (convertor instanceof AggregateConvertor
|
|
@@ -269,6 +280,11 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
269
280
|
// ])
|
|
270
281
|
}
|
|
271
282
|
castToInt(value, bitness) {
|
|
283
|
+
// This fix is used to avoid unnecessary writeInt8(value as int32) call, which is generated if value is already an int32
|
|
284
|
+
// The explicit cast forces ui2abc to call valueOf on an int, which fails the compilation
|
|
285
|
+
// TODO Fix this cast
|
|
286
|
+
if (bitness === 8)
|
|
287
|
+
return value;
|
|
272
288
|
return `${value} as int32`; // FIXME: is there int8 in ARKTS?
|
|
273
289
|
}
|
|
274
290
|
castToBoolean(value) { return `${value} ? 1 : 0`; }
|
|
@@ -308,7 +324,16 @@ export class ETSLanguageWriter extends TSLanguageWriter {
|
|
|
308
324
|
var _a;
|
|
309
325
|
return new TSCastExpression(value, `${this.getNodeName(node)}`, (_a = options === null || options === void 0 ? void 0 : options.unsafe) !== null && _a !== void 0 ? _a : false);
|
|
310
326
|
}
|
|
327
|
+
static get isUseTypeChecker() { return this._isUseTypeChecker; }
|
|
328
|
+
static useTypeChecker(isUseTypeChecker, op) {
|
|
329
|
+
const prevIsUse = this.isReferenceRelativeToNamespaces;
|
|
330
|
+
this._isUseTypeChecker = isUseTypeChecker;
|
|
331
|
+
const result = op();
|
|
332
|
+
this._isUseTypeChecker = prevIsUse;
|
|
333
|
+
return result;
|
|
334
|
+
}
|
|
311
335
|
}
|
|
336
|
+
ETSLanguageWriter._isUseTypeChecker = true;
|
|
312
337
|
function makeInterfaceTypeCheckerCall(valueAccessor, interfaceName, allFields, duplicates, writer) {
|
|
313
338
|
return writer.makeMethodCall("TypeChecker", generateTypeCheckerName(interfaceName), [writer.makeString(valueAccessor),
|
|
314
339
|
...allFields.map(it => {
|
|
@@ -32,15 +32,18 @@ export declare class TSLanguageWriter extends LanguageWriter {
|
|
|
32
32
|
protected typeConvertor: IdlNameConvertor;
|
|
33
33
|
constructor(printer: IndentedPrinter, resolver: ReferenceResolver, typeConvertor: IdlNameConvertor, language?: Language);
|
|
34
34
|
maybeSemicolon(): string;
|
|
35
|
-
pushNamespace(namespace: string,
|
|
35
|
+
pushNamespace(namespace: string, options: {
|
|
36
|
+
ident: boolean;
|
|
37
|
+
isDeclared?: boolean;
|
|
38
|
+
}): void;
|
|
36
39
|
fork(options?: {
|
|
37
40
|
resolver?: ReferenceResolver;
|
|
38
41
|
}): LanguageWriter;
|
|
39
42
|
getNodeName(type: idl.IDLNode): string;
|
|
40
43
|
writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isAbstract?: boolean): void;
|
|
41
44
|
writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
|
|
42
|
-
writeFunctionDeclaration(name: string, signature: MethodSignature): void;
|
|
43
|
-
writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void): void;
|
|
45
|
+
writeFunctionDeclaration(name: string, signature: MethodSignature, generics?: string[]): void;
|
|
46
|
+
writeFunctionImplementation(name: string, signature: MethodSignature, op: (writer: this) => void, generics?: string[]): void;
|
|
44
47
|
private generateFunctionDeclaration;
|
|
45
48
|
writeEnum(name: string, members: {
|
|
46
49
|
name: string;
|
|
@@ -124,10 +124,11 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
124
124
|
this.typeConvertor = typeConvertor;
|
|
125
125
|
}
|
|
126
126
|
maybeSemicolon() { return ""; }
|
|
127
|
-
pushNamespace(namespace,
|
|
127
|
+
pushNamespace(namespace, options) {
|
|
128
128
|
this.namespaceStack.push(namespace);
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
const declaredPrefix = options.isDeclared ? "declare " : "";
|
|
130
|
+
this.print(`export ${declaredPrefix}namespace ${namespace} {`);
|
|
131
|
+
if (options.ident)
|
|
131
132
|
this.pushIndent();
|
|
132
133
|
}
|
|
133
134
|
fork(options) {
|
|
@@ -165,24 +166,25 @@ export class TSLanguageWriter extends LanguageWriter {
|
|
|
165
166
|
this.popIndent();
|
|
166
167
|
this.printer.print(`}`);
|
|
167
168
|
}
|
|
168
|
-
writeFunctionDeclaration(name, signature) {
|
|
169
|
-
this.printer.print(this.generateFunctionDeclaration(name, signature));
|
|
169
|
+
writeFunctionDeclaration(name, signature, generics) {
|
|
170
|
+
this.printer.print(this.generateFunctionDeclaration(name, signature, generics));
|
|
170
171
|
}
|
|
171
|
-
writeFunctionImplementation(name, signature, op) {
|
|
172
|
-
this.printer.print(`${this.generateFunctionDeclaration(name, signature)} {`);
|
|
172
|
+
writeFunctionImplementation(name, signature, op, generics) {
|
|
173
|
+
this.printer.print(`${this.generateFunctionDeclaration(name, signature, generics)} {`);
|
|
173
174
|
this.printer.pushIndent();
|
|
174
175
|
op(this);
|
|
175
176
|
this.printer.popIndent();
|
|
176
177
|
this.printer.print('}');
|
|
177
178
|
}
|
|
178
|
-
generateFunctionDeclaration(name, signature) {
|
|
179
|
+
generateFunctionDeclaration(name, signature, generics) {
|
|
179
180
|
const rightmostRegularParameterIndex = rightmostIndexOf(signature.args, it => !isOptionalType(it));
|
|
180
181
|
const args = signature.args.map((it, index) => {
|
|
181
182
|
const optionalToken = idl.isOptionalType(it) && index > rightmostRegularParameterIndex ? '?' : '';
|
|
182
183
|
return `${signature.argName(index)}${optionalToken}: ${this.getNodeName(it)}`;
|
|
183
184
|
});
|
|
184
185
|
const returnType = this.getNodeName(signature.returnType);
|
|
185
|
-
|
|
186
|
+
const typeParams = generics && generics.length ? '<' + (generics === null || generics === void 0 ? void 0 : generics.join(', ')) + '>' : '';
|
|
187
|
+
return `export function ${name}${typeParams}(${args.join(", ")}): ${returnType}`;
|
|
186
188
|
}
|
|
187
189
|
writeEnum(name, members, options) {
|
|
188
190
|
this.printer.print(`${options.isExport ? "export " : ""}${options.isDeclare ? "declare " : ""}enum ${name} {`);
|