zcw-shared 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,16 @@
1
+ import type { ColorReference, ColorFormat, ColorPatterns } from '../../../types/color.d';
2
+ export interface ColorExtractorDependencies {
3
+ getColorPatterns: () => ColorPatterns;
4
+ standardizeColor: (color: string) => string;
5
+ detectColorFormat: (color: string) => ColorFormat | null;
6
+ isColorValue: (value: string) => {
7
+ isValid: boolean;
8
+ format?: ColorFormat;
9
+ };
10
+ }
11
+ export interface ColorExtractionOptions {
12
+ cssVariables?: Record<string, string>;
13
+ thirdPartyVariables?: Record<string, string>;
14
+ }
15
+ export declare function extractColors(code: string, filePath: string, dependencies: ColorExtractorDependencies, options?: ColorExtractionOptions): ColorReference[];
16
+ export declare function extractColorsFromLine(line: string, filePath: string, lineNumber: number, dependencies: ColorExtractorDependencies, options?: ColorExtractionOptions): ColorReference[];
@@ -0,0 +1,111 @@
1
+ export function extractColors(code, filePath, dependencies, options = {}) {
2
+ const { cssVariables = {}, thirdPartyVariables = {} } = options;
3
+ const colors = [];
4
+ const lines = code.split('\n');
5
+ const parsedCssVariables = parseCssVariables(code, filePath, dependencies);
6
+ const allCssVariables = { ...cssVariables, ...parsedCssVariables };
7
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
8
+ const line = lines[lineIndex];
9
+ const lineNumber = lineIndex + 1;
10
+ colors.push(...extractColorsFromLine(line, filePath, lineNumber, dependencies, { cssVariables: allCssVariables, thirdPartyVariables }));
11
+ }
12
+ return colors;
13
+ }
14
+ export function extractColorsFromLine(line, filePath, lineNumber, dependencies, options = {}) {
15
+ const { cssVariables = {}, thirdPartyVariables = {} } = options;
16
+ const colors = [];
17
+ const patterns = dependencies.getColorPatterns();
18
+ colors.push(...extractHexColors(line, filePath, lineNumber, patterns, dependencies));
19
+ colors.push(...extractRgbColors(line, filePath, lineNumber, patterns, dependencies));
20
+ colors.push(...extractRgbaColors(line, filePath, lineNumber, patterns, dependencies));
21
+ colors.push(...extractHslColors(line, filePath, lineNumber, patterns, dependencies));
22
+ colors.push(...extractHslaColors(line, filePath, lineNumber, patterns, dependencies));
23
+ colors.push(...extractNamedColors(line, filePath, lineNumber, patterns, dependencies));
24
+ colors.push(...extractCssVariableReferences(line, filePath, lineNumber, patterns, cssVariables));
25
+ colors.push(...extractThirdPartyVariableReferences(line, filePath, lineNumber, patterns, thirdPartyVariables));
26
+ return colors;
27
+ }
28
+ function extractHexColors(line, filePath, lineNumber, patterns, dependencies) {
29
+ return extractColorsGeneric(line, filePath, lineNumber, patterns.hex, 'hex', dependencies);
30
+ }
31
+ function extractRgbColors(line, filePath, lineNumber, patterns, dependencies) {
32
+ return extractColorsGeneric(line, filePath, lineNumber, patterns.rgb, 'rgb', dependencies);
33
+ }
34
+ function extractRgbaColors(line, filePath, lineNumber, patterns, dependencies) {
35
+ return extractColorsGeneric(line, filePath, lineNumber, patterns.rgba, 'rgba', dependencies);
36
+ }
37
+ function extractHslColors(line, filePath, lineNumber, patterns, dependencies) {
38
+ return extractColorsGeneric(line, filePath, lineNumber, patterns.hsl, 'hsl', dependencies);
39
+ }
40
+ function extractHslaColors(line, filePath, lineNumber, patterns, dependencies) {
41
+ return extractColorsGeneric(line, filePath, lineNumber, patterns.hsla, 'hsla', dependencies);
42
+ }
43
+ function extractNamedColors(line, filePath, lineNumber, patterns, dependencies) {
44
+ return extractColorsGeneric(line, filePath, lineNumber, patterns.namedColors, 'named', dependencies);
45
+ }
46
+ function extractCssVariableReferences(line, filePath, lineNumber, patterns, cssVariables) {
47
+ const colors = [];
48
+ const cssVarPattern = /var\(\s*--([\w-]+)\s*\)/g;
49
+ const matches = line.matchAll(cssVarPattern);
50
+ for (const match of matches) {
51
+ const variableName = match[1];
52
+ const variableValue = cssVariables[variableName];
53
+ if (variableValue) {
54
+ colors.push(createColorReference(variableValue, 'css-variable', filePath, lineNumber, line, variableValue, true, variableName));
55
+ }
56
+ }
57
+ return colors;
58
+ }
59
+ function extractThirdPartyVariableReferences(line, filePath, lineNumber, patterns, thirdPartyVariables) {
60
+ const colors = [];
61
+ const thirdPartyPattern = /\$([\w-]+)/g;
62
+ const matches = line.matchAll(thirdPartyPattern);
63
+ for (const match of matches) {
64
+ const variableName = match[1];
65
+ const variableValue = thirdPartyVariables[variableName];
66
+ if (variableValue) {
67
+ colors.push(createColorReference(variableValue, 'third-party-variable', filePath, lineNumber, line, variableName, true, variableName));
68
+ }
69
+ }
70
+ return colors;
71
+ }
72
+ function extractColorsGeneric(line, filePath, lineNumber, pattern, format, dependencies) {
73
+ const colors = [];
74
+ const matches = line.matchAll(new RegExp(pattern.source, 'g'));
75
+ for (const match of matches) {
76
+ const originalColor = match[0];
77
+ const standardizedColor = dependencies.standardizeColor(originalColor);
78
+ colors.push(createColorReference(standardizedColor, format, filePath, lineNumber, line, originalColor));
79
+ }
80
+ return colors;
81
+ }
82
+ function parseCssVariables(code, filePath, dependencies) {
83
+ const variables = {};
84
+ const lines = code.split('\n');
85
+ const cssVarDefPattern = /--([\w-]+)\s*:\s*([^;]+);/g;
86
+ for (const line of lines) {
87
+ const matches = line.matchAll(cssVarDefPattern);
88
+ for (const match of matches) {
89
+ const [, variableName, variableValue] = match;
90
+ const trimmedValue = variableValue.trim();
91
+ const validation = dependencies.isColorValue(trimmedValue);
92
+ if (validation.isValid) {
93
+ const standardizedValue = dependencies.standardizeColor(trimmedValue);
94
+ variables[variableName] = standardizedValue;
95
+ }
96
+ }
97
+ }
98
+ return variables;
99
+ }
100
+ function createColorReference(value, format, file, line, context, originalValue, isVariableReference = false, variableName) {
101
+ return {
102
+ originalValue,
103
+ format,
104
+ file,
105
+ line,
106
+ context: context.trim(),
107
+ isVariableReference,
108
+ variableName
109
+ };
110
+ }
111
+ //# sourceMappingURL=extractColors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractColors.js","sourceRoot":"","sources":["../../../src/functions/color-converter/extractColors.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zcw-shared",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "files": [
5
5
  "references",
6
6
  "dist",
@@ -34,6 +34,7 @@
34
34
  "./functions/base64/strToBase64": "./dist/functions/base64/strToBase64.js",
35
35
  "./functions/color-converter/convertColor": "./dist/functions/color-converter/convertColor.js",
36
36
  "./functions/color-converter/detectColorFormat": "./dist/functions/color-converter/detectColorFormat.js",
37
+ "./functions/color-converter/extractColors": "./dist/functions/color-converter/extractColors.js",
37
38
  "./functions/color-converter/getColorPatterns": "./dist/functions/color-converter/getColorPatterns.js",
38
39
  "./functions/color-converter/getNamedColorMap": "./dist/functions/color-converter/getNamedColorMap.js",
39
40
  "./functions/color-converter/hueToRgb": "./dist/functions/color-converter/hueToRgb.js",
package/types/color.d.ts CHANGED
@@ -112,4 +112,25 @@ export interface ColorConversionOptions {
112
112
  alphaValue?: number
113
113
  /** 是否使用8位十六进制格式 */
114
114
  use8BitHex?: boolean
115
+ }
116
+
117
+ /**
118
+ * 颜色引用信息
119
+ * 用于描述在代码中发现的颜色值及其上下文信息
120
+ */
121
+ export interface ColorReference {
122
+ /** 原始颜色值 */
123
+ originalValue: string
124
+ /** 颜色格式类型 */
125
+ format: ColorFormat | 'css-variable' | 'third-party-variable'
126
+ /** 文件路径 */
127
+ file: string
128
+ /** 行号 */
129
+ line: number
130
+ /** 上下文代码 */
131
+ context: string
132
+ /** 是否为变量引用 */
133
+ isVariableReference?: boolean
134
+ /** 变量名称(当isVariableReference为true时) */
135
+ variableName?: string
115
136
  }