@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.
- package/build/lib/src/Language.d.ts +0 -1
- package/build/lib/src/Language.js +0 -2
- package/build/lib/src/LanguageWriters/ArgConvertors.d.ts +15 -2
- package/build/lib/src/LanguageWriters/ArgConvertors.js +75 -19
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +14 -2
- package/build/lib/src/LanguageWriters/LanguageWriter.js +12 -4
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +0 -1
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +2 -4
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +7 -7
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +37 -23
- package/build/lib/src/LanguageWriters/convertors/KotlinConvertors.js +9 -5
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -4
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +73 -30
- package/build/lib/src/LanguageWriters/index.d.ts +2 -2
- package/build/lib/src/LanguageWriters/index.js +8 -13
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +4 -0
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +24 -16
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +2 -0
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +7 -1
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +1 -2
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +0 -6
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +2 -0
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +11 -0
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.d.ts +8 -0
- package/build/lib/src/LanguageWriters/writers/KotlinLanguageWriter.js +75 -27
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +2 -0
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +38 -12
- package/build/lib/src/LibraryInterface.d.ts +0 -1
- package/build/lib/src/config.d.ts +760 -0
- package/build/lib/src/config.js +7 -0
- package/build/lib/src/formatter.js +5 -2
- package/build/lib/src/from-idl/DtsPrinter.js +3 -3
- package/build/lib/src/from-idl/common.js +2 -2
- package/build/lib/src/from-idl/deserialize.d.ts +3 -7
- package/build/lib/src/from-idl/deserialize.js +65 -39
- package/build/lib/src/from-idl/parser.d.ts +1 -1
- package/build/lib/src/from-idl/parser.js +29 -20
- package/build/lib/src/idl.d.ts +12 -1
- package/build/lib/src/idl.js +73 -11
- package/build/lib/src/index.d.ts +3 -5
- package/build/lib/src/index.js +3 -5
- package/build/lib/src/inheritance.d.ts +0 -2
- package/build/lib/src/inheritance.js +0 -17
- package/build/lib/src/languageSpecificKeywords.js +1 -1
- package/build/lib/src/peer-generation/ConflictingDeclarations.d.ts +6 -0
- package/build/lib/src/peer-generation/ConflictingDeclarations.js +43 -0
- package/build/lib/src/peer-generation/LayoutManager.d.ts +2 -0
- package/build/lib/src/peer-generation/LayoutManager.js +15 -0
- package/build/lib/src/peer-generation/Materialized.d.ts +2 -0
- package/build/lib/src/peer-generation/Materialized.js +14 -1
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +0 -3
- package/build/lib/src/peer-generation/PeerLibrary.js +63 -38
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +6 -0
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +15 -3
- package/build/lib/src/peer-generation/isMaterialized.js +1 -1
- package/build/lib/src/peer-generation/modules.d.ts +2 -0
- package/build/lib/src/peer-generation/modules.js +14 -1
- package/build/lib/src/transformers/GenericTransformer.js +70 -5
- package/build/lib/src/transformers/NullTransformer.d.ts +0 -1
- package/build/lib/src/transformers/NullTransformer.js +1 -2
- package/build/lib/src/transformers/OnSerializeTransformer.d.ts +3 -0
- package/build/lib/src/transformers/OnSerializeTransformer.js +19 -0
- package/build/lib/src/util.d.ts +10 -39
- package/build/lib/src/util.js +56 -371
- 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 '../
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 (
|
|
388
|
-
|
|
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) &&
|
|
463
|
-
|
|
464
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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,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 ===
|
|
31
|
+
return idl.isReferenceType(node) && node.name === idl.IDLNullTypeName;
|
|
33
32
|
}
|
|
34
33
|
//# sourceMappingURL=NullTransformer.js.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
|
package/build/lib/src/util.d.ts
CHANGED
|
@@ -1,30 +1,7 @@
|
|
|
1
|
-
import * as ts from "typescript";
|
|
2
1
|
import * as idl from "./idl";
|
|
3
2
|
import { Language } from './Language';
|
|
4
|
-
|
|
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
|