@idlizer/core 2.1.0 → 2.1.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/LanguageWriters/ArgConvertors.d.ts +15 -2
- package/build/lib/src/LanguageWriters/ArgConvertors.js +93 -33
- package/build/lib/src/LanguageWriters/LanguageWriter.d.ts +34 -14
- package/build/lib/src/LanguageWriters/LanguageWriter.js +29 -52
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.d.ts +2 -1
- package/build/lib/src/LanguageWriters/convertors/CJConvertors.js +16 -5
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.d.ts +4 -2
- package/build/lib/src/LanguageWriters/convertors/CppConvertors.js +25 -15
- package/build/lib/src/LanguageWriters/convertors/ETSConvertors.js +7 -18
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.d.ts +4 -2
- package/build/lib/src/LanguageWriters/convertors/InteropConvertors.js +13 -3
- package/build/lib/src/LanguageWriters/convertors/JavaConvertors.d.ts +2 -1
- package/build/lib/src/LanguageWriters/convertors/JavaConvertors.js +24 -4
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.d.ts +4 -2
- package/build/lib/src/LanguageWriters/convertors/TSConvertors.js +49 -29
- package/build/lib/src/LanguageWriters/nameConvertor.d.ts +3 -1
- package/build/lib/src/LanguageWriters/nameConvertor.js +5 -1
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.d.ts +21 -10
- package/build/lib/src/LanguageWriters/writers/CJLanguageWriter.js +56 -65
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.d.ts +4 -1
- package/build/lib/src/LanguageWriters/writers/CLikeLanguageWriter.js +1 -1
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.d.ts +16 -10
- package/build/lib/src/LanguageWriters/writers/CppLanguageWriter.js +18 -27
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.d.ts +14 -9
- package/build/lib/src/LanguageWriters/writers/ETSLanguageWriter.js +18 -21
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.d.ts +11 -7
- package/build/lib/src/LanguageWriters/writers/JavaLanguageWriter.js +42 -18
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.d.ts +14 -6
- package/build/lib/src/LanguageWriters/writers/TsLanguageWriter.js +49 -44
- package/build/lib/src/LibraryInterface.d.ts +1 -5
- package/build/lib/src/config.d.ts +1029 -66
- package/build/lib/src/config.js +15 -2
- package/build/lib/src/configDescriber.d.ts +30 -3
- package/build/lib/src/configDescriber.js +99 -1
- package/build/lib/src/from-idl/DtsPrinter.js +32 -20
- package/build/lib/src/from-idl/IDLLinter.d.ts +40 -7
- package/build/lib/src/from-idl/IDLLinter.js +211 -25
- package/build/lib/src/from-idl/common.js +1 -1
- package/build/lib/src/from-idl/deserialize.d.ts +4 -1
- package/build/lib/src/from-idl/deserialize.js +434 -346
- package/build/lib/src/idl.d.ts +28 -18
- package/build/lib/src/idl.js +376 -111
- package/build/lib/src/idlize.d.ts +3 -1
- package/build/lib/src/idlize.js +85 -28
- package/build/lib/src/index.d.ts +6 -3
- package/build/lib/src/index.js +5 -2
- package/build/lib/src/options.d.ts +1 -1
- package/build/lib/src/peer-generation/BuilderClass.d.ts +0 -2
- package/build/lib/src/peer-generation/BuilderClass.js +0 -8
- package/build/lib/src/peer-generation/LayoutManager.d.ts +10 -3
- package/build/lib/src/peer-generation/LayoutManager.js +3 -2
- package/build/lib/src/peer-generation/Materialized.d.ts +1 -1
- package/build/lib/src/peer-generation/Materialized.js +2 -2
- package/build/lib/src/peer-generation/PeerClass.d.ts +3 -8
- package/build/lib/src/peer-generation/PeerClass.js +0 -1
- package/build/lib/src/peer-generation/PeerFile.d.ts +1 -2
- package/build/lib/src/peer-generation/PeerFile.js +1 -1
- package/build/lib/src/peer-generation/PeerLibrary.d.ts +12 -9
- package/build/lib/src/peer-generation/PeerLibrary.js +136 -71
- package/build/lib/src/peer-generation/ReferenceResolver.d.ts +1 -1
- package/build/lib/src/peer-generation/ReferenceResolver.js +2 -2
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.d.ts +1 -0
- package/build/lib/src/peer-generation/idl/IdlNameConvertor.js +6 -2
- package/build/lib/src/peer-generation/idl/common.d.ts +2 -1
- package/build/lib/src/peer-generation/idl/common.js +13 -2
- package/build/lib/src/peer-generation/isEnumType.d.ts +5 -0
- package/build/lib/src/peer-generation/isEnumType.js +29 -0
- package/build/lib/src/peer-generation/isMaterialized.js +25 -8
- package/build/lib/src/peer-generation/modules.d.ts +10 -0
- package/build/lib/src/peer-generation/modules.js +38 -0
- package/build/lib/src/peer-generation/unions.d.ts +3 -2
- package/build/lib/src/peer-generation/unions.js +6 -2
- package/build/lib/src/resolveNamedNode.d.ts +3 -0
- package/build/lib/src/resolveNamedNode.js +105 -0
- package/build/lib/src/util.d.ts +7 -0
- package/build/lib/src/util.js +39 -0
- package/build/lib/src/visitor.d.ts +0 -1
- package/build/lib/src/visitor.js +1 -7
- package/package.json +2 -2
- package/webidl2.js/dist/webidl2.js +35 -7
- package/build/lib/src/configMerge.d.ts +0 -2
- package/build/lib/src/configMerge.js +0 -42
|
@@ -14,9 +14,10 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { warn } from 'console';
|
|
16
16
|
import * as idl from '../idl';
|
|
17
|
+
import { resolveNamedNode } from '../resolveNamedNode';
|
|
17
18
|
import { Language } from '../Language';
|
|
18
19
|
import { createLanguageWriter } from '../LanguageWriters';
|
|
19
|
-
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, } from "../LanguageWriters/ArgConvertors";
|
|
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";
|
|
20
21
|
import { CppNameConvertor } from '../LanguageWriters/convertors/CppConvertors';
|
|
21
22
|
import { CJTypeNameConvertor } from '../LanguageWriters/convertors/CJConvertors';
|
|
22
23
|
import { CppConvertor } from '../LanguageWriters/convertors/CppConvertors';
|
|
@@ -29,6 +30,8 @@ import { LayoutManager } from './LayoutManager';
|
|
|
29
30
|
import { lib, query } from '../library';
|
|
30
31
|
import { isMaterialized } from './isMaterialized';
|
|
31
32
|
import { isInIdlizeInternal } from '../idlize';
|
|
33
|
+
import { isInCurrentModule } from './modules';
|
|
34
|
+
import { generatorConfiguration } from '../config';
|
|
32
35
|
export const lenses = {
|
|
33
36
|
globals: lib.lens(lib.select.files())
|
|
34
37
|
.pipe(lib.select.nodes())
|
|
@@ -42,6 +45,8 @@ export const lenses = {
|
|
|
42
45
|
};
|
|
43
46
|
const next = queue.pop();
|
|
44
47
|
next.forEach(node => {
|
|
48
|
+
if (!isInCurrentModule(node))
|
|
49
|
+
return;
|
|
45
50
|
if (idl.isNamespace(node)) {
|
|
46
51
|
queue.push(node.members);
|
|
47
52
|
}
|
|
@@ -65,11 +70,13 @@ export class PeerLibrary {
|
|
|
65
70
|
return this._cachedIdlLibrary;
|
|
66
71
|
}
|
|
67
72
|
this._cachedIdlLibrary = {
|
|
68
|
-
files: this.files.map(file => file
|
|
73
|
+
files: this.files.map(file => file)
|
|
69
74
|
};
|
|
70
75
|
return this._cachedIdlLibrary;
|
|
71
76
|
}
|
|
72
|
-
get globals() {
|
|
77
|
+
get globals() {
|
|
78
|
+
return query(this.asIDLLibrary(), lenses.globals);
|
|
79
|
+
}
|
|
73
80
|
initSyntheticEntries(file) {
|
|
74
81
|
this._syntheticFile = file;
|
|
75
82
|
}
|
|
@@ -82,18 +89,20 @@ export class PeerLibrary {
|
|
|
82
89
|
get materializedToGenerate() {
|
|
83
90
|
return Array.from(this.materializedClasses.values()).filter(it => it.needBeGenerated);
|
|
84
91
|
}
|
|
85
|
-
constructor(language,
|
|
92
|
+
constructor(language, useMemoM3 = false) {
|
|
86
93
|
this.language = language;
|
|
87
|
-
this.
|
|
94
|
+
this.useMemoM3 = useMemoM3;
|
|
88
95
|
this.layout = LayoutManager.Empty();
|
|
89
96
|
this._syntheticFile = idl.createFile([]);
|
|
90
97
|
this.files = [];
|
|
98
|
+
this.auxFiles = [];
|
|
91
99
|
this.builderClasses = new Map();
|
|
92
100
|
this.materializedClasses = new Map();
|
|
93
101
|
this.name = "";
|
|
94
102
|
this.customComponentMethods = [];
|
|
95
103
|
this.targetNameConvertorInstance = this.createTypeNameConvertor(this.language);
|
|
96
104
|
this.interopNameConvertorInstance = new CppNameConvertor(this);
|
|
105
|
+
this._useFallback = true;
|
|
97
106
|
}
|
|
98
107
|
createLanguageWriter(language) {
|
|
99
108
|
return createLanguageWriter(language !== null && language !== void 0 ? language : this.language, this);
|
|
@@ -138,80 +147,121 @@ export class PeerLibrary {
|
|
|
138
147
|
this.context = context;
|
|
139
148
|
}
|
|
140
149
|
findFileByOriginalFilename(filename) {
|
|
141
|
-
return this.files.find(it => it.
|
|
150
|
+
return this.files.find(it => it.fileName === filename);
|
|
142
151
|
}
|
|
143
152
|
mapType(type) {
|
|
144
153
|
return this.targetNameConvertorInstance.convert(type);
|
|
145
154
|
}
|
|
146
|
-
|
|
147
|
-
|
|
155
|
+
enableCache() {
|
|
156
|
+
this.referenceCache = new Map();
|
|
157
|
+
}
|
|
158
|
+
resolveTypeReference(type, singleStep) {
|
|
159
|
+
var _a, _b;
|
|
160
|
+
if ((_a = this.referenceCache) === null || _a === void 0 ? void 0 : _a.has(type))
|
|
161
|
+
return this.referenceCache.get(type);
|
|
162
|
+
let result = this.resolveNamedNode(type.name.split("."), type.parent);
|
|
163
|
+
if (!singleStep) {
|
|
164
|
+
const seen = new Set;
|
|
165
|
+
while (result) {
|
|
166
|
+
let nextResult = undefined;
|
|
167
|
+
if (idl.isImport(result))
|
|
168
|
+
nextResult = this.resolveImport(result);
|
|
169
|
+
else if (idl.isReferenceType(result))
|
|
170
|
+
nextResult = this.resolveNamedNode(result.name.split("."));
|
|
171
|
+
else if (idl.isTypedef(result) && idl.isReferenceType(result.type))
|
|
172
|
+
nextResult = this.resolveNamedNode(result.type.name.split("."));
|
|
173
|
+
if (!nextResult)
|
|
174
|
+
break;
|
|
175
|
+
if (seen.has(nextResult)) {
|
|
176
|
+
console.warn(`Cyclic referenceType: ${type.name}, seen: [${[...seen.values()].map(idl.getFQName).join(", ")}]`);
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
seen.add(nextResult);
|
|
180
|
+
result = nextResult;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (result && (idl.isImport(result) || idl.isNamespace(result)))
|
|
184
|
+
result = undefined;
|
|
185
|
+
if (result)
|
|
186
|
+
(_b = this.referenceCache) === null || _b === void 0 ? void 0 : _b.set(type, result);
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
disableFallback() {
|
|
190
|
+
this._useFallback = false;
|
|
148
191
|
}
|
|
149
|
-
|
|
150
|
-
const
|
|
192
|
+
resolveNamedNode(target, pov = undefined) {
|
|
193
|
+
const qualifiedName = target.join(".");
|
|
194
|
+
const entry = this._syntheticFile.entries.find(it => it.name === qualifiedName);
|
|
151
195
|
if (entry)
|
|
152
196
|
return entry;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
// One of possible options - `rootEntries = rootEntries.flatMap(it => idl.isNamespace(it) ? it.members : it)` - cause error
|
|
157
|
-
rootEntries !== null && rootEntries !== void 0 ? rootEntries : (rootEntries = this.files.flatMap(it => it.entries));
|
|
158
|
-
if (1 === qualifiedName.length) {
|
|
159
|
-
const predefined = rootEntries.filter(it => isInIdlizeInternal(it));
|
|
160
|
-
const found = predefined.find(it => it.name === qualifiedName[0]);
|
|
197
|
+
if (1 === target.length) {
|
|
198
|
+
const predefined = this.files.flatMap(it => it.entries).filter(isInIdlizeInternal);
|
|
199
|
+
const found = predefined.find(it => it.name === target.at(-1));
|
|
161
200
|
if (found)
|
|
162
201
|
return found;
|
|
163
202
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
for (
|
|
171
|
-
|
|
172
|
-
if (
|
|
173
|
-
|
|
174
|
-
if (qualifiedNamePart === qualifiedName.length - 1) {
|
|
175
|
-
const target = candidates.length == 1
|
|
176
|
-
? candidates[0]
|
|
177
|
-
: candidates.find(it => !idl.hasExtAttribute(it, idl.IDLExtendedAttributes.Import)); // probably the wrong logic here
|
|
178
|
-
if (target && idl.isImport(target)) // Temporary disable Import declarations
|
|
179
|
-
return undefined;
|
|
180
|
-
return target;
|
|
181
|
-
}
|
|
182
|
-
entries = [];
|
|
183
|
-
for (const candidate of candidates) {
|
|
184
|
-
if (idl.isNamespace(candidate))
|
|
185
|
-
entries.push(...candidate.members);
|
|
186
|
-
else if (idl.isEnum(candidate))
|
|
187
|
-
entries.push(...candidate.elements);
|
|
188
|
-
else if (idl.isInterface(candidate))
|
|
189
|
-
entries.push(...candidate.constants, ...candidate.properties, ...candidate.methods);
|
|
190
|
-
}
|
|
203
|
+
const corpus = this.files.concat(this.auxFiles);
|
|
204
|
+
let result = resolveNamedNode(target, pov, corpus);
|
|
205
|
+
if (result && idl.isEntry(result))
|
|
206
|
+
return result;
|
|
207
|
+
if (1 == target.length) {
|
|
208
|
+
const stdScopes = generatorConfiguration().globalPackages.map(it => it.split('.'));
|
|
209
|
+
for (const stdScope of stdScopes) {
|
|
210
|
+
result = resolveNamedNode([...stdScope, ...target], undefined, corpus);
|
|
211
|
+
if (result && idl.isEntry(result))
|
|
212
|
+
return result;
|
|
191
213
|
}
|
|
192
|
-
pointOfViewNamespace = idl.fetchNamespaceFrom(pointOfViewNamespace === null || pointOfViewNamespace === void 0 ? void 0 : pointOfViewNamespace.parent);
|
|
193
214
|
}
|
|
194
215
|
// TODO: remove the next block after namespaces out of quarantine
|
|
195
|
-
if (
|
|
216
|
+
if (this._useFallback) {
|
|
217
|
+
const povAsReadableString = pov
|
|
218
|
+
? `'${idl.getFQName(pov)}'`
|
|
219
|
+
: "[root]";
|
|
220
|
+
// retry from root
|
|
221
|
+
pov = undefined;
|
|
196
222
|
const resolveds = [];
|
|
223
|
+
for (let file of this.files) {
|
|
224
|
+
result = resolveNamedNode([...file.packageClause, ...target], pov, corpus);
|
|
225
|
+
if (result && idl.isEntry(result)) {
|
|
226
|
+
// too much spam
|
|
227
|
+
// console.warn(`WARNING: Type reference '${qualifiedName}' is not resolved from ${povAsReadableString} but resolved from some package '${file.packageClause().join(".")}'`)
|
|
228
|
+
resolveds.push(result);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// and from each namespace
|
|
197
232
|
const traverseNamespaces = (entry) => {
|
|
198
233
|
if (entry && idl.isNamespace(entry) && entry.members.length) {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
234
|
+
const resolved = resolveNamedNode([...idl.getNamespacesPathFor(entry).map(it => it.name), ...target], pov, corpus);
|
|
235
|
+
if (resolved) {
|
|
236
|
+
console.warn(`WARNING: Name '${qualifiedName}' is not resolved from ${povAsReadableString} but resolved from some namespace: '${idl.getNamespacesPathFor(resolved).map(obj => obj.name).join(".")}'`);
|
|
202
237
|
resolveds.push(resolved);
|
|
238
|
+
}
|
|
203
239
|
entry.members.forEach(traverseNamespaces);
|
|
204
240
|
}
|
|
205
241
|
};
|
|
206
242
|
this.files.forEach(file => file.entries.forEach(traverseNamespaces));
|
|
207
|
-
|
|
208
|
-
|
|
243
|
+
for (const resolved of resolveds)
|
|
244
|
+
if (idl.isEntry(resolved))
|
|
245
|
+
return resolved;
|
|
209
246
|
} // end of block to remove
|
|
210
|
-
return undefined;
|
|
247
|
+
return undefined;
|
|
211
248
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
249
|
+
resolveImport(target) {
|
|
250
|
+
let result = this.resolveNamedNode(target.clause);
|
|
251
|
+
if (result) {
|
|
252
|
+
if (idl.isReferenceType(result))
|
|
253
|
+
return this.resolveTypeReference(result);
|
|
254
|
+
if (idl.isImport(result)) {
|
|
255
|
+
if (result == target) {
|
|
256
|
+
console.log("Self-targeted Import?");
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
return this.resolveImport(result);
|
|
260
|
+
}
|
|
261
|
+
if (idl.isEntry(result))
|
|
262
|
+
return result;
|
|
263
|
+
}
|
|
264
|
+
return undefined;
|
|
215
265
|
}
|
|
216
266
|
typeConvertor(param, type, isOptionalParam = false) {
|
|
217
267
|
if (isOptionalParam) {
|
|
@@ -234,6 +284,7 @@ export class PeerLibrary {
|
|
|
234
284
|
case idl.IDLF32Type: return new NumericConvertor(param, type);
|
|
235
285
|
case idl.IDLF64Type: return new NumericConvertor(param, type);
|
|
236
286
|
case idl.IDLBigintType: return new BigIntToU64Convertor(param);
|
|
287
|
+
case idl.IDLSerializerBuffer: new PointerConvertor(param);
|
|
237
288
|
case idl.IDLPointerType: return new PointerConvertor(param);
|
|
238
289
|
case idl.IDLBufferType: return new BufferConvertor(param);
|
|
239
290
|
case idl.IDLBooleanType: return new BooleanConvertor(param);
|
|
@@ -242,16 +293,16 @@ export class PeerLibrary {
|
|
|
242
293
|
case idl.IDLUndefinedType: return new UndefinedConvertor(param);
|
|
243
294
|
case idl.IDLVoidType: return new VoidConvertor(param);
|
|
244
295
|
case idl.IDLUnknownType:
|
|
245
|
-
case idl.IDLAnyType: return new
|
|
296
|
+
case idl.IDLAnyType: return new ObjectConvertor(param, idl.IDLAnyType);
|
|
246
297
|
case idl.IDLDate: return new DateConvertor(param);
|
|
298
|
+
case idl.IDLFunctionType: return new FunctionConvertor(this, param);
|
|
247
299
|
default: throw new Error(`Unconverted primitive ${idl.DebugUtils.debugPrintType(type)}`);
|
|
248
300
|
}
|
|
249
301
|
}
|
|
250
302
|
if (idl.isReferenceType(type)) {
|
|
251
|
-
if (isImportAttr(type))
|
|
252
|
-
return new ImportTypeConvertor(param, this.targetNameConvertorInstance.convert(type));
|
|
253
303
|
// TODO: special cases for interop types.
|
|
254
|
-
|
|
304
|
+
// TODO: this types are not references! NativeModulePrinter must be fixed
|
|
305
|
+
switch (type.name.replaceAll('%TEXT%:', '')) { // this is really bad stub, to fix legacy references
|
|
255
306
|
case 'KBoolean': return new BooleanConvertor(param);
|
|
256
307
|
case 'KInt': return new NumericConvertor(param, idl.IDLI32Type);
|
|
257
308
|
case 'KFloat': return new NumericConvertor(param, idl.IDLF32Type);
|
|
@@ -261,7 +312,12 @@ export class PeerLibrary {
|
|
|
261
312
|
case 'number': return new NumberConvertor(param);
|
|
262
313
|
case 'KPointer': return new PointerConvertor(param);
|
|
263
314
|
}
|
|
315
|
+
if (generatorConfiguration().forceResource.includes(type.name)) {
|
|
316
|
+
return new ObjectConvertor(param, type);
|
|
317
|
+
}
|
|
264
318
|
const decl = this.resolveTypeReference(type);
|
|
319
|
+
if (decl && isImportAttr(decl) || !decl && isImportAttr(type))
|
|
320
|
+
return new ImportTypeConvertor(param, this.targetNameConvertorInstance.convert(type));
|
|
265
321
|
return this.declarationConvertor(param, type, decl);
|
|
266
322
|
}
|
|
267
323
|
if (idl.isUnionType(type)) {
|
|
@@ -280,15 +336,28 @@ export class PeerLibrary {
|
|
|
280
336
|
throw new Error(`Cannot convert: ${type.kind}`);
|
|
281
337
|
}
|
|
282
338
|
declarationConvertor(param, type, declaration) {
|
|
339
|
+
if (generatorConfiguration().forceResource.includes(type.name)) {
|
|
340
|
+
return new ObjectConvertor(param, type);
|
|
341
|
+
}
|
|
283
342
|
let customConv = this.customConvertor(param, type.name, type);
|
|
284
343
|
if (customConv)
|
|
285
344
|
return customConv;
|
|
286
|
-
if (!declaration)
|
|
345
|
+
if (!declaration) {
|
|
287
346
|
return new CustomTypeConvertor(param, this.targetNameConvertorInstance.convert(type), false, this.targetNameConvertorInstance.convert(type)); // assume some predefined type
|
|
347
|
+
}
|
|
288
348
|
const declarationName = declaration.name;
|
|
289
349
|
if (isImportAttr(declaration)) {
|
|
290
350
|
return new ImportTypeConvertor(param, this.targetNameConvertorInstance.convert(type));
|
|
291
351
|
}
|
|
352
|
+
if (idl.isImport(declaration)) {
|
|
353
|
+
const target = this.resolveImport(declaration);
|
|
354
|
+
if (target && idl.isEntry(target))
|
|
355
|
+
return this.declarationConvertor(param, type, target);
|
|
356
|
+
else {
|
|
357
|
+
warn(`Unable to resolve Import ${declaration.clause.join(".")} as ${declaration.name}`);
|
|
358
|
+
return new CustomTypeConvertor(param, declaration.name, false, declaration.name);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
292
361
|
if (idl.isEnum(declaration)) {
|
|
293
362
|
return new EnumConvertor(param, declaration);
|
|
294
363
|
}
|
|
@@ -327,11 +396,11 @@ export class PeerLibrary {
|
|
|
327
396
|
customConvertor(param, typeName, type) {
|
|
328
397
|
switch (typeName) {
|
|
329
398
|
case `Object`:
|
|
330
|
-
return new
|
|
399
|
+
return new ObjectConvertor(param, idl.IDLObjectType);
|
|
331
400
|
case `Date`:
|
|
332
401
|
return new DateConvertor(param);
|
|
333
402
|
case `Function`:
|
|
334
|
-
return new FunctionConvertor(this, param
|
|
403
|
+
return new FunctionConvertor(this, param);
|
|
335
404
|
case `Record`:
|
|
336
405
|
return new CustomTypeConvertor(param, "Record", false, "Record<string, string>");
|
|
337
406
|
case `Optional`:
|
|
@@ -355,18 +424,12 @@ export class PeerLibrary {
|
|
|
355
424
|
case "object":
|
|
356
425
|
case "Object": return ArkCustomObject;
|
|
357
426
|
}
|
|
358
|
-
if (isImportAttr(type)) {
|
|
359
|
-
return ArkCustomObject;
|
|
360
|
-
}
|
|
361
427
|
if (idl.isReferenceType(type)) {
|
|
362
428
|
// TODO: remove all this!
|
|
363
|
-
if (type.name === 'Dimension' || type.name === 'Length') {
|
|
364
|
-
return ArkLength;
|
|
365
|
-
}
|
|
366
429
|
if (type.name === 'Date') {
|
|
367
430
|
return ArkDate;
|
|
368
431
|
}
|
|
369
|
-
if (type.name === 'AnimationRange'
|
|
432
|
+
if (type.name === 'AnimationRange') {
|
|
370
433
|
return ArkCustomObject;
|
|
371
434
|
}
|
|
372
435
|
if (type.name === 'Function') {
|
|
@@ -387,6 +450,9 @@ export class PeerLibrary {
|
|
|
387
450
|
: idl.isTypedef(decl) ? this.toDeclaration(decl.type)
|
|
388
451
|
: decl;
|
|
389
452
|
}
|
|
453
|
+
if (isImportAttr(type)) {
|
|
454
|
+
return ArkCustomObject;
|
|
455
|
+
}
|
|
390
456
|
return type;
|
|
391
457
|
}
|
|
392
458
|
setFileLayout(strategy) {
|
|
@@ -396,7 +462,6 @@ export class PeerLibrary {
|
|
|
396
462
|
export const ArkInt32 = idl.IDLI32Type;
|
|
397
463
|
export const ArkInt64 = idl.IDLI64Type;
|
|
398
464
|
export const ArkFunction = idl.IDLFunctionType;
|
|
399
|
-
export const ArkLength = idl.IDLLengthType;
|
|
400
465
|
export const ArkDate = idl.IDLDate;
|
|
401
466
|
export const ArkCustomObject = idl.IDLCustomObjectType;
|
|
402
467
|
export function cleanPrefix(name, prefix) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as idl from '../idl';
|
|
2
2
|
export interface ReferenceResolver {
|
|
3
|
-
resolveTypeReference(type: idl.IDLReferenceType,
|
|
3
|
+
resolveTypeReference(type: idl.IDLReferenceType, terminalImports?: boolean): idl.IDLEntry | undefined;
|
|
4
4
|
toDeclaration(type: idl.IDLNode): idl.IDLNode;
|
|
5
5
|
}
|
|
6
6
|
export declare function createEmptyReferenceResolver(): ReferenceResolver;
|
|
@@ -25,9 +25,9 @@ export function createEmptyReferenceResolver() {
|
|
|
25
25
|
/** Please do not store any global instances */
|
|
26
26
|
export function createAlternativeReferenceResolver(mainResolver, alternatives) {
|
|
27
27
|
return {
|
|
28
|
-
resolveTypeReference(type,
|
|
28
|
+
resolveTypeReference(type, terminalImports) {
|
|
29
29
|
var _a;
|
|
30
|
-
return (_a = mainResolver.resolveTypeReference(type,
|
|
30
|
+
return (_a = mainResolver.resolveTypeReference(type, terminalImports)) !== null && _a !== void 0 ? _a : alternatives.get(type.name);
|
|
31
31
|
},
|
|
32
32
|
toDeclaration(type) {
|
|
33
33
|
return mainResolver.toDeclaration(type);
|
|
@@ -2,6 +2,7 @@ import * as idl from "../../idl";
|
|
|
2
2
|
import { DeclarationConvertor } from "../../LanguageWriters/nameConvertor";
|
|
3
3
|
import { Language } from "../../Language";
|
|
4
4
|
export declare class DeclarationNameConvertor implements DeclarationConvertor<string> {
|
|
5
|
+
convertImport(decl: idl.IDLImport): string;
|
|
5
6
|
convertInterface(decl: idl.IDLInterface): string;
|
|
6
7
|
convertEnum(decl: idl.IDLEnum): string;
|
|
7
8
|
convertTypedef(decl: idl.IDLTypedef): string;
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
import * as idl from "../../idl";
|
|
16
16
|
import { Language } from "../../Language";
|
|
17
17
|
export class DeclarationNameConvertor {
|
|
18
|
+
convertImport(decl) {
|
|
19
|
+
console.warn("Imports are not implemented yet");
|
|
20
|
+
return decl.name;
|
|
21
|
+
}
|
|
18
22
|
convertInterface(decl) {
|
|
19
23
|
return decl.name;
|
|
20
24
|
}
|
|
@@ -50,10 +54,10 @@ export class TSFeatureNameConvertor extends DeclarationNameConvertor {
|
|
|
50
54
|
TSFeatureNameConvertor.I = new TSFeatureNameConvertor();
|
|
51
55
|
export class ETSDeclarationNameConvertor extends DeclarationNameConvertor {
|
|
52
56
|
convertInterface(decl) {
|
|
53
|
-
return idl.
|
|
57
|
+
return idl.getQualifiedName(decl, "namespace.name");
|
|
54
58
|
}
|
|
55
59
|
convertEnum(decl) {
|
|
56
|
-
return idl.
|
|
60
|
+
return idl.getQualifiedName(decl, "namespace.name");
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
63
|
ETSDeclarationNameConvertor.I = new ETSDeclarationNameConvertor();
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as idl from "../../idl";
|
|
2
2
|
import { Language } from "../../Language";
|
|
3
3
|
export declare function generateSyntheticIdlNodeName(type: idl.IDLType): string;
|
|
4
|
-
export declare function qualifiedName(decl: idl.IDLNode, languageOrDelimiter: Language | string): string;
|
|
4
|
+
export declare function qualifiedName(decl: idl.IDLNode, languageOrDelimiter: Language | string, pattern: idl.QNPattern): string;
|
|
5
5
|
export declare function collapseTypes(types: idl.IDLType[], name?: string): idl.IDLType;
|
|
6
6
|
export declare function generifiedTypeName(refType: idl.IDLReferenceType | undefined, refName?: string): string | undefined;
|
|
7
|
+
export declare function sanitizeGenerics(genericDeclarationString: string): string;
|
|
7
8
|
export declare function generateSyntheticUnionName(types: idl.IDLType[]): string;
|
|
8
9
|
export declare function generateSyntheticFunctionName(parameters: idl.IDLParameter[], returnType: idl.IDLType, isAsync?: boolean): string;
|
|
9
10
|
export declare function isImportAttr(decl: idl.IDLNode): boolean;
|
|
@@ -33,7 +33,7 @@ export function generateSyntheticIdlNodeName(type) {
|
|
|
33
33
|
return `Opt_${generateSyntheticIdlNodeName(type.type)}`;
|
|
34
34
|
throw `Can not compute type name of ${idl.IDLKind[type.kind]}`;
|
|
35
35
|
}
|
|
36
|
-
export function qualifiedName(decl, languageOrDelimiter) {
|
|
36
|
+
export function qualifiedName(decl, languageOrDelimiter, pattern) {
|
|
37
37
|
if (!idl.isNamedNode(decl))
|
|
38
38
|
throw new Error("internal error, name required for no-named node");
|
|
39
39
|
const delimiter = typeof languageOrDelimiter === "string"
|
|
@@ -41,7 +41,7 @@ export function qualifiedName(decl, languageOrDelimiter) {
|
|
|
41
41
|
: (languageOrDelimiter === Language.CPP ? '_' : '.');
|
|
42
42
|
if (!idl.isEntry(decl))
|
|
43
43
|
throw new Error(`Expected to have an IDLEntry, got ${idl.IDLKind[decl.kind]}`);
|
|
44
|
-
return idl.
|
|
44
|
+
return idl.getQualifiedName(decl, pattern).split(".").join(delimiter);
|
|
45
45
|
}
|
|
46
46
|
export function collapseTypes(types, name) {
|
|
47
47
|
const seenNames = new Set();
|
|
@@ -61,6 +61,17 @@ export function generifiedTypeName(refType, refName) {
|
|
|
61
61
|
const typeArgs = (_a = refType.typeArguments) === null || _a === void 0 ? void 0 : _a.map(it => idl.printType(it)).join(",");
|
|
62
62
|
return `${refName ? refName : refType.name}${typeArgs ? `<${typeArgs}>` : ``}`;
|
|
63
63
|
}
|
|
64
|
+
export function sanitizeGenerics(genericDeclarationString) {
|
|
65
|
+
const eqIdx = genericDeclarationString.indexOf('=');
|
|
66
|
+
if (eqIdx !== -1) {
|
|
67
|
+
genericDeclarationString = genericDeclarationString.substring(0, eqIdx);
|
|
68
|
+
}
|
|
69
|
+
const extendsIdx = genericDeclarationString.indexOf('extends');
|
|
70
|
+
if (extendsIdx !== -1) {
|
|
71
|
+
genericDeclarationString = genericDeclarationString.substring(0, extendsIdx);
|
|
72
|
+
}
|
|
73
|
+
return genericDeclarationString.trim();
|
|
74
|
+
}
|
|
64
75
|
export function generateSyntheticUnionName(types) {
|
|
65
76
|
return `Union_${types.map(it => generateSyntheticIdlNodeName(it)).join("_").replaceAll(".", "_")}`;
|
|
66
77
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ReferenceResolver } from './ReferenceResolver';
|
|
2
|
+
import { IDLType } from "../idl";
|
|
3
|
+
export declare function isEnumType(type: IDLType, resolver: ReferenceResolver): boolean;
|
|
4
|
+
export declare function isStringEnumType(type: IDLType, resolver: ReferenceResolver): boolean;
|
|
5
|
+
//# sourceMappingURL=isEnumType.d.ts.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 Huawei Device Co., Ltd.
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
* See the License for the specific language governing permissions and
|
|
13
|
+
* limitations under the License.
|
|
14
|
+
*/
|
|
15
|
+
import { isReferenceType, isEnum, isStringEnum } from "../idl";
|
|
16
|
+
export function isEnumType(type, resolver) {
|
|
17
|
+
return toEnum(type, resolver) != undefined;
|
|
18
|
+
}
|
|
19
|
+
export function isStringEnumType(type, resolver) {
|
|
20
|
+
const enumNode = toEnum(type, resolver);
|
|
21
|
+
return enumNode ? isStringEnum(enumNode) : false;
|
|
22
|
+
}
|
|
23
|
+
function toEnum(type, resolver) {
|
|
24
|
+
if (!isReferenceType(type))
|
|
25
|
+
return undefined;
|
|
26
|
+
const resolved = resolver.resolveTypeReference(type);
|
|
27
|
+
return resolved && isEnum(resolved) ? resolved : undefined;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=isEnumType.js.map
|
|
@@ -16,20 +16,27 @@ import { generatorConfiguration } from '../config';
|
|
|
16
16
|
import * as idl from '../idl';
|
|
17
17
|
import { isBuilderClass } from './BuilderClass';
|
|
18
18
|
export function isMaterialized(declaration, resolver) {
|
|
19
|
+
var _a;
|
|
19
20
|
if (!idl.isInterfaceSubkind(declaration) && !idl.isClassSubkind(declaration))
|
|
20
21
|
return false;
|
|
21
22
|
if (idl.isHandwritten(declaration) || isBuilderClass(declaration))
|
|
22
23
|
return false;
|
|
23
|
-
|
|
24
|
-
if (declaration.name == forceMaterialized)
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
if (generatorConfiguration().forceCallback.includes(declaration.name)) {
|
|
24
|
+
if (generatorConfiguration().forceResource.includes(declaration.name)) {
|
|
28
25
|
return false;
|
|
29
26
|
}
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
if (generatorConfiguration().forceMaterialized.includes(declaration.name)) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
for (const ignore of ["Attribute", "Method", "Interface"]) {
|
|
31
|
+
if (declaration.name.endsWith(ignore)) {
|
|
32
32
|
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (((_a = generatorConfiguration().forceCallback.get(declaration.name)) === null || _a === void 0 ? void 0 : _a.length) === 0) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (generatorConfiguration().ignoreMaterialized.includes(declaration.name)) {
|
|
39
|
+
return false;
|
|
33
40
|
}
|
|
34
41
|
// A materialized class is a class or an interface with methods
|
|
35
42
|
// excluding components and related classes
|
|
@@ -46,11 +53,21 @@ export function isMaterialized(declaration, resolver) {
|
|
|
46
53
|
}
|
|
47
54
|
return false;
|
|
48
55
|
}
|
|
56
|
+
function isSelfReturnMethod(method, entry, resolver) {
|
|
57
|
+
if (!idl.isReferenceType(method.returnType)) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
const found = resolver.resolveTypeReference(method.returnType);
|
|
61
|
+
if (!found) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
return idl.getFQName(found) === idl.getFQName(entry);
|
|
65
|
+
}
|
|
49
66
|
export function isStaticMaterialized(declaration, resolver) {
|
|
50
67
|
if (isMaterialized(declaration, resolver)) {
|
|
51
68
|
if (declaration.properties.length || declaration.constructors.length)
|
|
52
69
|
return false;
|
|
53
|
-
if (!declaration.methods.every(it => it.isStatic))
|
|
70
|
+
if (!declaration.methods.every(it => it.isStatic && !isSelfReturnMethod(it, declaration, resolver)))
|
|
54
71
|
return false;
|
|
55
72
|
if (idl.hasSuperType(declaration)) {
|
|
56
73
|
const superType = resolver.resolveTypeReference(idl.getSuperType(declaration));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ModuleConfiguration } from "../config";
|
|
2
|
+
import * as idl from "../idl";
|
|
3
|
+
export declare function isInModule(node: idl.IDLNode, module: ModuleConfiguration): boolean;
|
|
4
|
+
export declare function isInModule(packageName: string, module: ModuleConfiguration): boolean;
|
|
5
|
+
export declare function getModuleFor(node: idl.IDLNode): ModuleConfiguration;
|
|
6
|
+
export declare function getModuleFor(packageName: string): ModuleConfiguration;
|
|
7
|
+
export declare function currentModule(): ModuleConfiguration;
|
|
8
|
+
export declare function isInCurrentModule(node: idl.IDLNode): boolean;
|
|
9
|
+
export declare function isInCurrentModule(packageName: string): boolean;
|
|
10
|
+
//# sourceMappingURL=modules.d.ts.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { generatorConfiguration } from "../config";
|
|
2
|
+
import * as idl from "../idl";
|
|
3
|
+
export function isInModule(nodeOrPackage, module) {
|
|
4
|
+
if (typeof nodeOrPackage === 'object')
|
|
5
|
+
return isInModule(idl.getPackageName(nodeOrPackage), module);
|
|
6
|
+
return module.packages.some(modulePackage => nodeOrPackage.startsWith(modulePackage));
|
|
7
|
+
}
|
|
8
|
+
export function getModuleFor(nodeOrPackage) {
|
|
9
|
+
if (typeof nodeOrPackage === "object")
|
|
10
|
+
return getModuleFor(idl.getPackageName(nodeOrPackage));
|
|
11
|
+
const packageName = nodeOrPackage;
|
|
12
|
+
const config = generatorConfiguration();
|
|
13
|
+
const applicableModules = [...config.modules.values()].filter(module => isInModule(packageName, module));
|
|
14
|
+
if (applicableModules.length === 0) {
|
|
15
|
+
if (nodeOrPackage === '') {
|
|
16
|
+
console.error("WARNING: use current module for empty package");
|
|
17
|
+
return currentModule();
|
|
18
|
+
}
|
|
19
|
+
throw new Error(`Package ${packageName} is not listed in any module`);
|
|
20
|
+
}
|
|
21
|
+
if (applicableModules.length > 1)
|
|
22
|
+
throw new Error(`Package ${packageName} listed in ${applicableModules.length} packages: ${applicableModules.map(it => it.name).join(", ")}`);
|
|
23
|
+
return applicableModules[0];
|
|
24
|
+
}
|
|
25
|
+
export function currentModule() {
|
|
26
|
+
const conf = generatorConfiguration();
|
|
27
|
+
const result = conf.modules.get(conf.moduleName);
|
|
28
|
+
if (!result)
|
|
29
|
+
throw new Error(`Can not determine current module configuration ${conf.moduleName}`);
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
export function isInCurrentModule(nodeOrPackage) {
|
|
33
|
+
if (typeof nodeOrPackage === 'string')
|
|
34
|
+
return isInModule(nodeOrPackage, currentModule());
|
|
35
|
+
else
|
|
36
|
+
return isInModule(nodeOrPackage, currentModule());
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=modules.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TypeConvertor } from "../LanguageWriters";
|
|
2
|
-
import { IDLContainerType, IDLOptionalType, IDLPrimitiveType, IDLReferenceType, IDLType, IDLTypeParameterType, IDLUnionType } from '../idl';
|
|
2
|
+
import { IDLImport, IDLContainerType, IDLOptionalType, IDLPrimitiveType, IDLReferenceType, IDLType, IDLTypeParameterType, IDLUnionType } from '../idl';
|
|
3
3
|
import { LanguageExpression, LanguageWriter } from "../LanguageWriters/LanguageWriter";
|
|
4
4
|
import { ArgConvertor } from "../LanguageWriters/ArgConvertors";
|
|
5
5
|
import { LibraryInterface } from "../LibraryInterface";
|
|
@@ -7,11 +7,12 @@ import { ReferenceResolver } from "./ReferenceResolver";
|
|
|
7
7
|
export declare class UnionFlattener implements TypeConvertor<IDLType[]> {
|
|
8
8
|
private resolver;
|
|
9
9
|
constructor(resolver: ReferenceResolver);
|
|
10
|
+
convertImport(type: IDLImport): IDLType[];
|
|
10
11
|
convertUnion(type: IDLUnionType): IDLType[];
|
|
11
12
|
convertTypeReference(type: IDLReferenceType): IDLType[];
|
|
12
13
|
convertOptional(type: IDLOptionalType): IDLType[];
|
|
13
14
|
convertContainer(type: IDLContainerType): IDLType[];
|
|
14
|
-
|
|
15
|
+
convertTypeReferenceAsImport(type: IDLReferenceType, importClause: string): IDLType[];
|
|
15
16
|
convertPrimitiveType(type: IDLPrimitiveType): IDLType[];
|
|
16
17
|
convertTypeParameter(type: IDLTypeParameterType): IDLType[];
|
|
17
18
|
}
|