@metaobjectsdev/cli 0.6.0-rc.1 → 0.7.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/verify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/verify.ts"],"names":[],"mappings":"AAmCA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoGhF"}
|
|
@@ -12,7 +12,7 @@ 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 { 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";
|
|
15
|
+
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";
|
|
16
16
|
import { verify, ERR_REQUIRED_SLOT_UNUSED, ERR_PARTIAL_UNRESOLVED } from "@metaobjectsdev/render";
|
|
17
17
|
const DEFAULT_PROMPTS_DIR = "prompts";
|
|
18
18
|
/** Coerce a string-array attr (array, or a single string) into a string[]. */
|
|
@@ -61,26 +61,48 @@ export async function verifyCommand(args, cwd) {
|
|
|
61
61
|
// Absent/typeless required attrs are a loader-schema concern, not verify's.
|
|
62
62
|
if (typeof textRef !== "string" || typeof payloadRef !== "string")
|
|
63
63
|
continue;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
// Both subtypes verify that @payloadRef resolves to a loaded object.value.
|
|
65
|
+
// The render-engine `verify()` would also throw on missing refs, but the
|
|
66
|
+
// output branch doesn't call it — explicit check keeps the error symmetric.
|
|
67
|
+
const fieldTree = derivePayloadFieldTree(root, payloadRef);
|
|
68
|
+
if (fieldTree.length === 0) {
|
|
69
|
+
log.error(`[${tmpl.name}] (${tmpl.subType}) ${ERR_PARTIAL_UNRESOLVED}: ` +
|
|
70
|
+
`@payloadRef "${payloadRef}" did not resolve to a loaded object.value`);
|
|
67
71
|
errorCount++;
|
|
68
72
|
continue;
|
|
69
73
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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}`);
|
|
74
|
+
if (tmpl.subType === TEMPLATE_SUBTYPE_PROMPT) {
|
|
75
|
+
// Render-engine drift check: template variables ↔ payload field names.
|
|
76
|
+
const text = provider.resolve(textRef);
|
|
77
|
+
if (text === undefined) {
|
|
78
|
+
log.error(`[${tmpl.name}] (prompt) ${ERR_PARTIAL_UNRESOLVED}: @textRef "${textRef}" did not resolve under ${promptsDir}`);
|
|
82
79
|
errorCount++;
|
|
80
|
+
continue;
|
|
83
81
|
}
|
|
82
|
+
const requiredSlots = attrAsStringArray(tmpl.ownAttr(TEMPLATE_ATTR_REQUIRED_SLOTS));
|
|
83
|
+
const requiredTags = attrAsStringArray(tmpl.ownAttr(TEMPLATE_ATTR_REQUIRED_TAGS));
|
|
84
|
+
const drift = verify(text, fieldTree, { provider, requiredSlots, requiredTags });
|
|
85
|
+
checked++;
|
|
86
|
+
for (const e of drift) {
|
|
87
|
+
if (e.code === ERR_REQUIRED_SLOT_UNUSED) {
|
|
88
|
+
log.warn(`[${tmpl.name}] (prompt) ${e.code}: ${e.path}`);
|
|
89
|
+
warnCount++;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
log.error(`[${tmpl.name}] (prompt) ${e.code}: ${e.path}`);
|
|
93
|
+
errorCount++;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (tmpl.subType === TEMPLATE_SUBTYPE_OUTPUT) {
|
|
98
|
+
// Output drift check: re-derive the payload field tree (already done above);
|
|
99
|
+
// if it resolved, the parser codegen can produce a schema. Field-type
|
|
100
|
+
// unsupported-by-Zod issues are caught by the codegen itself if/when
|
|
101
|
+
// `meta gen` runs; verify confines itself to ref-resolution checks.
|
|
102
|
+
checked++;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// Unknown subtype — ignore (loader-schema concern).
|
|
84
106
|
}
|
|
85
107
|
}
|
|
86
108
|
if (errorCount > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/verify.ts"],"names":[],"mappings":"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
|
|
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,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,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,CAAC;QACnC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACrF,GAAG,CAAC,KAAK,CAAC,4BAA4B,GAAG,+BAA+B,CAAC,CAAC;YAC1E,OAAO,CAAC,CAAC;QACX,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;IAE9C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IAC7E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACvE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC3D,4EAA4E;QAC5E,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ;YAAE,SAAS;QAE5E,2EAA2E;QAC3E,yEAAyE;QACzE,4EAA4E;QAC5E,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,KAAK,CACP,IAAI,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,KAAK,sBAAsB,IAAI;gBAC5D,gBAAgB,UAAU,4CAA4C,CACzE,CAAC;YACF,UAAU,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,uBAAuB,EAAE,CAAC;YAC7C,uEAAuE;YACvE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,GAAG,CAAC,KAAK,CACP,IAAI,IAAI,CAAC,IAAI,cAAc,sBAAsB,eAAe,OAAO,2BAA2B,UAAU,EAAE,CAC/G,CAAC;gBACF,UAAU,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACpF,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAElF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;YACjF,OAAO,EAAE,CAAC;YACV,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;oBACxC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACzD,SAAS,EAAE,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC1D,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,KAAK,uBAAuB,EAAE,CAAC;YACpD,6EAA6E;YAC7E,sEAAsE;YACtE,qEAAqE;YACrE,oEAAoE;YACpE,OAAO,EAAE,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,oDAAoD;QACtD,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,GAAG,CAAC,KAAK,CACP,iBAAiB,UAAU,0BAA0B,SAAS,CAAC,MAAM,eAAe,CACrF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,GAAG,CAAC,IAAI,CACN,iBAAiB,OAAO,qBAAqB,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,CAClG,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metaobjectsdev/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0-rc.1",
|
|
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,13 +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/render": "0.
|
|
42
|
-
"@metaobjectsdev/codegen-ts": "0.
|
|
43
|
-
"@metaobjectsdev/codegen-ts-react": "0.
|
|
44
|
-
"@metaobjectsdev/codegen-ts-tanstack": "0.
|
|
45
|
-
"@metaobjectsdev/migrate-ts": "0.
|
|
39
|
+
"@metaobjectsdev/sdk": "0.7.0-rc.1",
|
|
40
|
+
"@metaobjectsdev/metadata": "0.7.0-rc.1",
|
|
41
|
+
"@metaobjectsdev/render": "0.7.0-rc.1",
|
|
42
|
+
"@metaobjectsdev/codegen-ts": "0.7.0-rc.1",
|
|
43
|
+
"@metaobjectsdev/codegen-ts-react": "0.7.0-rc.1",
|
|
44
|
+
"@metaobjectsdev/codegen-ts-tanstack": "0.7.0-rc.1",
|
|
45
|
+
"@metaobjectsdev/migrate-ts": "0.7.0-rc.1",
|
|
46
46
|
"jiti": "^2.4.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
package/src/commands/verify.ts
CHANGED
|
@@ -15,6 +15,8 @@ import { derivePayloadFieldTree } from "../lib/payload-field-tree.js";
|
|
|
15
15
|
import { loadMemory } from "@metaobjectsdev/sdk";
|
|
16
16
|
import {
|
|
17
17
|
TYPE_TEMPLATE,
|
|
18
|
+
TEMPLATE_SUBTYPE_PROMPT,
|
|
19
|
+
TEMPLATE_SUBTYPE_OUTPUT,
|
|
18
20
|
TEMPLATE_ATTR_PAYLOAD_REF,
|
|
19
21
|
TEMPLATE_ATTR_TEXT_REF,
|
|
20
22
|
TEMPLATE_ATTR_REQUIRED_SLOTS,
|
|
@@ -72,29 +74,52 @@ export async function verifyCommand(args: string[], cwd: string): Promise<number
|
|
|
72
74
|
// Absent/typeless required attrs are a loader-schema concern, not verify's.
|
|
73
75
|
if (typeof textRef !== "string" || typeof payloadRef !== "string") continue;
|
|
74
76
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
// Both subtypes verify that @payloadRef resolves to a loaded object.value.
|
|
78
|
+
// The render-engine `verify()` would also throw on missing refs, but the
|
|
79
|
+
// output branch doesn't call it — explicit check keeps the error symmetric.
|
|
80
|
+
const fieldTree = derivePayloadFieldTree(root, payloadRef);
|
|
81
|
+
if (fieldTree.length === 0) {
|
|
77
82
|
log.error(
|
|
78
|
-
`[${tmpl.name}] ${
|
|
83
|
+
`[${tmpl.name}] (${tmpl.subType}) ${ERR_PARTIAL_UNRESOLVED}: ` +
|
|
84
|
+
`@payloadRef "${payloadRef}" did not resolve to a loaded object.value`,
|
|
79
85
|
);
|
|
80
86
|
errorCount++;
|
|
81
87
|
continue;
|
|
82
88
|
}
|
|
83
89
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (e.code === ERR_REQUIRED_SLOT_UNUSED) {
|
|
92
|
-
log.warn(`[${tmpl.name}] ${e.code}: ${e.path}`);
|
|
93
|
-
warnCount++;
|
|
94
|
-
} else {
|
|
95
|
-
log.error(`[${tmpl.name}] ${e.code}: ${e.path}`);
|
|
90
|
+
if (tmpl.subType === TEMPLATE_SUBTYPE_PROMPT) {
|
|
91
|
+
// Render-engine drift check: template variables ↔ payload field names.
|
|
92
|
+
const text = provider.resolve(textRef);
|
|
93
|
+
if (text === undefined) {
|
|
94
|
+
log.error(
|
|
95
|
+
`[${tmpl.name}] (prompt) ${ERR_PARTIAL_UNRESOLVED}: @textRef "${textRef}" did not resolve under ${promptsDir}`,
|
|
96
|
+
);
|
|
96
97
|
errorCount++;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const requiredSlots = attrAsStringArray(tmpl.ownAttr(TEMPLATE_ATTR_REQUIRED_SLOTS));
|
|
102
|
+
const requiredTags = attrAsStringArray(tmpl.ownAttr(TEMPLATE_ATTR_REQUIRED_TAGS));
|
|
103
|
+
|
|
104
|
+
const drift = verify(text, fieldTree, { provider, requiredSlots, requiredTags });
|
|
105
|
+
checked++;
|
|
106
|
+
for (const e of drift) {
|
|
107
|
+
if (e.code === ERR_REQUIRED_SLOT_UNUSED) {
|
|
108
|
+
log.warn(`[${tmpl.name}] (prompt) ${e.code}: ${e.path}`);
|
|
109
|
+
warnCount++;
|
|
110
|
+
} else {
|
|
111
|
+
log.error(`[${tmpl.name}] (prompt) ${e.code}: ${e.path}`);
|
|
112
|
+
errorCount++;
|
|
113
|
+
}
|
|
97
114
|
}
|
|
115
|
+
} else if (tmpl.subType === TEMPLATE_SUBTYPE_OUTPUT) {
|
|
116
|
+
// Output drift check: re-derive the payload field tree (already done above);
|
|
117
|
+
// if it resolved, the parser codegen can produce a schema. Field-type
|
|
118
|
+
// unsupported-by-Zod issues are caught by the codegen itself if/when
|
|
119
|
+
// `meta gen` runs; verify confines itself to ref-resolution checks.
|
|
120
|
+
checked++;
|
|
121
|
+
} else {
|
|
122
|
+
// Unknown subtype — ignore (loader-schema concern).
|
|
98
123
|
}
|
|
99
124
|
}
|
|
100
125
|
|