@bamboocss/eslint-plugin 1.12.2 → 1.12.3

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils--KVHU2cv.mjs","names":[],"sources":["../src/utils/worker.ts","../src/utils/index.ts"],"sourcesContent":["import { type ImportResult } from '.';\nimport { findConfig, loadConfig } from '@bamboocss/config';\nimport { resolveTsPathPattern } from '@bamboocss/config/ts-path';\nimport { Generator } from '@bamboocss/generator';\nimport micromatch from 'micromatch';\nimport path from 'path';\nimport { runAsWorker } from 'synckit';\n\ntype Options = {\n configPath?: string;\n currentFile: string;\n};\n\nconst contextCache: { [configPath: string]: Promise<Generator> } = {};\n\nexport type DeprecatedToken =\n | string\n | {\n category: string;\n value: string;\n };\n\nexport async function getContext(options: Options) {\n if (process.env.NODE_ENV === 'test') {\n const { createGeneratorContext } = await import(\n '../../tests/fixtures/create-context'\n );\n const context = createGeneratorContext({\n exclude: ['**/Invalid.tsx', '**/bamboo.config.ts'],\n importMap: './bamboo',\n include: ['**/*'],\n jsxFactory: 'styled',\n });\n return context;\n } else {\n const configPath = findConfig({\n cwd: options.configPath ?? options.currentFile,\n });\n\n // The context cache ensures we don't reload the same config multiple times\n if (!contextCache[configPath]) {\n contextCache[configPath] = _getContext(configPath);\n }\n\n return contextCache[configPath];\n }\n}\n\nasync function _getContext(configPath: string | undefined) {\n if (!configPath) {\n throw new Error('Invalid config path');\n }\n\n const cwd = path.dirname(configPath);\n\n const conf = await loadConfig({ cwd, file: configPath });\n const context = new Generator(conf);\n\n return context;\n}\n\n// Refactored to arrow function, removed async\nconst filterDeprecatedTokens = (\n context: Generator,\n tokens: DeprecatedToken[],\n): DeprecatedToken[] => {\n return tokens.filter((token) => {\n const value =\n typeof token === 'string' ? token : token.category + '.' + token.value;\n return context.utility.tokens.isDeprecated(value);\n });\n};\n\n// Refactored to arrow function, removed async\nconst filterInvalidTokens = (context: Generator, paths: string[]): string[] => {\n return paths.filter((path) => !context.utility.tokens.view.get(path));\n};\n\n// Refactored to arrow function, removed async\nconst getPropertyCategory = (context: Generator, _attribute: string) => {\n const longhand = resolveLongHand(context, _attribute);\n const attribute = longhand || _attribute;\n const attributeConfig = context.utility.config[attribute];\n return typeof attributeConfig?.values === 'string'\n ? attributeConfig.values\n : undefined;\n};\n\n// Refactored to arrow function, removed async\nconst isColorAttribute = (context: Generator, _attribute: string): boolean => {\n const category = getPropertyCategory(context, _attribute);\n return category === 'colors';\n};\n\n// Refactored to arrow function, removed async\nconst isColorToken = (context: Generator, value: string): boolean => {\n return Boolean(\n context.utility.tokens.view.categoryMap.get('colors')?.get(value),\n );\n};\n\ntype MatchImportResult = {\n alias: string;\n mod: string;\n name: string;\n};\n\nexport function run(\n action: 'filterInvalidTokens',\n options: Options,\n paths: string[],\n): string[];\n\nexport function run(\n action: 'isColorToken',\n options: Options,\n value: string,\n): boolean;\n\nexport function run(\n action: 'isColorAttribute',\n options: Options,\n attribute: string,\n): boolean;\n\nexport function run(action: 'isValidFile', options: Options): boolean;\n\nexport function run(\n action: 'resolveShorthands',\n options: Options,\n name: string,\n): string[] | undefined;\nexport function run(\n action: 'resolveLongHand',\n options: Options,\n name: string,\n): string | undefined;\n\nexport function run(\n action: 'isValidProperty',\n options: Options,\n name: string,\n patternName?: string,\n): boolean;\nexport function run(\n action: 'matchFile',\n options: Options,\n name: string,\n imports: ImportResult[],\n): boolean;\nexport function run(\n action: 'matchImports',\n options: Options,\n result: MatchImportResult,\n): boolean;\nexport function run(\n action: 'filterImports',\n options: Options,\n imports: MatchImportResult[],\n): MatchImportResult[];\nexport function run(\n action: 'getPropCategory',\n options: Options,\n property: string,\n): string;\nexport function run(\n action: 'filterDeprecatedTokens',\n options: Options,\n tokens: DeprecatedToken[],\n): DeprecatedToken[];\nexport function run(\n action: 'getJsxFactory',\n options: Options,\n): string | undefined;\nexport function run(action: string, options: Options, ...args: any[]): any {\n // @ts-expect-error cast\n return runAsync(action, options, ...args);\n}\n\nexport function runAsync(\n action: 'filterInvalidTokens',\n options: Options,\n paths: string[],\n): Promise<string[]>;\nexport function runAsync(\n action: 'isColorToken',\n options: Options,\n value: string,\n): Promise<boolean>;\nexport function runAsync(\n action: 'isColorAttribute',\n options: Options,\n attribute: string,\n): Promise<boolean>;\nexport function runAsync(\n action: 'isValidFile',\n options: Options,\n fileName: string,\n): Promise<string>;\nexport function runAsync(\n action: 'resolveShorthands',\n options: Options,\n name: string,\n): Promise<string[] | undefined>;\nexport function runAsync(\n action: 'resolveLongHand',\n options: Options,\n name: string,\n): Promise<string | undefined>;\n\nexport function runAsync(\n action: 'isValidProperty',\n options: Options,\n name: string,\n patternName?: string,\n): Promise<boolean>;\nexport function runAsync(\n action: 'matchFile',\n options: Options,\n name: string,\n imports: ImportResult[],\n): Promise<boolean>;\nexport function runAsync(\n action: 'matchImports',\n options: Options,\n result: MatchImportResult,\n): Promise<boolean>;\nexport function runAsync(\n action: 'filterImports',\n options: Options,\n imports: MatchImportResult[],\n): Promise<MatchImportResult[]>;\nexport function runAsync(\n action: 'getPropCategory',\n options: Options,\n property: string,\n): Promise<string>;\nexport function runAsync(\n action: 'filterDeprecatedTokens',\n options: Options,\n tokens: DeprecatedToken[],\n): Promise<DeprecatedToken[]>;\nexport function runAsync(\n action: 'getJsxFactory',\n options: Options,\n): Promise<string | undefined>;\nexport async function runAsync(\n action: string,\n options: Options,\n ...args: any\n): Promise<any> {\n const context = await getContext(options);\n\n switch (action) {\n case 'filterDeprecatedTokens':\n // @ts-expect-error cast\n return filterDeprecatedTokens(context, ...args);\n case 'filterImports':\n // @ts-expect-error cast\n return filterImports(context, ...args);\n case 'filterInvalidTokens':\n // @ts-expect-error cast\n return filterInvalidTokens(context, ...args);\n case 'getJsxFactory':\n return getJsxFactory(context);\n case 'getPropCategory':\n // @ts-expect-error cast\n return getPropertyCategory(context, ...args);\n case 'isColorAttribute':\n // @ts-expect-error cast\n return isColorAttribute(context, ...args);\n case 'isColorToken':\n // @ts-expect-error cast\n return isColorToken(context, ...args);\n case 'isValidFile':\n return isValidFile(context, options.currentFile);\n case 'isValidProperty':\n // @ts-expect-error cast\n return isValidProperty(context, ...args);\n case 'matchFile':\n // @ts-expect-error cast\n return matchFile(context, ...args);\n case 'matchImports':\n // @ts-expect-error cast\n return matchImports(context, ...args);\n case 'resolveLongHand':\n // @ts-expect-error cast\n return resolveLongHand(context, ...args);\n case 'resolveShorthands':\n // @ts-expect-error cast\n return resolveShorthands(context, ...args);\n }\n}\n\n// Refactored to use micromatch instead of getFiles() for O(1) performance\nconst isValidFile = (context: Generator, fileName: string): boolean => {\n const { exclude, include } = context.config;\n const cwd = context.config.cwd || process.cwd();\n\n const relativePath = path.isAbsolute(fileName)\n ? path.relative(cwd, fileName)\n : fileName;\n\n return micromatch.isMatch(relativePath, include, {\n dot: true,\n ignore: exclude,\n });\n};\n\n// Refactored to arrow function, removed async\nconst isValidProperty = (\n context: Generator,\n name: string,\n patternName?: string,\n) => {\n if (context.isValidProperty(name)) {\n return true;\n }\n\n if (!patternName) {\n return false;\n }\n\n // If the pattern name is the jsxFactory (e.g., 'styled'), we should accept\n // any property that is valid according to the global property check\n // Since styled components are generic wrappers, we don't need pattern-specific checks\n if (patternName === context.config.jsxFactory) {\n // Already checked globally above, so return false if we got here\n return false;\n }\n\n const pattern = context.patterns.details.find(\n (p) => p.baseName === patternName || p.jsx.includes(patternName),\n )?.config.properties;\n if (!pattern) {\n return false;\n }\n\n return Object.keys(pattern).includes(name);\n};\n\n// Refactored to arrow function, removed async\nconst matchFile = (\n context: Generator,\n name: string,\n imports: ImportResult[],\n) => {\n const file = context.imports.file(imports);\n return file.match(name);\n};\n\n// Refactored to arrow function, removed async\nconst matchImports = (context: Generator, result: MatchImportResult) => {\n return context.imports.match(result, (module_) => {\n const { tsOptions } = context.parserOptions;\n if (!tsOptions?.pathMappings) {\n return;\n }\n\n return resolveTsPathPattern(tsOptions.pathMappings, module_);\n });\n};\n\n// Batch filter imports to reduce worker thread crossings\nconst filterImports = (\n context: Generator,\n imports: MatchImportResult[],\n): MatchImportResult[] => {\n return imports.filter((imp) =>\n context.imports.match(imp, (module_) => {\n const { tsOptions } = context.parserOptions;\n if (!tsOptions?.pathMappings) {\n return;\n }\n\n return resolveTsPathPattern(tsOptions.pathMappings, module_);\n }),\n );\n};\n\n// Cache reverse shorthand map per context to avoid O(N) rebuild on every call\nconst reverseShorthandsMapCache = new WeakMap<Generator, Map<string, string>>();\n\nconst getReverseShorthandsMap = (context: Generator): Map<string, string> => {\n let reverseMap = reverseShorthandsMapCache.get(context);\n if (!reverseMap) {\n reverseMap = new Map();\n const shorthands = context.utility.getPropShorthandsMap();\n for (const [key, values] of shorthands) {\n for (const value of values) {\n reverseMap.set(value, key);\n }\n }\n\n reverseShorthandsMapCache.set(context, reverseMap);\n }\n\n return reverseMap;\n};\n\n// Refactored to use cached reverse shorthand map\nconst resolveLongHand = (\n context: Generator,\n name: string,\n): string | undefined => {\n return getReverseShorthandsMap(context).get(name);\n};\n\n// Refactored to arrow function, removed async\nconst resolveShorthands = (\n context: Generator,\n name: string,\n): string[] | undefined => {\n return context.utility.getPropShorthandsMap().get(name);\n};\n\nconst getJsxFactory = (context: Generator): string | undefined => {\n return context.config.jsxFactory;\n};\n\nrunAsWorker(run as any);\n","import { type run } from './worker';\nimport { ESLintUtils } from '@typescript-eslint/utils';\nimport { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createSyncFn } from 'synckit';\n\n// Rule creator\nexport const createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/bamboocss/bamboo/blob/main/packages/eslint-plugin/docs/rules/${name}.md`,\n);\n\n// Determine the distribution directory\nconst isBase =\n process.env.NODE_ENV !== 'test' || import.meta.url.endsWith('dist/index.js');\n\nconst distDir = fileURLToPath(\n new URL(isBase ? './' : '../../dist', import.meta.url),\n);\n\n// Create synchronous function using synckit\nconst _syncAction = createSyncFn(join(distDir, 'utils/worker.mjs'));\n\n// Define syncAction with proper typing and error handling\nconst cache = new Map<string, any>();\n\nexport const syncAction = ((...args: Parameters<typeof run>) => {\n // Generate cache key from arguments\n const cacheKey = JSON.stringify(args);\n\n // Return cached result if exists\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey);\n }\n\n try {\n const result = _syncAction(...args);\n // Store result in cache\n cache.set(cacheKey, result);\n return result;\n } catch (error) {\n console.error('syncAction error:', error);\n return undefined;\n }\n}) as typeof run;\n\nexport type ImportResult = {\n alias: string;\n importMapValue?: string;\n mod: string;\n name: string;\n};\n"],"mappings":"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"}
@@ -1,217 +0,0 @@
1
- //#region \0rolldown/runtime.js
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") {
10
- for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
- key = keys[i];
12
- if (!__hasOwnProp.call(to, key) && key !== except) {
13
- __defProp(to, key, {
14
- get: ((k) => from[k]).bind(null, key),
15
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
- });
17
- }
18
- }
19
- }
20
- return to;
21
- };
22
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
- value: mod,
24
- enumerable: true
25
- }) : target, mod));
26
-
27
- //#endregion
28
- let _bamboocss_config = require("@bamboocss/config");
29
- let _bamboocss_config_ts_path = require("@bamboocss/config/ts-path");
30
- let _bamboocss_generator = require("@bamboocss/generator");
31
- let micromatch = require("micromatch");
32
- micromatch = __toESM(micromatch);
33
- let path = require("path");
34
- path = __toESM(path);
35
- let synckit = require("synckit");
36
- let _typescript_eslint_utils = require("@typescript-eslint/utils");
37
- let node_path = require("node:path");
38
- let node_url = require("node:url");
39
-
40
- //#region src/utils/worker.ts
41
- const contextCache = {};
42
- async function getContext(options) {
43
- if (process.env.NODE_ENV === "test") {
44
- const { createGeneratorContext } = await import("../tests/fixtures/create-context");
45
- return createGeneratorContext({
46
- exclude: ["**/Invalid.tsx", "**/bamboo.config.ts"],
47
- importMap: "./bamboo",
48
- include: ["**/*"],
49
- jsxFactory: "styled"
50
- });
51
- } else {
52
- const configPath = (0, _bamboocss_config.findConfig)({ cwd: options.configPath ?? options.currentFile });
53
- if (!contextCache[configPath]) contextCache[configPath] = _getContext(configPath);
54
- return contextCache[configPath];
55
- }
56
- }
57
- async function _getContext(configPath) {
58
- if (!configPath) throw new Error("Invalid config path");
59
- return new _bamboocss_generator.Generator(await (0, _bamboocss_config.loadConfig)({
60
- cwd: path.default.dirname(configPath),
61
- file: configPath
62
- }));
63
- }
64
- const filterDeprecatedTokens = (context, tokens) => {
65
- return tokens.filter((token) => {
66
- const value = typeof token === "string" ? token : token.category + "." + token.value;
67
- return context.utility.tokens.isDeprecated(value);
68
- });
69
- };
70
- const filterInvalidTokens = (context, paths) => {
71
- return paths.filter((path$2) => !context.utility.tokens.view.get(path$2));
72
- };
73
- const getPropertyCategory = (context, _attribute) => {
74
- const attribute = resolveLongHand(context, _attribute) || _attribute;
75
- const attributeConfig = context.utility.config[attribute];
76
- return typeof attributeConfig?.values === "string" ? attributeConfig.values : void 0;
77
- };
78
- const isColorAttribute = (context, _attribute) => {
79
- return getPropertyCategory(context, _attribute) === "colors";
80
- };
81
- const isColorToken = (context, value) => {
82
- return Boolean(context.utility.tokens.view.categoryMap.get("colors")?.get(value));
83
- };
84
- function run(action, options, ...args) {
85
- return runAsync(action, options, ...args);
86
- }
87
- async function runAsync(action, options, ...args) {
88
- const context = await getContext(options);
89
- switch (action) {
90
- case "filterDeprecatedTokens": return filterDeprecatedTokens(context, ...args);
91
- case "filterImports": return filterImports(context, ...args);
92
- case "filterInvalidTokens": return filterInvalidTokens(context, ...args);
93
- case "getJsxFactory": return getJsxFactory(context);
94
- case "getPropCategory": return getPropertyCategory(context, ...args);
95
- case "isColorAttribute": return isColorAttribute(context, ...args);
96
- case "isColorToken": return isColorToken(context, ...args);
97
- case "isValidFile": return isValidFile(context, options.currentFile);
98
- case "isValidProperty": return isValidProperty(context, ...args);
99
- case "matchFile": return matchFile(context, ...args);
100
- case "matchImports": return matchImports(context, ...args);
101
- case "resolveLongHand": return resolveLongHand(context, ...args);
102
- case "resolveShorthands": return resolveShorthands(context, ...args);
103
- }
104
- }
105
- const isValidFile = (context, fileName) => {
106
- const { exclude, include } = context.config;
107
- const cwd = context.config.cwd || process.cwd();
108
- const relativePath = path.default.isAbsolute(fileName) ? path.default.relative(cwd, fileName) : fileName;
109
- return micromatch.default.isMatch(relativePath, include, {
110
- dot: true,
111
- ignore: exclude
112
- });
113
- };
114
- const isValidProperty = (context, name, patternName) => {
115
- if (context.isValidProperty(name)) return true;
116
- if (!patternName) return false;
117
- if (patternName === context.config.jsxFactory) return false;
118
- const pattern = context.patterns.details.find((p) => p.baseName === patternName || p.jsx.includes(patternName))?.config.properties;
119
- if (!pattern) return false;
120
- return Object.keys(pattern).includes(name);
121
- };
122
- const matchFile = (context, name, imports) => {
123
- return context.imports.file(imports).match(name);
124
- };
125
- const matchImports = (context, result) => {
126
- return context.imports.match(result, (module_) => {
127
- const { tsOptions } = context.parserOptions;
128
- if (!tsOptions?.pathMappings) return;
129
- return (0, _bamboocss_config_ts_path.resolveTsPathPattern)(tsOptions.pathMappings, module_);
130
- });
131
- };
132
- const filterImports = (context, imports) => {
133
- return imports.filter((imp) => context.imports.match(imp, (module_) => {
134
- const { tsOptions } = context.parserOptions;
135
- if (!tsOptions?.pathMappings) return;
136
- return (0, _bamboocss_config_ts_path.resolveTsPathPattern)(tsOptions.pathMappings, module_);
137
- }));
138
- };
139
- const reverseShorthandsMapCache = /* @__PURE__ */ new WeakMap();
140
- const getReverseShorthandsMap = (context) => {
141
- let reverseMap = reverseShorthandsMapCache.get(context);
142
- if (!reverseMap) {
143
- reverseMap = /* @__PURE__ */ new Map();
144
- const shorthands = context.utility.getPropShorthandsMap();
145
- for (const [key, values] of shorthands) for (const value of values) reverseMap.set(value, key);
146
- reverseShorthandsMapCache.set(context, reverseMap);
147
- }
148
- return reverseMap;
149
- };
150
- const resolveLongHand = (context, name) => {
151
- return getReverseShorthandsMap(context).get(name);
152
- };
153
- const resolveShorthands = (context, name) => {
154
- return context.utility.getPropShorthandsMap().get(name);
155
- };
156
- const getJsxFactory = (context) => {
157
- return context.config.jsxFactory;
158
- };
159
- (0, synckit.runAsWorker)(run);
160
-
161
- //#endregion
162
- //#region src/utils/index.ts
163
- const createRule = _typescript_eslint_utils.ESLintUtils.RuleCreator((name) => `https://github.com/bamboocss/bamboo/blob/main/packages/eslint-plugin/docs/rules/${name}.md`);
164
- const isBase = process.env.NODE_ENV !== "test" || require("url").pathToFileURL(__filename).href.endsWith("dist/index.js");
165
- const _syncAction = (0, synckit.createSyncFn)((0, node_path.join)((0, node_url.fileURLToPath)(new URL(isBase ? "./" : "../../dist", require("url").pathToFileURL(__filename).href)), "utils/worker.mjs"));
166
- const cache = /* @__PURE__ */ new Map();
167
- const syncAction = ((...args) => {
168
- const cacheKey = JSON.stringify(args);
169
- if (cache.has(cacheKey)) return cache.get(cacheKey);
170
- try {
171
- const result = _syncAction(...args);
172
- cache.set(cacheKey, result);
173
- return result;
174
- } catch (error) {
175
- console.error("syncAction error:", error);
176
- return;
177
- }
178
- });
179
-
180
- //#endregion
181
- Object.defineProperty(exports, '__toESM', {
182
- enumerable: true,
183
- get: function () {
184
- return __toESM;
185
- }
186
- });
187
- Object.defineProperty(exports, 'createRule', {
188
- enumerable: true,
189
- get: function () {
190
- return createRule;
191
- }
192
- });
193
- Object.defineProperty(exports, 'getContext', {
194
- enumerable: true,
195
- get: function () {
196
- return getContext;
197
- }
198
- });
199
- Object.defineProperty(exports, 'run', {
200
- enumerable: true,
201
- get: function () {
202
- return run;
203
- }
204
- });
205
- Object.defineProperty(exports, 'runAsync', {
206
- enumerable: true,
207
- get: function () {
208
- return runAsync;
209
- }
210
- });
211
- Object.defineProperty(exports, 'syncAction', {
212
- enumerable: true,
213
- get: function () {
214
- return syncAction;
215
- }
216
- });
217
- //# sourceMappingURL=utils-BbqZf2ZV.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils-BbqZf2ZV.cjs","names":["Generator","path","ESLintUtils"],"sources":["../src/utils/worker.ts","../src/utils/index.ts"],"sourcesContent":["import { type ImportResult } from '.';\nimport { findConfig, loadConfig } from '@bamboocss/config';\nimport { resolveTsPathPattern } from '@bamboocss/config/ts-path';\nimport { Generator } from '@bamboocss/generator';\nimport micromatch from 'micromatch';\nimport path from 'path';\nimport { runAsWorker } from 'synckit';\n\ntype Options = {\n configPath?: string;\n currentFile: string;\n};\n\nconst contextCache: { [configPath: string]: Promise<Generator> } = {};\n\nexport type DeprecatedToken =\n | string\n | {\n category: string;\n value: string;\n };\n\nexport async function getContext(options: Options) {\n if (process.env.NODE_ENV === 'test') {\n const { createGeneratorContext } = await import(\n '../../tests/fixtures/create-context'\n );\n const context = createGeneratorContext({\n exclude: ['**/Invalid.tsx', '**/bamboo.config.ts'],\n importMap: './bamboo',\n include: ['**/*'],\n jsxFactory: 'styled',\n });\n return context;\n } else {\n const configPath = findConfig({\n cwd: options.configPath ?? options.currentFile,\n });\n\n // The context cache ensures we don't reload the same config multiple times\n if (!contextCache[configPath]) {\n contextCache[configPath] = _getContext(configPath);\n }\n\n return contextCache[configPath];\n }\n}\n\nasync function _getContext(configPath: string | undefined) {\n if (!configPath) {\n throw new Error('Invalid config path');\n }\n\n const cwd = path.dirname(configPath);\n\n const conf = await loadConfig({ cwd, file: configPath });\n const context = new Generator(conf);\n\n return context;\n}\n\n// Refactored to arrow function, removed async\nconst filterDeprecatedTokens = (\n context: Generator,\n tokens: DeprecatedToken[],\n): DeprecatedToken[] => {\n return tokens.filter((token) => {\n const value =\n typeof token === 'string' ? token : token.category + '.' + token.value;\n return context.utility.tokens.isDeprecated(value);\n });\n};\n\n// Refactored to arrow function, removed async\nconst filterInvalidTokens = (context: Generator, paths: string[]): string[] => {\n return paths.filter((path) => !context.utility.tokens.view.get(path));\n};\n\n// Refactored to arrow function, removed async\nconst getPropertyCategory = (context: Generator, _attribute: string) => {\n const longhand = resolveLongHand(context, _attribute);\n const attribute = longhand || _attribute;\n const attributeConfig = context.utility.config[attribute];\n return typeof attributeConfig?.values === 'string'\n ? attributeConfig.values\n : undefined;\n};\n\n// Refactored to arrow function, removed async\nconst isColorAttribute = (context: Generator, _attribute: string): boolean => {\n const category = getPropertyCategory(context, _attribute);\n return category === 'colors';\n};\n\n// Refactored to arrow function, removed async\nconst isColorToken = (context: Generator, value: string): boolean => {\n return Boolean(\n context.utility.tokens.view.categoryMap.get('colors')?.get(value),\n );\n};\n\ntype MatchImportResult = {\n alias: string;\n mod: string;\n name: string;\n};\n\nexport function run(\n action: 'filterInvalidTokens',\n options: Options,\n paths: string[],\n): string[];\n\nexport function run(\n action: 'isColorToken',\n options: Options,\n value: string,\n): boolean;\n\nexport function run(\n action: 'isColorAttribute',\n options: Options,\n attribute: string,\n): boolean;\n\nexport function run(action: 'isValidFile', options: Options): boolean;\n\nexport function run(\n action: 'resolveShorthands',\n options: Options,\n name: string,\n): string[] | undefined;\nexport function run(\n action: 'resolveLongHand',\n options: Options,\n name: string,\n): string | undefined;\n\nexport function run(\n action: 'isValidProperty',\n options: Options,\n name: string,\n patternName?: string,\n): boolean;\nexport function run(\n action: 'matchFile',\n options: Options,\n name: string,\n imports: ImportResult[],\n): boolean;\nexport function run(\n action: 'matchImports',\n options: Options,\n result: MatchImportResult,\n): boolean;\nexport function run(\n action: 'filterImports',\n options: Options,\n imports: MatchImportResult[],\n): MatchImportResult[];\nexport function run(\n action: 'getPropCategory',\n options: Options,\n property: string,\n): string;\nexport function run(\n action: 'filterDeprecatedTokens',\n options: Options,\n tokens: DeprecatedToken[],\n): DeprecatedToken[];\nexport function run(\n action: 'getJsxFactory',\n options: Options,\n): string | undefined;\nexport function run(action: string, options: Options, ...args: any[]): any {\n // @ts-expect-error cast\n return runAsync(action, options, ...args);\n}\n\nexport function runAsync(\n action: 'filterInvalidTokens',\n options: Options,\n paths: string[],\n): Promise<string[]>;\nexport function runAsync(\n action: 'isColorToken',\n options: Options,\n value: string,\n): Promise<boolean>;\nexport function runAsync(\n action: 'isColorAttribute',\n options: Options,\n attribute: string,\n): Promise<boolean>;\nexport function runAsync(\n action: 'isValidFile',\n options: Options,\n fileName: string,\n): Promise<string>;\nexport function runAsync(\n action: 'resolveShorthands',\n options: Options,\n name: string,\n): Promise<string[] | undefined>;\nexport function runAsync(\n action: 'resolveLongHand',\n options: Options,\n name: string,\n): Promise<string | undefined>;\n\nexport function runAsync(\n action: 'isValidProperty',\n options: Options,\n name: string,\n patternName?: string,\n): Promise<boolean>;\nexport function runAsync(\n action: 'matchFile',\n options: Options,\n name: string,\n imports: ImportResult[],\n): Promise<boolean>;\nexport function runAsync(\n action: 'matchImports',\n options: Options,\n result: MatchImportResult,\n): Promise<boolean>;\nexport function runAsync(\n action: 'filterImports',\n options: Options,\n imports: MatchImportResult[],\n): Promise<MatchImportResult[]>;\nexport function runAsync(\n action: 'getPropCategory',\n options: Options,\n property: string,\n): Promise<string>;\nexport function runAsync(\n action: 'filterDeprecatedTokens',\n options: Options,\n tokens: DeprecatedToken[],\n): Promise<DeprecatedToken[]>;\nexport function runAsync(\n action: 'getJsxFactory',\n options: Options,\n): Promise<string | undefined>;\nexport async function runAsync(\n action: string,\n options: Options,\n ...args: any\n): Promise<any> {\n const context = await getContext(options);\n\n switch (action) {\n case 'filterDeprecatedTokens':\n // @ts-expect-error cast\n return filterDeprecatedTokens(context, ...args);\n case 'filterImports':\n // @ts-expect-error cast\n return filterImports(context, ...args);\n case 'filterInvalidTokens':\n // @ts-expect-error cast\n return filterInvalidTokens(context, ...args);\n case 'getJsxFactory':\n return getJsxFactory(context);\n case 'getPropCategory':\n // @ts-expect-error cast\n return getPropertyCategory(context, ...args);\n case 'isColorAttribute':\n // @ts-expect-error cast\n return isColorAttribute(context, ...args);\n case 'isColorToken':\n // @ts-expect-error cast\n return isColorToken(context, ...args);\n case 'isValidFile':\n return isValidFile(context, options.currentFile);\n case 'isValidProperty':\n // @ts-expect-error cast\n return isValidProperty(context, ...args);\n case 'matchFile':\n // @ts-expect-error cast\n return matchFile(context, ...args);\n case 'matchImports':\n // @ts-expect-error cast\n return matchImports(context, ...args);\n case 'resolveLongHand':\n // @ts-expect-error cast\n return resolveLongHand(context, ...args);\n case 'resolveShorthands':\n // @ts-expect-error cast\n return resolveShorthands(context, ...args);\n }\n}\n\n// Refactored to use micromatch instead of getFiles() for O(1) performance\nconst isValidFile = (context: Generator, fileName: string): boolean => {\n const { exclude, include } = context.config;\n const cwd = context.config.cwd || process.cwd();\n\n const relativePath = path.isAbsolute(fileName)\n ? path.relative(cwd, fileName)\n : fileName;\n\n return micromatch.isMatch(relativePath, include, {\n dot: true,\n ignore: exclude,\n });\n};\n\n// Refactored to arrow function, removed async\nconst isValidProperty = (\n context: Generator,\n name: string,\n patternName?: string,\n) => {\n if (context.isValidProperty(name)) {\n return true;\n }\n\n if (!patternName) {\n return false;\n }\n\n // If the pattern name is the jsxFactory (e.g., 'styled'), we should accept\n // any property that is valid according to the global property check\n // Since styled components are generic wrappers, we don't need pattern-specific checks\n if (patternName === context.config.jsxFactory) {\n // Already checked globally above, so return false if we got here\n return false;\n }\n\n const pattern = context.patterns.details.find(\n (p) => p.baseName === patternName || p.jsx.includes(patternName),\n )?.config.properties;\n if (!pattern) {\n return false;\n }\n\n return Object.keys(pattern).includes(name);\n};\n\n// Refactored to arrow function, removed async\nconst matchFile = (\n context: Generator,\n name: string,\n imports: ImportResult[],\n) => {\n const file = context.imports.file(imports);\n return file.match(name);\n};\n\n// Refactored to arrow function, removed async\nconst matchImports = (context: Generator, result: MatchImportResult) => {\n return context.imports.match(result, (module_) => {\n const { tsOptions } = context.parserOptions;\n if (!tsOptions?.pathMappings) {\n return;\n }\n\n return resolveTsPathPattern(tsOptions.pathMappings, module_);\n });\n};\n\n// Batch filter imports to reduce worker thread crossings\nconst filterImports = (\n context: Generator,\n imports: MatchImportResult[],\n): MatchImportResult[] => {\n return imports.filter((imp) =>\n context.imports.match(imp, (module_) => {\n const { tsOptions } = context.parserOptions;\n if (!tsOptions?.pathMappings) {\n return;\n }\n\n return resolveTsPathPattern(tsOptions.pathMappings, module_);\n }),\n );\n};\n\n// Cache reverse shorthand map per context to avoid O(N) rebuild on every call\nconst reverseShorthandsMapCache = new WeakMap<Generator, Map<string, string>>();\n\nconst getReverseShorthandsMap = (context: Generator): Map<string, string> => {\n let reverseMap = reverseShorthandsMapCache.get(context);\n if (!reverseMap) {\n reverseMap = new Map();\n const shorthands = context.utility.getPropShorthandsMap();\n for (const [key, values] of shorthands) {\n for (const value of values) {\n reverseMap.set(value, key);\n }\n }\n\n reverseShorthandsMapCache.set(context, reverseMap);\n }\n\n return reverseMap;\n};\n\n// Refactored to use cached reverse shorthand map\nconst resolveLongHand = (\n context: Generator,\n name: string,\n): string | undefined => {\n return getReverseShorthandsMap(context).get(name);\n};\n\n// Refactored to arrow function, removed async\nconst resolveShorthands = (\n context: Generator,\n name: string,\n): string[] | undefined => {\n return context.utility.getPropShorthandsMap().get(name);\n};\n\nconst getJsxFactory = (context: Generator): string | undefined => {\n return context.config.jsxFactory;\n};\n\nrunAsWorker(run as any);\n","import { type run } from './worker';\nimport { ESLintUtils } from '@typescript-eslint/utils';\nimport { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createSyncFn } from 'synckit';\n\n// Rule creator\nexport const createRule = ESLintUtils.RuleCreator(\n (name) =>\n `https://github.com/bamboocss/bamboo/blob/main/packages/eslint-plugin/docs/rules/${name}.md`,\n);\n\n// Determine the distribution directory\nconst isBase =\n process.env.NODE_ENV !== 'test' || import.meta.url.endsWith('dist/index.js');\n\nconst distDir = fileURLToPath(\n new URL(isBase ? './' : '../../dist', import.meta.url),\n);\n\n// Create synchronous function using synckit\nconst _syncAction = createSyncFn(join(distDir, 'utils/worker.mjs'));\n\n// Define syncAction with proper typing and error handling\nconst cache = new Map<string, any>();\n\nexport const syncAction = ((...args: Parameters<typeof run>) => {\n // Generate cache key from arguments\n const cacheKey = JSON.stringify(args);\n\n // Return cached result if exists\n if (cache.has(cacheKey)) {\n return cache.get(cacheKey);\n }\n\n try {\n const result = _syncAction(...args);\n // Store result in cache\n cache.set(cacheKey, result);\n return result;\n } catch (error) {\n console.error('syncAction error:', error);\n return undefined;\n }\n}) as typeof run;\n\nexport type ImportResult = {\n alias: string;\n importMapValue?: string;\n mod: string;\n name: string;\n};\n"],"mappings":"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"}