@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 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)
@@ -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?.getText();
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.getText();
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
- refName = `${node.typeName.left.getText()}.${node.typeName.right.getText()}`;
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 genericType = this.convertTopLevelNode(typeInfo.declaration);
795
+ const convertedType = this.convertTopLevelNode(typeInfo.declaration);
771
796
  const genericParams = typeInfo.declaration.typeParameters;
772
797
  const genericArgs = node.typeArguments;
773
- if (genericType && genericParams && genericArgs) {
774
- return this.resolveGenerics(
775
- genericType,
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 (genericType) {
781
- return genericType;
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 (node.pos === -1 && import_typescript.default.isTypeReferenceNode(node) && import_typescript.default.isIdentifier(node.typeName)) {
842
- ref = node.typeName.text;
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