@metaobjectsdev/cli 0.8.1 → 0.9.0-rc.1
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 +40 -1
- package/dist/src/commands/migrate.d.ts +16 -0
- package/dist/src/commands/migrate.d.ts.map +1 -1
- package/dist/src/commands/migrate.js +252 -39
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/verify.d.ts.map +1 -1
- package/dist/src/commands/verify.js +162 -53
- package/dist/src/commands/verify.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/allow.d.ts +10 -0
- package/dist/src/lib/allow.d.ts.map +1 -0
- package/dist/src/lib/allow.js +50 -0
- package/dist/src/lib/allow.js.map +1 -0
- package/dist/src/lib/args.d.ts +22 -4
- package/dist/src/lib/args.d.ts.map +1 -1
- package/dist/src/lib/args.js +47 -11
- package/dist/src/lib/args.js.map +1 -1
- package/dist/src/lib/bun-sqlite-dialect.d.ts +13 -0
- package/dist/src/lib/bun-sqlite-dialect.d.ts.map +1 -0
- package/dist/src/lib/bun-sqlite-dialect.js +119 -0
- package/dist/src/lib/bun-sqlite-dialect.js.map +1 -0
- package/dist/src/lib/config.d.ts +11 -0
- package/dist/src/lib/config.d.ts.map +1 -1
- package/dist/src/lib/config.js +4 -0
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/kysely.d.ts.map +1 -1
- package/dist/src/lib/kysely.js +21 -7
- package/dist/src/lib/kysely.js.map +1 -1
- package/dist/src/lib/projection-migrations.d.ts.map +1 -1
- package/dist/src/lib/projection-migrations.js +2 -6
- package/dist/src/lib/projection-migrations.js.map +1 -1
- package/package.json +11 -10
- package/src/commands/migrate.ts +277 -42
- package/src/commands/verify.ts +172 -61
- package/src/index.ts +6 -0
- package/src/lib/allow.ts +54 -0
- package/src/lib/args.ts +77 -15
- package/src/lib/bun-sqlite-dialect.ts +146 -0
- package/src/lib/config.ts +15 -0
- package/src/lib/kysely.ts +23 -10
- package/src/lib/projection-migrations.ts +2 -6
|
@@ -12,6 +12,9 @@ import { log } from "../lib/log.js";
|
|
|
12
12
|
import { FileProvider } from "../lib/file-provider.js";
|
|
13
13
|
import { derivePayloadFieldTree } from "../lib/payload-field-tree.js";
|
|
14
14
|
import { loadMetaobjectsConfig } from "../lib/load-metaobjects-config.js";
|
|
15
|
+
import { buildKyselyFromUrl } from "../lib/kysely.js";
|
|
16
|
+
import { tokensToAllowOptions, describeChange } from "../lib/allow.js";
|
|
17
|
+
import { computeDrift } from "@metaobjectsdev/migrate-ts";
|
|
15
18
|
import { loadMemory } from "@metaobjectsdev/sdk";
|
|
16
19
|
import { TYPE_TEMPLATE, TEMPLATE_SUBTYPE_PROMPT, TEMPLATE_SUBTYPE_OUTPUT, TEMPLATE_ATTR_PAYLOAD_REF, TEMPLATE_ATTR_TEXT_REF, TEMPLATE_ATTR_REQUIRED_SLOTS, TEMPLATE_ATTR_REQUIRED_TAGS, } from "@metaobjectsdev/metadata";
|
|
17
20
|
import { verify, ERR_REQUIRED_SLOT_UNUSED, ERR_PARTIAL_UNRESOLVED } from "@metaobjectsdev/render";
|
|
@@ -63,69 +66,175 @@ export async function verifyCommand(args, cwd) {
|
|
|
63
66
|
}
|
|
64
67
|
const promptsDir = join(cwd, flags.prompts ?? DEFAULT_PROMPTS_DIR);
|
|
65
68
|
const provider = new FileProvider(promptsDir);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
continue;
|
|
80
|
-
// Both subtypes verify that @payloadRef resolves to a loaded object.value.
|
|
81
|
-
// The render-engine `verify()` would also throw on missing refs, but the
|
|
82
|
-
// output branch doesn't call it — explicit check keeps the error symmetric.
|
|
83
|
-
const fieldTree = derivePayloadFieldTree(root, payloadRef);
|
|
84
|
-
if (fieldTree.length === 0) {
|
|
85
|
-
log.error(`[${tmpl.name}] (${tmpl.subType}) ${ERR_PARTIAL_UNRESOLVED}: ` +
|
|
86
|
-
`@payloadRef "${payloadRef}" did not resolve to a loaded object.value`);
|
|
87
|
-
errorCount++;
|
|
88
|
-
continue;
|
|
69
|
+
// Exit-code composition: the overall result is max(templateExit, schemaExit)
|
|
70
|
+
// so either kind of drift fails CI. The schema path only runs when --db is
|
|
71
|
+
// present (and not --skip-schema); with no --db it is skipped entirely and
|
|
72
|
+
// the exit reflects the template path alone (unchanged behavior).
|
|
73
|
+
const templateExit = runTemplateVerify();
|
|
74
|
+
const schemaExit = await runSchemaVerify();
|
|
75
|
+
return Math.max(templateExit, schemaExit);
|
|
76
|
+
// -- template (prompt / output) drift --------------------------------------
|
|
77
|
+
function runTemplateVerify() {
|
|
78
|
+
const templates = root.ownChildren().filter((c) => c.type === TYPE_TEMPLATE);
|
|
79
|
+
if (templates.length === 0) {
|
|
80
|
+
log.info("meta verify — no template.* nodes found; nothing to check.");
|
|
81
|
+
return 0;
|
|
89
82
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
83
|
+
let errorCount = 0;
|
|
84
|
+
let warnCount = 0;
|
|
85
|
+
let checked = 0;
|
|
86
|
+
for (const tmpl of templates) {
|
|
87
|
+
const textRef = tmpl.ownAttr(TEMPLATE_ATTR_TEXT_REF);
|
|
88
|
+
const payloadRef = tmpl.ownAttr(TEMPLATE_ATTR_PAYLOAD_REF);
|
|
89
|
+
// Absent/typeless required attrs are a loader-schema concern, not verify's.
|
|
90
|
+
if (typeof textRef !== "string" || typeof payloadRef !== "string")
|
|
91
|
+
continue;
|
|
92
|
+
// Both subtypes verify that @payloadRef resolves to a loaded object.value.
|
|
93
|
+
// The render-engine `verify()` would also throw on missing refs, but the
|
|
94
|
+
// output branch doesn't call it — explicit check keeps the error symmetric.
|
|
95
|
+
const fieldTree = derivePayloadFieldTree(root, payloadRef);
|
|
96
|
+
if (fieldTree.length === 0) {
|
|
97
|
+
log.error(`[${tmpl.name}] (${tmpl.subType}) ${ERR_PARTIAL_UNRESOLVED}: ` +
|
|
98
|
+
`@payloadRef "${payloadRef}" did not resolve to a loaded object.value`);
|
|
95
99
|
errorCount++;
|
|
96
100
|
continue;
|
|
97
101
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (e.code === ERR_REQUIRED_SLOT_UNUSED) {
|
|
104
|
-
log.warn(`[${tmpl.name}] (prompt) ${e.code}: ${e.path}`);
|
|
105
|
-
warnCount++;
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
log.error(`[${tmpl.name}] (prompt) ${e.code}: ${e.path}`);
|
|
102
|
+
if (tmpl.subType === TEMPLATE_SUBTYPE_PROMPT) {
|
|
103
|
+
// Render-engine drift check: template variables ↔ payload field names.
|
|
104
|
+
const text = provider.resolve(textRef);
|
|
105
|
+
if (text === undefined) {
|
|
106
|
+
log.error(`[${tmpl.name}] (prompt) ${ERR_PARTIAL_UNRESOLVED}: @textRef "${textRef}" did not resolve under ${promptsDir}`);
|
|
109
107
|
errorCount++;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const requiredSlots = attrAsStringArray(tmpl.ownAttr(TEMPLATE_ATTR_REQUIRED_SLOTS));
|
|
111
|
+
const requiredTags = attrAsStringArray(tmpl.ownAttr(TEMPLATE_ATTR_REQUIRED_TAGS));
|
|
112
|
+
const drift = verify(text, fieldTree, { provider, requiredSlots, requiredTags });
|
|
113
|
+
checked++;
|
|
114
|
+
for (const e of drift) {
|
|
115
|
+
if (e.code === ERR_REQUIRED_SLOT_UNUSED) {
|
|
116
|
+
log.warn(`[${tmpl.name}] (prompt) ${e.code}: ${e.path}`);
|
|
117
|
+
warnCount++;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
log.error(`[${tmpl.name}] (prompt) ${e.code}: ${e.path}`);
|
|
121
|
+
errorCount++;
|
|
122
|
+
}
|
|
110
123
|
}
|
|
111
124
|
}
|
|
125
|
+
else if (tmpl.subType === TEMPLATE_SUBTYPE_OUTPUT) {
|
|
126
|
+
// Output drift check: re-derive the payload field tree (already done above);
|
|
127
|
+
// if it resolved, the parser codegen can produce a schema. Field-type
|
|
128
|
+
// unsupported-by-Zod issues are caught by the codegen itself if/when
|
|
129
|
+
// `meta gen` runs; verify confines itself to ref-resolution checks.
|
|
130
|
+
checked++;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Unknown subtype — ignore (loader-schema concern).
|
|
134
|
+
}
|
|
112
135
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// unsupported-by-Zod issues are caught by the codegen itself if/when
|
|
117
|
-
// `meta gen` runs; verify confines itself to ref-resolution checks.
|
|
118
|
-
checked++;
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
// Unknown subtype — ignore (loader-schema concern).
|
|
136
|
+
if (errorCount > 0) {
|
|
137
|
+
log.error(`meta verify — ${errorCount} drift error(s) across ${templates.length} template(s).`);
|
|
138
|
+
return 1;
|
|
122
139
|
}
|
|
140
|
+
log.info(`meta verify — ${checked} template(s) clean${warnCount > 0 ? ` (${warnCount} warning(s))` : ""}.`);
|
|
141
|
+
return 0;
|
|
123
142
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
143
|
+
// -- schema drift (live DB) ------------------------------------------------
|
|
144
|
+
// Gated on --db. With no --db (or --skip-schema), this is a no-op returning 0
|
|
145
|
+
// — the DB-free default behavior is unchanged.
|
|
146
|
+
async function runSchemaVerify() {
|
|
147
|
+
if (flags.db === undefined || flags.skipSchema)
|
|
148
|
+
return 0;
|
|
149
|
+
// d1 has no Kysely-driver introspection path, so the schema-drift gate
|
|
150
|
+
// can't support it. `buildKyselyFromUrl` already throws for the d1 dialect
|
|
151
|
+
// ("does not use a URL connection") — the catch below surfaces that as a
|
|
152
|
+
// clear exit 1, so no separate d1 guard is needed here.
|
|
153
|
+
let kysely;
|
|
154
|
+
try {
|
|
155
|
+
kysely = await buildKyselyFromUrl(flags.db, flags.dialect);
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
log.error(`verify: ${err.message}`);
|
|
159
|
+
return 1;
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
const allow = tokensToAllowOptions(flags.allow);
|
|
163
|
+
let driftResult;
|
|
164
|
+
try {
|
|
165
|
+
driftResult = await computeDrift(kysely.db, kysely.dialect, root, { allow });
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
log.error(`verify: failed to introspect ${kysely.displayUrl}: ${err.message}`);
|
|
169
|
+
return 1;
|
|
170
|
+
}
|
|
171
|
+
// TODO(Unit 3 — migration-history ledger): when the ledger table exists,
|
|
172
|
+
// a migration that is recorded-as-pending-but-unapplied must also count as
|
|
173
|
+
// drift here. Until Unit 3 ships the ledger, this MUST no-op — do not query
|
|
174
|
+
// a table that doesn't exist. `reconcileLedger` returns no extra drift today.
|
|
175
|
+
const ledgerDrift = await reconcileLedger();
|
|
176
|
+
const changes = driftResult.changes;
|
|
177
|
+
if (changes.length === 0 && ledgerDrift.length === 0) {
|
|
178
|
+
log.info(`meta verify — schema in sync with ${kysely.displayUrl}.`);
|
|
179
|
+
return 0;
|
|
180
|
+
}
|
|
181
|
+
log.error(`meta verify — schema drift vs ${kysely.displayUrl} (${changes.length} change(s)):`);
|
|
182
|
+
for (const line of summarizeDrift(changes))
|
|
183
|
+
log.error(` ${line}`);
|
|
184
|
+
for (const line of ledgerDrift)
|
|
185
|
+
log.error(` ${line}`);
|
|
186
|
+
return 1;
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
try {
|
|
190
|
+
await kysely.close();
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
log.warn(`verify: failed to close DB cleanly: ${err.message}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
127
196
|
}
|
|
128
|
-
|
|
129
|
-
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Migration-history ledger reconciliation hook (Unit 3 — not yet built).
|
|
200
|
+
*
|
|
201
|
+
* When the ledger lands, this will read it and report any recorded-but-unapplied
|
|
202
|
+
* migration as drift. Until then it is a deliberate no-op: returning an empty
|
|
203
|
+
* array means "no ledger-derived drift", and crucially it does NOT touch any
|
|
204
|
+
* ledger table (which doesn't exist yet) so a fresh DB never trips on it.
|
|
205
|
+
*/
|
|
206
|
+
async function reconcileLedger() {
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
// Per-kind glyph (+ add / - drop / ~ change) and noun for the drift summary.
|
|
210
|
+
// The detail string itself comes from the shared `describeChange`.
|
|
211
|
+
const DRIFT_PRESENTATION = {
|
|
212
|
+
"create-table": { glyph: "+", noun: "table" },
|
|
213
|
+
"drop-table": { glyph: "-", noun: "table" },
|
|
214
|
+
"rename-table": { glyph: "~", noun: "table" },
|
|
215
|
+
"add-column": { glyph: "+", noun: "column" },
|
|
216
|
+
"drop-column": { glyph: "-", noun: "column" },
|
|
217
|
+
"rename-column": { glyph: "~", noun: "column" },
|
|
218
|
+
"change-column-type": { glyph: "~", noun: "column" },
|
|
219
|
+
"change-column-nullable": { glyph: "~", noun: "column" },
|
|
220
|
+
"change-column-default": { glyph: "~", noun: "column" },
|
|
221
|
+
"add-index": { glyph: "+", noun: "index" },
|
|
222
|
+
"drop-index": { glyph: "-", noun: "index" },
|
|
223
|
+
"add-fk": { glyph: "+", noun: "fk" },
|
|
224
|
+
"drop-fk": { glyph: "-", noun: "fk" },
|
|
225
|
+
"add-check": { glyph: "+", noun: "check" },
|
|
226
|
+
"drop-check": { glyph: "-", noun: "check" },
|
|
227
|
+
"create-view": { glyph: "+", noun: "view" },
|
|
228
|
+
"replace-view": { glyph: "~", noun: "view" },
|
|
229
|
+
"drop-view": { glyph: "-", noun: "view" },
|
|
230
|
+
};
|
|
231
|
+
/** Human-readable one-line-per-change drift summary (table/column/index/fk/view). */
|
|
232
|
+
function summarizeDrift(changes) {
|
|
233
|
+
return changes.map((c) => {
|
|
234
|
+
const p = DRIFT_PRESENTATION[c.kind];
|
|
235
|
+
if (p === undefined)
|
|
236
|
+
return JSON.stringify(c);
|
|
237
|
+
return `${p.glyph} ${p.noun} ${describeChange(c)}`;
|
|
238
|
+
});
|
|
130
239
|
}
|
|
131
240
|
//# sourceMappingURL=verify.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/verify.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAE5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAElG,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAEtC,8EAA8E;AAC9E,SAAS,iBAAiB,CAAC,IAAa;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IACvF,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc,EAAE,GAAW;IAC7D,IAAI,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAqFvE,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqEzD"}
|
package/dist/src/index.js
CHANGED
|
@@ -57,6 +57,12 @@ EXPORT FLAGS:
|
|
|
57
57
|
|
|
58
58
|
VERIFY FLAGS:
|
|
59
59
|
--prompts <dir> Directory of provider-resolved template text (default: prompts)
|
|
60
|
+
--db <url> Live DB URL — enables the schema-drift gate (exit 1 on drift).
|
|
61
|
+
Supports: file:, libsql:, postgres:, postgresql:. Omit to skip.
|
|
62
|
+
--dialect sqlite|postgres Optional override (auto-detected from --db URL scheme)
|
|
63
|
+
--allow <csv> Accepted for parity with 'migrate'; does NOT affect the
|
|
64
|
+
verify drift gate (the gate fails on ANY detected change)
|
|
65
|
+
--skip-schema Skip the schema-drift gate even when --db is present
|
|
60
66
|
|
|
61
67
|
PROMPT-SNAPSHOT FLAGS:
|
|
62
68
|
--check Compare against committed snapshots; exit 1 on drift (CI gate)
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,6EAA6E;AAC7E,iFAAiF;AACjF,kFAAkF;AAClF,SAAS,cAAc;IACrB,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAwC,CAAC;gBAC/F,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,IAAI,GAAG,CAAC,OAAO;oBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;YAC5E,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;AAEjC,MAAM,SAAS,GAAG,4BAA4B,OAAO
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AllowOptions, Change } from "@metaobjectsdev/migrate-ts";
|
|
2
|
+
/** Translate parsed `--allow` tokens into the migrate-ts `AllowOptions` shape. */
|
|
3
|
+
export declare function tokensToAllowOptions(tokens: string[]): AllowOptions;
|
|
4
|
+
/**
|
|
5
|
+
* One-line, human-readable detail for a single change (table/column/index/fk/
|
|
6
|
+
* view). This is the shared core: `migrate` prints it as-is; `verify` prefixes
|
|
7
|
+
* a +/-/~ glyph and a noun (`table`/`column`/…) on top.
|
|
8
|
+
*/
|
|
9
|
+
export declare function describeChange(c: Change): string;
|
|
10
|
+
//# sourceMappingURL=allow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allow.d.ts","sourceRoot":"","sources":["../../../src/lib/allow.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAYvE,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CASnE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBhD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Shared destructive-change-permission parsing + change description, used by
|
|
2
|
+
// both `meta migrate` and `meta verify --db`. Keeping a single copy avoids the
|
|
3
|
+
// two commands drifting on which `--allow` tokens exist or how a change reads.
|
|
4
|
+
// Map CLI allow tokens → migrate-ts AllowOptions field names.
|
|
5
|
+
const ALLOW_TOKEN_MAP = {
|
|
6
|
+
"drop-column": "dropColumn",
|
|
7
|
+
"drop-table": "dropTable",
|
|
8
|
+
"type-change": "typeChange",
|
|
9
|
+
"drop-index": "dropIndex",
|
|
10
|
+
"drop-fk": "dropFk",
|
|
11
|
+
"nullable-to-not-null": "nullableToNotNull",
|
|
12
|
+
};
|
|
13
|
+
/** Translate parsed `--allow` tokens into the migrate-ts `AllowOptions` shape. */
|
|
14
|
+
export function tokensToAllowOptions(tokens) {
|
|
15
|
+
const opts = {};
|
|
16
|
+
for (const tok of tokens) {
|
|
17
|
+
const field = ALLOW_TOKEN_MAP[tok];
|
|
18
|
+
if (field !== undefined) {
|
|
19
|
+
opts[field] = true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return opts;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* One-line, human-readable detail for a single change (table/column/index/fk/
|
|
26
|
+
* view). This is the shared core: `migrate` prints it as-is; `verify` prefixes
|
|
27
|
+
* a +/-/~ glyph and a noun (`table`/`column`/…) on top.
|
|
28
|
+
*/
|
|
29
|
+
export function describeChange(c) {
|
|
30
|
+
switch (c.kind) {
|
|
31
|
+
case "create-table": return c.table.name;
|
|
32
|
+
case "drop-table": return c.table;
|
|
33
|
+
case "rename-table": return `${c.from} → ${c.to}`;
|
|
34
|
+
case "add-column": return `${c.table}.${c.column.name}`;
|
|
35
|
+
case "drop-column": return `${c.table}.${c.column}`;
|
|
36
|
+
case "rename-column": return `${c.table}.${c.from} → ${c.table}.${c.to}`;
|
|
37
|
+
case "change-column-type": return `${c.table}.${c.column} (${c.from.kind} → ${c.to.kind})`;
|
|
38
|
+
case "change-column-nullable": return `${c.table}.${c.column} (${c.from ? "NULL" : "NOT NULL"} → ${c.to ? "NULL" : "NOT NULL"})`;
|
|
39
|
+
case "change-column-default": return `${c.table}.${c.column}`;
|
|
40
|
+
case "add-index": return `${c.table} idx ${c.index.name}`;
|
|
41
|
+
case "drop-index": return `${c.table} idx ${c.index}`;
|
|
42
|
+
case "add-fk": return `${c.table} fk ${c.fk.name}`;
|
|
43
|
+
case "drop-fk": return `${c.table} fk ${c.fk}`;
|
|
44
|
+
case "create-view": return c.view.name;
|
|
45
|
+
case "replace-view": return c.view.name;
|
|
46
|
+
case "drop-view": return c.view;
|
|
47
|
+
default: return JSON.stringify(c);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=allow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allow.js","sourceRoot":"","sources":["../../../src/lib/allow.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/args.d.ts
CHANGED
|
@@ -19,9 +19,21 @@ export interface ExportFlags {
|
|
|
19
19
|
out: string | undefined;
|
|
20
20
|
}
|
|
21
21
|
export declare function parseExportArgs(argv: string[]): ExportFlags;
|
|
22
|
+
declare const DIALECTS: readonly ["sqlite", "postgres", "d1"];
|
|
23
|
+
type Dialect = (typeof DIALECTS)[number];
|
|
24
|
+
declare const ALLOW_TOKENS: readonly ["drop-column", "drop-table", "type-change", "drop-index", "drop-fk", "nullable-to-not-null"];
|
|
25
|
+
type AllowToken = (typeof ALLOW_TOKENS)[number];
|
|
22
26
|
export interface VerifyFlags {
|
|
23
27
|
/** Directory (relative to cwd) holding provider-resolved template text. */
|
|
24
28
|
prompts: string | undefined;
|
|
29
|
+
/** Live DB connection URL; when present, enables the schema-drift gate. */
|
|
30
|
+
db: string | undefined;
|
|
31
|
+
/** Optional dialect override (auto-detected from --db URL scheme otherwise). */
|
|
32
|
+
dialect: Dialect | undefined;
|
|
33
|
+
/** Destructive-change permissions; only affects how drift is described. */
|
|
34
|
+
allow: AllowToken[];
|
|
35
|
+
/** Skip the schema-drift gate even when --db is present. */
|
|
36
|
+
skipSchema: boolean;
|
|
25
37
|
}
|
|
26
38
|
export declare function parseVerifyArgs(argv: string[]): VerifyFlags;
|
|
27
39
|
export interface PromptSnapshotFlags {
|
|
@@ -31,10 +43,6 @@ export interface PromptSnapshotFlags {
|
|
|
31
43
|
prompts: string | undefined;
|
|
32
44
|
}
|
|
33
45
|
export declare function parsePromptSnapshotArgs(argv: string[]): PromptSnapshotFlags;
|
|
34
|
-
declare const DIALECTS: readonly ["sqlite", "postgres", "d1"];
|
|
35
|
-
type Dialect = (typeof DIALECTS)[number];
|
|
36
|
-
declare const ALLOW_TOKENS: readonly ["drop-column", "drop-table", "type-change", "drop-index", "drop-fk", "nullable-to-not-null"];
|
|
37
|
-
type AllowToken = (typeof ALLOW_TOKENS)[number];
|
|
38
46
|
declare const ON_AMBIGUOUS: readonly ["abort", "rename", "drop-add"];
|
|
39
47
|
type OnAmbiguous = (typeof ON_AMBIGUOUS)[number];
|
|
40
48
|
export interface MigrateFlags {
|
|
@@ -48,7 +56,17 @@ export interface MigrateFlags {
|
|
|
48
56
|
d1Binding: string | undefined;
|
|
49
57
|
remote: boolean;
|
|
50
58
|
apply: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Roll back all applied migrations NEWER than this target (the target itself
|
|
61
|
+
* is retained), running each migration's down.sql in reverse order. Mutually
|
|
62
|
+
* exclusive with --apply. postgres/sqlite only (not d1).
|
|
63
|
+
*/
|
|
64
|
+
rollback: string | undefined;
|
|
51
65
|
yes: boolean;
|
|
66
|
+
/** Use live-DB introspection instead of the committed snapshot (legacy/adoption). */
|
|
67
|
+
fromDb: boolean;
|
|
68
|
+
/** `migrate baseline` subcommand: seed the snapshot, emit no migration. */
|
|
69
|
+
baseline: boolean;
|
|
52
70
|
}
|
|
53
71
|
export declare function parseMigrateArgs(argv: string[]): MigrateFlags;
|
|
54
72
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../src/lib/args.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAoBvD;AAMD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;2BAEuB;IACvB,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAqBrD;AAMD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAY3D;AAMD,MAAM,
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../src/lib/args.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAoBvD;AAMD,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;2BAEuB;IACvB,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAqBrD;AAMD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAY3D;AAMD,QAAA,MAAM,QAAQ,uCAAwC,CAAC;AACvD,KAAK,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzC,QAAA,MAAM,YAAY,wGAOR,CAAC;AACX,KAAK,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAMhD,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,2EAA2E;IAC3E,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,gFAAgF;IAChF,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,2EAA2E;IAC3E,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,4DAA4D;IAC5D,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAsC3D;AAMD,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,KAAK,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAc3E;AAMD,QAAA,MAAM,YAAY,0CAA2C,CAAC;AAC9D,KAAK,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC;IAEhB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,GAAG,EAAE,OAAO,CAAC;IACb,qFAAqF;IACrF,MAAM,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAqE7D"}
|
package/dist/src/lib/args.js
CHANGED
|
@@ -53,17 +53,50 @@ export function parseExportArgs(argv) {
|
|
|
53
53
|
out: values.out,
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// shared DB-connection vocab (used by both verify --db and migrate)
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
const DIALECTS = ["sqlite", "postgres", "d1"];
|
|
60
|
+
const ALLOW_TOKENS = [
|
|
61
|
+
"drop-column",
|
|
62
|
+
"drop-table",
|
|
63
|
+
"type-change",
|
|
64
|
+
"drop-index",
|
|
65
|
+
"drop-fk",
|
|
66
|
+
"nullable-to-not-null",
|
|
67
|
+
];
|
|
56
68
|
export function parseVerifyArgs(argv) {
|
|
57
69
|
const { values } = parseArgs({
|
|
58
70
|
args: argv,
|
|
59
71
|
options: {
|
|
60
72
|
prompts: { type: "string" },
|
|
73
|
+
db: { type: "string" },
|
|
74
|
+
dialect: { type: "string" },
|
|
75
|
+
allow: { type: "string" },
|
|
76
|
+
"skip-schema": { type: "boolean", default: false },
|
|
61
77
|
},
|
|
62
78
|
strict: true,
|
|
63
79
|
allowPositionals: false,
|
|
64
80
|
});
|
|
81
|
+
const dialect = values.dialect;
|
|
82
|
+
if (dialect !== undefined && !DIALECTS.includes(dialect)) {
|
|
83
|
+
throw new Error(`invalid --dialect '${dialect}'; expected: ${DIALECTS.join(", ")}`);
|
|
84
|
+
}
|
|
85
|
+
const allowRaw = values.allow ?? "";
|
|
86
|
+
const allowTokens = allowRaw.length === 0
|
|
87
|
+
? []
|
|
88
|
+
: allowRaw.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
|
|
89
|
+
for (const tok of allowTokens) {
|
|
90
|
+
if (!ALLOW_TOKENS.includes(tok)) {
|
|
91
|
+
throw new Error(`invalid --allow token '${tok}'; expected one of: ${ALLOW_TOKENS.join(", ")}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
65
94
|
return {
|
|
66
95
|
prompts: values.prompts,
|
|
96
|
+
db: values.db,
|
|
97
|
+
dialect: dialect,
|
|
98
|
+
allow: allowTokens,
|
|
99
|
+
skipSchema: !!values["skip-schema"],
|
|
67
100
|
};
|
|
68
101
|
}
|
|
69
102
|
export function parsePromptSnapshotArgs(argv) {
|
|
@@ -84,18 +117,9 @@ export function parsePromptSnapshotArgs(argv) {
|
|
|
84
117
|
// ---------------------------------------------------------------------------
|
|
85
118
|
// migrate flags
|
|
86
119
|
// ---------------------------------------------------------------------------
|
|
87
|
-
const DIALECTS = ["sqlite", "postgres", "d1"];
|
|
88
|
-
const ALLOW_TOKENS = [
|
|
89
|
-
"drop-column",
|
|
90
|
-
"drop-table",
|
|
91
|
-
"type-change",
|
|
92
|
-
"drop-index",
|
|
93
|
-
"drop-fk",
|
|
94
|
-
"nullable-to-not-null",
|
|
95
|
-
];
|
|
96
120
|
const ON_AMBIGUOUS = ["abort", "rename", "drop-add"];
|
|
97
121
|
export function parseMigrateArgs(argv) {
|
|
98
|
-
const { values } = parseArgs({
|
|
122
|
+
const { values, positionals } = parseArgs({
|
|
99
123
|
args: argv,
|
|
100
124
|
options: {
|
|
101
125
|
"db": { type: "string" },
|
|
@@ -105,14 +129,23 @@ export function parseMigrateArgs(argv) {
|
|
|
105
129
|
"allow": { type: "string" },
|
|
106
130
|
"on-ambiguous": { type: "string" },
|
|
107
131
|
"dry-run": { type: "boolean", default: false },
|
|
132
|
+
"from-db": { type: "boolean", default: false },
|
|
108
133
|
"d1": { type: "string" },
|
|
109
134
|
"remote": { type: "boolean", default: false },
|
|
110
135
|
"apply": { type: "boolean", default: false },
|
|
136
|
+
"rollback": { type: "string" },
|
|
111
137
|
"yes": { type: "boolean", default: false },
|
|
112
138
|
},
|
|
113
139
|
strict: true,
|
|
114
|
-
allowPositionals:
|
|
140
|
+
allowPositionals: true,
|
|
115
141
|
});
|
|
142
|
+
const baseline = positionals[0] === "baseline";
|
|
143
|
+
if (positionals.length > 0 && !baseline) {
|
|
144
|
+
throw new Error(`unknown migrate subcommand '${positionals[0]}'; expected 'baseline' or no subcommand`);
|
|
145
|
+
}
|
|
146
|
+
if (values.rollback !== undefined && values.apply === true) {
|
|
147
|
+
throw new Error(`--rollback and --apply are mutually exclusive`);
|
|
148
|
+
}
|
|
116
149
|
const dialect = values.dialect;
|
|
117
150
|
if (dialect !== undefined && !DIALECTS.includes(dialect)) {
|
|
118
151
|
throw new Error(`invalid --dialect '${dialect}'; expected: ${DIALECTS.join(", ")}`);
|
|
@@ -141,7 +174,10 @@ export function parseMigrateArgs(argv) {
|
|
|
141
174
|
d1Binding: values.d1,
|
|
142
175
|
remote: !!values.remote,
|
|
143
176
|
apply: !!values.apply,
|
|
177
|
+
rollback: values.rollback,
|
|
144
178
|
yes: !!values.yes,
|
|
179
|
+
fromDb: !!values["from-db"],
|
|
180
|
+
baseline,
|
|
145
181
|
};
|
|
146
182
|
}
|
|
147
183
|
//# sourceMappingURL=args.js.map
|
package/dist/src/lib/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/lib/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AActC,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC3B,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACP,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;YAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;YAC1C,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;YACjD,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;YACnD,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;SACxC;QACD,MAAM,EAAE,IAAI;QACZ,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;QACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;QACrB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACjC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;QACrC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;KAChB,CAAC;AACJ,CAAC;AAeD,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;QACxC,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACP,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9C,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC/B;QACD,MAAM,EAAE,IAAI;QACZ,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,MAAM,CAAC,QAA8B,CAAC;IAC1D,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QACtF,MAAM,IAAI,KAAK,CACb,uBAAuB,WAAW,kCAAkC,CACrE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;QAC3B,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAG,WAA+C,IAAI,SAAS;KACxE,CAAC;AACJ,CAAC;AAUD,MAAM,UAAU,eAAe,CAAC,IAAc;IAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC3B,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACP,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACxB;QACD,MAAM,EAAE,IAAI;QACZ,gBAAgB,EAAE,KAAK;KACxB,CAAC,CAAC;IACH,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/lib/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Dialect, type Driver, type DatabaseIntrospector, type Kysely, type DialectAdapter, type QueryCompiler } from "kysely";
|
|
2
|
+
/** Kysely Dialect backed by `bun:sqlite`. */
|
|
3
|
+
export declare class BunSqliteDialect implements Dialect {
|
|
4
|
+
private readonly url;
|
|
5
|
+
constructor(url: string);
|
|
6
|
+
createDriver(): Driver;
|
|
7
|
+
createQueryCompiler(): QueryCompiler;
|
|
8
|
+
createAdapter(): DialectAdapter;
|
|
9
|
+
createIntrospector(db: Kysely<Record<string, unknown>>): DatabaseIntrospector;
|
|
10
|
+
}
|
|
11
|
+
/** True when running under the Bun runtime (where `bun:sqlite` is available). */
|
|
12
|
+
export declare function isBun(): boolean;
|
|
13
|
+
//# sourceMappingURL=bun-sqlite-dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bun-sqlite-dialect.d.ts","sourceRoot":"","sources":["../../../src/lib/bun-sqlite-dialect.ts"],"names":[],"mappings":"AAiBA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,MAAM,EAMX,KAAK,oBAAoB,EACzB,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,QAAQ,CAAC;AA+FhB,6CAA6C;AAC7C,qBAAa,gBAAiB,YAAW,OAAO;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,MAAM;IACxC,YAAY,IAAI,MAAM;IAGtB,mBAAmB,IAAI,aAAa;IAGpC,aAAa,IAAI,cAAc;IAG/B,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,oBAAoB;CAG9E;AAED,iFAAiF;AACjF,wBAAgB,KAAK,IAAI,OAAO,CAE/B"}
|