@flagshark/core 1.0.1 → 1.3.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/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +6 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/excluder.d.ts +18 -0
- package/dist/config/excluder.d.ts.map +1 -0
- package/dist/config/excluder.js +51 -0
- package/dist/config/excluder.js.map +1 -0
- package/dist/config/ignore-file.d.ts +6 -0
- package/dist/config/ignore-file.d.ts.map +1 -0
- package/dist/config/ignore-file.js +23 -0
- package/dist/config/ignore-file.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +7 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +47 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/presets.d.ts +11 -0
- package/dist/config/presets.d.ts.map +1 -0
- package/dist/config/presets.js +70 -0
- package/dist/config/presets.js.map +1 -0
- package/dist/config/schema.d.ts +322 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +63 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/detection/detectors/go.d.ts +8 -2
- package/dist/detection/detectors/go.d.ts.map +1 -1
- package/dist/detection/detectors/go.js +8 -2
- package/dist/detection/detectors/go.js.map +1 -1
- package/dist/detection/detectors/javascript.d.ts +8 -2
- package/dist/detection/detectors/javascript.d.ts.map +1 -1
- package/dist/detection/detectors/javascript.js +8 -2
- package/dist/detection/detectors/javascript.js.map +1 -1
- package/dist/detection/detectors/python.d.ts +8 -2
- package/dist/detection/detectors/python.d.ts.map +1 -1
- package/dist/detection/detectors/python.js +8 -2
- package/dist/detection/detectors/python.js.map +1 -1
- package/dist/detection/detectors/typescript.d.ts +8 -2
- package/dist/detection/detectors/typescript.d.ts.map +1 -1
- package/dist/detection/detectors/typescript.js +8 -2
- package/dist/detection/detectors/typescript.js.map +1 -1
- package/dist/detection/helpers.d.ts +1 -1
- package/dist/detection/helpers.d.ts.map +1 -1
- package/dist/detection/helpers.js +9 -1
- package/dist/detection/helpers.js.map +1 -1
- package/dist/detection/index.d.ts +10 -0
- package/dist/detection/index.d.ts.map +1 -1
- package/dist/detection/index.js +31 -7
- package/dist/detection/index.js.map +1 -1
- package/dist/detection/interface.d.ts +1 -1
- package/dist/detection/interface.d.ts.map +1 -1
- package/dist/detection/registry.d.ts +1 -1
- package/dist/detection/registry.d.ts.map +1 -1
- package/dist/detection/tree-sitter/const-resolver.d.ts +8 -0
- package/dist/detection/tree-sitter/const-resolver.d.ts.map +1 -0
- package/dist/detection/tree-sitter/const-resolver.js +36 -0
- package/dist/detection/tree-sitter/const-resolver.js.map +1 -0
- package/dist/detection/tree-sitter/engine.d.ts +11 -0
- package/dist/detection/tree-sitter/engine.d.ts.map +1 -0
- package/dist/detection/tree-sitter/engine.js +81 -0
- package/dist/detection/tree-sitter/engine.js.map +1 -0
- package/dist/detection/tree-sitter/parser-cache.d.ts +6 -0
- package/dist/detection/tree-sitter/parser-cache.d.ts.map +1 -0
- package/dist/detection/tree-sitter/parser-cache.js +68 -0
- package/dist/detection/tree-sitter/parser-cache.js.map +1 -0
- package/dist/detection/tree-sitter/queries/go.scm +11 -0
- package/dist/detection/tree-sitter/queries/javascript.scm +13 -0
- package/dist/detection/tree-sitter/queries/python.scm +11 -0
- package/dist/detection/tree-sitter/queries/typescript.scm +11 -0
- package/dist/detection/tree-sitter/query-builder.d.ts +3 -0
- package/dist/detection/tree-sitter/query-builder.d.ts.map +1 -0
- package/dist/detection/tree-sitter/query-builder.js +7 -0
- package/dist/detection/tree-sitter/query-builder.js.map +1 -0
- package/dist/detection/tree-sitter/query-runner.d.ts +20 -0
- package/dist/detection/tree-sitter/query-runner.d.ts.map +1 -0
- package/dist/detection/tree-sitter/query-runner.js +83 -0
- package/dist/detection/tree-sitter/query-runner.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/scan-repo.d.ts +27 -0
- package/dist/scan-repo.d.ts.map +1 -1
- package/dist/scan-repo.js +26 -5
- package/dist/scan-repo.js.map +1 -1
- package/dist/scanner.d.ts +11 -2
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +22 -7
- package/dist/scanner.js.map +1 -1
- package/package.json +12 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAEzE,wBAAgB,kBAAkB,IAAI,eAAe,CAGpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAwB,MAAM,aAAa,CAAA;AAEzE,MAAM,UAAU,kBAAkB;IAChC,wDAAwD;IACxD,OAAO,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AACxC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FlagsharkConfig } from './schema.js';
|
|
2
|
+
export interface EffectiveRules {
|
|
3
|
+
paths: string[];
|
|
4
|
+
files: string[];
|
|
5
|
+
presets: string[];
|
|
6
|
+
presetPatterns: string[];
|
|
7
|
+
ignoreFile: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface Excluder {
|
|
10
|
+
shouldExclude(path: string): boolean;
|
|
11
|
+
effectiveRules: EffectiveRules;
|
|
12
|
+
}
|
|
13
|
+
export interface BuildExcluderInput {
|
|
14
|
+
config: FlagsharkConfig;
|
|
15
|
+
ignoreFilePatterns: string[];
|
|
16
|
+
}
|
|
17
|
+
export declare function buildExcluder(input: BuildExcluderInput): Excluder;
|
|
18
|
+
//# sourceMappingURL=excluder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excluder.d.ts","sourceRoot":"","sources":["../../src/config/excluder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIlD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACpC,cAAc,EAAE,cAAc,CAAA;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,eAAe,CAAA;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAC7B;AAwBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,QAAQ,CA4BjE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import ignoreModule from 'ignore';
|
|
2
|
+
import { expandPresets } from './presets.js';
|
|
3
|
+
const ignore = ignoreModule.default ?? ignoreModule;
|
|
4
|
+
/**
|
|
5
|
+
* Convert trailing-slash directory patterns (`examples/`) to recursive globs
|
|
6
|
+
* (`examples/**`) so that `!`-negation works downstream.
|
|
7
|
+
*
|
|
8
|
+
* The `ignore@5` package follows the strict gitignore spec: once a parent
|
|
9
|
+
* directory is excluded via a trailing-slash pattern, files inside it cannot
|
|
10
|
+
* be re-included via `!`. Converting to `examples/**` bypasses this restriction
|
|
11
|
+
* by treating the pattern as a glob rather than a directory match.
|
|
12
|
+
*
|
|
13
|
+
* Trade-off: `examples/**` is anchored to the repo root, while gitignore's
|
|
14
|
+
* `examples/` is unanchored (matches `examples/` anywhere in the tree).
|
|
15
|
+
* In practice the scanner's hardcoded SKIP_DIRS already filters node_modules,
|
|
16
|
+
* vendor, etc., so this anchoring change rarely affects real users — but it
|
|
17
|
+
* is a deliberate departure from strict gitignore semantics.
|
|
18
|
+
*/
|
|
19
|
+
function normalisePattern(p) {
|
|
20
|
+
if (!p.startsWith('!') && p.endsWith('/')) {
|
|
21
|
+
return p + '**';
|
|
22
|
+
}
|
|
23
|
+
return p;
|
|
24
|
+
}
|
|
25
|
+
export function buildExcluder(input) {
|
|
26
|
+
const { config, ignoreFilePatterns } = input;
|
|
27
|
+
const presetPatterns = expandPresets(config.excludes.presets);
|
|
28
|
+
const allPatterns = [
|
|
29
|
+
...config.excludes.paths,
|
|
30
|
+
...config.excludes.files,
|
|
31
|
+
...presetPatterns,
|
|
32
|
+
...ignoreFilePatterns,
|
|
33
|
+
];
|
|
34
|
+
const matcher = ignore().add(allPatterns.map(normalisePattern));
|
|
35
|
+
return {
|
|
36
|
+
shouldExclude(path) {
|
|
37
|
+
if (allPatterns.length === 0)
|
|
38
|
+
return false;
|
|
39
|
+
const normalised = path.startsWith('./') ? path.slice(2) : path;
|
|
40
|
+
return matcher.ignores(normalised);
|
|
41
|
+
},
|
|
42
|
+
effectiveRules: {
|
|
43
|
+
paths: [...config.excludes.paths],
|
|
44
|
+
files: [...config.excludes.files],
|
|
45
|
+
presets: [...config.excludes.presets],
|
|
46
|
+
presetPatterns,
|
|
47
|
+
ignoreFile: [...ignoreFilePatterns],
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=excluder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excluder.js","sourceRoot":"","sources":["../../src/config/excluder.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAI5C,MAAM,MAAM,GAAI,YAA6D,CAAC,OAAO,IAAI,YAAY,CAAA;AAoBrG;;;;;;;;;;;;;;GAcG;AACH,SAAS,gBAAgB,CAAC,CAAS;IACjC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,IAAI,CAAA;IACjB,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAA;IAE5C,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAE7D,MAAM,WAAW,GAAa;QAC5B,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK;QACxB,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK;QACxB,GAAG,cAAc;QACjB,GAAG,kBAAkB;KACtB,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAE/D,OAAO;QACL,aAAa,CAAC,IAAY;YACxB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAA;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YAC/D,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QACpC,CAAC;QACD,cAAc,EAAE;YACd,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YACjC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YACjC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YACrC,cAAc;YACd,UAAU,EAAE,CAAC,GAAG,kBAAkB,CAAC;SACpC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-file.d.ts","sourceRoot":"","sources":["../../src/config/ignore-file.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAkBnF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, join, resolve } from 'node:path';
|
|
4
|
+
export async function loadIgnoreFile(startDir) {
|
|
5
|
+
const home = homedir();
|
|
6
|
+
let dir = resolve(startDir);
|
|
7
|
+
for (;;) {
|
|
8
|
+
const candidate = join(dir, '.flagsharkignore');
|
|
9
|
+
if (existsSync(candidate)) {
|
|
10
|
+
const raw = readFileSync(candidate, 'utf-8');
|
|
11
|
+
const patterns = raw
|
|
12
|
+
.split('\n')
|
|
13
|
+
.map((line) => line.trim())
|
|
14
|
+
.filter((line) => line.length > 0 && !line.startsWith('#'));
|
|
15
|
+
return { patterns, path: candidate };
|
|
16
|
+
}
|
|
17
|
+
const parent = dirname(dir);
|
|
18
|
+
if (parent === dir || dir === home || dir === '/')
|
|
19
|
+
return null;
|
|
20
|
+
dir = parent;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ignore-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore-file.js","sourceRoot":"","sources":["../../src/config/ignore-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOlD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAE3B,SAAS,CAAC;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAA;QAC/C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC5C,MAAM,QAAQ,GAAG,GAAG;iBACjB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;YAC7D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QACtC,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QAC9D,GAAG,GAAG,MAAM,CAAA;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { buildDefaultConfig } from './defaults.js';
|
|
2
|
+
export { loadConfigFile, type LoadedConfig } from './loader.js';
|
|
3
|
+
export { loadIgnoreFile, type LoadedIgnore } from './ignore-file.js';
|
|
4
|
+
export { buildExcluder, type Excluder, type EffectiveRules, type BuildExcluderInput } from './excluder.js';
|
|
5
|
+
export { expandPresets, PRESETS } from './presets.js';
|
|
6
|
+
export { FlagsharkConfigSchema, type FlagsharkConfig, type ExcludesConfig, type SuppressConfig, type PathRuleConfig, type OutputConfig, type PresetName, } from './schema.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAC1G,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { buildDefaultConfig } from './defaults.js';
|
|
2
|
+
export { loadConfigFile } from './loader.js';
|
|
3
|
+
export { loadIgnoreFile } from './ignore-file.js';
|
|
4
|
+
export { buildExcluder } from './excluder.js';
|
|
5
|
+
export { expandPresets, PRESETS } from './presets.js';
|
|
6
|
+
export { FlagsharkConfigSchema, } from './schema.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAqB,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAE,aAAa,EAA+D,MAAM,eAAe,CAAA;AAC1G,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EACL,qBAAqB,GAOtB,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAMA,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAIzE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAenF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, join, resolve } from 'node:path';
|
|
4
|
+
import { parse as parseYaml, YAMLParseError } from 'yaml';
|
|
5
|
+
import { FlagsharkConfigSchema } from './schema.js';
|
|
6
|
+
const FILENAMES = ['.flagshark.yml', '.flagshark.yaml'];
|
|
7
|
+
export async function loadConfigFile(startDir) {
|
|
8
|
+
const home = homedir();
|
|
9
|
+
let dir = resolve(startDir);
|
|
10
|
+
for (;;) {
|
|
11
|
+
for (const name of FILENAMES) {
|
|
12
|
+
const candidate = join(dir, name);
|
|
13
|
+
if (existsSync(candidate)) {
|
|
14
|
+
return readAndValidate(candidate);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const parent = dirname(dir);
|
|
18
|
+
if (parent === dir || dir === home || dir === '/')
|
|
19
|
+
return null;
|
|
20
|
+
dir = parent;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function readAndValidate(path) {
|
|
24
|
+
const raw = readFileSync(path, 'utf-8');
|
|
25
|
+
let parsed;
|
|
26
|
+
try {
|
|
27
|
+
parsed = parseYaml(raw);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
if (err instanceof YAMLParseError) {
|
|
31
|
+
throw new Error(`Invalid YAML in ${path}: ${err.message}`);
|
|
32
|
+
}
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
35
|
+
if (parsed == null || typeof parsed !== 'object') {
|
|
36
|
+
return { config: FlagsharkConfigSchema.parse({}), path };
|
|
37
|
+
}
|
|
38
|
+
const result = FlagsharkConfigSchema.safeParse(parsed);
|
|
39
|
+
if (!result.success) {
|
|
40
|
+
const issues = result.error.issues
|
|
41
|
+
.map((i) => `${i.path.join('.') || '(root)'}: ${i.message}`)
|
|
42
|
+
.join('; ');
|
|
43
|
+
throw new Error(`Invalid .flagshark.yml at ${path}: ${issues}`);
|
|
44
|
+
}
|
|
45
|
+
return { config: result.data, path };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAElD,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAEzD,OAAO,EAAE,qBAAqB,EAAwB,MAAM,aAAa,CAAA;AAEzE,MAAM,SAAS,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAA;AAOvD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAE3B,SAAS,CAAC;QACR,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACjC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,OAAO,eAAe,CAAC,SAAS,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QAC9D,GAAG,GAAG,MAAM,CAAA;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAEvC,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAC5D,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO,EAAE,MAAM,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAA;IAC1D,CAAC;IAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC3D,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,KAAK,MAAM,EAAE,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PresetName } from './schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Built-in exclude presets. Each preset expands to a list of gitignore-style
|
|
4
|
+
* glob patterns that match common conventions for that category.
|
|
5
|
+
*
|
|
6
|
+
* Test-files patterns are derived from the private flag-shark monorepo's
|
|
7
|
+
* `packages/shared/lib/test-files.ts` `isTestFile()` helper — credit there.
|
|
8
|
+
*/
|
|
9
|
+
export declare const PRESETS: Readonly<Record<PresetName, readonly string[]>>;
|
|
10
|
+
export declare function expandPresets(names: readonly PresetName[]): string[];
|
|
11
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/config/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC,CA6ClE,CAAA;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,EAAE,CAcpE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in exclude presets. Each preset expands to a list of gitignore-style
|
|
3
|
+
* glob patterns that match common conventions for that category.
|
|
4
|
+
*
|
|
5
|
+
* Test-files patterns are derived from the private flag-shark monorepo's
|
|
6
|
+
* `packages/shared/lib/test-files.ts` `isTestFile()` helper — credit there.
|
|
7
|
+
*/
|
|
8
|
+
export const PRESETS = Object.freeze({
|
|
9
|
+
'test-files': Object.freeze([
|
|
10
|
+
// JavaScript / TypeScript
|
|
11
|
+
'**/*.test.ts', '**/*.test.tsx', '**/*.test.js', '**/*.test.jsx',
|
|
12
|
+
'**/*.test.mjs', '**/*.test.cjs',
|
|
13
|
+
'**/*.spec.ts', '**/*.spec.tsx', '**/*.spec.js', '**/*.spec.jsx',
|
|
14
|
+
// Go
|
|
15
|
+
'**/*_test.go',
|
|
16
|
+
// Python
|
|
17
|
+
'**/*_test.py', '**/test_*.py',
|
|
18
|
+
// Java / Kotlin
|
|
19
|
+
'**/*Test.java', '**/*Tests.java', '**/*Test.kt', '**/*Tests.kt',
|
|
20
|
+
// Swift
|
|
21
|
+
'**/*Tests.swift',
|
|
22
|
+
// Ruby
|
|
23
|
+
'**/*_spec.rb', '**/spec/**/*.rb',
|
|
24
|
+
// C# / .NET
|
|
25
|
+
'**/*Test.cs', '**/*Tests.cs',
|
|
26
|
+
// PHP
|
|
27
|
+
'**/*Test.php',
|
|
28
|
+
// Rust
|
|
29
|
+
'**/tests/**',
|
|
30
|
+
// Directories that always indicate tests
|
|
31
|
+
'**/__tests__/**', '**/test/**',
|
|
32
|
+
]),
|
|
33
|
+
'snapshots': Object.freeze([
|
|
34
|
+
'**/*.snap',
|
|
35
|
+
'**/__snapshots__/**',
|
|
36
|
+
]),
|
|
37
|
+
'examples': Object.freeze([
|
|
38
|
+
'examples/**', 'example/**',
|
|
39
|
+
'demo/**', 'demos/**',
|
|
40
|
+
]),
|
|
41
|
+
'stories': Object.freeze([
|
|
42
|
+
'**/*.stories.ts', '**/*.stories.tsx',
|
|
43
|
+
'**/*.stories.js', '**/*.stories.jsx',
|
|
44
|
+
'**/*.story.ts', '**/*.story.tsx',
|
|
45
|
+
]),
|
|
46
|
+
'fixtures': Object.freeze([
|
|
47
|
+
'**/__fixtures__/**', '**/fixtures/**',
|
|
48
|
+
]),
|
|
49
|
+
'generated': Object.freeze([
|
|
50
|
+
'**/*.generated.ts', '**/*.generated.js',
|
|
51
|
+
'**/*.gen.go', '**/generated/**',
|
|
52
|
+
]),
|
|
53
|
+
});
|
|
54
|
+
export function expandPresets(names) {
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
const out = [];
|
|
57
|
+
for (const name of names) {
|
|
58
|
+
const patterns = PRESETS[name];
|
|
59
|
+
if (!patterns)
|
|
60
|
+
continue;
|
|
61
|
+
for (const pattern of patterns) {
|
|
62
|
+
if (!seen.has(pattern)) {
|
|
63
|
+
seen.add(pattern);
|
|
64
|
+
out.push(pattern);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/config/presets.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAoD,MAAM,CAAC,MAAM,CAAC;IACpF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1B,0BAA0B;QAC1B,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe;QAChE,eAAe,EAAE,eAAe;QAChC,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe;QAChE,KAAK;QACL,cAAc;QACd,SAAS;QACT,cAAc,EAAE,cAAc;QAC9B,gBAAgB;QAChB,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc;QAChE,QAAQ;QACR,iBAAiB;QACjB,OAAO;QACP,cAAc,EAAE,iBAAiB;QACjC,YAAY;QACZ,aAAa,EAAE,cAAc;QAC7B,MAAM;QACN,cAAc;QACd,OAAO;QACP,aAAa;QACb,yCAAyC;QACzC,iBAAiB,EAAE,YAAY;KAChC,CAAC;IACF,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;QACzB,WAAW;QACX,qBAAqB;KACtB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;QACxB,aAAa,EAAE,YAAY;QAC3B,SAAS,EAAE,UAAU;KACtB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,iBAAiB,EAAE,kBAAkB;QACrC,iBAAiB,EAAE,kBAAkB;QACrC,eAAe,EAAE,gBAAgB;KAClC,CAAC;IACF,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;QACxB,oBAAoB,EAAE,gBAAgB;KACvC,CAAC;IACF,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;QACzB,mBAAmB,EAAE,mBAAmB;QACxC,aAAa,EAAE,iBAAiB;KACjC,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,UAAU,aAAa,CAAC,KAA4B;IACxD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,QAAQ;YAAE,SAAQ;QACvB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACjB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const PresetNameSchema: z.ZodEnum<["test-files", "snapshots", "examples", "stories", "fixtures", "generated"]>;
|
|
3
|
+
export type PresetName = z.infer<typeof PresetNameSchema>;
|
|
4
|
+
export declare const ExcludesSchema: z.ZodDefault<z.ZodObject<{
|
|
5
|
+
paths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
6
|
+
files: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
7
|
+
presets: z.ZodDefault<z.ZodArray<z.ZodEnum<["test-files", "snapshots", "examples", "stories", "fixtures", "generated"]>, "many">>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
paths: string[];
|
|
10
|
+
files: string[];
|
|
11
|
+
presets: ("examples" | "test-files" | "snapshots" | "stories" | "fixtures" | "generated")[];
|
|
12
|
+
}, {
|
|
13
|
+
paths?: string[] | undefined;
|
|
14
|
+
files?: string[] | undefined;
|
|
15
|
+
presets?: ("examples" | "test-files" | "snapshots" | "stories" | "fixtures" | "generated")[] | undefined;
|
|
16
|
+
}>>;
|
|
17
|
+
export declare const SuppressSchema: z.ZodDefault<z.ZodObject<{
|
|
18
|
+
flags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
19
|
+
}, "strip", z.ZodTypeAny, {
|
|
20
|
+
flags: string[];
|
|
21
|
+
}, {
|
|
22
|
+
flags?: string[] | undefined;
|
|
23
|
+
}>>;
|
|
24
|
+
export declare const PathRuleSchema: z.ZodObject<{
|
|
25
|
+
match: z.ZodString;
|
|
26
|
+
threshold: z.ZodOptional<z.ZodNumber>;
|
|
27
|
+
}, "strip", z.ZodTypeAny, {
|
|
28
|
+
match: string;
|
|
29
|
+
threshold?: number | undefined;
|
|
30
|
+
}, {
|
|
31
|
+
match: string;
|
|
32
|
+
threshold?: number | undefined;
|
|
33
|
+
}>;
|
|
34
|
+
export declare const MethodConfigSchema: z.ZodObject<{
|
|
35
|
+
name: z.ZodString;
|
|
36
|
+
flagKeyIndex: z.ZodNumber;
|
|
37
|
+
}, "strip", z.ZodTypeAny, {
|
|
38
|
+
name: string;
|
|
39
|
+
flagKeyIndex: number;
|
|
40
|
+
}, {
|
|
41
|
+
name: string;
|
|
42
|
+
flagKeyIndex: number;
|
|
43
|
+
}>;
|
|
44
|
+
export declare const CustomProviderSchema: z.ZodObject<{
|
|
45
|
+
language: z.ZodEnum<["typescript", "javascript", "go", "python", "java", "kotlin", "swift", "ruby", "csharp", "php", "rust", "cpp", "objc"]>;
|
|
46
|
+
name: z.ZodString;
|
|
47
|
+
importPattern: z.ZodOptional<z.ZodString>;
|
|
48
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
49
|
+
methods: z.ZodArray<z.ZodObject<{
|
|
50
|
+
name: z.ZodString;
|
|
51
|
+
flagKeyIndex: z.ZodNumber;
|
|
52
|
+
}, "strip", z.ZodTypeAny, {
|
|
53
|
+
name: string;
|
|
54
|
+
flagKeyIndex: number;
|
|
55
|
+
}, {
|
|
56
|
+
name: string;
|
|
57
|
+
flagKeyIndex: number;
|
|
58
|
+
}>, "many">;
|
|
59
|
+
}, "strip", z.ZodTypeAny, {
|
|
60
|
+
name: string;
|
|
61
|
+
methods: {
|
|
62
|
+
name: string;
|
|
63
|
+
flagKeyIndex: number;
|
|
64
|
+
}[];
|
|
65
|
+
enabled: boolean;
|
|
66
|
+
language: "go" | "typescript" | "javascript" | "python" | "java" | "kotlin" | "swift" | "ruby" | "csharp" | "php" | "rust" | "cpp" | "objc";
|
|
67
|
+
importPattern?: string | undefined;
|
|
68
|
+
}, {
|
|
69
|
+
name: string;
|
|
70
|
+
methods: {
|
|
71
|
+
name: string;
|
|
72
|
+
flagKeyIndex: number;
|
|
73
|
+
}[];
|
|
74
|
+
language: "go" | "typescript" | "javascript" | "python" | "java" | "kotlin" | "swift" | "ruby" | "csharp" | "php" | "rust" | "cpp" | "objc";
|
|
75
|
+
importPattern?: string | undefined;
|
|
76
|
+
enabled?: boolean | undefined;
|
|
77
|
+
}>;
|
|
78
|
+
export declare const OutputConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
79
|
+
format: z.ZodDefault<z.ZodEnum<["text", "json", "sarif", "markdown", "csv"]>>;
|
|
80
|
+
groupBy: z.ZodDefault<z.ZodEnum<["file", "provider", "signal", "none"]>>;
|
|
81
|
+
sortBy: z.ZodDefault<z.ZodEnum<["age", "name", "count"]>>;
|
|
82
|
+
color: z.ZodDefault<z.ZodEnum<["auto", "always", "never"]>>;
|
|
83
|
+
maxDisplay: z.ZodDefault<z.ZodNumber>;
|
|
84
|
+
}, "strip", z.ZodTypeAny, {
|
|
85
|
+
format: "json" | "text" | "sarif" | "markdown" | "csv";
|
|
86
|
+
groupBy: "provider" | "file" | "signal" | "none";
|
|
87
|
+
sortBy: "name" | "age" | "count";
|
|
88
|
+
color: "never" | "auto" | "always";
|
|
89
|
+
maxDisplay: number;
|
|
90
|
+
}, {
|
|
91
|
+
format?: "json" | "text" | "sarif" | "markdown" | "csv" | undefined;
|
|
92
|
+
groupBy?: "provider" | "file" | "signal" | "none" | undefined;
|
|
93
|
+
sortBy?: "name" | "age" | "count" | undefined;
|
|
94
|
+
color?: "never" | "auto" | "always" | undefined;
|
|
95
|
+
maxDisplay?: number | undefined;
|
|
96
|
+
}>>;
|
|
97
|
+
export declare const HealthScoreSchema: z.ZodDefault<z.ZodObject<{
|
|
98
|
+
weights: z.ZodDefault<z.ZodObject<{
|
|
99
|
+
age: z.ZodDefault<z.ZodNumber>;
|
|
100
|
+
lowUsage: z.ZodDefault<z.ZodNumber>;
|
|
101
|
+
hardcoded: z.ZodDefault<z.ZodNumber>;
|
|
102
|
+
}, "strip", z.ZodTypeAny, {
|
|
103
|
+
age: number;
|
|
104
|
+
hardcoded: number;
|
|
105
|
+
lowUsage: number;
|
|
106
|
+
}, {
|
|
107
|
+
age?: number | undefined;
|
|
108
|
+
hardcoded?: number | undefined;
|
|
109
|
+
lowUsage?: number | undefined;
|
|
110
|
+
}>>;
|
|
111
|
+
}, "strip", z.ZodTypeAny, {
|
|
112
|
+
weights: {
|
|
113
|
+
age: number;
|
|
114
|
+
hardcoded: number;
|
|
115
|
+
lowUsage: number;
|
|
116
|
+
};
|
|
117
|
+
}, {
|
|
118
|
+
weights?: {
|
|
119
|
+
age?: number | undefined;
|
|
120
|
+
hardcoded?: number | undefined;
|
|
121
|
+
lowUsage?: number | undefined;
|
|
122
|
+
} | undefined;
|
|
123
|
+
}>>;
|
|
124
|
+
export declare const EngineSchema: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEnum<["regex", "tree-sitter"]>>>;
|
|
125
|
+
export declare const FlagsharkConfigSchema: z.ZodObject<{
|
|
126
|
+
threshold: z.ZodDefault<z.ZodNumber>;
|
|
127
|
+
excludes: z.ZodDefault<z.ZodObject<{
|
|
128
|
+
paths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
129
|
+
files: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
130
|
+
presets: z.ZodDefault<z.ZodArray<z.ZodEnum<["test-files", "snapshots", "examples", "stories", "fixtures", "generated"]>, "many">>;
|
|
131
|
+
}, "strip", z.ZodTypeAny, {
|
|
132
|
+
paths: string[];
|
|
133
|
+
files: string[];
|
|
134
|
+
presets: ("examples" | "test-files" | "snapshots" | "stories" | "fixtures" | "generated")[];
|
|
135
|
+
}, {
|
|
136
|
+
paths?: string[] | undefined;
|
|
137
|
+
files?: string[] | undefined;
|
|
138
|
+
presets?: ("examples" | "test-files" | "snapshots" | "stories" | "fixtures" | "generated")[] | undefined;
|
|
139
|
+
}>>;
|
|
140
|
+
suppress: z.ZodDefault<z.ZodObject<{
|
|
141
|
+
flags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
142
|
+
}, "strip", z.ZodTypeAny, {
|
|
143
|
+
flags: string[];
|
|
144
|
+
}, {
|
|
145
|
+
flags?: string[] | undefined;
|
|
146
|
+
}>>;
|
|
147
|
+
paths: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
148
|
+
match: z.ZodString;
|
|
149
|
+
threshold: z.ZodOptional<z.ZodNumber>;
|
|
150
|
+
}, "strip", z.ZodTypeAny, {
|
|
151
|
+
match: string;
|
|
152
|
+
threshold?: number | undefined;
|
|
153
|
+
}, {
|
|
154
|
+
match: string;
|
|
155
|
+
threshold?: number | undefined;
|
|
156
|
+
}>, "many">>;
|
|
157
|
+
providers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
158
|
+
language: z.ZodEnum<["typescript", "javascript", "go", "python", "java", "kotlin", "swift", "ruby", "csharp", "php", "rust", "cpp", "objc"]>;
|
|
159
|
+
name: z.ZodString;
|
|
160
|
+
importPattern: z.ZodOptional<z.ZodString>;
|
|
161
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
162
|
+
methods: z.ZodArray<z.ZodObject<{
|
|
163
|
+
name: z.ZodString;
|
|
164
|
+
flagKeyIndex: z.ZodNumber;
|
|
165
|
+
}, "strip", z.ZodTypeAny, {
|
|
166
|
+
name: string;
|
|
167
|
+
flagKeyIndex: number;
|
|
168
|
+
}, {
|
|
169
|
+
name: string;
|
|
170
|
+
flagKeyIndex: number;
|
|
171
|
+
}>, "many">;
|
|
172
|
+
}, "strip", z.ZodTypeAny, {
|
|
173
|
+
name: string;
|
|
174
|
+
methods: {
|
|
175
|
+
name: string;
|
|
176
|
+
flagKeyIndex: number;
|
|
177
|
+
}[];
|
|
178
|
+
enabled: boolean;
|
|
179
|
+
language: "go" | "typescript" | "javascript" | "python" | "java" | "kotlin" | "swift" | "ruby" | "csharp" | "php" | "rust" | "cpp" | "objc";
|
|
180
|
+
importPattern?: string | undefined;
|
|
181
|
+
}, {
|
|
182
|
+
name: string;
|
|
183
|
+
methods: {
|
|
184
|
+
name: string;
|
|
185
|
+
flagKeyIndex: number;
|
|
186
|
+
}[];
|
|
187
|
+
language: "go" | "typescript" | "javascript" | "python" | "java" | "kotlin" | "swift" | "ruby" | "csharp" | "php" | "rust" | "cpp" | "objc";
|
|
188
|
+
importPattern?: string | undefined;
|
|
189
|
+
enabled?: boolean | undefined;
|
|
190
|
+
}>, "many">>;
|
|
191
|
+
output: z.ZodDefault<z.ZodObject<{
|
|
192
|
+
format: z.ZodDefault<z.ZodEnum<["text", "json", "sarif", "markdown", "csv"]>>;
|
|
193
|
+
groupBy: z.ZodDefault<z.ZodEnum<["file", "provider", "signal", "none"]>>;
|
|
194
|
+
sortBy: z.ZodDefault<z.ZodEnum<["age", "name", "count"]>>;
|
|
195
|
+
color: z.ZodDefault<z.ZodEnum<["auto", "always", "never"]>>;
|
|
196
|
+
maxDisplay: z.ZodDefault<z.ZodNumber>;
|
|
197
|
+
}, "strip", z.ZodTypeAny, {
|
|
198
|
+
format: "json" | "text" | "sarif" | "markdown" | "csv";
|
|
199
|
+
groupBy: "provider" | "file" | "signal" | "none";
|
|
200
|
+
sortBy: "name" | "age" | "count";
|
|
201
|
+
color: "never" | "auto" | "always";
|
|
202
|
+
maxDisplay: number;
|
|
203
|
+
}, {
|
|
204
|
+
format?: "json" | "text" | "sarif" | "markdown" | "csv" | undefined;
|
|
205
|
+
groupBy?: "provider" | "file" | "signal" | "none" | undefined;
|
|
206
|
+
sortBy?: "name" | "age" | "count" | undefined;
|
|
207
|
+
color?: "never" | "auto" | "always" | undefined;
|
|
208
|
+
maxDisplay?: number | undefined;
|
|
209
|
+
}>>;
|
|
210
|
+
healthScore: z.ZodDefault<z.ZodObject<{
|
|
211
|
+
weights: z.ZodDefault<z.ZodObject<{
|
|
212
|
+
age: z.ZodDefault<z.ZodNumber>;
|
|
213
|
+
lowUsage: z.ZodDefault<z.ZodNumber>;
|
|
214
|
+
hardcoded: z.ZodDefault<z.ZodNumber>;
|
|
215
|
+
}, "strip", z.ZodTypeAny, {
|
|
216
|
+
age: number;
|
|
217
|
+
hardcoded: number;
|
|
218
|
+
lowUsage: number;
|
|
219
|
+
}, {
|
|
220
|
+
age?: number | undefined;
|
|
221
|
+
hardcoded?: number | undefined;
|
|
222
|
+
lowUsage?: number | undefined;
|
|
223
|
+
}>>;
|
|
224
|
+
}, "strip", z.ZodTypeAny, {
|
|
225
|
+
weights: {
|
|
226
|
+
age: number;
|
|
227
|
+
hardcoded: number;
|
|
228
|
+
lowUsage: number;
|
|
229
|
+
};
|
|
230
|
+
}, {
|
|
231
|
+
weights?: {
|
|
232
|
+
age?: number | undefined;
|
|
233
|
+
hardcoded?: number | undefined;
|
|
234
|
+
lowUsage?: number | undefined;
|
|
235
|
+
} | undefined;
|
|
236
|
+
}>>;
|
|
237
|
+
engine: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEnum<["regex", "tree-sitter"]>>>;
|
|
238
|
+
}, "strict", z.ZodTypeAny, {
|
|
239
|
+
providers: {
|
|
240
|
+
name: string;
|
|
241
|
+
methods: {
|
|
242
|
+
name: string;
|
|
243
|
+
flagKeyIndex: number;
|
|
244
|
+
}[];
|
|
245
|
+
enabled: boolean;
|
|
246
|
+
language: "go" | "typescript" | "javascript" | "python" | "java" | "kotlin" | "swift" | "ruby" | "csharp" | "php" | "rust" | "cpp" | "objc";
|
|
247
|
+
importPattern?: string | undefined;
|
|
248
|
+
}[];
|
|
249
|
+
engine: Record<string, "regex" | "tree-sitter">;
|
|
250
|
+
paths: {
|
|
251
|
+
match: string;
|
|
252
|
+
threshold?: number | undefined;
|
|
253
|
+
}[];
|
|
254
|
+
threshold: number;
|
|
255
|
+
excludes: {
|
|
256
|
+
paths: string[];
|
|
257
|
+
files: string[];
|
|
258
|
+
presets: ("examples" | "test-files" | "snapshots" | "stories" | "fixtures" | "generated")[];
|
|
259
|
+
};
|
|
260
|
+
suppress: {
|
|
261
|
+
flags: string[];
|
|
262
|
+
};
|
|
263
|
+
output: {
|
|
264
|
+
format: "json" | "text" | "sarif" | "markdown" | "csv";
|
|
265
|
+
groupBy: "provider" | "file" | "signal" | "none";
|
|
266
|
+
sortBy: "name" | "age" | "count";
|
|
267
|
+
color: "never" | "auto" | "always";
|
|
268
|
+
maxDisplay: number;
|
|
269
|
+
};
|
|
270
|
+
healthScore: {
|
|
271
|
+
weights: {
|
|
272
|
+
age: number;
|
|
273
|
+
hardcoded: number;
|
|
274
|
+
lowUsage: number;
|
|
275
|
+
};
|
|
276
|
+
};
|
|
277
|
+
}, {
|
|
278
|
+
providers?: {
|
|
279
|
+
name: string;
|
|
280
|
+
methods: {
|
|
281
|
+
name: string;
|
|
282
|
+
flagKeyIndex: number;
|
|
283
|
+
}[];
|
|
284
|
+
language: "go" | "typescript" | "javascript" | "python" | "java" | "kotlin" | "swift" | "ruby" | "csharp" | "php" | "rust" | "cpp" | "objc";
|
|
285
|
+
importPattern?: string | undefined;
|
|
286
|
+
enabled?: boolean | undefined;
|
|
287
|
+
}[] | undefined;
|
|
288
|
+
engine?: Record<string, "regex" | "tree-sitter"> | undefined;
|
|
289
|
+
paths?: {
|
|
290
|
+
match: string;
|
|
291
|
+
threshold?: number | undefined;
|
|
292
|
+
}[] | undefined;
|
|
293
|
+
threshold?: number | undefined;
|
|
294
|
+
excludes?: {
|
|
295
|
+
paths?: string[] | undefined;
|
|
296
|
+
files?: string[] | undefined;
|
|
297
|
+
presets?: ("examples" | "test-files" | "snapshots" | "stories" | "fixtures" | "generated")[] | undefined;
|
|
298
|
+
} | undefined;
|
|
299
|
+
suppress?: {
|
|
300
|
+
flags?: string[] | undefined;
|
|
301
|
+
} | undefined;
|
|
302
|
+
output?: {
|
|
303
|
+
format?: "json" | "text" | "sarif" | "markdown" | "csv" | undefined;
|
|
304
|
+
groupBy?: "provider" | "file" | "signal" | "none" | undefined;
|
|
305
|
+
sortBy?: "name" | "age" | "count" | undefined;
|
|
306
|
+
color?: "never" | "auto" | "always" | undefined;
|
|
307
|
+
maxDisplay?: number | undefined;
|
|
308
|
+
} | undefined;
|
|
309
|
+
healthScore?: {
|
|
310
|
+
weights?: {
|
|
311
|
+
age?: number | undefined;
|
|
312
|
+
hardcoded?: number | undefined;
|
|
313
|
+
lowUsage?: number | undefined;
|
|
314
|
+
} | undefined;
|
|
315
|
+
} | undefined;
|
|
316
|
+
}>;
|
|
317
|
+
export type FlagsharkConfig = z.infer<typeof FlagsharkConfigSchema>;
|
|
318
|
+
export type ExcludesConfig = z.infer<typeof ExcludesSchema>;
|
|
319
|
+
export type SuppressConfig = z.infer<typeof SuppressSchema>;
|
|
320
|
+
export type PathRuleConfig = z.infer<typeof PathRuleSchema>;
|
|
321
|
+
export type OutputConfig = z.infer<typeof OutputConfigSchema>;
|
|
322
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAWvB,eAAO,MAAM,gBAAgB,wFAAuB,CAAA;AACpD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEzD,eAAO,MAAM,cAAc;;;;;;;;;;;;GAIb,CAAA;AAEd,eAAO,MAAM,cAAc;;;;;;GAEb,CAAA;AAEd,eAAO,MAAM,cAAc;;;;;;;;;EAGzB,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAA;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU/B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;GAMjB,CAAA;AAEd,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;GAMhB,CAAA;AAEd,eAAO,MAAM,YAAY,6EAGZ,CAAA;AAEb,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASvB,CAAA;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC3D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC3D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC3D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA"}
|