@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely.js","sourceRoot":"","sources":["../../../src/lib/kysely.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kysely.js","sourceRoot":"","sources":["../../../src/lib/kysely.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/output.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Dialect } from "./kysely.js";
|
|
1
2
|
export interface FormatOptions {
|
|
2
3
|
isTTY: boolean;
|
|
3
4
|
}
|
|
@@ -10,7 +11,7 @@ export interface GenFileEntry {
|
|
|
10
11
|
export interface GenResultShape {
|
|
11
12
|
files: GenFileEntry[];
|
|
12
13
|
outDir: string;
|
|
13
|
-
dialect:
|
|
14
|
+
dialect: Dialect;
|
|
14
15
|
dryRun: boolean;
|
|
15
16
|
warnings: string[];
|
|
16
17
|
}
|
|
@@ -26,7 +27,7 @@ export interface AmbiguousEntry {
|
|
|
26
27
|
hint: string;
|
|
27
28
|
}
|
|
28
29
|
export interface MigrateResultShape {
|
|
29
|
-
dialect:
|
|
30
|
+
dialect: Dialect;
|
|
30
31
|
displayUrl: string;
|
|
31
32
|
changeCounts: Record<string, number>;
|
|
32
33
|
blocked: BlockedEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;CAChB;AAMD,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAEpF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;CAChB;AAMD,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAEpF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAkBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAyCnF;AAMD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAyC5F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,0EAA0E;AAC1E,mEAAmE;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type MetaData } from "@metaobjectsdev/metadata";
|
|
2
|
+
import type { PayloadField } from "@metaobjectsdev/render";
|
|
3
|
+
/**
|
|
4
|
+
* Walk an `object.value` view-object into a render `PayloadField[]`. Object-ref
|
|
5
|
+
* fields recurse into their referenced view-object; a `seen` set guards against
|
|
6
|
+
* a (pathological) reference cycle.
|
|
7
|
+
*/
|
|
8
|
+
export declare function derivePayloadFieldTree(root: MetaData, voName: string, seen?: ReadonlySet<string>): PayloadField[];
|
|
9
|
+
//# sourceMappingURL=payload-field-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-field-tree.d.ts","sourceRoot":"","sources":["../../../src/lib/payload-field-tree.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,QAAQ,EAKd,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAM3D;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,WAAW,CAAC,MAAM,CAAa,GACpC,YAAY,EAAE,CAiBhB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Derive a plain payload field tree from a loaded `object.value` view-object,
|
|
2
|
+
// for `meta verify` (FR-004 Plan #3, T6). This is the metadata-side bridge to
|
|
3
|
+
// the zero-core-dependency render engine: render's `verify` takes a PLAIN
|
|
4
|
+
// PayloadField[] (no metadata import), and this function produces it by walking
|
|
5
|
+
// the view-object exactly as payload-codegen.ts does — scalars become leaves,
|
|
6
|
+
// `field.object` with an `@objectRef` becomes a nested tree.
|
|
7
|
+
import { TYPE_OBJECT, TYPE_FIELD, FIELD_SUBTYPE_OBJECT, FIELD_ATTR_OBJECT_REF, } from "@metaobjectsdev/metadata";
|
|
8
|
+
function findObject(root, name) {
|
|
9
|
+
return root.ownChildren().find((c) => c.type === TYPE_OBJECT && c.name === name);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Walk an `object.value` view-object into a render `PayloadField[]`. Object-ref
|
|
13
|
+
* fields recurse into their referenced view-object; a `seen` set guards against
|
|
14
|
+
* a (pathological) reference cycle.
|
|
15
|
+
*/
|
|
16
|
+
export function derivePayloadFieldTree(root, voName, seen = new Set()) {
|
|
17
|
+
if (seen.has(voName))
|
|
18
|
+
return [];
|
|
19
|
+
const vo = findObject(root, voName);
|
|
20
|
+
if (!vo)
|
|
21
|
+
return [];
|
|
22
|
+
const nextSeen = new Set(seen).add(voName);
|
|
23
|
+
const fields = [];
|
|
24
|
+
for (const f of vo.children().filter((c) => c.type === TYPE_FIELD)) {
|
|
25
|
+
if (f.subType === FIELD_SUBTYPE_OBJECT) {
|
|
26
|
+
const ref = f.ownAttr(FIELD_ATTR_OBJECT_REF);
|
|
27
|
+
if (typeof ref === "string") {
|
|
28
|
+
fields.push({ name: f.name, fields: derivePayloadFieldTree(root, ref, nextSeen) });
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
fields.push({ name: f.name });
|
|
33
|
+
}
|
|
34
|
+
return fields;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=payload-field-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-field-tree.js","sourceRoot":"","sources":["../../../src/lib/payload-field-tree.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,8EAA8E;AAC9E,0EAA0E;AAC1E,gFAAgF;AAChF,8EAA8E;AAC9E,6DAA6D;AAE7D,OAAO,EAEL,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAGlC,SAAS,UAAU,CAAC,IAAc,EAAE,IAAY;IAC9C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAc,EACd,MAAc,EACd,OAA4B,IAAI,GAAG,EAAE;IAErC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,CAAC,OAAO,KAAK,oBAAoB,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACnF,SAAS;YACX,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type MetaData } from "@metaobjectsdev/metadata";
|
|
2
2
|
import { type ViewMigrationsResult } from "@metaobjectsdev/migrate-ts";
|
|
3
|
+
import type { Dialect } from "./kysely.js";
|
|
3
4
|
/** view-name → set of source-table names the view's SELECT depends on. */
|
|
4
5
|
export type ProjectionViewDependencies = ReadonlyMap<string, ReadonlySet<string>>;
|
|
5
6
|
export interface ProjectionMigrationsOpts {
|
|
6
7
|
readonly metadata: MetaData;
|
|
7
|
-
readonly dialect:
|
|
8
|
+
readonly dialect: Dialect;
|
|
8
9
|
readonly allowBreaking?: boolean;
|
|
9
10
|
/** Column naming strategy forwarded to extractViewSpec. Defaults to "snake_case". */
|
|
10
11
|
readonly columnNamingStrategy?: "snake_case" | "literal" | "kebab-case";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection-migrations.d.ts","sourceRoot":"","sources":["../../../src/lib/projection-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"projection-migrations.d.ts","sourceRoot":"","sources":["../../../src/lib/projection-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,0EAA0E;AAC1E,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAElF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,qFAAqF;IACrF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,YAAY,CAAC;IACxE;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxD;AAOD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,wBAAwB,GAC7B,oBAAoB,CAsEtB;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,IAAI,CAAC,wBAAwB,EAAE,UAAU,GAAG,sBAAsB,CAAC,GACxE,0BAA0B,CAgC5B"}
|
|
@@ -19,6 +19,8 @@ export function computeProjectionMigrations(opts) {
|
|
|
19
19
|
if (!(opts.metadata instanceof MetaRoot)) {
|
|
20
20
|
throw new Error("computeProjectionMigrations: opts.metadata must be a loaded MetaRoot.");
|
|
21
21
|
}
|
|
22
|
+
// D1 is SQLite at the SQL level; normalize before passing to downstream emitters.
|
|
23
|
+
const dialect = opts.dialect === "d1" ? "sqlite" : opts.dialect;
|
|
22
24
|
const root = opts.metadata;
|
|
23
25
|
const columnNamingStrategy = opts.columnNamingStrategy ?? "snake_case";
|
|
24
26
|
// Collect all writable entities for table name resolution.
|
|
@@ -44,7 +46,7 @@ export function computeProjectionMigrations(opts) {
|
|
|
44
46
|
};
|
|
45
47
|
}
|
|
46
48
|
const createSql = emitViewDdl(spec, {
|
|
47
|
-
dialect
|
|
49
|
+
dialect,
|
|
48
50
|
baseTableName,
|
|
49
51
|
joinTables,
|
|
50
52
|
});
|
|
@@ -68,7 +70,7 @@ export function computeProjectionMigrations(opts) {
|
|
|
68
70
|
});
|
|
69
71
|
}
|
|
70
72
|
return computeViewMigrations({
|
|
71
|
-
dialect
|
|
73
|
+
dialect,
|
|
72
74
|
allowBreaking: opts.allowBreaking ?? false,
|
|
73
75
|
views,
|
|
74
76
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection-migrations.js","sourceRoot":"","sources":["../../../src/lib/projection-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,QAAQ,GAET,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,GAGtB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"projection-migrations.js","sourceRoot":"","sources":["../../../src/lib/projection-migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface SnapshotPaths {
|
|
2
|
+
/** The per-template snapshot directory: <cwd>/.metaobjects/snapshots/<name>. */
|
|
3
|
+
dir: string;
|
|
4
|
+
/** The committed fixture payload (author-owned input). */
|
|
5
|
+
payloadPath: string;
|
|
6
|
+
/** The golden rendered output (tool-managed, byte-exact). */
|
|
7
|
+
snapPath: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function snapshotPaths(cwd: string, templateName: string): SnapshotPaths;
|
|
10
|
+
export declare function unifiedDiff(expected: string, actual: string): string;
|
|
11
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/lib/snapshot.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAC;IACZ,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,aAAa,CAO9E;AAKD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuBpE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Path + diff helpers for `meta prompt-snapshot`. Pure (no I/O, no metadata) so
|
|
2
|
+
// they unit-test trivially; the command does the filesystem work.
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
export function snapshotPaths(cwd, templateName) {
|
|
5
|
+
const dir = join(cwd, ".metaobjects", "snapshots", templateName);
|
|
6
|
+
return {
|
|
7
|
+
dir,
|
|
8
|
+
payloadPath: join(dir, "payload.json"),
|
|
9
|
+
snapPath: join(dir, "output.snap"),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
// A compact line diff: trim the common leading/trailing lines, then show the
|
|
13
|
+
// differing middle as `- <expected>` followed by `+ <actual>`. Enough to make
|
|
14
|
+
// drift reviewable in CI output without pulling in a diff dependency.
|
|
15
|
+
export function unifiedDiff(expected, actual) {
|
|
16
|
+
const e = expected.split("\n");
|
|
17
|
+
const a = actual.split("\n");
|
|
18
|
+
let pre = 0;
|
|
19
|
+
while (pre < e.length && pre < a.length && e[pre] === a[pre])
|
|
20
|
+
pre++;
|
|
21
|
+
let suf = 0;
|
|
22
|
+
while (suf < e.length - pre &&
|
|
23
|
+
suf < a.length - pre &&
|
|
24
|
+
e[e.length - 1 - suf] === a[a.length - 1 - suf]) {
|
|
25
|
+
suf++;
|
|
26
|
+
}
|
|
27
|
+
const eMid = e.slice(pre, e.length - suf);
|
|
28
|
+
const aMid = a.slice(pre, a.length - suf);
|
|
29
|
+
const out = [`@@ line ${pre + 1} @@`];
|
|
30
|
+
for (const line of eMid)
|
|
31
|
+
out.push(`- ${line}`);
|
|
32
|
+
for (const line of aMid)
|
|
33
|
+
out.push(`+ ${line}`);
|
|
34
|
+
return out.join("\n");
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/lib/snapshot.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kEAAkE;AAElE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAWjC,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,YAAoB;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACjE,OAAO;QACL,GAAG;QACH,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC;QACtC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,8EAA8E;AAC9E,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,MAAc;IAC1D,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;QAAE,GAAG,EAAE,CAAC;IAEpE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OACE,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG;QACpB,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG;QACpB,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,EAC/C,CAAC;QACD,GAAG,EAAE,CAAC;IACR,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAE1C,MAAM,GAAG,GAAa,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface WranglerExecuteOptions {
|
|
2
|
+
binding: string;
|
|
3
|
+
remote: boolean;
|
|
4
|
+
command: string;
|
|
5
|
+
configPath: string | undefined;
|
|
6
|
+
}
|
|
7
|
+
export declare function buildWranglerExecuteArgs(opts: WranglerExecuteOptions): string[];
|
|
8
|
+
/**
|
|
9
|
+
* Run wrangler with the given args; return stdout. Stderr is included in the
|
|
10
|
+
* error message when wrangler exits non-zero. `cwd` is the directory wrangler
|
|
11
|
+
* runs in (defaults to process.cwd() — caller should pass the project root).
|
|
12
|
+
*/
|
|
13
|
+
export type WranglerRunner = (args: string[], cwd: string) => Promise<{
|
|
14
|
+
stdout: string;
|
|
15
|
+
stderr: string;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const defaultWranglerRunner: WranglerRunner;
|
|
18
|
+
//# sourceMappingURL=wrangler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrangler.d.ts","sourceRoot":"","sources":["../../../src/lib/wrangler.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAW/E;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE1G,eAAO,MAAM,qBAAqB,EAAE,cAYnC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { execFile as execFileCb } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const execFile = promisify(execFileCb);
|
|
4
|
+
export function buildWranglerExecuteArgs(opts) {
|
|
5
|
+
const args = [
|
|
6
|
+
"d1", "execute", opts.binding,
|
|
7
|
+
opts.remote ? "--remote" : "--local",
|
|
8
|
+
"--json",
|
|
9
|
+
"--command", opts.command,
|
|
10
|
+
];
|
|
11
|
+
if (opts.configPath !== undefined) {
|
|
12
|
+
args.push("--config", opts.configPath);
|
|
13
|
+
}
|
|
14
|
+
return args;
|
|
15
|
+
}
|
|
16
|
+
export const defaultWranglerRunner = async (args, cwd) => {
|
|
17
|
+
try {
|
|
18
|
+
const { stdout, stderr } = await execFile("wrangler", args, { cwd, maxBuffer: 16 * 1024 * 1024 });
|
|
19
|
+
return { stdout, stderr };
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
const e = err;
|
|
23
|
+
if (e.code === "ENOENT") {
|
|
24
|
+
throw new Error(`wrangler not found on PATH; install it: 'npm i -D wrangler'`);
|
|
25
|
+
}
|
|
26
|
+
const stderr = e.stderr ?? "";
|
|
27
|
+
throw new Error(`wrangler ${args.join(" ")} failed: ${stderr || e.message}`);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=wrangler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrangler.js","sourceRoot":"","sources":["../../../src/lib/wrangler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AASvC,MAAM,UAAU,wBAAwB,CAAC,IAA4B;IACnE,MAAM,IAAI,GAAa;QACrB,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO;QAC7B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACpC,QAAQ;QACR,WAAW,EAAE,IAAI,CAAC,OAAO;KAC1B,CAAC;IACF,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,CAAC,MAAM,qBAAqB,GAAmB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IACvE,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;QAClG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAAmE,CAAC;QAC9E,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metaobjectsdev/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "CLI for MetaObjects: scaffold, codegen, migrate, and drift-detection commands.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -36,12 +36,13 @@
|
|
|
36
36
|
},
|
|
37
37
|
"keywords": ["metaobjects", "cli", "scaffold", "codegen", "drift-detection"],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@metaobjectsdev/sdk": "0.
|
|
40
|
-
"@metaobjectsdev/metadata": "0.
|
|
41
|
-
"@metaobjectsdev/
|
|
42
|
-
"@metaobjectsdev/codegen-ts
|
|
43
|
-
"@metaobjectsdev/codegen-ts-
|
|
44
|
-
"@metaobjectsdev/
|
|
39
|
+
"@metaobjectsdev/sdk": "0.6.0",
|
|
40
|
+
"@metaobjectsdev/metadata": "0.6.0",
|
|
41
|
+
"@metaobjectsdev/render": "0.6.0",
|
|
42
|
+
"@metaobjectsdev/codegen-ts": "0.6.0",
|
|
43
|
+
"@metaobjectsdev/codegen-ts-react": "0.6.0",
|
|
44
|
+
"@metaobjectsdev/codegen-ts-tanstack": "0.6.0",
|
|
45
|
+
"@metaobjectsdev/migrate-ts": "0.6.0",
|
|
45
46
|
"jiti": "^2.4.0"
|
|
46
47
|
},
|
|
47
48
|
"peerDependencies": {
|
package/src/commands/init.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { DEFAULT_CONFIG, ConfigSchema, saveConfig, PACKAGE_MANIFEST_FILE, DEFAUL
|
|
|
5
5
|
import { parseInitArgs } from "../lib/args.js";
|
|
6
6
|
import { log } from "../lib/log.js";
|
|
7
7
|
import { AGENT_DOCS_BODY, withContentHash, isUnmodified } from "@metaobjectsdev/sdk/agent-docs";
|
|
8
|
+
import { findWranglerConfig, parseWranglerConfig } from "@metaobjectsdev/migrate-ts";
|
|
8
9
|
|
|
9
10
|
const META_COMMON_JSON = JSON.stringify(
|
|
10
11
|
{
|
|
@@ -20,7 +21,8 @@ const META_COMMON_JSON = JSON.stringify(
|
|
|
20
21
|
const METAOBJECTS_GITIGNORE_BODY = `.gen-state/
|
|
21
22
|
`;
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
function buildMetaobjectsConfigBody(dialect: "sqlite" | "postgres" | "d1" = "sqlite"): string {
|
|
25
|
+
return `import { defineConfig } from "@metaobjectsdev/cli";
|
|
24
26
|
import {
|
|
25
27
|
entityFile,
|
|
26
28
|
queriesFile,
|
|
@@ -33,7 +35,7 @@ export default defineConfig({
|
|
|
33
35
|
outDir: "./src/db",
|
|
34
36
|
extStyle: "none",
|
|
35
37
|
dbImport: "../db",
|
|
36
|
-
dialect: "
|
|
38
|
+
dialect: "${dialect}",
|
|
37
39
|
apiPrefix: "", // set to "/api" if your routes mount under /api
|
|
38
40
|
generators: [
|
|
39
41
|
entityFile(),
|
|
@@ -43,6 +45,7 @@ export default defineConfig({
|
|
|
43
45
|
],
|
|
44
46
|
});
|
|
45
47
|
`;
|
|
48
|
+
}
|
|
46
49
|
|
|
47
50
|
const NEXT_STEPS = `
|
|
48
51
|
Initialized metaobjects/ + .metaobjects/ + metaobjects.config.ts
|
|
@@ -62,6 +65,7 @@ export interface InitOptions {
|
|
|
62
65
|
quiet?: boolean;
|
|
63
66
|
printOnly?: boolean;
|
|
64
67
|
refreshDocs?: boolean;
|
|
68
|
+
d1?: boolean;
|
|
65
69
|
}
|
|
66
70
|
|
|
67
71
|
export interface InitResult {
|
|
@@ -151,6 +155,9 @@ export async function init(opts: InitOptions): Promise<InitResult> {
|
|
|
151
155
|
}
|
|
152
156
|
|
|
153
157
|
// .metaobjects/config.json
|
|
158
|
+
const freshConfig = opts.d1
|
|
159
|
+
? ConfigSchema.parse({ ...DEFAULT_CONFIG, migrate: buildD1MigrateBlock(opts.cwd) })
|
|
160
|
+
: DEFAULT_CONFIG;
|
|
154
161
|
if (agentDirExists) {
|
|
155
162
|
const configPath = join(agentDir, "config.json");
|
|
156
163
|
let priorContent: string | undefined;
|
|
@@ -158,6 +165,10 @@ export async function init(opts: InitOptions): Promise<InitResult> {
|
|
|
158
165
|
priorContent = await readFile(configPath, "utf8");
|
|
159
166
|
const parsed = ConfigSchema.parse(JSON.parse(priorContent));
|
|
160
167
|
const merged = ConfigSchema.parse({ ...DEFAULT_CONFIG, ...parsed });
|
|
168
|
+
// When a valid .metaobjects/config.json already exists and the user passes --force,
|
|
169
|
+
// we preserve the existing config and only re-scaffold support files. The --d1 flag
|
|
170
|
+
// only takes effect on fresh inits — retro-fitting D1 onto an existing project is
|
|
171
|
+
// the user's job (edit migrate.dialect and migrate.d1 in config.json directly).
|
|
161
172
|
await saveConfig(agentDir, merged);
|
|
162
173
|
result.preserved.push(".metaobjects/config.json");
|
|
163
174
|
} catch {
|
|
@@ -168,7 +179,7 @@ export async function init(opts: InitOptions): Promise<InitResult> {
|
|
|
168
179
|
}
|
|
169
180
|
await writeFile(
|
|
170
181
|
join(agentDir, "config.json"),
|
|
171
|
-
JSON.stringify(
|
|
182
|
+
JSON.stringify(freshConfig, null, 2) + "\n",
|
|
172
183
|
"utf8",
|
|
173
184
|
);
|
|
174
185
|
if (priorContent === undefined) {
|
|
@@ -178,7 +189,7 @@ export async function init(opts: InitOptions): Promise<InitResult> {
|
|
|
178
189
|
} else {
|
|
179
190
|
await writeFile(
|
|
180
191
|
join(agentDir, "config.json"),
|
|
181
|
-
JSON.stringify(
|
|
192
|
+
JSON.stringify(freshConfig, null, 2) + "\n",
|
|
182
193
|
"utf8",
|
|
183
194
|
);
|
|
184
195
|
result.created.push(".metaobjects/config.json");
|
|
@@ -208,13 +219,31 @@ export async function init(opts: InitOptions): Promise<InitResult> {
|
|
|
208
219
|
// Scaffold metaobjects.config.ts at the project root. Never overwrite if it exists.
|
|
209
220
|
const forgeConfigPath = join(opts.cwd, "metaobjects.config.ts");
|
|
210
221
|
if (!(await fileExists(forgeConfigPath))) {
|
|
211
|
-
await writeFile(forgeConfigPath,
|
|
222
|
+
await writeFile(forgeConfigPath, buildMetaobjectsConfigBody(opts.d1 ? "d1" : "sqlite"), "utf8");
|
|
212
223
|
result.created.push("metaobjects.config.ts");
|
|
213
224
|
}
|
|
214
225
|
|
|
215
226
|
return result;
|
|
216
227
|
}
|
|
217
228
|
|
|
229
|
+
function buildD1MigrateBlock(cwd: string): Record<string, unknown> {
|
|
230
|
+
const block: Record<string, unknown> = { dialect: "d1" };
|
|
231
|
+
const cfgPath = findWranglerConfig(cwd);
|
|
232
|
+
if (cfgPath !== undefined) {
|
|
233
|
+
try {
|
|
234
|
+
const parsed = parseWranglerConfig(cfgPath);
|
|
235
|
+
if (parsed.d1Bindings.length === 1) {
|
|
236
|
+
block.d1 = { binding: parsed.d1Bindings[0]!.binding };
|
|
237
|
+
}
|
|
238
|
+
// Multi-binding case: omit d1 entirely. User picks the binding later with
|
|
239
|
+
// `meta migrate --d1 <name>` (which prompts with the available names).
|
|
240
|
+
} catch {
|
|
241
|
+
// Parse failed; leave d1 sub-block absent.
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return block;
|
|
245
|
+
}
|
|
246
|
+
|
|
218
247
|
export function nextStepsBlock(): string {
|
|
219
248
|
return NEXT_STEPS;
|
|
220
249
|
}
|
|
@@ -253,6 +282,7 @@ export async function initCommand(args: string[], cwd: string): Promise<number>
|
|
|
253
282
|
quiet: flags.quiet,
|
|
254
283
|
printOnly: flags.printOnly,
|
|
255
284
|
refreshDocs: flags.refreshDocs,
|
|
285
|
+
d1: flags.d1,
|
|
256
286
|
});
|
|
257
287
|
|
|
258
288
|
if (flags.printOnly) {
|