@faros-fde-sandbox/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 (48) hide show
  1. package/LICENSE +17 -0
  2. package/README.md +416 -0
  3. package/bin/faros +3 -0
  4. package/lib/commands/logs/index.d.ts +3 -0
  5. package/lib/commands/logs/index.d.ts.map +1 -0
  6. package/lib/commands/logs/index.js +162 -0
  7. package/lib/commands/logs/index.js.map +1 -0
  8. package/lib/commands/sources/index.d.ts +3 -0
  9. package/lib/commands/sources/index.d.ts.map +1 -0
  10. package/lib/commands/sources/index.js +99 -0
  11. package/lib/commands/sources/index.js.map +1 -0
  12. package/lib/commands/sync/ci-cd.d.ts +3 -0
  13. package/lib/commands/sync/ci-cd.d.ts.map +1 -0
  14. package/lib/commands/sync/ci-cd.js +188 -0
  15. package/lib/commands/sync/ci-cd.js.map +1 -0
  16. package/lib/commands/sync/index.d.ts +3 -0
  17. package/lib/commands/sync/index.d.ts.map +1 -0
  18. package/lib/commands/sync/index.js +25 -0
  19. package/lib/commands/sync/index.js.map +1 -0
  20. package/lib/commands/sync/tests.d.ts +3 -0
  21. package/lib/commands/sync/tests.d.ts.map +1 -0
  22. package/lib/commands/sync/tests.js +317 -0
  23. package/lib/commands/sync/tests.js.map +1 -0
  24. package/lib/config/loader.d.ts +5 -0
  25. package/lib/config/loader.d.ts.map +1 -0
  26. package/lib/config/loader.js +137 -0
  27. package/lib/config/loader.js.map +1 -0
  28. package/lib/index.d.ts +3 -0
  29. package/lib/index.d.ts.map +1 -0
  30. package/lib/index.js +73 -0
  31. package/lib/index.js.map +1 -0
  32. package/lib/lib/api/client.d.ts +8 -0
  33. package/lib/lib/api/client.d.ts.map +1 -0
  34. package/lib/lib/api/client.js +43 -0
  35. package/lib/lib/api/client.js.map +1 -0
  36. package/lib/lib/sources/s3.d.ts +19 -0
  37. package/lib/lib/sources/s3.d.ts.map +1 -0
  38. package/lib/lib/sources/s3.js +139 -0
  39. package/lib/lib/sources/s3.js.map +1 -0
  40. package/lib/lib/ui/index.d.ts +32 -0
  41. package/lib/lib/ui/index.d.ts.map +1 -0
  42. package/lib/lib/ui/index.js +88 -0
  43. package/lib/lib/ui/index.js.map +1 -0
  44. package/lib/types/config.d.ts +160 -0
  45. package/lib/types/config.d.ts.map +1 -0
  46. package/lib/types/config.js +40 -0
  47. package/lib/types/config.js.map +1 -0
  48. package/package.json +74 -0
@@ -0,0 +1,19 @@
1
+ import { S3Client } from '@aws-sdk/client-s3';
2
+ export interface S3Config {
3
+ readonly region?: string;
4
+ readonly accessKeyId?: string;
5
+ readonly secretAccessKey?: string;
6
+ readonly endpoint?: string;
7
+ readonly profile?: string;
8
+ }
9
+ export declare function createS3Client(config: S3Config): S3Client;
10
+ export interface S3Uri {
11
+ bucket: string;
12
+ key: string;
13
+ }
14
+ export declare function parseS3Uri(uri: string): S3Uri;
15
+ export declare function listS3Objects(client: S3Client, bucket: string, prefix: string, pattern?: string): Promise<string[]>;
16
+ export declare function downloadS3Object(client: S3Client, bucket: string, key: string): Promise<string>;
17
+ export declare function downloadS3Objects(client: S3Client, bucket: string, keys: string[]): Promise<string[]>;
18
+ export declare function cleanupTempFiles(files: string[]): void;
19
+ //# sourceMappingURL=s3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../../../src/lib/sources/s3.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAIT,MAAM,oBAAoB,CAAC;AAM5B,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAuBzD;AAED,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAW7C;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CA2BnB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAUtD"}
@@ -0,0 +1,139 @@
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.createS3Client = createS3Client;
37
+ exports.parseS3Uri = parseS3Uri;
38
+ exports.listS3Objects = listS3Objects;
39
+ exports.downloadS3Object = downloadS3Object;
40
+ exports.downloadS3Objects = downloadS3Objects;
41
+ exports.cleanupTempFiles = cleanupTempFiles;
42
+ const client_s3_1 = require("@aws-sdk/client-s3");
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const os = __importStar(require("os"));
46
+ function createS3Client(config) {
47
+ const s3Config = {};
48
+ if (config.region) {
49
+ s3Config.region = config.region;
50
+ }
51
+ if (config.accessKeyId && config.secretAccessKey) {
52
+ s3Config.credentials = {
53
+ accessKeyId: config.accessKeyId,
54
+ secretAccessKey: config.secretAccessKey,
55
+ };
56
+ }
57
+ if (config.endpoint) {
58
+ s3Config.endpoint = config.endpoint;
59
+ }
60
+ if (config.profile) {
61
+ process.env.AWS_PROFILE = config.profile;
62
+ }
63
+ return new client_s3_1.S3Client(s3Config);
64
+ }
65
+ function parseS3Uri(uri) {
66
+ const match = uri.match(/^s3:\/\/([^/]+)\/(.+)$/);
67
+ if (!match) {
68
+ throw new Error(`Invalid S3 URI format: ${uri}. Expected format: s3://bucket/key`);
69
+ }
70
+ return {
71
+ bucket: match[1],
72
+ key: match[2],
73
+ };
74
+ }
75
+ async function listS3Objects(client, bucket, prefix, pattern) {
76
+ const keys = [];
77
+ let continuationToken;
78
+ do {
79
+ const command = new client_s3_1.ListObjectsV2Command({
80
+ Bucket: bucket,
81
+ Prefix: prefix,
82
+ ContinuationToken: continuationToken,
83
+ });
84
+ const response = await client.send(command);
85
+ if (response.Contents) {
86
+ for (const obj of response.Contents) {
87
+ if (obj.Key) {
88
+ if (!pattern || new RegExp(pattern).test(obj.Key)) {
89
+ keys.push(obj.Key);
90
+ }
91
+ }
92
+ }
93
+ }
94
+ continuationToken = response.NextContinuationToken;
95
+ } while (continuationToken);
96
+ return keys;
97
+ }
98
+ async function downloadS3Object(client, bucket, key) {
99
+ const command = new client_s3_1.GetObjectCommand({
100
+ Bucket: bucket,
101
+ Key: key,
102
+ });
103
+ const response = await client.send(command);
104
+ if (!response.Body) {
105
+ throw new Error(`No content in S3 object: s3://${bucket}/${key}`);
106
+ }
107
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'faros-s3-'));
108
+ const tempFile = path.join(tempDir, path.basename(key));
109
+ const body = response.Body;
110
+ const fileStream = fs.createWriteStream(tempFile);
111
+ await new Promise((resolve, reject) => {
112
+ body.pipe(fileStream);
113
+ body.on('error', reject);
114
+ fileStream.on('finish', () => resolve());
115
+ fileStream.on('error', reject);
116
+ });
117
+ return tempFile;
118
+ }
119
+ async function downloadS3Objects(client, bucket, keys) {
120
+ const tempFiles = [];
121
+ for (const key of keys) {
122
+ const tempFile = await downloadS3Object(client, bucket, key);
123
+ tempFiles.push(tempFile);
124
+ }
125
+ return tempFiles;
126
+ }
127
+ function cleanupTempFiles(files) {
128
+ for (const file of files) {
129
+ try {
130
+ const dir = path.dirname(file);
131
+ fs.unlinkSync(file);
132
+ fs.rmdirSync(dir);
133
+ }
134
+ catch {
135
+ // Ignore errors
136
+ }
137
+ }
138
+ }
139
+ //# sourceMappingURL=s3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3.js","sourceRoot":"","sources":["../../../src/lib/sources/s3.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,wCAuBC;AAOD,gCAWC;AAED,sCAgCC;AAED,4CA8BC;AAED,8CAaC;AAED,4CAUC;AAzJD,kDAK4B;AAE5B,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAUzB,SAAgB,cAAc,CAAC,MAAgB;IAC7C,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACjD,QAAQ,CAAC,WAAW,GAAG;YACrB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;SACxC,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACtC,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,OAAO,IAAI,oBAAQ,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAOD,SAAgB,UAAU,CAAC,GAAW;IACpC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,0BAA0B,GAAG,oCAAoC,CAClE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAChB,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;KACd,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,MAAgB,EAChB,MAAc,EACd,MAAc,EACd,OAAgB;IAEhB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,iBAAqC,CAAC;IAE1C,GAAG,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,gCAAoB,CAAC;YACvC,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM;YACd,iBAAiB,EAAE,iBAAiB;SACrC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;oBACZ,IAAI,CAAC,OAAO,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,iBAAiB,GAAG,QAAQ,CAAC,qBAAqB,CAAC;IACrD,CAAC,QAAQ,iBAAiB,EAAE;IAE5B,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,MAAgB,EAChB,MAAc,EACd,GAAW;IAEX,MAAM,OAAO,GAAG,IAAI,4BAAgB,CAAC;QACnC,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,GAAG;KACT,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE5C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAExD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAgB,CAAC;IACvC,MAAM,UAAU,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAElD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACrC,MAAgB,EAChB,MAAc,EACd,IAAc;IAEd,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7D,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAe;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { Ora } from 'ora';
2
+ import cliProgress from 'cli-progress';
3
+ import Table from 'cli-table3';
4
+ export declare const isCI: boolean;
5
+ export declare const ciName: string | null;
6
+ export declare const ui: {
7
+ success: string;
8
+ error: string;
9
+ warning: string;
10
+ info: string;
11
+ spinner(text: string): Ora | {
12
+ start: () => void;
13
+ succeed: (t?: string) => void;
14
+ fail: (t?: string) => void;
15
+ warn: (t?: string) => void;
16
+ };
17
+ progressBar(total: number, options?: Partial<cliProgress.Options>): cliProgress.SingleBar | {
18
+ start: () => void;
19
+ update: (value: number) => void;
20
+ stop: () => void;
21
+ };
22
+ table(head: string[], options?: Partial<Table.TableConstructorOptions>): Table.Table;
23
+ box(message: string, options?: any): string;
24
+ log: {
25
+ success: (message: string) => void;
26
+ error: (message: string) => void;
27
+ warning: (message: string) => void;
28
+ info: (message: string) => void;
29
+ debug: (message: string) => void;
30
+ };
31
+ };
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/ui/index.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG/B,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,MAAM,YAAY,CAAC;AAI/B,eAAO,MAAM,IAAI,SAAc,CAAC;AAChC,eAAO,MAAM,MAAM,eAAc,CAAC;AAGlC,eAAO,MAAM,EAAE;;;;;kBAQC,MAAM,GAAG,GAAG,GAAG;QAAE,KAAK,EAAE,MAAM,IAAI,CAAC;QAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE;uBActH,MAAM,YAAY,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;;wBAM3C,MAAM;;;gBAsBhB,MAAM,EAAE,YAAY,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC;iBASzD,MAAM,YAAY,GAAG;;2BAWb,MAAM;yBACR,MAAM;2BACJ,MAAM;wBACT,MAAM;yBACL,MAAM;;CAE1B,CAAC"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ui = exports.ciName = exports.isCI = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const figures_1 = __importDefault(require("figures"));
10
+ const boxen_1 = __importDefault(require("boxen"));
11
+ const cli_progress_1 = __importDefault(require("cli-progress"));
12
+ const cli_table3_1 = __importDefault(require("cli-table3"));
13
+ const ci_info_1 = __importDefault(require("ci-info"));
14
+ // Detect CI environment
15
+ exports.isCI = ci_info_1.default.isCI;
16
+ exports.ciName = ci_info_1.default.name;
17
+ // Create styled logger
18
+ exports.ui = {
19
+ // Symbols
20
+ success: chalk_1.default.green(figures_1.default.tick),
21
+ error: chalk_1.default.red(figures_1.default.cross),
22
+ warning: chalk_1.default.yellow(figures_1.default.warning),
23
+ info: chalk_1.default.blue(figures_1.default.info),
24
+ // Spinners
25
+ spinner(text) {
26
+ if (exports.isCI) {
27
+ // In CI, return a mock spinner that just logs
28
+ return {
29
+ start: () => console.log(text),
30
+ succeed: (t) => console.log(chalk_1.default.green(figures_1.default.tick), t || text),
31
+ fail: (t) => console.error(chalk_1.default.red(figures_1.default.cross), t || text),
32
+ warn: (t) => console.warn(chalk_1.default.yellow(figures_1.default.warning), t || text),
33
+ };
34
+ }
35
+ return (0, ora_1.default)({ text, color: 'blue' });
36
+ },
37
+ // Progress bar
38
+ progressBar(total, options) {
39
+ if (exports.isCI) {
40
+ // In CI, return a simple counter
41
+ let current = 0;
42
+ return {
43
+ start: () => console.log(`Starting (0/${total})`),
44
+ update: (value) => {
45
+ current = value;
46
+ if (value % Math.ceil(total / 10) === 0 || value === total) {
47
+ console.log(`Progress: ${value}/${total} (${Math.round(value / total * 100)}%)`);
48
+ }
49
+ },
50
+ stop: () => console.log(`Completed (${current}/${total})`),
51
+ };
52
+ }
53
+ const bar = new cli_progress_1.default.SingleBar({
54
+ format: `${chalk_1.default.blue('Progress')} |{bar}| {percentage}% | {value}/{total}`,
55
+ barCompleteChar: '\u2588',
56
+ barIncompleteChar: '\u2591',
57
+ hideCursor: true,
58
+ ...options,
59
+ });
60
+ return bar;
61
+ },
62
+ // Table
63
+ table(head, options) {
64
+ return new cli_table3_1.default({
65
+ head: head.map(h => chalk_1.default.bold(h)),
66
+ style: { head: [] },
67
+ ...options,
68
+ });
69
+ },
70
+ // Box
71
+ box(message, options) {
72
+ return (0, boxen_1.default)(message, {
73
+ padding: 1,
74
+ margin: 1,
75
+ borderStyle: 'round',
76
+ ...options,
77
+ });
78
+ },
79
+ // Logging helpers
80
+ log: {
81
+ success: (message) => console.log(chalk_1.default.green(figures_1.default.tick), message),
82
+ error: (message) => console.error(chalk_1.default.red(figures_1.default.cross), message),
83
+ warning: (message) => console.warn(chalk_1.default.yellow(figures_1.default.warning), message),
84
+ info: (message) => console.log(chalk_1.default.blue(figures_1.default.info), message),
85
+ debug: (message) => console.log(chalk_1.default.dim(message)),
86
+ },
87
+ };
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/ui/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ import { z } from 'zod';
2
+ export declare const ConfigSchema: z.ZodObject<{
3
+ url: z.ZodDefault<z.ZodString>;
4
+ graph: z.ZodDefault<z.ZodString>;
5
+ stagingGraph: z.ZodOptional<z.ZodString>;
6
+ origin: z.ZodDefault<z.ZodString>;
7
+ apiKey: z.ZodOptional<z.ZodString>;
8
+ sources: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
9
+ type: z.ZodOptional<z.ZodString>;
10
+ apiKey: z.ZodOptional<z.ZodString>;
11
+ token: z.ZodOptional<z.ZodString>;
12
+ bucket: z.ZodOptional<z.ZodString>;
13
+ region: z.ZodOptional<z.ZodString>;
14
+ prefix: z.ZodOptional<z.ZodString>;
15
+ pattern: z.ZodOptional<z.ZodString>;
16
+ syncInterval: z.ZodOptional<z.ZodString>;
17
+ streams: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ apiKey?: string | undefined;
20
+ type?: string | undefined;
21
+ token?: string | undefined;
22
+ bucket?: string | undefined;
23
+ region?: string | undefined;
24
+ prefix?: string | undefined;
25
+ pattern?: string | undefined;
26
+ syncInterval?: string | undefined;
27
+ streams?: string[] | undefined;
28
+ }, {
29
+ apiKey?: string | undefined;
30
+ type?: string | undefined;
31
+ token?: string | undefined;
32
+ bucket?: string | undefined;
33
+ region?: string | undefined;
34
+ prefix?: string | undefined;
35
+ pattern?: string | undefined;
36
+ syncInterval?: string | undefined;
37
+ streams?: string[] | undefined;
38
+ }>>>;
39
+ defaults: z.ZodOptional<z.ZodObject<{
40
+ testSource: z.ZodOptional<z.ZodString>;
41
+ testType: z.ZodOptional<z.ZodString>;
42
+ concurrency: z.ZodDefault<z.ZodNumber>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ concurrency: number;
45
+ testSource?: string | undefined;
46
+ testType?: string | undefined;
47
+ }, {
48
+ testSource?: string | undefined;
49
+ testType?: string | undefined;
50
+ concurrency?: number | undefined;
51
+ }>>;
52
+ logs: z.ZodOptional<z.ZodObject<{
53
+ level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
54
+ directory: z.ZodOptional<z.ZodString>;
55
+ retention: z.ZodOptional<z.ZodString>;
56
+ }, "strip", z.ZodTypeAny, {
57
+ level: "debug" | "info" | "warn" | "error";
58
+ directory?: string | undefined;
59
+ retention?: string | undefined;
60
+ }, {
61
+ level?: "debug" | "info" | "warn" | "error" | undefined;
62
+ directory?: string | undefined;
63
+ retention?: string | undefined;
64
+ }>>;
65
+ }, "strip", z.ZodTypeAny, {
66
+ url: string;
67
+ graph: string;
68
+ origin: string;
69
+ stagingGraph?: string | undefined;
70
+ apiKey?: string | undefined;
71
+ sources?: Record<string, {
72
+ apiKey?: string | undefined;
73
+ type?: string | undefined;
74
+ token?: string | undefined;
75
+ bucket?: string | undefined;
76
+ region?: string | undefined;
77
+ prefix?: string | undefined;
78
+ pattern?: string | undefined;
79
+ syncInterval?: string | undefined;
80
+ streams?: string[] | undefined;
81
+ }> | undefined;
82
+ defaults?: {
83
+ concurrency: number;
84
+ testSource?: string | undefined;
85
+ testType?: string | undefined;
86
+ } | undefined;
87
+ logs?: {
88
+ level: "debug" | "info" | "warn" | "error";
89
+ directory?: string | undefined;
90
+ retention?: string | undefined;
91
+ } | undefined;
92
+ }, {
93
+ url?: string | undefined;
94
+ graph?: string | undefined;
95
+ stagingGraph?: string | undefined;
96
+ origin?: string | undefined;
97
+ apiKey?: string | undefined;
98
+ sources?: Record<string, {
99
+ apiKey?: string | undefined;
100
+ type?: string | undefined;
101
+ token?: string | undefined;
102
+ bucket?: string | undefined;
103
+ region?: string | undefined;
104
+ prefix?: string | undefined;
105
+ pattern?: string | undefined;
106
+ syncInterval?: string | undefined;
107
+ streams?: string[] | undefined;
108
+ }> | undefined;
109
+ defaults?: {
110
+ testSource?: string | undefined;
111
+ testType?: string | undefined;
112
+ concurrency?: number | undefined;
113
+ } | undefined;
114
+ logs?: {
115
+ level?: "debug" | "info" | "warn" | "error" | undefined;
116
+ directory?: string | undefined;
117
+ retention?: string | undefined;
118
+ } | undefined;
119
+ }>;
120
+ export type Config = z.infer<typeof ConfigSchema>;
121
+ export interface BaseCommandOptions {
122
+ apiKey?: string;
123
+ url?: string;
124
+ graph?: string;
125
+ debug?: boolean;
126
+ quiet?: boolean;
127
+ json?: boolean;
128
+ noColor?: boolean;
129
+ dryRun?: boolean;
130
+ validate?: boolean;
131
+ preview?: boolean;
132
+ }
133
+ export interface SyncTestsOptions extends BaseCommandOptions {
134
+ format?: string;
135
+ source?: string;
136
+ type?: string;
137
+ commit?: string;
138
+ testStart?: string;
139
+ testEnd?: string;
140
+ concurrency?: number;
141
+ s3Region?: string;
142
+ s3Profile?: string;
143
+ s3AccessKeyId?: string;
144
+ s3SecretAccessKey?: string;
145
+ pattern?: string;
146
+ }
147
+ export interface SyncCICDOptions extends BaseCommandOptions {
148
+ status?: string;
149
+ commit?: string;
150
+ run?: string;
151
+ runStatus?: string;
152
+ runStartTime?: string;
153
+ runEndTime?: string;
154
+ deploy?: string;
155
+ deployStatus?: string;
156
+ deployStartTime?: string;
157
+ deployEndTime?: string;
158
+ artifact?: string;
159
+ }
160
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGlD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ // Config schema
6
+ // NOTE: Sensitive credentials should be in .env, not config files
7
+ exports.ConfigSchema = zod_1.z.object({
8
+ // API Configuration (can be in config file)
9
+ url: zod_1.z.string().url().default('https://prod.api.faros.ai'),
10
+ graph: zod_1.z.string().default('default'),
11
+ stagingGraph: zod_1.z.string().optional(),
12
+ origin: zod_1.z.string().default('faros-cli'),
13
+ // Credentials (prefer .env over config file)
14
+ apiKey: zod_1.z.string().optional(), // Prefer FAROS_API_KEY env var
15
+ // Data Sources (credentials should be in .env)
16
+ sources: zod_1.z.record(zod_1.z.object({
17
+ type: zod_1.z.string().optional(),
18
+ apiKey: zod_1.z.string().optional(), // Prefer SOURCE_API_KEY env var
19
+ token: zod_1.z.string().optional(), // Prefer SOURCE_TOKEN env var
20
+ bucket: zod_1.z.string().optional(), // S3 bucket name
21
+ region: zod_1.z.string().optional(), // S3 region
22
+ prefix: zod_1.z.string().optional(), // S3 prefix
23
+ pattern: zod_1.z.string().optional(), // S3 pattern
24
+ syncInterval: zod_1.z.string().optional(),
25
+ streams: zod_1.z.array(zod_1.z.string()).optional(),
26
+ })).optional(),
27
+ // Defaults
28
+ defaults: zod_1.z.object({
29
+ testSource: zod_1.z.string().optional(),
30
+ testType: zod_1.z.string().optional(),
31
+ concurrency: zod_1.z.number().default(8),
32
+ }).optional(),
33
+ // Logging
34
+ logs: zod_1.z.object({
35
+ level: zod_1.z.enum(['debug', 'info', 'warn', 'error']).default('info'),
36
+ directory: zod_1.z.string().optional(),
37
+ retention: zod_1.z.string().optional(),
38
+ }).optional(),
39
+ });
40
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,gBAAgB;AAChB,kEAAkE;AACrD,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,4CAA4C;IAC5C,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC;IAC1D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACpC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IAEvC,6CAA6C;IAC7C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,+BAA+B;IAE9D,+CAA+C;IAC/C,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,CAAC;QACzB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,gCAAgC;QAC/D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,8BAA8B;QAC5D,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,iBAAiB;QAChD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,YAAY;QAC3C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,YAAY;QAC3C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,aAAa;QAC7C,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACxC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAEd,WAAW;IACX,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC;QACjB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;KACnC,CAAC,CAAC,QAAQ,EAAE;IAEb,UAAU;IACV,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC;QACb,KAAK,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACjE,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "@faros-fde-sandbox/cli",
3
+ "version": "1.0.0",
4
+ "description": "Modern CLI for Faros AI - sync data, manage sources, view logs",
5
+ "keywords": [
6
+ "faros",
7
+ "observability",
8
+ "devops",
9
+ "ci-cd",
10
+ "quality",
11
+ "testing",
12
+ "linear",
13
+ "github"
14
+ ],
15
+ "homepage": "https://www.faros.ai",
16
+ "author": "Faros AI, Inc.",
17
+ "license": "Apache-2.0",
18
+ "bin": {
19
+ "faros": "./bin/faros"
20
+ },
21
+ "files": [
22
+ "lib/",
23
+ "bin/"
24
+ ],
25
+ "engines": {
26
+ "node": ">=18"
27
+ },
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "main": "./lib/index.js",
32
+ "scripts": {
33
+ "build": "tsc -p tsconfig.json",
34
+ "clean": "rm -rf lib node_modules",
35
+ "dev": "tsc -p tsconfig.json --watch",
36
+ "fix": "prettier --write 'src/**/*.ts' && npm run lint -- --fix",
37
+ "lint": "eslint 'src/**/*.ts'",
38
+ "prepare": "npm run build",
39
+ "test": "vitest run",
40
+ "test:watch": "vitest"
41
+ },
42
+ "dependencies": {
43
+ "@aws-sdk/client-s3": "^3.700.0",
44
+ "axios": "^1.8.2",
45
+ "axios-retry": "^4.5.0",
46
+ "boxen": "^8.0.1",
47
+ "chalk": "^5.3.0",
48
+ "ci-info": "^4.0.0",
49
+ "cli-progress": "^3.12.0",
50
+ "cli-table3": "^0.6.5",
51
+ "commander": "^12.1.0",
52
+ "cosmiconfig": "^9.0.0",
53
+ "dotenv": "^16.4.5",
54
+ "figures": "^6.1.0",
55
+ "ora": "^8.1.0",
56
+ "p-limit": "^3.1.0",
57
+ "pino": "^9.5.0",
58
+ "pino-pretty": "^11.2.2",
59
+ "test-results-parser": "^0.2.3",
60
+ "update-notifier": "^7.3.1",
61
+ "uuid": "^11.0.3",
62
+ "zod": "^3.23.8"
63
+ },
64
+ "devDependencies": {
65
+ "@types/cli-progress": "^3.11.6",
66
+ "@types/js-yaml": "^4.0.9",
67
+ "@types/node": "^22.15.17",
68
+ "@types/update-notifier": "^6.0.8",
69
+ "js-yaml": "^4.1.1",
70
+ "prettier": "^2.7.1",
71
+ "typescript": "^5.9.3",
72
+ "vitest": "^2.1.6"
73
+ }
74
+ }