@metaobjectsdev/cli 0.5.1 → 0.6.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 +20 -1
- package/dist/src/commands/init.d.ts +1 -0
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +34 -5
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/migrate.d.ts +4 -1
- package/dist/src/commands/migrate.d.ts.map +1 -1
- package/dist/src/commands/migrate.js +233 -5
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/prompt-snapshot.d.ts +2 -0
- package/dist/src/commands/prompt-snapshot.d.ts.map +1 -0
- package/dist/src/commands/prompt-snapshot.js +125 -0
- package/dist/src/commands/prompt-snapshot.js.map +1 -0
- package/dist/src/commands/verify.d.ts +2 -0
- package/dist/src/commands/verify.d.ts.map +1 -0
- package/dist/src/commands/verify.js +93 -0
- package/dist/src/commands/verify.js.map +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +22 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/args.d.ts +18 -1
- package/dist/src/lib/args.d.ts.map +1 -1
- package/dist/src/lib/args.js +39 -1
- package/dist/src/lib/args.js.map +1 -1
- package/dist/src/lib/config.d.ts +11 -1
- package/dist/src/lib/config.d.ts.map +1 -1
- package/dist/src/lib/config.js +10 -1
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/file-provider.d.ts +7 -0
- package/dist/src/lib/file-provider.d.ts.map +1 -0
- package/dist/src/lib/file-provider.js +33 -0
- package/dist/src/lib/file-provider.js.map +1 -0
- package/dist/src/lib/kysely.d.ts +1 -1
- package/dist/src/lib/kysely.d.ts.map +1 -1
- package/dist/src/lib/kysely.js +3 -0
- package/dist/src/lib/kysely.js.map +1 -1
- package/dist/src/lib/output.d.ts +3 -2
- package/dist/src/lib/output.d.ts.map +1 -1
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/payload-field-tree.d.ts +9 -0
- package/dist/src/lib/payload-field-tree.d.ts.map +1 -0
- package/dist/src/lib/payload-field-tree.js +36 -0
- package/dist/src/lib/payload-field-tree.js.map +1 -0
- package/dist/src/lib/projection-migrations.d.ts +2 -1
- package/dist/src/lib/projection-migrations.d.ts.map +1 -1
- package/dist/src/lib/projection-migrations.js +4 -2
- package/dist/src/lib/projection-migrations.js.map +1 -1
- package/dist/src/lib/snapshot.d.ts +11 -0
- package/dist/src/lib/snapshot.d.ts.map +1 -0
- package/dist/src/lib/snapshot.js +36 -0
- package/dist/src/lib/snapshot.js.map +1 -0
- package/dist/src/lib/wrangler.d.ts +18 -0
- package/dist/src/lib/wrangler.d.ts.map +1 -0
- package/dist/src/lib/wrangler.js +30 -0
- package/dist/src/lib/wrangler.js.map +1 -0
- package/package.json +8 -7
- package/src/commands/init.ts +35 -5
- package/src/commands/migrate.ts +287 -5
- package/src/commands/prompt-snapshot.ts +142 -0
- package/src/commands/verify.ts +111 -0
- package/src/index.ts +22 -1
- package/src/lib/args.ts +67 -1
- package/src/lib/config.ts +23 -3
- package/src/lib/file-provider.ts +33 -0
- package/src/lib/kysely.ts +7 -1
- package/src/lib/output.ts +4 -2
- package/src/lib/payload-field-tree.ts +47 -0
- package/src/lib/projection-migrations.ts +6 -3
- package/src/lib/snapshot.ts +50 -0
- package/src/lib/wrangler.ts +45 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// `meta prompt-snapshot` — deterministic rendered-prompt goldens (FR-004 #4).
|
|
2
|
+
//
|
|
3
|
+
// For each template.* node with a committed fixture payload, render its @textRef
|
|
4
|
+
// text against that payload (same engine, provider, and @format escaping prod
|
|
5
|
+
// uses) and snapshot the byte-exact output under .metaobjects/snapshots/<name>/.
|
|
6
|
+
// Write mode (default) overwrites output.snap; --check compares against the
|
|
7
|
+
// committed golden and exits 1 on drift (never writes). Closes the gap the
|
|
8
|
+
// template's own git history misses: a shared partial or payload-shape change
|
|
9
|
+
// that silently alters the rendered prompt.
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { existsSync, readFileSync, mkdirSync, writeFileSync } from "node:fs";
|
|
12
|
+
import { parsePromptSnapshotArgs } from "../lib/args.js";
|
|
13
|
+
import { log } from "../lib/log.js";
|
|
14
|
+
import { FileProvider } from "../lib/file-provider.js";
|
|
15
|
+
import { snapshotPaths, unifiedDiff } from "../lib/snapshot.js";
|
|
16
|
+
import { loadMemory } from "@metaobjectsdev/sdk";
|
|
17
|
+
import { TYPE_TEMPLATE, TEMPLATE_ATTR_TEXT_REF, TEMPLATE_ATTR_FORMAT } from "@metaobjectsdev/metadata";
|
|
18
|
+
import { render, ESCAPERS } from "@metaobjectsdev/render";
|
|
19
|
+
const DEFAULT_PROMPTS_DIR = "prompts";
|
|
20
|
+
export async function promptSnapshotCommand(args, cwd) {
|
|
21
|
+
let flags;
|
|
22
|
+
try {
|
|
23
|
+
flags = parsePromptSnapshotArgs(args);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
log.error(err.message);
|
|
27
|
+
return 2;
|
|
28
|
+
}
|
|
29
|
+
let root;
|
|
30
|
+
try {
|
|
31
|
+
root = await loadMemory(cwd);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
const msg = err.message;
|
|
35
|
+
if (msg.includes("ENOENT") || msg.includes("no such") || msg.includes("cannot read")) {
|
|
36
|
+
log.error(`no metaobjects/ found in ${cwd}; run 'meta init' to scaffold`);
|
|
37
|
+
return 2;
|
|
38
|
+
}
|
|
39
|
+
log.error(`failed to load metadata: ${msg}`);
|
|
40
|
+
return 1;
|
|
41
|
+
}
|
|
42
|
+
const promptsDir = join(cwd, flags.prompts ?? DEFAULT_PROMPTS_DIR);
|
|
43
|
+
const provider = new FileProvider(promptsDir);
|
|
44
|
+
const templates = root.ownChildren().filter((c) => c.type === TYPE_TEMPLATE);
|
|
45
|
+
if (templates.length === 0) {
|
|
46
|
+
log.info("meta prompt-snapshot — no template.* nodes found; nothing to snapshot.");
|
|
47
|
+
return 0;
|
|
48
|
+
}
|
|
49
|
+
let errorCount = 0;
|
|
50
|
+
let driftCount = 0;
|
|
51
|
+
let wrote = 0;
|
|
52
|
+
let checked = 0;
|
|
53
|
+
let skipped = 0;
|
|
54
|
+
for (const tmpl of templates) {
|
|
55
|
+
const textRef = tmpl.ownAttr(TEMPLATE_ATTR_TEXT_REF);
|
|
56
|
+
// Absent/typeless required attrs are a loader-schema concern, not ours.
|
|
57
|
+
if (typeof textRef !== "string")
|
|
58
|
+
continue;
|
|
59
|
+
const { dir, payloadPath, snapPath } = snapshotPaths(cwd, tmpl.name);
|
|
60
|
+
if (!existsSync(payloadPath)) {
|
|
61
|
+
log.info(`[${tmpl.name}] skipped — no payload at ${payloadPath}`);
|
|
62
|
+
skipped++;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
let payload;
|
|
66
|
+
try {
|
|
67
|
+
payload = JSON.parse(readFileSync(payloadPath, "utf8"));
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
log.error(`[${tmpl.name}] invalid payload.json: ${err.message}`);
|
|
71
|
+
errorCount++;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
// @format is loader-validated against the template format vocabulary; narrow
|
|
75
|
+
// against the render engine's own escaper registry so the RenderFormat cast is
|
|
76
|
+
// a checked narrowing (never a TypeError on an unknown format), and omit the
|
|
77
|
+
// key entirely when absent (exactOptionalPropertyTypes forbids `format: undefined`).
|
|
78
|
+
const fmtAttr = tmpl.ownAttr(TEMPLATE_ATTR_FORMAT);
|
|
79
|
+
const format = typeof fmtAttr === "string" && fmtAttr in ESCAPERS ? fmtAttr : undefined;
|
|
80
|
+
let rendered;
|
|
81
|
+
try {
|
|
82
|
+
rendered = render({ ref: textRef, payload, provider, ...(format ? { format } : {}) });
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
log.error(`[${tmpl.name}] render failed: ${err.message}`);
|
|
86
|
+
errorCount++;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (flags.check) {
|
|
90
|
+
checked++;
|
|
91
|
+
if (!existsSync(snapPath)) {
|
|
92
|
+
log.error(`[${tmpl.name}] no committed snapshot at ${snapPath}; run 'meta prompt-snapshot' to create it`);
|
|
93
|
+
driftCount++;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const golden = readFileSync(snapPath, "utf8");
|
|
97
|
+
if (golden !== rendered) {
|
|
98
|
+
log.error(`[${tmpl.name}] snapshot drift:\n${unifiedDiff(golden, rendered)}`);
|
|
99
|
+
log.error(`[${tmpl.name}] run 'meta prompt-snapshot' to accept the change`);
|
|
100
|
+
driftCount++;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
mkdirSync(dir, { recursive: true });
|
|
105
|
+
writeFileSync(snapPath, rendered, "utf8");
|
|
106
|
+
log.info(`[${tmpl.name}] wrote ${snapPath}`);
|
|
107
|
+
wrote++;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (flags.check) {
|
|
111
|
+
if (errorCount > 0 || driftCount > 0) {
|
|
112
|
+
log.error(`meta prompt-snapshot --check — ${driftCount} drifted, ${errorCount} error(s) across ${checked} checked.`);
|
|
113
|
+
return 1;
|
|
114
|
+
}
|
|
115
|
+
log.info(`meta prompt-snapshot --check — ${checked} snapshot(s) clean${skipped > 0 ? `, ${skipped} skipped` : ""}.`);
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
if (errorCount > 0) {
|
|
119
|
+
log.error(`meta prompt-snapshot — ${errorCount} error(s); ${wrote} snapshot(s) written.`);
|
|
120
|
+
return 1;
|
|
121
|
+
}
|
|
122
|
+
log.info(`meta prompt-snapshot — ${wrote} snapshot(s) written${skipped > 0 ? `, ${skipped} skipped` : ""}.`);
|
|
123
|
+
return 0;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=prompt-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-snapshot.js","sourceRoot":"","sources":["../../../src/commands/prompt-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/verify.ts"],"names":[],"mappings":"AAiCA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6EhF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// `meta verify` — the build-time drift gate (FR-004 Plan #3, T6).
|
|
2
|
+
//
|
|
3
|
+
// Loads metadata + a filesystem provider; for each template.* node resolves its
|
|
4
|
+
// @textRef text, derives its @payloadRef view-object field tree, and runs the
|
|
5
|
+
// render engine's `verify` (template variable ↔ payload field drift). Exits
|
|
6
|
+
// non-zero on any drift error so CI fails loud — the "a renamed field can't
|
|
7
|
+
// silently break a prompt" guarantee, enforced at the last fixed point before
|
|
8
|
+
// the text ships. Required-slot misses are warnings (don't fail the build).
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { parseVerifyArgs } from "../lib/args.js";
|
|
11
|
+
import { log } from "../lib/log.js";
|
|
12
|
+
import { FileProvider } from "../lib/file-provider.js";
|
|
13
|
+
import { derivePayloadFieldTree } from "../lib/payload-field-tree.js";
|
|
14
|
+
import { loadMemory } from "@metaobjectsdev/sdk";
|
|
15
|
+
import { TYPE_TEMPLATE, TEMPLATE_ATTR_PAYLOAD_REF, TEMPLATE_ATTR_TEXT_REF, TEMPLATE_ATTR_REQUIRED_SLOTS, TEMPLATE_ATTR_REQUIRED_TAGS, } from "@metaobjectsdev/metadata";
|
|
16
|
+
import { verify, ERR_REQUIRED_SLOT_UNUSED, ERR_PARTIAL_UNRESOLVED } from "@metaobjectsdev/render";
|
|
17
|
+
const DEFAULT_PROMPTS_DIR = "prompts";
|
|
18
|
+
/** Coerce a string-array attr (array, or a single string) into a string[]. */
|
|
19
|
+
function attrAsStringArray(attr) {
|
|
20
|
+
if (Array.isArray(attr))
|
|
21
|
+
return attr.filter((s) => typeof s === "string");
|
|
22
|
+
if (typeof attr === "string")
|
|
23
|
+
return [attr];
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
export async function verifyCommand(args, cwd) {
|
|
27
|
+
let flags;
|
|
28
|
+
try {
|
|
29
|
+
flags = parseVerifyArgs(args);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
log.error(err.message);
|
|
33
|
+
return 2;
|
|
34
|
+
}
|
|
35
|
+
let root;
|
|
36
|
+
try {
|
|
37
|
+
root = await loadMemory(cwd);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
const msg = err.message;
|
|
41
|
+
if (msg.includes("ENOENT") || msg.includes("no such") || msg.includes("cannot read")) {
|
|
42
|
+
log.error(`no metaobjects/ found in ${cwd}; run 'meta init' to scaffold`);
|
|
43
|
+
return 2;
|
|
44
|
+
}
|
|
45
|
+
log.error(`failed to load metadata: ${msg}`);
|
|
46
|
+
return 1;
|
|
47
|
+
}
|
|
48
|
+
const promptsDir = join(cwd, flags.prompts ?? DEFAULT_PROMPTS_DIR);
|
|
49
|
+
const provider = new FileProvider(promptsDir);
|
|
50
|
+
const templates = root.ownChildren().filter((c) => c.type === TYPE_TEMPLATE);
|
|
51
|
+
if (templates.length === 0) {
|
|
52
|
+
log.info("meta verify — no template.* nodes found; nothing to check.");
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
let errorCount = 0;
|
|
56
|
+
let warnCount = 0;
|
|
57
|
+
let checked = 0;
|
|
58
|
+
for (const tmpl of templates) {
|
|
59
|
+
const textRef = tmpl.ownAttr(TEMPLATE_ATTR_TEXT_REF);
|
|
60
|
+
const payloadRef = tmpl.ownAttr(TEMPLATE_ATTR_PAYLOAD_REF);
|
|
61
|
+
// Absent/typeless required attrs are a loader-schema concern, not verify's.
|
|
62
|
+
if (typeof textRef !== "string" || typeof payloadRef !== "string")
|
|
63
|
+
continue;
|
|
64
|
+
const text = provider.resolve(textRef);
|
|
65
|
+
if (text === undefined) {
|
|
66
|
+
log.error(`[${tmpl.name}] ${ERR_PARTIAL_UNRESOLVED}: @textRef "${textRef}" did not resolve under ${promptsDir}`);
|
|
67
|
+
errorCount++;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const fieldTree = derivePayloadFieldTree(root, payloadRef);
|
|
71
|
+
const requiredSlots = attrAsStringArray(tmpl.ownAttr(TEMPLATE_ATTR_REQUIRED_SLOTS));
|
|
72
|
+
const requiredTags = attrAsStringArray(tmpl.ownAttr(TEMPLATE_ATTR_REQUIRED_TAGS));
|
|
73
|
+
const drift = verify(text, fieldTree, { provider, requiredSlots, requiredTags });
|
|
74
|
+
checked++;
|
|
75
|
+
for (const e of drift) {
|
|
76
|
+
if (e.code === ERR_REQUIRED_SLOT_UNUSED) {
|
|
77
|
+
log.warn(`[${tmpl.name}] ${e.code}: ${e.path}`);
|
|
78
|
+
warnCount++;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
log.error(`[${tmpl.name}] ${e.code}: ${e.path}`);
|
|
82
|
+
errorCount++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (errorCount > 0) {
|
|
87
|
+
log.error(`meta verify — ${errorCount} drift error(s) across ${templates.length} template(s).`);
|
|
88
|
+
return 1;
|
|
89
|
+
}
|
|
90
|
+
log.info(`meta verify — ${checked} template(s) clean${warnCount > 0 ? ` (${warnCount} warning(s))` : ""}.`);
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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;AA+EvE,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqEzD"}
|
package/dist/src/index.js
CHANGED
|
@@ -38,6 +38,8 @@ COMMANDS:
|
|
|
38
38
|
init --refresh-docs Refresh .metaobjects/AGENTS.md + CLAUDE.md after CLI upgrades
|
|
39
39
|
gen [<entity>...] Codegen TS targets from metaobjects/ entities
|
|
40
40
|
export Flatten loaded metadata to one canonical JSON artifact
|
|
41
|
+
verify Check template.* text against its payload (drift gate)
|
|
42
|
+
prompt-snapshot Snapshot rendered template.* output; --check gates drift
|
|
41
43
|
migrate Diff metadata vs live DB; emit migration SQL files
|
|
42
44
|
--version, -v Print version
|
|
43
45
|
--help, -h Print this help
|
|
@@ -53,15 +55,26 @@ GEN FLAGS:
|
|
|
53
55
|
EXPORT FLAGS:
|
|
54
56
|
--out <file> Write output to a file (default: stdout)
|
|
55
57
|
|
|
58
|
+
VERIFY FLAGS:
|
|
59
|
+
--prompts <dir> Directory of provider-resolved template text (default: prompts)
|
|
60
|
+
|
|
61
|
+
PROMPT-SNAPSHOT FLAGS:
|
|
62
|
+
--check Compare against committed snapshots; exit 1 on drift (CI gate)
|
|
63
|
+
--prompts <dir> Directory of provider-resolved template text (default: prompts)
|
|
64
|
+
|
|
56
65
|
MIGRATE FLAGS:
|
|
57
66
|
--db <url> DB connection URL (required, or set DATABASE_URL or config)
|
|
58
67
|
Supports: file:, libsql:, postgres:, postgresql:
|
|
59
|
-
--dialect sqlite|postgres Optional override (auto-detected from URL scheme)
|
|
68
|
+
--dialect sqlite|postgres|d1 Optional override (auto-detected from URL scheme)
|
|
60
69
|
--out-dir <path> Migration directory (default: ./.metaobjects/migrations)
|
|
61
70
|
--slug <name> Required when changes are present (e.g., add-user-shipping)
|
|
62
71
|
--allow <csv> Comma-separated destructive-change permissions:
|
|
63
72
|
drop-column,drop-table,type-change,drop-index,drop-fk,nullable-to-not-null
|
|
64
73
|
--on-ambiguous abort|rename|drop-add Default abort
|
|
74
|
+
--d1 <binding> D1 binding name from wrangler.toml (only with --dialect d1)
|
|
75
|
+
--remote Target remote D1 instead of local (only with --dialect d1)
|
|
76
|
+
--apply Run 'wrangler d1 migrations apply' after writing files
|
|
77
|
+
--yes Skip the --remote --apply confirmation pause
|
|
65
78
|
--dry-run Print SQL to stdout, don't write
|
|
66
79
|
|
|
67
80
|
Other commands (ingest, mcp, serve, install-hooks, audit, capture, promote)
|
|
@@ -118,6 +131,14 @@ export async function run(argv) {
|
|
|
118
131
|
const { exportCommand } = await import("./commands/export.js");
|
|
119
132
|
return exportCommand(rest, cwd);
|
|
120
133
|
}
|
|
134
|
+
case "verify": {
|
|
135
|
+
const { verifyCommand } = await import("./commands/verify.js");
|
|
136
|
+
return verifyCommand(rest, cwd);
|
|
137
|
+
}
|
|
138
|
+
case "prompt-snapshot": {
|
|
139
|
+
const { promptSnapshotCommand } = await import("./commands/prompt-snapshot.js");
|
|
140
|
+
return promptSnapshotCommand(rest, cwd);
|
|
141
|
+
}
|
|
121
142
|
case "migrate": {
|
|
122
143
|
const { migrateCommand } = await import("./commands/migrate.js");
|
|
123
144
|
return migrateCommand(rest, cwd);
|
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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"}
|
package/dist/src/lib/args.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export interface InitFlags {
|
|
|
3
3
|
quiet: boolean;
|
|
4
4
|
printOnly: boolean;
|
|
5
5
|
refreshDocs: boolean;
|
|
6
|
+
d1: boolean;
|
|
6
7
|
}
|
|
7
8
|
export declare function parseInitArgs(argv: string[]): InitFlags;
|
|
8
9
|
export interface GenFlags {
|
|
@@ -14,7 +15,19 @@ export interface ExportFlags {
|
|
|
14
15
|
out: string | undefined;
|
|
15
16
|
}
|
|
16
17
|
export declare function parseExportArgs(argv: string[]): ExportFlags;
|
|
17
|
-
|
|
18
|
+
export interface VerifyFlags {
|
|
19
|
+
/** Directory (relative to cwd) holding provider-resolved template text. */
|
|
20
|
+
prompts: string | undefined;
|
|
21
|
+
}
|
|
22
|
+
export declare function parseVerifyArgs(argv: string[]): VerifyFlags;
|
|
23
|
+
export interface PromptSnapshotFlags {
|
|
24
|
+
/** Compare against committed snapshots and fail on drift; never write. */
|
|
25
|
+
check: boolean;
|
|
26
|
+
/** Directory (relative to cwd) holding provider-resolved template text. */
|
|
27
|
+
prompts: string | undefined;
|
|
28
|
+
}
|
|
29
|
+
export declare function parsePromptSnapshotArgs(argv: string[]): PromptSnapshotFlags;
|
|
30
|
+
declare const DIALECTS: readonly ["sqlite", "postgres", "d1"];
|
|
18
31
|
type Dialect = (typeof DIALECTS)[number];
|
|
19
32
|
declare const ALLOW_TOKENS: readonly ["drop-column", "drop-table", "type-change", "drop-index", "drop-fk", "nullable-to-not-null"];
|
|
20
33
|
type AllowToken = (typeof ALLOW_TOKENS)[number];
|
|
@@ -28,6 +41,10 @@ export interface MigrateFlags {
|
|
|
28
41
|
allow: AllowToken[];
|
|
29
42
|
onAmbiguous: OnAmbiguous | undefined;
|
|
30
43
|
dryRun: boolean;
|
|
44
|
+
d1Binding: string | undefined;
|
|
45
|
+
remote: boolean;
|
|
46
|
+
apply: boolean;
|
|
47
|
+
yes: boolean;
|
|
31
48
|
}
|
|
32
49
|
export declare function parseMigrateArgs(argv: string[]): MigrateFlags;
|
|
33
50
|
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;
|
|
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;CACpB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAarD;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,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAY3D;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,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;AAEhD,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,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAuD7D"}
|
package/dist/src/lib/args.js
CHANGED
|
@@ -7,6 +7,7 @@ export function parseInitArgs(argv) {
|
|
|
7
7
|
quiet: { type: "boolean", default: false },
|
|
8
8
|
"print-only": { type: "boolean", default: false },
|
|
9
9
|
"refresh-docs": { type: "boolean", default: false },
|
|
10
|
+
d1: { type: "boolean", default: false },
|
|
10
11
|
},
|
|
11
12
|
strict: true,
|
|
12
13
|
allowPositionals: false,
|
|
@@ -16,6 +17,7 @@ export function parseInitArgs(argv) {
|
|
|
16
17
|
quiet: !!values.quiet,
|
|
17
18
|
printOnly: !!values["print-only"],
|
|
18
19
|
refreshDocs: !!values["refresh-docs"],
|
|
20
|
+
d1: !!values.d1,
|
|
19
21
|
};
|
|
20
22
|
}
|
|
21
23
|
export function parseGenArgs(argv) {
|
|
@@ -45,10 +47,38 @@ export function parseExportArgs(argv) {
|
|
|
45
47
|
out: values.out,
|
|
46
48
|
};
|
|
47
49
|
}
|
|
50
|
+
export function parseVerifyArgs(argv) {
|
|
51
|
+
const { values } = parseArgs({
|
|
52
|
+
args: argv,
|
|
53
|
+
options: {
|
|
54
|
+
prompts: { type: "string" },
|
|
55
|
+
},
|
|
56
|
+
strict: true,
|
|
57
|
+
allowPositionals: false,
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
prompts: values.prompts,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function parsePromptSnapshotArgs(argv) {
|
|
64
|
+
const { values } = parseArgs({
|
|
65
|
+
args: argv,
|
|
66
|
+
options: {
|
|
67
|
+
check: { type: "boolean", default: false },
|
|
68
|
+
prompts: { type: "string" },
|
|
69
|
+
},
|
|
70
|
+
strict: true,
|
|
71
|
+
allowPositionals: false,
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
check: !!values.check,
|
|
75
|
+
prompts: values.prompts,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
48
78
|
// ---------------------------------------------------------------------------
|
|
49
79
|
// migrate flags
|
|
50
80
|
// ---------------------------------------------------------------------------
|
|
51
|
-
const DIALECTS = ["sqlite", "postgres"];
|
|
81
|
+
const DIALECTS = ["sqlite", "postgres", "d1"];
|
|
52
82
|
const ALLOW_TOKENS = [
|
|
53
83
|
"drop-column",
|
|
54
84
|
"drop-table",
|
|
@@ -69,6 +99,10 @@ export function parseMigrateArgs(argv) {
|
|
|
69
99
|
"allow": { type: "string" },
|
|
70
100
|
"on-ambiguous": { type: "string" },
|
|
71
101
|
"dry-run": { type: "boolean", default: false },
|
|
102
|
+
"d1": { type: "string" },
|
|
103
|
+
"remote": { type: "boolean", default: false },
|
|
104
|
+
"apply": { type: "boolean", default: false },
|
|
105
|
+
"yes": { type: "boolean", default: false },
|
|
72
106
|
},
|
|
73
107
|
strict: true,
|
|
74
108
|
allowPositionals: false,
|
|
@@ -98,6 +132,10 @@ export function parseMigrateArgs(argv) {
|
|
|
98
132
|
allow: allowTokens,
|
|
99
133
|
onAmbiguous: onAmb,
|
|
100
134
|
dryRun: !!values["dry-run"],
|
|
135
|
+
d1Binding: values.d1,
|
|
136
|
+
remote: !!values.remote,
|
|
137
|
+
apply: !!values.apply,
|
|
138
|
+
yes: !!values.yes,
|
|
101
139
|
};
|
|
102
140
|
}
|
|
103
141
|
//# 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;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../src/lib/args.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/config.d.ts
CHANGED
|
@@ -1,16 +1,26 @@
|
|
|
1
1
|
import type { GenFlags, MigrateFlags } from "./args.js";
|
|
2
|
+
import type { Dialect } from "./kysely.js";
|
|
3
|
+
export declare const MIGRATE_DEFAULT_OUT_DIR = "./.metaobjects/migrations";
|
|
2
4
|
export interface ResolvedGenConfig {
|
|
3
5
|
dryRun: boolean;
|
|
4
6
|
entities: string[];
|
|
5
7
|
}
|
|
8
|
+
export interface ResolvedD1Config {
|
|
9
|
+
binding: string | undefined;
|
|
10
|
+
remote: boolean;
|
|
11
|
+
autoApply: boolean;
|
|
12
|
+
wranglerConfigPath: string | undefined;
|
|
13
|
+
}
|
|
6
14
|
export interface ResolvedMigrateConfig {
|
|
7
15
|
outDir: string;
|
|
8
16
|
databaseUrl: string | undefined;
|
|
9
|
-
dialect:
|
|
17
|
+
dialect: Dialect | undefined;
|
|
10
18
|
onAmbiguous: "abort" | "rename" | "drop-add";
|
|
11
19
|
allow: string[];
|
|
12
20
|
slug: string | undefined;
|
|
13
21
|
dryRun: boolean;
|
|
22
|
+
yes: boolean;
|
|
23
|
+
d1: ResolvedD1Config;
|
|
14
24
|
}
|
|
15
25
|
export declare function resolveGenConfig(flags: GenFlags): ResolvedGenConfig;
|
|
16
26
|
export declare function resolveMigrateConfig(flags: MigrateFlags, metaRoot: string): Promise<ResolvedMigrateConfig>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAM3C,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AAcnE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,EAAE,EAAE,gBAAgB,CAAC;CACtB;AAmBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG,iBAAiB,CAEnE;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,CAyBhC"}
|
package/dist/src/lib/config.js
CHANGED
|
@@ -4,8 +4,9 @@ import { ConfigSchema, DEFAULT_METAOBJECTS_DIR } from "@metaobjectsdev/sdk";
|
|
|
4
4
|
// ---------------------------------------------------------------------------
|
|
5
5
|
// Built-in defaults
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
|
+
export const MIGRATE_DEFAULT_OUT_DIR = "./.metaobjects/migrations";
|
|
7
8
|
const MIGRATE_DEFAULTS = {
|
|
8
|
-
outDir:
|
|
9
|
+
outDir: MIGRATE_DEFAULT_OUT_DIR,
|
|
9
10
|
databaseUrl: undefined,
|
|
10
11
|
dialect: undefined,
|
|
11
12
|
onAmbiguous: "abort",
|
|
@@ -32,6 +33,7 @@ export function resolveGenConfig(flags) {
|
|
|
32
33
|
export async function resolveMigrateConfig(flags, metaRoot) {
|
|
33
34
|
const config = await tryLoadConfig(metaRoot);
|
|
34
35
|
const cfgBlock = config?.migrate ?? {};
|
|
36
|
+
const d1Block = cfgBlock.d1 ?? {};
|
|
35
37
|
const envUrl = process.env.DATABASE_URL;
|
|
36
38
|
return {
|
|
37
39
|
outDir: flags.outDir ?? cfgBlock.outDir ?? MIGRATE_DEFAULTS.outDir,
|
|
@@ -43,6 +45,13 @@ export async function resolveMigrateConfig(flags, metaRoot) {
|
|
|
43
45
|
: (cfgBlock.allow ?? MIGRATE_DEFAULTS.allow),
|
|
44
46
|
slug: flags.slug,
|
|
45
47
|
dryRun: flags.dryRun,
|
|
48
|
+
yes: flags.yes,
|
|
49
|
+
d1: {
|
|
50
|
+
binding: flags.d1Binding ?? d1Block.binding,
|
|
51
|
+
remote: flags.remote || (d1Block.remote ?? false),
|
|
52
|
+
autoApply: flags.apply || (d1Block.autoApply ?? false),
|
|
53
|
+
wranglerConfigPath: d1Block.wranglerConfigPath,
|
|
54
|
+
},
|
|
46
55
|
};
|
|
47
56
|
}
|
|
48
57
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAe,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAe,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAIzF,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAEnE,MAAM,gBAAgB,GAAG;IACvB,MAAM,EAAE,uBAAuB;IAC/B,WAAW,EAAE,SAA+B;IAC5C,OAAO,EAAE,SAAgC;IACzC,WAAW,EAAE,OAAgB;IAC7B,KAAK,EAAE,EAAc;CACtB,CAAC;AA8BF,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,KAAK,UAAU,aAAa,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3F,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,UAAU,gBAAgB,CAAC,KAAe;IAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAmB,EACnB,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAElC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAExC,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM;QAClE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,MAAM,IAAI,QAAQ,CAAC,WAAW,IAAI,gBAAgB,CAAC,WAAW;QACvF,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO;QACtE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,IAAI,gBAAgB,CAAC,WAAW;QACtF,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAC3B,CAAC,CAAC,KAAK,CAAC,KAAK;YACb,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAC9C,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,EAAE,EAAE;YACF,OAAO,EAAE,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO;YAC3C,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;YACjD,SAAS,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;YACtD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;SAC/C;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-provider.d.ts","sourceRoot":"","sources":["../../../src/lib/file-provider.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAIvD,qBAAa,YAAa,YAAW,QAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAE5C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAezC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// The filesystem template provider for `meta verify` (FR-004 Plan #3, T6).
|
|
2
|
+
//
|
|
3
|
+
// Maps a 2-layer logical reference (`group/source`) onto a file under a base
|
|
4
|
+
// directory, trying a small set of conventional extensions. This is the CLI's
|
|
5
|
+
// concrete provider; the render engine itself stays provider-agnostic (it only
|
|
6
|
+
// knows the `Provider` interface), so production hosts can swap in an RDB/NoSQL
|
|
7
|
+
// provider without touching the engine.
|
|
8
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
const EXTENSIONS = [".mustache", ".txt", ""];
|
|
11
|
+
export class FileProvider {
|
|
12
|
+
baseDir;
|
|
13
|
+
constructor(baseDir) {
|
|
14
|
+
this.baseDir = baseDir;
|
|
15
|
+
}
|
|
16
|
+
resolve(ref) {
|
|
17
|
+
// `group/source` → <baseDir>/group/source<ext>; node:path.join normalizes
|
|
18
|
+
// the embedded "/" separators for the host OS.
|
|
19
|
+
for (const ext of EXTENSIONS) {
|
|
20
|
+
const path = join(this.baseDir, ref) + ext;
|
|
21
|
+
if (existsSync(path)) {
|
|
22
|
+
try {
|
|
23
|
+
return readFileSync(path, "utf8");
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// unreadable — fall through and try the next candidate
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=file-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-provider.js","sourceRoot":"","sources":["../../../src/lib/file-provider.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,wCAAwC;AAExC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,CAAU,CAAC;AAEtD,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEhD,OAAO,CAAC,GAAW;QACjB,0EAA0E;QAC1E,+CAA+C;QAC/C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;YAC3C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC;oBACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACpC,CAAC;gBAAC,MAAM,CAAC;oBACP,uDAAuD;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
package/dist/src/lib/kysely.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely.d.ts","sourceRoot":"","sources":["../../../src/lib/kysely.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"kysely.d.ts","sourceRoot":"","sources":["../../../src/lib/kysely.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAkBjD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,eAAe,CAAC,EAAE,OAAO,GACxB,OAAO,CAAC,YAAY,CAAC,CAiEvB"}
|
package/dist/src/lib/kysely.js
CHANGED
|
@@ -36,6 +36,9 @@ export function redactUrl(url) {
|
|
|
36
36
|
export async function buildKyselyFromUrl(url, dialectOverride) {
|
|
37
37
|
const dialect = dialectOverride ?? inferDialect(url);
|
|
38
38
|
const displayUrl = redactUrl(url);
|
|
39
|
+
if (dialect === "d1") {
|
|
40
|
+
throw new Error(`dialect 'd1' does not use a URL connection; use meta migrate --d1 <binding>`);
|
|
41
|
+
}
|
|
39
42
|
if (dialect === "sqlite") {
|
|
40
43
|
let LibsqlDialect;
|
|
41
44
|
try {
|