@grepr/cli 1.1.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.
- package/LICENSE +21 -0
- package/README.md +71 -0
- package/build/dist/commands/base-command.d.ts +13 -0
- package/build/dist/commands/base-command.d.ts.map +1 -0
- package/build/dist/commands/base-command.js +28 -0
- package/build/dist/commands/base-command.js.map +1 -0
- package/build/dist/commands/config-command.d.ts +19 -0
- package/build/dist/commands/config-command.d.ts.map +1 -0
- package/build/dist/commands/config-command.js +108 -0
- package/build/dist/commands/config-command.js.map +1 -0
- package/build/dist/commands/crud-command.d.ts +117 -0
- package/build/dist/commands/crud-command.d.ts.map +1 -0
- package/build/dist/commands/crud-command.js +264 -0
- package/build/dist/commands/crud-command.js.map +1 -0
- package/build/dist/commands/dataset-command.d.ts +45 -0
- package/build/dist/commands/dataset-command.d.ts.map +1 -0
- package/build/dist/commands/dataset-command.js +139 -0
- package/build/dist/commands/dataset-command.js.map +1 -0
- package/build/dist/commands/integration-command.d.ts +30 -0
- package/build/dist/commands/integration-command.d.ts.map +1 -0
- package/build/dist/commands/integration-command.js +80 -0
- package/build/dist/commands/integration-command.js.map +1 -0
- package/build/dist/commands/job-command.d.ts +92 -0
- package/build/dist/commands/job-command.d.ts.map +1 -0
- package/build/dist/commands/job-command.js +294 -0
- package/build/dist/commands/job-command.js.map +1 -0
- package/build/dist/commands/list-command.d.ts +69 -0
- package/build/dist/commands/list-command.d.ts.map +1 -0
- package/build/dist/commands/list-command.js +130 -0
- package/build/dist/commands/list-command.js.map +1 -0
- package/build/dist/commands/query-command.d.ts +20 -0
- package/build/dist/commands/query-command.d.ts.map +1 -0
- package/build/dist/commands/query-command.js +167 -0
- package/build/dist/commands/query-command.js.map +1 -0
- package/build/dist/grepr.d.ts +3 -0
- package/build/dist/grepr.d.ts.map +1 -0
- package/build/dist/grepr.js +155 -0
- package/build/dist/grepr.js.map +1 -0
- package/build/dist/lib/api-client-factory.d.ts +21 -0
- package/build/dist/lib/api-client-factory.d.ts.map +1 -0
- package/build/dist/lib/api-client-factory.js +23 -0
- package/build/dist/lib/api-client-factory.js.map +1 -0
- package/build/dist/lib/api-client.d.ts +2 -0
- package/build/dist/lib/api-client.d.ts.map +1 -0
- package/build/dist/lib/api-client.js +3 -0
- package/build/dist/lib/api-client.js.map +1 -0
- package/build/dist/lib/auth.d.ts +104 -0
- package/build/dist/lib/auth.d.ts.map +1 -0
- package/build/dist/lib/auth.js +312 -0
- package/build/dist/lib/auth.js.map +1 -0
- package/build/dist/lib/command-registry.d.ts +35 -0
- package/build/dist/lib/command-registry.d.ts.map +1 -0
- package/build/dist/lib/command-registry.js +33 -0
- package/build/dist/lib/command-registry.js.map +1 -0
- package/build/dist/lib/config.d.ts +40 -0
- package/build/dist/lib/config.d.ts.map +1 -0
- package/build/dist/lib/config.js +114 -0
- package/build/dist/lib/config.js.map +1 -0
- package/build/dist/lib/grepr-api-client.d.ts +216 -0
- package/build/dist/lib/grepr-api-client.d.ts.map +1 -0
- package/build/dist/lib/grepr-api-client.js +424 -0
- package/build/dist/lib/grepr-api-client.js.map +1 -0
- package/build/dist/lib/heartbeat.d.ts +17 -0
- package/build/dist/lib/heartbeat.d.ts.map +1 -0
- package/build/dist/lib/heartbeat.js +56 -0
- package/build/dist/lib/heartbeat.js.map +1 -0
- package/build/dist/lib/json-formatter.d.ts +135 -0
- package/build/dist/lib/json-formatter.d.ts.map +1 -0
- package/build/dist/lib/json-formatter.js +658 -0
- package/build/dist/lib/json-formatter.js.map +1 -0
- package/build/dist/lib/parser.d.ts +26 -0
- package/build/dist/lib/parser.d.ts.map +1 -0
- package/build/dist/lib/parser.js +95 -0
- package/build/dist/lib/parser.js.map +1 -0
- package/build/dist/lib/streaming-job-executor.d.ts +31 -0
- package/build/dist/lib/streaming-job-executor.d.ts.map +1 -0
- package/build/dist/lib/streaming-job-executor.js +281 -0
- package/build/dist/lib/streaming-job-executor.js.map +1 -0
- package/build/dist/lib/time-utils.d.ts +28 -0
- package/build/dist/lib/time-utils.d.ts.map +1 -0
- package/build/dist/lib/time-utils.js +87 -0
- package/build/dist/lib/time-utils.js.map +1 -0
- package/build/dist/openapi/openApiTypes.d.ts +10430 -0
- package/build/dist/openapi/openApiTypes.d.ts.map +1 -0
- package/build/dist/openapi/openApiTypes.js +571 -0
- package/build/dist/openapi/openApiTypes.js.map +1 -0
- package/build/dist/types.d.ts +168 -0
- package/build/dist/types.d.ts.map +1 -0
- package/build/dist/types.js +20 -0
- package/build/dist/types.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { ListCommand } from './list-command.js';
|
|
2
|
+
import { CrudCommand } from './crud-command.js';
|
|
3
|
+
import { parseSinceOption } from '../lib/time-utils.js';
|
|
4
|
+
import { StreamingJobExecutor } from '../lib/streaming-job-executor.js';
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
import { PathsV1JobsGetParametersQueryExecution } from '../openapi/openApiTypes.js';
|
|
7
|
+
/**
|
|
8
|
+
* Job list command implementation using the new architecture
|
|
9
|
+
* Shows smart defaults: PENDING + RUNNING + FINISHED jobs since 6 hours ago
|
|
10
|
+
*/
|
|
11
|
+
export class JobListCommand extends ListCommand {
|
|
12
|
+
getCommandName() {
|
|
13
|
+
return 'job:list';
|
|
14
|
+
}
|
|
15
|
+
getCommandDescription() {
|
|
16
|
+
return 'List jobs with optional filtering (defaults: PENDING + RUNNING + FINISHED since 6h ago)';
|
|
17
|
+
}
|
|
18
|
+
getCommandOptions() {
|
|
19
|
+
return [
|
|
20
|
+
{
|
|
21
|
+
flags: '--since <time>',
|
|
22
|
+
description: 'Filter jobs created since time (ISO 8601 timestamp or duration like PT5H, PT1D)',
|
|
23
|
+
defaultValue: 'PT6H' // Default to 6 hours ago
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
flags: '--processing <type>',
|
|
27
|
+
description: 'Filter by processing type (BATCH, STREAMING)'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
flags: '--all-versions',
|
|
31
|
+
description: 'Show all versions instead of only latest',
|
|
32
|
+
defaultValue: false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
flags: '--state <states...>',
|
|
36
|
+
description: 'Filter by job states (CREATED, PENDING, RUNNING, etc.)',
|
|
37
|
+
defaultValue: ['PENDING', 'RUNNING', 'FINISHED'] // Smart defaults
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
flags: '--name <names...>',
|
|
41
|
+
description: 'Filter by job names'
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
flags: '--id <ids...>',
|
|
45
|
+
description: 'Filter by job IDs'
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
flags: '--version <number>',
|
|
49
|
+
description: 'Filter by version number',
|
|
50
|
+
parser: parseInt
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
flags: '--resolved',
|
|
54
|
+
description: 'Include resolved job definitions'
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
flags: '--all',
|
|
58
|
+
description: 'Show all jobs (overrides default state and time filtering)'
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
async executeList(options) {
|
|
63
|
+
try {
|
|
64
|
+
this.apiClient = this.createApiClient(options);
|
|
65
|
+
// Apply smart defaults unless --all is specified
|
|
66
|
+
const params = this.buildJobListParams(options);
|
|
67
|
+
const jobs = await this.apiClient.listJobs(Object.keys(params).length > 0 ? params : undefined);
|
|
68
|
+
const jobList = jobs?.items || [];
|
|
69
|
+
await this.formatAndOutput(jobList, options, 'jobs');
|
|
70
|
+
this.showQuerySummary(options, jobList.length);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.error('Error listing jobs:', error.message);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
buildJobListParams(options) {
|
|
78
|
+
const params = {};
|
|
79
|
+
// If --all is not specified, apply smart defaults
|
|
80
|
+
if (!options.all) {
|
|
81
|
+
// Default: show RUNNING + FINISHED jobs since 6 hours ago
|
|
82
|
+
if (!options.state) {
|
|
83
|
+
params.state = ['RUNNING', 'FINISHED', 'PENDING'];
|
|
84
|
+
}
|
|
85
|
+
if (!options.since) {
|
|
86
|
+
params.since = parseSinceOption('PT6H');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Apply user-specified filters
|
|
90
|
+
if (options.since)
|
|
91
|
+
params.since = parseSinceOption(options.since);
|
|
92
|
+
if (options.processing)
|
|
93
|
+
params.processing = options.processing;
|
|
94
|
+
if (options.allVersions !== undefined)
|
|
95
|
+
params.latest = !options.allVersions;
|
|
96
|
+
if (options.state && options.state.length > 0)
|
|
97
|
+
params.state = options.state;
|
|
98
|
+
if (options.name && options.name.length > 0)
|
|
99
|
+
params.name = options.name;
|
|
100
|
+
if (options.id && options.id.length > 0)
|
|
101
|
+
params.id = options.id;
|
|
102
|
+
return params;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Override query summary to show job-specific filters
|
|
106
|
+
*/
|
|
107
|
+
generateQuerySummary(options, resultCount) {
|
|
108
|
+
const filters = [];
|
|
109
|
+
if (options.state)
|
|
110
|
+
filters.push(`state=${options.state.join(',')}`);
|
|
111
|
+
if (options.since)
|
|
112
|
+
filters.push(`since=${options.since}`);
|
|
113
|
+
if (options.processing)
|
|
114
|
+
filters.push(`processing=${options.processing}`);
|
|
115
|
+
filters.push(`allVersions=${!!options.allVersions}`);
|
|
116
|
+
if (options.name)
|
|
117
|
+
filters.push(`name=${options.name.join(',')}`);
|
|
118
|
+
if (options.sort)
|
|
119
|
+
filters.push(`sort=${options.sort}`);
|
|
120
|
+
const filterStr = filters.length > 0 ? filters.join(', ') : 'defaults (RUNNING,FINISHED since 6h)';
|
|
121
|
+
const duration = '0.8s'; // TODO: Track actual duration
|
|
122
|
+
return `\nQuery Summary:
|
|
123
|
+
- Filters: ${filterStr}
|
|
124
|
+
- Results: ${resultCount} jobs found
|
|
125
|
+
- Duration: ${duration}`;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Job CRUD command implementation using the new architecture
|
|
130
|
+
*/
|
|
131
|
+
export class JobCrudCommand extends CrudCommand {
|
|
132
|
+
streamingExecutor;
|
|
133
|
+
constructor() {
|
|
134
|
+
super();
|
|
135
|
+
this.streamingExecutor = new StreamingJobExecutor();
|
|
136
|
+
}
|
|
137
|
+
getCommandPrefix() {
|
|
138
|
+
return 'job';
|
|
139
|
+
}
|
|
140
|
+
getResourceName() {
|
|
141
|
+
return 'job';
|
|
142
|
+
}
|
|
143
|
+
getGetOptions() {
|
|
144
|
+
return [
|
|
145
|
+
{
|
|
146
|
+
flags: '--version <number>',
|
|
147
|
+
description: 'Get specific version',
|
|
148
|
+
parser: parseInt
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
flags: '--resolved',
|
|
152
|
+
description: 'Include resolved job definition'
|
|
153
|
+
}
|
|
154
|
+
];
|
|
155
|
+
}
|
|
156
|
+
getUpdateOptions() {
|
|
157
|
+
return [
|
|
158
|
+
{
|
|
159
|
+
flags: '--rollback-enabled',
|
|
160
|
+
description: 'Enable rollback capability'
|
|
161
|
+
}
|
|
162
|
+
];
|
|
163
|
+
}
|
|
164
|
+
async executeGet(jobId, options) {
|
|
165
|
+
try {
|
|
166
|
+
this.apiClient = this.createApiClient(options);
|
|
167
|
+
const job = await this.apiClient.getJob(jobId, options.version, options.resolved);
|
|
168
|
+
if (!job) {
|
|
169
|
+
console.error(`Job ${jobId} not found`);
|
|
170
|
+
process.exit(1);
|
|
171
|
+
}
|
|
172
|
+
await this.formatAndOutputSingle(job, options);
|
|
173
|
+
if (!options.quiet) {
|
|
174
|
+
console.log(`\nJob Details:
|
|
175
|
+
- ID: ${job.id}
|
|
176
|
+
- Name: ${job.name}
|
|
177
|
+
- State: ${job.state}
|
|
178
|
+
- Version: ${job.version || 'latest'}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.error(`Error getting job ${jobId}:`, error.message);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
async executeCreate(options) {
|
|
187
|
+
try {
|
|
188
|
+
// Load job definition to determine execution type
|
|
189
|
+
const jobDefinition = await this.loadJobDefinition(options.resourceFile);
|
|
190
|
+
// Route based on execution type
|
|
191
|
+
if (jobDefinition.execution === PathsV1JobsGetParametersQueryExecution.SYNCHRONOUS) {
|
|
192
|
+
await this.executeSynchronousJobCreate(jobDefinition, options);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
await this.executeAsynchronousJobCreate(jobDefinition, options);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.error('Error creating job:', error.message);
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async executeSynchronousJobCreate(jobDefinition, options) {
|
|
204
|
+
// Use the streaming job executor for synchronous jobs
|
|
205
|
+
await this.streamingExecutor.execute(jobDefinition, options);
|
|
206
|
+
}
|
|
207
|
+
async executeAsynchronousJobCreate(jobDefinition, options) {
|
|
208
|
+
this.apiClient = this.createApiClient(options);
|
|
209
|
+
const createdJob = await this.apiClient.createAsyncJob(jobDefinition);
|
|
210
|
+
if (createdJob) {
|
|
211
|
+
this.showCreateSuccess(createdJob, options);
|
|
212
|
+
await this.formatAndOutputSingle(createdJob, options);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async loadJobDefinition(jobFile) {
|
|
216
|
+
try {
|
|
217
|
+
if (!await fs.pathExists(jobFile)) {
|
|
218
|
+
throw new Error(`Job definition file not found: ${jobFile}`);
|
|
219
|
+
}
|
|
220
|
+
const jobDefinition = await fs.readJson(jobFile);
|
|
221
|
+
// Validate required fields
|
|
222
|
+
if (!jobDefinition.name || !jobDefinition.execution || !jobDefinition.processing) {
|
|
223
|
+
throw new Error('Invalid job definition: missing required fields (name, execution, processing)');
|
|
224
|
+
}
|
|
225
|
+
return jobDefinition;
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
throw new Error(`Failed to load job definition: ${error.message}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async executeUpdate(jobId, options) {
|
|
232
|
+
try {
|
|
233
|
+
this.apiClient = this.createApiClient(options);
|
|
234
|
+
const jobData = await this.loadResourceFromFile(options.resourceFile);
|
|
235
|
+
const updatedJob = await this.apiClient.updateJob(jobId, jobData, options.rollbackEnabled);
|
|
236
|
+
if (!updatedJob) {
|
|
237
|
+
console.error(`Failed to update job ${jobId}`);
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
this.showUpdateSuccess(jobId, options);
|
|
241
|
+
await this.formatAndOutputSingle(updatedJob, options);
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
console.error(`Error updating job ${jobId}:`, error.message);
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
async executeDelete(jobId, options) {
|
|
249
|
+
try {
|
|
250
|
+
this.apiClient = this.createApiClient(options);
|
|
251
|
+
await this.apiClient.deleteJob(jobId);
|
|
252
|
+
this.showDeleteSuccess(jobId, options);
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
console.error(`Error deleting job ${jobId}:`, error.message);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
addToProgram(program, mergeConfiguration) {
|
|
260
|
+
const prefix = this.getCommandPrefix();
|
|
261
|
+
const resourceName = this.getResourceName();
|
|
262
|
+
// Create command with sync-specific formatting options (matching original sync command)
|
|
263
|
+
if (this.supportsCreate()) {
|
|
264
|
+
program
|
|
265
|
+
.command(`${prefix}:create <${resourceName}-file>`)
|
|
266
|
+
.description(`Create a new ${resourceName} from file`)
|
|
267
|
+
.option('-f, --format <format>', 'Output format (table, csv, pretty, raw, compact)', 'table')
|
|
268
|
+
.option('-s, --sort <column:order>', 'Sort table by column (e.g., "eventTimestamp:asc")', 'eventTimestamp:asc')
|
|
269
|
+
.option('--no-color', 'Disable colored output')
|
|
270
|
+
.option('--no-timestamps', 'Hide timestamps')
|
|
271
|
+
.option('--no-job-state', 'Hide job state messages')
|
|
272
|
+
.action(async (resourceFile, options, command) => {
|
|
273
|
+
try {
|
|
274
|
+
const globalOptions = command.parent?.opts();
|
|
275
|
+
const mergedGlobalOptions = await mergeConfiguration(globalOptions);
|
|
276
|
+
const mergedOptions = {
|
|
277
|
+
...mergedGlobalOptions,
|
|
278
|
+
...options,
|
|
279
|
+
resourceFile
|
|
280
|
+
};
|
|
281
|
+
await this.executeCreate(mergedOptions);
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
285
|
+
console.error(`Error creating ${resourceName}:`, errorMessage);
|
|
286
|
+
process.exit(1);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
// Use parent's implementation for other CRUD operations (get, update, delete)
|
|
291
|
+
super.addToProgram(program, mergeConfiguration);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=job-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-command.js","sourceRoot":"","sources":["../../../src/main/typescript/commands/job-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { JsonFormatter } from '../lib/json-formatter.js';
|
|
3
|
+
import { ICommand } from '../lib/command-registry.js';
|
|
4
|
+
import { GreprApiClient } from '../lib/api-client.js';
|
|
5
|
+
import { ApiClientFactoryOptions } from '../lib/api-client-factory.js';
|
|
6
|
+
export interface ListCommandOptions extends ApiClientFactoryOptions {
|
|
7
|
+
quiet?: boolean;
|
|
8
|
+
timezone?: string;
|
|
9
|
+
output?: string;
|
|
10
|
+
format?: 'table' | 'csv' | 'pretty' | 'raw' | 'compact';
|
|
11
|
+
sort?: string;
|
|
12
|
+
color?: boolean;
|
|
13
|
+
timestamps?: boolean;
|
|
14
|
+
jobState?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Base class for list commands (job:list, integration:list, dataset:list)
|
|
18
|
+
* Provides common functionality for filtering, formatting, and output
|
|
19
|
+
*/
|
|
20
|
+
export declare abstract class ListCommand<T extends ListCommandOptions> implements ICommand {
|
|
21
|
+
protected formatter: JsonFormatter | null;
|
|
22
|
+
protected apiClient: GreprApiClient | null;
|
|
23
|
+
/**
|
|
24
|
+
* Get the command name (e.g., 'job:list', 'integration:list')
|
|
25
|
+
*/
|
|
26
|
+
abstract getCommandName(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Get the command description
|
|
29
|
+
*/
|
|
30
|
+
abstract getCommandDescription(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Get command-specific options
|
|
33
|
+
*/
|
|
34
|
+
abstract getCommandOptions(): Array<{
|
|
35
|
+
flags: string;
|
|
36
|
+
description: string;
|
|
37
|
+
defaultValue?: any;
|
|
38
|
+
parser?: (value: string) => any;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Execute the list operation
|
|
42
|
+
*/
|
|
43
|
+
abstract executeList(options: T): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Add this command to the program
|
|
46
|
+
*/
|
|
47
|
+
addToProgram(program: Command, mergeConfiguration: (options: any) => Promise<any>): void;
|
|
48
|
+
/**
|
|
49
|
+
* Setup formatter for output
|
|
50
|
+
*/
|
|
51
|
+
protected setupFormatter(options: T): void;
|
|
52
|
+
/**
|
|
53
|
+
* Create API client using shared factory
|
|
54
|
+
*/
|
|
55
|
+
protected createApiClient(options: T): GreprApiClient;
|
|
56
|
+
/**
|
|
57
|
+
* Format and output data
|
|
58
|
+
*/
|
|
59
|
+
protected formatAndOutput(data: Record<string, unknown>[], options: T, dataType: string): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Generate query summary showing applied filters and results
|
|
62
|
+
*/
|
|
63
|
+
protected generateQuerySummary(options: T, resultCount: number): string;
|
|
64
|
+
/**
|
|
65
|
+
* Show query summary if not in quiet mode
|
|
66
|
+
*/
|
|
67
|
+
protected showQuerySummary(options: T, resultCount: number): void;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=list-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-command.d.ts","sourceRoot":"","sources":["../../../src/main/typescript/commands/list-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAwB,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAmB,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAExF,MAAM,WAAW,kBAAmB,SAAQ,uBAAuB;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,8BAAsB,WAAW,CAAC,CAAC,SAAS,kBAAkB,CAAE,YAAW,QAAQ;IACjF,SAAS,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAAQ;IACjD,SAAS,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAQ;IAElD;;OAEG;IACH,QAAQ,CAAC,cAAc,IAAI,MAAM;IAEjC;;OAEG;IACH,QAAQ,CAAC,qBAAqB,IAAI,MAAM;IAExC;;OAEG;IACH,QAAQ,CAAC,iBAAiB,IAAI,KAAK,CAAC;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,GAAG,CAAC;QACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;KACjC,CAAC;IAEF;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/C;;OAEG;IACH,YAAY,CACV,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GACjD,IAAI;IA8CP;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI;IAgB1C;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,GAAG,cAAc;IAIrD;;OAEG;cACa,eAAe,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IA2BhB;;OAEG;IACH,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAiBvE;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;CAKlE"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { JsonFormatter } from '../lib/json-formatter.js';
|
|
2
|
+
import { createApiClient } from '../lib/api-client-factory.js';
|
|
3
|
+
/**
|
|
4
|
+
* Base class for list commands (job:list, integration:list, dataset:list)
|
|
5
|
+
* Provides common functionality for filtering, formatting, and output
|
|
6
|
+
*/
|
|
7
|
+
export class ListCommand {
|
|
8
|
+
formatter = null;
|
|
9
|
+
apiClient = null;
|
|
10
|
+
/**
|
|
11
|
+
* Add this command to the program
|
|
12
|
+
*/
|
|
13
|
+
addToProgram(program, mergeConfiguration) {
|
|
14
|
+
let command = program.command(this.getCommandName());
|
|
15
|
+
// Set aliases for common commands
|
|
16
|
+
if (this.getCommandName() === 'job:list') {
|
|
17
|
+
command = command.alias('jobs');
|
|
18
|
+
}
|
|
19
|
+
else if (this.getCommandName() === 'dataset:list') {
|
|
20
|
+
command = command.alias('datasets');
|
|
21
|
+
}
|
|
22
|
+
command = command.description(this.getCommandDescription());
|
|
23
|
+
// Add command-specific options
|
|
24
|
+
this.getCommandOptions().forEach(option => {
|
|
25
|
+
if (option.parser) {
|
|
26
|
+
command = command.option(option.flags, option.description, option.parser, option.defaultValue);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
command = command.option(option.flags, option.description, option.defaultValue);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
// Add common formatting options
|
|
33
|
+
command
|
|
34
|
+
.option('-f, --format <format>', 'Output format (table, csv, pretty, raw, compact)', 'table')
|
|
35
|
+
.option('-s, --sort <column:order>', 'Sort by column (e.g., "name:asc")', 'id:asc')
|
|
36
|
+
.option('--no-color', 'Disable colored output')
|
|
37
|
+
.option('--no-timestamps', 'Hide timestamps')
|
|
38
|
+
.option('--no-job-state', 'Hide job state messages')
|
|
39
|
+
.action(async (options, command) => {
|
|
40
|
+
try {
|
|
41
|
+
const globalOptions = command.parent?.opts();
|
|
42
|
+
const mergedGlobalOptions = await mergeConfiguration(globalOptions);
|
|
43
|
+
const mergedOptions = {
|
|
44
|
+
...mergedGlobalOptions,
|
|
45
|
+
...options
|
|
46
|
+
};
|
|
47
|
+
await this.executeList(mergedOptions);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
51
|
+
console.error(`Error executing ${this.getCommandName()}:`, errorMessage);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Setup formatter for output
|
|
58
|
+
*/
|
|
59
|
+
setupFormatter(options) {
|
|
60
|
+
const formatterOptions = {
|
|
61
|
+
format: options.format || 'table',
|
|
62
|
+
showTimestamps: options.timestamps !== false,
|
|
63
|
+
colorize: options.color !== false && process.stdout.isTTY && !options.output,
|
|
64
|
+
sortBy: options.sort || 'id:asc'
|
|
65
|
+
};
|
|
66
|
+
// Only add timezone if it's defined
|
|
67
|
+
if (options.timezone) {
|
|
68
|
+
formatterOptions.timezone = options.timezone;
|
|
69
|
+
}
|
|
70
|
+
this.formatter = new JsonFormatter(formatterOptions);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create API client using shared factory
|
|
74
|
+
*/
|
|
75
|
+
createApiClient(options) {
|
|
76
|
+
return createApiClient(options);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Format and output data
|
|
80
|
+
*/
|
|
81
|
+
async formatAndOutput(data, options, dataType) {
|
|
82
|
+
if (!data || data.length === 0) {
|
|
83
|
+
if (!options.quiet) {
|
|
84
|
+
console.log(`No ${dataType} found.`);
|
|
85
|
+
}
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Setup formatter
|
|
89
|
+
this.setupFormatter(options);
|
|
90
|
+
// Handle output
|
|
91
|
+
if (options.output) {
|
|
92
|
+
// Write to file
|
|
93
|
+
const formattedData = this.formatter.formatObjects(data);
|
|
94
|
+
const fs = await import('fs-extra');
|
|
95
|
+
await fs.writeFile(options.output, formattedData);
|
|
96
|
+
if (!options.quiet) {
|
|
97
|
+
console.log(`✓ Output written to ${options.output}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// Write to stdout
|
|
102
|
+
console.log(this.formatter.formatObjects(data));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Generate query summary showing applied filters and results
|
|
107
|
+
*/
|
|
108
|
+
generateQuerySummary(options, resultCount) {
|
|
109
|
+
const filters = [];
|
|
110
|
+
const duration = '0.5s'; // TODO: Track actual duration
|
|
111
|
+
// Add filters based on options (subclasses can override)
|
|
112
|
+
if (options.sort) {
|
|
113
|
+
filters.push(`sort=${options.sort}`);
|
|
114
|
+
}
|
|
115
|
+
const filterStr = filters.length > 0 ? filters.join(', ') : 'none';
|
|
116
|
+
return `\nQuery Summary:
|
|
117
|
+
- Filters: ${filterStr}
|
|
118
|
+
- Results: ${resultCount} ${this.getCommandName().split(':')[0]}s found
|
|
119
|
+
- Duration: ${duration}`;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Show query summary if not in quiet mode
|
|
123
|
+
*/
|
|
124
|
+
showQuerySummary(options, resultCount) {
|
|
125
|
+
if (!options.quiet) {
|
|
126
|
+
console.log(this.generateQuerySummary(options, resultCount));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=list-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-command.js","sourceRoot":"","sources":["../../../src/main/typescript/commands/list-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { BaseCommand } from './base-command.js';
|
|
3
|
+
import { ICommand } from '../lib/command-registry.js';
|
|
4
|
+
import { QueryCommandOptions } from '../types.js';
|
|
5
|
+
export declare class QueryCommand extends BaseCommand<QueryCommandOptions> implements ICommand {
|
|
6
|
+
getCommandName(): string;
|
|
7
|
+
getCommandDescription(): string;
|
|
8
|
+
getCommandOptions(): Array<{
|
|
9
|
+
flags: string;
|
|
10
|
+
description: string;
|
|
11
|
+
defaultValue?: any;
|
|
12
|
+
parser?: (value: string) => any;
|
|
13
|
+
}>;
|
|
14
|
+
addToProgram(program: Command, mergeConfiguration: (options: any) => Promise<any>): void;
|
|
15
|
+
execute(options: QueryCommandOptions): Promise<void>;
|
|
16
|
+
private validateQueryOptions;
|
|
17
|
+
private resolveDatasetId;
|
|
18
|
+
private createJobDefinition;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=query-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-command.d.ts","sourceRoot":"","sources":["../../../src/main/typescript/commands/query-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAiB,MAAM,aAAa,CAAC;AAEjE,qBAAa,YAAa,SAAQ,WAAW,CAAC,mBAAmB,CAAE,YAAW,QAAQ;IAEpF,cAAc,IAAI,MAAM;IAIxB,qBAAqB,IAAI,MAAM;IAI/B,iBAAiB,IAAI,KAAK,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,GAAG,CAAC;QACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;KACjC,CAAC;IA8CF,YAAY,CACV,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GACjD,IAAI;IAsCD,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB1D,OAAO,CAAC,oBAAoB;YAYd,gBAAgB;YAkBhB,mBAAmB;CAqClC"}
|