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 +50 -13
- package/out/cli.js.map +2 -2
- package/package.json +1 -1
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
|
|
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
|
|
243687
|
+
const typesFile = path.format({
|
|
243653
243688
|
dir: outDir,
|
|
243654
|
-
name: "
|
|
243689
|
+
name: "types",
|
|
243655
243690
|
ext: ".ts"
|
|
243656
243691
|
});
|
|
243657
|
-
await prepOutFile(
|
|
243692
|
+
await prepOutFile(typesFile);
|
|
243658
243693
|
for (let dom of g.domains) {
|
|
243659
|
-
await fs.appendFile(
|
|
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(
|
|
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,
|
|
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,
|
|
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: "
|
|
243815
|
+
name: "types",
|
|
243778
243816
|
ext: ""
|
|
243779
243817
|
});
|
|
243780
|
-
|
|
243781
|
-
return `import {${doms}} from "${formatted}";
|
|
243818
|
+
return `import * as types from "${formatted}";
|
|
243782
243819
|
|
|
243783
243820
|
`;
|
|
243784
243821
|
}
|