@objectstack/cli 4.0.1 → 4.0.2
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +17 -0
- package/dist/commands/auth/login.d.ts +13 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +167 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +10 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +46 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/whoami.d.ts +12 -0
- package/dist/commands/auth/whoami.d.ts.map +1 -0
- package/dist/commands/auth/whoami.js +76 -0
- package/dist/commands/auth/whoami.js.map +1 -0
- package/dist/commands/data/create.d.ts +17 -0
- package/dist/commands/data/create.d.ts.map +1 -0
- package/dist/commands/data/create.js +106 -0
- package/dist/commands/data/create.js.map +1 -0
- package/dist/commands/data/delete.d.ts +16 -0
- package/dist/commands/data/delete.d.ts.map +1 -0
- package/dist/commands/data/delete.js +78 -0
- package/dist/commands/data/delete.js.map +1 -0
- package/dist/commands/data/get.d.ts +16 -0
- package/dist/commands/data/get.d.ts.map +1 -0
- package/dist/commands/data/get.js +79 -0
- package/dist/commands/data/get.js.map +1 -0
- package/dist/commands/data/query.d.ts +20 -0
- package/dist/commands/data/query.d.ts.map +1 -0
- package/dist/commands/data/query.js +118 -0
- package/dist/commands/data/query.js.map +1 -0
- package/dist/commands/data/update.d.ts +18 -0
- package/dist/commands/data/update.d.ts.map +1 -0
- package/dist/commands/data/update.js +110 -0
- package/dist/commands/data/update.js.map +1 -0
- package/dist/commands/meta/delete.d.ts +16 -0
- package/dist/commands/meta/delete.d.ts.map +1 -0
- package/dist/commands/meta/delete.js +73 -0
- package/dist/commands/meta/delete.js.map +1 -0
- package/dist/commands/meta/get.d.ts +16 -0
- package/dist/commands/meta/get.d.ts.map +1 -0
- package/dist/commands/meta/get.js +65 -0
- package/dist/commands/meta/get.js.map +1 -0
- package/dist/commands/meta/list.d.ts +15 -0
- package/dist/commands/meta/list.d.ts.map +1 -0
- package/dist/commands/meta/list.js +103 -0
- package/dist/commands/meta/list.js.map +1 -0
- package/dist/commands/meta/register.d.ts +16 -0
- package/dist/commands/meta/register.d.ts.map +1 -0
- package/dist/commands/meta/register.js +89 -0
- package/dist/commands/meta/register.js.map +1 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +33 -0
- package/dist/commands/serve.js.map +1 -1
- package/dist/utils/api-client.d.ts +42 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +53 -0
- package/dist/utils/api-client.js.map +1 -0
- package/dist/utils/auth-config.d.ts +50 -0
- package/dist/utils/auth-config.d.ts.map +1 -0
- package/dist/utils/auth-config.js +73 -0
- package/dist/utils/auth-config.js.map +1 -0
- package/dist/utils/output-formatter.d.ts +9 -0
- package/dist/utils/output-formatter.d.ts.map +1 -0
- package/dist/utils/output-formatter.js +80 -0
- package/dist/utils/output-formatter.js.map +1 -0
- package/package.json +17 -12
- package/src/commands/auth/login.ts +188 -0
- package/src/commands/auth/logout.ts +51 -0
- package/src/commands/auth/whoami.ts +85 -0
- package/src/commands/data/create.ts +110 -0
- package/src/commands/data/delete.ts +84 -0
- package/src/commands/data/get.ts +84 -0
- package/src/commands/data/query.ts +127 -0
- package/src/commands/data/update.ts +114 -0
- package/src/commands/meta/delete.ts +79 -0
- package/src/commands/meta/get.ts +73 -0
- package/src/commands/meta/list.ts +105 -0
- package/src/commands/meta/register.ts +97 -0
- package/src/commands/serve.ts +38 -0
- package/src/utils/api-client.ts +88 -0
- package/src/utils/auth-config.ts +107 -0
- package/src/utils/output-formatter.ts +91 -0
- package/test/remote-api-commands.test.ts +188 -0
- package/test/remote-api-utils.test.ts +196 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DataGet extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
object: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/data/get.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAKnD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,OAAgB,WAAW,SAA+B;IAE1D,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,IAAI;;;MASlB;IAEF,OAAgB,KAAK;;;;MAiBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsC3B"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import { printError } from '../../utils/format.js';
|
|
4
|
+
import { createApiClient, requireAuth } from '../../utils/api-client.js';
|
|
5
|
+
import { formatOutput } from '../../utils/output-formatter.js';
|
|
6
|
+
export default class DataGet extends Command {
|
|
7
|
+
static description = 'Get a single record by ID';
|
|
8
|
+
static examples = [
|
|
9
|
+
'$ os data get project_task abc123',
|
|
10
|
+
'$ os data get project_task abc123 --format json',
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
object: Args.string({
|
|
14
|
+
description: 'Object name (snake_case)',
|
|
15
|
+
required: true,
|
|
16
|
+
}),
|
|
17
|
+
id: Args.string({
|
|
18
|
+
description: 'Record ID',
|
|
19
|
+
required: true,
|
|
20
|
+
}),
|
|
21
|
+
};
|
|
22
|
+
static flags = {
|
|
23
|
+
url: Flags.string({
|
|
24
|
+
char: 'u',
|
|
25
|
+
description: 'Server URL',
|
|
26
|
+
env: 'OBJECTSTACK_URL',
|
|
27
|
+
}),
|
|
28
|
+
token: Flags.string({
|
|
29
|
+
char: 't',
|
|
30
|
+
description: 'Authentication token',
|
|
31
|
+
env: 'OBJECTSTACK_TOKEN',
|
|
32
|
+
}),
|
|
33
|
+
format: Flags.string({
|
|
34
|
+
char: 'f',
|
|
35
|
+
description: 'Output format',
|
|
36
|
+
options: ['json', 'table', 'yaml'],
|
|
37
|
+
default: 'table',
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
async run() {
|
|
41
|
+
const { args, flags } = await this.parse(DataGet);
|
|
42
|
+
try {
|
|
43
|
+
const { client, token } = await createApiClient({
|
|
44
|
+
url: flags.url,
|
|
45
|
+
token: flags.token,
|
|
46
|
+
});
|
|
47
|
+
requireAuth(token);
|
|
48
|
+
// Get the record
|
|
49
|
+
const result = await client.data.get(args.object, args.id);
|
|
50
|
+
if (flags.format === 'json') {
|
|
51
|
+
formatOutput(result, 'json');
|
|
52
|
+
}
|
|
53
|
+
else if (flags.format === 'yaml') {
|
|
54
|
+
formatOutput(result, 'yaml');
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Table format - show the record
|
|
58
|
+
if (result.record) {
|
|
59
|
+
formatOutput(result.record, 'table');
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log('Record not found.');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
if (flags.format === 'json') {
|
|
68
|
+
console.log(JSON.stringify({
|
|
69
|
+
success: false,
|
|
70
|
+
error: error.message,
|
|
71
|
+
}, null, 2));
|
|
72
|
+
this.exit(1);
|
|
73
|
+
}
|
|
74
|
+
printError(error.message || String(error));
|
|
75
|
+
this.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/data/get.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DataQuery extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
object: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
filter: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
fields: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
sort: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
offset: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
};
|
|
18
|
+
run(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/commands/data/query.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAKnD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,OAAgB,WAAW,SAAkC;IAE7D,OAAgB,QAAQ,WAOtB;IAEF,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;;;;;;;;MAkCnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgE3B"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import { printError } from '../../utils/format.js';
|
|
4
|
+
import { createApiClient, requireAuth } from '../../utils/api-client.js';
|
|
5
|
+
import { formatOutput } from '../../utils/output-formatter.js';
|
|
6
|
+
export default class DataQuery extends Command {
|
|
7
|
+
static description = 'Query records from an object';
|
|
8
|
+
static examples = [
|
|
9
|
+
'$ os data query project_task',
|
|
10
|
+
'$ os data query project_task --filter \'{"status":"open"}\'',
|
|
11
|
+
'$ os data query project_task --limit 10 --offset 0',
|
|
12
|
+
'$ os data query project_task --fields name,status,created_at',
|
|
13
|
+
'$ os data query project_task --sort -created_at',
|
|
14
|
+
'$ os data query project_task --format json',
|
|
15
|
+
];
|
|
16
|
+
static args = {
|
|
17
|
+
object: Args.string({
|
|
18
|
+
description: 'Object name (snake_case)',
|
|
19
|
+
required: true,
|
|
20
|
+
}),
|
|
21
|
+
};
|
|
22
|
+
static flags = {
|
|
23
|
+
url: Flags.string({
|
|
24
|
+
char: 'u',
|
|
25
|
+
description: 'Server URL',
|
|
26
|
+
env: 'OBJECTSTACK_URL',
|
|
27
|
+
}),
|
|
28
|
+
token: Flags.string({
|
|
29
|
+
char: 't',
|
|
30
|
+
description: 'Authentication token',
|
|
31
|
+
env: 'OBJECTSTACK_TOKEN',
|
|
32
|
+
}),
|
|
33
|
+
filter: Flags.string({
|
|
34
|
+
description: 'Filter criteria as JSON object',
|
|
35
|
+
}),
|
|
36
|
+
fields: Flags.string({
|
|
37
|
+
description: 'Comma-separated list of fields to retrieve',
|
|
38
|
+
}),
|
|
39
|
+
sort: Flags.string({
|
|
40
|
+
description: 'Sort field (prefix with - for descending)',
|
|
41
|
+
}),
|
|
42
|
+
limit: Flags.integer({
|
|
43
|
+
description: 'Maximum number of records to return',
|
|
44
|
+
default: 50,
|
|
45
|
+
}),
|
|
46
|
+
offset: Flags.integer({
|
|
47
|
+
description: 'Number of records to skip',
|
|
48
|
+
default: 0,
|
|
49
|
+
}),
|
|
50
|
+
format: Flags.string({
|
|
51
|
+
char: 'f',
|
|
52
|
+
description: 'Output format',
|
|
53
|
+
options: ['json', 'table', 'yaml'],
|
|
54
|
+
default: 'table',
|
|
55
|
+
}),
|
|
56
|
+
};
|
|
57
|
+
async run() {
|
|
58
|
+
const { args, flags } = await this.parse(DataQuery);
|
|
59
|
+
try {
|
|
60
|
+
const { client, token } = await createApiClient({
|
|
61
|
+
url: flags.url,
|
|
62
|
+
token: flags.token,
|
|
63
|
+
});
|
|
64
|
+
requireAuth(token);
|
|
65
|
+
// Build query options
|
|
66
|
+
const queryOptions = {
|
|
67
|
+
limit: flags.limit,
|
|
68
|
+
offset: flags.offset,
|
|
69
|
+
};
|
|
70
|
+
if (flags.filter) {
|
|
71
|
+
try {
|
|
72
|
+
queryOptions.where = JSON.parse(flags.filter);
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
throw new Error(`Invalid filter JSON: ${e.message}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (flags.fields) {
|
|
79
|
+
queryOptions.fields = flags.fields.split(',').map(f => f.trim());
|
|
80
|
+
}
|
|
81
|
+
if (flags.sort) {
|
|
82
|
+
queryOptions.orderBy = flags.sort;
|
|
83
|
+
}
|
|
84
|
+
// Execute query
|
|
85
|
+
const result = await client.data.query(args.object, queryOptions);
|
|
86
|
+
if (flags.format === 'json') {
|
|
87
|
+
formatOutput(result, 'json');
|
|
88
|
+
}
|
|
89
|
+
else if (flags.format === 'yaml') {
|
|
90
|
+
formatOutput(result, 'yaml');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// Table format
|
|
94
|
+
if (result.records && result.records.length > 0) {
|
|
95
|
+
formatOutput(result.records, 'table');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.log('No records found.');
|
|
99
|
+
}
|
|
100
|
+
if (result.total !== undefined) {
|
|
101
|
+
console.log(`\nTotal: ${result.total} record(s)`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
if (flags.format === 'json') {
|
|
107
|
+
console.log(JSON.stringify({
|
|
108
|
+
success: false,
|
|
109
|
+
error: error.message,
|
|
110
|
+
}, null, 2));
|
|
111
|
+
this.exit(1);
|
|
112
|
+
}
|
|
113
|
+
printError(error.message || String(error));
|
|
114
|
+
this.exit(1);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/commands/data/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DataUpdate extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
object: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
|
+
data: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
9
|
+
};
|
|
10
|
+
static flags: {
|
|
11
|
+
url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
data: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/data/update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAKnD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,OAAgB,WAAW,SAA+B;IAE1D,OAAgB,QAAQ,WAItB;IAEF,OAAgB,IAAI;;;;MAYlB;IAEF,OAAgB,KAAK;;;;;MAqBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4D3B"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import { printError, printSuccess } from '../../utils/format.js';
|
|
4
|
+
import { createApiClient, requireAuth } from '../../utils/api-client.js';
|
|
5
|
+
import { formatOutput } from '../../utils/output-formatter.js';
|
|
6
|
+
export default class DataUpdate extends Command {
|
|
7
|
+
static description = 'Update an existing record';
|
|
8
|
+
static examples = [
|
|
9
|
+
'$ os data update project_task abc123 \'{"status":"completed"}\'',
|
|
10
|
+
'$ os data update project_task abc123 --data update-data.json',
|
|
11
|
+
'$ os data update project_task abc123 --data update-data.json --format json',
|
|
12
|
+
];
|
|
13
|
+
static args = {
|
|
14
|
+
object: Args.string({
|
|
15
|
+
description: 'Object name (snake_case)',
|
|
16
|
+
required: true,
|
|
17
|
+
}),
|
|
18
|
+
id: Args.string({
|
|
19
|
+
description: 'Record ID',
|
|
20
|
+
required: true,
|
|
21
|
+
}),
|
|
22
|
+
data: Args.string({
|
|
23
|
+
description: 'Update data as JSON string (or use --data flag for file)',
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
static flags = {
|
|
27
|
+
url: Flags.string({
|
|
28
|
+
char: 'u',
|
|
29
|
+
description: 'Server URL',
|
|
30
|
+
env: 'OBJECTSTACK_URL',
|
|
31
|
+
}),
|
|
32
|
+
token: Flags.string({
|
|
33
|
+
char: 't',
|
|
34
|
+
description: 'Authentication token',
|
|
35
|
+
env: 'OBJECTSTACK_TOKEN',
|
|
36
|
+
}),
|
|
37
|
+
data: Flags.string({
|
|
38
|
+
char: 'd',
|
|
39
|
+
description: 'Path to JSON file containing update data',
|
|
40
|
+
}),
|
|
41
|
+
format: Flags.string({
|
|
42
|
+
char: 'f',
|
|
43
|
+
description: 'Output format',
|
|
44
|
+
options: ['json', 'table', 'yaml'],
|
|
45
|
+
default: 'table',
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
async run() {
|
|
49
|
+
const { args, flags } = await this.parse(DataUpdate);
|
|
50
|
+
try {
|
|
51
|
+
const { client, token } = await createApiClient({
|
|
52
|
+
url: flags.url,
|
|
53
|
+
token: flags.token,
|
|
54
|
+
});
|
|
55
|
+
requireAuth(token);
|
|
56
|
+
// Parse update data
|
|
57
|
+
let updateData;
|
|
58
|
+
if (flags.data) {
|
|
59
|
+
// Read from file
|
|
60
|
+
const { readFile } = await import('node:fs/promises');
|
|
61
|
+
const fileContent = await readFile(flags.data, 'utf-8');
|
|
62
|
+
try {
|
|
63
|
+
updateData = JSON.parse(fileContent);
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
throw new Error(`Invalid JSON in file: ${e.message}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (args.data) {
|
|
70
|
+
// Parse from argument
|
|
71
|
+
try {
|
|
72
|
+
updateData = JSON.parse(args.data);
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
throw new Error(`Invalid JSON: ${e.message}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
throw new Error('Update data is required (provide JSON string or use --data flag)');
|
|
80
|
+
}
|
|
81
|
+
// Update the record
|
|
82
|
+
const result = await client.data.update(args.object, args.id, updateData);
|
|
83
|
+
if (flags.format === 'json') {
|
|
84
|
+
formatOutput(result, 'json');
|
|
85
|
+
}
|
|
86
|
+
else if (flags.format === 'yaml') {
|
|
87
|
+
formatOutput(result, 'yaml');
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
printSuccess(`Record updated: ${result.id}`);
|
|
91
|
+
if (result.record) {
|
|
92
|
+
console.log('');
|
|
93
|
+
formatOutput(result.record, 'table');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (flags.format === 'json') {
|
|
99
|
+
console.log(JSON.stringify({
|
|
100
|
+
success: false,
|
|
101
|
+
error: error.message,
|
|
102
|
+
}, null, 2));
|
|
103
|
+
this.exit(1);
|
|
104
|
+
}
|
|
105
|
+
printError(error.message || String(error));
|
|
106
|
+
this.exit(1);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/data/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class MetaDelete extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
name: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/meta/delete.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAKnD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,OAAgB,WAAW,SAA4B;IAEvD,OAAgB,QAAQ,WAItB;IAEF,OAAgB,IAAI;;;MASlB;IAEF,OAAgB,KAAK;;;;MAiBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgC3B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import { printError, printSuccess } from '../../utils/format.js';
|
|
4
|
+
import { createApiClient, requireAuth } from '../../utils/api-client.js';
|
|
5
|
+
import { formatOutput } from '../../utils/output-formatter.js';
|
|
6
|
+
export default class MetaDelete extends Command {
|
|
7
|
+
static description = 'Delete a metadata item';
|
|
8
|
+
static examples = [
|
|
9
|
+
'$ os meta delete object my_custom_object',
|
|
10
|
+
'$ os meta delete plugin my-plugin',
|
|
11
|
+
'$ os meta delete object my_custom_object --format json',
|
|
12
|
+
];
|
|
13
|
+
static args = {
|
|
14
|
+
type: Args.string({
|
|
15
|
+
description: 'Metadata type',
|
|
16
|
+
required: true,
|
|
17
|
+
}),
|
|
18
|
+
name: Args.string({
|
|
19
|
+
description: 'Item name (snake_case)',
|
|
20
|
+
required: true,
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
static flags = {
|
|
24
|
+
url: Flags.string({
|
|
25
|
+
char: 'u',
|
|
26
|
+
description: 'Server URL',
|
|
27
|
+
env: 'OBJECTSTACK_URL',
|
|
28
|
+
}),
|
|
29
|
+
token: Flags.string({
|
|
30
|
+
char: 't',
|
|
31
|
+
description: 'Authentication token',
|
|
32
|
+
env: 'OBJECTSTACK_TOKEN',
|
|
33
|
+
}),
|
|
34
|
+
format: Flags.string({
|
|
35
|
+
char: 'f',
|
|
36
|
+
description: 'Output format',
|
|
37
|
+
options: ['json', 'table', 'yaml'],
|
|
38
|
+
default: 'table',
|
|
39
|
+
}),
|
|
40
|
+
};
|
|
41
|
+
async run() {
|
|
42
|
+
const { args, flags } = await this.parse(MetaDelete);
|
|
43
|
+
try {
|
|
44
|
+
const { client, token } = await createApiClient({
|
|
45
|
+
url: flags.url,
|
|
46
|
+
token: flags.token,
|
|
47
|
+
});
|
|
48
|
+
requireAuth(token);
|
|
49
|
+
const result = await client.meta.deleteItem(args.type, args.name);
|
|
50
|
+
if (flags.format === 'json') {
|
|
51
|
+
formatOutput({ success: true, type: args.type, name: args.name, deleted: result.deleted }, 'json');
|
|
52
|
+
}
|
|
53
|
+
else if (flags.format === 'yaml') {
|
|
54
|
+
formatOutput({ success: true, type: args.type, name: args.name, deleted: result.deleted }, 'yaml');
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
printSuccess(`Metadata deleted: ${args.type}/${args.name}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (flags.format === 'json') {
|
|
62
|
+
console.log(JSON.stringify({
|
|
63
|
+
success: false,
|
|
64
|
+
error: error.message,
|
|
65
|
+
}, null, 2));
|
|
66
|
+
this.exit(1);
|
|
67
|
+
}
|
|
68
|
+
printError(error.message || String(error));
|
|
69
|
+
this.exit(1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/meta/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class MetaGet extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
type: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
name: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/meta/get.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAKnD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,OAAgB,WAAW,SAAyB;IAEpD,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,IAAI;;;MASlB;IAEF,OAAgB,KAAK;;;;MAiBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2B3B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import { printError } from '../../utils/format.js';
|
|
4
|
+
import { createApiClient, requireAuth } from '../../utils/api-client.js';
|
|
5
|
+
import { formatOutput } from '../../utils/output-formatter.js';
|
|
6
|
+
export default class MetaGet extends Command {
|
|
7
|
+
static description = 'Get a metadata item';
|
|
8
|
+
static examples = [
|
|
9
|
+
'$ os meta get object project_task',
|
|
10
|
+
'$ os meta get plugin my-plugin --format json',
|
|
11
|
+
];
|
|
12
|
+
static args = {
|
|
13
|
+
type: Args.string({
|
|
14
|
+
description: 'Metadata type',
|
|
15
|
+
required: true,
|
|
16
|
+
}),
|
|
17
|
+
name: Args.string({
|
|
18
|
+
description: 'Item name (snake_case)',
|
|
19
|
+
required: true,
|
|
20
|
+
}),
|
|
21
|
+
};
|
|
22
|
+
static flags = {
|
|
23
|
+
url: Flags.string({
|
|
24
|
+
char: 'u',
|
|
25
|
+
description: 'Server URL',
|
|
26
|
+
env: 'OBJECTSTACK_URL',
|
|
27
|
+
}),
|
|
28
|
+
token: Flags.string({
|
|
29
|
+
char: 't',
|
|
30
|
+
description: 'Authentication token',
|
|
31
|
+
env: 'OBJECTSTACK_TOKEN',
|
|
32
|
+
}),
|
|
33
|
+
format: Flags.string({
|
|
34
|
+
char: 'f',
|
|
35
|
+
description: 'Output format',
|
|
36
|
+
options: ['json', 'table', 'yaml'],
|
|
37
|
+
default: 'json',
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
async run() {
|
|
41
|
+
const { args, flags } = await this.parse(MetaGet);
|
|
42
|
+
try {
|
|
43
|
+
const { client, token } = await createApiClient({
|
|
44
|
+
url: flags.url,
|
|
45
|
+
token: flags.token,
|
|
46
|
+
});
|
|
47
|
+
requireAuth(token);
|
|
48
|
+
// Get the metadata item
|
|
49
|
+
const item = await client.meta.getItem(args.type, args.name);
|
|
50
|
+
formatOutput(item, flags.format);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (flags.format === 'json') {
|
|
54
|
+
console.log(JSON.stringify({
|
|
55
|
+
success: false,
|
|
56
|
+
error: error.message,
|
|
57
|
+
}, null, 2));
|
|
58
|
+
this.exit(1);
|
|
59
|
+
}
|
|
60
|
+
printError(error.message || String(error));
|
|
61
|
+
this.exit(1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/meta/get.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAU,WAAW,GAAG,qBAAqB,CAAC;IAEpD,MAAM,CAAU,QAAQ,GAAG;QACzB,mCAAmC;QACnC,8CAA8C;KAC/C,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,eAAe;YAC5B,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,wBAAwB;YACrC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;YAChB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,YAAY;YACzB,GAAG,EAAE,iBAAiB;SACvB,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,sBAAsB;YACnC,GAAG,EAAE,mBAAmB;SACzB,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,eAAe;YAC5B,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;YAClC,OAAO,EAAE,MAAM;SAChB,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CAAC;gBAC9C,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC,CAAC;YAEH,WAAW,CAAC,KAAK,CAAC,CAAC;YAEnB,wBAAwB;YACxB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7D,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,MAAa,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,CAAC,OAAO;iBACrB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YACD,UAAU,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class MetaList extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
type: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/meta/list.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAKnD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,WAAW,SAAkC;IAE7D,OAAgB,QAAQ,WAItB;IAEF,OAAgB,IAAI;;MAIlB;IAEF,OAAgB,KAAK;;;;MAiBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+D3B"}
|