okmodel 0.3.0 → 0.4.0
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 +182 -22
- package/dist/contracts/catalog/document.d.ts +6 -2
- package/dist/dialects/pg/ext/citext.js +1 -1
- package/dist/dialects/pg/ext/index.js +1 -1
- package/dist/dialects/pg/ext/pg-trgm.js +1 -1
- package/dist/dialects/pg/index.js +3 -3
- package/dist/dialects/pg/role/sql.d.ts +11 -4
- package/dist/dialects/pg/table.d.ts +17 -1
- package/dist/dialects/pg/view/index.js +1 -1
- package/dist/dialects/pg/view/scratch.d.ts +3 -2
- package/dist/runtime/catalog-cache.d.ts +17 -0
- package/dist/runtime/compat-words.d.ts +23 -0
- package/dist/runtime/drift-detail.d.ts +20 -4
- package/dist/runtime/drift.d.ts +4 -2
- package/dist/runtime/pg/bun.js +2 -2
- package/dist/runtime/pg/pg.js +2 -2
- package/dist/runtime/pg/pglite.js +2 -2
- package/dist/runtime/pg/postgresjs.js +2 -2
- package/dist/runtime/traits/index.js +5 -4
- package/dist/runtime/types.d.ts +2 -0
- package/dist/runtime/validate/index.js +2 -2
- package/dist/shared/2321avmn.js +418 -0
- package/dist/shared/{x6wysh83.js → 3p4b1fg0.js} +3 -5
- package/dist/shared/{wekze34d.js → 41kv2xdm.js} +74 -2
- package/dist/shared/{fs0ex00p.js → 4ef7mmqf.js} +2 -2
- package/dist/shared/5mtf6cj3.js +94 -0
- package/dist/shared/{999ade2q.js → 5vdm4sgp.js} +1 -1
- package/dist/shared/{qybh48nd.js → 6693j9rs.js} +1 -1
- package/dist/shared/{bqha5cg6.js → 6p5k20sm.js} +2 -2
- package/dist/shared/7nk68fj8.js +751 -0
- package/dist/shared/{ne02ng5c.js → 84ptn35q.js} +7 -4
- package/dist/shared/{t616ynfn.js → 8jb4ymh2.js} +59 -12
- package/dist/shared/{th14ygv2.js → 8ktwd3rh.js} +29 -1
- package/dist/shared/9yn6a2vd.js +11 -0
- package/dist/shared/ady1ms74.js +72 -0
- package/dist/shared/{scwxrpx2.js → c5g81ngb.js} +82 -15
- package/dist/shared/{6bazvqwm.js → fb00y8fp.js} +2 -2
- package/dist/shared/{jkc6ws1p.js → g7ez901n.js} +83 -2
- package/dist/shared/{kgnc8grt.js → gdh9mrtp.js} +1 -1
- package/dist/shared/hqjsxnz7.js +13 -0
- package/dist/shared/htnaj77v.js +17 -0
- package/dist/shared/{mt5wswjz.js → jgxzjzcz.js} +1 -1
- package/dist/shared/{6w5j844a.js → jsd07prz.js} +2 -2
- package/dist/shared/{m78s7898.js → kafaa5zv.js} +1 -1
- package/dist/shared/kj680nxv.js +19 -0
- package/dist/shared/{k34e0xf2.js → kkzwp3d2.js} +8 -8
- package/dist/shared/{2ssqrv66.js → n5y9zyj1.js} +1029 -174
- package/dist/shared/{ty3v3hfk.js → nxb42q7h.js} +2 -2
- package/dist/shared/{5nmdenb6.js → q6zsyh31.js} +1003 -40
- package/dist/shared/{fptpmvxp.js → q795afwa.js} +26 -21
- package/dist/shared/{3ekj9x92.js → qn0srwwq.js} +1 -1
- package/dist/shared/s4mb6a4b.js +545 -0
- package/dist/shared/{01yr20s5.js → sf8m6tfy.js} +2 -2
- package/dist/shared/{bryqk9k9.js → sr5ms7b3.js} +1 -1
- package/dist/shared/{meck53jv.js → tny2t3sm.js} +6 -5
- package/dist/shared/{p24x2334.js → v7tpnhnz.js} +1 -1
- package/dist/shared/{xw1d69vd.js → wqem4jed.js} +6 -6
- package/dist/shared/{49ypnfwt.js → xghkt7a9.js} +50 -28
- package/dist/shared/{7fvtrkwr.js → ycatkxmq.js} +1 -1
- package/dist/shared/ygem90rn.js +900 -0
- package/dist/shared/{1tfdfvhh.js → yjw02enp.js} +6 -4
- package/dist/shared/{ydaz1sv3.js → zg24x0hm.js} +1 -1
- package/dist/tooling/cli.js +46 -17
- package/dist/tooling/migrate/apply.d.ts +59 -5
- package/dist/tooling/migrate/backfill.d.ts +136 -0
- package/dist/tooling/migrate/check.d.ts +65 -0
- package/dist/tooling/migrate/classify.d.ts +108 -0
- package/dist/tooling/migrate/commands.d.ts +2 -2
- package/dist/tooling/migrate/config.d.ts +22 -0
- package/dist/tooling/migrate/doctor.d.ts +3 -0
- package/dist/tooling/migrate/drift.d.ts +18 -2
- package/dist/tooling/migrate/estimate.d.ts +50 -0
- package/dist/tooling/migrate/extensions.d.ts +2 -0
- package/dist/tooling/migrate/files.d.ts +12 -0
- package/dist/tooling/migrate/index.d.ts +3 -2
- package/dist/tooling/migrate/index.js +67 -1
- package/dist/tooling/migrate/lint-rules.d.ts +51 -0
- package/dist/tooling/migrate/lint.d.ts +71 -0
- package/dist/tooling/migrate/managed.d.ts +1 -1
- package/dist/tooling/migrate/plan.d.ts +64 -9
- package/dist/tooling/migrate/project.d.ts +42 -7
- package/dist/tooling/migrate/provision.d.ts +18 -0
- package/dist/tooling/migrate/reference.d.ts +40 -0
- package/dist/tooling/migrate/runner.d.ts +108 -0
- package/dist/tooling/migrate/safe.d.ts +77 -0
- package/dist/tooling/migrate/seed.d.ts +20 -0
- package/dist/tooling/migrate/snapshot.d.ts +78 -0
- package/dist/tooling/migrate/status.d.ts +25 -6
- package/dist/tooling/testing/factories.d.ts +117 -0
- package/dist/tooling/testing/facts.d.ts +72 -0
- package/dist/tooling/testing/index.d.ts +89 -0
- package/dist/tooling/testing/index.js +8 -0
- package/dist/tooling/testing/isolation.d.ts +30 -0
- package/dist/tooling/testing/random.d.ts +40 -0
- package/dist/tooling/testing/record.d.ts +38 -0
- package/package.json +6 -2
- package/dist/shared/dbjej1tw.js +0 -456
- package/dist/shared/g4f5kcx9.js +0 -37
- package/dist/shared/qbxzvwwc.js +0 -88
- package/dist/shared/zwmqxb0g.js +0 -79
- package/dist/shared/{xva8v7qk.js → awrsqrn7.js} +3 -3
- package/dist/shared/{75xkjv0t.js → fa9vt245.js} +0 -0
- package/dist/shared/{m9tv7xn7.js → radd3z4g.js} +3 -3
- /package/dist/shared/{0jc3ffzf.js → zvbjc949.js} +0 -0
|
@@ -117,7 +117,7 @@ function open2(config) {
|
|
|
117
117
|
},
|
|
118
118
|
async batch(statements, options) {
|
|
119
119
|
return sockets.occupy(async () => {
|
|
120
|
-
const { checkout } = await import("./
|
|
120
|
+
const { checkout } = await import("./5vdm4sgp.js");
|
|
121
121
|
const connection = await checkout(held);
|
|
122
122
|
try {
|
|
123
123
|
return await connection.batch(statements, options);
|
|
@@ -129,12 +129,12 @@ function open2(config) {
|
|
|
129
129
|
reserve() {
|
|
130
130
|
const gate = sockets.busyGate();
|
|
131
131
|
gate.enter();
|
|
132
|
-
return import("./
|
|
132
|
+
return import("./5vdm4sgp.js").then((mod) => mod.holdCheckout(gate, () => mod.checkout(held)), (error) => {
|
|
133
133
|
gate.leave();
|
|
134
134
|
throw error;
|
|
135
135
|
});
|
|
136
136
|
},
|
|
137
|
-
describe: (text, params) => sockets.occupy(() => import("./
|
|
137
|
+
describe: (text, params) => sockets.occupy(() => import("./5vdm4sgp.js").then((mod) => mod.describe(sql, text, params))),
|
|
138
138
|
stream(text, params) {
|
|
139
139
|
const gate = sockets.busyGate();
|
|
140
140
|
return async function* () {
|
|
@@ -149,7 +149,7 @@ function open2(config) {
|
|
|
149
149
|
listen(channel, onNotify) {
|
|
150
150
|
const gate = sockets.listenerGate();
|
|
151
151
|
gate.enter();
|
|
152
|
-
return import("./
|
|
152
|
+
return import("./5vdm4sgp.js").then((mod) => mod.holdListener(gate, async () => {
|
|
153
153
|
const listening = await sql.listen(channel, onNotify);
|
|
154
154
|
return async () => {
|
|
155
155
|
await listening.unlisten();
|
|
@@ -219,7 +219,7 @@ class PgSession {
|
|
|
219
219
|
onAbort();
|
|
220
220
|
else
|
|
221
221
|
watch.signal.addEventListener("abort", onAbort, { once: true });
|
|
222
|
-
return import("./
|
|
222
|
+
return import("./5vdm4sgp.js").then((mod) => mod.watchQuery(pending, watch, onAbort, {
|
|
223
223
|
start,
|
|
224
224
|
text,
|
|
225
225
|
notices: this.notices,
|
|
@@ -271,7 +271,7 @@ class PgSession {
|
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
273
|
async function* loadStream(sql, text, params) {
|
|
274
|
-
const { stream } = await import("./
|
|
274
|
+
const { stream } = await import("./5vdm4sgp.js");
|
|
275
275
|
yield* stream(sql, text, params);
|
|
276
276
|
}
|
|
277
277
|
function send(sql, text, params, named) {
|
|
@@ -2,13 +2,14 @@ import {
|
|
|
2
2
|
roleObject,
|
|
3
3
|
grantObject,
|
|
4
4
|
defaultPrivilegeObject
|
|
5
|
-
} from "./
|
|
5
|
+
} from "./8jb4ymh2.js";
|
|
6
6
|
import {
|
|
7
7
|
planMigration
|
|
8
|
-
} from "./
|
|
8
|
+
} from "./n5y9zyj1.js";
|
|
9
9
|
import {
|
|
10
|
-
quoteIdent
|
|
11
|
-
|
|
10
|
+
quoteIdent,
|
|
11
|
+
createObjectSql
|
|
12
|
+
} from "./41kv2xdm.js";
|
|
12
13
|
import {
|
|
13
14
|
functionObject,
|
|
14
15
|
triggerObject
|
|
@@ -21,14 +22,12 @@ import {
|
|
|
21
22
|
} from "./y005b761.js";
|
|
22
23
|
import {
|
|
23
24
|
extensionObject
|
|
24
|
-
} from "./
|
|
25
|
-
import {
|
|
26
|
-
catalog
|
|
27
|
-
} from "./jkc6ws1p.js";
|
|
25
|
+
} from "./8ktwd3rh.js";
|
|
28
26
|
import {
|
|
27
|
+
catalog,
|
|
29
28
|
enumType,
|
|
30
29
|
domainType
|
|
31
|
-
} from "./
|
|
30
|
+
} from "./g7ez901n.js";
|
|
32
31
|
import {
|
|
33
32
|
staticNamespace2,
|
|
34
33
|
identityKey2,
|
|
@@ -252,6 +251,7 @@ async function introspectSchema(runner, concrete, logical = "public", options) {
|
|
|
252
251
|
const parent = parents.get(parentName) ?? { namespace, name: parentName };
|
|
253
252
|
const kind = constraintKind(text(row, "contype"));
|
|
254
253
|
const columns = list(text(row, "columns"));
|
|
254
|
+
const name = text(row, "name");
|
|
255
255
|
const expression = kind === "check" ? checkExpression(text(row, "definition")) : "";
|
|
256
256
|
const refTable = text(row, "ref_table");
|
|
257
257
|
const refColumns = list(text(row, "ref_columns"));
|
|
@@ -261,8 +261,8 @@ async function introspectSchema(runner, concrete, logical = "public", options) {
|
|
|
261
261
|
objects.push(constraint2({
|
|
262
262
|
parent,
|
|
263
263
|
constraintKind: kind,
|
|
264
|
-
name
|
|
265
|
-
nameKey: kind
|
|
264
|
+
name,
|
|
265
|
+
nameKey: constraintNameKey(kind, parentName, name, columns),
|
|
266
266
|
columns,
|
|
267
267
|
provenance,
|
|
268
268
|
deferrable: flag(row, "deferrable"),
|
|
@@ -861,6 +861,19 @@ function partitionMethod(value) {
|
|
|
861
861
|
return "hash";
|
|
862
862
|
return;
|
|
863
863
|
}
|
|
864
|
+
function constraintNameKey(kind, parent, name, columns) {
|
|
865
|
+
if (kind === "primaryKey")
|
|
866
|
+
return "pkey";
|
|
867
|
+
const tag = kind === "unique" ? "key" : kind === "foreignKey" ? "fkey" : "check";
|
|
868
|
+
const prefix = `${parent}_`;
|
|
869
|
+
const suffix = `_${tag}`;
|
|
870
|
+
if (name.startsWith(prefix) && name.endsWith(suffix) && name.length > prefix.length + suffix.length) {
|
|
871
|
+
return name.slice(prefix.length, -suffix.length);
|
|
872
|
+
}
|
|
873
|
+
if (columns.length > 0)
|
|
874
|
+
return columns.join("_");
|
|
875
|
+
return tag;
|
|
876
|
+
}
|
|
864
877
|
function constraintKind(value) {
|
|
865
878
|
if (value === "p")
|
|
866
879
|
return "primaryKey";
|
|
@@ -934,6 +947,13 @@ async function sealViews(runner, source) {
|
|
|
934
947
|
await runner.query(`create schema ${quoteIdent(SCRATCH)}`);
|
|
935
948
|
try {
|
|
936
949
|
await runner.query(`set search_path to ${quoteIdent(SCRATCH)}`);
|
|
950
|
+
for (const object of source.objects) {
|
|
951
|
+
if (object.kind !== "type")
|
|
952
|
+
continue;
|
|
953
|
+
const statement = createObjectSql(object, SCRATCH);
|
|
954
|
+
if (statement !== undefined)
|
|
955
|
+
await runner.query(statement);
|
|
956
|
+
}
|
|
937
957
|
for (const object of source.objects) {
|
|
938
958
|
if (object.kind !== "table")
|
|
939
959
|
continue;
|
|
@@ -1061,11 +1081,11 @@ async function dropScratch(runner) {
|
|
|
1061
1081
|
continue;
|
|
1062
1082
|
await runner.query(`drop table if exists ${quoteIdent(SCRATCH)}.${quoteIdent(cellText(row.name))}`);
|
|
1063
1083
|
}
|
|
1064
|
-
await runner.query(`drop schema if exists ${quoteIdent(SCRATCH)}`);
|
|
1084
|
+
await runner.query(`drop schema if exists ${quoteIdent(SCRATCH)} cascade`);
|
|
1065
1085
|
}
|
|
1066
1086
|
|
|
1067
1087
|
// src/tooling/migrate/drift.ts
|
|
1068
|
-
async function
|
|
1088
|
+
async function assertAuthorDrift2(url, author, roles) {
|
|
1069
1089
|
const sql = postgres(url, {
|
|
1070
1090
|
max: 1,
|
|
1071
1091
|
connect_timeout: 5,
|
|
@@ -1078,10 +1098,9 @@ async function assertAuthorDrift(url, author, roles) {
|
|
|
1078
1098
|
`;
|
|
1079
1099
|
if (present[0]?.reg == null)
|
|
1080
1100
|
return;
|
|
1081
|
-
const runner =
|
|
1082
|
-
const managed = managedRoleNames(roles);
|
|
1101
|
+
const runner = catalogQuery2(sql);
|
|
1083
1102
|
const authorOnServer = await sealViews(runner, author);
|
|
1084
|
-
const live = await introspectSchema(runner, "public", "public",
|
|
1103
|
+
const live = await introspectSchema(runner, "public", "public", managedRoleOptions2(roles));
|
|
1085
1104
|
const plan = planMigration({ before: live, after: authorOnServer, name: "check" });
|
|
1086
1105
|
if (plan.steps.length === 0)
|
|
1087
1106
|
return;
|
|
@@ -1096,15 +1115,7 @@ ${plan.steps.map((step) => step.sql).join(`
|
|
|
1096
1115
|
await sql.end({ timeout: 5 });
|
|
1097
1116
|
}
|
|
1098
1117
|
}
|
|
1099
|
-
function
|
|
1100
|
-
if (roles === undefined)
|
|
1101
|
-
return;
|
|
1102
|
-
const names = new Set([roles.migration, roles.app]);
|
|
1103
|
-
for (const role of roles.managed ?? [])
|
|
1104
|
-
names.add(role.name);
|
|
1105
|
-
return [...names];
|
|
1106
|
-
}
|
|
1107
|
-
function queryOf(sql) {
|
|
1118
|
+
function catalogQuery2(sql) {
|
|
1108
1119
|
return {
|
|
1109
1120
|
async query(text, params) {
|
|
1110
1121
|
const rows = await sql.unsafe(text, params === undefined ? undefined : [...params]);
|
|
@@ -1117,6 +1128,17 @@ function queryOf(sql) {
|
|
|
1117
1128
|
}
|
|
1118
1129
|
};
|
|
1119
1130
|
}
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
};
|
|
1131
|
+
function managedRoleOptions2(roles) {
|
|
1132
|
+
const names = managedRoleNames(roles);
|
|
1133
|
+
return names === undefined ? undefined : { managedRoles: names };
|
|
1134
|
+
}
|
|
1135
|
+
function managedRoleNames(roles) {
|
|
1136
|
+
if (roles === undefined)
|
|
1137
|
+
return;
|
|
1138
|
+
const names = new Set([roles.migration, roles.app]);
|
|
1139
|
+
for (const role of roles.managed ?? [])
|
|
1140
|
+
names.add(role.name);
|
|
1141
|
+
return [...names];
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
export { introspectSchema, sealViews, assertAuthorDrift2, catalogQuery2, managedRoleOptions2 };
|