sql-typechecker 0.0.52 → 0.0.54
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 +60 -16
- package/out/cli.js.map +2 -2
- package/package.json +1 -1
package/out/cli.js
CHANGED
|
@@ -241354,7 +241354,14 @@ var builtinoperatorsFromSchema = [
|
|
|
241354
241354
|
var builtinoperators = builtinoperatorsFromSyntax.concat(builtinoperatorsFromSchema);
|
|
241355
241355
|
|
|
241356
241356
|
// src/builtinunaryoperators.ts
|
|
241357
|
-
var builtinunaryoperatorsFromSyntax = [
|
|
241357
|
+
var builtinunaryoperatorsFromSyntax = [
|
|
241358
|
+
{
|
|
241359
|
+
name: {name: "NOT"},
|
|
241360
|
+
operand: {kind: "scalar", name: {name: "boolean"}},
|
|
241361
|
+
result: {kind: "scalar", name: {name: "boolean"}},
|
|
241362
|
+
description: ""
|
|
241363
|
+
}
|
|
241364
|
+
];
|
|
241358
241365
|
var builtinunaryoperatorsFromSchema = [
|
|
241359
241366
|
{
|
|
241360
241367
|
name: {name: "!"},
|
|
@@ -241983,6 +241990,16 @@ function checkType(g, l, name) {
|
|
|
241983
241990
|
}
|
|
241984
241991
|
};
|
|
241985
241992
|
}
|
|
241993
|
+
const foundEnum = g.enums.find((d) => d.name.name === name);
|
|
241994
|
+
if (foundEnum) {
|
|
241995
|
+
return {
|
|
241996
|
+
kind: "scalar",
|
|
241997
|
+
name: {_location: l, name},
|
|
241998
|
+
isEnum: {
|
|
241999
|
+
values: foundEnum.values
|
|
242000
|
+
}
|
|
242001
|
+
};
|
|
242002
|
+
}
|
|
241986
242003
|
const builtintype = Object.keys(BuiltinTypes).concat(["bytea"]).find((b) => b.toLowerCase() === name);
|
|
241987
242004
|
if (builtintype) {
|
|
241988
242005
|
return {
|
|
@@ -242839,6 +242856,12 @@ function elabBinaryOp(g, c, e) {
|
|
|
242839
242856
|
right: {kind: "scalar", name: d.name},
|
|
242840
242857
|
result: {kind: "scalar", name: {name: "boolean"}},
|
|
242841
242858
|
description: "equal"
|
|
242859
|
+
}))).concat(g.enums.map((d) => ({
|
|
242860
|
+
name: {schema: "pg_catalog", name: "="},
|
|
242861
|
+
left: {kind: "scalar", name: d.name},
|
|
242862
|
+
right: {kind: "scalar", name: d.name},
|
|
242863
|
+
result: {kind: "scalar", name: {name: "boolean"}},
|
|
242864
|
+
description: "equal"
|
|
242842
242865
|
}))).filter(function(op) {
|
|
242843
242866
|
return eqQNames({
|
|
242844
242867
|
name: normalizeOperatorName(e.op),
|
|
@@ -243235,7 +243258,7 @@ function elabExpr(g, c, e) {
|
|
|
243235
243258
|
function inferNullability(c, e) {
|
|
243236
243259
|
if (e.type === "unary") {
|
|
243237
243260
|
if (e.op === "NOT") {
|
|
243238
|
-
return inferNullability(c, e).map((judg) => ({
|
|
243261
|
+
return inferNullability(c, e.operand).map((judg) => ({
|
|
243239
243262
|
...judg,
|
|
243240
243263
|
isNull: !judg.isNull
|
|
243241
243264
|
}));
|
|
@@ -243290,6 +243313,14 @@ function parseSetupScripts(g, ast) {
|
|
|
243290
243313
|
realtype: mkType(acc, a.dataType, [{type: "not null"}])
|
|
243291
243314
|
})
|
|
243292
243315
|
};
|
|
243316
|
+
} else if (a.type === "create enum") {
|
|
243317
|
+
return {
|
|
243318
|
+
...acc,
|
|
243319
|
+
enums: acc.enums.concat({
|
|
243320
|
+
name: a.name,
|
|
243321
|
+
values: a.values.map((v) => v.value)
|
|
243322
|
+
})
|
|
243323
|
+
};
|
|
243293
243324
|
} else {
|
|
243294
243325
|
return acc;
|
|
243295
243326
|
}
|
|
@@ -243349,7 +243380,9 @@ function showTypeAsTypescriptType(t) {
|
|
|
243349
243380
|
} else if (t.kind === "nullable") {
|
|
243350
243381
|
return showTypeAsTypescriptType(t.typevar) + " | null";
|
|
243351
243382
|
} else if (t.kind === "scalar") {
|
|
243352
|
-
if (
|
|
243383
|
+
if (t.domain) {
|
|
243384
|
+
return `types.${t.name.name}`;
|
|
243385
|
+
} else if ([
|
|
243353
243386
|
"numeric",
|
|
243354
243387
|
"bigint",
|
|
243355
243388
|
"smallint",
|
|
@@ -243371,6 +243404,8 @@ function showTypeAsTypescriptType(t) {
|
|
|
243371
243404
|
return "LocalTime";
|
|
243372
243405
|
} else if (t.name.name === "timestamp without time zone" || t.name.name === "timestamp") {
|
|
243373
243406
|
return "LocalDateTime";
|
|
243407
|
+
} else if (t.isEnum) {
|
|
243408
|
+
return "types." + t.name.name;
|
|
243374
243409
|
} else {
|
|
243375
243410
|
return t.name.name;
|
|
243376
243411
|
}
|
|
@@ -243385,7 +243420,7 @@ function showTypeAsTypescriptType(t) {
|
|
|
243385
243420
|
}
|
|
243386
243421
|
function genDeserializeSimpleT(t, literalVar) {
|
|
243387
243422
|
if (t.kind === "array") {
|
|
243388
|
-
return
|
|
243423
|
+
return `${literalVar} === null ? [] : (Array.isArray(${literalVar}) ? ${literalVar} : parseArray(${literalVar})).map((el: any) => ${genDeserializeSimpleT(t.typevar, "el")})`;
|
|
243389
243424
|
} else if (t.kind === "nullable") {
|
|
243390
243425
|
const inner = genDeserializeSimpleT(t.typevar, literalVar);
|
|
243391
243426
|
if (inner === literalVar) {
|
|
@@ -243399,7 +243434,7 @@ function genDeserializeSimpleT(t, literalVar) {
|
|
|
243399
243434
|
return "({" + t.record.fields.map((f) => `${f.name?.name || "?"}: ${genDeserializeSimpleT(f.type, literalVar + '["' + f.name?.name + '"]')}`).join(",\n") + "})";
|
|
243400
243435
|
} else if (t.kind === "scalar") {
|
|
243401
243436
|
if (t.domain) {
|
|
243402
|
-
return `${genDeserializeSimpleT(t.domain.realtype, literalVar)} as
|
|
243437
|
+
return `${genDeserializeSimpleT(t.domain.realtype, literalVar)} as types.${t.name.name}`;
|
|
243403
243438
|
}
|
|
243404
243439
|
if (t.name.name === "date") {
|
|
243405
243440
|
return `LocalDate.parse(${literalVar})`;
|
|
@@ -243479,6 +243514,11 @@ export async function ${f.name.name}(pool: Pool, args: ${argsType})
|
|
|
243479
243514
|
function genDomain(dom) {
|
|
243480
243515
|
return `export type ${dom.name.name} = ${showTypeAsTypescriptType(dom.realtype)} & { readonly __tag: "${dom.name.name}" };`;
|
|
243481
243516
|
}
|
|
243517
|
+
function genEnum(enu) {
|
|
243518
|
+
return `export type ${enu.name.name} =
|
|
243519
|
+
| ${enu.values.map((v) => `"${v}"`).join("\n | ")};
|
|
243520
|
+
`;
|
|
243521
|
+
}
|
|
243482
243522
|
function getImports() {
|
|
243483
243523
|
return `
|
|
243484
243524
|
import type { Pool } from "pg";
|
|
@@ -243621,7 +243661,7 @@ async function go() {
|
|
|
243621
243661
|
throw new Error("Please provide at least one SQL file with flags -f/--file or -d/--dir");
|
|
243622
243662
|
}
|
|
243623
243663
|
const allStatements = [];
|
|
243624
|
-
let g = {tables: [], views: [], domains: []};
|
|
243664
|
+
let g = {tables: [], views: [], domains: [], enums: []};
|
|
243625
243665
|
for (let sqlFile of allSqlFiles) {
|
|
243626
243666
|
const fileContents = await fs.readFile(sqlFile, "utf-8");
|
|
243627
243667
|
const statements = import_trader_pgsql_ast_parser2.parse(fileContents, {
|
|
@@ -243631,6 +243671,7 @@ async function go() {
|
|
|
243631
243671
|
try {
|
|
243632
243672
|
g = parseSetupScripts(g, statements);
|
|
243633
243673
|
} catch (err) {
|
|
243674
|
+
console.error("Error in setup script");
|
|
243634
243675
|
console.error("---------------------------------------------");
|
|
243635
243676
|
if (err instanceof ErrorWithLocation && err.l !== void 0) {
|
|
243636
243677
|
const found = findCode(fileContents, err.l);
|
|
@@ -243645,20 +243686,24 @@ async function go() {
|
|
|
243645
243686
|
console.error(err instanceof Error ? err.message : JSON.stringify(err));
|
|
243646
243687
|
console.error("---------------------------------------------");
|
|
243647
243688
|
console.error("");
|
|
243689
|
+
process.exit(1);
|
|
243648
243690
|
}
|
|
243649
243691
|
}
|
|
243650
243692
|
const outDir = path.resolve(process.cwd(), outArg);
|
|
243651
243693
|
await fs.mkdir(outDir, {recursive: true});
|
|
243652
|
-
const
|
|
243694
|
+
const typesFile = path.format({
|
|
243653
243695
|
dir: outDir,
|
|
243654
|
-
name: "
|
|
243696
|
+
name: "types",
|
|
243655
243697
|
ext: ".ts"
|
|
243656
243698
|
});
|
|
243657
|
-
await prepOutFile(
|
|
243699
|
+
await prepOutFile(typesFile);
|
|
243658
243700
|
for (let dom of g.domains) {
|
|
243659
|
-
await fs.appendFile(
|
|
243701
|
+
await fs.appendFile(typesFile, genDomain(dom) + "\n", "utf-8");
|
|
243702
|
+
}
|
|
243703
|
+
for (let enu of g.enums) {
|
|
243704
|
+
await fs.appendFile(typesFile, genEnum(enu) + "\n", "utf-8");
|
|
243660
243705
|
}
|
|
243661
|
-
await fs.appendFile(
|
|
243706
|
+
await fs.appendFile(typesFile, `
|
|
243662
243707
|
`, "utf-8");
|
|
243663
243708
|
const tablesIndexFile = path.format({
|
|
243664
243709
|
dir: outDir,
|
|
@@ -243675,7 +243720,7 @@ async function go() {
|
|
|
243675
243720
|
});
|
|
243676
243721
|
await prepOutFile(tableOutFile);
|
|
243677
243722
|
const text = genCrudOperations(table);
|
|
243678
|
-
await fs.appendFile(tableOutFile, mkImportDomainsStatement(g.domains, tableOutFile,
|
|
243723
|
+
await fs.appendFile(tableOutFile, mkImportDomainsStatement(g.domains, tableOutFile, typesFile), "utf8");
|
|
243679
243724
|
await fs.appendFile(tableOutFile, prettier.format(text, {parser: "typescript"}), "utf-8");
|
|
243680
243725
|
await fs.appendFile(tablesIndexFile, `export * as ${table.name.name} from "./tables/${table.name.name}";
|
|
243681
243726
|
`);
|
|
@@ -243689,7 +243734,7 @@ async function go() {
|
|
|
243689
243734
|
ext: ".ts"
|
|
243690
243735
|
});
|
|
243691
243736
|
const functionsOutFile = await prepOutFile(outFileName);
|
|
243692
|
-
await fs.appendFile(outFileName, mkImportDomainsStatement(g.domains, outFileName,
|
|
243737
|
+
await fs.appendFile(outFileName, mkImportDomainsStatement(g.domains, outFileName, typesFile), "utf8");
|
|
243693
243738
|
for (let st of createFunctionStatements) {
|
|
243694
243739
|
try {
|
|
243695
243740
|
const res = doCreateFunction(g, {decls: [], froms: []}, st);
|
|
@@ -243774,11 +243819,10 @@ function mkImportDomainsStatement(domains, thisFile, domainFile) {
|
|
|
243774
243819
|
const p = path.relative(path.dirname(thisFile), path.dirname(domainFile));
|
|
243775
243820
|
const formatted = path.format({
|
|
243776
243821
|
dir: p || ".",
|
|
243777
|
-
name: "
|
|
243822
|
+
name: "types",
|
|
243778
243823
|
ext: ""
|
|
243779
243824
|
});
|
|
243780
|
-
|
|
243781
|
-
return `import {${doms}} from "${formatted}";
|
|
243825
|
+
return `import * as types from "${formatted}";
|
|
243782
243826
|
|
|
243783
243827
|
`;
|
|
243784
243828
|
}
|