sql-typechecker 0.0.52 → 0.0.53

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/out/cli.js CHANGED
@@ -241983,6 +241983,16 @@ function checkType(g, l, name) {
241983
241983
  }
241984
241984
  };
241985
241985
  }
241986
+ const foundEnum = g.enums.find((d) => d.name.name === name);
241987
+ if (foundEnum) {
241988
+ return {
241989
+ kind: "scalar",
241990
+ name: {_location: l, name},
241991
+ isEnum: {
241992
+ values: foundEnum.values
241993
+ }
241994
+ };
241995
+ }
241986
241996
  const builtintype = Object.keys(BuiltinTypes).concat(["bytea"]).find((b) => b.toLowerCase() === name);
241987
241997
  if (builtintype) {
241988
241998
  return {
@@ -242839,6 +242849,12 @@ function elabBinaryOp(g, c, e) {
242839
242849
  right: {kind: "scalar", name: d.name},
242840
242850
  result: {kind: "scalar", name: {name: "boolean"}},
242841
242851
  description: "equal"
242852
+ }))).concat(g.enums.map((d) => ({
242853
+ name: {schema: "pg_catalog", name: "="},
242854
+ left: {kind: "scalar", name: d.name},
242855
+ right: {kind: "scalar", name: d.name},
242856
+ result: {kind: "scalar", name: {name: "boolean"}},
242857
+ description: "equal"
242842
242858
  }))).filter(function(op) {
242843
242859
  return eqQNames({
242844
242860
  name: normalizeOperatorName(e.op),
@@ -243290,6 +243306,14 @@ function parseSetupScripts(g, ast) {
243290
243306
  realtype: mkType(acc, a.dataType, [{type: "not null"}])
243291
243307
  })
243292
243308
  };
243309
+ } else if (a.type === "create enum") {
243310
+ return {
243311
+ ...acc,
243312
+ enums: acc.enums.concat({
243313
+ name: a.name,
243314
+ values: a.values.map((v) => v.value)
243315
+ })
243316
+ };
243293
243317
  } else {
243294
243318
  return acc;
243295
243319
  }
@@ -243349,7 +243373,9 @@ function showTypeAsTypescriptType(t) {
243349
243373
  } else if (t.kind === "nullable") {
243350
243374
  return showTypeAsTypescriptType(t.typevar) + " | null";
243351
243375
  } else if (t.kind === "scalar") {
243352
- if ([
243376
+ if (t.domain) {
243377
+ return `types.${t.name.name}`;
243378
+ } else if ([
243353
243379
  "numeric",
243354
243380
  "bigint",
243355
243381
  "smallint",
@@ -243371,6 +243397,8 @@ function showTypeAsTypescriptType(t) {
243371
243397
  return "LocalTime";
243372
243398
  } else if (t.name.name === "timestamp without time zone" || t.name.name === "timestamp") {
243373
243399
  return "LocalDateTime";
243400
+ } else if (t.isEnum) {
243401
+ return "types." + t.name.name;
243374
243402
  } else {
243375
243403
  return t.name.name;
243376
243404
  }
@@ -243399,7 +243427,7 @@ function genDeserializeSimpleT(t, literalVar) {
243399
243427
  return "({" + t.record.fields.map((f) => `${f.name?.name || "?"}: ${genDeserializeSimpleT(f.type, literalVar + '["' + f.name?.name + '"]')}`).join(",\n") + "})";
243400
243428
  } else if (t.kind === "scalar") {
243401
243429
  if (t.domain) {
243402
- return `${genDeserializeSimpleT(t.domain.realtype, literalVar)} as ${t.name.name}`;
243430
+ return `${genDeserializeSimpleT(t.domain.realtype, literalVar)} as types.${t.name.name}`;
243403
243431
  }
243404
243432
  if (t.name.name === "date") {
243405
243433
  return `LocalDate.parse(${literalVar})`;
@@ -243479,6 +243507,11 @@ export async function ${f.name.name}(pool: Pool, args: ${argsType})
243479
243507
  function genDomain(dom) {
243480
243508
  return `export type ${dom.name.name} = ${showTypeAsTypescriptType(dom.realtype)} & { readonly __tag: "${dom.name.name}" };`;
243481
243509
  }
243510
+ function genEnum(enu) {
243511
+ return `export type ${enu.name.name} =
243512
+ | ${enu.values.map((v) => `"${v}"`).join("\n | ")};
243513
+ `;
243514
+ }
243482
243515
  function getImports() {
243483
243516
  return `
243484
243517
  import type { Pool } from "pg";
@@ -243621,7 +243654,7 @@ async function go() {
243621
243654
  throw new Error("Please provide at least one SQL file with flags -f/--file or -d/--dir");
243622
243655
  }
243623
243656
  const allStatements = [];
243624
- let g = {tables: [], views: [], domains: []};
243657
+ let g = {tables: [], views: [], domains: [], enums: []};
243625
243658
  for (let sqlFile of allSqlFiles) {
243626
243659
  const fileContents = await fs.readFile(sqlFile, "utf-8");
243627
243660
  const statements = import_trader_pgsql_ast_parser2.parse(fileContents, {
@@ -243631,6 +243664,7 @@ async function go() {
243631
243664
  try {
243632
243665
  g = parseSetupScripts(g, statements);
243633
243666
  } catch (err) {
243667
+ console.error("Error in setup script");
243634
243668
  console.error("---------------------------------------------");
243635
243669
  if (err instanceof ErrorWithLocation && err.l !== void 0) {
243636
243670
  const found = findCode(fileContents, err.l);
@@ -243645,20 +243679,24 @@ async function go() {
243645
243679
  console.error(err instanceof Error ? err.message : JSON.stringify(err));
243646
243680
  console.error("---------------------------------------------");
243647
243681
  console.error("");
243682
+ process.exit(1);
243648
243683
  }
243649
243684
  }
243650
243685
  const outDir = path.resolve(process.cwd(), outArg);
243651
243686
  await fs.mkdir(outDir, {recursive: true});
243652
- const domainFile = path.format({
243687
+ const typesFile = path.format({
243653
243688
  dir: outDir,
243654
- name: "domains",
243689
+ name: "types",
243655
243690
  ext: ".ts"
243656
243691
  });
243657
- await prepOutFile(domainFile);
243692
+ await prepOutFile(typesFile);
243658
243693
  for (let dom of g.domains) {
243659
- await fs.appendFile(domainFile, genDomain(dom) + "\n", "utf-8");
243694
+ await fs.appendFile(typesFile, genDomain(dom) + "\n", "utf-8");
243695
+ }
243696
+ for (let enu of g.enums) {
243697
+ await fs.appendFile(typesFile, genEnum(enu) + "\n", "utf-8");
243660
243698
  }
243661
- await fs.appendFile(domainFile, `
243699
+ await fs.appendFile(typesFile, `
243662
243700
  `, "utf-8");
243663
243701
  const tablesIndexFile = path.format({
243664
243702
  dir: outDir,
@@ -243675,7 +243713,7 @@ async function go() {
243675
243713
  });
243676
243714
  await prepOutFile(tableOutFile);
243677
243715
  const text = genCrudOperations(table);
243678
- await fs.appendFile(tableOutFile, mkImportDomainsStatement(g.domains, tableOutFile, domainFile), "utf8");
243716
+ await fs.appendFile(tableOutFile, mkImportDomainsStatement(g.domains, tableOutFile, typesFile), "utf8");
243679
243717
  await fs.appendFile(tableOutFile, prettier.format(text, {parser: "typescript"}), "utf-8");
243680
243718
  await fs.appendFile(tablesIndexFile, `export * as ${table.name.name} from "./tables/${table.name.name}";
243681
243719
  `);
@@ -243689,7 +243727,7 @@ async function go() {
243689
243727
  ext: ".ts"
243690
243728
  });
243691
243729
  const functionsOutFile = await prepOutFile(outFileName);
243692
- await fs.appendFile(outFileName, mkImportDomainsStatement(g.domains, outFileName, domainFile), "utf8");
243730
+ await fs.appendFile(outFileName, mkImportDomainsStatement(g.domains, outFileName, typesFile), "utf8");
243693
243731
  for (let st of createFunctionStatements) {
243694
243732
  try {
243695
243733
  const res = doCreateFunction(g, {decls: [], froms: []}, st);
@@ -243774,11 +243812,10 @@ function mkImportDomainsStatement(domains, thisFile, domainFile) {
243774
243812
  const p = path.relative(path.dirname(thisFile), path.dirname(domainFile));
243775
243813
  const formatted = path.format({
243776
243814
  dir: p || ".",
243777
- name: "domains",
243815
+ name: "types",
243778
243816
  ext: ""
243779
243817
  });
243780
- const doms = domains.map((d) => d.name.name).join(", ");
243781
- return `import {${doms}} from "${formatted}";
243818
+ return `import * as types from "${formatted}";
243782
243819
 
243783
243820
  `;
243784
243821
  }