@idlizer/core 2.1.10-arktscgen-3a → 2.1.10-arktscgen-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.
Files changed (35) hide show
  1. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +12 -0
  2. package/build/lib/src/LanguageWriters/ArgConvertors.js +55 -3
  3. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +9 -1
  4. package/build/lib/src/LanguageWriters/LanguageWriter.js +10 -4
  5. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +1 -1
  6. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +2 -0
  7. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +11 -15
  8. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +0 -3
  9. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +3 -0
  10. package/build/lib/src/config.d.ts +760 -0
  11. package/build/lib/src/config.js +7 -0
  12. package/build/lib/src/formatter.js +5 -2
  13. package/build/lib/src/from-idl/DtsPrinter.js +2 -2
  14. package/build/lib/src/from-idl/common.js +2 -2
  15. package/build/lib/src/from-idl/deserialize.d.ts +3 -7
  16. package/build/lib/src/from-idl/deserialize.js +64 -38
  17. package/build/lib/src/from-idl/parser.d.ts +1 -1
  18. package/build/lib/src/from-idl/parser.js +29 -20
  19. package/build/lib/src/idl.d.ts +7 -1
  20. package/build/lib/src/idl.js +54 -10
  21. package/build/lib/src/index.d.ts +2 -1
  22. package/build/lib/src/index.js +2 -1
  23. package/build/lib/src/languageSpecificKeywords.js +1 -1
  24. package/build/lib/src/peer-generation/PeerLibrary.js +10 -1
  25. package/build/lib/src/peer-generation/isMaterialized.js +1 -1
  26. package/build/lib/src/peer-generation/modules.d.ts +2 -0
  27. package/build/lib/src/peer-generation/modules.js +14 -1
  28. package/build/lib/src/transformers/GenericTransformer.js +70 -5
  29. package/build/lib/src/transformers/NullTransformer.d.ts +0 -1
  30. package/build/lib/src/transformers/NullTransformer.js +1 -2
  31. package/build/lib/src/transformers/OnSerializeTransformer.d.ts +3 -0
  32. package/build/lib/src/transformers/OnSerializeTransformer.js +19 -0
  33. package/build/lib/src/util.d.ts +5 -0
  34. package/build/lib/src/util.js +13 -2
  35. package/package.json +5 -5
@@ -343,5 +343,17 @@ export declare function generateCallbackKindAccess(callback: idl.IDLCallback, la
343
343
  export declare function generateCallbackKindValue(callback: idl.IDLCallback): number;
344
344
  export declare function generateCallbackAPIArguments(library: LibraryInterface, callback: idl.IDLCallback): string[];
345
345
  export declare function maybeTransformManagedCallback(callback: idl.IDLCallback, library: ReferenceResolver): idl.IDLCallback | undefined;
346
+ export declare class TransformOnSerializeConvertor extends BaseArgConvertor {
347
+ protected library: PeerLibrary;
348
+ protected managedDeclaration: idl.IDLEntry;
349
+ protected target: idl.IDLType;
350
+ private targetConvertor;
351
+ constructor(param: string, library: PeerLibrary, managedDeclaration: idl.IDLEntry, target: idl.IDLType);
352
+ isPointerType(): boolean;
353
+ nativeType(): idl.IDLType;
354
+ convertorArg(param: string, writer: LanguageWriter): string;
355
+ convertorSerialize(param: string, value: string, writer: LanguageWriter): LanguageStatement;
356
+ convertorDeserialize(bufferName: string, deserializerName: string, assigneer: ExpressionAssigner, writer: LanguageWriter): LanguageStatement;
357
+ }
346
358
  export declare function createOutArgConvertor(library: PeerLibrary, type: idl.IDLType | undefined, otherParams: string[]): ArgConvertor | undefined;
347
359
  //# sourceMappingURL=ArgConvertors.d.ts.map
@@ -17,7 +17,7 @@ import { Language } from "../Language";
17
17
  import { BlockStatement, PrintHint, StringExpression, MethodModifier, NamedMethodSignature, ProxyStatement, ExpressionStatement } from "./LanguageWriter";
18
18
  import { RuntimeType } from "./common";
19
19
  import { generatorConfiguration, generatorTypePrefix } from "../config";
20
- import { capitalize, getExtractor, hashCodeFromString, throwException, warn } from "../util";
20
+ import { capitalize, getExtractor, getTransformer, hashCodeFromString, throwException, warn } from "../util";
21
21
  import { UnionRuntimeTypeChecker } from "../peer-generation/unions";
22
22
  import { CppConvertor, CppNameConvertor } from "./convertors/CppConvertors";
23
23
  import { createEmptyReferenceResolver } from "../peer-generation/ReferenceResolver";
@@ -579,7 +579,7 @@ export class InterfaceConvertor extends BaseArgConvertor {
579
579
  convertorSerialize(param, value, writer) {
580
580
  const accessor = getSerializerName(this.declaration);
581
581
  writer.addFeature(accessor, this.library.layout.resolve({ node: this.declaration, role: LayoutNodeRole.SERIALIZER }));
582
- return writer.makeStatement(writer.makeStaticMethodCall(accessor, 'write', [writer.makeString(`${param}Serializer`), writer.makeString(value)]));
582
+ return writer.makeStatement(writer.makeStaticMethodCall(accessor, 'write', [writer.makeString(`${param}Serializer`), writer.makeString(writer.escapeKeyword(value))]));
583
583
  }
584
584
  convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
585
585
  const accessor = getSerializerName(this.declaration);
@@ -1022,7 +1022,6 @@ export class MaterializedClassConvertor extends BaseArgConvertor {
1022
1022
  case Language.CPP:
1023
1023
  return `static_cast<${generatorTypePrefix()}${qualifiedName(this.declaration, "_", "namespace.name")}>(${param})`;
1024
1024
  case Language.JAVA:
1025
- case Language.KOTLIN:
1026
1025
  case Language.CJ:
1027
1026
  return `MaterializedBase.toPeerPtr(${writer.escapeKeyword(param)})`;
1028
1027
  default:
@@ -1295,6 +1294,59 @@ class PromiseOutArgConvertor extends BaseArgConvertor {
1295
1294
  return true;
1296
1295
  }
1297
1296
  }
1297
+ export class TransformOnSerializeConvertor extends BaseArgConvertor {
1298
+ constructor(param, library, managedDeclaration, target) {
1299
+ const targetConvertor = library.typeConvertor(param, target);
1300
+ super(target, targetConvertor.runtimeTypes, false, targetConvertor.useArray, param);
1301
+ this.library = library;
1302
+ this.managedDeclaration = managedDeclaration;
1303
+ this.target = target;
1304
+ this.targetConvertor = targetConvertor;
1305
+ }
1306
+ isPointerType() {
1307
+ return this.targetConvertor.isPointerType();
1308
+ }
1309
+ nativeType() {
1310
+ return this.targetConvertor.nativeType();
1311
+ }
1312
+ convertorArg(param, writer) {
1313
+ throw new Error("Method not implemented.");
1314
+ }
1315
+ convertorSerialize(param, value, writer) {
1316
+ if (writer.language === Language.CPP) {
1317
+ return this.targetConvertor.convertorSerialize(param, value, writer);
1318
+ }
1319
+ if (idl.isReferenceType(this.target)) {
1320
+ writer.addFeature(this.target);
1321
+ }
1322
+ const transformerInfo = getTransformer(this.library, this.managedDeclaration, this.target);
1323
+ const transformCallExpression = transformerInfo.receiver
1324
+ ? writer.makeMethodCall(transformerInfo.receiver, transformerInfo.method, [writer.makeString(value)])
1325
+ : writer.makeFunctionCall(transformerInfo.method, [writer.makeString(value)]);
1326
+ const statements = [
1327
+ writer.makeAssign(`${value}Transformed`, this.target, transformCallExpression, true),
1328
+ this.targetConvertor.convertorSerialize(param, `${value}Transformed`, writer)
1329
+ ];
1330
+ return writer.makeBlock(statements, false);
1331
+ }
1332
+ convertorDeserialize(bufferName, deserializerName, assigneer, writer) {
1333
+ if (writer.language === Language.CPP) {
1334
+ return this.targetConvertor.convertorDeserialize(bufferName, deserializerName, assigneer, writer);
1335
+ }
1336
+ if (idl.isReferenceType(this.target)) {
1337
+ writer.addFeature(this.target);
1338
+ }
1339
+ const targetDeserialize = this.targetConvertor.convertorDeserialize(`${bufferName}D`, deserializerName, (expr) => writer.makeAssign(`${bufferName}Deserialized`, this.target, expr, true), writer);
1340
+ const transformerInfo = getTransformer(this.library, this.target, this.managedDeclaration);
1341
+ const transformCallExpression = transformerInfo.receiver
1342
+ ? writer.makeMethodCall(transformerInfo.receiver, transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)])
1343
+ : writer.makeFunctionCall(transformerInfo.method, [writer.makeString(`${bufferName}Deserialized`)]);
1344
+ return writer.makeBlock([
1345
+ targetDeserialize,
1346
+ assigneer(transformCallExpression)
1347
+ ], false);
1348
+ }
1349
+ }
1298
1350
  export function createOutArgConvertor(library, type, otherParams) {
1299
1351
  if (type && idl.isContainerType(type) && idl.IDLContainerUtils.isPromise(type)) {
1300
1352
  const param = (entropy) => `outputArgumentForReturningPromise${entropy || ''}`;
@@ -244,7 +244,15 @@ export declare abstract class LanguageWriter {
244
244
  language: Language);
245
245
  indentDepth(): number;
246
246
  maybeSemicolon(): string;
247
- features: [string, string][];
247
+ features: ({
248
+ type: "raw";
249
+ feature: string;
250
+ module: string;
251
+ } | {
252
+ type: "idl";
253
+ node: idl.IDLEntry | idl.IDLReferenceType;
254
+ })[];
255
+ addFeature(node: idl.IDLEntry | idl.IDLReferenceType): void;
248
256
  addFeature(feature: string, module: string): void;
249
257
  abstract writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isExport?: boolean): void;
250
258
  abstract writeEnum(name: string, members: {
@@ -278,8 +278,11 @@ export class LambdaExpression {
278
278
  if (this.body) {
279
279
  writer.writeStatement(new BlockStatement(this.body, isScoped, false));
280
280
  }
281
- writer.features.forEach(([feature, module]) => {
282
- this.originalWriter.addFeature(feature, module);
281
+ writer.features.forEach((feature) => {
282
+ if (feature.type === "raw")
283
+ this.originalWriter.addFeature(feature.feature, feature.module);
284
+ else
285
+ this.originalWriter.addFeature(feature.node);
283
286
  });
284
287
  return writer.getOutput()
285
288
  .map(line => (line.endsWith('{') || line.endsWith('}') || line.endsWith(';')) ? line : `${line};`)
@@ -421,8 +424,11 @@ export class LanguageWriter {
421
424
  return this.printer.indentDepth();
422
425
  }
423
426
  maybeSemicolon() { return ";"; }
424
- addFeature(feature, module) {
425
- this.features.push([feature, module]);
427
+ addFeature(featureOrNode, module) {
428
+ if (typeof featureOrNode === "string")
429
+ this.features.push({ type: "raw", feature: featureOrNode, module: module });
430
+ else
431
+ this.features.push({ type: "idl", node: featureOrNode });
426
432
  }
427
433
  // version of makeCast which uses TypeCheck.typeCast<T>(value) call for ETS language writer
428
434
  // Use it only if TypeChecker class is added as import to the generated file
@@ -149,7 +149,7 @@ export class CJTypeNameConvertor {
149
149
  throw new Error(`Unsupported IDL primitive ${idl.DebugUtils.debugPrintType(type)}`);
150
150
  }
151
151
  callbackType(decl) {
152
- const params = decl.parameters.map(it => `${CJKeywords.has(it.name) ? it.name.concat("_") : it.name}: ${this.convert(it.type)}`);
152
+ const params = decl.parameters.map(it => `${CJKeywords.has(it.name) ? it.name.concat("_") : it.name}: ${it.isOptional ? "?" : ""}${this.convert(it.type)}`);
153
153
  return `((${params.join(", ")}) -> ${this.convert(decl.returnType)})`;
154
154
  }
155
155
  productType(decl, isTuple, includeFieldNames) {
@@ -158,6 +158,8 @@ export declare class CJLanguageWriter extends LanguageWriter {
158
158
  popNamespace(options: {
159
159
  ident: boolean;
160
160
  }): void;
161
+ instanceOf(value: string, type: idl.IDLType): LanguageExpression;
162
+ discriminate(value: string, index: number, type: idl.IDLType, runtimeTypes: RuntimeType[]): string;
161
163
  castToInt(value: string, bitness: 8 | 32): string;
162
164
  castToBoolean(value: string): string;
163
165
  }
@@ -324,21 +324,6 @@ export class CJLanguageWriter extends LanguageWriter {
324
324
  this.writeDeclaration(name, signature, modifiers);
325
325
  }
326
326
  writeConstructorImplementation(className, signature, op, delegationCall, modifiers) {
327
- var _a;
328
- let i = 1;
329
- while (signature.isArgOptional(signature.args.length - i)) {
330
- let smallerSignature = signature.args.slice(0, -i);
331
- this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}init(${smallerSignature.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(it)}`).join(", ")}) {`);
332
- this.pushIndent();
333
- let lessArgs = (_a = signature.args) === null || _a === void 0 ? void 0 : _a.slice(0, -i).map((_, i) => this.escapeKeyword(signature.argName(i))).join(', ');
334
- for (let idx = 0; idx < i; idx++) {
335
- lessArgs = lessArgs.concat(`${i == signature.args.length && idx == 0 ? '' : ', '}Option.None`);
336
- }
337
- this.print(`this(${lessArgs})`);
338
- this.popIndent();
339
- this.printer.print(`}`);
340
- i += 1;
341
- }
342
327
  this.printer.print(`${modifiers ? modifiers.map((it) => MethodModifier[it].toLowerCase()).join(' ') + ' ' : ''}init(${signature.args.map((it, index) => `${this.escapeKeyword(signature.argName(index))}: ${this.getNodeName(idl.maybeOptional(it, signature.isArgOptional(index)))}`).join(", ")}) {`);
343
328
  this.pushIndent();
344
329
  if (delegationCall) {
@@ -574,6 +559,17 @@ export class CJLanguageWriter extends LanguageWriter {
574
559
  }
575
560
  pushNamespace(namespace, options) { }
576
561
  popNamespace(options) { }
562
+ instanceOf(value, type) {
563
+ return this.makeString(`${value} is ${this.getNodeName(type)}`);
564
+ }
565
+ discriminate(value, index, type, runtimeTypes) {
566
+ if (runtimeTypes.includes(RuntimeType.UNDEFINED)) {
567
+ return `${value}.isNone()`;
568
+ }
569
+ else {
570
+ return `${value}.getSelector() == ${index}`;
571
+ }
572
+ }
577
573
  castToInt(value, bitness) {
578
574
  return `Int${bitness}(${this.escapeKeyword(value)})`;
579
575
  }
@@ -176,9 +176,6 @@ export class ETSLanguageWriter extends TSLanguageWriter {
176
176
  this.arrayConvertor = arrayConvertor;
177
177
  }
178
178
  pushNamespace(namespace, options) {
179
- if (options.isDefault) {
180
- this.print(`export default ${namespace}`);
181
- }
182
179
  super.pushNamespace(namespace, options);
183
180
  }
184
181
  fork(options) {
@@ -127,6 +127,9 @@ export class TSLanguageWriter extends LanguageWriter {
127
127
  pushNamespace(namespace, options) {
128
128
  this.namespaceStack.push(namespace);
129
129
  const declaredPrefix = options.isDeclared ? "declare " : "";
130
+ if (options.isDefault) {
131
+ this.print(`export default ${namespace}`);
132
+ }
130
133
  this.print(`export ${declaredPrefix}namespace ${namespace} {`);
131
134
  if (options.ident)
132
135
  this.pushIndent();