@xlr-lib/xlr-converters 0.1.1-next.0 → 0.1.1-next.2
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/bin/run +8 -0
- package/dist/cjs/index.cjs +124 -17
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/index.legacy-esm.js +123 -17
- package/dist/index.mjs +123 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -14
- package/src/__tests__/__snapshots__/player.test.ts.snap +25 -25
- package/src/__tests__/__snapshots__/ts-to-common.test.ts.snap +2 -2
- package/src/__tests__/common-to-ts.test.ts +1 -1
- package/src/helpers/converter.ts +44 -0
- package/src/helpers/writeManifest.ts +45 -0
- package/src/index.ts +6 -4
- package/src/{ts-to-xlr.ts → ts/ts-to-xlr.ts} +94 -18
- package/src/{xlr-to-ts.ts → ts/xlr-to-ts.ts} +1 -1
- package/types/helpers/converter.d.ts +5 -0
- package/types/helpers/writeManifest.d.ts +3 -0
- package/types/index.d.ts +6 -4
- /package/types/{ts-to-xlr.d.ts → ts/ts-to-xlr.d.ts} +0 -0
- /package/types/{xlr-to-ts.d.ts → ts/xlr-to-ts.d.ts} +0 -0
package/bin/run
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const converter = require("../dist/index.mjs")
|
|
3
|
+
const input = process.argv[2]
|
|
4
|
+
const output = process.argv[3]
|
|
5
|
+
const primitives = process.argv[4].split(',')
|
|
6
|
+
console.log(primitives)
|
|
7
|
+
console.log(typeof primitives)
|
|
8
|
+
converter.converter(input, output, primitives)
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -32,11 +32,13 @@ var src_exports = {};
|
|
|
32
32
|
__export(src_exports, {
|
|
33
33
|
ConversionError: () => ConversionError,
|
|
34
34
|
TSWriter: () => TSWriter,
|
|
35
|
-
TsConverter: () => TsConverter
|
|
35
|
+
TsConverter: () => TsConverter,
|
|
36
|
+
converter: () => converter,
|
|
37
|
+
writeManifest: () => writeManifest
|
|
36
38
|
});
|
|
37
39
|
module.exports = __toCommonJS(src_exports);
|
|
38
40
|
|
|
39
|
-
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts-to-xlr.ts
|
|
41
|
+
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/ts-to-xlr.ts
|
|
40
42
|
var import_typescript = __toESM(require("typescript"));
|
|
41
43
|
var import_xlr_utils = require("@xlr-lib/xlr-utils");
|
|
42
44
|
|
|
@@ -51,10 +53,16 @@ var ConversionError = class _ConversionError extends Error {
|
|
|
51
53
|
}
|
|
52
54
|
};
|
|
53
55
|
|
|
54
|
-
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts-to-xlr.ts
|
|
56
|
+
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/ts-to-xlr.ts
|
|
55
57
|
function isMappedTypeNode(x) {
|
|
56
58
|
return ["Pick", "Omit", "Required", "Partial", "Exclude"].includes(x);
|
|
57
59
|
}
|
|
60
|
+
function getPropertyNameText(name) {
|
|
61
|
+
if (import_typescript.default.isIdentifier(name) || import_typescript.default.isStringLiteral(name) || import_typescript.default.isNumericLiteral(name)) {
|
|
62
|
+
return name.text;
|
|
63
|
+
}
|
|
64
|
+
return name.getText();
|
|
65
|
+
}
|
|
58
66
|
var AnyTypeNode = {
|
|
59
67
|
type: "any"
|
|
60
68
|
};
|
|
@@ -364,6 +372,15 @@ var TsConverter = class {
|
|
|
364
372
|
or: [...elements.elementTypes.map((element) => element.type)]
|
|
365
373
|
};
|
|
366
374
|
}
|
|
375
|
+
const effectiveType = this.context.typeChecker.getTypeAtLocation(node);
|
|
376
|
+
const syntheticType = this.context.typeChecker.typeToTypeNode(
|
|
377
|
+
effectiveType,
|
|
378
|
+
node,
|
|
379
|
+
import_typescript.default.NodeBuilderFlags.NoTruncation
|
|
380
|
+
);
|
|
381
|
+
if (syntheticType) {
|
|
382
|
+
return this.tsNodeToType(syntheticType);
|
|
383
|
+
}
|
|
367
384
|
this.context.throwError(
|
|
368
385
|
`Error: could not solve IndexedAccessType: ${node.getFullText()}`
|
|
369
386
|
);
|
|
@@ -390,6 +407,9 @@ var TsConverter = class {
|
|
|
390
407
|
);
|
|
391
408
|
}
|
|
392
409
|
tsLiteralToType(node) {
|
|
410
|
+
if (import_typescript.default.isAsExpression(node)) {
|
|
411
|
+
return this.tsLiteralToType(node.expression);
|
|
412
|
+
}
|
|
393
413
|
if (import_typescript.default.isNumericLiteral(node)) {
|
|
394
414
|
return {
|
|
395
415
|
type: "number",
|
|
@@ -449,8 +469,8 @@ var TsConverter = class {
|
|
|
449
469
|
additionalProperties: false
|
|
450
470
|
};
|
|
451
471
|
node.properties.forEach((property) => {
|
|
452
|
-
if (import_typescript.default.isPropertyAssignment(property)) {
|
|
453
|
-
const propertyName = property.name
|
|
472
|
+
if (import_typescript.default.isPropertyAssignment(property) && property.name) {
|
|
473
|
+
const propertyName = getPropertyNameText(property.name);
|
|
454
474
|
ret.properties[propertyName] = {
|
|
455
475
|
required: true,
|
|
456
476
|
node: this.tsLiteralToType(property.initializer)
|
|
@@ -545,7 +565,7 @@ var TsConverter = class {
|
|
|
545
565
|
};
|
|
546
566
|
node.members.forEach((member) => {
|
|
547
567
|
if (import_typescript.default.isPropertySignature(member) && member.type) {
|
|
548
|
-
const name = member.name
|
|
568
|
+
const name = getPropertyNameText(member.name);
|
|
549
569
|
ret.properties[name] = {
|
|
550
570
|
required: !(0, import_xlr_utils.isOptionalProperty)(member),
|
|
551
571
|
node: {
|
|
@@ -717,8 +737,10 @@ var TsConverter = class {
|
|
|
717
737
|
}
|
|
718
738
|
resolveRefNode(node) {
|
|
719
739
|
let refName;
|
|
740
|
+
let namespace;
|
|
720
741
|
if (node.typeName.kind === import_typescript.default.SyntaxKind.QualifiedName) {
|
|
721
|
-
|
|
742
|
+
namespace = node.typeName.left.getText();
|
|
743
|
+
refName = node.typeName.right.getText();
|
|
722
744
|
} else {
|
|
723
745
|
refName = node.typeName.text;
|
|
724
746
|
}
|
|
@@ -764,21 +786,36 @@ var TsConverter = class {
|
|
|
764
786
|
if (isMappedTypeNode(refName)) {
|
|
765
787
|
return this.makeMappedType(refName, node);
|
|
766
788
|
}
|
|
789
|
+
if ((0, import_xlr_utils.isTypeScriptLibType)(node, this.context.typeChecker)) {
|
|
790
|
+
return this.makeBasicRefNode(node);
|
|
791
|
+
}
|
|
767
792
|
if (!this.context.customPrimitives.includes(refName)) {
|
|
768
793
|
const typeInfo = (0, import_xlr_utils.getReferencedType)(node, this.context.typeChecker);
|
|
769
794
|
if (typeInfo) {
|
|
770
|
-
const
|
|
795
|
+
const convertedType = this.convertTopLevelNode(typeInfo.declaration);
|
|
771
796
|
const genericParams = typeInfo.declaration.typeParameters;
|
|
772
797
|
const genericArgs = node.typeArguments;
|
|
773
|
-
if (
|
|
774
|
-
|
|
775
|
-
|
|
798
|
+
if (convertedType && genericParams && genericArgs) {
|
|
799
|
+
const resolvedType = this.resolveGenerics(
|
|
800
|
+
convertedType,
|
|
776
801
|
genericParams,
|
|
777
802
|
genericArgs
|
|
778
803
|
);
|
|
804
|
+
if ("name" in resolvedType && genericArgs.length > 0) {
|
|
805
|
+
const argsText = Array.from(genericArgs).map((arg) => arg.getText()).join(", ");
|
|
806
|
+
const baseName = namespace ? `${namespace}.${refName}` : refName;
|
|
807
|
+
return { ...resolvedType, name: `${baseName}<${argsText}>` };
|
|
808
|
+
}
|
|
809
|
+
if (namespace && "name" in resolvedType) {
|
|
810
|
+
return { ...resolvedType, name: `${namespace}.${refName}` };
|
|
811
|
+
}
|
|
812
|
+
return resolvedType;
|
|
779
813
|
}
|
|
780
|
-
if (
|
|
781
|
-
|
|
814
|
+
if (convertedType) {
|
|
815
|
+
if (namespace && "name" in convertedType) {
|
|
816
|
+
return { ...convertedType, name: `${namespace}.${refName}` };
|
|
817
|
+
}
|
|
818
|
+
return convertedType;
|
|
782
819
|
}
|
|
783
820
|
}
|
|
784
821
|
this.context.throwError(
|
|
@@ -838,8 +875,14 @@ var TsConverter = class {
|
|
|
838
875
|
});
|
|
839
876
|
}
|
|
840
877
|
let ref;
|
|
841
|
-
if (
|
|
842
|
-
|
|
878
|
+
if (import_typescript.default.isTypeReferenceNode(node)) {
|
|
879
|
+
if (node.typeName.kind === import_typescript.default.SyntaxKind.QualifiedName) {
|
|
880
|
+
ref = `${node.typeName.left.getText()}.${node.typeName.right.getText()}`;
|
|
881
|
+
} else if (node.pos === -1 && import_typescript.default.isIdentifier(node.typeName)) {
|
|
882
|
+
ref = node.typeName.text;
|
|
883
|
+
} else {
|
|
884
|
+
ref = node.getText();
|
|
885
|
+
}
|
|
843
886
|
} else {
|
|
844
887
|
ref = node.getText();
|
|
845
888
|
}
|
|
@@ -852,7 +895,7 @@ var TsConverter = class {
|
|
|
852
895
|
}
|
|
853
896
|
};
|
|
854
897
|
|
|
855
|
-
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/xlr-to-ts.ts
|
|
898
|
+
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/ts/xlr-to-ts.ts
|
|
856
899
|
var import_xlr_utils2 = require("@xlr-lib/xlr-utils");
|
|
857
900
|
var import_typescript2 = __toESM(require("typescript"));
|
|
858
901
|
var templateTokenize = /(?=true\|false|\.\*|\[0-9]\*)/gm;
|
|
@@ -1280,10 +1323,74 @@ ${comment.split("\n").map((s) => ` * ${s}`).join("\n")}
|
|
|
1280
1323
|
);
|
|
1281
1324
|
}
|
|
1282
1325
|
};
|
|
1326
|
+
|
|
1327
|
+
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/helpers/converter.ts
|
|
1328
|
+
var import_typescript3 = __toESM(require("typescript"));
|
|
1329
|
+
var import_path2 = __toESM(require("path"));
|
|
1330
|
+
var import_fs2 = __toESM(require("fs"));
|
|
1331
|
+
|
|
1332
|
+
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/helpers/writeManifest.ts
|
|
1333
|
+
var import_path = __toESM(require("path"));
|
|
1334
|
+
var import_fs = __toESM(require("fs"));
|
|
1335
|
+
function replacer(key, value) {
|
|
1336
|
+
if (value instanceof Map) {
|
|
1337
|
+
return Object.fromEntries(value.entries());
|
|
1338
|
+
}
|
|
1339
|
+
return value;
|
|
1340
|
+
}
|
|
1341
|
+
function writeManifest(capabilities, outputDirectory) {
|
|
1342
|
+
const jsonManifest = JSON.stringify(capabilities, replacer, 4);
|
|
1343
|
+
import_fs.default.writeFileSync(import_path.default.join(outputDirectory, "manifest.json"), jsonManifest);
|
|
1344
|
+
const tsManifestFile = `${[...capabilities.capabilities?.values() ?? []].flat(2).map((capability) => {
|
|
1345
|
+
return `const ${capability} = require("./${capability}.json")`;
|
|
1346
|
+
}).join("\n")}
|
|
1347
|
+
|
|
1348
|
+
module.exports = {
|
|
1349
|
+
"pluginName": "${capabilities.pluginName}",
|
|
1350
|
+
"capabilities": {
|
|
1351
|
+
${[...capabilities.capabilities?.entries() ?? []].map(([capabilityName, provides]) => {
|
|
1352
|
+
return `"${capabilityName}":[${provides.join(",")}],`;
|
|
1353
|
+
}).join("\n ")}
|
|
1354
|
+
},
|
|
1355
|
+
"customPrimitives": [
|
|
1356
|
+
${[capabilities.customPrimitives?.map((i) => `"${i}"`).join(",") ?? ""]}
|
|
1357
|
+
]
|
|
1358
|
+
}
|
|
1359
|
+
`;
|
|
1360
|
+
import_fs.default.writeFileSync(import_path.default.join(outputDirectory, "manifest.js"), tsManifestFile);
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
// ../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/converters/src/helpers/converter.ts
|
|
1364
|
+
function converter(sourceFile, outputDirectory, customPrimitives, tsOptions = {}) {
|
|
1365
|
+
const program = import_typescript3.default.createProgram([sourceFile], tsOptions);
|
|
1366
|
+
import_fs2.default.mkdirSync(outputDirectory, { recursive: true });
|
|
1367
|
+
const checker = program.getTypeChecker();
|
|
1368
|
+
const converter2 = new TsConverter(checker, customPrimitives);
|
|
1369
|
+
const convertedTypes = converter2.convertSourceFile(
|
|
1370
|
+
program.getSourceFiles()[0]
|
|
1371
|
+
);
|
|
1372
|
+
if (convertedTypes.data.types.length === 0) {
|
|
1373
|
+
return void 0;
|
|
1374
|
+
}
|
|
1375
|
+
convertedTypes.data.types.forEach((type) => {
|
|
1376
|
+
import_fs2.default.writeFileSync(
|
|
1377
|
+
import_path2.default.join(outputDirectory, `${type.name}.json`),
|
|
1378
|
+
JSON.stringify(type, void 0, 4)
|
|
1379
|
+
);
|
|
1380
|
+
});
|
|
1381
|
+
const manifest = {
|
|
1382
|
+
pluginName: "Types",
|
|
1383
|
+
capabilities: /* @__PURE__ */ new Map([["Types", convertedTypes.convertedTypes]]),
|
|
1384
|
+
customPrimitives
|
|
1385
|
+
};
|
|
1386
|
+
writeManifest(manifest, outputDirectory);
|
|
1387
|
+
}
|
|
1283
1388
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1284
1389
|
0 && (module.exports = {
|
|
1285
1390
|
ConversionError,
|
|
1286
1391
|
TSWriter,
|
|
1287
|
-
TsConverter
|
|
1392
|
+
TsConverter,
|
|
1393
|
+
converter,
|
|
1394
|
+
writeManifest
|
|
1288
1395
|
});
|
|
1289
1396
|
//# sourceMappingURL=index.cjs.map
|