neoorm 0.1.2 → 0.1.4
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/README.md +259 -11
- package/dist/bin/neoorm.js +37 -7
- package/dist/bin/neoorm.js.map +1 -1
- package/dist/codegen/diff-manifest.d.ts +11 -0
- package/dist/codegen/diff-manifest.d.ts.map +1 -0
- package/dist/codegen/diff-manifest.js +504 -0
- package/dist/codegen/diff-manifest.js.map +1 -0
- package/dist/codegen/generate.d.ts +16 -6
- package/dist/codegen/generate.d.ts.map +1 -1
- package/dist/codegen/generate.js +38 -34
- package/dist/codegen/generate.js.map +1 -1
- package/dist/codegen/schema-to-manifest.d.ts.map +1 -1
- package/dist/codegen/schema-to-manifest.js +17 -8
- package/dist/codegen/schema-to-manifest.js.map +1 -1
- package/dist/dialect/index.d.ts +1 -1
- package/dist/dialect/index.d.ts.map +1 -1
- package/dist/dialect/index.js.map +1 -1
- package/dist/dialect/postgres.d.ts +8 -1
- package/dist/dialect/postgres.d.ts.map +1 -1
- package/dist/dialect/postgres.js +244 -28
- package/dist/dialect/postgres.js.map +1 -1
- package/dist/dialect/types.d.ts +61 -4
- package/dist/dialect/types.d.ts.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/introspect/pull.d.ts.map +1 -1
- package/dist/introspect/pull.js +48 -34
- package/dist/introspect/pull.js.map +1 -1
- package/dist/introspect/queries.d.ts +36 -0
- package/dist/introspect/queries.d.ts.map +1 -0
- package/dist/introspect/queries.js +102 -0
- package/dist/introspect/queries.js.map +1 -0
- package/dist/introspect/to-manifest.d.ts +4 -0
- package/dist/introspect/to-manifest.d.ts.map +1 -0
- package/dist/introspect/to-manifest.js +188 -0
- package/dist/introspect/to-manifest.js.map +1 -0
- package/dist/migrate/runner.d.ts +12 -1
- package/dist/migrate/runner.d.ts.map +1 -1
- package/dist/migrate/runner.js +43 -13
- package/dist/migrate/runner.js.map +1 -1
- package/dist/plugins/builtin.d.ts +4 -0
- package/dist/plugins/builtin.d.ts.map +1 -1
- package/dist/plugins/builtin.js +27 -1
- package/dist/plugins/builtin.js.map +1 -1
- package/dist/runtime/client.d.ts +1 -1
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.js +26 -2
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/executor.d.ts +4 -1
- package/dist/runtime/executor.d.ts.map +1 -1
- package/dist/runtime/executor.js +20 -3
- package/dist/runtime/executor.js.map +1 -1
- package/dist/runtime/query/compile.d.ts +5 -3
- package/dist/runtime/query/compile.d.ts.map +1 -1
- package/dist/runtime/query/compile.js +244 -46
- package/dist/runtime/query/compile.js.map +1 -1
- package/dist/runtime/query/count.d.ts.map +1 -1
- package/dist/runtime/query/count.js +1 -1
- package/dist/runtime/query/count.js.map +1 -1
- package/dist/runtime/query/create.d.ts.map +1 -1
- package/dist/runtime/query/create.js +61 -72
- package/dist/runtime/query/create.js.map +1 -1
- package/dist/runtime/query/delete.d.ts.map +1 -1
- package/dist/runtime/query/delete.js +2 -2
- package/dist/runtime/query/delete.js.map +1 -1
- package/dist/runtime/query/find.d.ts.map +1 -1
- package/dist/runtime/query/find.js +1 -1
- package/dist/runtime/query/find.js.map +1 -1
- package/dist/runtime/query/primary-key.d.ts +4 -0
- package/dist/runtime/query/primary-key.d.ts.map +1 -0
- package/dist/runtime/query/primary-key.js +23 -0
- package/dist/runtime/query/primary-key.js.map +1 -0
- package/dist/runtime/query/update.d.ts.map +1 -1
- package/dist/runtime/query/update.js +4 -4
- package/dist/runtime/query/update.js.map +1 -1
- package/dist/runtime/query/upsert.d.ts.map +1 -1
- package/dist/runtime/query/upsert.js +2 -12
- package/dist/runtime/query/upsert.js.map +1 -1
- package/dist/runtime/types.d.ts +10 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/schema/column-where.d.ts +36 -0
- package/dist/schema/column-where.d.ts.map +1 -0
- package/dist/schema/column-where.js +2 -0
- package/dist/schema/column-where.js.map +1 -0
- package/dist/schema/column.d.ts +6 -2
- package/dist/schema/column.d.ts.map +1 -1
- package/dist/schema/column.js +5 -2
- package/dist/schema/column.js.map +1 -1
- package/dist/schema/index.d.ts +3 -2
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/relation-types.d.ts +65 -16
- package/dist/schema/relation-types.d.ts.map +1 -1
- package/dist/schema/relation.d.ts +13 -12
- package/dist/schema/relation.d.ts.map +1 -1
- package/dist/schema/relation.js +16 -11
- package/dist/schema/relation.js.map +1 -1
- package/dist/schema/types.d.ts +12 -38
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/utils/uuid.d.ts +6 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +34 -0
- package/dist/utils/uuid.js.map +1 -0
- package/package.json +1 -1
package/dist/codegen/generate.js
CHANGED
|
@@ -2,9 +2,10 @@ import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
|
2
2
|
import { join, relative, dirname } from "node:path";
|
|
3
3
|
import { createHash } from "node:crypto";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import {
|
|
5
|
+
import { diffManifest, formatDestructiveWarnings, resolveMigrationSql, } from "./diff-manifest.js";
|
|
6
6
|
import { emitIncludesTs } from "./emit-includes.js";
|
|
7
7
|
import { emitModelsTs } from "./emit-models.js";
|
|
8
|
+
import { toSnakeCase } from "../utils/case.js";
|
|
8
9
|
async function resolveManyToManyDefs() {
|
|
9
10
|
const { getManyToManyRegistry } = await import("../schema/many-to-many.js");
|
|
10
11
|
const fromDist = getManyToManyRegistry();
|
|
@@ -66,6 +67,20 @@ export function hashManifest(manifest) {
|
|
|
66
67
|
.digest("hex")
|
|
67
68
|
.slice(0, 16);
|
|
68
69
|
}
|
|
70
|
+
export function collectRedundantMapWarnings(schema) {
|
|
71
|
+
const warnings = [];
|
|
72
|
+
for (const [accessor, table] of Object.entries(schema._tables)) {
|
|
73
|
+
for (const [tsName, col] of Object.entries(table._columns)) {
|
|
74
|
+
if (!("_meta" in col) || !col._meta.mapName)
|
|
75
|
+
continue;
|
|
76
|
+
const defaultName = toSnakeCase(tsName);
|
|
77
|
+
if (col._meta.mapName === defaultName) {
|
|
78
|
+
warnings.push(`${accessor}.${tsName}.map("${col._meta.mapName}") matches the default snake_case SQL name — remove .map() or use a different name to rename the column`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return warnings;
|
|
83
|
+
}
|
|
69
84
|
export async function readSnapshot(outDir) {
|
|
70
85
|
try {
|
|
71
86
|
const content = await readFile(join(outDir, "snapshot.json"), "utf-8");
|
|
@@ -120,35 +135,7 @@ function schemaImportPath(outDir, schemaPath) {
|
|
|
120
135
|
return toImportPath(outDir, schemaPath);
|
|
121
136
|
}
|
|
122
137
|
const NEOORM_PACKAGE = "neoorm";
|
|
123
|
-
export
|
|
124
|
-
if (!prev) {
|
|
125
|
-
const sql = [];
|
|
126
|
-
for (const ext of next.extensions ?? []) {
|
|
127
|
-
sql.push(`CREATE EXTENSION IF NOT EXISTS ${ext};`);
|
|
128
|
-
}
|
|
129
|
-
sql.push(...Object.values(next.tables).map((t) => postgresDialect.emitCreateTable(t)));
|
|
130
|
-
return { isInitial: true, sql };
|
|
131
|
-
}
|
|
132
|
-
const sql = [];
|
|
133
|
-
const prevTables = new Set(Object.keys(prev.tables));
|
|
134
|
-
const nextTables = new Set(Object.keys(next.tables));
|
|
135
|
-
for (const accessor of nextTables) {
|
|
136
|
-
if (!prevTables.has(accessor)) {
|
|
137
|
-
const table = next.tables[accessor];
|
|
138
|
-
sql.push(postgresDialect.emitCreateTable(table));
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
const prevTable = prev.tables[accessor];
|
|
142
|
-
const nextTable = next.tables[accessor];
|
|
143
|
-
const prevCols = new Set(prevTable.columns.map((c) => c.sqlName));
|
|
144
|
-
const addColumns = nextTable.columns.filter((c) => !prevCols.has(c.sqlName));
|
|
145
|
-
if (addColumns.length > 0) {
|
|
146
|
-
sql.push(...postgresDialect.emitAlterTable(nextTable, { addColumns }));
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return { isInitial: false, sql };
|
|
151
|
-
}
|
|
138
|
+
export { diffManifest, formatDestructiveWarnings, resolveMigrationSql, columnsEqual, columnSqlType, } from "./diff-manifest.js";
|
|
152
139
|
export async function writeMigration(outDir, sql, name) {
|
|
153
140
|
if (sql.length === 0)
|
|
154
141
|
return null;
|
|
@@ -174,17 +161,34 @@ export async function writeGeneratedFiles(outDir, manifest, migrationSql, schema
|
|
|
174
161
|
const migrationName = await writeMigration(outDir, migrationSql);
|
|
175
162
|
return { migrationName };
|
|
176
163
|
}
|
|
177
|
-
export async function generateFromSchema(schemaPath, outDir) {
|
|
164
|
+
export async function generateFromSchema(schemaPath, outDir, options = {}) {
|
|
178
165
|
const { schemaToManifest, validateManifest } = await import("./schema-to-manifest.js");
|
|
179
166
|
const { schema, manyToMany, plugins } = await loadSchemaModule(schemaPath);
|
|
180
167
|
const manifest = schemaToManifest(schema, manyToMany, plugins);
|
|
168
|
+
const warnings = collectRedundantMapWarnings(schema);
|
|
181
169
|
const errors = validateManifest(manifest);
|
|
182
170
|
if (errors.length > 0) {
|
|
183
171
|
throw new Error(`Schema validation failed:\n${errors.join("\n")}`);
|
|
184
172
|
}
|
|
185
173
|
const prev = await readSnapshot(outDir);
|
|
186
|
-
const
|
|
187
|
-
const
|
|
188
|
-
|
|
174
|
+
const schemaChanged = !prev || hashManifest(prev) !== hashManifest(manifest);
|
|
175
|
+
const manifestDiff = diffManifest(prev, manifest);
|
|
176
|
+
const { sql, blocked } = resolveMigrationSql(manifestDiff, prev, manifest, options.acceptDataLoss ?? false);
|
|
177
|
+
const allWarnings = [...warnings];
|
|
178
|
+
let destructiveBlocked = false;
|
|
179
|
+
if (blocked.length > 0) {
|
|
180
|
+
destructiveBlocked = true;
|
|
181
|
+
allWarnings.push(...formatDestructiveWarnings(blocked));
|
|
182
|
+
allWarnings.push("Destructive schema changes were not written to a migration. Re-run with --accept-data-loss to include them.");
|
|
183
|
+
}
|
|
184
|
+
const migrationSql = blocked.length > 0 && !(options.acceptDataLoss ?? false) ? [] : sql;
|
|
185
|
+
const { migrationName } = await writeGeneratedFiles(outDir, manifest, migrationSql, schemaPath);
|
|
186
|
+
return {
|
|
187
|
+
manifest,
|
|
188
|
+
migrationName,
|
|
189
|
+
schemaChanged,
|
|
190
|
+
warnings: allWarnings,
|
|
191
|
+
destructiveBlocked,
|
|
192
|
+
};
|
|
189
193
|
}
|
|
190
194
|
//# sourceMappingURL=generate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/codegen/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/codegen/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-to-manifest.d.ts","sourceRoot":"","sources":["../../src/codegen/schema-to-manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,oBAAoB,CAAC;AAI/D,OAAO,KAAK,EACV,QAAQ,EAMT,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-to-manifest.d.ts","sourceRoot":"","sources":["../../src/codegen/schema-to-manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,oBAAoB,CAAC;AAI/D,OAAO,KAAK,EACV,QAAQ,EAMT,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAqHxD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACjE,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;CAAE,EAC/B,OAAO,GAAE,SAAS,aAAa,EAA4B,EAC3D,OAAO,GAAE,SAAS,YAAY,EAAwB,GACrD,QAAQ,CA6IV;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAiC7D"}
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import { getManyToManyRegistry } from "../schema/many-to-many.js";
|
|
2
2
|
import { toSnakeCase } from "../utils/case.js";
|
|
3
3
|
import { collectExtensionsForKinds, getColumnType, getPluginRegistry } from "../plugins/registry.js";
|
|
4
|
+
import { resolveIndexSqlName } from "../dialect/postgres.js";
|
|
4
5
|
function isFkBuilder(col) {
|
|
5
6
|
return "_meta" in col && col._meta.kind === "fk";
|
|
6
7
|
}
|
|
7
8
|
function isColumnBuilder(col) {
|
|
8
9
|
return "_meta" in col && col._meta.kind !== "fk";
|
|
9
10
|
}
|
|
11
|
+
function resolveSqlName(tsName, col) {
|
|
12
|
+
if ("_meta" in col && col._meta.mapName) {
|
|
13
|
+
return col._meta.mapName;
|
|
14
|
+
}
|
|
15
|
+
return toSnakeCase(tsName);
|
|
16
|
+
}
|
|
10
17
|
function columnToManifest(tsName, col) {
|
|
11
18
|
if (isFkBuilder(col)) {
|
|
12
19
|
const meta = col._meta;
|
|
13
20
|
const result = {
|
|
14
21
|
tsName,
|
|
15
|
-
sqlName:
|
|
22
|
+
sqlName: resolveSqlName(tsName, col),
|
|
16
23
|
kind: "fk",
|
|
17
24
|
nullable: meta.nullable,
|
|
18
25
|
unique: meta.unique,
|
|
@@ -30,7 +37,7 @@ function columnToManifest(tsName, col) {
|
|
|
30
37
|
const meta = col._meta;
|
|
31
38
|
const result = {
|
|
32
39
|
tsName,
|
|
33
|
-
sqlName:
|
|
40
|
+
sqlName: resolveSqlName(tsName, col),
|
|
34
41
|
kind: meta.kind,
|
|
35
42
|
nullable: meta.nullable,
|
|
36
43
|
unique: meta.unique,
|
|
@@ -45,19 +52,21 @@ function columnToManifest(tsName, col) {
|
|
|
45
52
|
}
|
|
46
53
|
return result;
|
|
47
54
|
}
|
|
48
|
-
function extrasToManifest(extras) {
|
|
55
|
+
function extrasToManifest(extras, columns, tableSqlName) {
|
|
49
56
|
const indexes = [];
|
|
50
57
|
let primaryKey = [];
|
|
51
58
|
for (const [name, extra] of Object.entries(extras)) {
|
|
52
59
|
if (extra.kind === "index") {
|
|
53
|
-
|
|
60
|
+
const index = {
|
|
54
61
|
name,
|
|
55
|
-
columns: extra.columns.map(
|
|
62
|
+
columns: extra.columns.map((tsName) => resolveSqlName(tsName, columns[tsName])),
|
|
56
63
|
unique: extra.unique,
|
|
57
|
-
}
|
|
64
|
+
};
|
|
65
|
+
index.sqlName = resolveIndexSqlName(tableSqlName, index);
|
|
66
|
+
indexes.push(index);
|
|
58
67
|
}
|
|
59
68
|
else if (extra.kind === "primaryKey") {
|
|
60
|
-
primaryKey = extra.columns.map(
|
|
69
|
+
primaryKey = extra.columns.map((tsName) => resolveSqlName(tsName, columns[tsName]));
|
|
61
70
|
}
|
|
62
71
|
}
|
|
63
72
|
return { indexes, primaryKey };
|
|
@@ -97,7 +106,7 @@ export function schemaToManifest(schema, m2mDefs = getManyToManyRegistry(), plug
|
|
|
97
106
|
const manifestTables = {};
|
|
98
107
|
for (const [accessor, tableDef] of Object.entries(tables)) {
|
|
99
108
|
const columns = Object.entries(tableDef._columns).map(([name, col]) => columnToManifest(name, col));
|
|
100
|
-
const { indexes, primaryKey } = extrasToManifest(tableDef._extras);
|
|
109
|
+
const { indexes, primaryKey } = extrasToManifest(tableDef._extras, tableDef._columns, tableDef._tableName);
|
|
101
110
|
const pk = primaryKey.length > 0
|
|
102
111
|
? primaryKey
|
|
103
112
|
: columns.filter((c) => c.primary).map((c) => c.sqlName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-to-manifest.js","sourceRoot":"","sources":["../../src/codegen/schema-to-manifest.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-to-manifest.js","sourceRoot":"","sources":["../../src/codegen/schema-to-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/dialect/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { Dialect, Manifest, ManifestColumn, ManifestManyToMany, ManifestRelation, ManifestTable, CompiledQuery, WhereOperator } from "./types.js";
|
|
1
|
+
export type { Dialect, Manifest, ManifestColumn, ManifestManyToMany, ManifestRelation, ManifestTable, ManifestDiff, DestructiveChange, CompiledQuery, WhereOperator, } from "./types.js";
|
|
2
2
|
export { postgresDialect, quoteIdentifier } from "./postgres.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dialect/index.ts"],"names":[],"mappings":"AAAA,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dialect/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dialect/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dialect/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import type { Dialect } from "./types.js";
|
|
1
|
+
import type { Dialect, Manifest, ManifestColumn, ManifestIndex } from "./types.js";
|
|
2
2
|
declare function q(name: string): string;
|
|
3
|
+
export declare function resolveColumnSqlType(col: ManifestColumn, manifest?: Manifest): string;
|
|
4
|
+
export declare function pgStorageSqlType(dataType: string, udtName: string): string;
|
|
5
|
+
export declare function typeCastUsing(sqlName: string, fromType: string, toType: string): string | undefined;
|
|
6
|
+
export declare function canAutoCastType(fromType: string, toType: string): boolean;
|
|
7
|
+
export declare function resolveIndexSqlName(tableSqlName: string, index: ManifestIndex): string;
|
|
8
|
+
export declare function resolveFkConstraintName(tableSqlName: string, columnSqlName: string): string;
|
|
9
|
+
export declare function resolveUniqueConstraintName(tableSqlName: string, columnSqlName: string): string;
|
|
3
10
|
export declare const postgresDialect: Dialect;
|
|
4
11
|
export { q as quoteIdentifier };
|
|
5
12
|
//# sourceMappingURL=postgres.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/dialect/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/dialect/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,OAAO,EACP,QAAQ,EACR,cAAc,EACd,aAAa,EAId,MAAM,YAAY,CAAC;AAGpB,iBAAS,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/B;AAqBD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,cAAc,EACnB,QAAQ,CAAC,EAAE,QAAQ,GAClB,MAAM,CAuBR;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAqB1E;AA0CD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAsCpB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzE;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,aAAa,GACnB,MAAM,CAMR;AAED,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,MAAM,CAER;AAED,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,MAAM,CAER;AAyND,eAAO,MAAM,eAAe,EAAE,OAgB7B,CAAC;AAEF,OAAO,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC"}
|
package/dist/dialect/postgres.js
CHANGED
|
@@ -12,30 +12,54 @@ const whereOperators = {
|
|
|
12
12
|
lt: (col, i) => `${col} < $${i}`,
|
|
13
13
|
lte: (col, i) => `${col} <= $${i}`,
|
|
14
14
|
in: (col, i) => `${col} = ANY($${i})`,
|
|
15
|
+
notIn: (col, i) => `NOT (${col} = ANY($${i}))`,
|
|
16
|
+
isNull: (col) => `${col} IS NULL`,
|
|
17
|
+
isNotNull: (col) => `${col} IS NOT NULL`,
|
|
15
18
|
};
|
|
16
|
-
function columnType(col) {
|
|
19
|
+
function columnType(col, manifest) {
|
|
20
|
+
return resolveColumnSqlType(col, manifest);
|
|
21
|
+
}
|
|
22
|
+
export function resolveColumnSqlType(col, manifest) {
|
|
23
|
+
if (col.storageSqlType) {
|
|
24
|
+
return col.storageSqlType;
|
|
25
|
+
}
|
|
26
|
+
if (col.kind === "fk" && col.fkTarget && manifest) {
|
|
27
|
+
const [tableSql, colSql] = col.fkTarget.split(".");
|
|
28
|
+
const targetTable = Object.values(manifest.tables).find((table) => table.sqlName === tableSql);
|
|
29
|
+
const targetCol = targetTable?.columns.find((column) => column.sqlName === colSql);
|
|
30
|
+
if (targetCol) {
|
|
31
|
+
return resolveColumnSqlType(targetCol, manifest);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
17
34
|
if (col.kind === "fk") {
|
|
18
35
|
return "TEXT";
|
|
19
36
|
}
|
|
20
37
|
return getColumnTypeOrThrow(col.kind).columnType(col);
|
|
21
38
|
}
|
|
22
|
-
function
|
|
23
|
-
if (
|
|
24
|
-
return
|
|
25
|
-
}
|
|
26
|
-
if (col.defaultValue === undefined) {
|
|
27
|
-
return null;
|
|
39
|
+
export function pgStorageSqlType(dataType, udtName) {
|
|
40
|
+
if (udtName === "uuid") {
|
|
41
|
+
return "UUID";
|
|
28
42
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
43
|
+
switch (dataType) {
|
|
44
|
+
case "boolean":
|
|
45
|
+
return "BOOLEAN";
|
|
46
|
+
case "integer":
|
|
47
|
+
case "bigint":
|
|
48
|
+
case "smallint":
|
|
49
|
+
return "INTEGER";
|
|
50
|
+
case "timestamp with time zone":
|
|
51
|
+
return "TIMESTAMPTZ";
|
|
52
|
+
case "timestamp without time zone":
|
|
53
|
+
return "TIMESTAMP";
|
|
54
|
+
case "text":
|
|
55
|
+
case "character varying":
|
|
56
|
+
return "TEXT";
|
|
57
|
+
default:
|
|
58
|
+
return "TEXT";
|
|
32
59
|
}
|
|
33
|
-
return typeof col.defaultValue === "string"
|
|
34
|
-
? `'${col.defaultValue.replace(/'/g, "''")}'`
|
|
35
|
-
: String(col.defaultValue);
|
|
36
60
|
}
|
|
37
|
-
function columnDef(col) {
|
|
38
|
-
const parts = [q(col.sqlName), columnType(col)];
|
|
61
|
+
function columnDef(col, manifest) {
|
|
62
|
+
const parts = [q(col.sqlName), columnType(col, manifest)];
|
|
39
63
|
if (col.primary) {
|
|
40
64
|
parts.push("PRIMARY KEY");
|
|
41
65
|
}
|
|
@@ -51,17 +75,88 @@ function columnDef(col) {
|
|
|
51
75
|
}
|
|
52
76
|
return parts.join(" ");
|
|
53
77
|
}
|
|
78
|
+
function formatDefaultValue(col) {
|
|
79
|
+
if (col.defaultNow) {
|
|
80
|
+
return defaultNowExpression();
|
|
81
|
+
}
|
|
82
|
+
if (col.defaultValue === undefined) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
const plugin = getColumnTypeOrThrow(col.kind);
|
|
86
|
+
if (plugin.formatDefault) {
|
|
87
|
+
return plugin.formatDefault(col, col.defaultValue);
|
|
88
|
+
}
|
|
89
|
+
return typeof col.defaultValue === "string"
|
|
90
|
+
? `'${col.defaultValue.replace(/'/g, "''")}'`
|
|
91
|
+
: String(col.defaultValue);
|
|
92
|
+
}
|
|
54
93
|
function defaultNowExpression() {
|
|
55
94
|
return "NOW()";
|
|
56
95
|
}
|
|
57
|
-
function
|
|
96
|
+
export function typeCastUsing(sqlName, fromType, toType) {
|
|
97
|
+
const col = q(sqlName);
|
|
98
|
+
const from = fromType.toUpperCase();
|
|
99
|
+
const to = toType.toUpperCase();
|
|
100
|
+
if (from === to) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
if (from === "TEXT" && to === "UUID") {
|
|
104
|
+
return `${col}::uuid`;
|
|
105
|
+
}
|
|
106
|
+
if (from === "UUID" && to === "TEXT") {
|
|
107
|
+
return `${col}::text`;
|
|
108
|
+
}
|
|
109
|
+
if (from === "INTEGER" && to === "TEXT") {
|
|
110
|
+
return `${col}::text`;
|
|
111
|
+
}
|
|
112
|
+
if (from === "TEXT" && to === "INTEGER") {
|
|
113
|
+
return `${col}::integer`;
|
|
114
|
+
}
|
|
115
|
+
if (from === "BOOLEAN" && to === "TEXT") {
|
|
116
|
+
return `${col}::text`;
|
|
117
|
+
}
|
|
118
|
+
if (from === "TEXT" && to === "BOOLEAN") {
|
|
119
|
+
return `${col}::boolean`;
|
|
120
|
+
}
|
|
121
|
+
if ((from === "TIMESTAMP WITH TIME ZONE" || from === "TIMESTAMPTZ") &&
|
|
122
|
+
(to === "TIMESTAMP WITHOUT TIME ZONE" || to === "TIMESTAMP")) {
|
|
123
|
+
return `${col}::timestamp`;
|
|
124
|
+
}
|
|
125
|
+
if ((from === "TIMESTAMP WITHOUT TIME ZONE" || from === "TIMESTAMP") &&
|
|
126
|
+
(to === "TIMESTAMP WITH TIME ZONE" || to === "TIMESTAMPTZ")) {
|
|
127
|
+
return `${col}::timestamptz`;
|
|
128
|
+
}
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
export function canAutoCastType(fromType, toType) {
|
|
132
|
+
return typeCastUsing("x", fromType, toType) !== undefined;
|
|
133
|
+
}
|
|
134
|
+
export function resolveIndexSqlName(tableSqlName, index) {
|
|
135
|
+
if (index.sqlName) {
|
|
136
|
+
return index.sqlName;
|
|
137
|
+
}
|
|
138
|
+
const suffix = index.unique ? "_key" : "_idx";
|
|
139
|
+
return `${tableSqlName}_${index.name}${suffix}`;
|
|
140
|
+
}
|
|
141
|
+
export function resolveFkConstraintName(tableSqlName, columnSqlName) {
|
|
142
|
+
return `${tableSqlName}_${columnSqlName}_fkey`;
|
|
143
|
+
}
|
|
144
|
+
export function resolveUniqueConstraintName(tableSqlName, columnSqlName) {
|
|
145
|
+
return `${tableSqlName}_${columnSqlName}_key`;
|
|
146
|
+
}
|
|
147
|
+
function emitCreateExtensions(extensions) {
|
|
148
|
+
return extensions.map((ext) => `CREATE EXTENSION IF NOT EXISTS ${ext};`);
|
|
149
|
+
}
|
|
150
|
+
function emitCreateTable(table, options = {}) {
|
|
151
|
+
const inlineForeignKeys = options.inlineForeignKeys ?? true;
|
|
152
|
+
const manifest = options.manifest;
|
|
58
153
|
const lines = [];
|
|
59
154
|
for (const col of table.columns) {
|
|
60
155
|
if (col.primary && table.primaryKey.length <= 1) {
|
|
61
|
-
lines.push(` ${columnDef(col)}`);
|
|
156
|
+
lines.push(` ${columnDef(col, manifest)}`);
|
|
62
157
|
}
|
|
63
158
|
else if (!col.primary) {
|
|
64
|
-
lines.push(` ${columnDef(col)}`);
|
|
159
|
+
lines.push(` ${columnDef(col, manifest)}`);
|
|
65
160
|
}
|
|
66
161
|
}
|
|
67
162
|
if (table.primaryKey.length > 1) {
|
|
@@ -74,26 +169,139 @@ function emitCreateTable(table) {
|
|
|
74
169
|
lines.push(` UNIQUE (${cols})`);
|
|
75
170
|
}
|
|
76
171
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
172
|
+
if (inlineForeignKeys) {
|
|
173
|
+
for (const col of table.columns) {
|
|
174
|
+
if (col.kind === "fk" && col.fkTarget) {
|
|
175
|
+
const [targetTable, targetCol] = col.fkTarget.split(".");
|
|
176
|
+
const onDelete = col.onDelete
|
|
177
|
+
? ` ON DELETE ${col.onDelete.toUpperCase()}`
|
|
178
|
+
: "";
|
|
179
|
+
lines.push(` FOREIGN KEY (${q(col.sqlName)}) REFERENCES ${q(targetTable)}(${q(targetCol)})${onDelete}`);
|
|
180
|
+
}
|
|
82
181
|
}
|
|
83
182
|
}
|
|
84
183
|
const body = lines.join(",\n");
|
|
85
184
|
return `CREATE TABLE ${q(table.sqlName)} (\n${body}\n);`;
|
|
86
185
|
}
|
|
87
|
-
function
|
|
186
|
+
function emitDropTable(table) {
|
|
187
|
+
return `DROP TABLE ${q(table.sqlName)};`;
|
|
188
|
+
}
|
|
189
|
+
function emitCreateIndex(table, index) {
|
|
190
|
+
const indexName = resolveIndexSqlName(table.sqlName, index);
|
|
191
|
+
const cols = index.columns.map((c) => q(c)).join(", ");
|
|
192
|
+
const unique = index.unique ? "UNIQUE " : "";
|
|
193
|
+
return `CREATE ${unique}INDEX ${q(indexName)} ON ${q(table.sqlName)} (${cols});`;
|
|
194
|
+
}
|
|
195
|
+
function emitDropIndex(indexName) {
|
|
196
|
+
return `DROP INDEX IF EXISTS ${q(indexName)};`;
|
|
197
|
+
}
|
|
198
|
+
function emitDropConstraint(tableSqlName, constraintName) {
|
|
199
|
+
return `ALTER TABLE ${q(tableSqlName)} DROP CONSTRAINT ${q(constraintName)};`;
|
|
200
|
+
}
|
|
201
|
+
function emitAddForeignKey(table, col) {
|
|
202
|
+
if (!col.fkTarget) {
|
|
203
|
+
throw new Error(`FK column "${col.sqlName}" is missing fkTarget`);
|
|
204
|
+
}
|
|
205
|
+
const [targetTable, targetCol] = col.fkTarget.split(".");
|
|
206
|
+
const constraintName = col.fkConstraintName ?? resolveFkConstraintName(table.sqlName, col.sqlName);
|
|
207
|
+
const onDelete = col.onDelete ? ` ON DELETE ${col.onDelete.toUpperCase()}` : "";
|
|
208
|
+
return `ALTER TABLE ${q(table.sqlName)} ADD CONSTRAINT ${q(constraintName)} FOREIGN KEY (${q(col.sqlName)}) REFERENCES ${q(targetTable)}(${q(targetCol)})${onDelete};`;
|
|
209
|
+
}
|
|
210
|
+
function emitAlterColumn(table, alter, manifest) {
|
|
88
211
|
const stmts = [];
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
212
|
+
const tableName = q(table.sqlName);
|
|
213
|
+
const colName = q(alter.sqlName);
|
|
214
|
+
if (alter.setType) {
|
|
215
|
+
const typeSql = columnType(alter.setType, manifest);
|
|
216
|
+
const using = alter.fromSqlType !== undefined
|
|
217
|
+
? typeCastUsing(alter.sqlName, alter.fromSqlType, typeSql)
|
|
218
|
+
: undefined;
|
|
219
|
+
const usingClause = using ? ` USING ${using}` : "";
|
|
220
|
+
stmts.push(`ALTER TABLE ${tableName} ALTER COLUMN ${colName} TYPE ${typeSql}${usingClause};`);
|
|
221
|
+
}
|
|
222
|
+
if (alter.setNullable !== undefined) {
|
|
223
|
+
stmts.push(alter.setNullable
|
|
224
|
+
? `ALTER TABLE ${tableName} ALTER COLUMN ${colName} DROP NOT NULL;`
|
|
225
|
+
: `ALTER TABLE ${tableName} ALTER COLUMN ${colName} SET NOT NULL;`);
|
|
226
|
+
}
|
|
227
|
+
if (alter.setDefault !== undefined) {
|
|
228
|
+
if (alter.setDefault === null) {
|
|
229
|
+
stmts.push(`ALTER TABLE ${tableName} ALTER COLUMN ${colName} DROP DEFAULT;`);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
const defaultSql = formatDefaultValue(alter.setDefault);
|
|
233
|
+
if (defaultSql !== null) {
|
|
234
|
+
stmts.push(`ALTER TABLE ${tableName} ALTER COLUMN ${colName} SET DEFAULT ${defaultSql};`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (alter.dropUniqueConstraint) {
|
|
239
|
+
stmts.push(emitDropConstraint(table.sqlName, alter.dropUniqueConstraint));
|
|
240
|
+
}
|
|
241
|
+
if (alter.setUnique === true) {
|
|
242
|
+
const constraintName = resolveUniqueConstraintName(table.sqlName, alter.sqlName);
|
|
243
|
+
stmts.push(`ALTER TABLE ${tableName} ADD CONSTRAINT ${q(constraintName)} UNIQUE (${colName});`);
|
|
244
|
+
}
|
|
245
|
+
return stmts;
|
|
246
|
+
}
|
|
247
|
+
function emitAlterTable(table, diff) {
|
|
248
|
+
const stmts = [];
|
|
249
|
+
const manifest = diff.manifest;
|
|
250
|
+
if (diff.fkChanges) {
|
|
251
|
+
for (const change of diff.fkChanges) {
|
|
252
|
+
if (change.drop) {
|
|
253
|
+
stmts.push(emitDropConstraint(table.sqlName, change.drop));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (diff.dropIndexes) {
|
|
258
|
+
for (const indexName of diff.dropIndexes) {
|
|
259
|
+
stmts.push(emitDropIndex(indexName));
|
|
92
260
|
}
|
|
93
261
|
}
|
|
94
262
|
if (diff.dropColumns) {
|
|
95
263
|
for (const col of diff.dropColumns) {
|
|
96
|
-
stmts.push(`ALTER TABLE ${q(
|
|
264
|
+
stmts.push(`ALTER TABLE ${q(table.sqlName)} DROP COLUMN ${q(col)};`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (diff.renameColumns) {
|
|
268
|
+
for (const { from, to } of diff.renameColumns) {
|
|
269
|
+
stmts.push(`ALTER TABLE ${q(table.sqlName)} RENAME COLUMN ${q(from)} TO ${q(to)};`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (diff.addColumns) {
|
|
273
|
+
for (const col of diff.addColumns) {
|
|
274
|
+
stmts.push(`ALTER TABLE ${q(table.sqlName)} ADD COLUMN ${columnDef(col, manifest)};`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (diff.alterColumns) {
|
|
278
|
+
for (const alter of diff.alterColumns) {
|
|
279
|
+
stmts.push(...emitAlterColumn(table, alter, manifest));
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (diff.addIndexes) {
|
|
283
|
+
for (const index of diff.addIndexes) {
|
|
284
|
+
stmts.push(emitCreateIndex(table, index));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (diff.fkChanges) {
|
|
288
|
+
for (const change of diff.fkChanges) {
|
|
289
|
+
if (change.add) {
|
|
290
|
+
const col = table.columns.find((c) => c.sqlName === change.column);
|
|
291
|
+
if (col?.fkTarget) {
|
|
292
|
+
const fkCol = {
|
|
293
|
+
...col,
|
|
294
|
+
fkTarget: change.add.target,
|
|
295
|
+
};
|
|
296
|
+
if (change.add.onDelete !== undefined) {
|
|
297
|
+
fkCol.onDelete = change.add.onDelete;
|
|
298
|
+
}
|
|
299
|
+
if (change.add.constraintName !== undefined) {
|
|
300
|
+
fkCol.fkConstraintName = change.add.constraintName;
|
|
301
|
+
}
|
|
302
|
+
stmts.push(emitAddForeignKey(table, fkCol));
|
|
303
|
+
}
|
|
304
|
+
}
|
|
97
305
|
}
|
|
98
306
|
}
|
|
99
307
|
return stmts;
|
|
@@ -102,8 +310,16 @@ export const postgresDialect = {
|
|
|
102
310
|
name: "postgresql",
|
|
103
311
|
quoteIdentifier: q,
|
|
104
312
|
columnType,
|
|
313
|
+
resolveIndexSqlName,
|
|
314
|
+
emitCreateExtensions,
|
|
105
315
|
emitCreateTable,
|
|
316
|
+
emitDropTable,
|
|
317
|
+
emitCreateIndex,
|
|
318
|
+
emitDropIndex,
|
|
319
|
+
emitDropConstraint,
|
|
106
320
|
emitAlterTable,
|
|
321
|
+
emitAlterColumn,
|
|
322
|
+
emitAddForeignKey,
|
|
107
323
|
whereOperators,
|
|
108
324
|
defaultNowExpression,
|
|
109
325
|
};
|