@idlizer/core 2.0.32 → 2.0.33

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.
@@ -147,13 +147,14 @@ export declare enum FieldModifier {
147
147
  export declare enum MethodModifier {
148
148
  PUBLIC = 0,
149
149
  PRIVATE = 1,
150
- STATIC = 2,
151
- NATIVE = 3,
152
- INLINE = 4,
153
- GETTER = 5,
154
- SETTER = 6,
155
- PROTECTED = 7,
156
- FREE = 8
150
+ PROTECTED = 2,
151
+ STATIC = 3,
152
+ NATIVE = 4,
153
+ INLINE = 5,
154
+ GETTER = 6,
155
+ SETTER = 7,
156
+ THROWS = 8,
157
+ FREE = 9
157
158
  }
158
159
  export declare enum ClassModifier {
159
160
  PUBLIC = 0,
@@ -214,6 +215,7 @@ export declare abstract class LanguageWriter {
214
215
  printer: IndentedPrinter;
215
216
  resolver: ReferenceResolver;
216
217
  language: Language;
218
+ protected namespaceStack: string[];
217
219
  constructor(printer: IndentedPrinter, resolver: ReferenceResolver, // TODO make protected again
218
220
  language: Language);
219
221
  indentDepth(): number;
@@ -309,13 +309,14 @@ export var MethodModifier;
309
309
  (function (MethodModifier) {
310
310
  MethodModifier[MethodModifier["PUBLIC"] = 0] = "PUBLIC";
311
311
  MethodModifier[MethodModifier["PRIVATE"] = 1] = "PRIVATE";
312
- MethodModifier[MethodModifier["STATIC"] = 2] = "STATIC";
313
- MethodModifier[MethodModifier["NATIVE"] = 3] = "NATIVE";
314
- MethodModifier[MethodModifier["INLINE"] = 4] = "INLINE";
315
- MethodModifier[MethodModifier["GETTER"] = 5] = "GETTER";
316
- MethodModifier[MethodModifier["SETTER"] = 6] = "SETTER";
317
- MethodModifier[MethodModifier["PROTECTED"] = 7] = "PROTECTED";
318
- MethodModifier[MethodModifier["FREE"] = 8] = "FREE";
312
+ MethodModifier[MethodModifier["PROTECTED"] = 2] = "PROTECTED";
313
+ MethodModifier[MethodModifier["STATIC"] = 3] = "STATIC";
314
+ MethodModifier[MethodModifier["NATIVE"] = 4] = "NATIVE";
315
+ MethodModifier[MethodModifier["INLINE"] = 5] = "INLINE";
316
+ MethodModifier[MethodModifier["GETTER"] = 6] = "GETTER";
317
+ MethodModifier[MethodModifier["SETTER"] = 7] = "SETTER";
318
+ MethodModifier[MethodModifier["THROWS"] = 8] = "THROWS";
319
+ MethodModifier[MethodModifier["FREE"] = 9] = "FREE";
319
320
  })(MethodModifier || (MethodModifier = {}));
320
321
  export var ClassModifier;
321
322
  (function (ClassModifier) {
@@ -396,6 +397,7 @@ export class LanguageWriter {
396
397
  this.printer = printer;
397
398
  this.resolver = resolver;
398
399
  this.language = language;
400
+ this.namespaceStack = [];
399
401
  }
400
402
  indentDepth() {
401
403
  return this.printer.indentDepth();
@@ -731,6 +733,7 @@ export class LanguageWriter {
731
733
  * Writes closing brace of namespace block and removes one level of indent
732
734
  */
733
735
  popNamespace(ident = true) {
736
+ this.namespaceStack.pop();
734
737
  if (ident)
735
738
  this.popIndent();
736
739
  this.print(`}`);
@@ -2,7 +2,6 @@ import * as idl from "../../idl";
2
2
  import { TSTypeNameConvertor } from "./TSConvertors";
3
3
  export declare class ETSTypeNameConvertor extends TSTypeNameConvertor {
4
4
  convertTypeReference(type: idl.IDLReferenceType): string;
5
- convertEnum(node: idl.IDLEnum): string;
6
5
  convertContainer(type: idl.IDLContainerType): string;
7
6
  convertPrimitiveType(type: idl.IDLPrimitiveType): string;
8
7
  protected productType(decl: idl.IDLInterface, isTuple: boolean, includeFieldNames: boolean): string;
@@ -40,13 +40,6 @@ export class ETSTypeNameConvertor extends TSTypeNameConvertor {
40
40
  }
41
41
  return typeName;
42
42
  }
43
- convertEnum(node) {
44
- let ns = idl.getNamespaceName(node).split('.').join('_');
45
- if (ns !== '') {
46
- ns += '_';
47
- }
48
- return ns + node.name;
49
- }
50
43
  convertContainer(type) {
51
44
  if (idl.IDLContainerUtils.isSequence(type)) {
52
45
  switch (type.elementType[0]) {
@@ -25,10 +25,10 @@ export class TSTypeNameConvertor {
25
25
  return node.name;
26
26
  }
27
27
  convertInterface(node) {
28
- return node.name;
28
+ return idl.getFQName(node);
29
29
  }
30
30
  convertEnum(node) {
31
- return node.name;
31
+ return idl.getFQName(node);
32
32
  }
33
33
  convertTypedef(node) {
34
34
  return node.name;
@@ -63,7 +63,8 @@ export class ArkTSEnumEntityStatement {
63
63
  this.isExport = isExport;
64
64
  }
65
65
  write(writer) {
66
- const enumName = convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), this.enumEntity);
66
+ let enumName = convertDeclaration(createDeclarationNameConvertor(Language.ARKTS), this.enumEntity);
67
+ enumName = enumName.split('.').at(-1);
67
68
  const members = this.enumEntity.elements
68
69
  .flatMap((member, index) => {
69
70
  var _a;
@@ -93,7 +94,10 @@ export class ArkTSEnumEntityStatement {
93
94
  }
94
95
  return res;
95
96
  });
97
+ const nss = idl.getNamespacesPathFor(this.enumEntity);
98
+ nss.forEach(it => writer.pushNamespace(it.name));
96
99
  writer.writeEnum(enumName, members);
100
+ nss.forEach(() => writer.popNamespace());
97
101
  }
98
102
  }
99
103
  export class ETSLambdaExpression extends LambdaExpression {
@@ -124,6 +124,7 @@ export class TSLanguageWriter extends LanguageWriter {
124
124
  }
125
125
  maybeSemicolon() { return ""; }
126
126
  pushNamespace(namespace, ident = true) {
127
+ this.namespaceStack.push(namespace);
127
128
  this.print(`export namespace ${namespace} {`);
128
129
  if (ident)
129
130
  this.pushIndent();
@@ -133,7 +134,14 @@ export class TSLanguageWriter extends LanguageWriter {
133
134
  return new TSLanguageWriter(new IndentedPrinter(), (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : this.resolver, this.typeConvertor, this.language);
134
135
  }
135
136
  getNodeName(type) {
136
- return this.typeConvertor.convert(type);
137
+ // just stub.
138
+ // language writers and name convertors are subject to rework for namespaces
139
+ const row = this.typeConvertor.convert(type);
140
+ const nsPrefix = this.namespaceStack.join('.') + '.';
141
+ if (row.startsWith(nsPrefix)) {
142
+ return row.substring(nsPrefix.length);
143
+ }
144
+ return row;
137
145
  }
138
146
  writeClass(name, op, superClass, interfaces, generics, isDeclared, isAbstract) {
139
147
  let extendsClause = superClass ? ` extends ${superClass}` : '';
@@ -11,7 +11,7 @@ export declare class CustomPrintVisitor {
11
11
  printMetadata(node: IDLEnum): void;
12
12
  printConstant(node: IDLConstant): void;
13
13
  printInterface(node: IDLInterface): void;
14
- printMethod(node: IDLMethod | IDLConstructor | IDLCallable, isGlobal?: boolean): void;
14
+ printMethod(node: IDLMethod | IDLConstructor | IDLCallable, forceAsFree?: boolean): void;
15
15
  paramText(paramOrTag: IDLParameter | SignatureTag): string;
16
16
  printProperty(node: IDLProperty): void;
17
17
  printEnum(node: IDLEnum): void;
@@ -17,6 +17,7 @@ import { IDLEntity, IDLKind, getExtAttribute, getVerbatimDts, hasExtAttribute, i
17
17
  import * as webidl2 from "webidl2";
18
18
  import { resolveSyntheticType, toIDLNode } from "./deserialize";
19
19
  import { Language } from "../Language";
20
+ import { warn } from "../util";
20
21
  export class CustomPrintVisitor {
21
22
  constructor(resolver, language) {
22
23
  this.resolver = resolver;
@@ -136,8 +137,7 @@ export class CustomPrintVisitor {
136
137
  this.print("}");
137
138
  }
138
139
  }
139
- // TODO: namespace-related-to-rework: drop 'isGlobal'
140
- printMethod(node, isGlobal = false) {
140
+ printMethod(node, forceAsFree = false) {
141
141
  const returnType = node.returnType && !(isConstructor(node) && this.currentInterface.subkind === IDLInterfaceSubkind.Class)
142
142
  ? `: ${this.printTypeForTS(node.returnType, true)}` : "";
143
143
  const name = isConstructor(node)
@@ -146,12 +146,14 @@ export class CustomPrintVisitor {
146
146
  const typeParams = (node.typeParameters && node.typeParameters.length > 0) ? `<${node.typeParameters.join(",")}>` : "";
147
147
  let preamble = "";
148
148
  if (!isCallable(node)) {
149
- const isStatic = isMethod(node) && node.isStatic && !node.isFree;
149
+ let isStatic = isMethod(node) && node.isStatic;
150
150
  const isProtected = hasExtAttribute(node, IDLExtendedAttributes.Protected);
151
151
  const isOptional = isMethod(node) && node.isOptional;
152
- const isFree = isMethod(node) && node.isFree;
153
- if (isGlobal && !isFree) // TODO: namespace-related-to-rework
154
- throw new Error("internal error");
152
+ let isFree = isMethod(node) && node.isFree;
153
+ if (forceAsFree) {
154
+ isStatic = false;
155
+ isFree = true;
156
+ }
155
157
  const inNamespace = getNamespacesPathFor(node).length > 0;
156
158
  preamble = `${isFree ? `${isInNamespace(node) ? "" : "declare "}function ` : ""}${isProtected ? "protected " : ""}${isStatic ? "static " : ""}${name}${isOptional ? "?" : ""}`;
157
159
  }
@@ -209,7 +211,8 @@ export class CustomPrintVisitor {
209
211
  let definition = this.resolver(createReferenceType(node));
210
212
  // TODO: handle namespace case better!
211
213
  // TODO: namespace-related-to-rework
212
- throw new Error("not implemented yet");
214
+ //throw new Error("not implemented yet")
215
+ warn("Typedef-with-Import is not implemented yet");
213
216
  // if (definition && !isTypedef(definition) && !hasExtAttribute(definition, IDLExtendedAttributes.Namespace)) {
214
217
  // console.log(`Has better definition for ${node.name}: ${definition.fileName} ${definition.kind}`)
215
218
  // return
@@ -59,6 +59,7 @@ export declare enum IDLExtendedAttributes {
59
59
  Predefined = "Predefined",
60
60
  Protected = "Protected",
61
61
  Synthetic = "Synthetic",
62
+ Throws = "Throws",
62
63
  TSType = "TSType",
63
64
  TypeArguments = "TypeArguments",
64
65
  TypeParameters = "TypeParameters",
@@ -79,6 +79,7 @@ export var IDLExtendedAttributes;
79
79
  IDLExtendedAttributes["Predefined"] = "Predefined";
80
80
  IDLExtendedAttributes["Protected"] = "Protected";
81
81
  IDLExtendedAttributes["Synthetic"] = "Synthetic";
82
+ IDLExtendedAttributes["Throws"] = "Throws";
82
83
  IDLExtendedAttributes["TSType"] = "TSType";
83
84
  IDLExtendedAttributes["TypeArguments"] = "TypeArguments";
84
85
  IDLExtendedAttributes["TypeParameters"] = "TypeParameters";
@@ -12,6 +12,7 @@
12
12
  * See the License for the specific language governing permissions and
13
13
  * limitations under the License.
14
14
  */
15
+ import { generatorTypePrefix } from "../config";
15
16
  import { mangleMethodName, MethodModifier } from "../LanguageWriters/LanguageWriter";
16
17
  import { capitalize, isDefined } from "../util";
17
18
  import { PrimitiveTypesInstance } from "./PrimitiveType";
@@ -69,13 +70,16 @@ export class PeerMethod {
69
70
  return !((_a = this.method.modifiers) === null || _a === void 0 ? void 0 : _a.includes(MethodModifier.STATIC));
70
71
  }
71
72
  generateAPIParameters(converter) {
73
+ var _a;
72
74
  const args = this.argAndOutConvertors.map(it => {
73
75
  let isPointer = it.isPointerType();
74
76
  return `${isPointer ? "const " : ""}${converter.convert(it.nativeType())}${isPointer ? "*" : ""} ${it.param}`;
75
77
  });
76
78
  const receiver = this.generateReceiver();
77
79
  if (receiver)
78
- return [`${receiver.argType} ${receiver.argName}`, ...args];
80
+ args.unshift(`${receiver.argType} ${receiver.argName}`);
81
+ if ((_a = this.method.modifiers) === null || _a === void 0 ? void 0 : _a.includes(MethodModifier.THROWS))
82
+ args.unshift(`${generatorTypePrefix()}VMContext vmContext`);
79
83
  return args;
80
84
  }
81
85
  generateReceiver() {
@@ -53,15 +53,16 @@ export class ETSDeclarationNameConvertor extends DeclarationNameConvertor {
53
53
  return idl.getFQName(decl);
54
54
  }
55
55
  convertEnum(decl) {
56
- const namespace = idl.getNamespacesPathFor(decl).map(it => it.name).join('_');
57
- return `${namespace ? `${namespace}_` : ``}${decl.name}`;
56
+ return idl.getFQName(decl);
58
57
  }
59
58
  }
60
59
  ETSDeclarationNameConvertor.I = new ETSDeclarationNameConvertor();
61
60
  export class ETSFeatureNameConvertor extends DeclarationNameConvertor {
62
61
  convertEnum(decl) {
63
- const namespace = idl.getNamespacesPathFor(decl).map(it => it.name).join('');
64
- return `${namespace ? `${namespace}_` : ``}${decl.name}`;
62
+ const namespace = idl.getNamespacesPathFor(decl).map(it => it.name);
63
+ if (namespace.length > 0)
64
+ return namespace[0];
65
+ return decl.name;
65
66
  }
66
67
  }
67
68
  ETSFeatureNameConvertor.I = new ETSFeatureNameConvertor();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idlizer/core",
3
- "version": "2.0.32",
3
+ "version": "2.0.33",
4
4
  "description": "",
5
5
  "types": "build/lib/src/index.d.ts",
6
6
  "exports": {