@idlizer/core 2.1.9-arktscgen-5 → 2.1.9-arktscgen-8

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 (58) hide show
  1. package/build/lib/src/Language.d.ts +0 -1
  2. package/build/lib/src/Language.js +7 -8
  3. package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +4 -15
  4. package/build/lib/src/LanguageWriters/ArgConvertors.js +103 -102
  5. package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +8 -30
  6. package/build/lib/src/LanguageWriters/LanguageWriter.js +15 -67
  7. package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +2 -2
  8. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.d.ts +17 -1
  9. package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +121 -6
  10. package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +6 -0
  11. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +1 -2
  12. package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +3 -19
  13. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +0 -5
  14. package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +0 -9
  15. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +3 -5
  16. package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +9 -22
  17. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +6 -9
  18. package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +23 -66
  19. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +1 -7
  20. package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +4 -14
  21. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +11 -8
  22. package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +116 -27
  23. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +4 -5
  24. package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +10 -26
  25. package/build/lib/src/config.d.ts +336 -1
  26. package/build/lib/src/config.js +11 -3
  27. package/build/lib/src/diagnosticmessages.d.ts +45 -0
  28. package/build/lib/src/diagnosticmessages.js +66 -0
  29. package/build/lib/src/diagnostictypes.d.ts +140 -0
  30. package/build/lib/src/diagnostictypes.js +72 -0
  31. package/build/lib/src/formatter.d.ts +3 -0
  32. package/build/lib/src/formatter.js +98 -0
  33. package/build/lib/src/from-idl/deserialize.d.ts +1 -0
  34. package/build/lib/src/from-idl/deserialize.js +107 -5
  35. package/build/lib/src/idl.d.ts +7 -0
  36. package/build/lib/src/idl.js +15 -3
  37. package/build/lib/src/index.d.ts +7 -1
  38. package/build/lib/src/index.js +7 -1
  39. package/build/lib/src/peer-generation/Materialized.d.ts +4 -20
  40. package/build/lib/src/peer-generation/Materialized.js +9 -62
  41. package/build/lib/src/peer-generation/PeerClass.d.ts +0 -2
  42. package/build/lib/src/peer-generation/PeerClass.js +4 -6
  43. package/build/lib/src/peer-generation/PeerLibrary.js +1 -5
  44. package/build/lib/src/peer-generation/PeerMethod.d.ts +25 -27
  45. package/build/lib/src/peer-generation/PeerMethod.js +83 -93
  46. package/build/lib/src/peer-generation/idl/common.js +1 -1
  47. package/build/lib/src/peer-generation/isMaterialized.js +0 -4
  48. package/build/lib/src/peer-generation/modules.d.ts +1 -0
  49. package/build/lib/src/peer-generation/modules.js +4 -0
  50. package/build/lib/src/peer-generation/unions.d.ts +0 -2
  51. package/build/lib/src/peer-generation/unions.js +3 -23
  52. package/build/lib/src/transformers/FqnTransformer.d.ts +4 -0
  53. package/build/lib/src/transformers/FqnTransformer.js +17 -0
  54. package/build/lib/src/transformers/GenericTransformer.d.ts +8 -0
  55. package/build/lib/src/transformers/GenericTransformer.js +141 -0
  56. package/build/lib/src/util.d.ts +4 -2
  57. package/build/lib/src/util.js +21 -12
  58. package/package.json +2 -2
@@ -5,6 +5,10 @@ export function isInModule(nodeOrPackage, module) {
5
5
  return isInModule(idl.getPackageName(nodeOrPackage), module);
6
6
  return module.packages.some(modulePackage => nodeOrPackage.startsWith(modulePackage));
7
7
  }
8
+ export function isInExternalModule(node) {
9
+ var _a;
10
+ return (_a = getModuleFor(node).external) !== null && _a !== void 0 ? _a : false;
11
+ }
8
12
  export function getModuleFor(nodeOrPackage) {
9
13
  if (typeof nodeOrPackage === "object")
10
14
  return getModuleFor(idl.getPackageName(nodeOrPackage));
@@ -20,11 +20,9 @@ export declare class UnionRuntimeTypeChecker {
20
20
  private convertors;
21
21
  private conflictingConvertors;
22
22
  private duplicateMembers;
23
- private discriminators;
24
23
  constructor(convertors: ArgConvertor[]);
25
24
  private checkConflicts;
26
25
  makeDiscriminator(value: string, convertorIndex: number, writer: LanguageWriter): LanguageExpression;
27
- reportConflicts(context: string | undefined, writer: LanguageWriter): void;
28
26
  }
29
27
  export declare function flattenUnionType(library: LibraryInterface, type: IDLType): IDLType;
30
28
  //# sourceMappingURL=unions.d.ts.map
@@ -15,8 +15,8 @@
15
15
  import { convertType } from "../LanguageWriters";
16
16
  import { IDLCustomObjectType, IDLUndefinedType, isType, isUnionType } from '../idl';
17
17
  import { collapseTypes } from "./idl/common";
18
- import { CustomTypeConvertor } from "../LanguageWriters/ArgConvertors";
19
18
  import { RuntimeType } from "../LanguageWriters/common";
19
+ import { Language } from "../Language";
20
20
  export class UnionFlattener {
21
21
  constructor(resolver) {
22
22
  this.resolver = resolver;
@@ -53,7 +53,6 @@ export class UnionRuntimeTypeChecker {
53
53
  this.convertors = convertors;
54
54
  this.conflictingConvertors = new Set();
55
55
  this.duplicateMembers = new Set();
56
- this.discriminators = [];
57
56
  this.checkConflicts();
58
57
  }
59
58
  checkConflicts() {
@@ -87,31 +86,12 @@ export class UnionRuntimeTypeChecker {
87
86
  }
88
87
  makeDiscriminator(value, convertorIndex, writer) {
89
88
  const convertor = this.convertors[convertorIndex];
90
- if (this.conflictingConvertors.has(convertor) && writer.language.needsUnionDiscrimination) {
89
+ if (this.conflictingConvertors.has(convertor) && writer.language === Language.TS) {
91
90
  const discriminator = convertor.unionDiscriminator(value, convertorIndex, writer, this.duplicateMembers);
92
- this.discriminators.push([discriminator, convertor, convertorIndex]);
93
91
  if (discriminator)
94
92
  return discriminator;
95
93
  }
96
- return writer.makeNaryOp("||", convertor.runtimeTypes.map((it, runtimeTypeIndex) => writer.makeNaryOp("==", [
97
- writer.makeUnionVariantCondition(convertor, value, `${value}_type`, RuntimeType[it], convertorIndex, runtimeTypeIndex)
98
- ])));
99
- }
100
- reportConflicts(context, writer) {
101
- if (this.discriminators.filter(([discriminator, _, __]) => discriminator === undefined).length > 1) {
102
- let report = `Union discrimination code can not be generated for \`${context}\`.\n`;
103
- report += `Possible reasons for that are too similar or unresolved types in union (see below).\n`;
104
- report += ` # | type | duplicated properties | resolved | discriminator expression\n`;
105
- const properties = Array.from(this.duplicateMembers).join(",").padEnd(30);
106
- this.discriminators.forEach(([discr, conv, n]) => {
107
- const num = n.toString().padEnd(3);
108
- const typename = conv.targetType(writer).padEnd(30);
109
- const resolved = (conv instanceof CustomTypeConvertor ? "no" : "yes").padEnd(9);
110
- const discriminator = discr ? discr.asString() : "<undefined>";
111
- report += ` ${num}| ${typename}| ${properties}| ${resolved}| ${discriminator}\n`;
112
- });
113
- // throw new Error(report)
114
- }
94
+ return writer.makeString(writer.discriminate(value, convertorIndex, convertor.idlType, convertor.runtimeTypes));
115
95
  }
116
96
  }
117
97
  export function flattenUnionType(library, type) {
@@ -0,0 +1,4 @@
1
+ import * as idl from "../idl";
2
+ import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
3
+ export declare function inplaceFQN(node: idl.IDLNode, resolver: ReferenceResolver): void;
4
+ //# sourceMappingURL=FqnTransformer.d.ts.map
@@ -0,0 +1,17 @@
1
+ import * as idl from "../idl";
2
+ export function inplaceFQN(node, resolver) {
3
+ if (idl.isReferenceType(node))
4
+ inplaceReferenceFQN(node, resolver);
5
+ idl.forEachChild(node, (child) => {
6
+ if (idl.isReferenceType(child))
7
+ inplaceReferenceFQN(child, resolver);
8
+ });
9
+ }
10
+ function inplaceReferenceFQN(ref, resolver) {
11
+ const resolved = resolver.resolveTypeReference(ref);
12
+ if (resolved === undefined) {
13
+ throw new Error("Can not expand FQN for " + ref.name);
14
+ }
15
+ ref.name = idl.getFQName(resolved);
16
+ }
17
+ //# sourceMappingURL=FqnTransformer.js.map
@@ -0,0 +1,8 @@
1
+ import * as idl from "../idl";
2
+ import { ReferenceResolver } from "../peer-generation/ReferenceResolver";
3
+ export declare function inplaceGenerics(node: idl.IDLNode, resolver: ReferenceResolver, options?: {
4
+ ignore?: ((node: idl.IDLNode) => boolean)[];
5
+ }): void;
6
+ export declare function isInplacedGeneric(entry: idl.IDLEntry): boolean;
7
+ export declare function maybeRestoreGenerics(maybeTransformedGeneric: idl.IDLReferenceType | idl.IDLEntry, resolver: ReferenceResolver): idl.IDLReferenceType | undefined;
8
+ //# sourceMappingURL=GenericTransformer.d.ts.map
@@ -0,0 +1,141 @@
1
+ import { generatorConfiguration } from "../config";
2
+ import { toIdlType } from "../from-idl/deserialize";
3
+ import * as idl from "../idl";
4
+ import { isBuilderClass } from "../peer-generation/BuilderClass";
5
+ import { generateSyntheticIdlNodeName } from "../peer-generation/idl/common";
6
+ import { isMaterialized } from "../peer-generation/isMaterialized";
7
+ import { inplaceFQN } from "./FqnTransformer";
8
+ export function inplaceGenerics(node, resolver, options) {
9
+ var _a;
10
+ const candidates = [];
11
+ idl.forEachChild(node, () => { }, (child) => {
12
+ if (idl.isReferenceType(child))
13
+ candidates.push(child);
14
+ });
15
+ if (idl.isReferenceType(node)) {
16
+ candidates.push(node);
17
+ }
18
+ options !== null && options !== void 0 ? options : (options = {});
19
+ (_a = options.ignore) !== null && _a !== void 0 ? _a : (options.ignore = []);
20
+ options.ignore.push(ignoreConfigRule, ignoreBuilderClassRule, createIgnoreMaterializedRule(resolver));
21
+ candidates.forEach(it => inplaceReferenceGenerics(it, resolver, options));
22
+ }
23
+ export function isInplacedGeneric(entry) {
24
+ return idl.hasExtAttribute(entry, idl.IDLExtendedAttributes.OriginalGenericName);
25
+ }
26
+ export function maybeRestoreGenerics(maybeTransformedGeneric, resolver) {
27
+ if (idl.isReferenceType(maybeTransformedGeneric)) {
28
+ const resolved = resolver.resolveTypeReference(maybeTransformedGeneric);
29
+ return resolved ? maybeRestoreGenerics(resolved, resolver) : undefined;
30
+ }
31
+ if (maybeTransformedGeneric && idl.hasExtAttribute(maybeTransformedGeneric, idl.IDLExtendedAttributes.OriginalGenericName)) {
32
+ const originalName = idl.getExtAttribute(maybeTransformedGeneric, idl.IDLExtendedAttributes.OriginalGenericName);
33
+ const typeArgumentsAttribute = idl.getExtAttribute(maybeTransformedGeneric, idl.IDLExtendedAttributes.TypeArguments);
34
+ if (!typeArgumentsAttribute)
35
+ throw new Error(`Can not restore original generic type arguments for ${originalName}: no type arguments`);
36
+ const typeArguments = typeArgumentsAttribute.split(',').map(it => { var _a; return toIdlType((_a = maybeTransformedGeneric.fileName) !== null && _a !== void 0 ? _a : "", it); });
37
+ return idl.createReferenceType(originalName, typeArguments, {
38
+ extendedAttributes: [{
39
+ name: idl.IDLExtendedAttributes.TypeArguments,
40
+ value: typeArgumentsAttribute,
41
+ }]
42
+ });
43
+ }
44
+ return undefined;
45
+ }
46
+ function ignoreConfigRule(node) {
47
+ if (idl.isEntry(node))
48
+ return generatorConfiguration().ignoreGenerics.includes(idl.getFQName(node));
49
+ return false;
50
+ }
51
+ function ignoreBuilderClassRule(node) {
52
+ return idl.isInterface(node) && isBuilderClass(node);
53
+ }
54
+ function createIgnoreMaterializedRule(resolver) {
55
+ return (node) => idl.isInterface(node) && isMaterialized(node, resolver);
56
+ }
57
+ function monomorphisedEntryName(typedEntry, typeArguments) {
58
+ return typedEntry.name + "_" + typeArguments.map(generateSyntheticIdlNodeName).join("_");
59
+ }
60
+ function monomorphizeEntry(typedEntry, typeArguments) {
61
+ var _a, _b, _c, _d;
62
+ if (!idl.isTypedef(typedEntry) && !idl.isInterface(typedEntry) && !idl.isCallback(typedEntry))
63
+ throw new Error(`Can not monomorphize ${typedEntry.kind}`);
64
+ if (((_a = typedEntry.typeParameters) === null || _a === void 0 ? void 0 : _a.length) != typeArguments.length)
65
+ throw new Error(`Trying to monomorphize entry ${typedEntry.name} that accepts ${(_b = typedEntry.typeParameters) === null || _b === void 0 ? void 0 : _b.length} type parameters with ${typeArguments.length} type arguments`);
66
+ const monomorphizedEntry = idl.clone(typedEntry);
67
+ monomorphizedEntry.name = monomorphisedEntryName(typedEntry, typeArguments);
68
+ monomorphizedEntry.typeParameters = undefined;
69
+ const nameToType = new Map(typedEntry.typeParameters.map((name, index) => [name, typeArguments[index]]));
70
+ idl.updateEachChild(monomorphizedEntry, (node) => {
71
+ var _a;
72
+ if (idl.isTypeParameterType(node)) {
73
+ if (!nameToType.has(node.name))
74
+ throw new Error(`Can not name ${node.name} in type parameters of ${typedEntry.name}: available are ${(_a = typedEntry.typeParameters) === null || _a === void 0 ? void 0 : _a.join(", ")}`);
75
+ return idl.clone(nameToType.get(node.name));
76
+ }
77
+ return node;
78
+ });
79
+ monomorphizedEntry.extendedAttributes = (_d = (_c = monomorphizedEntry.extendedAttributes) === null || _c === void 0 ? void 0 : _c.filter(it => {
80
+ return it.name != idl.IDLExtendedAttributes.TypeParameters;
81
+ })) !== null && _d !== void 0 ? _d : [];
82
+ monomorphizedEntry.extendedAttributes.push({
83
+ name: idl.IDLExtendedAttributes.OriginalGenericName,
84
+ value: idl.getFQName(typedEntry),
85
+ }, {
86
+ name: idl.IDLExtendedAttributes.TypeArguments,
87
+ value: typeArguments.map(type => idl.printType(type)).join("|"),
88
+ });
89
+ return monomorphizedEntry;
90
+ }
91
+ function hasTypeParameterTypeChild(node) {
92
+ let result = false;
93
+ idl.forEachChild(node, (child) => {
94
+ if (idl.isTypeParameterType(child))
95
+ result = true;
96
+ });
97
+ return result;
98
+ }
99
+ function inplaceReferenceGenerics(ref, resolver, options) {
100
+ var _a, _b;
101
+ if (!((_a = ref.typeArguments) === null || _a === void 0 ? void 0 : _a.length) || hasTypeParameterTypeChild(ref)) {
102
+ return;
103
+ }
104
+ ref.typeArguments.forEach(it => inplaceFQN(it, resolver));
105
+ const resolved = resolver.resolveTypeReference(ref);
106
+ if (!resolved) {
107
+ throw new Error(`Can not resolve ${ref.name}`);
108
+ }
109
+ if (((_b = options === null || options === void 0 ? void 0 : options.ignore) === null || _b === void 0 ? void 0 : _b.some(it => it(ref) || it(resolved))) || generatorConfiguration().ignoreGenerics.includes(idl.getFQName(resolved))) {
110
+ return;
111
+ }
112
+ if (!idl.isTypedef(resolved) && !idl.isInterface(resolved) && !idl.isCallback(resolved)) {
113
+ throw new Error(`Unsupported generics target ${resolved.kind}`);
114
+ }
115
+ const inplacedRef = idl.createReferenceType(monomorphisedEntryName(resolved, ref.typeArguments));
116
+ if (!resolver.resolveTypeReference(inplacedRef)) {
117
+ const monomorphizedEntry = monomorphizeEntry(resolved, ref.typeArguments);
118
+ insertEntryNearTo(monomorphizedEntry, resolved);
119
+ inplaceGenerics(monomorphizedEntry, resolver);
120
+ }
121
+ ref.name = inplacedRef.name;
122
+ ref.typeArguments = undefined;
123
+ }
124
+ function insertEntryNearTo(entry, anchor) {
125
+ if (!anchor.parent) {
126
+ throw new Error(`Entry used as anchor has not parent`);
127
+ }
128
+ let parentEntries;
129
+ if (idl.isFile(anchor.parent)) {
130
+ parentEntries = anchor.parent.entries;
131
+ }
132
+ else if (idl.isNamespace(anchor.parent)) {
133
+ parentEntries = anchor.parent.members;
134
+ }
135
+ else {
136
+ throw new Error(`Can not insert entry, unknown parent kind ${anchor.parent.kind}`);
137
+ }
138
+ parentEntries.splice(parentEntries.indexOf(anchor), 0, entry);
139
+ idl.linkParentBack(anchor.parent);
140
+ }
141
+ //# sourceMappingURL=GenericTransformer.js.map
@@ -90,7 +90,9 @@ type StringProperties<T> = {
90
90
  [Property in keyof T as (T[Property] extends string ? Property : never)]: T[Property];
91
91
  };
92
92
  export declare function sorted<T, N extends keyof StringProperties<T>>(array: T[], key: ((value: T) => string) | N): T[];
93
- export declare function getExtractorName(target: idl.IDLInterface, language: Language, toPtr?: boolean): string;
94
- export declare function getExternalTypePackage(node: idl.IDLEntry): string | undefined;
93
+ export declare function getExtractor(target: idl.IDLInterface, lang: Language, toPtr?: boolean): {
94
+ receiver?: string;
95
+ method: string;
96
+ };
95
97
  export {};
96
98
  //# sourceMappingURL=util.d.ts.map
@@ -17,7 +17,8 @@ import * as fs from "fs";
17
17
  import * as ts from "typescript";
18
18
  import * as idl from "./idl";
19
19
  import { Language } from './Language';
20
- import { generatorConfiguration } from './config';
20
+ import { isInExternalModule } from './peer-generation/modules';
21
+ import { getInternalClassName, getInternalClassQualifiedName } from './peer-generation/Materialized';
21
22
  /** True if this is visible outside this file, false otherwise */
22
23
  export function isNodePublic(node) {
23
24
  return (ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Public) !== 0;
@@ -690,16 +691,24 @@ export function sorted(array, key) {
690
691
  return array.map(it => it)
691
692
  .sort((a, b) => comparator.compare(a[key], b[key]));
692
693
  }
693
- export function getExtractorName(target, language, toPtr = true) {
694
- // TODO: Update for CJ
695
- return toPtr ? `to${target.name}Ptr` : `from${target.name}Ptr`;
696
- }
697
- export function getExternalTypePackage(node) {
698
- if (!idl.isInterface(node))
699
- return undefined;
700
- const pack = idl.getPackageName(node);
701
- if (generatorConfiguration().externalPackages.includes(pack))
702
- return `@${pack}`;
703
- return generatorConfiguration().externalTypes.get(node.name);
694
+ function getExtractorClass(target, toPtr = true) {
695
+ if (isInExternalModule(target)) {
696
+ const qualifiedName = idl.getQualifiedName(target, "namespace.name");
697
+ const name = qualifiedName.split(`.`).map(it => capitalize(it)).join("");
698
+ return name;
699
+ }
700
+ return toPtr ? "Peer" : "";
701
+ }
702
+ export function getExtractor(target, lang, toPtr = true) {
703
+ const receiver = isInExternalModule(target)
704
+ ? `extractors`
705
+ : toPtr
706
+ ? undefined // TBD: update to MaterializedBase when import is updated
707
+ : (lang == Language.CJ || lang == Language.KOTLIN)
708
+ ? getInternalClassName(target.name)
709
+ : getInternalClassQualifiedName(target, "namespace.name", lang);
710
+ const extractorClass = getExtractorClass(target, toPtr);
711
+ const method = toPtr ? `to${extractorClass}Ptr` : `from${extractorClass}Ptr`;
712
+ return { receiver, method };
704
713
  }
705
714
  //# sourceMappingURL=util.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idlizer/core",
3
- "version": "2.1.9-arktscgen-5",
3
+ "version": "2.1.9-arktscgen-8",
4
4
  "description": "",
5
5
  "types": "build/lib/src/index.d.ts",
6
6
  "exports": {
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "keywords": [],
36
36
  "dependencies": {
37
- "@koalaui/interop": "1.7.5",
37
+ "@koalaui/interop": "1.7.6",
38
38
  "typescript": "4.9.5",
39
39
  "@types/node": "^18.0.0"
40
40
  },