@idlizer/core 2.1.10-arktscgen-3a → 2.1.10-arktscgen-5

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 (65) hide show
  1. package/build/lib/src/Language.d.ts +0 -1
  2. package/build/lib/src/Language.js +0 -2
  3. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +15 -2
  4. package/build/lib/src/LanguageWriters/ArgConvertors.js +75 -19
  5. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +14 -2
  6. package/build/lib/src/LanguageWriters/LanguageWriter.js +12 -4
  7. package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +0 -1
  8. package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +2 -4
  9. package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +7 -7
  10. package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +37 -23
  11. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +9 -5
  12. package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -4
  13. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +73 -30
  14. package/build/lib/src/LanguageWriters/index.d.ts +2 -2
  15. package/build/lib/src/LanguageWriters/index.js +8 -13
  16. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +4 -0
  17. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +24 -16
  18. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +2 -0
  19. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +7 -1
  20. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +1 -2
  21. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +0 -6
  22. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +2 -0
  23. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +11 -0
  24. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +8 -0
  25. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +75 -27
  26. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +2 -0
  27. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +38 -12
  28. package/build/lib/src/LibraryInterface.d.ts +0 -1
  29. package/build/lib/src/config.d.ts +760 -0
  30. package/build/lib/src/config.js +7 -0
  31. package/build/lib/src/formatter.js +5 -2
  32. package/build/lib/src/from-idl/DtsPrinter.js +3 -3
  33. package/build/lib/src/from-idl/common.js +2 -2
  34. package/build/lib/src/from-idl/deserialize.d.ts +3 -7
  35. package/build/lib/src/from-idl/deserialize.js +65 -39
  36. package/build/lib/src/from-idl/parser.d.ts +1 -1
  37. package/build/lib/src/from-idl/parser.js +29 -20
  38. package/build/lib/src/idl.d.ts +12 -1
  39. package/build/lib/src/idl.js +73 -11
  40. package/build/lib/src/index.d.ts +3 -5
  41. package/build/lib/src/index.js +3 -5
  42. package/build/lib/src/inheritance.d.ts +0 -2
  43. package/build/lib/src/inheritance.js +0 -17
  44. package/build/lib/src/languageSpecificKeywords.js +1 -1
  45. package/build/lib/src/peer-generation/ConflictingDeclarations.d.ts +6 -0
  46. package/build/lib/src/peer-generation/ConflictingDeclarations.js +43 -0
  47. package/build/lib/src/peer-generation/LayoutManager.d.ts +2 -0
  48. package/build/lib/src/peer-generation/LayoutManager.js +15 -0
  49. package/build/lib/src/peer-generation/Materialized.d.ts +2 -0
  50. package/build/lib/src/peer-generation/Materialized.js +14 -1
  51. package/build/lib/src/peer-generation/PeerLibrary.d.ts +0 -3
  52. package/build/lib/src/peer-generation/PeerLibrary.js +63 -38
  53. package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +6 -0
  54. package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +15 -3
  55. package/build/lib/src/peer-generation/isMaterialized.js +1 -1
  56. package/build/lib/src/peer-generation/modules.d.ts +2 -0
  57. package/build/lib/src/peer-generation/modules.js +14 -1
  58. package/build/lib/src/transformers/GenericTransformer.js +70 -5
  59. package/build/lib/src/transformers/NullTransformer.d.ts +0 -1
  60. package/build/lib/src/transformers/NullTransformer.js +1 -2
  61. package/build/lib/src/transformers/OnSerializeTransformer.d.ts +3 -0
  62. package/build/lib/src/transformers/OnSerializeTransformer.js +19 -0
  63. package/build/lib/src/util.d.ts +10 -39
  64. package/build/lib/src/util.js +56 -371
  65. package/package.json +45 -49
@@ -15,10 +15,10 @@
15
15
  import * as idl from '../../idl';
16
16
  import { Language } from '../../Language';
17
17
  import { IndentedPrinter } from "../../IndentedPrinter";
18
- import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, ReturnStatement } from "../LanguageWriter";
18
+ import { AssignStatement, BlockStatement, DelegationType, ExpressionStatement, FieldModifier, LambdaExpression, LanguageWriter, Method, MethodModifier, MethodSignature, ReturnStatement, } from "../LanguageWriter";
19
19
  import { RuntimeType } from "../common";
20
20
  import { isDefined } from "../../util";
21
- import { removePoints } from '../convertors/CJConvertors';
21
+ import { removePoints } from '../../util';
22
22
  export class KotlinLambdaReturnStatement {
23
23
  constructor(expression) {
24
24
  this.expression = expression;
@@ -87,7 +87,7 @@ export class KotlinEnumWithGetter {
87
87
  const enumType = idl.createReferenceType(this.enumEntity);
88
88
  writer.makeStaticBlock(() => {
89
89
  members.forEach(it => {
90
- writer.writeFieldDeclaration(it.name, idl.IDLAnyType, [FieldModifier.PUBLIC, FieldModifier.STATIC, FieldModifier.FINAL], false, writer.makeString(`${mangledName}(${it.stringId ? `\"${it.stringId}\"` : it.numberId})`));
90
+ writer.writeFieldDeclaration(it.name, enumType, [FieldModifier.PUBLIC, FieldModifier.STATIC, FieldModifier.FINAL], false, writer.makeString(`${mangledName}(${it.stringId ? `\"${it.stringId}\"` : it.numberId})`));
91
91
  });
92
92
  });
93
93
  const value = 'value';
@@ -230,6 +230,10 @@ export class KotlinLanguageWriter extends LanguageWriter {
230
230
  }
231
231
  return this.typeConvertor.convert(type);
232
232
  }
233
+ get interopModule() {
234
+ return "koalaui.interop";
235
+ }
236
+ maybeSemicolon() { return ""; }
233
237
  writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
234
238
  let extendsClause = superClass ? `${superClass}` : undefined;
235
239
  let implementsClause = interfaces ? `${interfaces.join(' , ')}` : undefined;
@@ -293,32 +297,75 @@ export class KotlinLanguageWriter extends LanguageWriter {
293
297
  let name = method.name;
294
298
  let signature = method.signature;
295
299
  this.writeMethodImplementation(new Method(name, signature, [MethodModifier.STATIC]), writer => {
300
+ const pins = signature.args.flatMap((type, index) => this.pinArrayArgument(signature.argName(index), type));
301
+ const unpins = signature.args.flatMap((type, index) => this.unpinArrayArgument(signature.argName(index), type));
302
+ pins.filter(it => !!it).forEach(it => this.writeStatement(it));
296
303
  const args = signature.args.map((type, index) => this.convertInteropArgument(signature.argName(index), type));
304
+ this.printForeignApiOptIn();
297
305
  const interopCallExpression = this.makeFunctionCall(`kotlin${name}`, args);
298
306
  if (signature.returnType === idl.IDLVoidType) {
299
307
  this.writeExpressionStatement(interopCallExpression);
308
+ unpins.filter(it => !!it).forEach(it => this.writeStatement(it));
300
309
  return;
301
310
  }
302
311
  const retval = "retval";
303
312
  this.writeStatement(this.makeAssign(retval, undefined, interopCallExpression));
313
+ unpins.filter(it => !!it).forEach(it => this.writeStatement(it));
314
+ this.printForeignApiOptIn();
304
315
  this.writeStatement(this.makeReturn(this.convertInteropReturnValue(retval, signature.returnType)));
305
316
  });
306
317
  }
318
+ printForeignApiOptIn() {
319
+ this.writeStatement(this.foreignApiOptIn);
320
+ }
321
+ get foreignApiOptIn() {
322
+ return new ExpressionStatement(this.makeString("@OptIn(ExperimentalForeignApi::class)"));
323
+ }
324
+ isPrimitiveArray(type) {
325
+ if (!idl.IDLContainerUtils.isSequence(type)) {
326
+ return false;
327
+ }
328
+ const elementType = type.elementType[0];
329
+ const allowedTypes = [idl.IDLU8Type, idl.IDLI32Type, idl.IDLF32Type];
330
+ return allowedTypes.includes(elementType);
331
+ }
332
+ pinArrayArgument(varName, type) {
333
+ if (this.isPrimitiveArray(type)) {
334
+ const pinCall = this.makeMethodCall(varName, "pin", []);
335
+ const assign = this.makeAssign(`${varName}Pinned`, undefined, pinCall, true, true);
336
+ return [this.foreignApiOptIn, assign];
337
+ }
338
+ return [];
339
+ }
340
+ unpinArrayArgument(varName, type) {
341
+ if (this.isPrimitiveArray(type)) {
342
+ const call = new ExpressionStatement(this.makeMethodCall(`${varName}Pinned`, "unpin", []));
343
+ return [this.foreignApiOptIn, call];
344
+ }
345
+ return [];
346
+ }
307
347
  convertInteropArgument(varName, type) {
308
348
  const realInteropType = this.getNodeName(type);
309
349
  let expr;
310
350
  switch (realInteropType) {
351
+ case "UByteArray":
352
+ case "IntArray":
353
+ case "FloatArray":
354
+ expr = `${varName}Pinned.addressOf(0)`;
355
+ break;
311
356
  case "KPointer":
357
+ case "KNativePointer":
312
358
  case "KSerializerBuffer":
313
359
  expr = `${varName}.toCPointer<CPointed>()!!`;
314
360
  break;
361
+ case "BigInteger":
315
362
  case "KInt":
316
363
  case "KLong":
317
364
  case "KFloat":
318
365
  case "KDouble":
366
+ case "String":
319
367
  case "KStringPtr":
320
368
  case "KBoolean":
321
- case "Float64":
322
369
  case "Float":
323
370
  case "Double":
324
371
  case "UInt":
@@ -333,12 +380,13 @@ export class KotlinLanguageWriter extends LanguageWriter {
333
380
  const realInteropType = this.getNodeName(type);
334
381
  let expr;
335
382
  switch (realInteropType) {
383
+ case "KNativePointer":
336
384
  case "KPointer":
337
385
  expr = `${varName}.toLong()`;
338
386
  break;
339
387
  case "KInt":
340
388
  case "KLong":
341
- case "Float64":
389
+ case "BigInteger":
342
390
  case "Float":
343
391
  case "Double":
344
392
  case "Long":
@@ -389,30 +437,21 @@ export class KotlinLanguageWriter extends LanguageWriter {
389
437
  writeProperty(propName, propType, modifiers, getter, setter, initExpr) {
390
438
  let containerName = propName.concat("_container");
391
439
  let truePropName = this.escapeKeyword(propName);
392
- if (getter) {
393
- if (!getter.op) {
394
- this.print(`private var ${containerName}: ${this.getNodeName(propType)}`);
395
- }
396
- }
397
- let isMutable = !modifiers.includes(FieldModifier.READONLY);
440
+ const isReadonly = modifiers.includes(FieldModifier.READONLY);
441
+ const isGetter = modifiers.includes(FieldModifier.GET);
442
+ const isSetter = modifiers.includes(FieldModifier.SET);
443
+ const isImmutable = isReadonly || (isGetter && !isSetter);
398
444
  let isOverride = modifiers.includes(FieldModifier.OVERRIDE);
399
445
  let initializer = initExpr ? ` = ${initExpr.asString()}` : "";
400
- this.print(`${isOverride ? 'override ' : ''}public ${isMutable ? "var " : "val "}${truePropName}: ${this.getNodeName(propType)}${initializer}`);
446
+ this.print(`${isOverride ? 'override ' : ''}public ${isImmutable ? "val " : "var "}${truePropName}: ${this.getNodeName(propType)}${initializer}`);
401
447
  if (getter) {
402
448
  this.pushIndent();
403
449
  this.writeGetterImplementation(getter.method, getter.op);
404
- if (isMutable) {
405
- if (setter) {
406
- this.writeSetterImplementation(setter.method, setter ? setter.op : (writer) => { this.print(`${containerName} = ${truePropName}`); });
407
- }
408
- else {
409
- this.print(`set(${truePropName}) {`);
410
- this.pushIndent();
411
- this.print(`${containerName} = ${truePropName}`);
412
- this.popIndent();
413
- this.print(`}`);
414
- }
415
- }
450
+ this.popIndent();
451
+ }
452
+ if (setter) {
453
+ this.pushIndent();
454
+ this.writeSetterImplementation(setter.method, setter ? setter.op : (writer) => { writer.print(`${containerName} = ${truePropName}`); });
416
455
  this.popIndent();
417
456
  }
418
457
  }
@@ -434,7 +473,16 @@ export class KotlinLanguageWriter extends LanguageWriter {
434
473
  throw new Error("Not implemented");
435
474
  }
436
475
  writeConstant(constName, constType, constVal) {
437
- throw new Error("Not implemented");
476
+ this.print(`val ${constName} = ${constVal}`);
477
+ }
478
+ writeImports(moduleName, importedFeatures, aliases) {
479
+ if (importedFeatures.length !== aliases.length) {
480
+ throw new Error(`Inconsistent imports from ${moduleName}`);
481
+ }
482
+ for (let i = 0; i < importedFeatures.length; i++) {
483
+ const alias = aliases[i] ? ` as ${aliases[i]}` : ``;
484
+ this.writeExpressionStatement(this.makeString(`import ${moduleName}.${importedFeatures[i]}` + alias));
485
+ }
438
486
  }
439
487
  makeNull() {
440
488
  return this.makeString('null');
@@ -529,14 +577,14 @@ export class KotlinLanguageWriter extends LanguageWriter {
529
577
  }
530
578
  else {
531
579
  const op = equals ? "==" : "!=";
532
- return this.makeNaryOp(op, [this.makeRuntimeType(type), this.makeString(`${typeVarName}.toInt()`)]);
580
+ return this.makeNaryOp(op, [this.makeRuntimeType(type), this.makeString(`${typeVarName}`)]);
533
581
  }
534
582
  }
535
583
  getTagType() {
536
584
  return idl.createReferenceType("Tag");
537
585
  }
538
586
  getRuntimeType() {
539
- return idl.IDLNumberType;
587
+ return idl.IDLI8Type;
540
588
  }
541
589
  makeTupleAssign(receiver, fields) {
542
590
  throw new Error("Not implemented");
@@ -37,6 +37,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
37
37
  resolver?: ReferenceResolver;
38
38
  }): LanguageWriter;
39
39
  getNodeName(type: idl.IDLNode): string;
40
+ get interopModule(): string;
40
41
  writeClass(name: string, op: (writer: this) => void, superClass?: string, interfaces?: string[], generics?: string[], isDeclared?: boolean, isAbstract?: boolean): void;
41
42
  writeInterface(name: string, op: (writer: this) => void, superInterfaces?: string[], generics?: string[], isDeclared?: boolean): void;
42
43
  writeFunctionDeclaration(name: string, signature: MethodSignature, generics?: string[]): void;
@@ -65,6 +66,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
65
66
  }, initExpr?: LanguageExpression): void;
66
67
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
67
68
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
69
+ writeImports(moduleName: string, importedFeatures: string[], aliases: string[]): void;
68
70
  private writeDeclaration;
69
71
  makeNull(type?: idl.IDLOptionalType): LanguageExpression;
70
72
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
@@ -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();
@@ -145,6 +148,9 @@ export class TSLanguageWriter extends LanguageWriter {
145
148
  }
146
149
  return this.typeConvertor.convert(type);
147
150
  }
151
+ get interopModule() {
152
+ return "@koalaui/interop";
153
+ }
148
154
  writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
149
155
  let extendsClause = superClass ? ` extends ${superClass}` : '';
150
156
  let implementsClause = interfaces ? ` implements ${interfaces.join(",")}` : '';
@@ -204,11 +210,22 @@ export class TSLanguageWriter extends LanguageWriter {
204
210
  this.printer.print("}");
205
211
  }
206
212
  writeFieldDeclaration(name, type, modifiers, optional, initExpr) {
207
- const init = initExpr != undefined ? ` = ${initExpr.asString()}` : ``;
208
213
  let prefix = this.makeFieldModifiersList(modifiers);
209
214
  if (prefix)
210
215
  prefix += " ";
211
- this.printer.print(`${prefix}${name}${optional ? "?" : ""}: ${this.getNodeName(type)}${init}`);
216
+ const typeName = this.getNodeName(type);
217
+ const isGetter = modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(FieldModifier.GET);
218
+ const isSetter = modifiers === null || modifiers === void 0 ? void 0 : modifiers.includes(FieldModifier.SET);
219
+ if (isGetter) {
220
+ this.printer.print(`${prefix}get ${name}(): ${typeName}`);
221
+ }
222
+ if (isSetter) {
223
+ this.printer.print(`${prefix}set ${name}(value: ${typeName})`);
224
+ }
225
+ if (isGetter || isSetter)
226
+ return;
227
+ const init = initExpr != undefined ? ` = ${initExpr.asString()}` : ``;
228
+ this.printer.print(`${prefix}${name}${optional ? "?" : ""}: ${typeName}${init}`);
212
229
  }
213
230
  writeNativeMethodDeclaration(method) {
214
231
  let name = method.name;
@@ -245,7 +262,6 @@ export class TSLanguageWriter extends LanguageWriter {
245
262
  }
246
263
  writeProperty(propName, propType, modifiers, getter, setter, initExpr) {
247
264
  let isStatic = modifiers.includes(FieldModifier.STATIC);
248
- let isMutable = !modifiers.includes(FieldModifier.READONLY);
249
265
  let containerName = propName.concat("_container");
250
266
  if (getter) {
251
267
  if (!getter.op) {
@@ -255,17 +271,17 @@ export class TSLanguageWriter extends LanguageWriter {
255
271
  (writer) => {
256
272
  writer.print(`return ${containerName}`);
257
273
  });
258
- if (isMutable) {
259
- const setSignature = new NamedMethodSignature(idl.IDLVoidType, [propType], [propName]);
260
- this.writeSetterImplementation(new Method(propName, setSignature, isStatic ? [MethodModifier.STATIC] : []), setter ? setter.op :
261
- (writer) => {
262
- writer.print(`${containerName} = ${propName}`);
263
- });
264
- }
265
274
  }
266
- else {
267
- this.writeFieldDeclaration(propName, propType, modifiers, idl.isOptionalType(propType), initExpr);
275
+ if (setter) {
276
+ const setSignature = new NamedMethodSignature(idl.IDLVoidType, [propType], [propName]);
277
+ this.writeSetterImplementation(new Method(propName, setSignature, isStatic ? [MethodModifier.STATIC] : []), setter ? setter.op :
278
+ (writer) => {
279
+ writer.print(`${containerName} = ${propName}`);
280
+ });
268
281
  }
282
+ if (getter || setter)
283
+ return;
284
+ this.writeFieldDeclaration(propName, propType, modifiers, idl.isOptionalType(propType), initExpr);
269
285
  }
270
286
  writeTypeDeclaration(decl) {
271
287
  var _a;
@@ -276,6 +292,16 @@ export class TSLanguageWriter extends LanguageWriter {
276
292
  writeConstant(constName, constType, constVal) {
277
293
  this.print(`export const ${constName}: ${this.getNodeName(constType)}${constVal ? ' = ' + constVal : ''}`);
278
294
  }
295
+ writeImports(moduleName, importedFeatures, aliases) {
296
+ if (importedFeatures.length !== aliases.length) {
297
+ throw new Error(`Inconsistent imports from ${moduleName}`);
298
+ }
299
+ const importNodes = [];
300
+ for (let i = 0; i < importedFeatures.length; i++) {
301
+ importNodes.push(importedFeatures[i] + (aliases[i] ? ` as ${aliases[i]}` : ``));
302
+ }
303
+ this.writeExpressionStatement(this.makeString(`import { ${importNodes.join(', ')} } from "${moduleName}"`));
304
+ }
279
305
  writeDeclaration(name, signature, needReturn, needBracket, modifiers, generics) {
280
306
  let prefix = !modifiers ? undefined : this.supportedModifiers
281
307
  .filter(it => modifiers.includes(it))
@@ -9,7 +9,6 @@ export interface LibraryInterface extends ReferenceResolver {
9
9
  get files(): idl.IDLFile[];
10
10
  typeConvertor(param: string, type: idl.IDLType, isOptionalParam?: boolean): ArgConvertor;
11
11
  declarationConvertor(param: string, type: idl.IDLReferenceType, declaration: idl.IDLEntry | undefined): ArgConvertor;
12
- getInteropName(node: idl.IDLNode): string;
13
12
  createTypeNameConvertor(language: Language): IdlNameConvertor;
14
13
  createContinuationCallbackReference(continuationType: idl.IDLType): idl.IDLReferenceType;
15
14
  getCurrentContext(): string | undefined;