@codemarc/blt 1.6.4 → 1.7.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 +62 -0
- package/dist/blt +2 -0
- package/dist/blt.d.ts.map +1 -1
- package/dist/blt.js.map +1 -1
- package/dist/commands/data/apply.d.ts +6 -0
- package/dist/commands/data/apply.d.ts.map +1 -0
- package/dist/commands/data/apply.js +363 -0
- package/dist/commands/data/apply.js.map +1 -0
- package/dist/commands/data/helpers.d.ts +5 -0
- package/dist/commands/data/helpers.d.ts.map +1 -0
- package/dist/commands/data/helpers.js +19 -0
- package/dist/commands/data/helpers.js.map +1 -0
- package/dist/commands/data/pull.d.ts +11 -0
- package/dist/commands/data/pull.d.ts.map +1 -0
- package/dist/commands/data/pull.js +101 -0
- package/dist/commands/data/pull.js.map +1 -0
- package/dist/commands/data/remove.d.ts +7 -0
- package/dist/commands/data/remove.d.ts.map +1 -0
- package/dist/commands/data/remove.js +29 -0
- package/dist/commands/data/remove.js.map +1 -0
- package/dist/commands/data.d.ts +3 -0
- package/dist/commands/data.d.ts.map +1 -0
- package/dist/commands/data.js +100 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/lib/data-pull-extra-tables.d.ts +26 -0
- package/dist/lib/data-pull-extra-tables.d.ts.map +1 -0
- package/dist/lib/data-pull-extra-tables.js +212 -0
- package/dist/lib/data-pull-extra-tables.js.map +1 -0
- package/dist/lib/data-pull-manifest.d.ts +97 -0
- package/dist/lib/data-pull-manifest.d.ts.map +1 -0
- package/dist/lib/data-pull-manifest.js +603 -0
- package/dist/lib/data-pull-manifest.js.map +1 -0
- package/dist/lib/database-runner.d.ts +28 -2
- package/dist/lib/database-runner.d.ts.map +1 -1
- package/dist/lib/database-runner.js +112 -49
- package/dist/lib/database-runner.js.map +1 -1
- package/dist/lib/repositories.js +4 -4
- package/dist/lib/repositories.js.map +1 -1
- package/dist/lib/yaml-converter.d.ts +25 -1
- package/dist/lib/yaml-converter.d.ts.map +1 -1
- package/dist/lib/yaml-converter.js +98 -15
- package/dist/lib/yaml-converter.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,603 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest for `blt data pull` → rows shaped like instance YAML
|
|
3
|
+
* (function / procedure / table + `{ row }[]`).
|
|
4
|
+
*/
|
|
5
|
+
import { dumpPublicTableForCuratedPull } from "./data-pull-extra-tables";
|
|
6
|
+
/** Physical `public` tables already exported by {@link FULL_PULL_SEQUENCE}. */
|
|
7
|
+
export const MANIFEST_COVERED_PUBLIC_TABLES = [
|
|
8
|
+
"role_props",
|
|
9
|
+
"modules",
|
|
10
|
+
"settings",
|
|
11
|
+
"payment_providers",
|
|
12
|
+
"nodes",
|
|
13
|
+
"taxes",
|
|
14
|
+
"menus",
|
|
15
|
+
"categories",
|
|
16
|
+
"items",
|
|
17
|
+
"groups",
|
|
18
|
+
];
|
|
19
|
+
// --- shared helpers ---
|
|
20
|
+
function num(v, fallback = 0) {
|
|
21
|
+
if (v === null || v === undefined)
|
|
22
|
+
return fallback;
|
|
23
|
+
if (typeof v === "number")
|
|
24
|
+
return v;
|
|
25
|
+
const n = parseInt(String(v), 10);
|
|
26
|
+
return Number.isNaN(n) ? fallback : n;
|
|
27
|
+
}
|
|
28
|
+
export function jsonProps(props) {
|
|
29
|
+
if (props === null || props === undefined)
|
|
30
|
+
return {};
|
|
31
|
+
if (typeof props === "object" && !Array.isArray(props)) {
|
|
32
|
+
return props;
|
|
33
|
+
}
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
function firstTag(props) {
|
|
37
|
+
const tags = props.tags;
|
|
38
|
+
if (Array.isArray(tags) && tags.length > 0 && typeof tags[0] === "string") {
|
|
39
|
+
return tags[0];
|
|
40
|
+
}
|
|
41
|
+
return "untagged";
|
|
42
|
+
}
|
|
43
|
+
function hasCategory(props) {
|
|
44
|
+
const c = props.category;
|
|
45
|
+
return Array.isArray(c) && c.length > 0;
|
|
46
|
+
}
|
|
47
|
+
const SETTINGS_KIND_MAP = {
|
|
48
|
+
meta: { ord: "00", slug: "meta" },
|
|
49
|
+
concept: { ord: "01", slug: "concept" },
|
|
50
|
+
location: { ord: "02", slug: "location" },
|
|
51
|
+
hours: { ord: "03", slug: "hours" },
|
|
52
|
+
branding: { ord: "04", slug: "branding" },
|
|
53
|
+
};
|
|
54
|
+
function partitionSettings(rows) {
|
|
55
|
+
const byKind = new Map();
|
|
56
|
+
for (const r of rows) {
|
|
57
|
+
const kind = String(r.row.kind ?? "unknown");
|
|
58
|
+
let bucket = byKind.get(kind);
|
|
59
|
+
if (!bucket) {
|
|
60
|
+
bucket = [];
|
|
61
|
+
byKind.set(kind, bucket);
|
|
62
|
+
}
|
|
63
|
+
bucket.push(r);
|
|
64
|
+
}
|
|
65
|
+
const kinds = [...byKind.keys()].sort((a, b) => {
|
|
66
|
+
const ma = SETTINGS_KIND_MAP[a];
|
|
67
|
+
const mb = SETTINGS_KIND_MAP[b];
|
|
68
|
+
if (ma && mb)
|
|
69
|
+
return ma.ord.localeCompare(mb.ord);
|
|
70
|
+
if (ma)
|
|
71
|
+
return -1;
|
|
72
|
+
if (mb)
|
|
73
|
+
return 1;
|
|
74
|
+
return a.localeCompare(b);
|
|
75
|
+
});
|
|
76
|
+
return kinds.map((kind) => {
|
|
77
|
+
const m = SETTINGS_KIND_MAP[kind] ?? {
|
|
78
|
+
ord: "90",
|
|
79
|
+
slug: kind.replace(/[^a-z0-9-]/gi, "-").toLowerCase() || "unknown",
|
|
80
|
+
};
|
|
81
|
+
const stem = `10-020-settings-${m.ord}-${m.slug}`;
|
|
82
|
+
return {
|
|
83
|
+
assetId: stem,
|
|
84
|
+
snapshotStem: stem,
|
|
85
|
+
rows: byKind.get(kind) ?? [],
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function partitionItems(rows) {
|
|
90
|
+
const menu = [];
|
|
91
|
+
const byTag = new Map();
|
|
92
|
+
for (const r of rows) {
|
|
93
|
+
const props = jsonProps(r.row.props);
|
|
94
|
+
if (hasCategory(props)) {
|
|
95
|
+
menu.push(r);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const tag = firstTag(props);
|
|
99
|
+
let bucket = byTag.get(tag);
|
|
100
|
+
if (!bucket) {
|
|
101
|
+
bucket = [];
|
|
102
|
+
byTag.set(tag, bucket);
|
|
103
|
+
}
|
|
104
|
+
bucket.push(r);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const out = [];
|
|
108
|
+
if (menu.length > 0) {
|
|
109
|
+
out.push({
|
|
110
|
+
assetId: "10-121-items-menu",
|
|
111
|
+
snapshotStem: "10-121-items-menu",
|
|
112
|
+
rows: menu,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const tags = [...byTag.keys()].sort((a, b) => a.localeCompare(b));
|
|
116
|
+
tags.forEach((tag, i) => {
|
|
117
|
+
const nn = String(i + 1).padStart(2, "0");
|
|
118
|
+
const stem = `10-125-items-${nn}-${tag}`;
|
|
119
|
+
out.push({
|
|
120
|
+
assetId: stem,
|
|
121
|
+
snapshotStem: stem,
|
|
122
|
+
rows: byTag.get(tag) ?? [],
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
127
|
+
function partitionGroups(rows) {
|
|
128
|
+
const byTag = new Map();
|
|
129
|
+
for (const r of rows) {
|
|
130
|
+
const props = jsonProps(r.row.props);
|
|
131
|
+
const tag = firstTag(props);
|
|
132
|
+
let bucket = byTag.get(tag);
|
|
133
|
+
if (!bucket) {
|
|
134
|
+
bucket = [];
|
|
135
|
+
byTag.set(tag, bucket);
|
|
136
|
+
}
|
|
137
|
+
bucket.push(r);
|
|
138
|
+
}
|
|
139
|
+
const tags = [...byTag.keys()].sort((a, b) => a.localeCompare(b));
|
|
140
|
+
return tags.map((tag, i) => {
|
|
141
|
+
const nn = String(i + 1).padStart(2, "0");
|
|
142
|
+
const stem = `10-135-groups-${nn}-${tag}`;
|
|
143
|
+
return {
|
|
144
|
+
assetId: stem,
|
|
145
|
+
snapshotStem: stem,
|
|
146
|
+
rows: byTag.get(tag) ?? [],
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/** FK-safe TRUNCATE order before replaying function-mode snapshot assets (child → parent) */
|
|
151
|
+
export const APPLY_TRUNCATE_TABLES = [
|
|
152
|
+
"public.groups",
|
|
153
|
+
"public.items",
|
|
154
|
+
"public.categories",
|
|
155
|
+
"public.menus",
|
|
156
|
+
"public.taxes",
|
|
157
|
+
];
|
|
158
|
+
/** Curated table-mode assets that replace rows in `truncateTable` before apply (same idea as {@link SNAPSHOT_FUNCTION_TRUNCATE_TABLE}). */
|
|
159
|
+
const SNAPSHOT_TABLE_ASSET_TRUNCATE = {
|
|
160
|
+
"public.items": "public.items",
|
|
161
|
+
};
|
|
162
|
+
/** Map snapshot function target → table truncated before replay */
|
|
163
|
+
export const SNAPSHOT_FUNCTION_TRUNCATE_TABLE = {
|
|
164
|
+
insert_modifier_group: "public.groups",
|
|
165
|
+
insert_item: "public.items",
|
|
166
|
+
insert_category: "public.categories",
|
|
167
|
+
insert_menu: "public.menus",
|
|
168
|
+
insert_tax: "public.taxes",
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* FK-safe replay order for `blt data apply` (ascending phase).
|
|
172
|
+
* Ensures `auth.users` exist before `settings.authid` upserts even when an older
|
|
173
|
+
* manifest listed settings before users.
|
|
174
|
+
*/
|
|
175
|
+
const APPLY_ASSET_PHASE = {
|
|
176
|
+
role_props: 10,
|
|
177
|
+
modules: 20,
|
|
178
|
+
create_user: 30,
|
|
179
|
+
add_profile_role_by_email: 40,
|
|
180
|
+
settings: 50,
|
|
181
|
+
payment_providers: 55,
|
|
182
|
+
nodes: 58,
|
|
183
|
+
insert_tax: 70,
|
|
184
|
+
insert_menu: 80,
|
|
185
|
+
insert_category: 85,
|
|
186
|
+
/** @deprecated legacy manifests used `insert_item` (no stable ids); keep phase aligned. */
|
|
187
|
+
insert_item: 90,
|
|
188
|
+
/** Table-mode items pull (stable `id` for `order_items` and other FKs). */
|
|
189
|
+
"public.items": 90,
|
|
190
|
+
insert_modifier_group: 95,
|
|
191
|
+
};
|
|
192
|
+
export function sortManifestAssetsForApply(assets) {
|
|
193
|
+
return assets
|
|
194
|
+
.map((a, i) => ({ a, i }))
|
|
195
|
+
.sort((x, y) => {
|
|
196
|
+
const px = APPLY_ASSET_PHASE[x.a.function] ?? 500;
|
|
197
|
+
const py = APPLY_ASSET_PHASE[y.a.function] ?? 500;
|
|
198
|
+
if (px !== py)
|
|
199
|
+
return px - py;
|
|
200
|
+
return x.i - y.i;
|
|
201
|
+
})
|
|
202
|
+
.map(({ a }) => a);
|
|
203
|
+
}
|
|
204
|
+
const FULL_PULL_SEQUENCE = [
|
|
205
|
+
{
|
|
206
|
+
targetName: "role_props",
|
|
207
|
+
sqlType: "table",
|
|
208
|
+
needsTruncate: false,
|
|
209
|
+
fetchPartitions: async (client) => {
|
|
210
|
+
const { rows } = await client.query(`SELECT role, display, description, perms, props
|
|
211
|
+
FROM public.role_props
|
|
212
|
+
ORDER BY role ASC`);
|
|
213
|
+
const rrows = rows.map((r) => ({
|
|
214
|
+
row: {
|
|
215
|
+
role: r.role,
|
|
216
|
+
display: r.display,
|
|
217
|
+
description: r.description,
|
|
218
|
+
perms: r.perms ?? [],
|
|
219
|
+
props: jsonProps(r.props),
|
|
220
|
+
},
|
|
221
|
+
}));
|
|
222
|
+
return [{ assetId: "10-030-roles", snapshotStem: "10-030-roles", rows: rrows }];
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
targetName: "modules",
|
|
227
|
+
sqlType: "table",
|
|
228
|
+
needsTruncate: false,
|
|
229
|
+
fetchPartitions: async (client) => {
|
|
230
|
+
const { rows } = await client.query(`SELECT id, path, name, metadata, mgroup::text AS mgroup, mstatus::text AS mstatus, is_enabled, roles
|
|
231
|
+
FROM public.modules
|
|
232
|
+
ORDER BY path ASC`);
|
|
233
|
+
const rrows = rows.map((r) => ({
|
|
234
|
+
row: {
|
|
235
|
+
id: r.id,
|
|
236
|
+
path: r.path,
|
|
237
|
+
name: r.name,
|
|
238
|
+
metadata: jsonProps(r.metadata),
|
|
239
|
+
mgroup: r.mgroup,
|
|
240
|
+
mstatus: r.mstatus,
|
|
241
|
+
is_enabled: r.is_enabled,
|
|
242
|
+
roles: r.roles ?? [],
|
|
243
|
+
},
|
|
244
|
+
}));
|
|
245
|
+
return [{ assetId: "10-040-modules", snapshotStem: "10-040-modules", rows: rrows }];
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
targetName: "create_user",
|
|
250
|
+
sqlType: "procedure",
|
|
251
|
+
needsTruncate: false,
|
|
252
|
+
skip: (ctx) => !ctx.includeUsers,
|
|
253
|
+
fetchPartitions: async (client) => {
|
|
254
|
+
const { rows } = await client.query(`SELECT p.role::text AS role, p.name, p.phone, u.email, p.avatar, u.id AS authid
|
|
255
|
+
FROM public.profiles p
|
|
256
|
+
INNER JOIN auth.users u ON u.id = p.authid
|
|
257
|
+
WHERE p.deleted_at IS NULL AND u.deleted_at IS NULL
|
|
258
|
+
ORDER BY p.id ASC`);
|
|
259
|
+
const rrows = rows.map((r) => ({
|
|
260
|
+
row: {
|
|
261
|
+
p_role: r.role,
|
|
262
|
+
p_name: r.name ?? "",
|
|
263
|
+
p_phone: r.phone,
|
|
264
|
+
p_email: r.email,
|
|
265
|
+
p_pin: null,
|
|
266
|
+
p_avatar: r.avatar ?? "",
|
|
267
|
+
p_authid: r.authid,
|
|
268
|
+
},
|
|
269
|
+
}));
|
|
270
|
+
return [{ assetId: "10-070-users", snapshotStem: "10-070-users", rows: rrows }];
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
targetName: "add_profile_role_by_email",
|
|
275
|
+
sqlType: "procedure",
|
|
276
|
+
needsTruncate: false,
|
|
277
|
+
skip: (ctx) => !ctx.includeUsers,
|
|
278
|
+
fetchPartitions: async (client) => {
|
|
279
|
+
const { rows } = await client.query(`SELECT u.email AS p_email, pr.role::text AS p_role
|
|
280
|
+
FROM public.profile_roles pr
|
|
281
|
+
INNER JOIN public.profiles p ON p.id = pr.profile_id
|
|
282
|
+
INNER JOIN auth.users u ON u.id = p.authid
|
|
283
|
+
WHERE pr.is_primary = false
|
|
284
|
+
AND p.deleted_at IS NULL
|
|
285
|
+
AND (u.deleted_at IS NULL)
|
|
286
|
+
ORDER BY u.email ASC, pr.role::text ASC`);
|
|
287
|
+
const rrows = rows.map((r) => ({
|
|
288
|
+
row: {
|
|
289
|
+
p_email: r.p_email,
|
|
290
|
+
p_role: r.p_role,
|
|
291
|
+
},
|
|
292
|
+
}));
|
|
293
|
+
return [{ assetId: "10-071-profile-roles-extra", snapshotStem: "10-071-profile-roles-extra", rows: rrows }];
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
targetName: "settings",
|
|
298
|
+
sqlType: "table",
|
|
299
|
+
needsTruncate: false,
|
|
300
|
+
fetchPartitions: async (client, ctx) => {
|
|
301
|
+
const authFilter = ctx.includeUsers
|
|
302
|
+
? `WHERE authid IS NULL OR authid IN (
|
|
303
|
+
SELECT p.authid FROM public.profiles p
|
|
304
|
+
INNER JOIN auth.users u ON u.id = p.authid
|
|
305
|
+
WHERE p.deleted_at IS NULL AND u.deleted_at IS NULL
|
|
306
|
+
)`
|
|
307
|
+
: "WHERE authid IS NULL";
|
|
308
|
+
const { rows } = await client.query(`SELECT id, name, kind::text AS kind, authid, props
|
|
309
|
+
FROM public.settings
|
|
310
|
+
${authFilter}
|
|
311
|
+
ORDER BY kind::text ASC NULLS LAST, name ASC`);
|
|
312
|
+
const rrows = rows.map((r) => ({
|
|
313
|
+
row: {
|
|
314
|
+
id: r.id,
|
|
315
|
+
name: r.name,
|
|
316
|
+
kind: r.kind,
|
|
317
|
+
...(r.authid != null ? { authid: r.authid } : {}),
|
|
318
|
+
props: jsonProps(r.props),
|
|
319
|
+
},
|
|
320
|
+
}));
|
|
321
|
+
return partitionSettings(rrows);
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
targetName: "payment_providers",
|
|
326
|
+
sqlType: "table",
|
|
327
|
+
needsTruncate: false,
|
|
328
|
+
fetchPartitions: async (client, ctx) => {
|
|
329
|
+
try {
|
|
330
|
+
const { rows } = await client.query(`SELECT id, provider_type::text AS provider_type, location_id, enabled, test_mode,
|
|
331
|
+
api_key, secret_key_encrypted, webhook_secret_encrypted, config,
|
|
332
|
+
created_at, updated_at, created_by, updated_by
|
|
333
|
+
FROM public.payment_providers
|
|
334
|
+
ORDER BY provider_type::text ASC, location_id ASC NULLS FIRST`);
|
|
335
|
+
const rrows = rows.map((r) => {
|
|
336
|
+
const row = {
|
|
337
|
+
id: r.id,
|
|
338
|
+
provider_type: r.provider_type,
|
|
339
|
+
location_id: r.location_id,
|
|
340
|
+
enabled: r.enabled,
|
|
341
|
+
test_mode: r.test_mode,
|
|
342
|
+
config: jsonProps(r.config),
|
|
343
|
+
created_at: typeof r.created_at === "string"
|
|
344
|
+
? r.created_at
|
|
345
|
+
: r.created_at?.toISOString?.() ?? r.created_at,
|
|
346
|
+
updated_at: typeof r.updated_at === "string"
|
|
347
|
+
? r.updated_at
|
|
348
|
+
: r.updated_at?.toISOString?.() ?? r.updated_at,
|
|
349
|
+
created_by: r.created_by,
|
|
350
|
+
updated_by: r.updated_by,
|
|
351
|
+
};
|
|
352
|
+
if (ctx.includeSecrets) {
|
|
353
|
+
row.api_key = r.api_key;
|
|
354
|
+
row.secret_key_encrypted = r.secret_key_encrypted;
|
|
355
|
+
row.webhook_secret_encrypted = r.webhook_secret_encrypted;
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
row.api_key = null;
|
|
359
|
+
row.secret_key_encrypted = null;
|
|
360
|
+
row.webhook_secret_encrypted = null;
|
|
361
|
+
}
|
|
362
|
+
return { row };
|
|
363
|
+
});
|
|
364
|
+
const globalRows = rrows.filter((r) => r.row.location_id === null || r.row.location_id === undefined);
|
|
365
|
+
const scopedRows = rrows.filter((r) => r.row.location_id !== null && r.row.location_id !== undefined);
|
|
366
|
+
const parts = [];
|
|
367
|
+
if (globalRows.length > 0) {
|
|
368
|
+
parts.push({
|
|
369
|
+
assetId: "10-020-settings-04-payment-providers-global",
|
|
370
|
+
snapshotStem: "10-020-settings-04-payment-providers-global",
|
|
371
|
+
rows: globalRows,
|
|
372
|
+
/**
|
|
373
|
+
* `payment_providers_unique_provider_global`: unique (`provider_type`)
|
|
374
|
+
* WHERE `location_id` IS NULL — not a full unique on `provider_type`.
|
|
375
|
+
*/
|
|
376
|
+
primaryKey: ["provider_type"],
|
|
377
|
+
conflictWhere: "location_id IS NULL",
|
|
378
|
+
conflictUpdateExclude: ["id"],
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
if (scopedRows.length > 0) {
|
|
382
|
+
parts.push({
|
|
383
|
+
assetId: "10-020-settings-04-payment-providers-scoped",
|
|
384
|
+
snapshotStem: "10-020-settings-04-payment-providers-scoped",
|
|
385
|
+
rows: scopedRows,
|
|
386
|
+
primaryKey: ["id"],
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
if (parts.length === 0) {
|
|
390
|
+
parts.push({
|
|
391
|
+
assetId: "10-020-settings-04-payment-providers-global",
|
|
392
|
+
snapshotStem: "10-020-settings-04-payment-providers-global",
|
|
393
|
+
rows: [],
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
return parts;
|
|
397
|
+
}
|
|
398
|
+
catch {
|
|
399
|
+
return [
|
|
400
|
+
{
|
|
401
|
+
assetId: "10-020-settings-04-payment-providers-global",
|
|
402
|
+
snapshotStem: "10-020-settings-04-payment-providers-global",
|
|
403
|
+
rows: [],
|
|
404
|
+
},
|
|
405
|
+
];
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
targetName: "nodes",
|
|
411
|
+
sqlType: "table",
|
|
412
|
+
needsTruncate: false,
|
|
413
|
+
fetchPartitions: async (client) => {
|
|
414
|
+
const { rows } = await client.query(`SELECT id, node_code, name, display_name, description, location_id, node_type,
|
|
415
|
+
COALESCE(status, 'active') AS status, display_order
|
|
416
|
+
FROM public.nodes
|
|
417
|
+
ORDER BY location_id ASC, display_order ASC NULLS LAST, node_code ASC`);
|
|
418
|
+
const rrows = rows.map((r) => ({
|
|
419
|
+
row: {
|
|
420
|
+
id: r.id,
|
|
421
|
+
node_code: r.node_code,
|
|
422
|
+
name: r.name,
|
|
423
|
+
display_name: r.display_name,
|
|
424
|
+
description: r.description,
|
|
425
|
+
location_id: r.location_id,
|
|
426
|
+
node_type: r.node_type,
|
|
427
|
+
status: r.status,
|
|
428
|
+
display_order: num(r.display_order, 0),
|
|
429
|
+
},
|
|
430
|
+
}));
|
|
431
|
+
return [
|
|
432
|
+
{
|
|
433
|
+
assetId: "10-095-nodes",
|
|
434
|
+
snapshotStem: "10-095-nodes",
|
|
435
|
+
rows: rrows,
|
|
436
|
+
/** Targets often also have `UNIQUE (node_code)`; conflict on `id` alone fails when that code exists with another id. */
|
|
437
|
+
primaryKey: ["node_code"],
|
|
438
|
+
conflictUpdateExclude: ["id"],
|
|
439
|
+
},
|
|
440
|
+
];
|
|
441
|
+
},
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
targetName: "insert_tax",
|
|
445
|
+
sqlType: "function",
|
|
446
|
+
needsTruncate: true,
|
|
447
|
+
truncateTable: "public.taxes",
|
|
448
|
+
fetchPartitions: async (client) => {
|
|
449
|
+
const { rows } = await client.query(`SELECT name, description, display_name, display_order, is_active, props
|
|
450
|
+
FROM public.taxes
|
|
451
|
+
ORDER BY display_order ASC NULLS LAST, id ASC`);
|
|
452
|
+
const rrows = rows.map((r) => ({
|
|
453
|
+
row: {
|
|
454
|
+
name: r.name,
|
|
455
|
+
description: r.description,
|
|
456
|
+
display_name: r.display_name,
|
|
457
|
+
display_order: num(r.display_order),
|
|
458
|
+
is_active: r.is_active,
|
|
459
|
+
props: jsonProps(r.props),
|
|
460
|
+
},
|
|
461
|
+
}));
|
|
462
|
+
return [{ assetId: "10-150-taxes", snapshotStem: "10-150-taxes", rows: rrows }];
|
|
463
|
+
},
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
targetName: "insert_menu",
|
|
467
|
+
sqlType: "function",
|
|
468
|
+
needsTruncate: true,
|
|
469
|
+
truncateTable: "public.menus",
|
|
470
|
+
fetchPartitions: async (client) => {
|
|
471
|
+
const { rows } = await client.query(`SELECT name, description, display_name, display_order, is_active, props
|
|
472
|
+
FROM public.menus
|
|
473
|
+
ORDER BY display_order ASC NULLS LAST, id ASC`);
|
|
474
|
+
const rrows = rows.map((r) => ({
|
|
475
|
+
row: {
|
|
476
|
+
p_name: r.name,
|
|
477
|
+
p_display_name: r.display_name,
|
|
478
|
+
p_description: r.description,
|
|
479
|
+
p_display_order: num(r.display_order),
|
|
480
|
+
p_is_active: r.is_active,
|
|
481
|
+
p_props: jsonProps(r.props),
|
|
482
|
+
},
|
|
483
|
+
}));
|
|
484
|
+
return [{ assetId: "10-100-menus", snapshotStem: "10-100-menus", rows: rrows }];
|
|
485
|
+
},
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
targetName: "insert_category",
|
|
489
|
+
sqlType: "function",
|
|
490
|
+
needsTruncate: true,
|
|
491
|
+
truncateTable: "public.categories",
|
|
492
|
+
fetchPartitions: async (client) => {
|
|
493
|
+
const { rows } = await client.query(`SELECT name, description, display_name, display_order, is_active, props
|
|
494
|
+
FROM public.categories
|
|
495
|
+
ORDER BY display_order ASC NULLS LAST, id ASC`);
|
|
496
|
+
const rrows = rows.map((r) => ({
|
|
497
|
+
row: {
|
|
498
|
+
name: r.name,
|
|
499
|
+
display_name: r.display_name,
|
|
500
|
+
description: r.description,
|
|
501
|
+
display_order: num(r.display_order),
|
|
502
|
+
is_active: r.is_active,
|
|
503
|
+
props: jsonProps(r.props),
|
|
504
|
+
},
|
|
505
|
+
}));
|
|
506
|
+
return [{ assetId: "10-110-categories", snapshotStem: "10-110-categories", rows: rrows }];
|
|
507
|
+
},
|
|
508
|
+
},
|
|
509
|
+
{
|
|
510
|
+
targetName: "public.items",
|
|
511
|
+
sqlType: "table",
|
|
512
|
+
needsTruncate: true,
|
|
513
|
+
truncateTable: "public.items",
|
|
514
|
+
fetchPartitions: async (client) => {
|
|
515
|
+
const dump = await dumpPublicTableForCuratedPull(client, "items");
|
|
516
|
+
const pk = dump.primaryKey.length > 0 ? dump.primaryKey : ["id"];
|
|
517
|
+
const columnUdts = Object.keys(dump.columnUdts).length > 0 ? dump.columnUdts : undefined;
|
|
518
|
+
const parts = partitionItems(dump.rows);
|
|
519
|
+
return parts.map((p) => ({
|
|
520
|
+
...p,
|
|
521
|
+
primaryKey: pk,
|
|
522
|
+
...(columnUdts ? { columnUdts } : {}),
|
|
523
|
+
}));
|
|
524
|
+
},
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
targetName: "insert_modifier_group",
|
|
528
|
+
sqlType: "function",
|
|
529
|
+
needsTruncate: true,
|
|
530
|
+
truncateTable: "public.groups",
|
|
531
|
+
fetchPartitions: async (client) => {
|
|
532
|
+
const { rows } = await client.query(`SELECT name, description, display_name, display_order, is_active, props
|
|
533
|
+
FROM public.groups
|
|
534
|
+
ORDER BY display_order ASC NULLS LAST, id ASC`);
|
|
535
|
+
const rrows = rows.map((r) => ({
|
|
536
|
+
row: {
|
|
537
|
+
name: r.name,
|
|
538
|
+
description: r.description,
|
|
539
|
+
display_name: r.display_name,
|
|
540
|
+
display_order: num(r.display_order),
|
|
541
|
+
is_active: r.is_active,
|
|
542
|
+
props: jsonProps(r.props),
|
|
543
|
+
},
|
|
544
|
+
}));
|
|
545
|
+
return partitionGroups(rrows);
|
|
546
|
+
},
|
|
547
|
+
},
|
|
548
|
+
];
|
|
549
|
+
/**
|
|
550
|
+
* Deletes existing rows for function-mode + selected table-mode snapshot targets (child-before-parent).
|
|
551
|
+
* Omits tables not referenced by any manifest asset so older menu-only snapshots
|
|
552
|
+
* do not truncate e.g. `taxes`.
|
|
553
|
+
*/
|
|
554
|
+
export function getApplyTruncateSqlForManifest(assets) {
|
|
555
|
+
const needed = new Set();
|
|
556
|
+
for (const a of assets) {
|
|
557
|
+
const sqlType = a.sqlType ?? "function";
|
|
558
|
+
if (sqlType === "function") {
|
|
559
|
+
const table = SNAPSHOT_FUNCTION_TRUNCATE_TABLE[a.function];
|
|
560
|
+
if (table)
|
|
561
|
+
needed.add(table);
|
|
562
|
+
}
|
|
563
|
+
if (sqlType === "table") {
|
|
564
|
+
const table = SNAPSHOT_TABLE_ASSET_TRUNCATE[a.function];
|
|
565
|
+
if (table)
|
|
566
|
+
needed.add(table);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
const ordered = APPLY_TRUNCATE_TABLES.filter((t) => needed.has(t));
|
|
570
|
+
if (ordered.length === 0)
|
|
571
|
+
return "";
|
|
572
|
+
return [
|
|
573
|
+
`-- Replace function-mode snapshot targets present in this manifest: truncate before replay.`,
|
|
574
|
+
`-- CASCADE removes rows in tables with FKs to these tables.`,
|
|
575
|
+
`TRUNCATE TABLE`,
|
|
576
|
+
ordered.map((t) => ` ${t}`).join(",\n"),
|
|
577
|
+
`RESTART IDENTITY CASCADE;`,
|
|
578
|
+
``,
|
|
579
|
+
].join("\n");
|
|
580
|
+
}
|
|
581
|
+
/** Truncate all function-mode tables (full snapshot). */
|
|
582
|
+
export function getApplyTruncateSql() {
|
|
583
|
+
return getApplyTruncateSqlForManifest(Object.entries(SNAPSHOT_FUNCTION_TRUNCATE_TABLE).map(([fn]) => ({
|
|
584
|
+
id: fn,
|
|
585
|
+
file: "",
|
|
586
|
+
function: fn,
|
|
587
|
+
sqlType: "function",
|
|
588
|
+
rowCount: 0,
|
|
589
|
+
})));
|
|
590
|
+
}
|
|
591
|
+
/** Ordered pulls: FK-safe apply order (see plan). */
|
|
592
|
+
export function getFullPullManifest() {
|
|
593
|
+
return FULL_PULL_SEQUENCE;
|
|
594
|
+
}
|
|
595
|
+
/** @deprecated Use getFullPullManifest */
|
|
596
|
+
export function getMenuGraphPullManifest() {
|
|
597
|
+
return FULL_PULL_SEQUENCE;
|
|
598
|
+
}
|
|
599
|
+
/** @deprecated Use getApplyTruncateSql */
|
|
600
|
+
export function getMenuGraphApplyTruncateSql() {
|
|
601
|
+
return getApplyTruncateSql();
|
|
602
|
+
}
|
|
603
|
+
//# sourceMappingURL=data-pull-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-pull-manifest.js","sourceRoot":"","sources":["../../src/lib/data-pull-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,38 @@
|
|
|
1
|
+
import pg from "pg";
|
|
1
2
|
import { type SqlFile } from "./constants";
|
|
2
3
|
/**
|
|
3
4
|
* Get the latest SQL file from the dist directory
|
|
4
5
|
*/
|
|
5
6
|
export declare function getLatestSqlFile(): SqlFile;
|
|
7
|
+
export interface RunSqlMeta {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly path: string;
|
|
10
|
+
readonly version: string;
|
|
11
|
+
}
|
|
6
12
|
/**
|
|
7
|
-
* Execute
|
|
13
|
+
* Execute ad-hoc SQL (e.g. snapshot apply bundle).
|
|
8
14
|
*/
|
|
9
|
-
export declare function
|
|
15
|
+
export declare function runSqlContent(sqlContent: string, meta: RunSqlMeta, connectionOverride?: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Execute a SQL file against the database.
|
|
18
|
+
* Uses BLT_DATA_LOAD_URL when set (dev snapshot apply), otherwise SUPABASE_CONNECTION_STRING.
|
|
19
|
+
*/
|
|
20
|
+
export declare function runSqlFile(filePath?: string, connectionOverride?: string): Promise<void>;
|
|
21
|
+
export declare function requireConnectionString(envHint: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Postgres URL used for snapshot pulls (`blt data pull`).
|
|
24
|
+
* Prefer a read replica or READ ONLY role—not a production superuser.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getPullConnectionString(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Postgres URL used to apply snapshots (`blt data apply`).
|
|
29
|
+
* Defaults to SUPABASE_CONNECTION_STRING if BLT_DATA_LOAD_URL is unset.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getLoadConnectionString(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Run queries inside BEGIN READ ONLY / COMMIT. No DML.
|
|
34
|
+
*/
|
|
35
|
+
export declare function withReadOnlyClient<T>(connectionString: string, run: (client: pg.Client) => Promise<T>): Promise<T>;
|
|
10
36
|
/**
|
|
11
37
|
* Execute a SQL query and return results
|
|
12
38
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-runner.d.ts","sourceRoot":"","sources":["../../src/lib/database-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"database-runner.d.ts","sourceRoot":"","sources":["../../src/lib/database-runner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAsB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE/D;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAqC1C;AAiBD,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAClC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,EAChB,kBAAkB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CA4Ef;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC/B,QAAQ,CAAC,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAWD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU/D;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAWhD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAWhD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACzC,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAqBvE"}
|