@breadstone-infrastructure/token-linter 0.0.231 → 0.0.232
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/cli/Cli.js +3 -3
- package/cli/Cli.js.map +1 -1
- package/core/interaction.d.ts +14 -3
- package/core/interaction.d.ts.map +1 -1
- package/core/interaction.js +139 -4
- package/core/interaction.js.map +1 -1
- package/core/resolver.d.ts +39 -0
- package/core/resolver.d.ts.map +1 -0
- package/core/resolver.js +138 -0
- package/core/resolver.js.map +1 -0
- package/core/runner.d.ts +3 -3
- package/core/runner.d.ts.map +1 -1
- package/core/runner.js +6 -5
- package/core/runner.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/models/rule-finding.d.ts +1 -0
- package/models/rule-finding.d.ts.map +1 -1
- package/orchestration/TokenLinterOrchestrator.js +1 -1
- package/package.json +5 -4
- package/presets/recommended.d.ts.map +1 -1
- package/presets/recommended.js +1 -0
- package/presets/recommended.js.map +1 -1
- package/reporters/console.reporter.d.ts.map +1 -1
- package/reporters/console.reporter.js +12 -4
- package/reporters/console.reporter.js.map +1 -1
- package/reporters/json.reporter.d.ts.map +1 -1
- package/reporters/json.reporter.js +1 -0
- package/reporters/json.reporter.js.map +1 -1
- package/reporters/summary.reporter.js +1 -1
- package/rules/alphabetical-sort.rule.d.ts +2 -1
- package/rules/alphabetical-sort.rule.d.ts.map +1 -1
- package/rules/alphabetical-sort.rule.js +3 -2
- package/rules/alphabetical-sort.rule.js.map +1 -1
- package/rules/component-presence.rule.d.ts +1 -1
- package/rules/component-presence.rule.js +2 -2
- package/rules/component-presence.rule.js.map +1 -1
- package/rules/duplicate-value.rule.d.ts +3 -1
- package/rules/duplicate-value.rule.d.ts.map +1 -1
- package/rules/duplicate-value.rule.js +3 -1
- package/rules/duplicate-value.rule.js.map +1 -1
- package/rules/empty-json.rule.d.ts +4 -3
- package/rules/empty-json.rule.d.ts.map +1 -1
- package/rules/empty-json.rule.js +5 -4
- package/rules/empty-json.rule.js.map +1 -1
- package/rules/forbidden-key.rule.d.ts +1 -1
- package/rules/forbidden-key.rule.d.ts.map +1 -1
- package/rules/forbidden-key.rule.js +4 -3
- package/rules/forbidden-key.rule.js.map +1 -1
- package/rules/forbidden-value.rule.d.ts +11 -6
- package/rules/forbidden-value.rule.d.ts.map +1 -1
- package/rules/forbidden-value.rule.js +19 -8
- package/rules/forbidden-value.rule.js.map +1 -1
- package/rules/includes-consistency.rule.d.ts.map +1 -1
- package/rules/includes-consistency.rule.js +3 -2
- package/rules/includes-consistency.rule.js.map +1 -1
- package/rules/index.d.ts.map +1 -1
- package/rules/index.js +2 -0
- package/rules/index.js.map +1 -1
- package/rules/key-consistency.rule.js +1 -1
- package/rules/key-consistency.rule.js.map +1 -1
- package/rules/missing-includes.rule.js +1 -1
- package/rules/missing-includes.rule.js.map +1 -1
- package/rules/mixin-reference.rule.js +1 -1
- package/rules/redundant-mixin-override.rule.d.ts +24 -0
- package/rules/redundant-mixin-override.rule.d.ts.map +1 -0
- package/rules/redundant-mixin-override.rule.js +143 -0
- package/rules/redundant-mixin-override.rule.js.map +1 -0
- package/rules/required-includes.rule.d.ts.map +1 -1
- package/rules/required-includes.rule.js +3 -1
- package/rules/required-includes.rule.js.map +1 -1
- package/rules/value-type.rule.d.ts.map +1 -1
- package/rules/value-type.rule.js +3 -2
- package/rules/value-type.rule.js.map +1 -1
- package/utils.d.ts +6 -0
- package/utils.d.ts.map +1 -1
- package/utils.js +28 -0
- package/utils.js.map +1 -1
package/cli/Cli.js
CHANGED
|
@@ -13,9 +13,9 @@ export class Cli extends Program {
|
|
|
13
13
|
// #region Ctor
|
|
14
14
|
constructor() {
|
|
15
15
|
super({
|
|
16
|
-
moduleName: '
|
|
17
|
-
prog: '
|
|
18
|
-
description: 'Token Linter
|
|
16
|
+
moduleName: 'tokenlinter',
|
|
17
|
+
prog: 'tokenlinter',
|
|
18
|
+
description: 'Token Linter - A configurable linter for Style Dictionary token JSON files.',
|
|
19
19
|
version: '@@VERSION',
|
|
20
20
|
addHelp: true,
|
|
21
21
|
debug: true,
|
package/cli/Cli.js.map
CHANGED
|
@@ -1 +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,
|
|
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,aAAa;YACzB,IAAI,EAAE,aAAa;YACnB,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/core/interaction.d.ts
CHANGED
|
@@ -15,11 +15,22 @@ export declare const SKIP_ALL: "__skip_all__";
|
|
|
15
15
|
export interface IPromptChoice {
|
|
16
16
|
readonly name: string;
|
|
17
17
|
readonly message: string;
|
|
18
|
+
readonly hint?: string;
|
|
19
|
+
readonly shortcut?: string;
|
|
18
20
|
}
|
|
19
21
|
/**
|
|
20
|
-
* @description
|
|
21
|
-
* Returns the selected choice name string, or one of the sentinel values (SKIP / SKIP_ALL).
|
|
22
|
+
* @description Progress information rendered in the interactive prompt footer.
|
|
22
23
|
* @public
|
|
23
24
|
*/
|
|
24
|
-
export
|
|
25
|
+
export interface IInteractiveProgress {
|
|
26
|
+
readonly current: number;
|
|
27
|
+
readonly total: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @description Runs an interactive session with a global progress state.
|
|
31
|
+
* Every `promptSelect()` call inside the callback automatically advances and renders the footer status.
|
|
32
|
+
* @public
|
|
33
|
+
*/
|
|
34
|
+
export declare function withInteractiveProgress<T>(total: number, callback: () => Promise<T>): Promise<T>;
|
|
35
|
+
export declare function promptSelect(message: string, choices: ReadonlyArray<string | IPromptChoice>, progress?: IInteractiveProgress): Promise<string>;
|
|
25
36
|
//# sourceMappingURL=interaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../../src/core/interaction.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAG,UAAmB,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAG,cAAuB,CAAC;AAMhD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../../src/core/interaction.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAG,UAAmB,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAG,cAAuB,CAAC;AAMhD;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AA6CD;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAC3C,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC3B,OAAO,CAAC,CAAC,CAAC,CAWZ;AAyFD,wBAAsB,YAAY,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,EAC9C,QAAQ,CAAC,EAAE,oBAAoB,GAChC,OAAO,CAAC,MAAM,CAAC,CA6EjB"}
|
package/core/interaction.js
CHANGED
|
@@ -20,23 +20,158 @@ export const SKIP_ALL = '__skip_all__';
|
|
|
20
20
|
* Returns the selected choice name string, or one of the sentinel values (SKIP / SKIP_ALL).
|
|
21
21
|
* @public
|
|
22
22
|
*/
|
|
23
|
-
|
|
23
|
+
let _interactiveProgressState;
|
|
24
|
+
const DEFAULT_KEY_ACTIONS = {
|
|
25
|
+
pageup: 'pageUp',
|
|
26
|
+
pagedown: 'pageDown',
|
|
27
|
+
home: 'home',
|
|
28
|
+
end: 'end',
|
|
29
|
+
cancel: 'cancel',
|
|
30
|
+
delete: 'deleteForward',
|
|
31
|
+
backspace: 'delete',
|
|
32
|
+
down: 'down',
|
|
33
|
+
enter: 'submit',
|
|
34
|
+
escape: 'cancel',
|
|
35
|
+
left: 'left',
|
|
36
|
+
space: 'space',
|
|
37
|
+
number: 'number',
|
|
38
|
+
return: 'submit',
|
|
39
|
+
right: 'right',
|
|
40
|
+
tab: 'next',
|
|
41
|
+
up: 'up',
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* @description Runs an interactive session with a global progress state.
|
|
45
|
+
* Every `promptSelect()` call inside the callback automatically advances and renders the footer status.
|
|
46
|
+
* @public
|
|
47
|
+
*/
|
|
48
|
+
export async function withInteractiveProgress(total, callback) {
|
|
49
|
+
_interactiveProgressState = {
|
|
50
|
+
current: 0,
|
|
51
|
+
total: Math.max(total, 0),
|
|
52
|
+
};
|
|
53
|
+
try {
|
|
54
|
+
return await callback();
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
_interactiveProgressState = undefined;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function getProgressFooter(progress) {
|
|
61
|
+
if (progress) {
|
|
62
|
+
return `[${progress.current}/${progress.total}]`;
|
|
63
|
+
}
|
|
64
|
+
if (!_interactiveProgressState || _interactiveProgressState.total <= 0) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
_interactiveProgressState.current = Math.min(_interactiveProgressState.current + 1, _interactiveProgressState.total);
|
|
68
|
+
return `[${_interactiveProgressState.current}/${_interactiveProgressState.total}]`;
|
|
69
|
+
}
|
|
70
|
+
function addShortcutHint(choice, shortcut) {
|
|
71
|
+
const shortcutHint = `[${shortcut.toUpperCase()}]`;
|
|
72
|
+
if (!choice.hint) {
|
|
73
|
+
choice.hint = shortcutHint;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (!choice.hint.includes(shortcutHint)) {
|
|
77
|
+
choice.hint = `${choice.hint} ${shortcutHint}`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function sanitizeShortcut(value) {
|
|
81
|
+
const normalized = value.trim().toLowerCase();
|
|
82
|
+
if (!/^[a-z0-9]$/.test(normalized)) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
return normalized;
|
|
86
|
+
}
|
|
87
|
+
function getPreferredShortcut(message, usedShortcuts) {
|
|
88
|
+
for (const character of message.toLowerCase()) {
|
|
89
|
+
if (!/^[a-z0-9]$/.test(character)) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (usedShortcuts.has(character)) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
return character;
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
function selectChoiceByName(promptInstance, choiceName) {
|
|
100
|
+
const index = promptInstance.findIndex(choiceName);
|
|
101
|
+
if (index >= 0) {
|
|
102
|
+
promptInstance.index = index;
|
|
103
|
+
return promptInstance.submit();
|
|
104
|
+
}
|
|
105
|
+
promptInstance.alert();
|
|
106
|
+
}
|
|
107
|
+
function applyShortcut(choice, shortcut, usedShortcuts, keyActions, actionHandlers) {
|
|
108
|
+
const actionName = `shortcut_${shortcut}`;
|
|
109
|
+
choice.shortcut = shortcut;
|
|
110
|
+
addShortcutHint(choice, shortcut);
|
|
111
|
+
usedShortcuts.add(shortcut);
|
|
112
|
+
keyActions[shortcut] = actionName;
|
|
113
|
+
actionHandlers[actionName] = function () {
|
|
114
|
+
return selectChoiceByName(this, choice.name);
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export async function promptSelect(message, choices, progress) {
|
|
24
118
|
const normalizedChoices = choices.map(choice => {
|
|
25
119
|
if (typeof choice === 'string') {
|
|
26
120
|
return { name: choice, message: choice };
|
|
27
121
|
}
|
|
28
|
-
return
|
|
122
|
+
return {
|
|
123
|
+
name: choice.name,
|
|
124
|
+
message: choice.message,
|
|
125
|
+
hint: choice.hint,
|
|
126
|
+
shortcut: choice.shortcut,
|
|
127
|
+
};
|
|
29
128
|
});
|
|
129
|
+
const keyActions = { ...DEFAULT_KEY_ACTIONS };
|
|
130
|
+
const actionHandlers = {};
|
|
131
|
+
const usedShortcuts = new Set(['s', 'a']);
|
|
132
|
+
const deleteChoice = normalizedChoices.find(choice => /delete/i.test(choice.message) || /delete/i.test(choice.name));
|
|
133
|
+
if (deleteChoice) {
|
|
134
|
+
applyShortcut(deleteChoice, 'd', usedShortcuts, keyActions, actionHandlers);
|
|
135
|
+
}
|
|
136
|
+
for (const choice of normalizedChoices) {
|
|
137
|
+
if (choice.shortcut) {
|
|
138
|
+
const explicitShortcut = sanitizeShortcut(choice.shortcut);
|
|
139
|
+
if (explicitShortcut && !usedShortcuts.has(explicitShortcut)) {
|
|
140
|
+
applyShortcut(choice, explicitShortcut, usedShortcuts, keyActions, actionHandlers);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (choice.shortcut) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const preferredShortcut = getPreferredShortcut(choice.message, usedShortcuts);
|
|
148
|
+
if (preferredShortcut) {
|
|
149
|
+
applyShortcut(choice, preferredShortcut, usedShortcuts, keyActions, actionHandlers);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
30
152
|
const allChoices = [
|
|
31
153
|
...normalizedChoices,
|
|
32
|
-
{ name: SKIP, message: 'Skip' },
|
|
33
|
-
{ name: SKIP_ALL, message: 'Skip all remaining' },
|
|
154
|
+
{ name: SKIP, message: 'Skip', hint: '[S]', shortcut: 's' },
|
|
155
|
+
{ name: SKIP_ALL, message: 'Skip all remaining', hint: '[A]', shortcut: 'a' },
|
|
34
156
|
];
|
|
157
|
+
actionHandlers['shortcut_s'] = function () {
|
|
158
|
+
return selectChoiceByName(this, SKIP);
|
|
159
|
+
};
|
|
160
|
+
actionHandlers['shortcut_a'] = function () {
|
|
161
|
+
return selectChoiceByName(this, SKIP_ALL);
|
|
162
|
+
};
|
|
163
|
+
keyActions['s'] = 'shortcut_s';
|
|
164
|
+
keyActions['a'] = 'shortcut_a';
|
|
35
165
|
const options = {
|
|
36
166
|
type: 'select',
|
|
37
167
|
name: 'action',
|
|
38
168
|
message,
|
|
39
169
|
choices: allChoices,
|
|
170
|
+
footer: getProgressFooter(progress),
|
|
171
|
+
actions: {
|
|
172
|
+
keys: keyActions,
|
|
173
|
+
},
|
|
174
|
+
...actionHandlers,
|
|
40
175
|
};
|
|
41
176
|
const result = await prompt(options);
|
|
42
177
|
return result.action;
|
package/core/interaction.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interaction.js","sourceRoot":"","sources":["../../src/core/interaction.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAElB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;AAE5B,aAAa;AAEb,oBAAoB;AAEpB;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,UAAmB,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"interaction.js","sourceRoot":"","sources":["../../src/core/interaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Represents a single resolved design token with its CSS custom property name, value, and type.
|
|
3
|
+
* @public
|
|
4
|
+
*/
|
|
5
|
+
export interface IResolvedToken {
|
|
6
|
+
/** The camelCase token key as defined in the JSON (e.g. `backgroundColor`). */
|
|
7
|
+
readonly key: string;
|
|
8
|
+
/** The token value (e.g. `var(--joy-scheme-background)` or `solid`). */
|
|
9
|
+
readonly value: string | string[];
|
|
10
|
+
/** The optional type annotation from the token JSON (e.g. `color`, `alias`). */
|
|
11
|
+
readonly type: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* @description Options for resolving component tokens.
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
export interface ITokenResolverOptions {
|
|
18
|
+
/** Absolute path to the component token JSON file. */
|
|
19
|
+
readonly componentFilePath: string;
|
|
20
|
+
/** Absolute path to the base `components.json` file. */
|
|
21
|
+
readonly baseTokensPath: string;
|
|
22
|
+
/** Absolute path to the mixins directory. */
|
|
23
|
+
readonly mixinsDir: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @description Resolves all design tokens for a component by merging base tokens, mixin tokens,
|
|
27
|
+
* and component-specific tokens. Handles `$includes` with optional prefix syntax (e.g. `color:background`).
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
export declare namespace TokenResolver {
|
|
31
|
+
/**
|
|
32
|
+
* @description Resolves all tokens for a component, merging base → mixins → component overrides.
|
|
33
|
+
* @param options - The resolver options containing file paths.
|
|
34
|
+
* @returns An array of resolved tokens sorted alphabetically by key.
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
function resolve(options: ITokenResolverOptions): IResolvedToken[];
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,sDAAsD;IACtD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,wDAAwD;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,yBAAiB,aAAa,CAAC;IAI3B;;;;;OAKG;IACH,SAAgB,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,EAAE,CAiBxE;CA0IJ"}
|
package/core/resolver.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// #region Imports
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { isTokenValue } from '../utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* @description Resolves all design tokens for a component by merging base tokens, mixin tokens,
|
|
7
|
+
* and component-specific tokens. Handles `$includes` with optional prefix syntax (e.g. `color:background`).
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export var TokenResolver;
|
|
11
|
+
(function (TokenResolver) {
|
|
12
|
+
// #region Methods
|
|
13
|
+
/**
|
|
14
|
+
* @description Resolves all tokens for a component, merging base → mixins → component overrides.
|
|
15
|
+
* @param options - The resolver options containing file paths.
|
|
16
|
+
* @returns An array of resolved tokens sorted alphabetically by key.
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
function resolve(options) {
|
|
20
|
+
const baseTokens = _readJson(options.baseTokensPath);
|
|
21
|
+
const componentTokens = _readJson(options.componentFilePath);
|
|
22
|
+
const mixinTokens = _resolveMixinTokens(componentTokens['$includes'], options.mixinsDir);
|
|
23
|
+
// Remove $includes from component tokens before merge
|
|
24
|
+
const cleanComponentTokens = { ...componentTokens };
|
|
25
|
+
delete cleanComponentTokens['$includes'];
|
|
26
|
+
// Merge order: base (lowest) → mixins → component (highest)
|
|
27
|
+
const merged = _deepAssign(_deepAssign(baseTokens, mixinTokens), cleanComponentTokens);
|
|
28
|
+
return _flattenToResolvedTokens(merged).sort((a, b) => a.key.localeCompare(b.key));
|
|
29
|
+
}
|
|
30
|
+
TokenResolver.resolve = resolve;
|
|
31
|
+
// #endregion
|
|
32
|
+
// #region Private
|
|
33
|
+
/**
|
|
34
|
+
* @description Reads and parses a JSON file.
|
|
35
|
+
*/
|
|
36
|
+
function _readJson(filePath) {
|
|
37
|
+
if (!fs.existsSync(filePath)) {
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
41
|
+
try {
|
|
42
|
+
return JSON.parse(raw);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
46
|
+
throw new Error(`Failed to parse JSON file "${filePath}": ${message}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* @description Resolves mixin tokens from the `$includes` array.
|
|
51
|
+
* Handles the `name:prefix` syntax (e.g. `color:background` → `backgroundColor`).
|
|
52
|
+
*/
|
|
53
|
+
function _resolveMixinTokens(includes, mixinsDir) {
|
|
54
|
+
const result = {};
|
|
55
|
+
if (!includes) {
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
for (const entry of includes) {
|
|
59
|
+
let mixinName = entry;
|
|
60
|
+
let prefix;
|
|
61
|
+
if (entry.includes(':')) {
|
|
62
|
+
const [name, pfx] = entry.split(':');
|
|
63
|
+
mixinName = name;
|
|
64
|
+
prefix = pfx;
|
|
65
|
+
}
|
|
66
|
+
const mixinPath = path.join(mixinsDir, `${mixinName}.json`);
|
|
67
|
+
if (!fs.existsSync(mixinPath)) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const mixinJson = _readJson(mixinPath);
|
|
71
|
+
if (prefix) {
|
|
72
|
+
for (const [key, value] of Object.entries(mixinJson)) {
|
|
73
|
+
if (key.startsWith('$')) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const prefixedKey = prefix + key.charAt(0).toUpperCase() + key.slice(1);
|
|
77
|
+
result[prefixedKey] = value;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
for (const [key, value] of Object.entries(mixinJson)) {
|
|
82
|
+
if (key.startsWith('$')) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
result[key] = value;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* @description Flattens merged token content into an array of resolved tokens.
|
|
93
|
+
* Handles both flat token values and nested token groups.
|
|
94
|
+
*/
|
|
95
|
+
function _flattenToResolvedTokens(content, prefix) {
|
|
96
|
+
const tokens = [];
|
|
97
|
+
for (const [key, val] of Object.entries(content)) {
|
|
98
|
+
if (key.startsWith('$')) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
102
|
+
if (isTokenValue(val)) {
|
|
103
|
+
const tokenObj = val;
|
|
104
|
+
const value = tokenObj.value;
|
|
105
|
+
tokens.push({
|
|
106
|
+
key: fullKey,
|
|
107
|
+
value: Array.isArray(value)
|
|
108
|
+
? value.map(String)
|
|
109
|
+
: String(value),
|
|
110
|
+
type: typeof tokenObj.type === 'string' ? tokenObj.type : undefined,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
else if (typeof val === 'object' && val !== null) {
|
|
114
|
+
tokens.push(..._flattenToResolvedTokens(val, fullKey));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return tokens;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* @description Deep-assigns source properties onto the target, recursively merging nested objects.
|
|
121
|
+
*/
|
|
122
|
+
function _deepAssign(target, source) {
|
|
123
|
+
const result = { ...target };
|
|
124
|
+
for (const [key, sourceVal] of Object.entries(source)) {
|
|
125
|
+
const targetVal = result[key];
|
|
126
|
+
if (typeof sourceVal === 'object' && sourceVal !== null && !Array.isArray(sourceVal) && !('value' in sourceVal)
|
|
127
|
+
&& typeof targetVal === 'object' && targetVal !== null && !Array.isArray(targetVal) && !('value' in targetVal)) {
|
|
128
|
+
result[key] = _deepAssign(targetVal, sourceVal);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
result[key] = sourceVal;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
// #endregion
|
|
137
|
+
})(TokenResolver || (TokenResolver = {}));
|
|
138
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/core/resolver.ts"],"names":[],"mappings":"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"}
|
package/core/runner.d.ts
CHANGED
|
@@ -13,9 +13,9 @@ export declare namespace LintRunner {
|
|
|
13
13
|
* Rules not listed in the config are not executed (opt-in model).
|
|
14
14
|
*
|
|
15
15
|
* Execution phases per rule:
|
|
16
|
-
* 1. **Detect**
|
|
17
|
-
* 2. **Fix**
|
|
18
|
-
* 3. **Interact**
|
|
16
|
+
* 1. **Detect** - `rule.run()` identifies findings (side-effect free).
|
|
17
|
+
* 2. **Fix** - `rule.fix()` auto-fixes findings (only when `config.fix` is enabled and `rule.fixable` is `true`).
|
|
18
|
+
* 3. **Interact** - `rule.interact()` prompts the user for resolution of remaining findings
|
|
19
19
|
* (only when `config.interactive` is enabled and `rule.interactive` is `true`).
|
|
20
20
|
*/
|
|
21
21
|
function run(registry: RuleRegistry, config: ITokenLinterConfig, entries: ReadonlyArray<ITokenEntry>, mixinNames: ReadonlyArray<string>, mixinKeys: ReadonlyMap<string, ReadonlyArray<string>>, logger: ILogger): Promise<ILintResult>;
|
package/core/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD;;;GAGG;AACH,yBAAiB,UAAU,CAAC;IAIxB;;;;;;;;;OASG;IACH,SAAsB,GAAG,CACrB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,EACnC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,EACrD,MAAM,EAAE,OAAO,GAChB,OAAO,CAAC,WAAW,CAAC,CA8GtB;CAGJ"}
|
package/core/runner.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// #region Imports
|
|
2
2
|
import { RuleSeverity } from '../models/rule-severity.js';
|
|
3
|
+
import { withInteractiveProgress } from './interaction.js';
|
|
3
4
|
// #endregion
|
|
4
5
|
/**
|
|
5
6
|
* @description Orchestrates 3-phase rule execution (detect → fix → interact), severity overrides, and result aggregation.
|
|
@@ -13,9 +14,9 @@ export var LintRunner;
|
|
|
13
14
|
* Rules not listed in the config are not executed (opt-in model).
|
|
14
15
|
*
|
|
15
16
|
* Execution phases per rule:
|
|
16
|
-
* 1. **Detect**
|
|
17
|
-
* 2. **Fix**
|
|
18
|
-
* 3. **Interact**
|
|
17
|
+
* 1. **Detect** - `rule.run()` identifies findings (side-effect free).
|
|
18
|
+
* 2. **Fix** - `rule.fix()` auto-fixes findings (only when `config.fix` is enabled and `rule.fixable` is `true`).
|
|
19
|
+
* 3. **Interact** - `rule.interact()` prompts the user for resolution of remaining findings
|
|
19
20
|
* (only when `config.interactive` is enabled and `rule.interactive` is `true`).
|
|
20
21
|
*/
|
|
21
22
|
async function run(registry, config, entries, mixinNames, mixinKeys, logger) {
|
|
@@ -39,7 +40,7 @@ export var LintRunner;
|
|
|
39
40
|
}
|
|
40
41
|
const rule = registry.getByName(ruleName);
|
|
41
42
|
if (!rule) {
|
|
42
|
-
logger.warn(`Unknown rule '${ruleName}' in configuration
|
|
43
|
+
logger.warn(`Unknown rule '${ruleName}' in configuration - skipping.`);
|
|
43
44
|
continue;
|
|
44
45
|
}
|
|
45
46
|
const effectiveSeverity = severityOrOff;
|
|
@@ -70,7 +71,7 @@ export var LintRunner;
|
|
|
70
71
|
if (config.interactive && rule.interactive && rule.interact) {
|
|
71
72
|
const unfixed = findings.filter(f => !f.fixed);
|
|
72
73
|
if (unfixed.length > 0) {
|
|
73
|
-
const interactedFindings = await rule.interact(context, unfixed);
|
|
74
|
+
const interactedFindings = await withInteractiveProgress(unfixed.length, async () => rule.interact(context, unfixed));
|
|
74
75
|
const interactedSet = new Set(unfixed);
|
|
75
76
|
findings = findings
|
|
76
77
|
.filter(f => !interactedSet.has(f))
|
package/core/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAOlB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export * from './models/token-linter-config.js';
|
|
|
8
8
|
export * from './utils.js';
|
|
9
9
|
export * from './core/interaction.js';
|
|
10
10
|
export * from './core/loader.js';
|
|
11
|
+
export * from './core/resolver.js';
|
|
11
12
|
export * from './core/rule-registry.js';
|
|
12
13
|
export * from './core/rule.js';
|
|
13
14
|
export * from './core/runner.js';
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAGhD,cAAc,YAAY,CAAC;AAG3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACjF,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC1F,YAAY,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAChG,YAAY,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACvF,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACtG,YAAY,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACjF,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAGpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAGhD,cAAc,YAAY,CAAC;AAG3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACjF,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC1F,YAAY,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAChG,YAAY,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACvF,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACtG,YAAY,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACjF,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAGpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC"}
|
package/index.js
CHANGED
|
@@ -11,6 +11,7 @@ export * from './utils.js';
|
|
|
11
11
|
// Core
|
|
12
12
|
export * from './core/interaction.js';
|
|
13
13
|
export * from './core/loader.js';
|
|
14
|
+
export * from './core/resolver.js';
|
|
14
15
|
export * from './core/rule-registry.js';
|
|
15
16
|
export * from './core/rule.js';
|
|
16
17
|
export * from './core/runner.js';
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAEhD,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,OAAO;AACP,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAEjC,QAAQ;AACR,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAE1F,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEhG,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAEtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGjF,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAEpF,gBAAgB;AAChB,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAEhD,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,OAAO;AACP,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAEjC,QAAQ;AACR,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAE1F,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEhG,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAEtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGjF,UAAU;AACV,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AAEpF,gBAAgB;AAChB,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC"}
|
package/models/rule-finding.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-finding.d.ts","sourceRoot":"","sources":["../../src/models/rule-finding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B"}
|
|
1
|
+
{"version":3,"file":"rule-finding.d.ts","sourceRoot":"","sources":["../../src/models/rule-finding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B"}
|
|
@@ -47,7 +47,7 @@ export class TokenLinterOrchestrator {
|
|
|
47
47
|
* @description Runs the token linter with an explicitly provided config.
|
|
48
48
|
*/
|
|
49
49
|
async execute(rootPath, config) {
|
|
50
|
-
this._logger.info('Token Linter
|
|
50
|
+
this._logger.info('Token Linter - Starting analysis...');
|
|
51
51
|
const tokensBasePath = path.resolve(rootPath, config.tokensDir);
|
|
52
52
|
const mixinsBasePath = path.resolve(rootPath, config.mixinsDir);
|
|
53
53
|
// Load data
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@breadstone-infrastructure/token-linter",
|
|
3
3
|
"description": "A configurable, extensible linter for Style Dictionary token JSON files. Validates structure, consistency, naming, and values across themes.",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.232",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "andre.wehlert <awehlert@breadstone.de> (https://www.breadstone.de)",
|
|
7
7
|
"repository": {
|
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
"type": "module",
|
|
11
11
|
"main": "./index.js",
|
|
12
12
|
"types": "./index.d.ts",
|
|
13
|
-
"bin":
|
|
13
|
+
"bin": {
|
|
14
|
+
"tokenlinter": "./bin/tokenlinter.js"
|
|
15
|
+
},
|
|
14
16
|
"dependencies": {
|
|
15
|
-
"@breadstone-infrastructure/utilities": "0.0.
|
|
17
|
+
"@breadstone-infrastructure/utilities": "0.0.232",
|
|
16
18
|
"enquirer": "^2.4.1",
|
|
17
|
-
"glob": "13.0.6",
|
|
18
19
|
"tslib": "2.8.1"
|
|
19
20
|
}
|
|
20
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommended.d.ts","sourceRoot":"","sources":["../../src/presets/recommended.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI/D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"recommended.d.ts","sourceRoot":"","sources":["../../src/presets/recommended.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI/D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAkB9D,CAAC"}
|
package/presets/recommended.js
CHANGED
|
@@ -26,6 +26,7 @@ export const recommended = {
|
|
|
26
26
|
'includes-consistency': 'warning',
|
|
27
27
|
'missing-includes': 'warning',
|
|
28
28
|
'required-includes': 'error',
|
|
29
|
+
'redundant-mixin-override': 'warning',
|
|
29
30
|
'empty-json': 'warning',
|
|
30
31
|
'forbidden-value': 'warning',
|
|
31
32
|
'forbidden-key': 'warning',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommended.js","sourceRoot":"","sources":["../../src/presets/recommended.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAIlB,aAAa;AAEb;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,WAAW,GAA2C;IAC/D,oBAAoB,EAAE,OAAO;IAC7B,iBAAiB,EAAE,OAAO;IAC1B,sBAAsB,EAAE,SAAS;IACjC,kBAAkB,EAAE,SAAS;IAC7B,mBAAmB,EAAE,OAAO;IAC5B,YAAY,EAAE,SAAS;IACvB,iBAAiB,EAAE,SAAS;IAC5B,eAAe,EAAE,SAAS;IAC1B,mBAAmB,EAAE,SAAS;IAC9B,cAAc,EAAE,MAAM;IACtB,YAAY,EAAE,OAAO;IACrB,mBAAmB,EAAE,MAAM;IAC3B,iBAAiB,EAAE,MAAM;IACzB,cAAc,EAAE,SAAS;IACzB,iBAAiB,EAAE,OAAO;IAC1B,mBAAmB,EAAE,SAAS;CACjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"recommended.js","sourceRoot":"","sources":["../../src/presets/recommended.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAIlB,aAAa;AAEb;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,WAAW,GAA2C;IAC/D,oBAAoB,EAAE,OAAO;IAC7B,iBAAiB,EAAE,OAAO;IAC1B,sBAAsB,EAAE,SAAS;IACjC,kBAAkB,EAAE,SAAS;IAC7B,mBAAmB,EAAE,OAAO;IAC5B,0BAA0B,EAAE,SAAS;IACrC,YAAY,EAAE,SAAS;IACvB,iBAAiB,EAAE,SAAS;IAC5B,eAAe,EAAE,SAAS;IAC1B,mBAAmB,EAAE,SAAS;IAC9B,cAAc,EAAE,MAAM;IACtB,YAAY,EAAE,OAAO;IACrB,mBAAmB,EAAE,MAAM;IAC3B,iBAAiB,EAAE,MAAM;IACzB,cAAc,EAAE,SAAS;IACzB,iBAAiB,EAAE,OAAO;IAC1B,mBAAmB,EAAE,SAAS;CACjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.reporter.d.ts","sourceRoot":"","sources":["../../src/reporters/console.reporter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"console.reporter.d.ts","sourceRoot":"","sources":["../../src/reporters/console.reporter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI/C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAI7C,SAAgB,IAAI,aAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAMxC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAUxC,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,cAAc;CAczB"}
|