@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
@@ -17,22 +17,21 @@ import * as idl from '../idl';
17
17
  import { resolveNamedNode } from '../resolveNamedNode';
18
18
  import { Language } from '../Language';
19
19
  import { createLanguageWriter } from '../LanguageWriters';
20
- import { BufferConvertor, CallbackConvertor, DateConvertor, MapConvertor, PointerConvertor, TupleConvertor, TypeAliasConvertor, AggregateConvertor, StringConvertor, ClassConvertor, ArrayConvertor, FunctionConvertor, OptionConvertor, NumberConvertor, NumericConvertor, CustomTypeConvertor, UnionConvertor, MaterializedClassConvertor, BooleanConvertor, EnumConvertor, UndefinedConvertor, VoidConvertor, ImportTypeConvertor, InterfaceConvertor, BigIntToU64Convertor, ObjectConvertor, } from "../LanguageWriters/ArgConvertors";
21
- import { CppNameConvertor } from '../LanguageWriters/convertors/CppConvertors';
20
+ import { BufferConvertor, CallbackConvertor, DateConvertor, MapConvertor, PointerConvertor, TupleConvertor, TypeAliasConvertor, AggregateConvertor, StringConvertor, ClassConvertor, ArrayConvertor, FunctionConvertor, OptionConvertor, NumberConvertor, NumericConvertor, CustomTypeConvertor, UnionConvertor, MaterializedClassConvertor, BooleanConvertor, EnumConvertor, UndefinedConvertor, VoidConvertor, ImportTypeConvertor, InterfaceConvertor, BigIntToU64Convertor, ObjectConvertor, TransformOnSerializeConvertor, } from "../LanguageWriters/ArgConvertors";
22
21
  import { CJTypeNameConvertor } from '../LanguageWriters/convertors/CJConvertors';
23
22
  import { CppConvertor } from '../LanguageWriters/convertors/CppConvertors';
24
23
  import { ETSTypeNameConvertor } from '../LanguageWriters/convertors/ETSConvertors';
25
- import { JavaTypeNameConvertor } from '../LanguageWriters/convertors/JavaConvertors';
26
24
  import { TSTypeNameConvertor } from '../LanguageWriters/convertors/TSConvertors';
27
25
  import { isBuilderClass } from './BuilderClass';
28
26
  import { generateSyntheticFunctionName, isImportAttr } from './idl/common';
29
27
  import { LayoutManager } from './LayoutManager';
30
28
  import { lib, query } from '../library';
31
29
  import { isMaterialized } from './isMaterialized';
32
- import { isInIdlizeInternal } from '../idlize';
30
+ import { isInIdlizeInternal } from '../idl';
33
31
  import { isInCurrentModule } from './modules';
34
32
  import { generatorConfiguration } from '../config';
35
33
  import { KotlinTypeNameConvertor } from '../LanguageWriters/convertors/KotlinConvertors';
34
+ import { toIdlType } from '../from-idl/deserialize';
36
35
  export const lenses = {
37
36
  globals: lib.lens(lib.select.files())
38
37
  .pipe(lib.select.nodes())
@@ -106,8 +105,6 @@ export class PeerLibrary {
106
105
  this.materializedClasses = new Map();
107
106
  this.name = "";
108
107
  this.customComponentMethods = [];
109
- this.targetNameConvertorInstance = this.createTypeNameConvertor(this.language);
110
- this.interopNameConvertorInstance = new CppNameConvertor(this);
111
108
  this._useFallback = true;
112
109
  }
113
110
  createLanguageWriter(language) {
@@ -117,7 +114,6 @@ export class PeerLibrary {
117
114
  switch (language) {
118
115
  case Language.TS: return new TSTypeNameConvertor(this);
119
116
  case Language.ARKTS: return new ETSTypeNameConvertor(this);
120
- case Language.JAVA: return new JavaTypeNameConvertor(this);
121
117
  case Language.CJ: return new CJTypeNameConvertor(this);
122
118
  case Language.CPP: return new CppConvertor(this);
123
119
  case Language.KOTLIN: return new KotlinTypeNameConvertor(this);
@@ -157,7 +153,7 @@ export class PeerLibrary {
157
153
  return this.files.find(it => it.fileName === filename);
158
154
  }
159
155
  mapType(type) {
160
- return this.targetNameConvertorInstance.convert(type);
156
+ return this.createTypeNameConvertor(this.language).convert(type);
161
157
  }
162
158
  enableCache() {
163
159
  this.referenceCache = new Map();
@@ -287,17 +283,17 @@ export class PeerLibrary {
287
283
  }
288
284
  if (idl.isPrimitiveType(type)) {
289
285
  switch (type) {
290
- case idl.IDLI8Type: return new NumericConvertor(param, type);
291
- case idl.IDLU8Type: return new NumericConvertor(param, type);
292
- case idl.IDLI16Type: return new NumericConvertor(param, type);
293
- case idl.IDLU16Type: return new NumericConvertor(param, type);
294
- case idl.IDLI32Type: return new NumericConvertor(param, type);
295
- case idl.IDLU32Type: return new NumericConvertor(param, type);
296
- case idl.IDLI64Type: return new NumericConvertor(param, type);
297
- case idl.IDLU64Type: return new NumericConvertor(param, type);
298
- case idl.IDLF16Type: return new NumericConvertor(param, type);
299
- case idl.IDLF32Type: return new NumericConvertor(param, type);
300
- case idl.IDLF64Type: return new NumericConvertor(param, type);
286
+ case idl.IDLI8Type: return new NumericConvertor(this, param, type);
287
+ case idl.IDLU8Type: return new NumericConvertor(this, param, type);
288
+ case idl.IDLI16Type: return new NumericConvertor(this, param, type);
289
+ case idl.IDLU16Type: return new NumericConvertor(this, param, type);
290
+ case idl.IDLI32Type: return new NumericConvertor(this, param, type);
291
+ case idl.IDLU32Type: return new NumericConvertor(this, param, type);
292
+ case idl.IDLI64Type: return new NumericConvertor(this, param, type);
293
+ case idl.IDLU64Type: return new NumericConvertor(this, param, type);
294
+ case idl.IDLF16Type: return new NumericConvertor(this, param, type);
295
+ case idl.IDLF32Type: return new NumericConvertor(this, param, type);
296
+ case idl.IDLF64Type: return new NumericConvertor(this, param, type);
301
297
  case idl.IDLBigintType: return new BigIntToU64Convertor(param);
302
298
  case idl.IDLSerializerBuffer: new PointerConvertor(param);
303
299
  case idl.IDLPointerType: return new PointerConvertor(param);
@@ -320,10 +316,10 @@ export class PeerLibrary {
320
316
  // TODO: this types are not references! NativeModulePrinter must be fixed
321
317
  switch (type.name.replaceAll('%TEXT%:', '')) { // this is really bad stub, to fix legacy references
322
318
  case 'KBoolean': return new BooleanConvertor(param);
323
- case 'KInt': return new NumericConvertor(param, idl.IDLI32Type);
324
- case 'KFloat': return new NumericConvertor(param, idl.IDLF32Type);
325
- case 'KLong': return new NumericConvertor(param, idl.IDLI64Type);
326
- case 'KDouble': return new NumericConvertor(param, idl.IDLF64Type);
319
+ case 'KInt': return new NumericConvertor(this, param, idl.IDLI32Type);
320
+ case 'KFloat': return new NumericConvertor(this, param, idl.IDLF32Type);
321
+ case 'KLong': return new NumericConvertor(this, param, idl.IDLI64Type);
322
+ case 'KDouble': return new NumericConvertor(this, param, idl.IDLF64Type);
327
323
  case 'KStringPtr': return new StringConvertor(param);
328
324
  case 'number': return new NumberConvertor(param);
329
325
  case 'KPointer': return new PointerConvertor(param);
@@ -333,7 +329,7 @@ export class PeerLibrary {
333
329
  }
334
330
  const decl = this.resolveTypeReference(type);
335
331
  if (decl && isImportAttr(decl) || !decl && isImportAttr(type))
336
- return new ImportTypeConvertor(param, this.targetNameConvertorInstance.convert(type));
332
+ return new ImportTypeConvertor(param, this.createTypeNameConvertor(this.language).convert(type));
337
333
  return this.declarationConvertor(param, type, decl);
338
334
  }
339
335
  if (idl.isUnionType(type)) {
@@ -347,7 +343,7 @@ export class PeerLibrary {
347
343
  }
348
344
  if (idl.isTypeParameterType(type)) {
349
345
  // TODO: unlikely correct.
350
- return new CustomTypeConvertor(param, this.targetNameConvertorInstance.convert(type), true, `<${type.name}>`);
346
+ return new CustomTypeConvertor(param, this.createTypeNameConvertor(this.language).convert(type), true, `<${type.name}>`);
351
347
  }
352
348
  throw new Error(`Cannot convert: ${type.kind}`);
353
349
  }
@@ -359,11 +355,11 @@ export class PeerLibrary {
359
355
  if (customConv)
360
356
  return customConv;
361
357
  if (!declaration) {
362
- return new CustomTypeConvertor(param, this.targetNameConvertorInstance.convert(type), false, this.targetNameConvertorInstance.convert(type)); // assume some predefined type
358
+ return new CustomTypeConvertor(param, this.createTypeNameConvertor(this.language).convert(type), false, this.createTypeNameConvertor(this.language).convert(type)); // assume some predefined type
363
359
  }
364
360
  const declarationName = declaration.name;
365
361
  if (isImportAttr(declaration)) {
366
- return new ImportTypeConvertor(param, this.targetNameConvertorInstance.convert(type));
362
+ return new ImportTypeConvertor(param, this.createTypeNameConvertor(this.language).convert(type));
367
363
  }
368
364
  if (idl.isImport(declaration)) {
369
365
  const target = this.resolveImport(declaration);
@@ -374,6 +370,10 @@ export class PeerLibrary {
374
370
  return new CustomTypeConvertor(param, declaration.name, false, declaration.name);
375
371
  }
376
372
  }
373
+ if (idl.hasExtAttribute(declaration, idl.IDLExtendedAttributes.TransformOnSerialize)) {
374
+ const targetRef = idl.createReferenceType(idl.getExtAttribute(declaration, idl.IDLExtendedAttributes.TransformOnSerialize));
375
+ return new TransformOnSerializeConvertor(param, this, declaration, targetRef);
376
+ }
377
377
  if (idl.isEnum(declaration)) {
378
378
  return new EnumConvertor(param, declaration);
379
379
  }
@@ -384,10 +384,8 @@ export class PeerLibrary {
384
384
  return new CallbackConvertor(this, param, declaration, this.interopNativeModule);
385
385
  }
386
386
  if (idl.isTypedef(declaration)) {
387
- if (isCyclicTypeDef(declaration)) {
388
- warn(`Cyclic typedef: ${idl.DebugUtils.debugPrintType(type)}`);
389
- return new CustomTypeConvertor(param, declaration.name, false, declaration.name);
390
- }
387
+ if (forceTypedefAsResource(type, declaration))
388
+ return new ObjectConvertor(param, type);
391
389
  return new TypeAliasConvertor(this, param, declaration);
392
390
  }
393
391
  if (idl.isInterface(declaration)) {
@@ -425,9 +423,6 @@ export class PeerLibrary {
425
423
  }
426
424
  return undefined;
427
425
  }
428
- getInteropName(node) {
429
- return this.interopNameConvertorInstance.convert(node);
430
- }
431
426
  toDeclaration(type) {
432
427
  switch (type) {
433
428
  case idl.IDLAnyType: return ArkCustomObject;
@@ -459,9 +454,12 @@ export class PeerLibrary {
459
454
  if (!decl) {
460
455
  warn(`undeclared type ${idl.DebugUtils.debugPrintType(type)}`);
461
456
  }
462
- if (decl && idl.isTypedef(decl) && isCyclicTypeDef(decl)) {
463
- warn(`Cyclic typedef: ${idl.DebugUtils.debugPrintType(type)}`);
464
- return ArkCustomObject;
457
+ if (decl && idl.isTypedef(decl) && forceTypedefAsResource(type, decl)) {
458
+ return idl.IDLObjectType;
459
+ }
460
+ if (decl && idl.hasExtAttribute(decl, idl.IDLExtendedAttributes.TransformOnSerialize)) {
461
+ const type = toIdlType("", idl.getExtAttribute(decl, idl.IDLExtendedAttributes.TransformOnSerialize));
462
+ return this.toDeclaration(type);
465
463
  }
466
464
  return !decl ? ArkCustomObject // assume some builtin type
467
465
  : idl.isTypedef(decl) ? this.toDeclaration(decl.type)
@@ -490,7 +488,34 @@ export const ArkCustomObject = idl.IDLCustomObjectType;
490
488
  export function cleanPrefix(name, prefix) {
491
489
  return name.replace(prefix, "");
492
490
  }
491
+ function forceTypedefAsResource(type, decl) {
492
+ if (generatorConfiguration().forceResource.includes(idl.getFQName(decl)))
493
+ return true;
494
+ if (isCyclicTypeDef(decl)) {
495
+ warn(`Cyclic typedef: ${idl.DebugUtils.debugPrintType(type)}`);
496
+ return true;
497
+ }
498
+ return false;
499
+ }
493
500
  function isCyclicTypeDef(decl) {
494
- return idl.isReferenceType(decl.type) && idl.isNamedNode(decl.type) && decl.type.name == decl.name;
501
+ return checkCyclicType(idl.getFQName(decl), decl.type);
502
+ }
503
+ function checkCyclicType(fqn, type) {
504
+ if (idl.isReferenceType(type) && idl.isNamedNode(type) && idl.getFQName(type) == fqn)
505
+ return true;
506
+ if (idl.isOptionalType(type) && checkCyclicType(fqn, type.type))
507
+ return true;
508
+ if (idl.isUnionType(type) && checkCyclicTypes(fqn, type.types))
509
+ return true;
510
+ if (idl.isContainerType(type) && checkCyclicTypes(fqn, type.elementType))
511
+ return true;
512
+ return false;
513
+ }
514
+ function checkCyclicTypes(fqn, types) {
515
+ for (const t of types) {
516
+ if (checkCyclicType(fqn, t))
517
+ return true;
518
+ }
519
+ return false;
495
520
  }
496
521
  //# sourceMappingURL=PeerLibrary.js.map
@@ -26,6 +26,11 @@ export declare class CJDeclarationNameConvertor extends DeclarationNameConvertor
26
26
  convertEnum(decl: idl.IDLEnum): string;
27
27
  static readonly I: CJDeclarationNameConvertor;
28
28
  }
29
+ export declare class KotlinDeclarationNameConvertor extends DeclarationNameConvertor {
30
+ convertInterface(decl: idl.IDLInterface): string;
31
+ convertEnum(decl: idl.IDLEnum): string;
32
+ static readonly I: KotlinDeclarationNameConvertor;
33
+ }
29
34
  export declare class ETSFeatureNameConvertor extends DeclarationNameConvertor {
30
35
  convertEnum(decl: idl.IDLEnum): string;
31
36
  static readonly I: ETSFeatureNameConvertor;
@@ -35,6 +40,7 @@ export declare class CJFeatureNameConvertor extends DeclarationNameConvertor {
35
40
  static readonly I: CJFeatureNameConvertor;
36
41
  }
37
42
  export declare class KotlinFeatureNameConvertor extends DeclarationNameConvertor {
43
+ convertInterface(decl: idl.IDLInterface): string;
38
44
  convertEnum(decl: idl.IDLEnum): string;
39
45
  static readonly I: KotlinFeatureNameConvertor;
40
46
  }
@@ -14,6 +14,7 @@
14
14
  */
15
15
  import * as idl from "../../idl";
16
16
  import { Language } from "../../Language";
17
+ import { removePoints } from "../../util";
17
18
  export class DeclarationNameConvertor {
18
19
  convertImport(decl) {
19
20
  console.warn("Imports are not implemented yet");
@@ -70,6 +71,15 @@ export class CJDeclarationNameConvertor extends DeclarationNameConvertor {
70
71
  }
71
72
  }
72
73
  CJDeclarationNameConvertor.I = new CJDeclarationNameConvertor();
74
+ export class KotlinDeclarationNameConvertor extends DeclarationNameConvertor {
75
+ convertInterface(decl) {
76
+ return removePoints(idl.getQualifiedName(decl, "namespace.name"));
77
+ }
78
+ convertEnum(decl) {
79
+ return removePoints(idl.getQualifiedName(decl, "namespace.name"));
80
+ }
81
+ }
82
+ KotlinDeclarationNameConvertor.I = new KotlinDeclarationNameConvertor();
73
83
  export class ETSFeatureNameConvertor extends DeclarationNameConvertor {
74
84
  convertEnum(decl) {
75
85
  const namespace = idl.getNamespacesPathFor(decl).map(it => it.name);
@@ -86,25 +96,27 @@ export class CJFeatureNameConvertor extends DeclarationNameConvertor {
86
96
  }
87
97
  CJFeatureNameConvertor.I = new CJFeatureNameConvertor();
88
98
  export class KotlinFeatureNameConvertor extends DeclarationNameConvertor {
99
+ convertInterface(decl) {
100
+ return removePoints(idl.getQualifiedName(decl, "namespace.name"));
101
+ }
89
102
  convertEnum(decl) {
90
- return decl.name;
103
+ return removePoints(idl.getQualifiedName(decl, "namespace.name"));
91
104
  }
92
105
  }
93
106
  KotlinFeatureNameConvertor.I = new KotlinFeatureNameConvertor();
94
107
  export function createDeclarationNameConvertor(language) {
95
108
  switch (language) {
96
109
  case Language.ARKTS: return ETSDeclarationNameConvertor.I;
97
- case Language.JAVA:
98
110
  case Language.CPP:
99
111
  case Language.TS: return DeclarationNameConvertor.I;
100
112
  case Language.CJ: CJDeclarationNameConvertor.I;
113
+ case Language.KOTLIN: KotlinDeclarationNameConvertor.I;
101
114
  default: throw new Error(`Language ${language.toString()} is not supported`);
102
115
  }
103
116
  }
104
117
  export function createFeatureNameConvertor(language) {
105
118
  switch (language) {
106
119
  case Language.ARKTS: return ETSFeatureNameConvertor.I;
107
- case Language.JAVA:
108
120
  case Language.CPP:
109
121
  case Language.TS: return TSFeatureNameConvertor.I;
110
122
  case Language.CJ: return CJFeatureNameConvertor.I;
@@ -25,7 +25,7 @@ export function isMaterialized(declaration, resolver) {
25
25
  if (generatorConfiguration().forceResource.includes(declaration.name)) {
26
26
  return false;
27
27
  }
28
- if (generatorConfiguration().forceMaterialized.includes(declaration.name)) {
28
+ if (generatorConfiguration().forceMaterialized.some(r => r === idl.getFQName(declaration))) {
29
29
  return true;
30
30
  }
31
31
  // TODO: rework this
@@ -16,4 +16,6 @@ export declare function getModuleFor(packageName: string): ModuleConfiguration;
16
16
  export declare function currentModule(): ModuleConfiguration;
17
17
  export declare function isInCurrentModule(node: idl.IDLNode): boolean;
18
18
  export declare function isInCurrentModule(packageName: string): boolean;
19
+ export declare function isInStdlibModule(node: idl.IDLNode): boolean;
20
+ export declare function isInStdlibModule(packageName: string): boolean;
19
21
  //# sourceMappingURL=modules.d.ts.map
@@ -1,5 +1,12 @@
1
1
  import { generatorConfiguration } from "../config";
2
2
  import * as idl from "../idl";
3
+ const stdlibModule = {
4
+ name: "__stdlib",
5
+ packages: [""],
6
+ useFoldersLayout: false,
7
+ external: true,
8
+ tsLikePackage: "__stdlib"
9
+ };
3
10
  const modulesCache = new Map();
4
11
  /**
5
12
  * Is source submodule of target.
@@ -39,7 +46,7 @@ function getApplicableModuleFor(packageName) {
39
46
  if (applicableModules.length === 0) {
40
47
  if (packageName === '') {
41
48
  console.error("WARNING: use current module for empty package");
42
- return currentModule();
49
+ return stdlibModule;
43
50
  }
44
51
  if (packageName.startsWith(`idlize.`)) {
45
52
  return currentModule();
@@ -66,4 +73,10 @@ export function isInCurrentModule(nodeOrPackage) {
66
73
  : getModuleFor(nodeOrPackage);
67
74
  return generatorConfiguration().moduleName == module.name;
68
75
  }
76
+ export function isInStdlibModule(nodeOrPackage) {
77
+ const module = typeof nodeOrPackage === 'string'
78
+ ? getModuleFor(nodeOrPackage)
79
+ : getModuleFor(nodeOrPackage);
80
+ return stdlibModule.name == module.name;
81
+ }
69
82
  //# sourceMappingURL=modules.js.map
@@ -12,12 +12,9 @@ export function inplaceGenerics(node, resolver, options) {
12
12
  if (idl.isReferenceType(child))
13
13
  candidates.push(child);
14
14
  });
15
- if (idl.isReferenceType(node)) {
16
- candidates.push(node);
17
- }
18
15
  options !== null && options !== void 0 ? options : (options = {});
19
16
  (_a = options.ignore) !== null && _a !== void 0 ? _a : (options.ignore = []);
20
- options.ignore.push(ignoreConfigRule, ignoreBuilderClassRule, createIgnoreMaterializedRule(resolver));
17
+ options.ignore.push(ignoreConfigRule, ignoreBuilderClassRule, createIgnoreMaterializedRule(resolver), createIgnoreResourceRule(resolver));
21
18
  candidates.forEach(it => inplaceReferenceGenerics(it, resolver, options));
22
19
  }
23
20
  export function isInplacedGeneric(entry) {
@@ -52,7 +49,19 @@ function ignoreBuilderClassRule(node) {
52
49
  return idl.isInterface(node) && isBuilderClass(node);
53
50
  }
54
51
  function createIgnoreMaterializedRule(resolver) {
55
- return (node) => idl.isInterface(node) && isMaterialized(node, resolver);
52
+ return (node) => idl.isInterface(node) && isMaterialized(node, resolver) && !idl.hasExtAttribute(node, idl.IDLExtendedAttributes.TransformOnSerialize);
53
+ }
54
+ function createIgnoreResourceRule(resolver) {
55
+ return (node) => {
56
+ if (!idl.isReferenceType(node)) {
57
+ return false;
58
+ }
59
+ const declaration = resolver.resolveTypeReference(node);
60
+ if (!declaration) {
61
+ return false;
62
+ }
63
+ return generatorConfiguration().forceResource.includes(declaration.name);
64
+ };
56
65
  }
57
66
  function monomorphisedEntryName(typedEntry, typeArguments) {
58
67
  return typedEntry.name + "_" + typeArguments.map(generateSyntheticIdlNodeName).join("_");
@@ -86,6 +95,7 @@ function monomorphizeEntry(typedEntry, typeArguments) {
86
95
  name: idl.IDLExtendedAttributes.TypeArguments,
87
96
  value: typeArguments.map(type => idl.printType(type)).join("|"),
88
97
  });
98
+ inplaceRemoveMeaninglessFields(monomorphizedEntry);
89
99
  return monomorphizedEntry;
90
100
  }
91
101
  function hasTypeParameterTypeChild(node) {
@@ -98,6 +108,7 @@ function hasTypeParameterTypeChild(node) {
98
108
  }
99
109
  function inplaceReferenceGenerics(ref, resolver, options) {
100
110
  var _a, _b;
111
+ inplaceDefaultReferenceGenerics(ref, resolver);
101
112
  if (!((_a = ref.typeArguments) === null || _a === void 0 ? void 0 : _a.length) || hasTypeParameterTypeChild(ref)) {
102
113
  return;
103
114
  }
@@ -117,6 +128,7 @@ function inplaceReferenceGenerics(ref, resolver, options) {
117
128
  const monomorphizedEntry = monomorphizeEntry(resolved, ref.typeArguments);
118
129
  insertEntryNearTo(monomorphizedEntry, resolved);
119
130
  inplaceGenerics(monomorphizedEntry, resolver);
131
+ correctTransformOnSerialize(resolver, monomorphizedEntry, ref.typeArguments, options);
120
132
  }
121
133
  ref.name = inplacedRef.name;
122
134
  ref.typeArguments = undefined;
@@ -138,4 +150,57 @@ function insertEntryNearTo(entry, anchor) {
138
150
  parentEntries.splice(parentEntries.indexOf(anchor), 0, entry);
139
151
  idl.linkParentBack(anchor.parent);
140
152
  }
153
+ // when generic declaration has TransformOnSerialize attribute, for monomorphized entry we must update that attribute that will look
154
+ // at monomorphized TransformOnSerialize
155
+ function correctTransformOnSerialize(resolver, monomorphizedEntry, typeArguments, options) {
156
+ const targetName = idl.getExtAttribute(monomorphizedEntry, idl.IDLExtendedAttributes.TransformOnSerialize);
157
+ if (targetName === undefined) {
158
+ return;
159
+ }
160
+ const targetType = toIdlType("", targetName);
161
+ if (idl.isReferenceType(targetType)) {
162
+ targetType.typeArguments = typeArguments;
163
+ inplaceReferenceGenerics(targetType, resolver, options);
164
+ idl.updateExtAttribute(monomorphizedEntry, idl.IDLExtendedAttributes.TransformOnSerialize, targetType.name);
165
+ }
166
+ }
167
+ function inplaceDefaultReferenceGenerics(node, resolver) {
168
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
169
+ const decl = resolver.resolveTypeReference(node);
170
+ if (!decl) {
171
+ console.error(`Can not resolve reference for inplacing default generics ${node.name} in file ${(_a = node.fileName) !== null && _a !== void 0 ? _a : '<unknown>'}`);
172
+ return;
173
+ }
174
+ if (!idl.isTypedef(decl) && !idl.isInterface(decl) && !idl.isCallback(decl)) {
175
+ return;
176
+ }
177
+ if (((_c = (_b = decl.typeParameters) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) > ((_e = (_d = node.typeArguments) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0)) {
178
+ const defaults = (_h = (_g = (_f = decl.extendedAttributes) === null || _f === void 0 ? void 0 : _f.find(it => it.name === idl.IDLExtendedAttributes.TypeParametersDefaults)) === null || _g === void 0 ? void 0 : _g.typesValue) !== null && _h !== void 0 ? _h : [];
179
+ while (defaults.length < decl.typeParameters.length) {
180
+ defaults.unshift(undefined);
181
+ }
182
+ (_j = node.typeArguments) !== null && _j !== void 0 ? _j : (node.typeArguments = []);
183
+ while (decl.typeParameters.length > node.typeArguments.length) {
184
+ if (defaults[node.typeArguments.length] === undefined) {
185
+ throw new Error(`Can not validate reference to ${idl.getFQName(decl)} declaration: reference has not enough generic arguments or declaration does not have enough default generic values`);
186
+ }
187
+ node.typeArguments.push(defaults[node.typeArguments.length]);
188
+ }
189
+ }
190
+ }
191
+ function isMeaninglessFieldType(type) {
192
+ return type === idl.IDLVoidType || type === idl.IDLUndefinedType;
193
+ }
194
+ function inplaceRemoveMeaninglessFields(node, options = { recursive: true }) {
195
+ if (options.recursive) {
196
+ idl.forEachChild(node, child => inplaceRemoveMeaninglessFields(child, { recursive: false }));
197
+ return;
198
+ }
199
+ if (idl.isInterface(node)) {
200
+ node.properties = node.properties.filter(it => !isMeaninglessFieldType(it.type));
201
+ }
202
+ if (idl.isMethod(node)) {
203
+ node.parameters = node.parameters.filter(it => !isMeaninglessFieldType(it.type));
204
+ }
205
+ }
141
206
  //# sourceMappingURL=GenericTransformer.js.map
@@ -1,4 +1,3 @@
1
1
  import * as idl from "../idl";
2
- export declare const NULL_REFERENCE = "idlize.stdlib.Null";
3
2
  export declare function inplaceNullsAsUndefined(node: idl.IDLNode): void;
4
3
  //# sourceMappingURL=NullTransformer.d.ts.map
@@ -1,6 +1,5 @@
1
1
  import * as idl from "../idl";
2
2
  import { generateSyntheticUnionName } from "../peer-generation/idl/common";
3
- export const NULL_REFERENCE = "idlize.stdlib.Null";
4
3
  export function inplaceNullsAsUndefined(node) {
5
4
  idl.updateEachChild(node, (child) => {
6
5
  var _a;
@@ -29,6 +28,6 @@ export function inplaceNullsAsUndefined(node) {
29
28
  });
30
29
  }
31
30
  function isNullReference(node) {
32
- return idl.isReferenceType(node) && node.name === NULL_REFERENCE;
31
+ return idl.isReferenceType(node) && node.name === idl.IDLNullTypeName;
33
32
  }
34
33
  //# sourceMappingURL=NullTransformer.js.map
@@ -0,0 +1,3 @@
1
+ import * as idl from "../idl";
2
+ export declare function inplaceTransformOnSerializeFromConfig(node: idl.IDLNode): void;
3
+ //# sourceMappingURL=OnSerializeTransformer.d.ts.map
@@ -0,0 +1,19 @@
1
+ import { generatorConfiguration } from "../config";
2
+ import * as idl from "../idl";
3
+ export function inplaceTransformOnSerializeFromConfig(node) {
4
+ inplaceTransformOnSerializeSelf(node);
5
+ idl.updateEachChild(node, child => {
6
+ inplaceTransformOnSerializeSelf(child);
7
+ return child;
8
+ });
9
+ }
10
+ function inplaceTransformOnSerializeSelf(node) {
11
+ if (!idl.isEntry(node)) {
12
+ return;
13
+ }
14
+ const transformation = generatorConfiguration().transformOnSerialize.find(it => it.from === idl.getFQName(node));
15
+ if (transformation !== undefined) {
16
+ idl.updateExtAttribute(node, idl.IDLExtendedAttributes.TransformOnSerialize, transformation.to);
17
+ }
18
+ }
19
+ //# sourceMappingURL=OnSerializeTransformer.js.map
@@ -1,30 +1,7 @@
1
- import * as ts from "typescript";
2
1
  import * as idl from "./idl";
3
2
  import { Language } from './Language';
4
- export interface NameWithType {
5
- name?: ts.DeclarationName;
6
- type?: ts.TypeNode;
7
- }
8
- /** True if this is visible outside this file, false otherwise */
9
- export declare function isNodePublic(node: ts.Node): boolean;
10
- export declare function nameOrNull(name: ts.EntityName | ts.DeclarationName | undefined): string | undefined;
11
- export declare function isNamedDeclaration(node: ts.Node): node is ts.NamedDeclaration;
12
- export declare function asString(node: ts.Node | undefined): string;
3
+ import { LibraryInterface } from './LibraryInterface';
13
4
  export declare function arrayAt<T>(array: T[] | undefined, index: number): T | undefined;
14
- export declare function getComment(sourceFile: ts.SourceFile, node: ts.Node): string;
15
- export declare function getSymbolByNode(typechecker: ts.TypeChecker, node: ts.Node): ts.Symbol | undefined;
16
- export declare function getDeclarationsByNode(typechecker: ts.TypeChecker, node: ts.Node): ts.Declaration[];
17
- export declare function findRealDeclarations(typechecker: ts.TypeChecker, node: ts.Node): ts.Declaration[];
18
- export declare function getExportedDeclarationNameByDecl(declaration: ts.NamedDeclaration): string | undefined;
19
- export declare function getExportedDeclarationNameByNode(typechecker: ts.TypeChecker, node: ts.Node): string | undefined;
20
- export declare function isReadonly(modifierLikes: ts.NodeArray<ts.ModifierLike> | undefined): boolean;
21
- export declare function isExport(modifierLikes: ts.NodeArray<ts.ModifierLike> | undefined): boolean;
22
- export declare function isAbstract(modifierLikes: ts.NodeArray<ts.ModifierLike> | undefined): boolean;
23
- export declare function isStatic(modifierLikes: ts.NodeArray<ts.ModifierLike> | undefined): boolean;
24
- export declare function isAsync(modifierLikes: ts.NodeArray<ts.ModifierLike> | readonly ts.Modifier[] | undefined): boolean;
25
- export declare function isPrivate(modifierLikes: ts.NodeArray<ts.ModifierLike> | undefined): boolean;
26
- export declare function isProtected(modifierLikes: ts.NodeArray<ts.ModifierLike> | undefined): boolean;
27
- export declare function getLineNumberString(sourceFile: ts.SourceFile, position: number): string;
28
5
  export declare function isDefined<T>(value: T | null | undefined): value is T;
29
6
  export declare function capitalize(string: string): string;
30
7
  export declare function capitalizeConstantName(string: string): string;
@@ -34,22 +11,9 @@ export type stringOrNone = string | undefined;
34
11
  export declare function toSet(option: string | undefined): Set<string>;
35
12
  export declare function getOrPut<K, V>(map: Map<K, V>, key: K, create: (key: K) => V): V;
36
13
  export declare function indentedBy(input: string, indentedBy: number): string;
37
- export declare function typeOrUndefined(type: ts.TypeNode): ts.TypeNode;
38
14
  export declare function forEachExpanding<T>(array: T[], action: (element: T) => void): void;
39
- export declare function isTypeParamSuitableType(type: ts.TypeNode): boolean;
40
- export declare function heritageTypes(typechecker: ts.TypeChecker, clause: ts.HeritageClause): ts.TypeReferenceNode[];
41
- export declare function heritageDeclarations(typechecker: ts.TypeChecker, clause: ts.HeritageClause): ts.NamedDeclaration[];
42
- export declare function typeName(type: ts.TypeReferenceNode | ts.TypeQueryNode | ts.ImportTypeNode): string | undefined;
43
- export declare function typeEntityName(type: ts.TypeReferenceNode | ts.TypeQueryNode | ts.ImportTypeNode): ts.EntityName | undefined;
44
15
  export declare function zip<A, B>(left: readonly A[], right: readonly B[]): [A, B][];
45
16
  export declare function zipStrip<A, B>(left: readonly A[], right: readonly B[]): [A, B][];
46
- export declare function identNameWithNamespace(node: ts.Node, language: Language): string;
47
- export declare function identName(node: ts.Node | undefined): string | undefined;
48
- export declare function identString(node: ts.Identifier | ts.PrivateIdentifier | ts.StringLiteral | ts.QualifiedName | ts.NumericLiteral | ts.ComputedPropertyName | ts.BindingName | undefined): string | undefined;
49
- export declare const defaultCompilerOptions: ts.CompilerOptions;
50
- export declare function serializerBaseMethods(): string[];
51
- export declare function getNameWithoutQualifiersRight(node: ts.EntityName | undefined): string | undefined;
52
- export declare function getNameWithoutQualifiersLeft(node: ts.EntityName | undefined): string | undefined;
53
17
  export declare function snakeCaseToCamelCase(input: string, tailToLowerCase?: boolean): string;
54
18
  export declare function toCamelCase(input: string): string;
55
19
  export declare function isUpperCase(s: string): boolean;
@@ -60,9 +24,7 @@ export declare function renameDtsToComponent(fileName: string, language: Languag
60
24
  export declare function renameDtsToInterfaces(fileName: string, language: Language, withFileExtension?: boolean): string;
61
25
  export declare function renameClassToBuilderClass(className: string, language: Language, withFileExtension?: boolean): string;
62
26
  export declare function renameClassToMaterialized(className: string, language: Language, withFileExtension?: boolean): string;
63
- export declare function importTypeName(type: ts.ImportTypeNode, asType?: boolean): string;
64
27
  export declare function throwException(message: string): never;
65
- export declare function className(node: ts.ClassDeclaration | ts.InterfaceDeclaration): string;
66
28
  /**
67
29
  * Add a prefix to an enum value which camel case name coincidence
68
30
  * with the the same upper case name for an another enum value
@@ -95,5 +57,14 @@ export declare function getExtractor(target: idl.IDLInterface, lang: Language, t
95
57
  receiver?: string;
96
58
  method: string;
97
59
  };
60
+ export declare function getTransformer(library: LibraryInterface, from: idl.IDLNode, to: idl.IDLNode): {
61
+ receiver?: string;
62
+ method: string;
63
+ };
64
+ export declare function removePoints(s: string): string;
65
+ export declare function scanDirectory(dir: string, fileFilter: (file: string) => boolean, recursive?: boolean): string[];
66
+ export declare function scanInputDirs(inputDirs: string[]): string[];
67
+ export declare function scanInputDirs(inputDirs: string[], fileExtension: string): string[];
68
+ export declare function scanInputDirs(inputDirs: string[], fileFilter: (file: string) => boolean, recursive: boolean): string[];
98
69
  export {};
99
70
  //# sourceMappingURL=util.d.ts.map