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

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.
@@ -265,9 +265,9 @@ export declare class CustomTypeConvertor extends BaseArgConvertor {
265
265
  isPointerType(): boolean;
266
266
  }
267
267
  export declare class OptionConvertor extends BaseArgConvertor {
268
- type: idl.IDLType;
268
+ type: idl.IDLOptionalType;
269
269
  private readonly typeConvertor;
270
- constructor(library: LibraryInterface, param: string, type: idl.IDLType);
270
+ constructor(library: LibraryInterface, param: string, type: idl.IDLOptionalType);
271
271
  convertorArg(param: string, writer: LanguageWriter): string;
272
272
  convertorSerialize(param: string, value: string, printer: LanguageWriter): LanguageStatement;
273
273
  convertorCArg(param: string): string;
@@ -851,7 +851,7 @@ export class CustomTypeConvertor extends BaseArgConvertor {
851
851
  export class OptionConvertor extends BaseArgConvertor {
852
852
  // TODO: be smarter here, and for smth like Length|undefined or number|undefined pass without serializer.
853
853
  constructor(library, param, type) {
854
- let conv = library.typeConvertor(param, type);
854
+ let conv = library.typeConvertor(param, type.type);
855
855
  let currentConv = conv;
856
856
  while (currentConv instanceof ProxyConvertor) {
857
857
  currentConv = currentConv.convertor;
@@ -872,7 +872,7 @@ export class OptionConvertor extends BaseArgConvertor {
872
872
  }
873
873
  convertorSerialize(param, value, printer) {
874
874
  const valueValue = `${value}TmpValue`.replaceAll('.', '_');
875
- return printer.makeCondition(printer.makeDefinedCheck(value), new BlockStatement([
875
+ return printer.makeCondition(printer.makeDefinedCheck(value, this.type), new BlockStatement([
876
876
  printer.makeStatement(printer.makeMethodCall(`${param}Serializer`, "writeInt8", [printer.makeRuntimeType(RuntimeType.OBJECT)])),
877
877
  printer.makeAssign(valueValue, undefined, printer.makeValueFromOption(value, this.typeConvertor), true),
878
878
  this.typeConvertor.convertorSerialize(param, this.typeConvertor.getObjectAccessor(printer.language, valueValue), printer)
@@ -886,7 +886,7 @@ export class OptionConvertor extends BaseArgConvertor {
886
886
  const statements = [];
887
887
  statements.push(writer.makeAssign(runtimeBufferName, undefined, writer.makeCast(writer.makeString(`${deserializerName}.readInt8()`), writer.getRuntimeType()), true));
888
888
  const bufferType = this.nativeType();
889
- statements.push(writer.makeAssign(bufferName, bufferType, (writer.language == Language.CJ || writer.language == Language.KOTLIN) ? writer.makeNull(bufferName) : undefined, true, false)); // maybe change to generic None
889
+ statements.push(writer.makeAssign(bufferName, bufferType, writer.language === Language.CPP ? undefined : writer.makeNull(this.type), true, false)); // maybe change to generic None
890
890
  const thenStatement = new BlockStatement([
891
891
  this.typeConvertor.convertorDeserialize(`${bufferName}_`, deserializerName, (expr) => {
892
892
  const receiver = writer.language === Language.CPP
@@ -900,10 +900,10 @@ export class OptionConvertor extends BaseArgConvertor {
900
900
  return writer.makeBlock(statements, false);
901
901
  }
902
902
  nativeType() {
903
- return idl.createOptionalType(this.type);
903
+ return this.type;
904
904
  }
905
905
  interopType() {
906
- return idl.createOptionalType(this.type);
906
+ return this.type;
907
907
  }
908
908
  isPointerType() {
909
909
  return true;
@@ -316,7 +316,7 @@ export declare abstract class LanguageWriter {
316
316
  writeStaticBlock(op: (writer: this) => void): void;
317
317
  makeRef(type: idl.IDLType, _options?: MakeRefOptions): idl.IDLType;
318
318
  makeThis(): LanguageExpression;
319
- makeNull(value?: string): LanguageExpression;
319
+ makeNull(type?: idl.IDLOptionalType): LanguageExpression;
320
320
  makeVoid(): LanguageExpression;
321
321
  makeLambdaReturn(expr?: LanguageExpression): LanguageStatement;
322
322
  makeRuntimeTypeCondition(typeVarName: string, equals: boolean, type: RuntimeType, varName?: string): LanguageExpression;
@@ -330,7 +330,7 @@ export declare abstract class LanguageWriter {
330
330
  makeNativeCall(nativeModule: NativeModuleType, method: string, params: LanguageExpression[], nullable?: boolean): LanguageExpression;
331
331
  makeBlock(statements: LanguageStatement[], inScope?: boolean): BlockStatement;
332
332
  nativeReceiver(nativeModule: NativeModuleType): string;
333
- abstract makeDefinedCheck(value: string, isTag?: boolean): LanguageExpression;
333
+ abstract makeDefinedCheck(value: string, type?: idl.IDLOptionalType, isTag?: boolean): LanguageExpression;
334
334
  makeRuntimeTypeDefinedCheck(runtimeType: string): LanguageExpression;
335
335
  makeCondition(condition: LanguageExpression, thenStatement: LanguageStatement, elseStatement?: LanguageStatement, insideIfOp?: () => void, insideElseOp?: () => void): LanguageStatement;
336
336
  makeMultiBranchCondition(conditions: BranchStatement[], elseStatement?: LanguageStatement): LanguageStatement;
@@ -488,7 +488,7 @@ export class LanguageWriter {
488
488
  makeThis() {
489
489
  return new StringExpression("this");
490
490
  }
491
- makeNull(value) {
491
+ makeNull(type) {
492
492
  return new StringExpression("null");
493
493
  }
494
494
  makeVoid() {
@@ -46,7 +46,15 @@ export class TSTypeNameConvertor {
46
46
  return node.name;
47
47
  }
48
48
  convertOptional(type) {
49
- return `${this.convert(type.type)} | undefined`;
49
+ if (idl.hasExtAttribute(type, idl.IDLExtendedAttributes.UnionOnlyNull)) {
50
+ return `${this.convert(type.type)} | null`;
51
+ }
52
+ else if (idl.hasExtAttribute(type, idl.IDLExtendedAttributes.UnionWithNull)) {
53
+ return `${this.convert(type.type)} | null | undefined`;
54
+ }
55
+ else {
56
+ return `${this.convert(type.type)} | undefined`;
57
+ }
50
58
  }
51
59
  convertUnion(type) {
52
60
  return type.types.
@@ -136,7 +136,7 @@ export declare class CJLanguageWriter extends LanguageWriter {
136
136
  makeRuntimeType(rt: RuntimeType): LanguageExpression;
137
137
  protected makeRuntimeTypeGetterCall(value: string): LanguageExpression;
138
138
  makeMapInsert(keyAccessor: string, key: string, valueAccessor: string, value: string): LanguageStatement;
139
- makeNull(value?: string): LanguageExpression;
139
+ makeNull(): LanguageExpression;
140
140
  getTagType(): idl.IDLType;
141
141
  getRuntimeType(): idl.IDLType;
142
142
  makeTupleAssign(receiver: string, fields: string[]): LanguageStatement;
@@ -527,7 +527,7 @@ export class CJLanguageWriter extends LanguageWriter {
527
527
  makeMapInsert(keyAccessor, key, valueAccessor, value) {
528
528
  return this.makeStatement(this.makeMethodCall(keyAccessor, "add", [this.makeString(key), this.makeString(value)]));
529
529
  }
530
- makeNull(value) {
530
+ makeNull() {
531
531
  return this.makeUndefined();
532
532
  }
533
533
  getTagType() {
@@ -101,7 +101,7 @@ export declare class CppLanguageWriter extends CLikeLanguageWriter {
101
101
  makeCast(expr: LanguageExpression, node: IDLNode, options?: MakeCastOptions): LanguageExpression;
102
102
  makePointerPropertyAccessExpression(expression: string, name: string): CppPointerPropertyAccessExpression;
103
103
  writePrintLog(message: string): void;
104
- makeDefinedCheck(value: string, isTag?: boolean): LanguageExpression;
104
+ makeDefinedCheck(value: string, type?: idl.IDLOptionalType, isTag?: boolean): LanguageExpression;
105
105
  makeSetUnionSelector(value: string, index: string): LanguageStatement;
106
106
  makeSetOptionTag(value: string, tag: LanguageExpression): LanguageStatement;
107
107
  getObjectAccessor(convertor: BaseArgConvertor, value: string, args?: ObjectArgs): string;
@@ -347,7 +347,7 @@ export class CppLanguageWriter extends CLikeLanguageWriter {
347
347
  writePrintLog(message) {
348
348
  this.print(`printf("${message}\\n");`);
349
349
  }
350
- makeDefinedCheck(value, isTag) {
350
+ makeDefinedCheck(value, type, isTag) {
351
351
  return this.makeString(isTag ? `${value} != ${PrimitiveTypeList.UndefinedTag}`
352
352
  : `runtimeType(${value}) != ${PrimitiveTypeList.UndefinedRuntime}`);
353
353
  }
@@ -66,7 +66,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
66
66
  writeTypeDeclaration(decl: idl.IDLTypedef): void;
67
67
  writeConstant(constName: string, constType: idl.IDLType, constVal?: string): void;
68
68
  private writeDeclaration;
69
- makeNull(): LanguageExpression;
69
+ makeNull(type?: idl.IDLOptionalType): LanguageExpression;
70
70
  makeAssign(variableName: string, type: idl.IDLType | undefined, expr: LanguageExpression | undefined, isDeclared?: boolean, isConst?: boolean, options?: MakeAssignOptions): LanguageStatement;
71
71
  makeLambda(signature: MethodSignature, body?: LanguageStatement[]): LanguageExpression;
72
72
  makeThrowError(message: string): LanguageStatement;
@@ -80,7 +80,7 @@ export declare class TSLanguageWriter extends LanguageWriter {
80
80
  getObjectAccessor(convertor: ArgConvertor, value: string, args?: ObjectArgs): string;
81
81
  makeUndefined(): LanguageExpression;
82
82
  makeRuntimeType(rt: RuntimeType): LanguageExpression;
83
- makeDefinedCheck(value: string): LanguageExpression;
83
+ makeDefinedCheck(value: string, type?: idl.IDLOptionalType): LanguageExpression;
84
84
  makeTupleAlloc(option: string): LanguageStatement;
85
85
  makeArrayInit(type: idl.IDLContainerType, size?: number): LanguageExpression;
86
86
  makeClassInit(type: idl.IDLType, paramenters: LanguageExpression[]): LanguageExpression;
@@ -295,7 +295,9 @@ export class TSLanguageWriter extends LanguageWriter {
295
295
  const normalizedArgs = signature.args.map((it, i) => idl.isOptionalType(it) && signature.isArgOptional(i) ? idl.maybeUnwrapOptionalType(it) : it);
296
296
  this.printer.print(`${prefix}${name}${typeParams}(${normalizedArgs.map((it, index) => `${this.escapeKeyword(signature.argName(index))}${signature.isArgOptional(index) ? "?" : ``}: ${this.getNodeName(it)}${signature.argDefault(index) ? ' = ' + signature.argDefault(index) : ""}`).join(", ")})${needReturn ? ": " + this.getNodeName(signature.returnType) : ""}${needBracket ? " {" : ""}`);
297
297
  }
298
- makeNull() {
298
+ makeNull(type) {
299
+ if (type && idl.hasExtAttribute(type, idl.IDLExtendedAttributes.UnionOnlyNull))
300
+ return new StringExpression("null");
299
301
  return new StringExpression("undefined");
300
302
  }
301
303
  makeAssign(variableName, type, expr, isDeclared = true, isConst = true, options) {
@@ -352,7 +354,15 @@ export class TSLanguageWriter extends LanguageWriter {
352
354
  makeRuntimeType(rt) {
353
355
  return this.makeString(`RuntimeType.${RuntimeType[rt]}`);
354
356
  }
355
- makeDefinedCheck(value) {
357
+ makeDefinedCheck(value, type) {
358
+ if (type) {
359
+ if (idl.hasExtAttribute(type, idl.IDLExtendedAttributes.UnionWithNull)) {
360
+ return this.makeString(`${value} !== undefined && ${value} !== null`);
361
+ }
362
+ else if (idl.hasExtAttribute(type, idl.IDLExtendedAttributes.UnionOnlyNull)) {
363
+ return this.makeString(`${value} !== null`);
364
+ }
365
+ }
356
366
  return this.makeString(`${value} !== undefined`);
357
367
  }
358
368
  makeTupleAlloc(option) {
@@ -55,6 +55,8 @@ export declare enum IDLExtendedAttributes {
55
55
  Interfaces = "Interfaces",
56
56
  NativeModule = "NativeModule",
57
57
  Optional = "Optional",
58
+ UnionOnlyNull = "OptionalOnlyNull",
59
+ UnionWithNull = "OptionalWithNull",
58
60
  OriginalEnumMemberName = "OriginalEnumMemberName",
59
61
  OriginalGenericName = "OriginalGenericName",
60
62
  Predefined = "Predefined",
@@ -74,6 +74,8 @@ export var IDLExtendedAttributes;
74
74
  IDLExtendedAttributes["Interfaces"] = "Interfaces";
75
75
  IDLExtendedAttributes["NativeModule"] = "NativeModule";
76
76
  IDLExtendedAttributes["Optional"] = "Optional";
77
+ IDLExtendedAttributes["UnionOnlyNull"] = "OptionalOnlyNull";
78
+ IDLExtendedAttributes["UnionWithNull"] = "OptionalWithNull";
77
79
  IDLExtendedAttributes["OriginalEnumMemberName"] = "OriginalEnumMemberName";
78
80
  IDLExtendedAttributes["OriginalGenericName"] = "OriginalGenericName";
79
81
  IDLExtendedAttributes["Predefined"] = "Predefined";
@@ -51,6 +51,7 @@ export * from "./peer-generation/unions";
51
51
  export * from "./peer-generation/getSuperType";
52
52
  export * from "./transformers/FqnTransformer";
53
53
  export * from "./transformers/GenericTransformer";
54
+ export * from "./transformers/NullTransformer";
54
55
  export * from "./LanguageWriters";
55
56
  export * from "./peer-generation/ReferenceResolver";
56
57
  export * from "./peer-generation/idl/common";
@@ -65,6 +65,7 @@ export * from "./peer-generation/unions";
65
65
  export * from "./peer-generation/getSuperType";
66
66
  export * from "./transformers/FqnTransformer";
67
67
  export * from "./transformers/GenericTransformer";
68
+ export * from "./transformers/NullTransformer";
68
69
  export * from "./LanguageWriters";
69
70
  export * from "./peer-generation/ReferenceResolver";
70
71
  export * from "./peer-generation/idl/common";
@@ -280,10 +280,10 @@ export class PeerLibrary {
280
280
  }
281
281
  typeConvertor(param, type, isOptionalParam = false) {
282
282
  if (isOptionalParam) {
283
- return new OptionConvertor(this, param, idl.maybeUnwrapOptionalType(type));
283
+ return new OptionConvertor(this, param, idl.isOptionalType(type) ? type : idl.createOptionalType(type));
284
284
  }
285
285
  if (idl.isOptionalType(type)) {
286
- return new OptionConvertor(this, param, type.type);
286
+ return new OptionConvertor(this, param, type);
287
287
  }
288
288
  if (idl.isPrimitiveType(type)) {
289
289
  switch (type) {
@@ -420,7 +420,8 @@ export class PeerLibrary {
420
420
  case `Record`:
421
421
  return new CustomTypeConvertor(param, "Record", false, "Record<string, string>");
422
422
  case `Optional`:
423
- return new OptionConvertor(this, param, type.typeArguments[0]);
423
+ throw new Error("Not expected to have reference type named Optional");
424
+ // return new OptionConvertor(this, param, type.typeArguments![0])
424
425
  }
425
426
  return undefined;
426
427
  }
@@ -1,5 +1,13 @@
1
1
  import { ModuleConfiguration } from "../config";
2
2
  import * as idl from "../idl";
3
+ /**
4
+ * Is source submodule of target.
5
+ * Every source is submodule if target is empty string
6
+ * @example `isSubmodule("a.b.c", "a") === true`
7
+ * @example `isSubmodule("a", "a.b.c") === false`
8
+ * @example `isSubmodule("a.b.cd", "a.b.c") === false`
9
+ */
10
+ export declare function isSubmodule(source: string, target: string): boolean;
3
11
  export declare function isInModule(node: idl.IDLNode, module: ModuleConfiguration): boolean;
4
12
  export declare function isInModule(packageName: string, module: ModuleConfiguration): boolean;
5
13
  export declare function isInExternalModule(node: idl.IDLNode): boolean;
@@ -1,10 +1,22 @@
1
1
  import { generatorConfiguration } from "../config";
2
2
  import * as idl from "../idl";
3
3
  const modulesCache = new Map();
4
+ /**
5
+ * Is source submodule of target.
6
+ * Every source is submodule if target is empty string
7
+ * @example `isSubmodule("a.b.c", "a") === true`
8
+ * @example `isSubmodule("a", "a.b.c") === false`
9
+ * @example `isSubmodule("a.b.cd", "a.b.c") === false`
10
+ */
11
+ export function isSubmodule(source, target) {
12
+ return source === target
13
+ || target === ""
14
+ || source.startsWith(target + '.');
15
+ }
4
16
  export function isInModule(nodeOrPackage, module) {
5
17
  if (typeof nodeOrPackage === 'object')
6
18
  return isInModule(idl.getPackageName(nodeOrPackage), module);
7
- return module.packages.some(modulePackage => nodeOrPackage.startsWith(modulePackage));
19
+ return module.packages.some(modulePackage => isSubmodule(nodeOrPackage, modulePackage));
8
20
  }
9
21
  export function isInExternalModule(node) {
10
22
  var _a;
@@ -0,0 +1,4 @@
1
+ import * as idl from "../idl";
2
+ export declare const NULL_REFERENCE = "idlize.stdlib.Null";
3
+ export declare function inplaceNullsAsUndefined(node: idl.IDLNode): void;
4
+ //# sourceMappingURL=NullTransformer.d.ts.map
@@ -0,0 +1,34 @@
1
+ import * as idl from "../idl";
2
+ import { generateSyntheticUnionName } from "../peer-generation/idl/common";
3
+ export const NULL_REFERENCE = "idlize.stdlib.Null";
4
+ export function inplaceNullsAsUndefined(node) {
5
+ idl.updateEachChild(node, (child) => {
6
+ var _a;
7
+ if (idl.isOptionalType(child)) {
8
+ if (idl.isUnionType(child.type) && child.type.types.some(isNullReference)) {
9
+ child.type.types = child.type.types.filter(it => !isNullReference(it));
10
+ child.type.name = generateSyntheticUnionName(child.type.types);
11
+ if (child.type.types.length === 1) {
12
+ child.type = child.type.types[0];
13
+ }
14
+ (_a = child.extendedAttributes) !== null && _a !== void 0 ? _a : (child.extendedAttributes = []);
15
+ child.extendedAttributes.push({ name: idl.IDLExtendedAttributes.UnionWithNull });
16
+ return child;
17
+ }
18
+ }
19
+ else if (idl.isUnionType(child)) {
20
+ if (child.types.some(isNullReference)) {
21
+ child.types = child.types.filter(it => !isNullReference(it));
22
+ child.name = generateSyntheticUnionName(child.types);
23
+ return idl.createOptionalType(child.types.length > 1 ? child : child.types[0], { extendedAttributes: [{
24
+ name: idl.IDLExtendedAttributes.UnionOnlyNull
25
+ }] });
26
+ }
27
+ }
28
+ return child;
29
+ });
30
+ }
31
+ function isNullReference(node) {
32
+ return idl.isReferenceType(node) && node.name === NULL_REFERENCE;
33
+ }
34
+ //# sourceMappingURL=NullTransformer.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idlizer/core",
3
- "version": "2.1.10-arktscgen-3",
3
+ "version": "2.1.10-arktscgen-3a",
4
4
  "description": "",
5
5
  "types": "build/lib/src/index.d.ts",
6
6
  "exports": {
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "keywords": [],
35
35
  "dependencies": {
36
- "@koalaui/interop": "1.7.9",
36
+ "@koalaui/interop": "1.7.10",
37
37
  "typescript": "4.9.5",
38
38
  "@types/node": "^18.0.0"
39
39
  },