@breadstone-infrastructure/token-linter 0.0.231
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/CHANGELOG.md +10 -0
- package/LICENSE +21 -0
- package/README.md +72 -0
- package/cli/Cli.d.ts +10 -0
- package/cli/Cli.d.ts.map +1 -0
- package/cli/Cli.js +32 -0
- package/cli/Cli.js.map +1 -0
- package/cli/CliArgs.d.ts +2 -0
- package/cli/CliArgs.d.ts.map +1 -0
- package/cli/CliArgs.js +88 -0
- package/cli/CliArgs.js.map +1 -0
- package/cli/CliArgsConfig.d.ts +2 -0
- package/cli/CliArgsConfig.d.ts.map +1 -0
- package/cli/CliArgsConfig.js +12 -0
- package/cli/CliArgsConfig.js.map +1 -0
- package/cli/CliRun.d.ts +2 -0
- package/cli/CliRun.d.ts.map +1 -0
- package/cli/CliRun.js +34 -0
- package/cli/CliRun.js.map +1 -0
- package/cli/commands/LintCommand.d.ts +2 -0
- package/cli/commands/LintCommand.d.ts.map +1 -0
- package/cli/commands/LintCommand.js +66 -0
- package/cli/commands/LintCommand.js.map +1 -0
- package/cli/commands/LintCommandArgsConfig.d.ts +2 -0
- package/cli/commands/LintCommandArgsConfig.d.ts.map +1 -0
- package/cli/commands/LintCommandArgsConfig.js +46 -0
- package/cli/commands/LintCommandArgsConfig.js.map +1 -0
- package/cli/lint.d.ts +3 -0
- package/cli/lint.d.ts.map +1 -0
- package/cli/lint.js +55 -0
- package/cli/lint.js.map +1 -0
- package/config/TokenLinterConfigDiscovery.d.ts +16 -0
- package/config/TokenLinterConfigDiscovery.d.ts.map +1 -0
- package/config/TokenLinterConfigDiscovery.js +44 -0
- package/config/TokenLinterConfigDiscovery.js.map +1 -0
- package/config/defineConfig.d.ts +41 -0
- package/config/defineConfig.d.ts.map +1 -0
- package/config/defineConfig.js +37 -0
- package/config/defineConfig.js.map +1 -0
- package/core/interaction.d.ts +25 -0
- package/core/interaction.d.ts.map +1 -0
- package/core/interaction.js +45 -0
- package/core/interaction.js.map +1 -0
- package/core/loader.d.ts +21 -0
- package/core/loader.d.ts.map +1 -0
- package/core/loader.js +84 -0
- package/core/loader.js.map +1 -0
- package/core/rule-registry.d.ts +46 -0
- package/core/rule-registry.d.ts.map +1 -0
- package/core/rule-registry.js +73 -0
- package/core/rule-registry.js.map +1 -0
- package/core/rule.d.ts +46 -0
- package/core/rule.d.ts.map +1 -0
- package/core/rule.js +3 -0
- package/core/rule.js.map +1 -0
- package/core/runner.d.ts +23 -0
- package/core/runner.d.ts.map +1 -0
- package/core/runner.js +103 -0
- package/core/runner.js.map +1 -0
- package/index.d.ts +46 -0
- package/index.d.ts.map +1 -0
- package/index.js +47 -0
- package/index.js.map +1 -0
- package/models/lint-result.d.ts +14 -0
- package/models/lint-result.d.ts.map +1 -0
- package/models/lint-result.js +3 -0
- package/models/lint-result.js.map +1 -0
- package/models/rule-context.d.ts +18 -0
- package/models/rule-context.d.ts.map +1 -0
- package/models/rule-context.js +3 -0
- package/models/rule-context.js.map +1 -0
- package/models/rule-finding.d.ts +15 -0
- package/models/rule-finding.d.ts.map +1 -0
- package/models/rule-finding.js +3 -0
- package/models/rule-finding.js.map +1 -0
- package/models/rule-result.d.ts +11 -0
- package/models/rule-result.d.ts.map +1 -0
- package/models/rule-result.js +3 -0
- package/models/rule-result.js.map +1 -0
- package/models/rule-severity.d.ts +14 -0
- package/models/rule-severity.d.ts.map +1 -0
- package/models/rule-severity.js +10 -0
- package/models/rule-severity.js.map +1 -0
- package/models/token-entry.d.ts +11 -0
- package/models/token-entry.d.ts.map +1 -0
- package/models/token-entry.js +2 -0
- package/models/token-entry.js.map +1 -0
- package/models/token-linter-config.d.ts +30 -0
- package/models/token-linter-config.d.ts.map +1 -0
- package/models/token-linter-config.js +3 -0
- package/models/token-linter-config.js.map +1 -0
- package/orchestration/TokenLinterOrchestrator.d.ts +29 -0
- package/orchestration/TokenLinterOrchestrator.d.ts.map +1 -0
- package/orchestration/TokenLinterOrchestrator.js +98 -0
- package/orchestration/TokenLinterOrchestrator.js.map +1 -0
- package/package.json +20 -0
- package/presets/index.d.ts +2 -0
- package/presets/index.d.ts.map +1 -0
- package/presets/index.js +2 -0
- package/presets/index.js.map +1 -0
- package/presets/recommended.d.ts +23 -0
- package/presets/recommended.d.ts.map +1 -0
- package/presets/recommended.js +41 -0
- package/presets/recommended.js.map +1 -0
- package/reporters/console.reporter.d.ts +15 -0
- package/reporters/console.reporter.d.ts.map +1 -0
- package/reporters/console.reporter.js +75 -0
- package/reporters/console.reporter.js.map +1 -0
- package/reporters/json.reporter.d.ts +11 -0
- package/reporters/json.reporter.d.ts.map +1 -0
- package/reporters/json.reporter.js +37 -0
- package/reporters/json.reporter.js.map +1 -0
- package/reporters/reporter.d.ts +16 -0
- package/reporters/reporter.d.ts.map +1 -0
- package/reporters/reporter.js +3 -0
- package/reporters/reporter.js.map +1 -0
- package/reporters/summary.reporter.d.ts +12 -0
- package/reporters/summary.reporter.d.ts.map +1 -0
- package/reporters/summary.reporter.js +48 -0
- package/reporters/summary.reporter.js.map +1 -0
- package/rules/alphabetical-sort.rule.d.ts +19 -0
- package/rules/alphabetical-sort.rule.d.ts.map +1 -0
- package/rules/alphabetical-sort.rule.js +72 -0
- package/rules/alphabetical-sort.rule.js.map +1 -0
- package/rules/component-presence.rule.d.ts +29 -0
- package/rules/component-presence.rule.d.ts.map +1 -0
- package/rules/component-presence.rule.js +102 -0
- package/rules/component-presence.rule.js.map +1 -0
- package/rules/duplicate-value.rule.d.ts +17 -0
- package/rules/duplicate-value.rule.d.ts.map +1 -0
- package/rules/duplicate-value.rule.js +49 -0
- package/rules/duplicate-value.rule.js.map +1 -0
- package/rules/empty-json.rule.d.ts +52 -0
- package/rules/empty-json.rule.d.ts.map +1 -0
- package/rules/empty-json.rule.js +100 -0
- package/rules/empty-json.rule.js.map +1 -0
- package/rules/forbidden-key.rule.d.ts +57 -0
- package/rules/forbidden-key.rule.d.ts.map +1 -0
- package/rules/forbidden-key.rule.js +118 -0
- package/rules/forbidden-key.rule.js.map +1 -0
- package/rules/forbidden-value.rule.d.ts +53 -0
- package/rules/forbidden-value.rule.d.ts.map +1 -0
- package/rules/forbidden-value.rule.js +130 -0
- package/rules/forbidden-value.rule.js.map +1 -0
- package/rules/includes-consistency.rule.d.ts +30 -0
- package/rules/includes-consistency.rule.d.ts.map +1 -0
- package/rules/includes-consistency.rule.js +153 -0
- package/rules/includes-consistency.rule.js.map +1 -0
- package/rules/index.d.ts +7 -0
- package/rules/index.d.ts.map +1 -0
- package/rules/index.js +47 -0
- package/rules/index.js.map +1 -0
- package/rules/key-consistency.rule.d.ts +38 -0
- package/rules/key-consistency.rule.d.ts.map +1 -0
- package/rules/key-consistency.rule.js +161 -0
- package/rules/key-consistency.rule.js.map +1 -0
- package/rules/missing-includes.rule.d.ts +19 -0
- package/rules/missing-includes.rule.d.ts.map +1 -0
- package/rules/missing-includes.rule.js +51 -0
- package/rules/missing-includes.rule.js.map +1 -0
- package/rules/mixin-reference.rule.d.ts +28 -0
- package/rules/mixin-reference.rule.d.ts.map +1 -0
- package/rules/mixin-reference.rule.js +104 -0
- package/rules/mixin-reference.rule.js.map +1 -0
- package/rules/naming-convention.rule.d.ts +29 -0
- package/rules/naming-convention.rule.d.ts.map +1 -0
- package/rules/naming-convention.rule.js +112 -0
- package/rules/naming-convention.rule.js.map +1 -0
- package/rules/nested-depth.rule.d.ts +42 -0
- package/rules/nested-depth.rule.d.ts.map +1 -0
- package/rules/nested-depth.rule.js +72 -0
- package/rules/nested-depth.rule.js.map +1 -0
- package/rules/required-includes.rule.d.ts +60 -0
- package/rules/required-includes.rule.d.ts.map +1 -0
- package/rules/required-includes.rule.js +118 -0
- package/rules/required-includes.rule.js.map +1 -0
- package/rules/rule-options.d.ts +158 -0
- package/rules/rule-options.d.ts.map +1 -0
- package/rules/rule-options.js +89 -0
- package/rules/rule-options.js.map +1 -0
- package/rules/value-consistency.rule.d.ts +17 -0
- package/rules/value-consistency.rule.d.ts.map +1 -0
- package/rules/value-consistency.rule.js +69 -0
- package/rules/value-consistency.rule.js.map +1 -0
- package/rules/value-schema.rule.d.ts +18 -0
- package/rules/value-schema.rule.d.ts.map +1 -0
- package/rules/value-schema.rule.js +108 -0
- package/rules/value-schema.rule.js.map +1 -0
- package/rules/value-type.rule.d.ts +71 -0
- package/rules/value-type.rule.d.ts.map +1 -0
- package/rules/value-type.rule.js +176 -0
- package/rules/value-type.rule.js.map +1 -0
- package/utils.d.ts +55 -0
- package/utils.d.ts.map +1 -0
- package/utils.js +125 -0
- package/utils.js.map +1 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
## 0.0.231 (2026-03-14)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **cli:** integrate CliParser for improved argument parsing and build scripts ([23b1773dce](https://github.com/RueDeRennes/mosaik/commit/23b1773dce))
|
|
6
|
+
- **cli:** implement Prisma Seeds CLI with argument configuration and commands ([d7d3ab6ff9](https://github.com/RueDeRennes/mosaik/commit/d7d3ab6ff9))
|
|
7
|
+
- **token-linter:** enhance rule options with detailed interfaces and functions ([396600ab78](https://github.com/RueDeRennes/mosaik/commit/396600ab78))
|
|
8
|
+
- **buttons): add ripple prop to button components and related updates feat(components): implement ripple behavior in various components fix(theme:** remove duplicate ripple property in theme JSON files ([d31f695f82](https://github.com/RueDeRennes/mosaik/commit/d31f695f82))
|
|
9
|
+
- **McpToolRegistrar): add overview and framework guide tools with enhanced descriptions feat(package:** update dependencies across multiple packages to latest versions ([45bc8fb4f6](https://github.com/RueDeRennes/mosaik/commit/45bc8fb4f6))
|
|
10
|
+
- **Button, Banner:** add shadow properties and update related styles and tokens ([5d69398b19](https://github.com/RueDeRennes/mosaik/commit/5d69398b19))
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 andre.wehlert
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# @breadstone-infrastructure/token-linter
|
|
2
|
+
|
|
3
|
+
A configurable, extensible linter for **Style Dictionary** token JSON files. Validates structure, consistency, naming, and values across themes.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **14 built-in rules** covering structural, quality, and formatting concerns
|
|
8
|
+
- **Config-file driven** — place a `tokenlinter.config.mjs` in your project
|
|
9
|
+
- **Rule severity overrides** — set rules to `error`, `warning`, `info`, or `off`
|
|
10
|
+
- **Auto-fix support** — fixable rules (alphabetical sort, missing includes) can write corrections
|
|
11
|
+
- **Multiple reporters** — console (colored), JSON (CI), summary (compact)
|
|
12
|
+
- **Extensible** — register custom rules via the public `IRule` interface
|
|
13
|
+
- **Standalone** — usable as a library, CLI, or via Nx executor
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
### Config file (`tokenlinter.config.mjs`)
|
|
18
|
+
|
|
19
|
+
```js
|
|
20
|
+
import { defineConfig } from '@breadstone-infrastructure/token-linter';
|
|
21
|
+
|
|
22
|
+
export default defineConfig({
|
|
23
|
+
themes: ['joy', 'memphis', 'cosmopolitan'],
|
|
24
|
+
tokensDir: 'tokens/themes',
|
|
25
|
+
mixinsDir: 'tokens/mixins',
|
|
26
|
+
reporter: 'console',
|
|
27
|
+
rules: {
|
|
28
|
+
'forbidden-value': 'warning',
|
|
29
|
+
'empty-json': 'off',
|
|
30
|
+
},
|
|
31
|
+
ruleOptions: {
|
|
32
|
+
'forbidden-key': { keys: ['transition', 'shadow'], themes: ['memphis'] },
|
|
33
|
+
'nested-depth': { maxDepth: 3 },
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Nx Executor
|
|
39
|
+
|
|
40
|
+
```jsonc
|
|
41
|
+
{
|
|
42
|
+
"token-lint": {
|
|
43
|
+
"executor": "@breadstone-infrastructure/nx-tasks:token-linter",
|
|
44
|
+
"options": {
|
|
45
|
+
"configFile": "tokenlinter.config.mjs"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Built-in Rules
|
|
52
|
+
|
|
53
|
+
| Rule | Default Severity | Fixable | Description |
|
|
54
|
+
|---|---|---|---|
|
|
55
|
+
| `component-presence` | error | — | All themes contain the same component files |
|
|
56
|
+
| `key-consistency` | error | — | Same keys per component across themes |
|
|
57
|
+
| `includes-consistency` | warning | — | `$includes` arrays match across themes |
|
|
58
|
+
| `missing-includes` | warning | ✓ | All files have a `$includes` field |
|
|
59
|
+
| `empty-json` | warning | — | No empty token files |
|
|
60
|
+
| `forbidden-value` | warning | — | No forbidden values (unset, 0px, all) |
|
|
61
|
+
| `forbidden-key` | warning | — | No forbidden keys (configurable) |
|
|
62
|
+
| `naming-convention` | warning | — | camelCase token keys |
|
|
63
|
+
| `value-schema` | info | — | Values match CSS patterns |
|
|
64
|
+
| `value-consistency` | info | — | var() vs hardcoded drift detection |
|
|
65
|
+
| `duplicate-value` | info | — | Duplicate values that could be shared |
|
|
66
|
+
| `nested-depth` | warning | — | Max nesting depth enforcement |
|
|
67
|
+
| `mixin-reference` | error | — | `$includes` refs point to real mixins |
|
|
68
|
+
| `alphabetical-sort` | warning | ✓ | Keys sorted alphabetically |
|
|
69
|
+
|
|
70
|
+
## License
|
|
71
|
+
|
|
72
|
+
MIT
|
package/cli/Cli.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Program } from '@breadstone-infrastructure/utilities';
|
|
2
|
+
import { type ICliArgsConfig } from './CliArgsConfig.js';
|
|
3
|
+
/**
|
|
4
|
+
* @description Token Linter CLI application.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export declare class Cli extends Program<ICliArgsConfig> {
|
|
8
|
+
constructor();
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=Cli.d.ts.map
|
package/cli/Cli.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../../src/cli/Cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAE/D,OAAO,EAA2B,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAMlF;;;GAGG;AACH,qBAAa,GAAI,SAAQ,OAAO,CAAC,cAAc,CAAC;;CA2B/C"}
|
package/cli/Cli.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { Program } from '@breadstone-infrastructure/utilities';
|
|
3
|
+
import { CLI_ARGS } from './CliArgs.js';
|
|
4
|
+
import { DEFAULT_CLI_ARGS_CONFIG } from './CliArgsConfig.js';
|
|
5
|
+
import { LintCommand } from './commands/LintCommand.js';
|
|
6
|
+
import { DEFAULT_LINT_COMMAND_ARGS_CONFIG } from './commands/LintCommandArgsConfig.js';
|
|
7
|
+
// #endregion
|
|
8
|
+
/**
|
|
9
|
+
* @description Token Linter CLI application.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export class Cli extends Program {
|
|
13
|
+
// #region Ctor
|
|
14
|
+
constructor() {
|
|
15
|
+
super({
|
|
16
|
+
moduleName: 'token-linter',
|
|
17
|
+
prog: 'token-linter',
|
|
18
|
+
description: 'Token Linter — A configurable linter for Style Dictionary token JSON files.',
|
|
19
|
+
version: '@@VERSION',
|
|
20
|
+
addHelp: true,
|
|
21
|
+
debug: true,
|
|
22
|
+
});
|
|
23
|
+
this.config
|
|
24
|
+
.assign(DEFAULT_CLI_ARGS_CONFIG);
|
|
25
|
+
this.args
|
|
26
|
+
.register(...CLI_ARGS);
|
|
27
|
+
const lintCtorFn = () => [DEFAULT_LINT_COMMAND_ARGS_CONFIG];
|
|
28
|
+
this.commands
|
|
29
|
+
.register('lint', LintCommand, lintCtorFn);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=Cli.js.map
|
package/cli/Cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cli.js","sourceRoot":"","sources":["../../src/cli/Cli.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAuB,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gCAAgC,EAAE,MAAM,qCAAqC,CAAC;AAEvF,aAAa;AAEb;;;GAGG;AACH,MAAM,OAAO,GAAI,SAAQ,OAAuB;IAE5C,eAAe;IAEf;QACI,KAAK,CAAC;YACF,UAAU,EAAE,cAAc;YAC1B,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,6EAA6E;YAC1F,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM;aACN,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAErC,IAAI,CAAC,IAAI;aACJ,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;QAE3B,MAAM,UAAU,GAAoD,GAAG,EAAE,CAAC,CAAC,gCAAgC,CAAC,CAAC;QAE7G,IAAI,CAAC,QAAQ;aACR,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;CAGJ"}
|
package/cli/CliArgs.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgs.d.ts","sourceRoot":"","sources":["../../src/cli/CliArgs.ts"],"names":[],"mappings":""}
|
package/cli/CliArgs.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { Boolean } from '@breadstone-infrastructure/utilities';
|
|
3
|
+
import { DEFAULT_CLI_ARGS_CONFIG } from './CliArgsConfig.js';
|
|
4
|
+
// #endregion
|
|
5
|
+
// #region Arguments
|
|
6
|
+
/**
|
|
7
|
+
* @description Enables auto-fix for fixable rule violations.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export const FIX_ARG = {
|
|
11
|
+
alias: ['-f', '--fix'],
|
|
12
|
+
options: {
|
|
13
|
+
type: (value) => Boolean.parse(value),
|
|
14
|
+
required: false,
|
|
15
|
+
default: DEFAULT_CLI_ARGS_CONFIG.fix,
|
|
16
|
+
metavar: 'boolean',
|
|
17
|
+
help: 'Enables auto-fix for fixable rule violations.',
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* @description Enables verbose logging output.
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export const VERBOSE_ARG = {
|
|
25
|
+
alias: ['-v', '--verbose'],
|
|
26
|
+
options: {
|
|
27
|
+
type: (value) => Boolean.parse(value),
|
|
28
|
+
required: false,
|
|
29
|
+
default: DEFAULT_CLI_ARGS_CONFIG.verbose,
|
|
30
|
+
metavar: 'boolean',
|
|
31
|
+
help: 'Enables verbose logging output.',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* @description Enables interactive mode for rule resolution.
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export const INTERACTIVE_ARG = {
|
|
39
|
+
alias: ['-i', '--interactive'],
|
|
40
|
+
options: {
|
|
41
|
+
type: (value) => Boolean.parse(value),
|
|
42
|
+
required: false,
|
|
43
|
+
default: DEFAULT_CLI_ARGS_CONFIG.interactive,
|
|
44
|
+
metavar: 'boolean',
|
|
45
|
+
help: 'Enables interactive mode for rule resolution.',
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* @description Sets the reporter type for output formatting.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
export const REPORTER_ARG = {
|
|
53
|
+
alias: ['-r', '--reporter'],
|
|
54
|
+
options: {
|
|
55
|
+
required: false,
|
|
56
|
+
default: DEFAULT_CLI_ARGS_CONFIG.reporter,
|
|
57
|
+
metavar: 'string',
|
|
58
|
+
help: 'Sets the reporter type (console, json, summary).',
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* @description Sets the current working directory.
|
|
63
|
+
* @internal
|
|
64
|
+
*/
|
|
65
|
+
export const CWD_ARG = {
|
|
66
|
+
alias: ['-c', '--cwd'],
|
|
67
|
+
options: {
|
|
68
|
+
required: false,
|
|
69
|
+
default: DEFAULT_CLI_ARGS_CONFIG.cwd,
|
|
70
|
+
metavar: 'string',
|
|
71
|
+
help: 'Specifies the current working directory for config discovery.',
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
// #endregion
|
|
75
|
+
// #region Exports
|
|
76
|
+
/**
|
|
77
|
+
* @description Aggregate export for all CLI arguments.
|
|
78
|
+
* @internal
|
|
79
|
+
*/
|
|
80
|
+
export const CLI_ARGS = [
|
|
81
|
+
FIX_ARG,
|
|
82
|
+
VERBOSE_ARG,
|
|
83
|
+
INTERACTIVE_ARG,
|
|
84
|
+
REPORTER_ARG,
|
|
85
|
+
CWD_ARG,
|
|
86
|
+
];
|
|
87
|
+
// #endregion
|
|
88
|
+
//# sourceMappingURL=CliArgs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgs.js","sourceRoot":"","sources":["../../src/cli/CliArgs.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,EAAE,OAAO,EAAoB,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,aAAa;AAEb,oBAAoB;AAEpB;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAgB;IAChC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE;QACL,IAAI,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7C,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,uBAAuB,CAAC,GAAG;QACpC,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,+CAA+C;KACxD;CACJ,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAgB;IACpC,KAAK,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC;IAC1B,OAAO,EAAE;QACL,IAAI,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7C,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,uBAAuB,CAAC,OAAO;QACxC,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,iCAAiC;KAC1C;CACJ,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgB;IACxC,KAAK,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC;IAC9B,OAAO,EAAE;QACL,IAAI,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7C,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,uBAAuB,CAAC,WAAW;QAC5C,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,+CAA+C;KACxD;CACJ,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAgB;IACrC,KAAK,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE;QACL,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,uBAAuB,CAAC,QAAQ;QACzC,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,kDAAkD;KAC3D;CACJ,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAgB;IAChC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE;QACL,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,uBAAuB,CAAC,GAAG;QACpC,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,+DAA+D;KACxE;CACJ,CAAC;AAEF,aAAa;AAEb,kBAAkB;AAElB;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,OAAO;IACP,WAAW;IACX,eAAe;IACf,YAAY;IACZ,OAAO;CACV,CAAC;AAEF,aAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgsConfig.d.ts","sourceRoot":"","sources":["../../src/cli/CliArgsConfig.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Default CLI argument values.
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export const DEFAULT_CLI_ARGS_CONFIG = {
|
|
6
|
+
fix: false,
|
|
7
|
+
verbose: false,
|
|
8
|
+
interactive: false,
|
|
9
|
+
reporter: 'console',
|
|
10
|
+
cwd: process.cwd(),
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=CliArgsConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliArgsConfig.js","sourceRoot":"","sources":["../../src/cli/CliArgsConfig.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACnD,GAAG,EAAE,KAAK;IACV,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;CACrB,CAAC"}
|
package/cli/CliRun.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliRun.d.ts","sourceRoot":"","sources":["../../src/cli/CliRun.ts"],"names":[],"mappings":""}
|
package/cli/CliRun.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { ConsoleLogger } from '@breadstone-infrastructure/utilities';
|
|
3
|
+
import { Cli } from './Cli.js';
|
|
4
|
+
// #endregion
|
|
5
|
+
const logger = new ConsoleLogger();
|
|
6
|
+
/**
|
|
7
|
+
* @description Bootstrap the Token Linter CLI.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
(async () => {
|
|
11
|
+
const catchAction = (error) => {
|
|
12
|
+
logger.error(String(error));
|
|
13
|
+
};
|
|
14
|
+
let cli = null;
|
|
15
|
+
try {
|
|
16
|
+
cli = new Cli();
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
catchAction(error);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
await cli.init();
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
catchAction(error);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
await cli.run();
|
|
30
|
+
})().catch((error) => {
|
|
31
|
+
logger.error(error);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=CliRun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliRun.js","sourceRoot":"","sources":["../../src/cli/CliRun.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,aAAa;AAEb,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;AAEnC;;;GAGG;AACH,CAAC,KAAK,IAAI,EAAE;IACR,MAAM,WAAW,GAAG,CAAC,KAAY,EAAQ,EAAE;QACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,IAAI,GAAG,GAAe,IAAI,CAAC;IAC3B,IAAI,CAAC;QACD,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,WAAW,CAAC,KAAc,CAAC,CAAC;QAC5B,OAAO;IACX,CAAC;IAED,IAAI,CAAC;QACD,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,WAAW,CAAC,KAAc,CAAC,CAAC;QAC5B,OAAO;IACX,CAAC;IAED,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;AACpB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC1B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LintCommand.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/LintCommand.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { ProgramCommandBase } from '@breadstone-infrastructure/utilities';
|
|
3
|
+
import { TokenLinterOrchestrator } from '../../orchestration/TokenLinterOrchestrator.js';
|
|
4
|
+
import { DEFAULT_LINT_COMMAND_ARGS_CONFIG, LINT_COMMAND_ARGS } from './LintCommandArgsConfig.js';
|
|
5
|
+
// #endregion
|
|
6
|
+
/**
|
|
7
|
+
* @description CLI command that executes the token linter.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export class LintCommand extends ProgramCommandBase {
|
|
11
|
+
// #region Fields
|
|
12
|
+
_orchestrator;
|
|
13
|
+
// #endregion
|
|
14
|
+
// #region Ctor
|
|
15
|
+
constructor(config) {
|
|
16
|
+
super(config);
|
|
17
|
+
this._orchestrator = new TokenLinterOrchestrator();
|
|
18
|
+
}
|
|
19
|
+
// #endregion
|
|
20
|
+
// #region Properties
|
|
21
|
+
get name() {
|
|
22
|
+
return 'lint';
|
|
23
|
+
}
|
|
24
|
+
get args() {
|
|
25
|
+
return LINT_COMMAND_ARGS;
|
|
26
|
+
}
|
|
27
|
+
// #endregion
|
|
28
|
+
// #region Methods
|
|
29
|
+
configure(config) {
|
|
30
|
+
return Object.assign(this.config, DEFAULT_LINT_COMMAND_ARGS_CONFIG, super.configure(config));
|
|
31
|
+
}
|
|
32
|
+
async execute() {
|
|
33
|
+
const rootPath = this.config.cwd || process.cwd();
|
|
34
|
+
const overrides = {};
|
|
35
|
+
if (this.config.fix) {
|
|
36
|
+
overrides['fix'] = true;
|
|
37
|
+
}
|
|
38
|
+
if (this.config.verbose) {
|
|
39
|
+
overrides['verbose'] = true;
|
|
40
|
+
}
|
|
41
|
+
if (this.config.interactive) {
|
|
42
|
+
overrides['interactive'] = true;
|
|
43
|
+
}
|
|
44
|
+
if (this.config.reporter && this.config.reporter !== 'console') {
|
|
45
|
+
overrides['reporter'] = this.config.reporter;
|
|
46
|
+
}
|
|
47
|
+
if (this.config.tokensDir) {
|
|
48
|
+
overrides['tokensDir'] = this.config.tokensDir;
|
|
49
|
+
}
|
|
50
|
+
if (this.config.mixinsDir) {
|
|
51
|
+
overrides['mixinsDir'] = this.config.mixinsDir;
|
|
52
|
+
}
|
|
53
|
+
const hasOverrides = Object.keys(overrides).length > 0;
|
|
54
|
+
const result = hasOverrides
|
|
55
|
+
? await this._orchestrator.executeWithOverrides(rootPath, overrides)
|
|
56
|
+
: await this._orchestrator.executeFromConfig(rootPath);
|
|
57
|
+
if (result.totalErrors > 0) {
|
|
58
|
+
return {
|
|
59
|
+
canceled: true,
|
|
60
|
+
error: Object.assign(new Error(`Token linting failed with ${result.totalErrors} error(s).`), { code: 1 }),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return { canceled: false, result };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=LintCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LintCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/LintCommand.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,EAAoB,kBAAkB,EAA6B,MAAM,sCAAsC,CAAC;AAEvH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,gCAAgC,EAA+B,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE9H,aAAa;AAEb;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,kBAA0C;IAEvE,iBAAiB;IAEA,aAAa,CAA0B;IAExD,aAAa;IAEb,eAAe;IAEf,YAAmB,MAA8B;QAC7C,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAI,CAAC,aAAa,GAAG,IAAI,uBAAuB,EAAE,CAAC;IACvD,CAAC;IAED,aAAa;IAEb,qBAAqB;IAErB,IAAW,IAAI;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED,aAAa;IAEb,kBAAkB;IAEF,SAAS,CAAC,MAA8B;QACpD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,gCAAgC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACjG,CAAC;IAEe,KAAK,CAAC,OAAO;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElD,MAAM,SAAS,GAA4B,EAAE,CAAC;QAE9C,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAClB,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtB,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC1B,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;QACpC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC7D,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjD,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACxB,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACnD,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACxB,SAAS,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACnD,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,YAAY;YACvB,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC;YACpE,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE3D,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO;gBACH,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,WAAW,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;aAC5G,CAAC;QACN,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACvC,CAAC;CAGJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LintCommandArgsConfig.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/LintCommandArgsConfig.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { DEFAULT_CLI_ARGS_CONFIG } from '../CliArgsConfig.js';
|
|
3
|
+
/**
|
|
4
|
+
* @description Default lint command argument values.
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_LINT_COMMAND_ARGS_CONFIG = {
|
|
8
|
+
...DEFAULT_CLI_ARGS_CONFIG,
|
|
9
|
+
tokensDir: '',
|
|
10
|
+
mixinsDir: '',
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* @description Argument to override the tokens directory.
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export const TOKENS_DIR_ARG = {
|
|
17
|
+
alias: ['-t', '--tokens-dir'],
|
|
18
|
+
options: {
|
|
19
|
+
required: false,
|
|
20
|
+
default: DEFAULT_LINT_COMMAND_ARGS_CONFIG.tokensDir,
|
|
21
|
+
metavar: 'string',
|
|
22
|
+
help: 'Overrides the tokens directory from the config file.',
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* @description Argument to override the mixins directory.
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
export const MIXINS_DIR_ARG = {
|
|
30
|
+
alias: ['-m', '--mixins-dir'],
|
|
31
|
+
options: {
|
|
32
|
+
required: false,
|
|
33
|
+
default: DEFAULT_LINT_COMMAND_ARGS_CONFIG.mixinsDir,
|
|
34
|
+
metavar: 'string',
|
|
35
|
+
help: 'Overrides the mixins directory from the config file.',
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* @description All lint command specific arguments.
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export const LINT_COMMAND_ARGS = [
|
|
43
|
+
TOKENS_DIR_ARG,
|
|
44
|
+
MIXINS_DIR_ARG,
|
|
45
|
+
];
|
|
46
|
+
//# sourceMappingURL=LintCommandArgsConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LintCommandArgsConfig.js","sourceRoot":"","sources":["../../../src/cli/commands/LintCommandArgsConfig.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAGlB,OAAO,EAAE,uBAAuB,EAAuB,MAAM,qBAAqB,CAAC;AAanF;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAA2B;IACpE,GAAG,uBAAuB;IAC1B,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,EAAE;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAgB;IACvC,KAAK,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC;IAC7B,OAAO,EAAE;QACL,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,gCAAgC,CAAC,SAAS;QACnD,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,sDAAsD;KAC/D;CACJ,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAgB;IACvC,KAAK,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC;IAC7B,OAAO,EAAE;QACL,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,gCAAgC,CAAC,SAAS;QACnD,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,sDAAsD;KAC/D;CACJ,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACjD,cAAc;IACd,cAAc;CACjB,CAAC"}
|
package/cli/lint.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":""}
|
package/cli/lint.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// #region Imports
|
|
3
|
+
import { ConsoleLogger } from '@breadstone-infrastructure/utilities';
|
|
4
|
+
import { TokenLinterOrchestrator } from '../orchestration/TokenLinterOrchestrator.js';
|
|
5
|
+
// #endregion
|
|
6
|
+
/**
|
|
7
|
+
* @description CLI entry point for the token linter.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* token-linter [rootPath]
|
|
11
|
+
*
|
|
12
|
+
* Options:
|
|
13
|
+
* --fix Auto-fix fixable rule violations
|
|
14
|
+
* --verbose Enable verbose logging
|
|
15
|
+
*
|
|
16
|
+
* The CLI discovers a `tokenlinter.config.mjs` file in the given root path (default: cwd).
|
|
17
|
+
*/
|
|
18
|
+
async function main() {
|
|
19
|
+
const logger = new ConsoleLogger();
|
|
20
|
+
const args = process.argv.slice(2);
|
|
21
|
+
// Parse flags
|
|
22
|
+
const fix = args.includes('--fix');
|
|
23
|
+
const verbose = args.includes('--verbose');
|
|
24
|
+
// Parse root path (first non-flag argument, default to cwd)
|
|
25
|
+
const rootPath = args.find(arg => !arg.startsWith('--')) ?? process.cwd();
|
|
26
|
+
const orchestrator = new TokenLinterOrchestrator(logger);
|
|
27
|
+
try {
|
|
28
|
+
const result = await orchestrator.executeFromConfig(rootPath);
|
|
29
|
+
// Override fix/verbose from CLI flags if provided
|
|
30
|
+
if (fix || verbose) {
|
|
31
|
+
const { TokenLinterConfigDiscovery } = await import('../config/TokenLinterConfigDiscovery.js');
|
|
32
|
+
const discovery = new TokenLinterConfigDiscovery();
|
|
33
|
+
const config = await discovery.discover(rootPath);
|
|
34
|
+
const mergedConfig = {
|
|
35
|
+
...config,
|
|
36
|
+
fix: fix || config.fix,
|
|
37
|
+
verbose: verbose || config.verbose,
|
|
38
|
+
};
|
|
39
|
+
const overrideResult = await orchestrator.execute(rootPath, mergedConfig);
|
|
40
|
+
if (overrideResult.totalErrors > 0) {
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (result.totalErrors > 0) {
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
logger.error(`Token Linter failed: ${error.message}`);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
main();
|
|
55
|
+
//# sourceMappingURL=lint.js.map
|
package/cli/lint.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":";AAEA,kBAAkB;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AAEtF,aAAa;AAEb;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,IAAI;IACf,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,cAAc;IACd,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE3C,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1E,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEzD,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE9D,kDAAkD;QAClD,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YACjB,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;YAC/F,MAAM,SAAS,GAAG,IAAI,0BAA0B,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAElD,MAAM,YAAY,GAAG;gBACjB,GAAG,MAAM;gBACT,GAAG,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG;gBACtB,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO;aACrC,CAAC;YAEF,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAE1E,IAAI,cAAc,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YAED,OAAO;QACX,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,wBAAyB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ITokenLinterConfig } from '../models/token-linter-config.js';
|
|
2
|
+
/**
|
|
3
|
+
* @description Discovers and loads `tokenlinter.config.mjs` files from a given root path.
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export declare class TokenLinterConfigDiscovery {
|
|
7
|
+
private static readonly _CONFIG_FILE_NAME;
|
|
8
|
+
private readonly _fs;
|
|
9
|
+
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* @description Discovers and loads the token linter config from the given root path.
|
|
12
|
+
*/
|
|
13
|
+
discover(rootPath: string): Promise<ITokenLinterConfig>;
|
|
14
|
+
private loadConfig;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=TokenLinterConfigDiscovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenLinterConfigDiscovery.d.ts","sourceRoot":"","sources":["../../src/config/TokenLinterConfigDiscovery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAI3E;;;GAGG;AACH,qBAAa,0BAA0B;IAInC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IACrE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;;IAcjC;;OAEG;IACU,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAatD,UAAU;CAiB3B"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import { FileSystem } from '@breadstone-infrastructure/utilities';
|
|
3
|
+
// #endregion
|
|
4
|
+
/**
|
|
5
|
+
* @description Discovers and loads `tokenlinter.config.mjs` files from a given root path.
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export class TokenLinterConfigDiscovery {
|
|
9
|
+
// #region Fields
|
|
10
|
+
static _CONFIG_FILE_NAME = 'tokenlinter.config.mjs';
|
|
11
|
+
_fs;
|
|
12
|
+
// #endregion
|
|
13
|
+
// #region Ctor
|
|
14
|
+
constructor() {
|
|
15
|
+
this._fs = new FileSystem();
|
|
16
|
+
}
|
|
17
|
+
// #endregion
|
|
18
|
+
// #region Methods
|
|
19
|
+
/**
|
|
20
|
+
* @description Discovers and loads the token linter config from the given root path.
|
|
21
|
+
*/
|
|
22
|
+
async discover(rootPath) {
|
|
23
|
+
const configPath = this._fs.pathCombine(rootPath, TokenLinterConfigDiscovery._CONFIG_FILE_NAME);
|
|
24
|
+
if (!this._fs.fileExists(configPath)) {
|
|
25
|
+
throw new Error(`No token linter config file found at: ${configPath}. ` +
|
|
26
|
+
`Create a '${TokenLinterConfigDiscovery._CONFIG_FILE_NAME}' file in your project root.`);
|
|
27
|
+
}
|
|
28
|
+
return this.loadConfig(configPath);
|
|
29
|
+
}
|
|
30
|
+
async loadConfig(configPath) {
|
|
31
|
+
const resolvedPath = this._fs.pathResolve(configPath);
|
|
32
|
+
if (!resolvedPath.endsWith('.mjs')) {
|
|
33
|
+
throw new Error(`Unsupported config file format: '${configPath}'. Only .mjs files are supported.`);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const moduleResult = await import(resolvedPath);
|
|
37
|
+
return moduleResult.default || moduleResult;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
throw new Error(`Failed to load token linter config from ${resolvedPath}: ${error}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=TokenLinterConfigDiscovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenLinterConfigDiscovery.js","sourceRoot":"","sources":["../../src/config/TokenLinterConfigDiscovery.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAGlE,aAAa;AAEb;;;GAGG;AACH,MAAM,OAAO,0BAA0B;IAEnC,iBAAiB;IAET,MAAM,CAAU,iBAAiB,GAAG,wBAAwB,CAAC;IACpD,GAAG,CAAa;IAEjC,aAAa;IAEb,eAAe;IAEf;QACI,IAAI,CAAC,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,aAAa;IAEb,kBAAkB;IAElB;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;QAEhG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACX,yCAAyC,UAAU,IAAI;gBACvD,aAAa,0BAA0B,CAAC,iBAAiB,8BAA8B,CAC1F,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,UAAkB;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,UAAU,mCAAmC,CAAC,CAAC;QACvG,CAAC;QAED,IAAI,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAEhD,OAAO,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,2CAA2C,YAAY,KAAK,KAAK,EAAE,CAAC,CAAC;QACzF,CAAC;IACL,CAAC"}
|