@claralight-design/symbol-kit-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +27 -0
- package/dist/i18n.d.ts +41 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +103 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +351 -0
- package/dist/index.js.map +1 -0
- package/dist/reporter.d.ts +22 -0
- package/dist/reporter.d.ts.map +1 -0
- package/dist/reporter.js +196 -0
- package/dist/reporter.js.map +1 -0
- package/package.json +48 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 没有用的安龙
|
|
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,27 @@
|
|
|
1
|
+
# Claralight Symbol Kit CLI
|
|
2
|
+
|
|
3
|
+
Command-line SVG and Design Token compiler for Claralight Symbol Kit.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
pnpm add -D @claralight-design/symbol-kit-cli
|
|
7
|
+
|
|
8
|
+
pnpm clsk-cli build \
|
|
9
|
+
--input icons \
|
|
10
|
+
--width-tokens tokens/Width \
|
|
11
|
+
--style-tokens tokens/Style \
|
|
12
|
+
--out-dir output
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The CLI uses English by default. Add the `zh` argument for Simplified Chinese output:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm clsk-cli build zh \
|
|
19
|
+
--input icons \
|
|
20
|
+
--width-tokens tokens/Width \
|
|
21
|
+
--style-tokens tokens/Style \
|
|
22
|
+
--out-dir output
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`clsymbol-kit-cli` and `symbol-kit` remain available as command aliases.
|
|
26
|
+
|
|
27
|
+
Full documentation is available in the [Symbol Kit repository](https://github.com/AstralSightStudios/claralight-design-symbol-kit#readme).
|
package/dist/i18n.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export type CliLanguage = "en" | "zh";
|
|
2
|
+
export interface BuildStageText {
|
|
3
|
+
readonly active: string;
|
|
4
|
+
readonly complete: string;
|
|
5
|
+
readonly pending: string;
|
|
6
|
+
}
|
|
7
|
+
export interface CliText {
|
|
8
|
+
readonly building: string;
|
|
9
|
+
readonly built: string;
|
|
10
|
+
readonly cancelled: string;
|
|
11
|
+
readonly failed: string;
|
|
12
|
+
readonly error: string;
|
|
13
|
+
readonly completed: string;
|
|
14
|
+
readonly duration: (value: string) => string;
|
|
15
|
+
readonly icons: string;
|
|
16
|
+
readonly skipped: string;
|
|
17
|
+
readonly output: string;
|
|
18
|
+
readonly stages: readonly BuildStageText[];
|
|
19
|
+
readonly unknownStage: (index: number) => string;
|
|
20
|
+
readonly usage: string;
|
|
21
|
+
readonly generationFailed: (failures: string) => string;
|
|
22
|
+
readonly sameFlutterOutput: string;
|
|
23
|
+
readonly invalidInput: (path: string) => string;
|
|
24
|
+
readonly emptyInput: (path: string) => string;
|
|
25
|
+
readonly invalidArguments: string;
|
|
26
|
+
readonly missingOption: (name: string) => string;
|
|
27
|
+
readonly configReadFailed: (path: string, message: string) => string;
|
|
28
|
+
readonly invalidConfig: (path: string, message: string) => string;
|
|
29
|
+
readonly missingNormalStyle: string;
|
|
30
|
+
readonly invalidStyleToken: (mode: string, name: string) => string;
|
|
31
|
+
readonly unknownWeightMode: (mode: string) => string;
|
|
32
|
+
readonly invalidStrokeWidth: (mode: string) => string;
|
|
33
|
+
readonly emptyTokenDirectory: (directory: string) => string;
|
|
34
|
+
readonly missingModeName: string;
|
|
35
|
+
}
|
|
36
|
+
export declare function resolveCliLanguage(args: readonly string[]): {
|
|
37
|
+
readonly language: CliLanguage;
|
|
38
|
+
readonly args: readonly string[];
|
|
39
|
+
};
|
|
40
|
+
export declare function getCliText(language: CliLanguage): CliText;
|
|
41
|
+
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACxD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACrE,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAClE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,QAAQ,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD,QAAQ,CAAC,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAkGD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAC3D,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAMA;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAEzD"}
|
package/dist/i18n.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
const translations = {
|
|
2
|
+
en: {
|
|
3
|
+
building: "Building Symbol Kit.",
|
|
4
|
+
built: "Symbol Kit build completed.",
|
|
5
|
+
cancelled: "Symbol Kit build cancelled.",
|
|
6
|
+
failed: "Symbol Kit build failed.",
|
|
7
|
+
error: "Error",
|
|
8
|
+
completed: "Build completed",
|
|
9
|
+
duration: (value) => `in ${value}s`,
|
|
10
|
+
icons: "Icons",
|
|
11
|
+
skipped: "Skipped",
|
|
12
|
+
output: "Output",
|
|
13
|
+
stages: [
|
|
14
|
+
{
|
|
15
|
+
active: "Reading SVG and tokens…",
|
|
16
|
+
complete: "SVG and tokens read",
|
|
17
|
+
pending: "Waiting to read SVG and tokens"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
active: "Compiling SVG…",
|
|
21
|
+
complete: "SVG compiled",
|
|
22
|
+
pending: "Waiting to compile SVG"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
active: "Writing build artifacts…",
|
|
26
|
+
complete: "Build artifacts written",
|
|
27
|
+
pending: "Waiting to write build artifacts"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
unknownStage: (index) => `Unknown build stage: ${String(index)}`,
|
|
31
|
+
usage: "Usage: clsk-cli build [zh] --input <svg> --width-tokens <directory> --style-tokens <directory> --out-dir <directory> [--config <file>] [--name <name>] [--flutter-assets-dir <directory>]",
|
|
32
|
+
generationFailed: (failures) => `SVG generation failed:\n${failures}`,
|
|
33
|
+
sameFlutterOutput: "--flutter-assets-dir cannot be the same as --out-dir.",
|
|
34
|
+
invalidInput: (path) => `Build input must be an SVG file or directory: ${path}`,
|
|
35
|
+
emptyInput: (path) => `No SVG files found in build directory: ${path}`,
|
|
36
|
+
invalidArguments: "Build options must use the --option value format.",
|
|
37
|
+
missingOption: (name) => `Missing required build option: --${name}`,
|
|
38
|
+
configReadFailed: (path, message) => `Unable to read config file ${path}: ${message}`,
|
|
39
|
+
invalidConfig: (path, message) => `Invalid config file ${path}: ${message}`,
|
|
40
|
+
missingNormalStyle: "Missing required Style tokens mode: normal",
|
|
41
|
+
invalidStyleToken: (mode, name) => `${mode} tokens must include a valid Fill.${name}.`,
|
|
42
|
+
unknownWeightMode: (mode) => `Unknown Width tokens mode: ${mode}`,
|
|
43
|
+
invalidStrokeWidth: (mode) => `Width tokens mode ${mode} must include a valid Stroke Width.`,
|
|
44
|
+
emptyTokenDirectory: (directory) => `No .tokens.json files found in tokens directory: ${directory}`,
|
|
45
|
+
missingModeName: "Token file is missing com.figma.modeName."
|
|
46
|
+
},
|
|
47
|
+
zh: {
|
|
48
|
+
building: "Symbol Kit 构建中。",
|
|
49
|
+
built: "Symbol Kit 构建完成。",
|
|
50
|
+
cancelled: "Symbol Kit 构建已取消。",
|
|
51
|
+
failed: "Symbol Kit 构建失败。",
|
|
52
|
+
error: "错误",
|
|
53
|
+
completed: "构建完成",
|
|
54
|
+
duration: (value) => `用时 ${value} 秒`,
|
|
55
|
+
icons: "图标",
|
|
56
|
+
skipped: "跳过",
|
|
57
|
+
output: "输出",
|
|
58
|
+
stages: [
|
|
59
|
+
{
|
|
60
|
+
active: "正在读取 SVG 与 Token…",
|
|
61
|
+
complete: "SVG 与 Token 读取完成",
|
|
62
|
+
pending: "等待读取 SVG 与 Token"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
active: "正在编译 SVG…",
|
|
66
|
+
complete: "SVG 编译完成",
|
|
67
|
+
pending: "等待编译 SVG"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
active: "正在写入构建产物…",
|
|
71
|
+
complete: "构建产物写入完成",
|
|
72
|
+
pending: "等待写入构建产物"
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
unknownStage: (index) => `未知构建阶段:${String(index)}`,
|
|
76
|
+
usage: "用法:clsk-cli build [zh] --input <svg> --width-tokens <目录> --style-tokens <目录> --out-dir <目录> [--config <文件>] [--name <名称>] [--flutter-assets-dir <目录>]",
|
|
77
|
+
generationFailed: (failures) => `SVG 生成失败:\n${failures}`,
|
|
78
|
+
sameFlutterOutput: "--flutter-assets-dir 不能与 --out-dir 相同。",
|
|
79
|
+
invalidInput: (path) => `构建输入必须是 SVG 文件或目录:${path}`,
|
|
80
|
+
emptyInput: (path) => `构建目录中没有 SVG 文件:${path}`,
|
|
81
|
+
invalidArguments: "构建参数必须使用 --参数 值 的格式。",
|
|
82
|
+
missingOption: (name) => `缺少构建参数:--${name}`,
|
|
83
|
+
configReadFailed: (path, message) => `无法读取配置文件 ${path}:${message}`,
|
|
84
|
+
invalidConfig: (path, message) => `配置文件 ${path} 无效:${message}`,
|
|
85
|
+
missingNormalStyle: "缺少必需的 Style tokens 模式:normal",
|
|
86
|
+
invalidStyleToken: (mode, name) => `${mode} tokens 缺少有效的 Fill.${name}。`,
|
|
87
|
+
unknownWeightMode: (mode) => `无法识别 Width tokens 模式:${mode}`,
|
|
88
|
+
invalidStrokeWidth: (mode) => `Width tokens 模式 ${mode} 缺少有效的 Stroke Width。`,
|
|
89
|
+
emptyTokenDirectory: (directory) => `tokens 目录中没有 .tokens.json 文件:${directory}`,
|
|
90
|
+
missingModeName: "tokens 文件缺少 com.figma.modeName。"
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
export function resolveCliLanguage(args) {
|
|
94
|
+
const language = args.includes("zh") || args.includes("--zh") ? "zh" : "en";
|
|
95
|
+
return {
|
|
96
|
+
language,
|
|
97
|
+
args: args.filter((argument) => argument !== "zh" && argument !== "--zh")
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export function getCliText(language) {
|
|
101
|
+
return translations[language];
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=i18n.js.map
|
package/dist/i18n.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAsCA,MAAM,YAAY,GAAiC;IACjD,EAAE,EAAE;QACF,QAAQ,EAAE,sBAAsB;QAChC,KAAK,EAAE,6BAA6B;QACpC,SAAS,EAAE,6BAA6B;QACxC,MAAM,EAAE,0BAA0B;QAClC,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,iBAAiB;QAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,GAAG;QACnC,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE;YACN;gBACE,MAAM,EAAE,yBAAyB;gBACjC,QAAQ,EAAE,qBAAqB;gBAC/B,OAAO,EAAE,gCAAgC;aAC1C;YACD;gBACE,MAAM,EAAE,gBAAgB;gBACxB,QAAQ,EAAE,cAAc;gBACxB,OAAO,EAAE,wBAAwB;aAClC;YACD;gBACE,MAAM,EAAE,0BAA0B;gBAClC,QAAQ,EAAE,yBAAyB;gBACnC,OAAO,EAAE,kCAAkC;aAC5C;SACF;QACD,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,EAAE;QAChE,KAAK,EACH,2LAA2L;QAC7L,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,2BAA2B,QAAQ,EAAE;QACrE,iBAAiB,EAAE,uDAAuD;QAC1E,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iDAAiD,IAAI,EAAE;QAC/E,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,0CAA0C,IAAI,EAAE;QACtE,gBAAgB,EAAE,mDAAmD;QACrE,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,oCAAoC,IAAI,EAAE;QACnE,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,8BAA8B,IAAI,KAAK,OAAO,EAAE;QACrF,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,uBAAuB,IAAI,KAAK,OAAO,EAAE;QAC3E,kBAAkB,EAAE,4CAA4C;QAChE,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,qCAAqC,IAAI,GAAG;QACtF,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,8BAA8B,IAAI,EAAE;QACjE,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,IAAI,qCAAqC;QAC5F,mBAAmB,EAAE,CAAC,SAAS,EAAE,EAAE,CACjC,oDAAoD,SAAS,EAAE;QACjE,eAAe,EAAE,2CAA2C;KAC7D;IACD,EAAE,EAAE;QACF,QAAQ,EAAE,iBAAiB;QAC3B,KAAK,EAAE,kBAAkB;QACzB,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,kBAAkB;QAC1B,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI;QACpC,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE;YACN;gBACE,MAAM,EAAE,mBAAmB;gBAC3B,QAAQ,EAAE,kBAAkB;gBAC5B,OAAO,EAAE,kBAAkB;aAC5B;YACD;gBACE,MAAM,EAAE,WAAW;gBACnB,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,UAAU;aACpB;YACD;gBACE,MAAM,EAAE,WAAW;gBACnB,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,UAAU;aACpB;SACF;QACD,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,EAAE;QAClD,KAAK,EACH,uJAAuJ;QACzJ,gBAAgB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,QAAQ,EAAE;QACxD,iBAAiB,EAAE,wCAAwC;QAC3D,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,IAAI,EAAE;QACnD,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,IAAI,EAAE;QAC9C,gBAAgB,EAAE,sBAAsB;QACxC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;QAC3C,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,IAAI,IAAI,OAAO,EAAE;QAClE,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,IAAI,OAAO,OAAO,EAAE;QAC9D,kBAAkB,EAAE,8BAA8B;QAClD,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,sBAAsB,IAAI,GAAG;QACvE,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,IAAI,EAAE;QAC3D,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,IAAI,sBAAsB;QAC3E,mBAAmB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,gCAAgC,SAAS,EAAE;QAC/E,eAAe,EAAE,iCAAiC;KACnD;CACF,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,IAAuB;IAIxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,OAAO;QACL,QAAQ;QACR,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAqB;IAC9C,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { mkdir, readFile, readdir, rm, stat, writeFile } from "node:fs/promises";
|
|
3
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
4
|
+
import { compileSvgSymbol, generateSymbolSvgFiles, parseCompilerConfigInput, resolveCompilerConfig } from "@claralight-design/symbol-kit-compiler";
|
|
5
|
+
import { createCompiledSymbol, parseSymbolWeight } from "@claralight-design/symbol-kit-core";
|
|
6
|
+
import { getCliText, resolveCliLanguage } from "./i18n.js";
|
|
7
|
+
import { BuildStage, createBuildReporter } from "./reporter.js";
|
|
8
|
+
const WEIGHT_NAMES = new Map([
|
|
9
|
+
["ultralight", "ultralight"],
|
|
10
|
+
["thin", "thin"],
|
|
11
|
+
["light", "light"],
|
|
12
|
+
["regular", "regular"],
|
|
13
|
+
["medium", "medium"]
|
|
14
|
+
]);
|
|
15
|
+
const cliInput = resolveCliLanguage(process.argv.slice(2));
|
|
16
|
+
const text = getCliText(cliInput.language);
|
|
17
|
+
const reporter = createBuildReporter(cliInput.language);
|
|
18
|
+
async function main() {
|
|
19
|
+
const [command, ...args] = cliInput.args;
|
|
20
|
+
if (command !== "build") {
|
|
21
|
+
throw new Error(text.usage);
|
|
22
|
+
}
|
|
23
|
+
const options = parseOptions(args);
|
|
24
|
+
reporter.start();
|
|
25
|
+
const { outDir, isDirectoryInput, sources, config, targetWeights, accentOpacity } = await reporter.runStep(BuildStage.input, async () => {
|
|
26
|
+
const inputPath = resolve(options.input);
|
|
27
|
+
const outDir = resolve(options.outDir);
|
|
28
|
+
const inputStats = await stat(inputPath);
|
|
29
|
+
const isDirectoryInput = inputStats.isDirectory();
|
|
30
|
+
const [sources, config] = await Promise.all([
|
|
31
|
+
readSvgSources(inputPath, options.name),
|
|
32
|
+
loadCompilerConfig(resolve(options.widthTokens), resolve(options.styleTokens), options.config === undefined ? undefined : resolve(options.config))
|
|
33
|
+
]);
|
|
34
|
+
const targetWeights = Object.keys(config.weights ?? {}).map(parseSymbolWeight);
|
|
35
|
+
const accentOpacity = resolveCompilerConfig({ project: config }).rendering.duotoneFillOpacity;
|
|
36
|
+
return {
|
|
37
|
+
outDir,
|
|
38
|
+
isDirectoryInput,
|
|
39
|
+
sources,
|
|
40
|
+
config,
|
|
41
|
+
targetWeights,
|
|
42
|
+
accentOpacity
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
const builds = await reporter.runStep(BuildStage.compile, async () => {
|
|
46
|
+
const builds = [];
|
|
47
|
+
for (const [index, source] of sources.entries()) {
|
|
48
|
+
reporter.update(index + 1, sources.length);
|
|
49
|
+
const compiled = compileSvgSymbol({
|
|
50
|
+
name: source.name,
|
|
51
|
+
svg: source.svg,
|
|
52
|
+
config,
|
|
53
|
+
targetWeights
|
|
54
|
+
});
|
|
55
|
+
const files = compiled.symbol === undefined
|
|
56
|
+
? []
|
|
57
|
+
: generateSymbolSvgFiles(compiled.symbol, { accentOpacity });
|
|
58
|
+
builds.push({ source, compiled, files });
|
|
59
|
+
await yieldToEventLoop();
|
|
60
|
+
}
|
|
61
|
+
const failures = builds.flatMap(({ source, compiled }) => compiled.diagnostics
|
|
62
|
+
.filter((diagnostic) => diagnostic.severity === "error")
|
|
63
|
+
.map((diagnostic) => `${source.name}: ${diagnostic.code}: ${diagnostic.message}`));
|
|
64
|
+
if (failures.length > 0) {
|
|
65
|
+
throw new Error(text.generationFailed(failures.join("\n")));
|
|
66
|
+
}
|
|
67
|
+
return builds;
|
|
68
|
+
});
|
|
69
|
+
await reporter.runStep(BuildStage.output, async () => {
|
|
70
|
+
await Promise.all(builds.map(async ({ source, compiled, files }) => {
|
|
71
|
+
const symbolOutDir = isDirectoryInput ? join(outDir, source.name) : outDir;
|
|
72
|
+
await rm(symbolOutDir, { recursive: true, force: true });
|
|
73
|
+
if (compiled.symbol === undefined) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const compiledSymbol = createCompiledSymbol(compiled.symbol);
|
|
77
|
+
await Promise.all(files.map(async (file) => {
|
|
78
|
+
const outputPath = join(symbolOutDir, file.fileName);
|
|
79
|
+
await mkdir(dirname(outputPath), { recursive: true });
|
|
80
|
+
await writeFile(outputPath, `${file.svg}\n`, "utf8");
|
|
81
|
+
}));
|
|
82
|
+
await Promise.all([
|
|
83
|
+
writeCompiledSymbol(symbolOutDir, compiledSymbol),
|
|
84
|
+
writeManifest(symbolOutDir, source, files, `${source.name}.symbol.json`)
|
|
85
|
+
]);
|
|
86
|
+
}));
|
|
87
|
+
if (isDirectoryInput) {
|
|
88
|
+
await mkdir(outDir, { recursive: true });
|
|
89
|
+
await writeFile(join(outDir, "manifest.json"), `${JSON.stringify({
|
|
90
|
+
symbols: builds.flatMap(({ source, compiled, files }) => compiled.symbol === undefined
|
|
91
|
+
? []
|
|
92
|
+
: [
|
|
93
|
+
{
|
|
94
|
+
name: source.name,
|
|
95
|
+
source: source.path,
|
|
96
|
+
variants: files.length,
|
|
97
|
+
directory: source.name,
|
|
98
|
+
symbol: `${source.name}/${source.name}.symbol.json`
|
|
99
|
+
}
|
|
100
|
+
])
|
|
101
|
+
}, null, 2)}\n`, "utf8");
|
|
102
|
+
}
|
|
103
|
+
if (options.flutterAssetsDir !== undefined) {
|
|
104
|
+
const flutterAssetsDir = resolve(options.flutterAssetsDir);
|
|
105
|
+
if (flutterAssetsDir === outDir) {
|
|
106
|
+
throw new Error(text.sameFlutterOutput);
|
|
107
|
+
}
|
|
108
|
+
const compiledSymbols = builds.flatMap(({ compiled }) => compiled.symbol === undefined ? [] : [createCompiledSymbol(compiled.symbol)]);
|
|
109
|
+
await writeFlutterAssets(flutterAssetsDir, compiledSymbols);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
const fileCount = builds.reduce((total, build) => total + build.files.length, 0);
|
|
113
|
+
const symbolCount = builds.filter(({ compiled }) => compiled.symbol !== undefined).length;
|
|
114
|
+
const skippedCount = builds.length - symbolCount;
|
|
115
|
+
reporter.finish({ symbolCount, svgCount: fileCount, skippedCount, outDir });
|
|
116
|
+
}
|
|
117
|
+
async function readSvgSources(inputPath, name) {
|
|
118
|
+
const inputStats = await stat(inputPath);
|
|
119
|
+
if (inputStats.isFile()) {
|
|
120
|
+
return [
|
|
121
|
+
{
|
|
122
|
+
name: name ?? basename(inputPath, ".svg"),
|
|
123
|
+
path: inputPath,
|
|
124
|
+
svg: await readFile(inputPath, "utf8")
|
|
125
|
+
}
|
|
126
|
+
];
|
|
127
|
+
}
|
|
128
|
+
if (!inputStats.isDirectory()) {
|
|
129
|
+
throw new Error(text.invalidInput(inputPath));
|
|
130
|
+
}
|
|
131
|
+
const entries = (await readdir(inputPath, { withFileTypes: true }))
|
|
132
|
+
.filter((entry) => entry.isFile() && entry.name.endsWith(".svg"))
|
|
133
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
134
|
+
if (entries.length === 0) {
|
|
135
|
+
throw new Error(text.emptyInput(inputPath));
|
|
136
|
+
}
|
|
137
|
+
return Promise.all(entries.map(async (entry) => {
|
|
138
|
+
const path = join(inputPath, entry.name);
|
|
139
|
+
return {
|
|
140
|
+
name: basename(entry.name, ".svg"),
|
|
141
|
+
path,
|
|
142
|
+
svg: await readFile(path, "utf8")
|
|
143
|
+
};
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
async function writeManifest(outDir, source, files, symbolFile) {
|
|
147
|
+
const manifest = {
|
|
148
|
+
name: source.name,
|
|
149
|
+
source: source.path,
|
|
150
|
+
symbol: symbolFile,
|
|
151
|
+
variants: files.map(({ weight, style, fileName }) => ({
|
|
152
|
+
weight,
|
|
153
|
+
style,
|
|
154
|
+
file: fileName
|
|
155
|
+
}))
|
|
156
|
+
};
|
|
157
|
+
await mkdir(outDir, { recursive: true });
|
|
158
|
+
await writeFile(join(outDir, "manifest.json"), `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
|
|
159
|
+
}
|
|
160
|
+
async function writeCompiledSymbol(outDir, symbol) {
|
|
161
|
+
await mkdir(outDir, { recursive: true });
|
|
162
|
+
await writeFile(join(outDir, `${symbol.name}.symbol.json`), `${JSON.stringify(symbol, null, 2)}\n`, "utf8");
|
|
163
|
+
}
|
|
164
|
+
function parseOptions(args) {
|
|
165
|
+
const values = new Map();
|
|
166
|
+
for (let index = 0; index < args.length; index += 2) {
|
|
167
|
+
const flag = args[index];
|
|
168
|
+
const value = args[index + 1];
|
|
169
|
+
if (flag === undefined || !flag.startsWith("--") || value === undefined) {
|
|
170
|
+
throw new Error(text.invalidArguments);
|
|
171
|
+
}
|
|
172
|
+
values.set(flag.slice(2), value);
|
|
173
|
+
}
|
|
174
|
+
const name = values.get("name");
|
|
175
|
+
const flutterAssetsDir = values.get("flutter-assets-dir");
|
|
176
|
+
const config = values.get("config");
|
|
177
|
+
return {
|
|
178
|
+
input: requireOption(values, "input"),
|
|
179
|
+
widthTokens: requireOption(values, "width-tokens"),
|
|
180
|
+
styleTokens: requireOption(values, "style-tokens"),
|
|
181
|
+
outDir: requireOption(values, "out-dir"),
|
|
182
|
+
...(name === undefined ? {} : { name }),
|
|
183
|
+
...(flutterAssetsDir === undefined ? {} : { flutterAssetsDir }),
|
|
184
|
+
...(config === undefined ? {} : { config })
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
async function writeFlutterAssets(assetsDir, symbols) {
|
|
188
|
+
await rm(assetsDir, { recursive: true, force: true });
|
|
189
|
+
await mkdir(assetsDir, { recursive: true });
|
|
190
|
+
await Promise.all(symbols.map((symbol) => writeFile(join(assetsDir, `${symbol.name}.symbol.json`), `${JSON.stringify(symbol, null, 2)}\n`, "utf8")));
|
|
191
|
+
const catalog = {
|
|
192
|
+
format: "claralight-symbol-catalog",
|
|
193
|
+
version: 1,
|
|
194
|
+
symbols: Object.fromEntries([...symbols]
|
|
195
|
+
.sort((left, right) => left.name.localeCompare(right.name))
|
|
196
|
+
.map((symbol) => [symbol.name, `${symbol.name}.symbol.json`]))
|
|
197
|
+
};
|
|
198
|
+
await writeFile(join(assetsDir, "catalog.symbols.json"), `${JSON.stringify(catalog, null, 2)}\n`, "utf8");
|
|
199
|
+
}
|
|
200
|
+
function requireOption(values, name) {
|
|
201
|
+
const value = values.get(name);
|
|
202
|
+
if (value === undefined || value.length === 0) {
|
|
203
|
+
throw new Error(text.missingOption(name));
|
|
204
|
+
}
|
|
205
|
+
return value;
|
|
206
|
+
}
|
|
207
|
+
async function loadCompilerConfig(widthTokensDirectory, styleTokensDirectory, configPath) {
|
|
208
|
+
const [weights, styleFiles, projectConfig] = await Promise.all([
|
|
209
|
+
loadWeightProfiles(widthTokensDirectory),
|
|
210
|
+
readTokenFiles(styleTokensDirectory),
|
|
211
|
+
configPath === undefined ? undefined : readProjectConfig(configPath)
|
|
212
|
+
]);
|
|
213
|
+
const styles = loadStyleProfiles(styleFiles);
|
|
214
|
+
const foreground = unique(Object.values(styles).map((profile) => profile.color));
|
|
215
|
+
const background = unique(Object.values(styles).map((profile) => profile.reverse)).filter((color) => !foreground.some((foregroundColor) => sameColor(color, foregroundColor)));
|
|
216
|
+
const modes = resolveOutputModes(styles);
|
|
217
|
+
const tokenConfig = {
|
|
218
|
+
colors: { foreground, background },
|
|
219
|
+
styles,
|
|
220
|
+
weights,
|
|
221
|
+
modes
|
|
222
|
+
};
|
|
223
|
+
return resolveCompilerConfig({
|
|
224
|
+
global: tokenConfig,
|
|
225
|
+
...(projectConfig === undefined ? {} : { project: projectConfig })
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
async function readProjectConfig(path) {
|
|
229
|
+
let value;
|
|
230
|
+
try {
|
|
231
|
+
value = JSON.parse(await readFile(path, "utf8"));
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
throw new Error(text.configReadFailed(path, error instanceof Error ? error.message : String(error)));
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
return parseCompilerConfigInput(value);
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
throw new Error(text.invalidConfig(path, error instanceof Error ? error.message : String(error)));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function loadStyleProfiles(files) {
|
|
244
|
+
const profiles = {};
|
|
245
|
+
for (const tokens of files) {
|
|
246
|
+
const name = normalizeModeName(readModeName(tokens));
|
|
247
|
+
profiles[name] = {
|
|
248
|
+
color: readColor(tokens, "Color"),
|
|
249
|
+
reverse: readColor(tokens, "Reverse"),
|
|
250
|
+
lineOpacity: readPercentage(tokens, "Line Opacity"),
|
|
251
|
+
duotoneLineOpacity: readPercentage(tokens, "Duotone Line Opacity"),
|
|
252
|
+
noFillLineOpacity: readPercentage(tokens, "NoFill Line Opacity"),
|
|
253
|
+
noDuotoneLineOpacity: readPercentage(tokens, "NoDuo Line Opacity"),
|
|
254
|
+
onlyFillLineOpacity: readPercentage(tokens, "OnlyFill Line Opacity"),
|
|
255
|
+
onlyDuotoneLineOpacity: readPercentage(tokens, "OnlyDuo Line Opacity"),
|
|
256
|
+
backgroundOpacity: readPercentage(tokens, "BG Opacity"),
|
|
257
|
+
noFillBackgroundOpacity: readPercentage(tokens, "NoFill BG Opacity"),
|
|
258
|
+
noDuotoneBackgroundOpacity: readPercentage(tokens, "NoDuo BG Opacity")
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
if (profiles["normal"] === undefined) {
|
|
262
|
+
throw new Error(text.missingNormalStyle);
|
|
263
|
+
}
|
|
264
|
+
return profiles;
|
|
265
|
+
}
|
|
266
|
+
function resolveOutputModes(styles) {
|
|
267
|
+
const modes = ["outline"];
|
|
268
|
+
if (styles["fill"] !== undefined) {
|
|
269
|
+
modes.push("fill");
|
|
270
|
+
}
|
|
271
|
+
if (styles["duotone"] !== undefined) {
|
|
272
|
+
modes.push("duotone");
|
|
273
|
+
}
|
|
274
|
+
return modes;
|
|
275
|
+
}
|
|
276
|
+
function readColor(tokens, name) {
|
|
277
|
+
const value = tokens.Fill?.[name]?.$value?.hex;
|
|
278
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
279
|
+
throw new Error(text.invalidStyleToken(readModeName(tokens), name));
|
|
280
|
+
}
|
|
281
|
+
return value;
|
|
282
|
+
}
|
|
283
|
+
function readPercentage(tokens, name) {
|
|
284
|
+
const value = tokens.Fill?.[name]?.$value;
|
|
285
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0 || value > 100) {
|
|
286
|
+
throw new Error(text.invalidStyleToken(readModeName(tokens), name));
|
|
287
|
+
}
|
|
288
|
+
return value / 100;
|
|
289
|
+
}
|
|
290
|
+
function unique(values) {
|
|
291
|
+
return [...new Set(values)];
|
|
292
|
+
}
|
|
293
|
+
function sameColor(left, right) {
|
|
294
|
+
return left.trim().toLowerCase() === right.trim().toLowerCase();
|
|
295
|
+
}
|
|
296
|
+
async function loadWeightProfiles(directory) {
|
|
297
|
+
const files = await readTokenFiles(directory);
|
|
298
|
+
const profiles = {};
|
|
299
|
+
for (const tokens of files) {
|
|
300
|
+
const modeName = normalizeModeName(readModeName(tokens));
|
|
301
|
+
const weight = WEIGHT_NAMES.get(modeName);
|
|
302
|
+
const strokeWidth = tokens.Width?.["Stroke Width"]?.$value;
|
|
303
|
+
if (weight === undefined) {
|
|
304
|
+
throw new Error(text.unknownWeightMode(readModeName(tokens)));
|
|
305
|
+
}
|
|
306
|
+
if (typeof strokeWidth !== "number" || !Number.isFinite(strokeWidth) || strokeWidth <= 0) {
|
|
307
|
+
throw new Error(text.invalidStrokeWidth(readModeName(tokens)));
|
|
308
|
+
}
|
|
309
|
+
profiles[weight] = { strokeWidth };
|
|
310
|
+
}
|
|
311
|
+
return profiles;
|
|
312
|
+
}
|
|
313
|
+
async function readTokenFiles(directory) {
|
|
314
|
+
const entries = (await readdir(directory, { withFileTypes: true }))
|
|
315
|
+
.filter((entry) => entry.isFile() && entry.name.endsWith(".tokens.json"))
|
|
316
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
317
|
+
if (entries.length === 0) {
|
|
318
|
+
throw new Error(text.emptyTokenDirectory(directory));
|
|
319
|
+
}
|
|
320
|
+
return Promise.all(entries.map(async (entry) => JSON.parse(await readFile(join(directory, entry.name), "utf8"))));
|
|
321
|
+
}
|
|
322
|
+
function readModeName(tokens) {
|
|
323
|
+
const modeName = tokens.$extensions?.["com.figma.modeName"];
|
|
324
|
+
if (typeof modeName !== "string" || modeName.length === 0) {
|
|
325
|
+
throw new Error(text.missingModeName);
|
|
326
|
+
}
|
|
327
|
+
return modeName;
|
|
328
|
+
}
|
|
329
|
+
function normalizeModeName(value) {
|
|
330
|
+
return value.replaceAll(/[^a-z]/giu, "").toLowerCase();
|
|
331
|
+
}
|
|
332
|
+
function yieldToEventLoop() {
|
|
333
|
+
return new Promise((resolvePromise) => {
|
|
334
|
+
setImmediate(resolvePromise);
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
function abort(exitCode) {
|
|
338
|
+
reporter.cancel();
|
|
339
|
+
process.exit(exitCode);
|
|
340
|
+
}
|
|
341
|
+
process.once("SIGINT", () => {
|
|
342
|
+
abort(130);
|
|
343
|
+
});
|
|
344
|
+
process.once("SIGTERM", () => {
|
|
345
|
+
abort(143);
|
|
346
|
+
});
|
|
347
|
+
main().catch((error) => {
|
|
348
|
+
reporter.fail(error);
|
|
349
|
+
process.exitCode = 1;
|
|
350
|
+
});
|
|
351
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type CliLanguage } from "./i18n.js";
|
|
2
|
+
export declare const BuildStage: {
|
|
3
|
+
readonly input: 0;
|
|
4
|
+
readonly compile: 1;
|
|
5
|
+
readonly output: 2;
|
|
6
|
+
};
|
|
7
|
+
export interface BuildSummary {
|
|
8
|
+
readonly symbolCount: number;
|
|
9
|
+
readonly svgCount: number;
|
|
10
|
+
readonly skippedCount: number;
|
|
11
|
+
readonly outDir: string;
|
|
12
|
+
}
|
|
13
|
+
export interface BuildReporter {
|
|
14
|
+
readonly start: () => void;
|
|
15
|
+
readonly runStep: <T>(index: number, action: () => Promise<T> | T) => Promise<T>;
|
|
16
|
+
readonly update: (current: number, total: number) => void;
|
|
17
|
+
readonly finish: (summary: BuildSummary) => void;
|
|
18
|
+
readonly fail: (error: unknown) => void;
|
|
19
|
+
readonly cancel: () => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function createBuildReporter(language: CliLanguage): BuildReporter;
|
|
22
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,WAAW,EAAgB,MAAM,WAAW,CAAC;AA4BvE,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AAEX,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACjF,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,GAAG,aAAa,CAyExE"}
|
package/dist/reporter.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { clearScreenDown, cursorTo, moveCursor } from "node:readline";
|
|
2
|
+
import { color, label } from "@astrojs/cli-kit";
|
|
3
|
+
import { getCliText } from "./i18n.js";
|
|
4
|
+
const BRAND = "Claralight";
|
|
5
|
+
const ANIMATION_COLORS = [
|
|
6
|
+
"#3640FC",
|
|
7
|
+
"#2387F1",
|
|
8
|
+
"#3DA9A3",
|
|
9
|
+
"#47DA93",
|
|
10
|
+
"#883AE3",
|
|
11
|
+
"#5711F8",
|
|
12
|
+
"#6B22EF",
|
|
13
|
+
"#7B30E7"
|
|
14
|
+
];
|
|
15
|
+
const PROGRESS_WIDTH = BRAND.length + 2;
|
|
16
|
+
const BUILD_STAGE_COUNT = 3;
|
|
17
|
+
const STAGE_VIEWPORT_SIZE = BUILD_STAGE_COUNT * 2 - 1;
|
|
18
|
+
const ACTIVE_STAGE_ROW = BUILD_STAGE_COUNT - 1;
|
|
19
|
+
const PROGRESS_LINE_COUNT = STAGE_VIEWPORT_SIZE + 3;
|
|
20
|
+
const MINIMUM_ANIMATED_STAGE_DURATION = 160;
|
|
21
|
+
export const BuildStage = {
|
|
22
|
+
input: 0,
|
|
23
|
+
compile: 1,
|
|
24
|
+
output: 2
|
|
25
|
+
};
|
|
26
|
+
export function createBuildReporter(language) {
|
|
27
|
+
const text = getCliText(language);
|
|
28
|
+
const startedAt = Date.now();
|
|
29
|
+
let activeProgress;
|
|
30
|
+
function log(message = "") {
|
|
31
|
+
process.stdout.write(`${message}\n`);
|
|
32
|
+
}
|
|
33
|
+
function clear() {
|
|
34
|
+
activeProgress?.clear();
|
|
35
|
+
activeProgress = undefined;
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
start() {
|
|
39
|
+
if (canAnimate()) {
|
|
40
|
+
activeProgress = createAnimatedProgress(() => {
|
|
41
|
+
activeProgress = undefined;
|
|
42
|
+
}, text);
|
|
43
|
+
activeProgress.start();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
log(`\n${label(BRAND, color.bgGreen, color.black)} ${color.bold(text.building)}\n`);
|
|
47
|
+
},
|
|
48
|
+
async runStep(index, action) {
|
|
49
|
+
const stage = requireBuildStage(index, text);
|
|
50
|
+
if (activeProgress === undefined) {
|
|
51
|
+
log(`${" ".repeat(5)} ${color.cyan("●")} ${stage.active}`);
|
|
52
|
+
const result = await action();
|
|
53
|
+
log(`${" ".repeat(5)} ${color.green("✔")} ${color.green(stage.complete)}`);
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
const progress = activeProgress;
|
|
57
|
+
progress.setActive(index);
|
|
58
|
+
const result = await action();
|
|
59
|
+
await wait(MINIMUM_ANIMATED_STAGE_DURATION);
|
|
60
|
+
progress.complete(index);
|
|
61
|
+
return result;
|
|
62
|
+
},
|
|
63
|
+
update(current, total) {
|
|
64
|
+
activeProgress?.update(current, total);
|
|
65
|
+
},
|
|
66
|
+
finish(summary) {
|
|
67
|
+
clear();
|
|
68
|
+
const duration = ((Date.now() - startedAt) / 1000).toFixed(1);
|
|
69
|
+
log(`\n${label(BRAND, color.bgGreen, color.black)} ${color.bold(text.built)}\n`);
|
|
70
|
+
log(`${" ".repeat(5)} ${color.green("✔")} ${color.green(text.completed)} ${color.dim(text.duration(duration))}`);
|
|
71
|
+
log(`${" ".repeat(9)}${color.dim(text.icons)} ${String(summary.symbolCount)}`);
|
|
72
|
+
log(`${" ".repeat(9)}${color.dim("SVG")} ${String(summary.svgCount)}`);
|
|
73
|
+
log(`${" ".repeat(9)}${color.dim("Symbol JSON")} ${String(summary.symbolCount)}`);
|
|
74
|
+
if (summary.skippedCount > 0) {
|
|
75
|
+
log(`${" ".repeat(9)}${color.dim(text.skipped)} ${String(summary.skippedCount)}`);
|
|
76
|
+
}
|
|
77
|
+
log(`${" ".repeat(9)}${color.dim(text.output)} ${summary.outDir}\n`);
|
|
78
|
+
},
|
|
79
|
+
fail(error) {
|
|
80
|
+
clear();
|
|
81
|
+
const message = readErrorMessage(error).replaceAll("\n", `\n${" ".repeat(9)}`);
|
|
82
|
+
process.stderr.write(`\n${label(BRAND, color.bgRed)} ${color.bold(text.failed)}\n\n${" ".repeat(5)} ${color.red("▲")} ${color.red(text.error)} ${color.dim(message)}\n\n`);
|
|
83
|
+
},
|
|
84
|
+
cancel() {
|
|
85
|
+
clear();
|
|
86
|
+
process.stderr.write(`\n${label(BRAND, color.bgYellow, color.black)} ${color.bold(text.cancelled)}\n\n`);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function canAnimate() {
|
|
91
|
+
return process.stdin.isTTY && process.stdout.isTTY && process.stdout.columns >= 48;
|
|
92
|
+
}
|
|
93
|
+
function createAnimatedProgress(onClear, text) {
|
|
94
|
+
let activeStage = 0;
|
|
95
|
+
let stageComplete = false;
|
|
96
|
+
let stageProgress;
|
|
97
|
+
let frame = 0;
|
|
98
|
+
let rendered = false;
|
|
99
|
+
let timer;
|
|
100
|
+
function gradientRow() {
|
|
101
|
+
return Array.from({ length: PROGRESS_WIDTH }, (_, column) => {
|
|
102
|
+
const colorIndex = (column + frame) % ANIMATION_COLORS.length;
|
|
103
|
+
const value = ANIMATION_COLORS[colorIndex];
|
|
104
|
+
return value === undefined ? "█" : color.hex(value)("█");
|
|
105
|
+
}).join("");
|
|
106
|
+
}
|
|
107
|
+
function stageMessage(index) {
|
|
108
|
+
const stage = requireBuildStage(index, text);
|
|
109
|
+
if (index < activeStage || (index === activeStage && stageComplete)) {
|
|
110
|
+
return color.green(`✔ ${stage.complete}`);
|
|
111
|
+
}
|
|
112
|
+
if (index === activeStage) {
|
|
113
|
+
const progress = stageProgress === undefined
|
|
114
|
+
? ""
|
|
115
|
+
: ` (${String(stageProgress.current)}/${String(stageProgress.total)})`;
|
|
116
|
+
return color.cyan(`▶ ${stage.active}${progress}`);
|
|
117
|
+
}
|
|
118
|
+
return color.dim(`□ ${stage.pending}`);
|
|
119
|
+
}
|
|
120
|
+
function stageRow(row) {
|
|
121
|
+
const stageIndex = activeStage + row - ACTIVE_STAGE_ROW;
|
|
122
|
+
const progress = row === ACTIVE_STAGE_ROW ? gradientRow() : " ".repeat(PROGRESS_WIDTH);
|
|
123
|
+
const message = stageIndex >= 0 && stageIndex < text.stages.length ? stageMessage(stageIndex) : "";
|
|
124
|
+
return `${progress} ${message}`;
|
|
125
|
+
}
|
|
126
|
+
function erase() {
|
|
127
|
+
if (!rendered) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
moveCursor(process.stdout, 0, -PROGRESS_LINE_COUNT);
|
|
131
|
+
cursorTo(process.stdout, 0);
|
|
132
|
+
clearScreenDown(process.stdout);
|
|
133
|
+
rendered = false;
|
|
134
|
+
}
|
|
135
|
+
function render() {
|
|
136
|
+
erase();
|
|
137
|
+
const lines = [
|
|
138
|
+
"",
|
|
139
|
+
`${label(BRAND, color.bgGreen, color.black)} ${color.bold(text.building)}`,
|
|
140
|
+
"",
|
|
141
|
+
...Array.from({ length: STAGE_VIEWPORT_SIZE }, (_, row) => stageRow(row))
|
|
142
|
+
];
|
|
143
|
+
process.stdout.write(`${lines.join("\n")}\n`);
|
|
144
|
+
rendered = true;
|
|
145
|
+
frame = (frame + 1) % ANIMATION_COLORS.length;
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
start() {
|
|
149
|
+
process.stdout.write("\u001B[?25l");
|
|
150
|
+
render();
|
|
151
|
+
timer = setInterval(render, 80);
|
|
152
|
+
},
|
|
153
|
+
setActive(index) {
|
|
154
|
+
requireBuildStage(index, text);
|
|
155
|
+
activeStage = index;
|
|
156
|
+
stageComplete = false;
|
|
157
|
+
stageProgress = undefined;
|
|
158
|
+
render();
|
|
159
|
+
},
|
|
160
|
+
update(current, total) {
|
|
161
|
+
stageProgress = { current, total };
|
|
162
|
+
render();
|
|
163
|
+
},
|
|
164
|
+
complete(index) {
|
|
165
|
+
requireBuildStage(index, text);
|
|
166
|
+
activeStage = index;
|
|
167
|
+
stageComplete = true;
|
|
168
|
+
stageProgress = undefined;
|
|
169
|
+
render();
|
|
170
|
+
},
|
|
171
|
+
clear() {
|
|
172
|
+
if (timer !== undefined) {
|
|
173
|
+
clearInterval(timer);
|
|
174
|
+
}
|
|
175
|
+
erase();
|
|
176
|
+
process.stdout.write("\u001B[?25h");
|
|
177
|
+
onClear();
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function requireBuildStage(index, text) {
|
|
182
|
+
const stage = text.stages[index];
|
|
183
|
+
if (stage === undefined) {
|
|
184
|
+
throw new Error(text.unknownStage(index));
|
|
185
|
+
}
|
|
186
|
+
return stage;
|
|
187
|
+
}
|
|
188
|
+
function readErrorMessage(error) {
|
|
189
|
+
return error instanceof Error ? error.message : String(error);
|
|
190
|
+
}
|
|
191
|
+
function wait(duration) {
|
|
192
|
+
return new Promise((resolvePromise) => {
|
|
193
|
+
setTimeout(resolvePromise, duration);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@claralight-design/symbol-kit-cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Command-line SVG and Design Token compiler for Claralight Symbol Kit.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "AstralSight Studios",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/AstralSightStudios/claralight-design-symbol-kit.git",
|
|
11
|
+
"directory": "packages/cli"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/AstralSightStudios/claralight-design-symbol-kit#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/AstralSightStudios/claralight-design-symbol-kit/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"icons",
|
|
19
|
+
"svg",
|
|
20
|
+
"compiler",
|
|
21
|
+
"design-system",
|
|
22
|
+
"cli"
|
|
23
|
+
],
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=22.0.0"
|
|
26
|
+
},
|
|
27
|
+
"bin": {
|
|
28
|
+
"clsk-cli": "./dist/index.js",
|
|
29
|
+
"clsymbol-kit-cli": "./dist/index.js",
|
|
30
|
+
"symbol-kit": "./dist/index.js"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist"
|
|
34
|
+
],
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@astrojs/cli-kit": "^0.4.1",
|
|
40
|
+
"@claralight-design/symbol-kit-compiler": "0.1.0",
|
|
41
|
+
"@claralight-design/symbol-kit-core": "0.1.0"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsc -b",
|
|
45
|
+
"test": "vitest run",
|
|
46
|
+
"lint": "eslint ."
|
|
47
|
+
}
|
|
48
|
+
}
|