@objectstack/cli 10.0.0 → 10.3.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 (66) hide show
  1. package/dist/commands/compile.d.ts.map +1 -1
  2. package/dist/commands/compile.js +34 -2
  3. package/dist/commands/compile.js.map +1 -1
  4. package/dist/commands/doctor.js +1 -1
  5. package/dist/commands/doctor.js.map +1 -1
  6. package/dist/commands/lint.js +1 -1
  7. package/dist/commands/lint.js.map +1 -1
  8. package/dist/commands/migrate/apply.d.ts +19 -0
  9. package/dist/commands/migrate/apply.d.ts.map +1 -0
  10. package/dist/commands/migrate/apply.js +155 -0
  11. package/dist/commands/migrate/apply.js.map +1 -0
  12. package/dist/commands/migrate/index.d.ts +9 -0
  13. package/dist/commands/migrate/index.d.ts.map +1 -0
  14. package/dist/commands/migrate/index.js +10 -0
  15. package/dist/commands/migrate/index.js.map +1 -0
  16. package/dist/commands/migrate/plan.d.ts +16 -0
  17. package/dist/commands/migrate/plan.d.ts.map +1 -0
  18. package/dist/commands/migrate/plan.js +93 -0
  19. package/dist/commands/migrate/plan.js.map +1 -0
  20. package/dist/commands/package/publish.js +4 -4
  21. package/dist/commands/serve.d.ts.map +1 -1
  22. package/dist/commands/serve.js +74 -98
  23. package/dist/commands/serve.js.map +1 -1
  24. package/dist/commands/start.d.ts.map +1 -1
  25. package/dist/commands/start.js +10 -0
  26. package/dist/commands/start.js.map +1 -1
  27. package/dist/commands/validate.d.ts.map +1 -1
  28. package/dist/commands/validate.js +70 -3
  29. package/dist/commands/validate.js.map +1 -1
  30. package/dist/index.d.ts +3 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +4 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/utils/schema-migrate.d.ts +26 -0
  35. package/dist/utils/schema-migrate.d.ts.map +1 -0
  36. package/dist/utils/schema-migrate.integration.test.d.ts +2 -0
  37. package/dist/utils/schema-migrate.integration.test.d.ts.map +1 -0
  38. package/dist/utils/schema-migrate.integration.test.js +83 -0
  39. package/dist/utils/schema-migrate.integration.test.js.map +1 -0
  40. package/dist/utils/schema-migrate.js +123 -0
  41. package/dist/utils/schema-migrate.js.map +1 -0
  42. package/package.json +48 -47
  43. package/dist/commands/publish.d.ts +0 -17
  44. package/dist/commands/publish.d.ts.map +0 -1
  45. package/dist/commands/publish.js +0 -135
  46. package/dist/commands/publish.js.map +0 -1
  47. package/dist/commands/rollback.d.ts +0 -13
  48. package/dist/commands/rollback.d.ts.map +0 -1
  49. package/dist/commands/rollback.js +0 -77
  50. package/dist/commands/rollback.js.map +0 -1
  51. package/dist/utils/validate-expressions.d.ts +0 -19
  52. package/dist/utils/validate-expressions.d.ts.map +0 -1
  53. package/dist/utils/validate-expressions.js +0 -201
  54. package/dist/utils/validate-expressions.js.map +0 -1
  55. package/dist/utils/validate-expressions.test.d.ts +0 -2
  56. package/dist/utils/validate-expressions.test.d.ts.map +0 -1
  57. package/dist/utils/validate-expressions.test.js +0 -320
  58. package/dist/utils/validate-expressions.test.js.map +0 -1
  59. package/dist/utils/validate-widget-bindings.d.ts +0 -74
  60. package/dist/utils/validate-widget-bindings.d.ts.map +0 -1
  61. package/dist/utils/validate-widget-bindings.js +0 -304
  62. package/dist/utils/validate-widget-bindings.js.map +0 -1
  63. package/dist/utils/validate-widget-bindings.test.d.ts +0 -2
  64. package/dist/utils/validate-widget-bindings.test.d.ts.map +0 -1
  65. package/dist/utils/validate-widget-bindings.test.js +0 -285
  66. package/dist/utils/validate-widget-bindings.test.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-migrate.integration.test.d.ts","sourceRoot":"","sources":["../../src/utils/schema-migrate.integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
3
+ import { mkdtempSync, writeFileSync, mkdirSync, rmSync } from 'node:fs';
4
+ import { tmpdir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { SqlDriver } from '@objectstack/driver-sql';
7
+ import { bootSchemaStack } from './schema-migrate.js';
8
+ /**
9
+ * End-to-end (#2186): boot the real standalone stack via `bootSchemaStack`
10
+ * against a pre-seeded "legacy" SQLite DB (organization_id created NOT NULL),
11
+ * then verify `os migrate`'s engine detects the drift and reconciles it —
12
+ * exercising the full createStandaloneStack → AppPlugin → ObjectQL → driver path.
13
+ */
14
+ describe('bootSchemaStack + migrate engine (integration)', () => {
15
+ let dir;
16
+ let dbFile;
17
+ const savedEnv = {};
18
+ beforeAll(async () => {
19
+ dir = mkdtempSync(join(tmpdir(), 'os-mig-'));
20
+ mkdirSync(join(dir, 'dist'), { recursive: true });
21
+ mkdirSync(join(dir, 'data'), { recursive: true });
22
+ dbFile = join(dir, 'data', 'app.db');
23
+ // Compiled-artifact stand-in: id at top level so AppPlugin registers it.
24
+ writeFileSync(join(dir, 'dist', 'objectstack.json'), JSON.stringify({
25
+ id: 'mig_smoke',
26
+ name: 'Migrate Smoke',
27
+ objects: [
28
+ {
29
+ name: 'mig_biz_unit',
30
+ fields: {
31
+ name: { type: 'text', required: true },
32
+ organization_id: { type: 'text', required: false }, // optional now
33
+ },
34
+ },
35
+ ],
36
+ }));
37
+ // Seed a "legacy" DB where organization_id is NOT NULL (the #2178 shape).
38
+ const seed = new SqlDriver({ client: 'better-sqlite3', connection: { filename: dbFile }, useNullAsDefault: true });
39
+ const k = seed.knex;
40
+ await k.schema.createTable('mig_biz_unit', (t) => {
41
+ t.string('id').primary();
42
+ t.timestamp('created_at');
43
+ t.timestamp('updated_at');
44
+ t.string('name').notNullable();
45
+ t.string('organization_id').notNullable();
46
+ });
47
+ await k('mig_biz_unit').insert({ id: '1', name: 'Acme', organization_id: 'org1' });
48
+ await k.destroy();
49
+ savedEnv.OS_ARTIFACT_PATH = process.env.OS_ARTIFACT_PATH;
50
+ savedEnv.NODE_ENV = process.env.NODE_ENV;
51
+ process.env.OS_ARTIFACT_PATH = join(dir, 'dist', 'objectstack.json');
52
+ process.env.NODE_ENV = 'production'; // ensure no auto-reconcile masks the drift
53
+ });
54
+ afterAll(() => {
55
+ process.env.OS_ARTIFACT_PATH = savedEnv.OS_ARTIFACT_PATH;
56
+ process.env.NODE_ENV = savedEnv.NODE_ENV;
57
+ try {
58
+ rmSync(dir, { recursive: true, force: true });
59
+ }
60
+ catch { /* ignore */ }
61
+ });
62
+ it('detects the NOT NULL drift, applies it, and self-verifies in-sync', async () => {
63
+ const stack = await bootSchemaStack({ databaseUrl: `file:${dbFile}` });
64
+ try {
65
+ expect(stack.driver).toBeTruthy();
66
+ expect(stack.managedTableCount).toBeGreaterThan(0);
67
+ const drift = await stack.driver.detectManagedDrift();
68
+ const org = drift.find((d) => d.table === 'mig_biz_unit' && d.column === 'organization_id');
69
+ expect(org, 'expected drift on mig_biz_unit.organization_id').toBeDefined();
70
+ expect(org.category).toBe('safe');
71
+ expect(org.op.type).toBe('relax_not_null');
72
+ const { applied, skipped } = await stack.driver.applyMigrationEntries(drift, { allowDestructive: false });
73
+ expect(applied.some((d) => d.op.type === 'relax_not_null')).toBe(true);
74
+ expect(skipped).toHaveLength(0);
75
+ const after = await stack.driver.detectManagedDrift();
76
+ expect(after.find((d) => d.table === 'mig_biz_unit' && d.column === 'organization_id')).toBeUndefined();
77
+ }
78
+ finally {
79
+ await stack.shutdown();
80
+ }
81
+ }, 30_000);
82
+ });
83
+ //# sourceMappingURL=schema-migrate.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-migrate.integration.test.js","sourceRoot":"","sources":["../../src/utils/schema-migrate.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ /**
3
+ * Shared boot + rendering for `os migrate` (issue #2186).
4
+ *
5
+ * Boots the data stack (driver + ObjectQL + the compiled artifact's objects)
6
+ * via the supported `createStandaloneStack` programmatic entry, runs schema
7
+ * sync, and hands back the live SQL driver so the command can call
8
+ * `detectManagedDrift()` / `applyMigrationEntries()`.
9
+ *
10
+ * Migration only sees the objects present in the loaded metadata (compiled
11
+ * artifact). Run `os build` first so your objects are visible; tables/columns
12
+ * not in the loaded metadata are never examined or altered.
13
+ */
14
+ import chalk from 'chalk';
15
+ const SQL_DRIVER_SERVICES = [
16
+ 'driver.com.objectstack.driver.sql',
17
+ 'driver.com.objectstack.driver.turso',
18
+ 'driver.sql',
19
+ ];
20
+ function findSqlDriver(kernel) {
21
+ for (const name of SQL_DRIVER_SERVICES) {
22
+ let d;
23
+ try {
24
+ d = kernel?.getService?.(name);
25
+ }
26
+ catch { /* not registered */ }
27
+ if (d && typeof d.detectManagedDrift === 'function' && typeof d.applyMigrationEntries === 'function') {
28
+ return d;
29
+ }
30
+ }
31
+ return null;
32
+ }
33
+ function describeDb(driver) {
34
+ const cfg = driver?.config;
35
+ if (!cfg)
36
+ return 'unknown';
37
+ const conn = cfg.connection;
38
+ if (typeof conn === 'string')
39
+ return redactUrl(conn);
40
+ if (conn && typeof conn === 'object') {
41
+ if (conn.filename)
42
+ return `sqlite:${conn.filename}`;
43
+ if (conn.host)
44
+ return `${cfg.client}://${conn.host}${conn.database ? '/' + conn.database : ''}`;
45
+ }
46
+ return String(cfg.client ?? 'unknown');
47
+ }
48
+ function redactUrl(url) {
49
+ try {
50
+ const u = new URL(url);
51
+ if (u.password)
52
+ u.password = '***';
53
+ return u.toString();
54
+ }
55
+ catch {
56
+ return url.replace(/:\/\/[^@]*@/, '://***@');
57
+ }
58
+ }
59
+ /** Boot the schema stack. Caller MUST call `shutdown()` when done. */
60
+ export async function bootSchemaStack(opts = {}) {
61
+ const { createStandaloneStack, Runtime } = await import('@objectstack/runtime');
62
+ const stack = await createStandaloneStack({
63
+ projectRoot: process.cwd(),
64
+ ...(opts.databaseUrl ? { databaseUrl: opts.databaseUrl } : {}),
65
+ });
66
+ // No HTTP, no cluster — this is a one-shot schema operation.
67
+ const runtime = new Runtime({ cluster: false });
68
+ const kernel = runtime.getKernel();
69
+ for (const plugin of stack.plugins) {
70
+ await kernel.use(plugin);
71
+ }
72
+ await runtime.start();
73
+ const driver = findSqlDriver(kernel);
74
+ const managedTableCount = driver ? driver.managedObjectFields?.size ?? 0 : 0;
75
+ return {
76
+ driver,
77
+ dbLabel: describeDb(driver),
78
+ managedTableCount,
79
+ shutdown: async () => {
80
+ try {
81
+ await runtime.stop?.();
82
+ }
83
+ catch { /* ignore */ }
84
+ try {
85
+ await driver?.disconnect?.();
86
+ }
87
+ catch { /* ignore */ }
88
+ },
89
+ };
90
+ }
91
+ // ── Rendering ───────────────────────────────────────────────────────
92
+ const CATEGORY_ORDER = ['safe', 'needs_confirm', 'destructive'];
93
+ const CATEGORY_META = {
94
+ safe: { label: 'Safe (loosening — applied without --allow-destructive)', color: chalk.green, icon: '✓' },
95
+ needs_confirm: { label: 'Needs confirmation', color: chalk.yellow, icon: '~' },
96
+ destructive: { label: 'Destructive (requires --allow-destructive)', color: chalk.red, icon: '✗' },
97
+ };
98
+ export function groupByCategory(drift) {
99
+ const out = { safe: [], needs_confirm: [], destructive: [] };
100
+ for (const d of drift)
101
+ out[d.category].push(d);
102
+ return out;
103
+ }
104
+ export function renderPlan(drift) {
105
+ const grouped = groupByCategory(drift);
106
+ for (const cat of CATEGORY_ORDER) {
107
+ const items = grouped[cat];
108
+ if (items.length === 0)
109
+ continue;
110
+ const meta = CATEGORY_META[cat];
111
+ console.log(` ${chalk.bold(meta.label)}`);
112
+ for (const d of items) {
113
+ console.log(` ${meta.color(meta.icon)} ${meta.color(`${d.table}.${d.column ?? ''}`)} ${chalk.dim(`[${d.op.type}]`)}`);
114
+ console.log(` ${chalk.dim(d.message)}`);
115
+ }
116
+ console.log('');
117
+ }
118
+ }
119
+ export function summarize(drift) {
120
+ const g = groupByCategory(drift);
121
+ return `${drift.length} change(s): ${g.safe.length} safe, ${g.needs_confirm.length} needs-confirm, ${g.destructive.length} destructive`;
122
+ }
123
+ //# sourceMappingURL=schema-migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-migrate.js","sourceRoot":"","sources":["../../src/utils/schema-migrate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectstack/cli",
3
- "version": "10.0.0",
3
+ "version": "10.3.0",
4
4
  "description": "Command Line Interface for ObjectStack Protocol",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -47,52 +47,53 @@
47
47
  "tsx": "^4.22.4",
48
48
  "yaml": "^2.9.0",
49
49
  "zod": "^4.4.3",
50
- "@objectstack/account": "10.0.0",
51
- "@objectstack/client": "10.0.0",
52
- "@objectstack/cloud-connection": "10.0.0",
53
- "@objectstack/console": "10.0.0",
54
- "@objectstack/core": "^10.0.0",
55
- "@objectstack/driver-memory": "^10.0.0",
56
- "@objectstack/driver-mongodb": "^10.0.0",
57
- "@objectstack/driver-sql": "^10.0.0",
58
- "@objectstack/driver-sqlite-wasm": "^10.0.0",
59
- "@objectstack/formula": "10.0.0",
60
- "@objectstack/objectql": "^10.0.0",
61
- "@objectstack/observability": "^10.0.0",
62
- "@objectstack/platform-objects": "10.0.0",
63
- "@objectstack/plugin-approvals": "10.0.0",
64
- "@objectstack/plugin-audit": "10.0.0",
65
- "@objectstack/plugin-auth": "10.0.0",
66
- "@objectstack/plugin-email": "10.0.0",
67
- "@objectstack/setup": "10.0.0",
68
- "@objectstack/studio": "10.0.0",
69
- "@objectstack/plugin-hono-server": "10.0.0",
70
- "@objectstack/mcp": "10.0.0",
71
- "@objectstack/plugin-org-scoping": "10.0.0",
72
- "@objectstack/plugin-reports": "10.0.0",
73
- "@objectstack/plugin-security": "10.0.0",
74
- "@objectstack/plugin-sharing": "10.0.0",
75
- "@objectstack/trigger-record-change": "10.0.0",
76
- "@objectstack/trigger-api": "10.0.0",
77
- "@objectstack/trigger-schedule": "10.0.0",
78
- "@objectstack/plugin-webhooks": "10.0.0",
79
- "@objectstack/rest": "10.0.0",
80
- "@objectstack/runtime": "^10.0.0",
81
- "@objectstack/service-ai": "10.0.0",
82
- "@objectstack/service-analytics": "10.0.0",
83
- "@objectstack/service-automation": "10.0.0",
84
- "@objectstack/service-cache": "10.0.0",
85
- "@objectstack/service-datasource": "10.0.0",
86
- "@objectstack/service-job": "10.0.0",
87
- "@objectstack/service-messaging": "10.0.0",
88
- "@objectstack/service-package": "10.0.0",
89
- "@objectstack/service-queue": "10.0.0",
90
- "@objectstack/service-realtime": "10.0.0",
91
- "@objectstack/service-settings": "10.0.0",
92
- "@objectstack/service-storage": "10.0.0",
93
- "@objectstack/spec": "10.0.0",
94
- "@objectstack/types": "10.0.0",
95
- "@objectstack/verify": "10.0.0"
50
+ "@objectstack/account": "10.3.0",
51
+ "@objectstack/client": "10.3.0",
52
+ "@objectstack/cloud-connection": "10.3.0",
53
+ "@objectstack/console": "10.3.0",
54
+ "@objectstack/core": "^10.3.0",
55
+ "@objectstack/driver-memory": "^10.3.0",
56
+ "@objectstack/driver-mongodb": "^10.3.0",
57
+ "@objectstack/driver-sql": "^10.3.0",
58
+ "@objectstack/driver-sqlite-wasm": "^10.3.0",
59
+ "@objectstack/formula": "10.3.0",
60
+ "@objectstack/lint": "10.3.0",
61
+ "@objectstack/mcp": "10.3.0",
62
+ "@objectstack/objectql": "^10.3.0",
63
+ "@objectstack/observability": "^10.3.0",
64
+ "@objectstack/platform-objects": "10.3.0",
65
+ "@objectstack/plugin-approvals": "10.3.0",
66
+ "@objectstack/plugin-audit": "10.3.0",
67
+ "@objectstack/plugin-auth": "10.3.0",
68
+ "@objectstack/plugin-email": "10.3.0",
69
+ "@objectstack/plugin-hono-server": "10.3.0",
70
+ "@objectstack/plugin-org-scoping": "10.3.0",
71
+ "@objectstack/plugin-reports": "10.3.0",
72
+ "@objectstack/plugin-security": "10.3.0",
73
+ "@objectstack/plugin-sharing": "10.3.0",
74
+ "@objectstack/plugin-webhooks": "10.3.0",
75
+ "@objectstack/rest": "10.3.0",
76
+ "@objectstack/runtime": "^10.3.0",
77
+ "@objectstack/service-ai": "10.3.0",
78
+ "@objectstack/service-analytics": "10.3.0",
79
+ "@objectstack/service-automation": "10.3.0",
80
+ "@objectstack/service-cache": "10.3.0",
81
+ "@objectstack/service-datasource": "10.3.0",
82
+ "@objectstack/service-job": "10.3.0",
83
+ "@objectstack/service-messaging": "10.3.0",
84
+ "@objectstack/service-package": "10.3.0",
85
+ "@objectstack/service-queue": "10.3.0",
86
+ "@objectstack/service-realtime": "10.3.0",
87
+ "@objectstack/service-settings": "10.3.0",
88
+ "@objectstack/service-storage": "10.3.0",
89
+ "@objectstack/setup": "10.3.0",
90
+ "@objectstack/spec": "10.3.0",
91
+ "@objectstack/studio": "10.3.0",
92
+ "@objectstack/trigger-api": "10.3.0",
93
+ "@objectstack/trigger-record-change": "10.3.0",
94
+ "@objectstack/trigger-schedule": "10.3.0",
95
+ "@objectstack/types": "10.3.0",
96
+ "@objectstack/verify": "10.3.0"
96
97
  },
97
98
  "devDependencies": {
98
99
  "@oclif/plugin-help": "^6.2.52",
@@ -1,17 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class Publish extends Command {
3
- static description: string;
4
- static args: {
5
- artifact: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
6
- };
7
- static flags: {
8
- server: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
- environment: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
- token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
- note: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
- branch: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
- };
15
- run(): Promise<void>;
16
- }
17
- //# sourceMappingURL=publish.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,OAAgB,WAAW,SAAsD;IAEjF,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;MAiCnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2F3B"}
@@ -1,135 +0,0 @@
1
- // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
- import { readFile } from 'node:fs/promises';
3
- import { resolve as resolvePath } from 'node:path';
4
- import { Args, Command, Flags } from '@oclif/core';
5
- import { printHeader, printKV, printSuccess, printError, printStep } from '../utils/format.js';
6
- export default class Publish extends Command {
7
- static description = 'Publish a compiled artifact to ObjectStack Cloud';
8
- static args = {
9
- artifact: Args.string({ description: 'Path to compiled artifact (default: dist/objectstack.json)', required: false }),
10
- };
11
- static flags = {
12
- server: Flags.string({
13
- char: 's',
14
- description: 'ObjectStack Cloud control-plane URL',
15
- env: 'OS_CLOUD_URL',
16
- default: 'http://localhost:4000',
17
- }),
18
- environment: Flags.string({
19
- char: 'e',
20
- description: 'Environment ID (required)',
21
- env: 'OS_ENVIRONMENT_ID',
22
- required: true,
23
- }),
24
- token: Flags.string({
25
- char: 't',
26
- description: 'API key for ObjectStack Cloud',
27
- env: 'OS_CLOUD_API_KEY',
28
- }),
29
- timeout: Flags.integer({
30
- description: 'Upload timeout in milliseconds (use a higher value on slow networks; 0 disables timeout)',
31
- env: 'OS_CLOUD_TIMEOUT_MS',
32
- default: 60_000,
33
- }),
34
- note: Flags.string({
35
- char: 'n',
36
- description: 'Optional human-readable note to attach to this revision',
37
- }),
38
- branch: Flags.string({
39
- char: 'b',
40
- description: 'Logical branch this publish belongs to (e.g. main, staging, feature-x). Default: main.',
41
- env: 'OS_PUBLISH_BRANCH',
42
- default: 'main',
43
- }),
44
- };
45
- async run() {
46
- const { args, flags } = await this.parse(Publish);
47
- printHeader('Publish Artifact');
48
- try {
49
- // 1. Locate the compiled artifact
50
- const artifactPath = args.artifact
51
- ? resolvePath(process.cwd(), args.artifact)
52
- : resolvePath(process.cwd(), 'dist/objectstack.json');
53
- printStep(`Loading artifact from ${artifactPath}...`);
54
- let artifactRaw;
55
- try {
56
- artifactRaw = await readFile(artifactPath, 'utf-8');
57
- }
58
- catch (err) {
59
- printError(`Cannot read artifact: ${err.message}. Run \`objectstack build\` first.`);
60
- this.exit(1);
61
- return;
62
- }
63
- const artifact = JSON.parse(artifactRaw);
64
- printSuccess(`Loaded artifact (${(artifactRaw.length / 1024).toFixed(1)} KB)`);
65
- // 2. POST to the control-plane publish endpoint
66
- const qsParams = new URLSearchParams();
67
- if (flags.note)
68
- qsParams.set('note', flags.note);
69
- if (flags.branch)
70
- qsParams.set('branch', flags.branch);
71
- const qs = qsParams.toString();
72
- const serverUrl = `${flags.server}/api/v1/cloud/environments/${flags.environment}/metadata${qs ? `?${qs}` : ''}`;
73
- printStep(`Publishing to ${serverUrl}...`);
74
- const response = await (async () => {
75
- const controller = new AbortController();
76
- const timer = flags.timeout > 0
77
- ? setTimeout(() => controller.abort(), flags.timeout)
78
- : undefined;
79
- try {
80
- return await fetch(serverUrl, {
81
- method: 'POST',
82
- headers: {
83
- 'Content-Type': 'application/json',
84
- ...(flags.token && { Authorization: `Bearer ${flags.token}` }),
85
- },
86
- body: artifactRaw,
87
- signal: controller.signal,
88
- });
89
- }
90
- catch (err) {
91
- if (err?.name === 'AbortError') {
92
- throw new Error(`Upload timed out after ${flags.timeout}ms. Use --timeout <ms> or set OS_CLOUD_TIMEOUT_MS to extend it (0 disables).`);
93
- }
94
- throw err;
95
- }
96
- finally {
97
- if (timer)
98
- clearTimeout(timer);
99
- }
100
- })();
101
- if (!response.ok) {
102
- let errMsg;
103
- try {
104
- const errBody = await response.json();
105
- errMsg = errBody?.error ?? response.statusText;
106
- }
107
- catch {
108
- errMsg = response.statusText;
109
- }
110
- printError(`Publish failed (${response.status}): ${errMsg}`);
111
- this.exit(1);
112
- return;
113
- }
114
- const result = await response.json();
115
- const data = result?.data ?? result;
116
- console.log('');
117
- printSuccess('Artifact published successfully');
118
- printKV(' Environment', flags.environment);
119
- printKV(' Branch', data?.branch ?? flags.branch);
120
- if (data?.commitId)
121
- printKV(' Commit', data.commitId);
122
- const checksumStr = typeof data?.checksum === 'string'
123
- ? data.checksum
124
- : (data?.checksum?.value ?? null);
125
- if (checksumStr)
126
- printKV(' Checksum', String(checksumStr).slice(0, 16));
127
- printKV(' Server', flags.server);
128
- }
129
- catch (error) {
130
- printError(error.message);
131
- this.exit(1);
132
- }
133
- }
134
- }
135
- //# sourceMappingURL=publish.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class Rollback extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- server: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
- environment: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
- commit: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
- token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- };
11
- run(): Promise<void>;
12
- }
13
- //# sourceMappingURL=rollback.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAG7C,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,WAAW,SAAkF;IAE7G,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;;MAuBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
@@ -1,77 +0,0 @@
1
- // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
- import { Command, Flags } from '@oclif/core';
3
- import { printHeader, printKV, printSuccess, printError, printStep } from '../utils/format.js';
4
- export default class Rollback extends Command {
5
- static description = 'Activate a previously published artifact revision (rollback or roll-forward)';
6
- static examples = [
7
- '<%= config.bin %> <%= command.id %> --commit 9ce1bd48dd70',
8
- 'OS_ENVIRONMENT_ID=proj_crm <%= config.bin %> <%= command.id %> --commit abcdef123456',
9
- ];
10
- static flags = {
11
- server: Flags.string({
12
- char: 's',
13
- description: 'ObjectStack Cloud control-plane URL',
14
- env: 'OS_CLOUD_URL',
15
- default: 'http://localhost:4000',
16
- }),
17
- environment: Flags.string({
18
- char: 'e',
19
- description: 'Environment ID (required)',
20
- env: 'OS_ENVIRONMENT_ID',
21
- required: true,
22
- }),
23
- commit: Flags.string({
24
- char: 'c',
25
- description: 'Commit ID (full or 12+ char prefix) of the revision to activate',
26
- required: true,
27
- }),
28
- token: Flags.string({
29
- char: 't',
30
- description: 'API key for ObjectStack Cloud',
31
- env: 'OS_CLOUD_API_KEY',
32
- }),
33
- };
34
- async run() {
35
- const { flags } = await this.parse(Rollback);
36
- printHeader('Rollback / Activate Revision');
37
- try {
38
- const url = `${flags.server}/api/v1/cloud/environments/${flags.environment}/revisions/${flags.commit}/activate`;
39
- printStep(`POST ${url}`);
40
- const response = await fetch(url, {
41
- method: 'POST',
42
- headers: {
43
- 'Content-Type': 'application/json',
44
- ...(flags.token && { Authorization: `Bearer ${flags.token}` }),
45
- },
46
- });
47
- if (!response.ok) {
48
- let errMsg;
49
- try {
50
- const errBody = await response.json();
51
- errMsg = errBody?.error ?? response.statusText;
52
- }
53
- catch {
54
- errMsg = response.statusText;
55
- }
56
- printError(`Activate failed (${response.status}): ${errMsg}`);
57
- this.exit(1);
58
- return;
59
- }
60
- const result = await response.json();
61
- const data = result?.data ?? result;
62
- console.log('');
63
- printSuccess('Revision activated');
64
- printKV(' Environment', flags.environment);
65
- if (data?.commitId)
66
- printKV(' Commit', data.commitId);
67
- if (data?.previousCommitId)
68
- printKV(' Previous', data.previousCommitId);
69
- printKV(' Server', flags.server);
70
- }
71
- catch (error) {
72
- printError(error.message);
73
- this.exit(1);
74
- }
75
- }
76
- }
77
- //# sourceMappingURL=rollback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- export interface ExprIssue {
2
- where: string;
3
- message: string;
4
- source: string;
5
- /**
6
- * `error` fails the build (e.g. a bare ref in a record-scoped formula). `warning`
7
- * is advisory and never fails it (e.g. a possible field typo in a flattened flow
8
- * condition, which might be a flow variable). Absent ⇒ treat as `error`.
9
- */
10
- severity?: 'error' | 'warning';
11
- }
12
- type AnyRec = Record<string, unknown>;
13
- /**
14
- * Validate every predicate in the stack. Returns the list of issues (empty =
15
- * clean). Caller decides how to surface / whether to fail the build.
16
- */
17
- export declare function validateStackExpressions(stack: AnyRec): ExprIssue[];
18
- export {};
19
- //# sourceMappingURL=validate-expressions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-expressions.d.ts","sourceRoot":"","sources":["../../src/utils/validate-expressions.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAED,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA0BtC;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,CAoKnE"}