@thymian/common-cli 0.0.0-PLACEHOLDER
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/README.md +59 -0
- package/dist/base-cli-run-command.d.ts +94 -0
- package/dist/base-cli-run-command.d.ts.map +1 -0
- package/dist/base-cli-run-command.js +440 -0
- package/dist/base-cli-run-command.js.map +1 -0
- package/dist/default-config.d.ts +3 -0
- package/dist/default-config.d.ts.map +1 -0
- package/dist/default-config.js +27 -0
- package/dist/default-config.js.map +1 -0
- package/dist/error-cache.d.ts +31 -0
- package/dist/error-cache.d.ts.map +1 -0
- package/dist/error-cache.js +36 -0
- package/dist/error-cache.js.map +1 -0
- package/dist/feedback.d.ts +13 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +30 -0
- package/dist/feedback.js.map +1 -0
- package/dist/flags/filter-flag.d.ts +20 -0
- package/dist/flags/filter-flag.d.ts.map +1 -0
- package/dist/flags/filter-flag.js +63 -0
- package/dist/flags/filter-flag.js.map +1 -0
- package/dist/flags/option-flag.d.ts +39 -0
- package/dist/flags/option-flag.d.ts.map +1 -0
- package/dist/flags/option-flag.js +144 -0
- package/dist/flags/option-flag.js.map +1 -0
- package/dist/flags/rule-set-flag.d.ts +5 -0
- package/dist/flags/rule-set-flag.d.ts.map +1 -0
- package/dist/flags/rule-set-flag.js +9 -0
- package/dist/flags/rule-set-flag.js.map +1 -0
- package/dist/flags/spec-flag.d.ts +11 -0
- package/dist/flags/spec-flag.d.ts.map +1 -0
- package/dist/flags/spec-flag.js +25 -0
- package/dist/flags/spec-flag.js.map +1 -0
- package/dist/flags/traffic-flag.d.ts +10 -0
- package/dist/flags/traffic-flag.d.ts.map +1 -0
- package/dist/flags/traffic-flag.js +24 -0
- package/dist/flags/traffic-flag.js.map +1 -0
- package/dist/get-config.d.ts +20 -0
- package/dist/get-config.d.ts.map +1 -0
- package/dist/get-config.js +82 -0
- package/dist/get-config.js.map +1 -0
- package/dist/hooks/feedback-hook.d.ts +9 -0
- package/dist/hooks/feedback-hook.d.ts.map +1 -0
- package/dist/hooks/feedback-hook.js +2 -0
- package/dist/hooks/feedback-hook.js.map +1 -0
- package/dist/hooks/plugin-init-hook.d.ts +20 -0
- package/dist/hooks/plugin-init-hook.d.ts.map +1 -0
- package/dist/hooks/plugin-init-hook.js +2 -0
- package/dist/hooks/plugin-init-hook.js.map +1 -0
- package/dist/hooks/spec-search-hook.d.ts +18 -0
- package/dist/hooks/spec-search-hook.d.ts.map +1 -0
- package/dist/hooks/spec-search-hook.js +2 -0
- package/dist/hooks/spec-search-hook.js.map +1 -0
- package/dist/hooks/traffic-search-hook.d.ts +18 -0
- package/dist/hooks/traffic-search-hook.d.ts.map +1 -0
- package/dist/hooks/traffic-search-hook.js +2 -0
- package/dist/hooks/traffic-search-hook.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/merge-inputs.d.ts +34 -0
- package/dist/merge-inputs.d.ts.map +1 -0
- package/dist/merge-inputs.js +50 -0
- package/dist/merge-inputs.js.map +1 -0
- package/dist/oclif.d.ts +2 -0
- package/dist/oclif.d.ts.map +1 -0
- package/dist/oclif.js +2 -0
- package/dist/oclif.js.map +1 -0
- package/dist/promise-queue.d.ts +7 -0
- package/dist/promise-queue.d.ts.map +1 -0
- package/dist/promise-queue.js +24 -0
- package/dist/promise-queue.js.map +1 -0
- package/dist/prompts.d.ts +5 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +7 -0
- package/dist/prompts.js.map +1 -0
- package/dist/read-plugins.d.ts +2 -0
- package/dist/read-plugins.d.ts.map +1 -0
- package/dist/read-plugins.js +23 -0
- package/dist/read-plugins.js.map +1 -0
- package/dist/safe-parse.d.ts +2 -0
- package/dist/safe-parse.d.ts.map +1 -0
- package/dist/safe-parse.js +22 -0
- package/dist/safe-parse.js.map +1 -0
- package/dist/thymian-base-command.d.ts +21 -0
- package/dist/thymian-base-command.d.ts.map +1 -0
- package/dist/thymian-base-command.js +60 -0
- package/dist/thymian-base-command.js.map +1 -0
- package/dist/thymian-config-schema.d.ts +85 -0
- package/dist/thymian-config-schema.d.ts.map +1 -0
- package/dist/thymian-config-schema.js +79 -0
- package/dist/thymian-config-schema.js.map +1 -0
- package/dist/thymian-config-schema.json +116 -0
- package/dist/thymian-config.d.ts +19 -0
- package/dist/thymian-config.d.ts.map +1 -0
- package/dist/thymian-config.js +2 -0
- package/dist/thymian-config.js.map +1 -0
- package/dist/validate-config.d.ts +8 -0
- package/dist/validate-config.d.ts.map +1 -0
- package/dist/validate-config.js +18 -0
- package/dist/validate-config.js.map +1 -0
- package/dist/workflow-outcome.d.ts +21 -0
- package/dist/workflow-outcome.d.ts.map +1 -0
- package/dist/workflow-outcome.js +51 -0
- package/dist/workflow-outcome.js.map +1 -0
- package/dist/yaml.d.ts +2 -0
- package/dist/yaml.d.ts.map +1 -0
- package/dist/yaml.js +2 -0
- package/dist/yaml.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import * as fs from 'node:fs/promises';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { parse } from 'yaml';
|
|
5
|
+
import { defaultConfig } from './default-config.js';
|
|
6
|
+
import { validateConfig } from './validate-config.js';
|
|
7
|
+
/** Well-known config file names checked in order when no explicit `--config` is given. */
|
|
8
|
+
const DEFAULT_CONFIG_NAMES = ['thymian.config.yaml'];
|
|
9
|
+
/**
|
|
10
|
+
* Resolve and load a Thymian configuration.
|
|
11
|
+
*
|
|
12
|
+
* Resolution chain:
|
|
13
|
+
* 1. If `configPath` is given (explicit `--config`), load that file or error.
|
|
14
|
+
* 2. Otherwise probe cwd for well-known config file names.
|
|
15
|
+
* 3. If no file is found, return `defaultConfig`.
|
|
16
|
+
*/
|
|
17
|
+
export async function getConfig(options = {}) {
|
|
18
|
+
const cwd = options.cwd ?? process.cwd();
|
|
19
|
+
// Step A: explicit --config path
|
|
20
|
+
if (options.configPath) {
|
|
21
|
+
const fullPath = path.isAbsolute(options.configPath)
|
|
22
|
+
? options.configPath
|
|
23
|
+
: path.join(cwd, options.configPath);
|
|
24
|
+
if (!existsSync(fullPath)) {
|
|
25
|
+
console.error(`Config not found at ${fullPath}.`);
|
|
26
|
+
process.exit(2);
|
|
27
|
+
}
|
|
28
|
+
return loadAndValidate(fullPath);
|
|
29
|
+
}
|
|
30
|
+
// Step B: probe well-known config file names in cwd
|
|
31
|
+
for (const name of DEFAULT_CONFIG_NAMES) {
|
|
32
|
+
const fullPath = path.join(cwd, name);
|
|
33
|
+
if (existsSync(fullPath)) {
|
|
34
|
+
return loadAndValidate(fullPath);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Step B fallback: no config file found — use built-in defaults
|
|
38
|
+
return defaultConfig;
|
|
39
|
+
}
|
|
40
|
+
async function loadAndValidate(fullPath) {
|
|
41
|
+
try {
|
|
42
|
+
const fileContent = await fs.readFile(fullPath, 'utf-8');
|
|
43
|
+
const { ext } = path.parse(fullPath);
|
|
44
|
+
let config;
|
|
45
|
+
if (ext === '.json') {
|
|
46
|
+
try {
|
|
47
|
+
config = JSON.parse(fileContent);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
throw new Error(`Invalid JSON file at path ${fullPath}.`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (ext === '.yaml' || ext === '.yml') {
|
|
54
|
+
try {
|
|
55
|
+
config = parse(fileContent);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
throw new Error(`Invalid yaml file at path ${fullPath}.`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
throw new Error(`Unsupported file extension "${ext}" for Thymian configuration.`);
|
|
63
|
+
}
|
|
64
|
+
const validationResult = validateConfig(config);
|
|
65
|
+
if (!validationResult.valid) {
|
|
66
|
+
throw new Error(`Invalid Thymian config`, {
|
|
67
|
+
cause: validationResult.message,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return config;
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
if (e instanceof Error) {
|
|
74
|
+
console.error(`Cannot run Thymian CLI because of: ${e.message}`);
|
|
75
|
+
if (e.cause) {
|
|
76
|
+
console.error(e.cause);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
process.exit(2);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=get-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-config.js","sourceRoot":"","sources":["../src/get-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/feedback-hook.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,KAAK;QACb,kBAAkB,EAAE;YAClB,OAAO,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;SACvC,CAAC;KACH;CACF;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-hook.js","sourceRoot":"","sources":["../../src/hooks/feedback-hook.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ThymianPluginConfiguration } from '../thymian-config.js';
|
|
2
|
+
declare module '@oclif/core/interfaces' {
|
|
3
|
+
interface Hooks {
|
|
4
|
+
'thymian-plugin.init': {
|
|
5
|
+
options: ThymianPluginInitOptions;
|
|
6
|
+
return: ThymianPluginInitResult;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export type ThymianPluginInitOptions = {
|
|
11
|
+
cwd: string;
|
|
12
|
+
interactive: boolean;
|
|
13
|
+
};
|
|
14
|
+
export type ThymianPluginInitResult<T extends Record<PropertyKey, unknown> = Record<PropertyKey, unknown>> = {
|
|
15
|
+
pluginName: string;
|
|
16
|
+
configuration: ThymianPluginConfiguration<T>;
|
|
17
|
+
include: boolean;
|
|
18
|
+
};
|
|
19
|
+
export type ThymianPluginInitHook<T extends Record<PropertyKey, unknown> = Record<PropertyKey, unknown>> = (options: ThymianPluginInitOptions) => Promise<ThymianPluginInitResult<T>>;
|
|
20
|
+
//# sourceMappingURL=plugin-init-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-init-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/plugin-init-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,KAAK;QACb,qBAAqB,EAAE;YACrB,OAAO,EAAE,wBAAwB,CAAC;YAClC,MAAM,EAAE,uBAAuB,CAAC;SACjC,CAAC;KACH;CACF;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,uBAAuB,CACjC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IACnE;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAC/B,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IACnE,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-init-hook.js","sourceRoot":"","sources":["../../src/hooks/plugin-init-hook.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SpecificationInput } from '@thymian/core';
|
|
2
|
+
declare module '@oclif/core/interfaces' {
|
|
3
|
+
interface Hooks {
|
|
4
|
+
'thymian.spec-search': {
|
|
5
|
+
options: ThymianSpecSearchOptions;
|
|
6
|
+
return: ThymianSpecSearchResult;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export type ThymianSpecSearchOptions = {
|
|
11
|
+
cwd: string;
|
|
12
|
+
};
|
|
13
|
+
export interface ThymianSpecSearchResult {
|
|
14
|
+
pluginName: string;
|
|
15
|
+
specifications: SpecificationInput[];
|
|
16
|
+
}
|
|
17
|
+
export type ThymianSpecSearchHook = (options: ThymianSpecSearchOptions) => Promise<ThymianSpecSearchResult>;
|
|
18
|
+
//# sourceMappingURL=spec-search-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-search-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/spec-search-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,KAAK;QACb,qBAAqB,EAAE;YACrB,OAAO,EAAE,wBAAwB,CAAC;YAClC,MAAM,EAAE,uBAAuB,CAAC;SACjC,CAAC;KACH;CACF;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,kBAAkB,EAAE,CAAC;CACtC;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,wBAAwB,KAC9B,OAAO,CAAC,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-search-hook.js","sourceRoot":"","sources":["../../src/hooks/spec-search-hook.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TrafficInput } from '@thymian/core';
|
|
2
|
+
declare module '@oclif/core/interfaces' {
|
|
3
|
+
interface Hooks {
|
|
4
|
+
'thymian.traffic-search': {
|
|
5
|
+
options: ThymianTrafficSearchOptions;
|
|
6
|
+
return: ThymianTrafficSearchResult;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export type ThymianTrafficSearchOptions = {
|
|
11
|
+
cwd: string;
|
|
12
|
+
};
|
|
13
|
+
export interface ThymianTrafficSearchResult {
|
|
14
|
+
pluginName: string;
|
|
15
|
+
traffic: TrafficInput[];
|
|
16
|
+
}
|
|
17
|
+
export type ThymianTrafficSearchHook = (options: ThymianTrafficSearchOptions) => Promise<ThymianTrafficSearchResult>;
|
|
18
|
+
//# sourceMappingURL=traffic-search-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traffic-search-hook.d.ts","sourceRoot":"","sources":["../../src/hooks/traffic-search-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,KAAK;QACb,wBAAwB,EAAE;YACxB,OAAO,EAAE,2BAA2B,CAAC;YACrC,MAAM,EAAE,0BAA0B,CAAC;SACpC,CAAC;KACH;CACF;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,OAAO,EAAE,2BAA2B,KACjC,OAAO,CAAC,0BAA0B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traffic-search-hook.js","sourceRoot":"","sources":["../../src/hooks/traffic-search-hook.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export * from './base-cli-run-command.js';
|
|
2
|
+
export * from './default-config.js';
|
|
3
|
+
export * from './error-cache.js';
|
|
4
|
+
export * from './flags/rule-set-flag.js';
|
|
5
|
+
export * from './flags/spec-flag.js';
|
|
6
|
+
export * from './flags/traffic-flag.js';
|
|
7
|
+
export * from './hooks/feedback-hook.js';
|
|
8
|
+
export * from './hooks/plugin-init-hook.js';
|
|
9
|
+
export * from './hooks/spec-search-hook.js';
|
|
10
|
+
export * from './hooks/traffic-search-hook.js';
|
|
11
|
+
export * from './merge-inputs.js';
|
|
12
|
+
export * as oclif from './oclif.js';
|
|
13
|
+
export * as prompts from './prompts.js';
|
|
14
|
+
export * from './read-plugins.js';
|
|
15
|
+
export * from './thymian-base-command.js';
|
|
16
|
+
export * from './thymian-config.js';
|
|
17
|
+
export * from './thymian-config-schema.js';
|
|
18
|
+
export * from './workflow-outcome.js';
|
|
19
|
+
export * as yaml from './yaml.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export * from './base-cli-run-command.js';
|
|
2
|
+
export * from './default-config.js';
|
|
3
|
+
export * from './error-cache.js';
|
|
4
|
+
export * from './flags/rule-set-flag.js';
|
|
5
|
+
export * from './flags/spec-flag.js';
|
|
6
|
+
export * from './flags/traffic-flag.js';
|
|
7
|
+
export * from './hooks/feedback-hook.js';
|
|
8
|
+
export * from './hooks/plugin-init-hook.js';
|
|
9
|
+
export * from './hooks/spec-search-hook.js';
|
|
10
|
+
export * from './hooks/traffic-search-hook.js';
|
|
11
|
+
export * from './merge-inputs.js';
|
|
12
|
+
export * as oclif from './oclif.js';
|
|
13
|
+
export * as prompts from './prompts.js';
|
|
14
|
+
export * from './read-plugins.js';
|
|
15
|
+
export * from './thymian-base-command.js';
|
|
16
|
+
export * from './thymian-config.js';
|
|
17
|
+
export * from './thymian-config-schema.js';
|
|
18
|
+
export * from './workflow-outcome.js';
|
|
19
|
+
export * as yaml from './yaml.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type RuleFilter, type RuleSeverity, type SpecificationInput, type TrafficInput } from '@thymian/core';
|
|
2
|
+
/**
|
|
3
|
+
* Merge specification inputs from config and CLI flags.
|
|
4
|
+
* Flag values are appended after config values.
|
|
5
|
+
*/
|
|
6
|
+
export declare function mergeSpecifications(configSpecs: SpecificationInput[] | undefined, flagSpecs: SpecificationInput[] | undefined): SpecificationInput[];
|
|
7
|
+
/**
|
|
8
|
+
* Merge traffic inputs from config and CLI flags.
|
|
9
|
+
* Flag values are appended after config values.
|
|
10
|
+
*/
|
|
11
|
+
export declare function mergeTraffic(configTraffic: TrafficInput[] | undefined, flagTraffic: TrafficInput[] | undefined): TrafficInput[];
|
|
12
|
+
/**
|
|
13
|
+
* Merge rule set package names from config and CLI flags.
|
|
14
|
+
* Flag values are appended after config values. Duplicates are removed.
|
|
15
|
+
*/
|
|
16
|
+
export declare function mergeRuleSets(configRuleSets: string[] | undefined, flagRuleSets: string[] | undefined): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the effective rule severity from CLI flag and config.
|
|
19
|
+
* CLI flag takes precedence over config value.
|
|
20
|
+
* Default is 'error'.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveRuleSeverity(configSeverity: RuleSeverity | undefined, flagSeverity: string | undefined): RuleSeverity;
|
|
23
|
+
/**
|
|
24
|
+
* Create a rule filter from a severity threshold.
|
|
25
|
+
* Only rules whose severity is at or above the threshold will be loaded.
|
|
26
|
+
*
|
|
27
|
+
* Severity hierarchy (most to least severe): error (1) > warn (2) > hint (3) > off (4)
|
|
28
|
+
* - 'error': only loads rules with severity 'error'
|
|
29
|
+
* - 'warn': loads rules with severity 'error' or 'warn'
|
|
30
|
+
* - 'hint': loads rules with severity 'error', 'warn', or 'hint' (all active rules)
|
|
31
|
+
* - 'off': loads no rules
|
|
32
|
+
*/
|
|
33
|
+
export declare function createSeverityRuleFilter(severity: RuleSeverity): RuleFilter;
|
|
34
|
+
//# sourceMappingURL=merge-inputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-inputs.d.ts","sourceRoot":"","sources":["../src/merge-inputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,YAAY,EAEjB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,kBAAkB,EAAE,GAAG,SAAS,EAC7C,SAAS,EAAE,kBAAkB,EAAE,GAAG,SAAS,GAC1C,kBAAkB,EAAE,CAEtB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,aAAa,EAAE,YAAY,EAAE,GAAG,SAAS,EACzC,WAAW,EAAE,YAAY,EAAE,GAAG,SAAS,GACtC,YAAY,EAAE,CAEhB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,EACpC,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,GACjC,MAAM,EAAE,CAEV;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,YAAY,GAAG,SAAS,EACxC,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,YAAY,CAMd;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAO3E"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { isRuleSeverityLevel, severityLevelValues, } from '@thymian/core';
|
|
2
|
+
/**
|
|
3
|
+
* Merge specification inputs from config and CLI flags.
|
|
4
|
+
* Flag values are appended after config values.
|
|
5
|
+
*/
|
|
6
|
+
export function mergeSpecifications(configSpecs, flagSpecs) {
|
|
7
|
+
return [...(configSpecs ?? []), ...(flagSpecs ?? [])];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Merge traffic inputs from config and CLI flags.
|
|
11
|
+
* Flag values are appended after config values.
|
|
12
|
+
*/
|
|
13
|
+
export function mergeTraffic(configTraffic, flagTraffic) {
|
|
14
|
+
return [...(configTraffic ?? []), ...(flagTraffic ?? [])];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Merge rule set package names from config and CLI flags.
|
|
18
|
+
* Flag values are appended after config values. Duplicates are removed.
|
|
19
|
+
*/
|
|
20
|
+
export function mergeRuleSets(configRuleSets, flagRuleSets) {
|
|
21
|
+
return [...new Set([...(configRuleSets ?? []), ...(flagRuleSets ?? [])])];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the effective rule severity from CLI flag and config.
|
|
25
|
+
* CLI flag takes precedence over config value.
|
|
26
|
+
* Default is 'error'.
|
|
27
|
+
*/
|
|
28
|
+
export function resolveRuleSeverity(configSeverity, flagSeverity) {
|
|
29
|
+
if (flagSeverity && isRuleSeverityLevel(flagSeverity)) {
|
|
30
|
+
return flagSeverity;
|
|
31
|
+
}
|
|
32
|
+
return configSeverity ?? 'error';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a rule filter from a severity threshold.
|
|
36
|
+
* Only rules whose severity is at or above the threshold will be loaded.
|
|
37
|
+
*
|
|
38
|
+
* Severity hierarchy (most to least severe): error (1) > warn (2) > hint (3) > off (4)
|
|
39
|
+
* - 'error': only loads rules with severity 'error'
|
|
40
|
+
* - 'warn': loads rules with severity 'error' or 'warn'
|
|
41
|
+
* - 'hint': loads rules with severity 'error', 'warn', or 'hint' (all active rules)
|
|
42
|
+
* - 'off': loads no rules
|
|
43
|
+
*/
|
|
44
|
+
export function createSeverityRuleFilter(severity) {
|
|
45
|
+
if (severity === 'off') {
|
|
46
|
+
return () => false;
|
|
47
|
+
}
|
|
48
|
+
return (rule) => severityLevelValues[rule.meta.severity] <= severityLevelValues[severity];
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=merge-inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-inputs.js","sourceRoot":"","sources":["../src/merge-inputs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAGnB,mBAAmB,GAGpB,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAA6C,EAC7C,SAA2C;IAE3C,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,aAAyC,EACzC,WAAuC;IAEvC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,cAAoC,EACpC,YAAkC;IAElC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,cAAwC,EACxC,YAAgC;IAEhC,IAAI,YAAY,IAAI,mBAAmB,CAAC,YAAY,CAAC,EAAE,CAAC;QACtD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,cAAc,IAAI,OAAO,CAAC;AACnC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAsB;IAC7D,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,IAAI,EAAE,EAAE,CACd,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAC7E,CAAC"}
|
package/dist/oclif.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oclif.d.ts","sourceRoot":"","sources":["../src/oclif.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
package/dist/oclif.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oclif.js","sourceRoot":"","sources":["../src/oclif.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promise-queue.d.ts","sourceRoot":"","sources":["../src/promise-queue.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAK;IAEpB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAexC,IAAI,IAAI,MAAM;CAGf"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class PromiseQueue {
|
|
2
|
+
promise = Promise.resolve();
|
|
3
|
+
counter = 0;
|
|
4
|
+
add(fn) {
|
|
5
|
+
++this.counter;
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
this.promise = this.promise.then(async () => {
|
|
8
|
+
try {
|
|
9
|
+
resolve(await fn());
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
reject(e);
|
|
13
|
+
}
|
|
14
|
+
finally {
|
|
15
|
+
--this.counter;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
size() {
|
|
21
|
+
return this.counter;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=promise-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promise-queue.js","sourceRoot":"","sources":["../src/promise-queue.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAY;IACf,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5B,OAAO,GAAG,CAAC,CAAC;IAEpB,GAAG,CAAI,EAAoB;QACzB,EAAE,IAAI,CAAC,OAAO,CAAC;QACf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBAC1C,IAAI,CAAC;oBACH,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACtB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC;wBAAS,CAAC;oBACT,EAAE,IAAI,CAAC,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,eAAO,MAAM,WAAW,cAAqB,CAAC;AAE9C,wBAAgB,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE9D;AAED,cAAc,mBAAmB,CAAC"}
|
package/dist/prompts.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;AAE9C,MAAM,UAAU,UAAU,CAAI,EAAoB;IAChD,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-plugins.d.ts","sourceRoot":"","sources":["../src/read-plugins.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,CAClC,IAAI,GAAE,MAAM,EAA0B,GACrC,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { parseArgs } from 'node:util';
|
|
2
|
+
import { getConfig } from './get-config.js';
|
|
3
|
+
export async function getPluginNames(args = process.argv.slice(2)) {
|
|
4
|
+
const options = {
|
|
5
|
+
config: {
|
|
6
|
+
type: 'string',
|
|
7
|
+
short: 'c',
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
const processed = parseArgs({
|
|
11
|
+
options,
|
|
12
|
+
strict: false,
|
|
13
|
+
args,
|
|
14
|
+
allowPositionals: true,
|
|
15
|
+
});
|
|
16
|
+
const configFlag = processed.values.config;
|
|
17
|
+
const config = await getConfig({
|
|
18
|
+
configPath: typeof configFlag === 'string' ? configFlag : undefined,
|
|
19
|
+
cwd: process.cwd(),
|
|
20
|
+
});
|
|
21
|
+
return Object.keys(config.plugins);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=read-plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-plugins.js","sourceRoot":"","sources":["../src/read-plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG;QACd,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;SACX;KACO,CAAC;IAEX,MAAM,SAAS,GAAG,SAAS,CAAC;QAC1B,OAAO;QACP,MAAM,EAAE,KAAK;QACb,IAAI;QACJ,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;QAC7B,UAAU,EAAE,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACnE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;KACnB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-parse.d.ts","sourceRoot":"","sources":["../src/safe-parse.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAoBhD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function safeParse(value) {
|
|
2
|
+
try {
|
|
3
|
+
return JSON.parse(value);
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
5
|
+
}
|
|
6
|
+
catch (err) {
|
|
7
|
+
if (value === 'true') {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
if (value === 'false') {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
if (value === 'null') {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
if (!isNaN(+value) && value.trim() !== '') {
|
|
17
|
+
return Number(value);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=safe-parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-parse.js","sourceRoot":"","sources":["../src/safe-parse.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,6DAA6D;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Command, Flags, Interfaces } from '@oclif/core';
|
|
2
|
+
import type { CommandError } from '@oclif/core/interfaces';
|
|
3
|
+
import { ErrorCache } from './error-cache.js';
|
|
4
|
+
import { Feedback } from './feedback.js';
|
|
5
|
+
type Flags<T extends typeof Command> = Interfaces.InferredFlags<(typeof ThymianBaseCommand)['baseFlags'] & T['flags']>;
|
|
6
|
+
type Args<T extends typeof Command> = Interfaces.InferredArgs<T['args']>;
|
|
7
|
+
export declare abstract class ThymianBaseCommand<T extends typeof Command> extends Command {
|
|
8
|
+
static enableJsonFlag: boolean;
|
|
9
|
+
static baseFlags: {
|
|
10
|
+
"suppress-feedback": Interfaces.BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
protected flags: Flags<T>;
|
|
13
|
+
protected args: Args<T>;
|
|
14
|
+
protected feedback?: Feedback;
|
|
15
|
+
protected errorCache?: ErrorCache;
|
|
16
|
+
init(): Promise<void>;
|
|
17
|
+
protected catch(err: CommandError): Promise<void>;
|
|
18
|
+
shouldSuppressFeedback(): boolean;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=thymian-base-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thymian-base-command.d.ts","sourceRoot":"","sources":["../src/thymian-base-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,KAAK,KAAK,CAAC,CAAC,SAAS,OAAO,OAAO,IAAI,UAAU,CAAC,aAAa,CAC7D,CAAC,OAAO,kBAAkB,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CACtD,CAAC;AACF,KAAK,IAAI,CAAC,CAAC,SAAS,OAAO,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEzE,8BAAsB,kBAAkB,CACtC,CAAC,SAAS,OAAO,OAAO,CACxB,SAAQ,OAAO;IACf,OAAgB,cAAc,UAAQ;IAEtC,OAAgB,SAAS;;MAMvB;IAEF,SAAS,CAAC,KAAK,EAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC9B,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IAEZ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAoBlB,KAAK,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BzD,sBAAsB,IAAI,OAAO;CAGzC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Command, Flags, Interfaces } from '@oclif/core';
|
|
2
|
+
import { ErrorCache } from './error-cache.js';
|
|
3
|
+
import { Feedback } from './feedback.js';
|
|
4
|
+
export class ThymianBaseCommand extends Command {
|
|
5
|
+
static enableJsonFlag = true;
|
|
6
|
+
static baseFlags = {
|
|
7
|
+
['suppress-feedback']: Flags.boolean({
|
|
8
|
+
default: false,
|
|
9
|
+
description: 'Suppress feedback messages from Thymian.',
|
|
10
|
+
helpGroup: 'BASE',
|
|
11
|
+
}),
|
|
12
|
+
};
|
|
13
|
+
flags;
|
|
14
|
+
args;
|
|
15
|
+
feedback;
|
|
16
|
+
errorCache;
|
|
17
|
+
async init() {
|
|
18
|
+
await super.init();
|
|
19
|
+
this.errorCache = ErrorCache.forCommand(this);
|
|
20
|
+
const { args, flags } = await this.parse({
|
|
21
|
+
flags: this.ctor.flags,
|
|
22
|
+
baseFlags: super.ctor.baseFlags,
|
|
23
|
+
enableJsonFlag: this.ctor.enableJsonFlag,
|
|
24
|
+
args: this.ctor.args,
|
|
25
|
+
strict: this.ctor.strict,
|
|
26
|
+
});
|
|
27
|
+
this.flags = flags;
|
|
28
|
+
this.args = args;
|
|
29
|
+
this.feedback = Feedback.forCommand(this);
|
|
30
|
+
await this.feedback?.run();
|
|
31
|
+
}
|
|
32
|
+
async catch(err) {
|
|
33
|
+
await this.feedback?.error();
|
|
34
|
+
const versionDetails = this.config.versionDetails;
|
|
35
|
+
const pluginVersions = Object.entries(versionDetails.pluginVersions ?? {})
|
|
36
|
+
.filter(([name]) => !name.startsWith('@oclif'))
|
|
37
|
+
.map(([name, version]) => ({ name, version: version.version }));
|
|
38
|
+
await this.errorCache?.write({
|
|
39
|
+
name: err.name,
|
|
40
|
+
message: err.message,
|
|
41
|
+
commandName: this.id ?? 'unknown command',
|
|
42
|
+
timestamp: Date.now(),
|
|
43
|
+
cause: err.cause,
|
|
44
|
+
stack: err.stack,
|
|
45
|
+
argv: process.argv,
|
|
46
|
+
version: {
|
|
47
|
+
architecture: versionDetails.architecture,
|
|
48
|
+
cliVersion: versionDetails.cliVersion,
|
|
49
|
+
nodeVersion: versionDetails.nodeVersion,
|
|
50
|
+
osVersion: versionDetails.osVersion,
|
|
51
|
+
},
|
|
52
|
+
pluginVersions,
|
|
53
|
+
});
|
|
54
|
+
return super.catch(err);
|
|
55
|
+
}
|
|
56
|
+
shouldSuppressFeedback() {
|
|
57
|
+
return this.flags['suppress-feedback'];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=thymian-base-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thymian-base-command.js","sourceRoot":"","sources":["../src/thymian-base-command.ts"],"names":[],"mappings":"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"}
|