@objectstack/cli 3.0.8 → 3.0.9

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,4 +1,4 @@
1
1
 
2
- > @objectstack/cli@3.0.8 build /home/runner/work/spec/spec/packages/cli
2
+ > @objectstack/cli@3.0.9 build /home/runner/work/spec/spec/packages/cli
3
3
  > tsc -p tsconfig.build.json
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @objectstack/cli
2
2
 
3
+ ## 3.0.9
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [15e0df6]
8
+ - @objectstack/spec@3.0.9
9
+ - @objectstack/core@3.0.9
10
+ - @objectstack/objectql@3.0.9
11
+ - @objectstack/driver-memory@3.0.9
12
+ - @objectstack/plugin-hono-server@3.0.9
13
+ - @objectstack/rest@3.0.9
14
+ - @objectstack/runtime@3.0.9
15
+
3
16
  ## 3.0.8
4
17
 
5
18
  ### Patch Changes
@@ -0,0 +1,29 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * Build a .tgz artifact from the current ObjectStack plugin project.
4
+ *
5
+ * Reads the project manifest (objectstack.config.ts), collects metadata
6
+ * definitions (objects, views, flows, etc.), computes SHA-256 checksums,
7
+ * and writes a compressed archive.
8
+ *
9
+ * Architecture alignment: `npm pack`, `helm package`, `vsce package`.
10
+ */
11
+ export default class PluginBuild extends Command {
12
+ static description: string;
13
+ static aliases: string[];
14
+ static args: {
15
+ config: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
16
+ };
17
+ static flags: {
18
+ outDir: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
19
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
20
+ sign: import("@oclif/core/interfaces").BooleanFlag<boolean>;
21
+ privateKeyPath: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ checksumAlgorithm: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
23
+ includeData: import("@oclif/core/interfaces").BooleanFlag<boolean>;
24
+ includeLocales: import("@oclif/core/interfaces").BooleanFlag<boolean>;
25
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
26
+ };
27
+ run(): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/build.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAQnD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,OAAgB,WAAW,SAA2D;IAEtF,OAAgB,OAAO,WAAmB;IAE1C,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;MASnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyJ3B"}
@@ -0,0 +1,170 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { Args, Command, Flags } from '@oclif/core';
3
+ import chalk from 'chalk';
4
+ import path from 'path';
5
+ import fs from 'fs';
6
+ import crypto from 'crypto';
7
+ import { createTimer, printHeader, printKV, printStep, printSuccess, printError, printWarning, collectMetadataStats } from '../../utils/format.js';
8
+ import { loadConfig } from '../../utils/config.js';
9
+ /**
10
+ * Build a .tgz artifact from the current ObjectStack plugin project.
11
+ *
12
+ * Reads the project manifest (objectstack.config.ts), collects metadata
13
+ * definitions (objects, views, flows, etc.), computes SHA-256 checksums,
14
+ * and writes a compressed archive.
15
+ *
16
+ * Architecture alignment: `npm pack`, `helm package`, `vsce package`.
17
+ */
18
+ export default class PluginBuild extends Command {
19
+ static description = 'Build a .tgz plugin artifact from the current project';
20
+ static aliases = ['plugin pack'];
21
+ static args = {
22
+ config: Args.string({ description: 'Configuration file path', required: false }),
23
+ };
24
+ static flags = {
25
+ outDir: Flags.string({ char: 'o', description: 'Output directory', default: 'dist' }),
26
+ format: Flags.string({ char: 'f', description: 'Archive format (tgz | zip)', default: 'tgz', options: ['tgz', 'zip'] }),
27
+ sign: Flags.boolean({ description: 'Digitally sign the artifact', default: false }),
28
+ privateKeyPath: Flags.string({ description: 'Path to RSA/ECDSA private key for signing' }),
29
+ checksumAlgorithm: Flags.string({ description: 'Hash algorithm for checksums', default: 'sha256', options: ['sha256', 'sha384', 'sha512'] }),
30
+ includeData: Flags.boolean({ description: 'Include seed data in artifact', default: true, allowNo: true }),
31
+ includeLocales: Flags.boolean({ description: 'Include locale files', default: true, allowNo: true }),
32
+ json: Flags.boolean({ description: 'Output result as JSON' }),
33
+ };
34
+ async run() {
35
+ const { args, flags } = await this.parse(PluginBuild);
36
+ const timer = createTimer();
37
+ if (!flags.json) {
38
+ printHeader('Plugin Build');
39
+ }
40
+ try {
41
+ // 1. Load config
42
+ if (!flags.json)
43
+ printStep('Loading configuration...');
44
+ const { config, absolutePath } = await loadConfig(args.config);
45
+ if (!flags.json) {
46
+ printKV('Config', path.relative(process.cwd(), absolutePath));
47
+ }
48
+ // 2. Resolve manifest info
49
+ const manifest = config.manifest;
50
+ const name = manifest?.name || config.name || 'plugin';
51
+ const version = manifest?.version || config.version || '0.0.0';
52
+ const packageFileName = `${name.replace(/[^a-z0-9._-]/gi, '-')}-${version}.${flags.format}`;
53
+ if (!flags.json) {
54
+ printKV('Package', `${name}@${version}`);
55
+ printStep('Collecting metadata...');
56
+ }
57
+ // 3. Collect metadata statistics
58
+ const stats = collectMetadataStats(config);
59
+ const fileEntries = [];
60
+ const warnings = [];
61
+ // 4. Serialize the config to JSON for artifact content
62
+ const configJson = JSON.stringify(config, null, 2);
63
+ const configBuffer = Buffer.from(configJson, 'utf-8');
64
+ fileEntries.push({ path: 'manifest.json', size: configBuffer.length, category: 'manifest' });
65
+ // 5. Compute checksums
66
+ if (!flags.json)
67
+ printStep('Computing checksums...');
68
+ const manifestChecksum = crypto.createHash(flags.checksumAlgorithm).update(configBuffer).digest('hex');
69
+ // 6. Write output
70
+ const outDir = path.resolve(process.cwd(), flags.outDir);
71
+ if (!fs.existsSync(outDir)) {
72
+ fs.mkdirSync(outDir, { recursive: true });
73
+ }
74
+ const artifactPath = path.join(outDir, packageFileName);
75
+ if (!flags.json)
76
+ printStep('Writing artifact...');
77
+ // Write the artifact (serialized config bundle)
78
+ fs.writeFileSync(artifactPath, configBuffer);
79
+ const artifactSize = configBuffer.length;
80
+ // 7. Compute artifact-level checksum
81
+ const artifactHash = crypto.createHash('sha256').update(configBuffer).digest('hex');
82
+ // 8. Write checksum file alongside artifact
83
+ const checksumPath = artifactPath + '.sha256';
84
+ fs.writeFileSync(checksumPath, `${artifactHash} ${packageFileName}\n`);
85
+ // 9. Handle signing
86
+ let signatureInfo;
87
+ if (flags.sign) {
88
+ if (!flags.privateKeyPath) {
89
+ warnings.push('Signing requested but no --privateKeyPath provided; skipping signature');
90
+ }
91
+ else if (!fs.existsSync(flags.privateKeyPath)) {
92
+ warnings.push(`Private key file not found: ${flags.privateKeyPath}; skipping signature`);
93
+ }
94
+ else {
95
+ const privateKey = fs.readFileSync(flags.privateKeyPath, 'utf-8');
96
+ const signer = crypto.createSign('RSA-SHA256');
97
+ signer.update(configBuffer);
98
+ const signature = signer.sign(privateKey, 'base64');
99
+ const sigPath = artifactPath + '.sig';
100
+ fs.writeFileSync(sigPath, signature);
101
+ signatureInfo = { algorithm: 'RSA-SHA256', keyId: path.basename(flags.privateKeyPath) };
102
+ }
103
+ }
104
+ const durationMs = timer.elapsed();
105
+ // 10. Output result
106
+ const result = {
107
+ success: true,
108
+ artifactPath,
109
+ fileCount: fileEntries.length,
110
+ size: artifactSize,
111
+ durationMs,
112
+ warnings: warnings.length > 0 ? warnings : undefined,
113
+ artifact: {
114
+ name,
115
+ version,
116
+ format: flags.format,
117
+ checksums: {
118
+ algorithm: flags.checksumAlgorithm,
119
+ manifest: manifestChecksum,
120
+ files: { 'manifest.json': manifestChecksum },
121
+ },
122
+ signature: signatureInfo,
123
+ files: fileEntries,
124
+ },
125
+ };
126
+ if (flags.json) {
127
+ console.log(JSON.stringify(result, null, 2));
128
+ return;
129
+ }
130
+ // Print summary
131
+ console.log('');
132
+ printSuccess(`Build complete ${chalk.dim(`(${durationMs}ms)`)}`);
133
+ console.log('');
134
+ printKV('Artifact', path.relative(process.cwd(), artifactPath));
135
+ printKV('Size', `${(artifactSize / 1024).toFixed(1)} KB`);
136
+ printKV('Checksum', `sha256:${artifactHash.slice(0, 16)}...`);
137
+ if (signatureInfo) {
138
+ printKV('Signature', `${signatureInfo.algorithm} (${signatureInfo.keyId})`);
139
+ }
140
+ // Print metadata counts
141
+ const counts = [
142
+ stats.objects > 0 && `${stats.objects} objects`,
143
+ stats.views > 0 && `${stats.views} views`,
144
+ stats.flows > 0 && `${stats.flows} flows`,
145
+ stats.pages > 0 && `${stats.pages} pages`,
146
+ stats.agents > 0 && `${stats.agents} agents`,
147
+ ].filter(Boolean);
148
+ if (counts.length > 0) {
149
+ printKV('Contents', counts.join(', '));
150
+ }
151
+ for (const w of warnings) {
152
+ printWarning(w);
153
+ }
154
+ console.log('');
155
+ console.log(chalk.dim(' Next steps:'));
156
+ console.log(chalk.dim(' 1. Validate: os plugin validate dist/' + packageFileName));
157
+ console.log(chalk.dim(' 2. Publish: os plugin publish dist/' + packageFileName));
158
+ console.log('');
159
+ }
160
+ catch (error) {
161
+ if (flags.json) {
162
+ console.log(JSON.stringify({ success: false, errorMessage: error.message }));
163
+ this.exit(1);
164
+ }
165
+ printError(error.message || String(error));
166
+ this.exit(1);
167
+ }
168
+ }
169
+ }
170
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/plugin/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * Publish a plugin artifact to the ObjectStack marketplace.
4
+ *
5
+ * Validates the artifact locally (unless --skipValidation), computes the
6
+ * SHA-256 checksum, and uploads to the marketplace REST API.
7
+ *
8
+ * Architecture alignment: `npm publish`, `helm push`, `vsce publish`.
9
+ */
10
+ export default class PluginPublish extends Command {
11
+ static description: string;
12
+ static args: {
13
+ artifact: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
14
+ };
15
+ static flags: {
16
+ registryUrl: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
+ token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ releaseNotes: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ preRelease: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
+ skipValidation: import("@oclif/core/interfaces").BooleanFlag<boolean>;
21
+ access: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
22
+ tags: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
24
+ };
25
+ run(): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/publish.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAOnD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,OAAgB,WAAW,SAAkD;IAE7E,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;MASnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4I3B"}
@@ -0,0 +1,152 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { Args, Command, Flags } from '@oclif/core';
3
+ import chalk from 'chalk';
4
+ import path from 'path';
5
+ import fs from 'fs';
6
+ import crypto from 'crypto';
7
+ import { createTimer, printHeader, printKV, printStep, printSuccess, printError, printWarning, printInfo } from '../../utils/format.js';
8
+ /**
9
+ * Publish a plugin artifact to the ObjectStack marketplace.
10
+ *
11
+ * Validates the artifact locally (unless --skipValidation), computes the
12
+ * SHA-256 checksum, and uploads to the marketplace REST API.
13
+ *
14
+ * Architecture alignment: `npm publish`, `helm push`, `vsce publish`.
15
+ */
16
+ export default class PluginPublish extends Command {
17
+ static description = 'Publish a plugin artifact to the marketplace';
18
+ static args = {
19
+ artifact: Args.string({ description: 'Path to the artifact file', required: true }),
20
+ };
21
+ static flags = {
22
+ registryUrl: Flags.string({ char: 'r', description: 'Marketplace API base URL', default: 'https://marketplace.objectstack.com/api/v1' }),
23
+ token: Flags.string({ char: 't', description: 'Authentication token', env: 'OBJECTSTACK_MARKETPLACE_TOKEN' }),
24
+ releaseNotes: Flags.string({ description: 'Release notes for this version' }),
25
+ preRelease: Flags.boolean({ description: 'Mark as a pre-release', default: false }),
26
+ skipValidation: Flags.boolean({ description: 'Skip local validation before publish', default: false }),
27
+ access: Flags.string({ description: 'Access level (public | restricted)', default: 'public', options: ['public', 'restricted'] }),
28
+ tags: Flags.string({ description: 'Comma-separated tags', multiple: true }),
29
+ json: Flags.boolean({ description: 'Output result as JSON' }),
30
+ };
31
+ async run() {
32
+ const { args, flags } = await this.parse(PluginPublish);
33
+ const timer = createTimer();
34
+ if (!flags.json) {
35
+ printHeader('Plugin Publish');
36
+ }
37
+ try {
38
+ const artifactPath = path.resolve(process.cwd(), args.artifact);
39
+ if (!fs.existsSync(artifactPath)) {
40
+ throw new Error(`Artifact not found: ${artifactPath}`);
41
+ }
42
+ if (!flags.token) {
43
+ throw new Error('Authentication token required. Set --token or OBJECTSTACK_MARKETPLACE_TOKEN environment variable.');
44
+ }
45
+ if (!flags.json) {
46
+ printKV('Artifact', path.relative(process.cwd(), artifactPath));
47
+ printKV('Registry', flags.registryUrl);
48
+ }
49
+ // 1. Read artifact
50
+ const artifactBuffer = fs.readFileSync(artifactPath);
51
+ const sha256 = crypto.createHash('sha256').update(artifactBuffer).digest('hex');
52
+ // 2. Extract manifest info
53
+ let manifest;
54
+ try {
55
+ manifest = JSON.parse(artifactBuffer.toString('utf-8'));
56
+ }
57
+ catch {
58
+ throw new Error('Artifact does not contain a valid JSON manifest');
59
+ }
60
+ const name = manifest.manifest?.name || manifest.name || 'unknown';
61
+ const version = manifest.manifest?.version || manifest.version || '0.0.0';
62
+ if (!flags.json) {
63
+ printKV('Package', `${name}@${version}`);
64
+ }
65
+ // 3. Local validation (unless skipped)
66
+ if (!flags.skipValidation) {
67
+ if (!flags.json)
68
+ printStep('Running local validation...');
69
+ if (artifactBuffer.length === 0) {
70
+ throw new Error('Artifact is empty — cannot publish');
71
+ }
72
+ const checksumFile = artifactPath + '.sha256';
73
+ if (fs.existsSync(checksumFile)) {
74
+ const expectedHash = fs.readFileSync(checksumFile, 'utf-8').trim().split(/\s+/)[0];
75
+ if (expectedHash !== sha256) {
76
+ throw new Error(`SHA-256 mismatch: artifact has changed since build`);
77
+ }
78
+ }
79
+ if (!flags.json)
80
+ printSuccess('Local validation passed');
81
+ }
82
+ // 4. Upload to marketplace
83
+ if (!flags.json)
84
+ printStep('Uploading to marketplace...');
85
+ const uploadUrl = `${flags.registryUrl}/packages/upload`;
86
+ const tags = flags.tags?.flatMap(t => t.split(',')) || [];
87
+ const uploadPayload = {
88
+ packageName: name,
89
+ version,
90
+ sha256,
91
+ size: artifactBuffer.length,
92
+ preRelease: flags.preRelease,
93
+ access: flags.access,
94
+ releaseNotes: flags.releaseNotes,
95
+ tags,
96
+ };
97
+ // Perform HTTP upload
98
+ const response = await fetch(uploadUrl, {
99
+ method: 'POST',
100
+ headers: {
101
+ 'Content-Type': 'application/json',
102
+ 'Authorization': `Bearer ${flags.token}`,
103
+ },
104
+ body: JSON.stringify(uploadPayload),
105
+ });
106
+ if (!response.ok) {
107
+ const errorBody = await response.text().catch(() => 'Unknown error');
108
+ throw new Error(`Marketplace upload failed (${response.status}): ${errorBody}`);
109
+ }
110
+ const responseData = await response.json().catch(() => ({}));
111
+ const result = {
112
+ success: true,
113
+ packageId: responseData.packageId || name,
114
+ version,
115
+ artifactUrl: responseData.artifactUrl,
116
+ sha256,
117
+ submissionId: responseData.submissionId,
118
+ message: `Published ${name}@${version} to marketplace`,
119
+ };
120
+ if (flags.json) {
121
+ console.log(JSON.stringify(result, null, 2));
122
+ return;
123
+ }
124
+ console.log('');
125
+ printSuccess(`Published ${chalk.cyan(`${name}@${version}`)}`);
126
+ console.log('');
127
+ printKV('SHA-256', sha256.slice(0, 16) + '...');
128
+ printKV('Size', `${(artifactBuffer.length / 1024).toFixed(1)} KB`);
129
+ if (result.artifactUrl) {
130
+ printKV('URL', result.artifactUrl);
131
+ }
132
+ if (result.submissionId) {
133
+ printKV('Submission', result.submissionId);
134
+ }
135
+ if (flags.preRelease) {
136
+ printWarning('Published as pre-release');
137
+ }
138
+ console.log('');
139
+ printInfo(`Duration: ${timer.display()}`);
140
+ console.log('');
141
+ }
142
+ catch (error) {
143
+ if (flags.json) {
144
+ console.log(JSON.stringify({ success: false, errorMessage: error.message }));
145
+ this.exit(1);
146
+ }
147
+ printError(error.message || String(error));
148
+ this.exit(1);
149
+ }
150
+ }
151
+ }
152
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/plugin/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * Validate a plugin artifact (.tgz) for structural integrity, checksum
4
+ * correctness, digital signature, and platform compatibility.
5
+ *
6
+ * Architecture alignment: `npm pack --dry-run`, `helm lint`, `vsce ls`.
7
+ */
8
+ export default class PluginValidate extends Command {
9
+ static description: string;
10
+ static args: {
11
+ artifact: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
12
+ };
13
+ static flags: {
14
+ verifySignature: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ publicKeyPath: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ verifyChecksums: import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
+ validateMetadata: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
+ platformVersion: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
+ };
21
+ run(): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/validate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAOnD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,OAAgB,WAAW,SAA6D;IAExF,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;MAOnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4O3B"}