@decencia/ch-cli 1.0.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 (101) hide show
  1. package/dist/client.d.ts +15 -0
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +117 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/commands/archives.d.ts +3 -0
  6. package/dist/commands/archives.d.ts.map +1 -0
  7. package/dist/commands/archives.js +371 -0
  8. package/dist/commands/archives.js.map +1 -0
  9. package/dist/commands/auth.d.ts +3 -0
  10. package/dist/commands/auth.d.ts.map +1 -0
  11. package/dist/commands/auth.js +149 -0
  12. package/dist/commands/auth.js.map +1 -0
  13. package/dist/commands/dashboard.d.ts +3 -0
  14. package/dist/commands/dashboard.d.ts.map +1 -0
  15. package/dist/commands/dashboard.js +115 -0
  16. package/dist/commands/dashboard.js.map +1 -0
  17. package/dist/commands/db-schema.d.ts +3 -0
  18. package/dist/commands/db-schema.d.ts.map +1 -0
  19. package/dist/commands/db-schema.js +76 -0
  20. package/dist/commands/db-schema.js.map +1 -0
  21. package/dist/commands/dev-status.d.ts +3 -0
  22. package/dist/commands/dev-status.d.ts.map +1 -0
  23. package/dist/commands/dev-status.js +175 -0
  24. package/dist/commands/dev-status.js.map +1 -0
  25. package/dist/commands/init.d.ts +3 -0
  26. package/dist/commands/init.d.ts.map +1 -0
  27. package/dist/commands/init.js +124 -0
  28. package/dist/commands/init.js.map +1 -0
  29. package/dist/commands/invitations.d.ts +3 -0
  30. package/dist/commands/invitations.d.ts.map +1 -0
  31. package/dist/commands/invitations.js +48 -0
  32. package/dist/commands/invitations.js.map +1 -0
  33. package/dist/commands/members.d.ts +3 -0
  34. package/dist/commands/members.d.ts.map +1 -0
  35. package/dist/commands/members.js +93 -0
  36. package/dist/commands/members.js.map +1 -0
  37. package/dist/commands/notifications.d.ts +3 -0
  38. package/dist/commands/notifications.d.ts.map +1 -0
  39. package/dist/commands/notifications.js +163 -0
  40. package/dist/commands/notifications.js.map +1 -0
  41. package/dist/commands/prd.d.ts +3 -0
  42. package/dist/commands/prd.d.ts.map +1 -0
  43. package/dist/commands/prd.js +74 -0
  44. package/dist/commands/prd.js.map +1 -0
  45. package/dist/commands/projects.d.ts +3 -0
  46. package/dist/commands/projects.d.ts.map +1 -0
  47. package/dist/commands/projects.js +215 -0
  48. package/dist/commands/projects.js.map +1 -0
  49. package/dist/commands/qna.d.ts +3 -0
  50. package/dist/commands/qna.d.ts.map +1 -0
  51. package/dist/commands/qna.js +211 -0
  52. package/dist/commands/qna.js.map +1 -0
  53. package/dist/commands/specs.d.ts +3 -0
  54. package/dist/commands/specs.d.ts.map +1 -0
  55. package/dist/commands/specs.js +277 -0
  56. package/dist/commands/specs.js.map +1 -0
  57. package/dist/commands/sprints.d.ts +3 -0
  58. package/dist/commands/sprints.d.ts.map +1 -0
  59. package/dist/commands/sprints.js +262 -0
  60. package/dist/commands/sprints.js.map +1 -0
  61. package/dist/commands/sqa.d.ts +3 -0
  62. package/dist/commands/sqa.d.ts.map +1 -0
  63. package/dist/commands/sqa.js +452 -0
  64. package/dist/commands/sqa.js.map +1 -0
  65. package/dist/config.d.ts +28 -0
  66. package/dist/config.d.ts.map +1 -0
  67. package/dist/config.js +115 -0
  68. package/dist/config.js.map +1 -0
  69. package/dist/index.d.ts +3 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +97 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/output.d.ts +13 -0
  74. package/dist/output.d.ts.map +1 -0
  75. package/dist/output.js +174 -0
  76. package/dist/output.js.map +1 -0
  77. package/dist/utils.d.ts +2 -0
  78. package/dist/utils.d.ts.map +1 -0
  79. package/dist/utils.js +7 -0
  80. package/dist/utils.js.map +1 -0
  81. package/package.json +33 -0
  82. package/src/client.ts +137 -0
  83. package/src/commands/archives.ts +334 -0
  84. package/src/commands/auth.ts +154 -0
  85. package/src/commands/dashboard.ts +112 -0
  86. package/src/commands/db-schema.ts +74 -0
  87. package/src/commands/dev-status.ts +166 -0
  88. package/src/commands/init.ts +92 -0
  89. package/src/commands/members.ts +92 -0
  90. package/src/commands/notifications.ts +169 -0
  91. package/src/commands/prd.ts +72 -0
  92. package/src/commands/projects.ts +207 -0
  93. package/src/commands/qna.ts +205 -0
  94. package/src/commands/specs.ts +257 -0
  95. package/src/commands/sprints.ts +255 -0
  96. package/src/commands/sqa.ts +422 -0
  97. package/src/config.ts +98 -0
  98. package/src/index.ts +69 -0
  99. package/src/output.ts +186 -0
  100. package/src/utils.ts +3 -0
  101. package/tsconfig.json +18 -0
@@ -0,0 +1,452 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.registerSqaCommand = registerSqaCommand;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const form_data_1 = __importDefault(require("form-data"));
43
+ const client_1 = require("../client");
44
+ const output_1 = require("../output");
45
+ function registerSqaCommand(program) {
46
+ const sqa = program
47
+ .command('sqa')
48
+ .description('SQA 관리 (시트 + 수행)');
49
+ // ══════════════════════════════════════════════════
50
+ // Sheet (시트 템플릿) commands
51
+ // ══════════════════════════════════════════════════
52
+ // ch sqa list — 시트 목록
53
+ sqa
54
+ .command('list')
55
+ .description('SQA 시트 목록 조회')
56
+ .option('--sort <field>', '정렬 필드')
57
+ .option('--desc', '내림차순 정렬')
58
+ .option('--page <number>', '페이지 번호', '1')
59
+ .action(async (options) => {
60
+ const globalOpts = program.opts();
61
+ try {
62
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
63
+ const params = {};
64
+ if (options.sort)
65
+ params.sortBy = options.sort;
66
+ if (options.desc)
67
+ params.sortOrder = 'desc';
68
+ params.page = parseInt(options.page, 10);
69
+ const { data } = await client.get('/sqa', { params });
70
+ (0, output_1.formatOutput)(data, globalOpts);
71
+ }
72
+ catch (error) {
73
+ // Error already handled
74
+ }
75
+ });
76
+ // ch sqa get <sheetId> — 시트 상세
77
+ sqa
78
+ .command('get <sheetId>')
79
+ .description('SQA 시트 상세 조회')
80
+ .action(async (sheetId) => {
81
+ const globalOpts = program.opts();
82
+ try {
83
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
84
+ const { data } = await client.get(`/sqa/${sheetId}`);
85
+ (0, output_1.formatOutput)(data, globalOpts);
86
+ }
87
+ catch (error) {
88
+ // Error already handled
89
+ }
90
+ });
91
+ // ch sqa create — 시트 생성
92
+ sqa
93
+ .command('create')
94
+ .description('SQA 시트 생성')
95
+ .requiredOption('--name <name>', '시트명')
96
+ .action(async (options) => {
97
+ const globalOpts = program.opts();
98
+ try {
99
+ if (globalOpts.dryRun) {
100
+ (0, output_1.printInfo)(`[DRY-RUN] SQA 시트 "${options.name}" 생성 요청`);
101
+ return;
102
+ }
103
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
104
+ const { data } = await client.post('/sqa', {
105
+ name: options.name,
106
+ });
107
+ (0, output_1.formatOutput)(data, globalOpts);
108
+ (0, output_1.printSuccess)('SQA 시트가 생성되었습니다.');
109
+ }
110
+ catch (error) {
111
+ // Error already handled
112
+ }
113
+ });
114
+ // ch sqa update <sheetId> — 시트 수정
115
+ sqa
116
+ .command('update <sheetId>')
117
+ .description('SQA 시트 수정')
118
+ .option('--name <name>', '시트명')
119
+ .action(async (sheetId, options) => {
120
+ const globalOpts = program.opts();
121
+ try {
122
+ if (globalOpts.dryRun) {
123
+ (0, output_1.printInfo)(`[DRY-RUN] SQA 시트 "${sheetId}" 수정 요청`);
124
+ return;
125
+ }
126
+ const body = {};
127
+ if (options.name)
128
+ body.name = options.name;
129
+ if (Object.keys(body).length === 0) {
130
+ (0, output_1.printError)('수정할 필드를 지정하세요 (--name).');
131
+ return;
132
+ }
133
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
134
+ const { data } = await client.patch(`/sqa/${sheetId}`, body);
135
+ (0, output_1.formatOutput)(data, globalOpts);
136
+ (0, output_1.printSuccess)('SQA 시트가 수정되었습니다.');
137
+ }
138
+ catch (error) {
139
+ // Error already handled
140
+ }
141
+ });
142
+ // ch sqa delete <sheetId> — 시트 삭제
143
+ sqa
144
+ .command('delete <sheetId>')
145
+ .description('SQA 시트 삭제')
146
+ .action(async (sheetId) => {
147
+ const globalOpts = program.opts();
148
+ try {
149
+ if (globalOpts.dryRun) {
150
+ (0, output_1.printInfo)(`[DRY-RUN] SQA 시트 "${sheetId}" 삭제 요청`);
151
+ return;
152
+ }
153
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
154
+ await client.delete(`/sqa/${sheetId}`);
155
+ (0, output_1.printSuccess)('SQA 시트가 삭제되었습니다.');
156
+ }
157
+ catch (error) {
158
+ // Error already handled
159
+ }
160
+ });
161
+ // ch sqa add-item <sheetId> — 시트에 테스트 항목 추가
162
+ sqa
163
+ .command('add-item <sheetId>')
164
+ .description('SQA 시트에 테스트 항목 추가')
165
+ .requiredOption('--test <testItem>', '테스트 항목명')
166
+ .option('--spec <specId>', '관련 기능명세 ID')
167
+ .action(async (sheetId, options) => {
168
+ const globalOpts = program.opts();
169
+ try {
170
+ if (globalOpts.dryRun) {
171
+ (0, output_1.printInfo)(`[DRY-RUN] SQA 시트 "${sheetId}"에 항목 추가 요청`);
172
+ return;
173
+ }
174
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
175
+ const { data } = await client.post(`/sqa/${sheetId}/items`, {
176
+ testItem: options.test,
177
+ relatedSpec: options.spec || '',
178
+ });
179
+ (0, output_1.formatOutput)(data, globalOpts);
180
+ (0, output_1.printSuccess)('테스트 항목이 추가되었습니다.');
181
+ }
182
+ catch (error) {
183
+ // Error already handled
184
+ }
185
+ });
186
+ // ══════════════════════════════════════════════════
187
+ // Run (수행) commands
188
+ // ══════════════════════════════════════════════════
189
+ // ch sqa start-run <sheetId> — 시트 기반 수행 시작
190
+ sqa
191
+ .command('start-run <sheetId>')
192
+ .description('시트 기반 SQA 수행 시작 (항목을 스냅샷하여 Run 생성)')
193
+ .requiredOption('--date <date>', '수행일 (YYYY-MM-DD)')
194
+ .action(async (sheetId, options) => {
195
+ const globalOpts = program.opts();
196
+ try {
197
+ if (globalOpts.dryRun) {
198
+ (0, output_1.printInfo)(`[DRY-RUN] SQA 시트 "${sheetId}" 기반 수행 시작 요청`);
199
+ return;
200
+ }
201
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
202
+ const { data } = await client.post(`/sqa/${sheetId}/start-run`, {
203
+ performDate: options.date,
204
+ });
205
+ (0, output_1.formatOutput)(data, globalOpts);
206
+ (0, output_1.printSuccess)('SQA 수행이 시작되었습니다.');
207
+ }
208
+ catch (error) {
209
+ // Error already handled
210
+ }
211
+ });
212
+ // ch sqa runs — 수행 목록
213
+ sqa
214
+ .command('runs')
215
+ .description('SQA 수행 목록 조회')
216
+ .option('--sort <field>', '정렬 필드')
217
+ .option('--desc', '내림차순 정렬')
218
+ .option('--page <number>', '페이지 번호', '1')
219
+ .action(async (options) => {
220
+ const globalOpts = program.opts();
221
+ try {
222
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
223
+ const params = {};
224
+ if (options.sort)
225
+ params.sortBy = options.sort;
226
+ if (options.desc)
227
+ params.sortOrder = 'desc';
228
+ params.page = parseInt(options.page, 10);
229
+ const { data } = await client.get('/sqa/runs/list', { params });
230
+ (0, output_1.formatOutput)(data, globalOpts);
231
+ }
232
+ catch (error) {
233
+ // Error already handled
234
+ }
235
+ });
236
+ // ch sqa run <runId> — 수행 상세
237
+ sqa
238
+ .command('run <runId>')
239
+ .description('SQA 수행 상세 조회')
240
+ .action(async (runId) => {
241
+ const globalOpts = program.opts();
242
+ try {
243
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
244
+ const { data } = await client.get(`/sqa/runs/${runId}`);
245
+ (0, output_1.formatOutput)(data, globalOpts);
246
+ }
247
+ catch (error) {
248
+ // Error already handled
249
+ }
250
+ });
251
+ // ch sqa check <runId> <itemId> — 수행 항목 체크
252
+ sqa
253
+ .command('check <runId> <itemId>')
254
+ .description('SQA 수행 항목 검토결과 체크')
255
+ .requiredOption('--result <result>', '결과 (yes|no)')
256
+ .option('--note <note>', '비고')
257
+ .action(async (runId, itemId, options) => {
258
+ const globalOpts = program.opts();
259
+ try {
260
+ if (globalOpts.dryRun) {
261
+ (0, output_1.printInfo)(`[DRY-RUN] SQA Run "${runId}" 항목 "${itemId}" 체크 요청`);
262
+ return;
263
+ }
264
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
265
+ const body = { result: options.result };
266
+ if (options.note)
267
+ body.note = options.note;
268
+ const { data } = await client.patch(`/sqa/runs/${runId}/items/${itemId}/check`, body);
269
+ (0, output_1.formatOutput)(data, globalOpts);
270
+ (0, output_1.printSuccess)('검토결과가 체크되었습니다.');
271
+ }
272
+ catch (error) {
273
+ // Error already handled
274
+ }
275
+ });
276
+ // ch sqa check-bulk <runId> — 수행 항목 일괄 체크
277
+ sqa
278
+ .command('check-bulk <runId>')
279
+ .description('SQA 수행 여러 항목 일괄 체크')
280
+ .requiredOption('--file <filePath>', '결과 JSON 파일 경로')
281
+ .action(async (runId, options) => {
282
+ const globalOpts = program.opts();
283
+ try {
284
+ if (globalOpts.dryRun) {
285
+ (0, output_1.printInfo)(`[DRY-RUN] SQA Run "${runId}" 일괄 체크 요청`);
286
+ return;
287
+ }
288
+ const filePath = path.resolve(options.file);
289
+ if (!fs.existsSync(filePath)) {
290
+ (0, output_1.printError)(`파일을 찾을 수 없습니다: ${filePath}`);
291
+ return;
292
+ }
293
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
294
+ let results;
295
+ try {
296
+ results = JSON.parse(fileContent);
297
+ }
298
+ catch {
299
+ (0, output_1.printError)('파일이 올바른 JSON 형식이 아닙니다.');
300
+ return;
301
+ }
302
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
303
+ const { data } = await client.post(`/sqa/runs/${runId}/items/check-bulk`, results);
304
+ (0, output_1.formatOutput)(data, globalOpts);
305
+ (0, output_1.printSuccess)('일괄 체크가 완료되었습니다.');
306
+ }
307
+ catch (error) {
308
+ // Error already handled
309
+ }
310
+ });
311
+ // ch sqa complete <runId> — 수행 완료
312
+ sqa
313
+ .command('complete <runId>')
314
+ .description('SQA 수행 완료')
315
+ .action(async (runId) => {
316
+ const globalOpts = program.opts();
317
+ try {
318
+ if (globalOpts.dryRun) {
319
+ (0, output_1.printInfo)(`[DRY-RUN] SQA Run "${runId}" 수행 완료 요청`);
320
+ return;
321
+ }
322
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
323
+ const { data } = await client.post(`/sqa/runs/${runId}/complete`);
324
+ (0, output_1.formatOutput)(data, globalOpts);
325
+ (0, output_1.printSuccess)('SQA 수행이 완료되었습니다.');
326
+ }
327
+ catch (error) {
328
+ // Error already handled
329
+ }
330
+ });
331
+ // ch sqa summary <runId> — 수행 집계
332
+ sqa
333
+ .command('summary <runId>')
334
+ .description('SQA 수행 Pass/Fail 집계 조회')
335
+ .action(async (runId) => {
336
+ const globalOpts = program.opts();
337
+ try {
338
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
339
+ const { data } = await client.get(`/sqa/runs/${runId}/summary`);
340
+ (0, output_1.formatOutput)(data, globalOpts);
341
+ }
342
+ catch (error) {
343
+ // Error already handled
344
+ }
345
+ });
346
+ // ch sqa export <runId> — 수행 엑셀 Export
347
+ sqa
348
+ .command('export <runId>')
349
+ .description('SQA 수행 엑셀 Export')
350
+ .requiredOption('--output <filePath>', '출력 파일 경로')
351
+ .action(async (runId, options) => {
352
+ const globalOpts = program.opts();
353
+ try {
354
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
355
+ const response = await client.get(`/sqa/runs/${runId}/export`, {
356
+ responseType: 'arraybuffer',
357
+ });
358
+ const outputPath = path.resolve(options.output);
359
+ fs.writeFileSync(outputPath, Buffer.from(response.data));
360
+ (0, output_1.printSuccess)(`엑셀 파일이 저장되었습니다: ${outputPath}`);
361
+ }
362
+ catch (error) {
363
+ // Error already handled
364
+ }
365
+ });
366
+ // ch sqa delete-run <runId> — 수행 삭제
367
+ sqa
368
+ .command('delete-run <runId>')
369
+ .description('SQA 수행 삭제')
370
+ .action(async (runId) => {
371
+ const globalOpts = program.opts();
372
+ try {
373
+ if (globalOpts.dryRun) {
374
+ (0, output_1.printInfo)(`[DRY-RUN] SQA Run "${runId}" 삭제 요청`);
375
+ return;
376
+ }
377
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
378
+ await client.delete(`/sqa/runs/${runId}`);
379
+ (0, output_1.printSuccess)('SQA 수행이 삭제되었습니다.');
380
+ }
381
+ catch (error) {
382
+ // Error already handled
383
+ }
384
+ });
385
+ // ══════════════════════════════════════════════════
386
+ // Import (엑셀 → 시트)
387
+ // ══════════════════════════════════════════════════
388
+ sqa
389
+ .command('import')
390
+ .description('SQA 엑셀 Import (시트 생성)')
391
+ .requiredOption('--file <filePath>', '엑셀 파일 경로')
392
+ .option('--name <name>', '시트명')
393
+ .option('--date <date>', '수행일')
394
+ .action(async (options) => {
395
+ const globalOpts = program.opts();
396
+ try {
397
+ if (globalOpts.dryRun) {
398
+ (0, output_1.printInfo)('[DRY-RUN] SQA 엑셀 Import 요청');
399
+ return;
400
+ }
401
+ const filePath = path.resolve(options.file);
402
+ if (!fs.existsSync(filePath)) {
403
+ (0, output_1.printError)(`파일을 찾을 수 없습니다: ${filePath}`);
404
+ return;
405
+ }
406
+ const form = new form_data_1.default();
407
+ form.append('file', fs.createReadStream(filePath));
408
+ if (options.name)
409
+ form.append('name', options.name);
410
+ if (options.date)
411
+ form.append('performDate', options.date);
412
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
413
+ const { data } = await client.post('/sqa/import', form, {
414
+ headers: {
415
+ ...form.getHeaders(),
416
+ },
417
+ });
418
+ (0, output_1.formatOutput)(data, globalOpts);
419
+ (0, output_1.printSuccess)('SQA 엑셀 Import가 완료되었습니다.');
420
+ }
421
+ catch (error) {
422
+ // Error already handled
423
+ }
424
+ });
425
+ sqa
426
+ .command('import-preview')
427
+ .description('SQA 엑셀 Import 미리보기')
428
+ .requiredOption('--file <filePath>', '엑셀 파일 경로')
429
+ .action(async (options) => {
430
+ const globalOpts = program.opts();
431
+ try {
432
+ const filePath = path.resolve(options.file);
433
+ if (!fs.existsSync(filePath)) {
434
+ (0, output_1.printError)(`파일을 찾을 수 없습니다: ${filePath}`);
435
+ return;
436
+ }
437
+ const form = new form_data_1.default();
438
+ form.append('file', fs.createReadStream(filePath));
439
+ const client = (0, client_1.createClient)({ projectId: globalOpts.project });
440
+ const { data } = await client.post('/sqa/import-preview', form, {
441
+ headers: {
442
+ ...form.getHeaders(),
443
+ },
444
+ });
445
+ (0, output_1.formatOutput)(data, globalOpts);
446
+ }
447
+ catch (error) {
448
+ // Error already handled
449
+ }
450
+ });
451
+ }
452
+ //# sourceMappingURL=sqa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqa.js","sourceRoot":"","sources":["../../src/commands/sqa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface ChConfig {
2
+ apiKey: string;
3
+ projectId: string;
4
+ apiUrl: string;
5
+ defaultFormat: 'table' | 'json' | 'csv';
6
+ }
7
+ export interface ChProjectLocal {
8
+ projectId: string;
9
+ projectName?: string;
10
+ }
11
+ export interface ProjectContext {
12
+ projectId: string;
13
+ projectName?: string;
14
+ source: 'cli-option' | 'local' | 'global';
15
+ }
16
+ export declare function loadConfig(): ChConfig | null;
17
+ /**
18
+ * Search for .ch-project file from cwd upward.
19
+ */
20
+ export declare function findLocalProject(): ChProjectLocal | null;
21
+ /**
22
+ * Resolve projectId with priority: CLI --project > .ch-project > ~/.ch/config.json
23
+ */
24
+ export declare function getProjectContext(cliProjectId?: string): ProjectContext | null;
25
+ export declare function saveConfig(config: ChConfig): void;
26
+ export declare function clearConfig(): void;
27
+ export declare function getConfigPath(): string;
28
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;CAC3C;AAMD,wBAAgB,UAAU,IAAI,QAAQ,GAAG,IAAI,CAU5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,GAAG,IAAI,CAkBxD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgB9E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAKjD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
package/dist/config.js ADDED
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loadConfig = loadConfig;
37
+ exports.findLocalProject = findLocalProject;
38
+ exports.getProjectContext = getProjectContext;
39
+ exports.saveConfig = saveConfig;
40
+ exports.clearConfig = clearConfig;
41
+ exports.getConfigPath = getConfigPath;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ const CONFIG_DIR = path.join(os.homedir(), '.ch');
46
+ const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
47
+ const LOCAL_PROJECT_FILE = '.ch-project';
48
+ function loadConfig() {
49
+ try {
50
+ if (!fs.existsSync(CONFIG_FILE)) {
51
+ return null;
52
+ }
53
+ const raw = fs.readFileSync(CONFIG_FILE, 'utf-8');
54
+ return JSON.parse(raw);
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ /**
61
+ * Search for .ch-project file from cwd upward.
62
+ */
63
+ function findLocalProject() {
64
+ try {
65
+ let dir = process.cwd();
66
+ const root = path.parse(dir).root;
67
+ while (true) {
68
+ const filePath = path.join(dir, LOCAL_PROJECT_FILE);
69
+ if (fs.existsSync(filePath)) {
70
+ const raw = fs.readFileSync(filePath, 'utf-8');
71
+ return JSON.parse(raw);
72
+ }
73
+ const parent = path.dirname(dir);
74
+ if (parent === dir || dir === root)
75
+ break;
76
+ dir = parent;
77
+ }
78
+ }
79
+ catch {
80
+ // ignore parse errors
81
+ }
82
+ return null;
83
+ }
84
+ /**
85
+ * Resolve projectId with priority: CLI --project > .ch-project > ~/.ch/config.json
86
+ */
87
+ function getProjectContext(cliProjectId) {
88
+ if (cliProjectId) {
89
+ return { projectId: cliProjectId, source: 'cli-option' };
90
+ }
91
+ const local = findLocalProject();
92
+ if (local?.projectId) {
93
+ return { projectId: local.projectId, projectName: local.projectName, source: 'local' };
94
+ }
95
+ const global = loadConfig();
96
+ if (global?.projectId) {
97
+ return { projectId: global.projectId, source: 'global' };
98
+ }
99
+ return null;
100
+ }
101
+ function saveConfig(config) {
102
+ if (!fs.existsSync(CONFIG_DIR)) {
103
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
104
+ }
105
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
106
+ }
107
+ function clearConfig() {
108
+ if (fs.existsSync(CONFIG_FILE)) {
109
+ fs.unlinkSync(CONFIG_FILE);
110
+ }
111
+ }
112
+ function getConfigPath() {
113
+ return CONFIG_FILE;
114
+ }
115
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}