@objectstack/cli 7.5.0 → 7.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.
Files changed (39) hide show
  1. package/dist/commands/compile.d.ts.map +1 -1
  2. package/dist/commands/compile.js +22 -0
  3. package/dist/commands/compile.js.map +1 -1
  4. package/dist/commands/dev.d.ts +0 -10
  5. package/dist/commands/dev.d.ts.map +1 -1
  6. package/dist/commands/dev.js +30 -77
  7. package/dist/commands/dev.js.map +1 -1
  8. package/dist/commands/plugin/build.d.ts +15 -0
  9. package/dist/commands/plugin/build.d.ts.map +1 -0
  10. package/dist/commands/plugin/build.js +199 -0
  11. package/dist/commands/plugin/build.js.map +1 -0
  12. package/dist/commands/plugin/publish.d.ts +26 -0
  13. package/dist/commands/plugin/publish.d.ts.map +1 -0
  14. package/dist/commands/plugin/publish.js +211 -0
  15. package/dist/commands/plugin/publish.js.map +1 -0
  16. package/dist/commands/plugin/sign.d.ts +15 -0
  17. package/dist/commands/plugin/sign.d.ts.map +1 -0
  18. package/dist/commands/plugin/sign.js +102 -0
  19. package/dist/commands/plugin/sign.js.map +1 -0
  20. package/dist/commands/serve.d.ts.map +1 -1
  21. package/dist/commands/serve.js +175 -23
  22. package/dist/commands/serve.js.map +1 -1
  23. package/dist/utils/format.d.ts +9 -0
  24. package/dist/utils/format.d.ts.map +1 -1
  25. package/dist/utils/format.js +6 -0
  26. package/dist/utils/format.js.map +1 -1
  27. package/dist/utils/osplugin.d.ts +44 -0
  28. package/dist/utils/osplugin.d.ts.map +1 -0
  29. package/dist/utils/osplugin.js +151 -0
  30. package/dist/utils/osplugin.js.map +1 -0
  31. package/dist/utils/validate-expressions.d.ts +13 -0
  32. package/dist/utils/validate-expressions.d.ts.map +1 -0
  33. package/dist/utils/validate-expressions.js +101 -0
  34. package/dist/utils/validate-expressions.js.map +1 -0
  35. package/dist/utils/validate-expressions.test.d.ts +2 -0
  36. package/dist/utils/validate-expressions.test.d.ts.map +1 -0
  37. package/dist/utils/validate-expressions.test.js +65 -0
  38. package/dist/utils/validate-expressions.test.js.map +1 -0
  39. package/package.json +43 -45
@@ -0,0 +1,101 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ /**
3
+ * Build-time expression validation (ADR-0032 §Decision 1a + 1b).
4
+ *
5
+ * Runs at `objectstack compile`, where the whole normalized stack is in hand —
6
+ * so flow conditions can be checked against the *resolved* object schema
7
+ * (field existence) in addition to CEL syntax. Uses the one shared validator
8
+ * from `@objectstack/formula`, so the verdict matches `registerFlow` and the
9
+ * agent `validate_expression` tool exactly.
10
+ *
11
+ * Scope (v1): flow predicates (start/decision `config.condition` + edge
12
+ * `condition`) and object validation-rule / formula predicates. Each error is
13
+ * located (flow/object + node/edge/field) with a corrective message.
14
+ */
15
+ import { validateExpression } from '@objectstack/formula';
16
+ /** Coerce an `objects` collection (array or name-keyed map) to an array. */
17
+ function asArray(v) {
18
+ if (Array.isArray(v))
19
+ return v;
20
+ if (v && typeof v === 'object') {
21
+ return Object.entries(v).map(([name, def]) => ({ name, ...def }));
22
+ }
23
+ return [];
24
+ }
25
+ /** object name → set of its field names, for schema-aware field checks. */
26
+ function buildFieldIndex(objects) {
27
+ const idx = new Map();
28
+ for (const obj of objects) {
29
+ const name = typeof obj.name === 'string' ? obj.name : undefined;
30
+ if (!name)
31
+ continue;
32
+ const fields = obj.fields;
33
+ let names = [];
34
+ if (Array.isArray(fields))
35
+ names = fields.map(f => f.name).filter((n) => typeof n === 'string');
36
+ else if (fields && typeof fields === 'object')
37
+ names = Object.keys(fields);
38
+ idx.set(name, names);
39
+ }
40
+ return idx;
41
+ }
42
+ /**
43
+ * Validate every predicate in the stack. Returns the list of issues (empty =
44
+ * clean). Caller decides how to surface / whether to fail the build.
45
+ */
46
+ export function validateStackExpressions(stack) {
47
+ const issues = [];
48
+ const objects = asArray(stack.objects);
49
+ const fieldIndex = buildFieldIndex(objects);
50
+ const check = (where, raw, objectName) => {
51
+ if (raw == null)
52
+ return;
53
+ const fields = objectName ? fieldIndex.get(objectName) : undefined;
54
+ const res = validateExpression('predicate', raw, objectName ? { objectName, fields } : undefined);
55
+ for (const e of res.errors)
56
+ issues.push({ where, message: e.message, source: e.source });
57
+ };
58
+ // ── Flows ──────────────────────────────────────────────────────────
59
+ for (const flow of asArray(stack.flows)) {
60
+ const flowName = typeof flow.name === 'string' ? flow.name : '(unnamed flow)';
61
+ const nodes = Array.isArray(flow.nodes) ? flow.nodes : [];
62
+ const edges = Array.isArray(flow.edges) ? flow.edges : [];
63
+ // The record-change target object — `record.*` refs resolve against it.
64
+ const startNode = nodes.find(n => n.type === 'start');
65
+ const startCfg = (startNode?.config ?? {});
66
+ const objectName = typeof startCfg.objectName === 'string' ? startCfg.objectName : undefined;
67
+ for (const node of nodes) {
68
+ const cfg = (node.config ?? {});
69
+ check(`flow '${flowName}' · node '${node.id}' (${node.type}) condition`, cfg.condition, objectName);
70
+ }
71
+ for (const edge of edges) {
72
+ check(`flow '${flowName}' · edge '${edge.id}' (${edge.source}→${edge.target}) condition`, edge.condition, objectName);
73
+ }
74
+ }
75
+ // ── Object validation-rule + formula predicates ────────────────────
76
+ for (const obj of objects) {
77
+ const objectName = typeof obj.name === 'string' ? obj.name : undefined;
78
+ const validations = obj.validations ?? obj.validationRules;
79
+ for (const rule of asArray(validations)) {
80
+ const where = `object '${objectName}' · validation '${rule.name ?? '?'}'`;
81
+ // Common predicate keys across rule shapes.
82
+ check(where, rule.expression ?? rule.predicate ?? rule.condition ?? rule.formula, objectName);
83
+ }
84
+ // Field-level formulas (computed fields) reference the same object.
85
+ const fields = obj.fields;
86
+ const fieldList = Array.isArray(fields)
87
+ ? fields
88
+ : (fields && typeof fields === 'object' ? Object.values(fields) : []);
89
+ for (const f of fieldList) {
90
+ if (f && typeof f === 'object' && f.formula) {
91
+ // formulas are `value` role (any return type), still CEL.
92
+ const res = validateExpression('value', f.formula, objectName ? { objectName, fields: fieldIndex.get(objectName) } : undefined);
93
+ for (const e of res.errors) {
94
+ issues.push({ where: `object '${objectName}' · field '${f.name ?? '?'}' formula`, message: e.message, source: e.source });
95
+ }
96
+ }
97
+ }
98
+ }
99
+ return issues;
100
+ }
101
+ //# sourceMappingURL=validate-expressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-expressions.js","sourceRoot":"","sources":["../../src/utils/validate-expressions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validate-expressions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-expressions.test.d.ts","sourceRoot":"","sources":["../../src/utils/validate-expressions.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { validateStackExpressions } from './validate-expressions.js';
3
+ describe('validateStackExpressions (ADR-0032 build-time)', () => {
4
+ const objects = [
5
+ { name: 'crm_lead', fields: { rating: { type: 'number' }, status: { type: 'text' } } },
6
+ ];
7
+ it('passes a clean stack', () => {
8
+ const issues = validateStackExpressions({
9
+ objects,
10
+ flows: [{
11
+ name: 'lead_flow',
12
+ nodes: [
13
+ { id: 'start', type: 'start', config: { objectName: 'crm_lead' } },
14
+ { id: 'check', type: 'decision', config: { condition: 'record.rating >= 4' } },
15
+ ],
16
+ edges: [{ id: 'e1', source: 'check', target: 'end', condition: 'record.rating < 4' }],
17
+ }],
18
+ });
19
+ expect(issues).toHaveLength(0);
20
+ });
21
+ it('flags a brace-in-CEL condition with location + corrective message', () => {
22
+ const issues = validateStackExpressions({
23
+ objects,
24
+ flows: [{
25
+ name: 'lead_flow',
26
+ nodes: [
27
+ { id: 'start', type: 'start', config: { objectName: 'crm_lead' } },
28
+ { id: 'check', type: 'decision', config: { condition: '{record.rating} >= 4' } },
29
+ ],
30
+ edges: [],
31
+ }],
32
+ });
33
+ expect(issues).toHaveLength(1);
34
+ expect(issues[0].where).toContain("flow 'lead_flow'");
35
+ expect(issues[0].where).toContain("node 'check'");
36
+ expect(issues[0].message).toMatch(/map literal|bare reference/);
37
+ expect(issues[0].source).toBe('{record.rating} >= 4');
38
+ });
39
+ it('flags an unknown record field against the resolved schema (did-you-mean)', () => {
40
+ const issues = validateStackExpressions({
41
+ objects,
42
+ flows: [{
43
+ name: 'lead_flow',
44
+ nodes: [
45
+ { id: 'start', type: 'start', config: { objectName: 'crm_lead' } },
46
+ { id: 'check', type: 'decision', config: { condition: 'record.raitng >= 4' } },
47
+ ],
48
+ edges: [],
49
+ }],
50
+ });
51
+ expect(issues).toHaveLength(1);
52
+ expect(issues[0].message).toMatch(/unknown field `raitng`/);
53
+ expect(issues[0].message).toMatch(/did you mean `rating`/);
54
+ });
55
+ it('validates object validation-rule predicates too', () => {
56
+ const issues = validateStackExpressions({
57
+ objects: [
58
+ { name: 'crm_lead', fields: { rating: {} }, validations: [{ name: 'r1', expression: '{record.rating} > 0' }] },
59
+ ],
60
+ });
61
+ expect(issues).toHaveLength(1);
62
+ expect(issues[0].where).toContain("validation 'r1'");
63
+ });
64
+ });
65
+ //# sourceMappingURL=validate-expressions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-expressions.test.js","sourceRoot":"","sources":["../../src/utils/validate-expressions.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectstack/cli",
3
- "version": "7.5.0",
3
+ "version": "7.6.0",
4
4
  "description": "Command Line Interface for ObjectStack Protocol",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -44,50 +44,48 @@
44
44
  "tsx": "^4.22.4",
45
45
  "yaml": "^2.9.0",
46
46
  "zod": "^4.4.3",
47
- "@objectstack/account": "7.5.0",
48
- "@objectstack/client": "7.5.0",
49
- "@objectstack/console": "7.5.0",
50
- "@objectstack/core": "7.5.0",
51
- "@objectstack/driver-memory": "^7.5.0",
52
- "@objectstack/driver-mongodb": "^7.5.0",
53
- "@objectstack/driver-sql": "^7.5.0",
54
- "@objectstack/driver-sqlite-wasm": "^7.5.0",
55
- "@objectstack/objectql": "^7.5.0",
56
- "@objectstack/observability": "^7.5.0",
57
- "@objectstack/platform-objects": "7.5.0",
58
- "@objectstack/plugin-approvals": "7.5.0",
59
- "@objectstack/plugin-audit": "7.5.0",
60
- "@objectstack/plugin-auth": "7.5.0",
61
- "@objectstack/plugin-email": "7.5.0",
62
- "@objectstack/plugin-hono-server": "7.5.0",
63
- "@objectstack/plugin-mcp-server": "7.5.0",
64
- "@objectstack/plugin-org-scoping": "7.5.0",
65
- "@objectstack/plugin-reports": "7.5.0",
66
- "@objectstack/plugin-security": "7.5.0",
67
- "@objectstack/plugin-sharing": "7.5.0",
68
- "@objectstack/plugin-trigger-record-change": "7.5.0",
69
- "@objectstack/plugin-trigger-schedule": "7.5.0",
70
- "@objectstack/plugin-webhooks": "7.5.0",
71
- "@objectstack/rest": "7.5.0",
72
- "@objectstack/runtime": "^7.5.0",
73
- "@objectstack/service-ai": "7.5.0",
74
- "@objectstack/service-analytics": "7.5.0",
75
- "@objectstack/service-automation": "7.5.0",
76
- "@objectstack/service-cache": "7.5.0",
77
- "@objectstack/service-external-datasource": "7.5.0",
78
- "@objectstack/service-feed": "7.5.0",
79
- "@objectstack/service-job": "7.5.0",
80
- "@objectstack/service-messaging": "7.5.0",
81
- "@objectstack/service-package": "7.5.0",
82
- "@objectstack/service-queue": "7.5.0",
83
- "@objectstack/service-realtime": "7.5.0",
84
- "@objectstack/service-settings": "7.5.0",
85
- "@objectstack/service-storage": "7.5.0",
86
- "@objectstack/spec": "7.5.0",
87
- "@objectstack/types": "7.5.0"
88
- },
89
- "peerDependencies": {
90
- "@objectstack/core": "^7.5.0"
47
+ "@objectstack/account": "7.6.0",
48
+ "@objectstack/client": "7.6.0",
49
+ "@objectstack/console": "7.6.0",
50
+ "@objectstack/core": "^7.6.0",
51
+ "@objectstack/driver-memory": "^7.6.0",
52
+ "@objectstack/driver-mongodb": "^7.6.0",
53
+ "@objectstack/driver-sql": "^7.6.0",
54
+ "@objectstack/driver-sqlite-wasm": "^7.6.0",
55
+ "@objectstack/formula": "7.6.0",
56
+ "@objectstack/objectql": "^7.6.0",
57
+ "@objectstack/observability": "^7.6.0",
58
+ "@objectstack/platform-objects": "7.6.0",
59
+ "@objectstack/plugin-approvals": "7.6.0",
60
+ "@objectstack/plugin-audit": "7.6.0",
61
+ "@objectstack/plugin-auth": "7.6.0",
62
+ "@objectstack/plugin-email": "7.6.0",
63
+ "@objectstack/plugin-hono-server": "7.6.0",
64
+ "@objectstack/plugin-mcp-server": "7.6.0",
65
+ "@objectstack/plugin-org-scoping": "7.6.0",
66
+ "@objectstack/plugin-reports": "7.6.0",
67
+ "@objectstack/plugin-security": "7.6.0",
68
+ "@objectstack/plugin-sharing": "7.6.0",
69
+ "@objectstack/plugin-trigger-record-change": "7.6.0",
70
+ "@objectstack/plugin-trigger-schedule": "7.6.0",
71
+ "@objectstack/plugin-webhooks": "7.6.0",
72
+ "@objectstack/rest": "7.6.0",
73
+ "@objectstack/runtime": "^7.6.0",
74
+ "@objectstack/service-ai": "7.6.0",
75
+ "@objectstack/service-analytics": "7.6.0",
76
+ "@objectstack/service-automation": "7.6.0",
77
+ "@objectstack/service-cache": "7.6.0",
78
+ "@objectstack/service-datasource": "7.6.0",
79
+ "@objectstack/service-feed": "7.6.0",
80
+ "@objectstack/service-job": "7.6.0",
81
+ "@objectstack/service-messaging": "7.6.0",
82
+ "@objectstack/service-package": "7.6.0",
83
+ "@objectstack/service-queue": "7.6.0",
84
+ "@objectstack/service-realtime": "7.6.0",
85
+ "@objectstack/service-settings": "7.6.0",
86
+ "@objectstack/service-storage": "7.6.0",
87
+ "@objectstack/spec": "7.6.0",
88
+ "@objectstack/types": "7.6.0"
91
89
  },
92
90
  "devDependencies": {
93
91
  "@oclif/plugin-help": "^6.2.50",