@stilhq/core 0.2.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 +35 -0
- package/README.md +32 -0
- package/dist/adapters/figma.d.ts +12 -0
- package/dist/adapters/figma.d.ts.map +1 -0
- package/dist/adapters/figma.js +27 -0
- package/dist/adapters/figma.js.map +1 -0
- package/dist/core/build.d.ts +20 -0
- package/dist/core/build.d.ts.map +1 -0
- package/dist/core/build.js +229 -0
- package/dist/core/build.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +15 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/normalize.d.ts +32 -0
- package/dist/core/normalize.d.ts.map +1 -0
- package/dist/core/normalize.js +337 -0
- package/dist/core/normalize.js.map +1 -0
- package/dist/core/schema.d.ts +64 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +4 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/validate.d.ts +23 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +141 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
Business Source License 1.1
|
|
2
|
+
|
|
3
|
+
Licensor: Tetsu / techang
|
|
4
|
+
|
|
5
|
+
Licensed Work: @stilhq/core
|
|
6
|
+
The Licensed Work is (c) 2026 Tetsu / techang.
|
|
7
|
+
|
|
8
|
+
Additional Use Grant:
|
|
9
|
+
You may use the Licensed Work for internal, non-commercial purposes
|
|
10
|
+
within your organization. Production use in commercial products or
|
|
11
|
+
services offered to third parties requires a separate commercial
|
|
12
|
+
license from the Licensor.
|
|
13
|
+
|
|
14
|
+
Change Date: 2030-02-06
|
|
15
|
+
|
|
16
|
+
Change License: MIT
|
|
17
|
+
|
|
18
|
+
Notice
|
|
19
|
+
|
|
20
|
+
The Business Source License (this document, or the "License") is not
|
|
21
|
+
an Open Source license. However, the Licensed Work will eventually be
|
|
22
|
+
made available under an Open Source License, as stated in this License.
|
|
23
|
+
|
|
24
|
+
For more information on the Business Source License, please visit:
|
|
25
|
+
https://mariadb.com/bsl11/
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
Parameters
|
|
30
|
+
|
|
31
|
+
Licensor: Tetsu / techang
|
|
32
|
+
Licensed Work: @stilhq/core 0.2.0
|
|
33
|
+
Additional Use Grant: Internal non-commercial use
|
|
34
|
+
Change Date: 2030-02-06
|
|
35
|
+
Change License: MIT
|
package/README.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# @stilhq/core
|
|
2
|
+
|
|
3
|
+
Design token pipeline for Stil. Normalize, validate, and build design tokens from Figma Variables.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @stilhq/core
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { buildThemeTokens, normalizeFromFigmaSemantics, validateMapping } from "@stilhq/core";
|
|
15
|
+
|
|
16
|
+
// Normalize raw Figma Variables
|
|
17
|
+
const rawTree = normalizeFromFigmaSemantics(figmaVariablesJson);
|
|
18
|
+
|
|
19
|
+
// Validate mapping
|
|
20
|
+
const result = validateMapping(mapping, rawTree);
|
|
21
|
+
|
|
22
|
+
// Build theme tokens
|
|
23
|
+
const tokens = buildThemeTokens(rawTree, mapping);
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Status
|
|
27
|
+
|
|
28
|
+
0.x — API is not yet stable. Breaking changes may occur in minor versions.
|
|
29
|
+
|
|
30
|
+
## License
|
|
31
|
+
|
|
32
|
+
BUSL-1.1 — See [LICENSE](./LICENSE) for details.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FigmaSemanticsJson } from "../core/schema";
|
|
2
|
+
/**
|
|
3
|
+
* Figma Variables の JSON をロードして返す
|
|
4
|
+
* 実際のプロジェクトでは、Figma API から取得したり、ファイルから読み込んだりする
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadFigmaVariables(filePath: string): FigmaSemanticsJson;
|
|
7
|
+
/**
|
|
8
|
+
* Figma Variables の JSON を検証
|
|
9
|
+
* semantics フィールドが存在するかチェック
|
|
10
|
+
*/
|
|
11
|
+
export declare function validateFigmaVariables(variables: FigmaSemanticsJson): boolean;
|
|
12
|
+
//# sourceMappingURL=figma.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma.d.ts","sourceRoot":"","sources":["../../src/adapters/figma.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAMvE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAOT"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// adapters/figma.ts - Figma Variables adapter
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.loadFigmaVariables = loadFigmaVariables;
|
|
5
|
+
exports.validateFigmaVariables = validateFigmaVariables;
|
|
6
|
+
/**
|
|
7
|
+
* Figma Variables の JSON をロードして返す
|
|
8
|
+
* 実際のプロジェクトでは、Figma API から取得したり、ファイルから読み込んだりする
|
|
9
|
+
*/
|
|
10
|
+
function loadFigmaVariables(filePath) {
|
|
11
|
+
// v0: Node.js の fs を使って読み込む想定
|
|
12
|
+
// ブラウザ環境の場合は fetch などを使う
|
|
13
|
+
const fs = require("fs");
|
|
14
|
+
const raw = fs.readFileSync(filePath, "utf8");
|
|
15
|
+
return JSON.parse(raw);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Figma Variables の JSON を検証
|
|
19
|
+
* semantics フィールドが存在するかチェック
|
|
20
|
+
*/
|
|
21
|
+
function validateFigmaVariables(variables) {
|
|
22
|
+
return (variables &&
|
|
23
|
+
typeof variables === "object" &&
|
|
24
|
+
"semantics" in variables &&
|
|
25
|
+
typeof variables.semantics === "object");
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=figma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma.js","sourceRoot":"","sources":["../../src/adapters/figma.ts"],"names":[],"mappings":";AAAA,8CAA8C;;AAQ9C,gDAMC;AAMD,wDASC;AAzBD;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,8BAA8B;IAC9B,yBAAyB;IACzB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CACpC,SAA6B;IAE7B,OAAO,CACL,SAAS;QACT,OAAO,SAAS,KAAK,QAAQ;QAC7B,WAAW,IAAI,SAAS;QACxB,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,CACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ThemeTokens, FigmaSemanticsJson, TokenInputJson, Mapping, BuildOptions, RawTokenTree } from "./schema";
|
|
2
|
+
/**
|
|
3
|
+
* RawTokenTree + mapping から ThemeTokens を生成
|
|
4
|
+
* @param raw - 任意の入力フォーマット(自動検出して正規化)
|
|
5
|
+
* @param mapping - フラットな mapping オブジェクト
|
|
6
|
+
* @param options - ビルドオプション
|
|
7
|
+
* @returns ThemeTokens
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildThemeTokens(raw: RawTokenTree | FigmaSemanticsJson | TokenInputJson, mapping: Mapping, options?: BuildOptions): ThemeTokens;
|
|
10
|
+
/**
|
|
11
|
+
* ThemeTokens をファイルに書き込む
|
|
12
|
+
* @param params - 書き込みパラメータ
|
|
13
|
+
*/
|
|
14
|
+
export declare function writeThemeTokens(params: {
|
|
15
|
+
themeTokens: ThemeTokens;
|
|
16
|
+
outDir: string;
|
|
17
|
+
generateCss?: boolean;
|
|
18
|
+
cssVarPrefix?: string;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/core/build.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,YAAY,EACZ,YAAY,EACb,MAAM,UAAU,CAAC;AAgElB;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,YAAY,GAAG,kBAAkB,GAAG,cAAc,EACvD,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,YAAiB,GACzB,WAAW,CA+Db;AAwBD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// build.ts - RawTokenTree + mapping → dist/theme.tokens.json
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.buildThemeTokens = buildThemeTokens;
|
|
8
|
+
exports.writeThemeTokens = writeThemeTokens;
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const normalize_1 = require("./normalize");
|
|
12
|
+
const validate_1 = require("./validate");
|
|
13
|
+
/**
|
|
14
|
+
* パスで値を取得
|
|
15
|
+
*/
|
|
16
|
+
function getByPath(obj, pathStr) {
|
|
17
|
+
return pathStr.split(".").reduce((acc, key) => acc?.[key], obj);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* RawTokenLeaf から実際の値を取り出す(後方互換対応)
|
|
21
|
+
* @param rawValue - leaf or nested leaf
|
|
22
|
+
* @returns string | number | undefined
|
|
23
|
+
*/
|
|
24
|
+
function unwrapLeaf(rawValue) {
|
|
25
|
+
if (rawValue === undefined || rawValue === null) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
// 直接 string/number の場合
|
|
29
|
+
if (typeof rawValue === "string" || typeof rawValue === "number") {
|
|
30
|
+
return rawValue;
|
|
31
|
+
}
|
|
32
|
+
// オブジェクトの場合
|
|
33
|
+
if (typeof rawValue === "object" && !Array.isArray(rawValue)) {
|
|
34
|
+
// 正規形: { $type, $path, $value, $source }
|
|
35
|
+
if ("$value" in rawValue) {
|
|
36
|
+
const val = rawValue.$value;
|
|
37
|
+
// $value が直接 string/number
|
|
38
|
+
if (typeof val === "string" || typeof val === "number") {
|
|
39
|
+
return val;
|
|
40
|
+
}
|
|
41
|
+
// $value が入れ子(旧形)
|
|
42
|
+
if (val && typeof val === "object" && "$value" in val) {
|
|
43
|
+
return unwrapLeaf(val); // 再帰的に unwrap
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* パスに値をセット
|
|
51
|
+
*/
|
|
52
|
+
function setByPath(obj, pathStr, value) {
|
|
53
|
+
const parts = pathStr.split(".");
|
|
54
|
+
let cur = obj;
|
|
55
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
56
|
+
const key = parts[i];
|
|
57
|
+
if (cur[key] == null || typeof cur[key] !== "object") {
|
|
58
|
+
cur[key] = {};
|
|
59
|
+
}
|
|
60
|
+
cur = cur[key];
|
|
61
|
+
}
|
|
62
|
+
cur[parts[parts.length - 1]] = value;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* RawTokenTree + mapping から ThemeTokens を生成
|
|
66
|
+
* @param raw - 任意の入力フォーマット(自動検出して正規化)
|
|
67
|
+
* @param mapping - フラットな mapping オブジェクト
|
|
68
|
+
* @param options - ビルドオプション
|
|
69
|
+
* @returns ThemeTokens
|
|
70
|
+
*/
|
|
71
|
+
function buildThemeTokens(raw, mapping, options = {}) {
|
|
72
|
+
// 統合 normalize() で任意フォーマットを正規化
|
|
73
|
+
const rawTree = (0, normalize_1.normalize)(raw);
|
|
74
|
+
const themeTokens = {
|
|
75
|
+
theme: {
|
|
76
|
+
color: {
|
|
77
|
+
background: { base: "" },
|
|
78
|
+
surface: {},
|
|
79
|
+
on: {},
|
|
80
|
+
border: {},
|
|
81
|
+
overlay: {},
|
|
82
|
+
accent: {},
|
|
83
|
+
},
|
|
84
|
+
radius: {},
|
|
85
|
+
spacing: {},
|
|
86
|
+
typography: {},
|
|
87
|
+
icon: { size: {}, stroke: {} },
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
for (const [themeKey, sourcePath] of Object.entries(mapping)) {
|
|
91
|
+
if (typeof themeKey !== "string") {
|
|
92
|
+
console.warn("[stil] invalid themeKey (not string):", themeKey);
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (typeof sourcePath !== "string") {
|
|
96
|
+
console.warn("[stil] invalid sourcePath (not string):", {
|
|
97
|
+
themeKey,
|
|
98
|
+
sourcePath,
|
|
99
|
+
});
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const rawValue = getByPath(rawTree, sourcePath);
|
|
103
|
+
if (rawValue === undefined) {
|
|
104
|
+
console.warn(`[stil] source path not found: ${sourcePath} (themeKey=${themeKey})`);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
// unwrapLeaf を使って値を取り出す(後方互換対応)
|
|
108
|
+
const value = unwrapLeaf(rawValue);
|
|
109
|
+
if (value === undefined) {
|
|
110
|
+
console.warn(`[stil] invalid value type for ${themeKey}: could not extract value from`, rawValue);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
setByPath(themeTokens, themeKey, value);
|
|
114
|
+
}
|
|
115
|
+
// stableSort オプションが有効な場合、キーをソート
|
|
116
|
+
if (options.stableSort) {
|
|
117
|
+
return stableSortObject(themeTokens);
|
|
118
|
+
}
|
|
119
|
+
return themeTokens;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* オブジェクトのキーを再帰的にソート(diff を安定化)
|
|
123
|
+
*/
|
|
124
|
+
function stableSortObject(obj) {
|
|
125
|
+
if (obj === null || typeof obj !== "object") {
|
|
126
|
+
return obj;
|
|
127
|
+
}
|
|
128
|
+
if (Array.isArray(obj)) {
|
|
129
|
+
return obj.map(stableSortObject);
|
|
130
|
+
}
|
|
131
|
+
const sorted = {};
|
|
132
|
+
const keys = Object.keys(obj).sort();
|
|
133
|
+
for (const key of keys) {
|
|
134
|
+
sorted[key] = stableSortObject(obj[key]);
|
|
135
|
+
}
|
|
136
|
+
return sorted;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* ThemeTokens をファイルに書き込む
|
|
140
|
+
* @param params - 書き込みパラメータ
|
|
141
|
+
*/
|
|
142
|
+
async function writeThemeTokens(params) {
|
|
143
|
+
const { themeTokens, outDir, generateCss = false, cssVarPrefix = "--theme-", } = params;
|
|
144
|
+
// dist ディレクトリを作成
|
|
145
|
+
if (!fs_1.default.existsSync(outDir)) {
|
|
146
|
+
fs_1.default.mkdirSync(outDir, { recursive: true });
|
|
147
|
+
}
|
|
148
|
+
// theme.tokens.json を書き込み
|
|
149
|
+
const jsonPath = path_1.default.join(outDir, "theme.tokens.json");
|
|
150
|
+
fs_1.default.writeFileSync(jsonPath, JSON.stringify(themeTokens, null, 2), "utf8");
|
|
151
|
+
// CSS 生成(オプション)
|
|
152
|
+
if (generateCss) {
|
|
153
|
+
const cssPath = path_1.default.join(outDir, "theme.css");
|
|
154
|
+
const cssContent = generateCssFromTokens(themeTokens, cssVarPrefix);
|
|
155
|
+
fs_1.default.writeFileSync(cssPath, cssContent, "utf8");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* ThemeTokens から CSS 変数を生成(簡易版)
|
|
160
|
+
*/
|
|
161
|
+
function generateCssFromTokens(tokens, prefix) {
|
|
162
|
+
const lines = [":root {"];
|
|
163
|
+
function flatten(obj, parentPath = "") {
|
|
164
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
165
|
+
const currentPath = parentPath ? `${parentPath}-${key}` : key;
|
|
166
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
167
|
+
flatten(value, currentPath);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
lines.push(` ${prefix}${currentPath}: ${value};`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
flatten(tokens.theme);
|
|
175
|
+
lines.push("}");
|
|
176
|
+
return lines.join("\n");
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* CLI エントリーポイント(直接実行時)
|
|
180
|
+
*/
|
|
181
|
+
async function main() {
|
|
182
|
+
const args = process.argv.slice(2);
|
|
183
|
+
const rawPath = args[0] || path_1.default.join(process.cwd(), "fixtures/bridge-like/raw.json");
|
|
184
|
+
const mappingPath = args[1] || path_1.default.join(process.cwd(), "fixtures/bridge-like/mapping.json");
|
|
185
|
+
const outDir = args[2] || path_1.default.join(process.cwd(), "dist");
|
|
186
|
+
console.log("[stil] Building theme tokens...");
|
|
187
|
+
console.log(` Raw: ${rawPath}`);
|
|
188
|
+
console.log(` Mapping: ${mappingPath}`);
|
|
189
|
+
console.log(` Output: ${outDir}`);
|
|
190
|
+
// 1. Load raw variables
|
|
191
|
+
if (!fs_1.default.existsSync(rawPath)) {
|
|
192
|
+
console.error(`[stil] ❌ Raw variables file not found: ${rawPath}`);
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
const rawVariables = JSON.parse(fs_1.default.readFileSync(rawPath, "utf8"));
|
|
196
|
+
// 2. Load mapping
|
|
197
|
+
if (!fs_1.default.existsSync(mappingPath)) {
|
|
198
|
+
console.error(`[stil] ❌ Mapping file not found: ${mappingPath}`);
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
const mapping = JSON.parse(fs_1.default.readFileSync(mappingPath, "utf8"));
|
|
202
|
+
// 3. Normalize (auto-detect format)
|
|
203
|
+
const rawTree = (0, normalize_1.normalize)(rawVariables);
|
|
204
|
+
// 4. Validate mapping
|
|
205
|
+
console.log("[stil] Validating mapping...");
|
|
206
|
+
const validationResult = (0, validate_1.validateMapping)(mapping, rawTree);
|
|
207
|
+
console.log((0, validate_1.formatValidationErrors)(validationResult));
|
|
208
|
+
if (!validationResult.valid) {
|
|
209
|
+
console.error("[stil] Build failed due to mapping errors");
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
// 5. Build (use already-normalized tree)
|
|
213
|
+
const tokens = buildThemeTokens(rawTree, mapping, { stableSort: true });
|
|
214
|
+
// 6. Write output
|
|
215
|
+
await writeThemeTokens({
|
|
216
|
+
themeTokens: tokens,
|
|
217
|
+
outDir,
|
|
218
|
+
generateCss: false,
|
|
219
|
+
});
|
|
220
|
+
console.log("[stil] ✅ Build successful:", path_1.default.join(outDir, "theme.tokens.json"));
|
|
221
|
+
}
|
|
222
|
+
// Run main if executed directly
|
|
223
|
+
if (require.main === module) {
|
|
224
|
+
main().catch((error) => {
|
|
225
|
+
console.error("[stil] ❌ Build failed:", error);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/core/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { buildThemeTokens, writeThemeTokens } from "./build";
|
|
2
|
+
export { normalizeFromFigmaSemantics } from "./normalize";
|
|
3
|
+
export { validateMapping, formatValidationErrors, printValidationErrors } from "./validate";
|
|
4
|
+
export type { MappingValidationError } from "./validate";
|
|
5
|
+
export type { ThemeTokens, RawTokenTree, RawTokenNode, RawTokenLeaf, RawTokenType, RawTokenSource, FigmaVariableAlias, FigmaSemanticsJson, Mapping, BuildOptions, ValidationIssue, ValidationResult, } from "./schema";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAG5F,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,EACP,YAAY,EACZ,eAAe,EACf,gBAAgB,GACjB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/core/index.ts
|
|
3
|
+
// @stilhq/core のメインエントリーポイント
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.printValidationErrors = exports.formatValidationErrors = exports.validateMapping = exports.normalizeFromFigmaSemantics = exports.writeThemeTokens = exports.buildThemeTokens = void 0;
|
|
6
|
+
var build_1 = require("./build");
|
|
7
|
+
Object.defineProperty(exports, "buildThemeTokens", { enumerable: true, get: function () { return build_1.buildThemeTokens; } });
|
|
8
|
+
Object.defineProperty(exports, "writeThemeTokens", { enumerable: true, get: function () { return build_1.writeThemeTokens; } });
|
|
9
|
+
var normalize_1 = require("./normalize");
|
|
10
|
+
Object.defineProperty(exports, "normalizeFromFigmaSemantics", { enumerable: true, get: function () { return normalize_1.normalizeFromFigmaSemantics; } });
|
|
11
|
+
var validate_1 = require("./validate");
|
|
12
|
+
Object.defineProperty(exports, "validateMapping", { enumerable: true, get: function () { return validate_1.validateMapping; } });
|
|
13
|
+
Object.defineProperty(exports, "formatValidationErrors", { enumerable: true, get: function () { return validate_1.formatValidationErrors; } });
|
|
14
|
+
Object.defineProperty(exports, "printValidationErrors", { enumerable: true, get: function () { return validate_1.printValidationErrors; } });
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,6BAA6B;;;AAE7B,iCAA6D;AAApD,yGAAA,gBAAgB,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AAC3C,yCAA0D;AAAjD,wHAAA,2BAA2B,OAAA;AACpC,uCAA4F;AAAnF,2GAAA,eAAe,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AAAE,iHAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { RawTokenTree, FigmaSemanticsJson, FigmaPluginJson } from "./schema";
|
|
2
|
+
export type InputFormat = "figma-native" | "figma-plugin" | "figma-plugin-multi" | "normalized" | "unknown";
|
|
3
|
+
/**
|
|
4
|
+
* 入力 JSON のフォーマットを自動検出
|
|
5
|
+
*/
|
|
6
|
+
export declare function detectInputFormat(input: any): InputFormat;
|
|
7
|
+
/**
|
|
8
|
+
* Figma Variables の JSON を RawTokenTree に変換(既存フォーマット)
|
|
9
|
+
* Input: { semantics: { "color/bg/base": { type, modes } } }
|
|
10
|
+
*/
|
|
11
|
+
export declare function normalizeFromFigmaSemantics(figmaVariables: FigmaSemanticsJson): RawTokenTree;
|
|
12
|
+
/**
|
|
13
|
+
* Figma Plugin 出力 JSON を RawTokenTree に変換
|
|
14
|
+
* Input: { collection: "semantics", tokens: { color: { bg: { base: {...} } } } }
|
|
15
|
+
*/
|
|
16
|
+
export declare function normalizeFromFigmaPlugin(pluginJson: FigmaPluginJson): RawTokenTree;
|
|
17
|
+
/**
|
|
18
|
+
* 複数コレクションの Figma Plugin JSON を RawTokenTree に変換
|
|
19
|
+
* Input: [{ collection: "semantics", tokens: {...} }, { collection: "primitives", tokens: {...} }]
|
|
20
|
+
*/
|
|
21
|
+
export declare function normalizeFromFigmaPluginMulti(pluginJsons: FigmaPluginJson[]): RawTokenTree;
|
|
22
|
+
/**
|
|
23
|
+
* 任意の入力 JSON を自動検出し、RawTokenTree に正規化する統合関数
|
|
24
|
+
*
|
|
25
|
+
* Supported formats:
|
|
26
|
+
* - Figma native: { semantics: { "color/bg/base": { type, modes } } }
|
|
27
|
+
* - Figma Plugin: { collection: "semantics", tokens: { color: { bg: {...} } } }
|
|
28
|
+
* - Figma Plugin multi: [{ collection, tokens }, ...]
|
|
29
|
+
* - Already normalized: { semantics: { color: { $type, $path, $source } } }
|
|
30
|
+
*/
|
|
31
|
+
export declare function normalize(input: any): RawTokenTree;
|
|
32
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/core/normalize.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,YAAY,EAIZ,kBAAkB,EAClB,eAAe,EAChB,MAAM,UAAU,CAAC;AAMlB,MAAM,MAAM,WAAW,GACnB,cAAc,GACd,cAAc,GACd,oBAAoB,GACpB,YAAY,GACZ,SAAS,CAAC;AA8Cd;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,WAAW,CAazD;AA0KD;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,kBAAkB,GACjC,YAAY,CASd;AA+HD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,eAAe,GAC1B,YAAY,CAWd;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,eAAe,EAAE,GAC7B,YAAY,CASd;AAMD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,YAAY,CAoBlD"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// normalize.ts
|
|
3
|
+
//
|
|
4
|
+
// Multiple input formats → unified RawTokenTree
|
|
5
|
+
// Supports: Figma native JSON, Figma Plugin output, custom DS JSON
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.detectInputFormat = detectInputFormat;
|
|
8
|
+
exports.normalizeFromFigmaSemantics = normalizeFromFigmaSemantics;
|
|
9
|
+
exports.normalizeFromFigmaPlugin = normalizeFromFigmaPlugin;
|
|
10
|
+
exports.normalizeFromFigmaPluginMulti = normalizeFromFigmaPluginMulti;
|
|
11
|
+
exports.normalize = normalize;
|
|
12
|
+
/**
|
|
13
|
+
* RawTokenTree が正規化済みかどうかを判定
|
|
14
|
+
*/
|
|
15
|
+
function isNormalizedRawTree(raw) {
|
|
16
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
17
|
+
return false;
|
|
18
|
+
// At least one top-level key should contain RawTokenNode with $type/$path/$source leaves
|
|
19
|
+
for (const collectionValue of Object.values(raw)) {
|
|
20
|
+
if (collectionValue && typeof collectionValue === "object") {
|
|
21
|
+
for (const innerValue of Object.values(collectionValue)) {
|
|
22
|
+
if (innerValue &&
|
|
23
|
+
typeof innerValue === "object" &&
|
|
24
|
+
"$type" in innerValue &&
|
|
25
|
+
"$path" in innerValue &&
|
|
26
|
+
"$source" in innerValue) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
// Check one level deeper (e.g., semantics.color.background.base)
|
|
30
|
+
if (innerValue && typeof innerValue === "object") {
|
|
31
|
+
for (const deepValue of Object.values(innerValue)) {
|
|
32
|
+
if (deepValue &&
|
|
33
|
+
typeof deepValue === "object" &&
|
|
34
|
+
"$type" in deepValue &&
|
|
35
|
+
"$path" in deepValue &&
|
|
36
|
+
"$source" in deepValue) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 入力 JSON のフォーマットを自動検出
|
|
48
|
+
*/
|
|
49
|
+
function detectInputFormat(input) {
|
|
50
|
+
if (!input)
|
|
51
|
+
return "unknown";
|
|
52
|
+
if (isNormalizedRawTree(input))
|
|
53
|
+
return "normalized";
|
|
54
|
+
if (input.semantics &&
|
|
55
|
+
typeof input.semantics === "object" &&
|
|
56
|
+
!input.collection)
|
|
57
|
+
return "figma-native";
|
|
58
|
+
if (input.collection && input.tokens)
|
|
59
|
+
return "figma-plugin";
|
|
60
|
+
if (Array.isArray(input) && input.length > 0 && input[0]?.collection)
|
|
61
|
+
return "figma-plugin-multi";
|
|
62
|
+
return "unknown";
|
|
63
|
+
}
|
|
64
|
+
// ========================================
|
|
65
|
+
// Shared helpers
|
|
66
|
+
// ========================================
|
|
67
|
+
const TYPE_BY_ROOT = {
|
|
68
|
+
color: "color",
|
|
69
|
+
spacing: "spacing",
|
|
70
|
+
radius: "radius",
|
|
71
|
+
typography: "typography",
|
|
72
|
+
"line-height": "line-height",
|
|
73
|
+
};
|
|
74
|
+
function inferTypeFromPath(path) {
|
|
75
|
+
const root = path[0];
|
|
76
|
+
return TYPE_BY_ROOT[root] ?? "unknown";
|
|
77
|
+
}
|
|
78
|
+
function makeAliasLeaf(collectionName, path, figmaNode) {
|
|
79
|
+
const tokenType = inferTypeFromPath(path);
|
|
80
|
+
const fullPath = [collectionName, ...path].join(".");
|
|
81
|
+
return {
|
|
82
|
+
$type: tokenType,
|
|
83
|
+
$path: fullPath,
|
|
84
|
+
$source: {
|
|
85
|
+
kind: "figma-variable",
|
|
86
|
+
collection: collectionName,
|
|
87
|
+
variableId: figmaNode.id,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function makeValueLeaf(collectionName, path, value) {
|
|
92
|
+
const tokenType = inferTypeFromPath(path);
|
|
93
|
+
const fullPath = [collectionName, ...path].join(".");
|
|
94
|
+
return {
|
|
95
|
+
$type: tokenType,
|
|
96
|
+
$path: fullPath,
|
|
97
|
+
$value: value,
|
|
98
|
+
$source: {
|
|
99
|
+
kind: "literal",
|
|
100
|
+
collection: collectionName,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function isAliasLeaf(v) {
|
|
105
|
+
return (v &&
|
|
106
|
+
typeof v === "object" &&
|
|
107
|
+
!Array.isArray(v) &&
|
|
108
|
+
v.type === "VARIABLE_ALIAS" &&
|
|
109
|
+
typeof v.id === "string");
|
|
110
|
+
}
|
|
111
|
+
function isRgbaObject(v) {
|
|
112
|
+
return (v &&
|
|
113
|
+
typeof v === "object" &&
|
|
114
|
+
!Array.isArray(v) &&
|
|
115
|
+
typeof v.r === "number" &&
|
|
116
|
+
typeof v.g === "number" &&
|
|
117
|
+
typeof v.b === "number" &&
|
|
118
|
+
typeof v.a === "number");
|
|
119
|
+
}
|
|
120
|
+
function rgbaToCss(v) {
|
|
121
|
+
const r = Math.round(v.r * 255);
|
|
122
|
+
const g = Math.round(v.g * 255);
|
|
123
|
+
const b = Math.round(v.b * 255);
|
|
124
|
+
const a = v.a;
|
|
125
|
+
return `rgba(${r}, ${g}, ${b}, ${a})`;
|
|
126
|
+
}
|
|
127
|
+
// ========================================
|
|
128
|
+
// Normalizer: Figma Native format
|
|
129
|
+
// ========================================
|
|
130
|
+
/**
|
|
131
|
+
* Figma native format walker (handles modes + legacy direct values)
|
|
132
|
+
*/
|
|
133
|
+
function walkFigmaNative(input, path, collectionName) {
|
|
134
|
+
const out = {};
|
|
135
|
+
for (const [key, value] of Object.entries(input)) {
|
|
136
|
+
const nextPath = [...path, key];
|
|
137
|
+
// New format: { type: "color", modes: { [modeId]: value } }
|
|
138
|
+
if (value &&
|
|
139
|
+
typeof value === "object" &&
|
|
140
|
+
!Array.isArray(value) &&
|
|
141
|
+
"modes" in value &&
|
|
142
|
+
value.modes !== null &&
|
|
143
|
+
typeof value.modes === "object") {
|
|
144
|
+
const modes = value.modes;
|
|
145
|
+
const modeIds = Object.keys(modes);
|
|
146
|
+
if (modeIds.length > 0) {
|
|
147
|
+
const firstModeId = modeIds[0];
|
|
148
|
+
const modeValue = modes[firstModeId];
|
|
149
|
+
if (isAliasLeaf(modeValue)) {
|
|
150
|
+
out[key] = makeAliasLeaf(collectionName, nextPath, modeValue);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (isRgbaObject(modeValue)) {
|
|
154
|
+
out[key] = makeValueLeaf(collectionName, nextPath, rgbaToCss(modeValue));
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (typeof modeValue === "string" || typeof modeValue === "number") {
|
|
158
|
+
out[key] = makeValueLeaf(collectionName, nextPath, modeValue);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
// Legacy format: direct values
|
|
165
|
+
if (isAliasLeaf(value)) {
|
|
166
|
+
out[key] = makeAliasLeaf(collectionName, nextPath, value);
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (isRgbaObject(value)) {
|
|
170
|
+
out[key] = makeValueLeaf(collectionName, nextPath, rgbaToCss(value));
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (typeof value === "string" || typeof value === "number") {
|
|
174
|
+
out[key] = makeValueLeaf(collectionName, nextPath, value);
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
// nested object
|
|
178
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
179
|
+
out[key] = walkFigmaNative(value, nextPath, collectionName);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return out;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Figma Variables の JSON を RawTokenTree に変換(既存フォーマット)
|
|
187
|
+
* Input: { semantics: { "color/bg/base": { type, modes } } }
|
|
188
|
+
*/
|
|
189
|
+
function normalizeFromFigmaSemantics(figmaVariables) {
|
|
190
|
+
const srcSemantics = figmaVariables.semantics;
|
|
191
|
+
if (!srcSemantics || typeof srcSemantics !== "object") {
|
|
192
|
+
throw new Error("Input JSON does not contain 'semantics' field");
|
|
193
|
+
}
|
|
194
|
+
const semanticsNode = walkFigmaNative(srcSemantics, [], "semantics");
|
|
195
|
+
return { semantics: semanticsNode };
|
|
196
|
+
}
|
|
197
|
+
// ========================================
|
|
198
|
+
// Normalizer: Figma Plugin format
|
|
199
|
+
// ========================================
|
|
200
|
+
/**
|
|
201
|
+
* Plugin format token node type guards
|
|
202
|
+
*/
|
|
203
|
+
function isPluginAliasNode(v) {
|
|
204
|
+
return (v &&
|
|
205
|
+
typeof v === "object" &&
|
|
206
|
+
v.type === "VARIABLE_ALIAS" &&
|
|
207
|
+
v.aliasTo &&
|
|
208
|
+
typeof v.aliasTo === "object");
|
|
209
|
+
}
|
|
210
|
+
function isPluginDirectNode(v) {
|
|
211
|
+
return (v &&
|
|
212
|
+
typeof v === "object" &&
|
|
213
|
+
"type" in v &&
|
|
214
|
+
"value" in v &&
|
|
215
|
+
!("aliasTo" in v));
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Walk the Figma Plugin nested token tree and produce RawTokenNode
|
|
219
|
+
*/
|
|
220
|
+
function walkPluginTokens(input, path, collectionName) {
|
|
221
|
+
const out = {};
|
|
222
|
+
for (const [key, value] of Object.entries(input)) {
|
|
223
|
+
const nextPath = [...path, key];
|
|
224
|
+
// Plugin alias node: { type: "VARIABLE_ALIAS", aliasTo: { variableId }, resolvedValue }
|
|
225
|
+
if (isPluginAliasNode(value)) {
|
|
226
|
+
const variableId = value.aliasTo?.variableId || "";
|
|
227
|
+
// If resolvedValue exists, store as value leaf with the resolved data
|
|
228
|
+
if (value.resolvedValue !== undefined) {
|
|
229
|
+
if (isRgbaObject(value.resolvedValue)) {
|
|
230
|
+
const leaf = makeValueLeaf(collectionName, nextPath, rgbaToCss(value.resolvedValue));
|
|
231
|
+
// Also record the alias source
|
|
232
|
+
leaf.$source = {
|
|
233
|
+
kind: "figma-variable",
|
|
234
|
+
collection: collectionName,
|
|
235
|
+
variableId,
|
|
236
|
+
};
|
|
237
|
+
out[key] = leaf;
|
|
238
|
+
}
|
|
239
|
+
else if (typeof value.resolvedValue === "string" ||
|
|
240
|
+
typeof value.resolvedValue === "number") {
|
|
241
|
+
const leaf = makeValueLeaf(collectionName, nextPath, value.resolvedValue);
|
|
242
|
+
leaf.$source = {
|
|
243
|
+
kind: "figma-variable",
|
|
244
|
+
collection: collectionName,
|
|
245
|
+
variableId,
|
|
246
|
+
};
|
|
247
|
+
out[key] = leaf;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
// resolvedValue is an unknown type, create alias leaf
|
|
251
|
+
out[key] = makeAliasLeaf(collectionName, nextPath, {
|
|
252
|
+
id: variableId,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// No resolvedValue, create alias leaf
|
|
258
|
+
out[key] = makeAliasLeaf(collectionName, nextPath, {
|
|
259
|
+
id: variableId,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
// Plugin direct value node: { type: "COLOR"/"FLOAT"/etc, value: ... }
|
|
265
|
+
if (isPluginDirectNode(value)) {
|
|
266
|
+
if (isRgbaObject(value.value)) {
|
|
267
|
+
out[key] = makeValueLeaf(collectionName, nextPath, rgbaToCss(value.value));
|
|
268
|
+
}
|
|
269
|
+
else if (typeof value.value === "string" ||
|
|
270
|
+
typeof value.value === "number") {
|
|
271
|
+
out[key] = makeValueLeaf(collectionName, nextPath, value.value);
|
|
272
|
+
}
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
// Nested group (e.g., color.background.base)
|
|
276
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
277
|
+
out[key] = walkPluginTokens(value, nextPath, collectionName);
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return out;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Figma Plugin 出力 JSON を RawTokenTree に変換
|
|
285
|
+
* Input: { collection: "semantics", tokens: { color: { bg: { base: {...} } } } }
|
|
286
|
+
*/
|
|
287
|
+
function normalizeFromFigmaPlugin(pluginJson) {
|
|
288
|
+
if (!pluginJson.collection || !pluginJson.tokens) {
|
|
289
|
+
throw new Error("Plugin JSON must have 'collection' and 'tokens' fields");
|
|
290
|
+
}
|
|
291
|
+
const collectionName = pluginJson.collection.toLowerCase();
|
|
292
|
+
const node = walkPluginTokens(pluginJson.tokens, [], collectionName);
|
|
293
|
+
return { [collectionName]: node };
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* 複数コレクションの Figma Plugin JSON を RawTokenTree に変換
|
|
297
|
+
* Input: [{ collection: "semantics", tokens: {...} }, { collection: "primitives", tokens: {...} }]
|
|
298
|
+
*/
|
|
299
|
+
function normalizeFromFigmaPluginMulti(pluginJsons) {
|
|
300
|
+
const tree = {};
|
|
301
|
+
for (const pj of pluginJsons) {
|
|
302
|
+
const collectionName = pj.collection.toLowerCase();
|
|
303
|
+
tree[collectionName] = walkPluginTokens(pj.tokens, [], collectionName);
|
|
304
|
+
}
|
|
305
|
+
return tree;
|
|
306
|
+
}
|
|
307
|
+
// ========================================
|
|
308
|
+
// Unified normalize dispatcher
|
|
309
|
+
// ========================================
|
|
310
|
+
/**
|
|
311
|
+
* 任意の入力 JSON を自動検出し、RawTokenTree に正規化する統合関数
|
|
312
|
+
*
|
|
313
|
+
* Supported formats:
|
|
314
|
+
* - Figma native: { semantics: { "color/bg/base": { type, modes } } }
|
|
315
|
+
* - Figma Plugin: { collection: "semantics", tokens: { color: { bg: {...} } } }
|
|
316
|
+
* - Figma Plugin multi: [{ collection, tokens }, ...]
|
|
317
|
+
* - Already normalized: { semantics: { color: { $type, $path, $source } } }
|
|
318
|
+
*/
|
|
319
|
+
function normalize(input) {
|
|
320
|
+
const format = detectInputFormat(input);
|
|
321
|
+
switch (format) {
|
|
322
|
+
case "normalized":
|
|
323
|
+
return input;
|
|
324
|
+
case "figma-native":
|
|
325
|
+
return normalizeFromFigmaSemantics(input);
|
|
326
|
+
case "figma-plugin":
|
|
327
|
+
return normalizeFromFigmaPlugin(input);
|
|
328
|
+
case "figma-plugin-multi":
|
|
329
|
+
return normalizeFromFigmaPluginMulti(input);
|
|
330
|
+
default:
|
|
331
|
+
throw new Error('Unknown input format. Expected one of:\n' +
|
|
332
|
+
' - { semantics: { ... } } (Figma native)\n' +
|
|
333
|
+
' - { collection, tokens: { ... } } (Figma Plugin)\n' +
|
|
334
|
+
' - [{ collection, tokens }, ...] (Figma Plugin multi)');
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/core/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export type FigmaVariableAlias = {
|
|
2
|
+
type: "VARIABLE_ALIAS";
|
|
3
|
+
id: string;
|
|
4
|
+
};
|
|
5
|
+
export type FigmaSemanticsJson = {
|
|
6
|
+
semantics: Record<string, any>;
|
|
7
|
+
collections?: Record<string, any>;
|
|
8
|
+
};
|
|
9
|
+
export type FigmaPluginJson = {
|
|
10
|
+
collection: string;
|
|
11
|
+
tokens: Record<string, any>;
|
|
12
|
+
isSource?: boolean;
|
|
13
|
+
figmaFileUrl?: string;
|
|
14
|
+
};
|
|
15
|
+
export type FigmaPluginMultiJson = FigmaPluginJson[];
|
|
16
|
+
export type TokenInputJson = FigmaSemanticsJson | FigmaPluginJson | FigmaPluginMultiJson | Record<string, any>;
|
|
17
|
+
export type RawTokenType = "color" | "spacing" | "radius" | "typography" | "line-height" | "unknown";
|
|
18
|
+
export type RawTokenSource = {
|
|
19
|
+
kind: "figma-variable" | "literal";
|
|
20
|
+
collection?: string;
|
|
21
|
+
variableId?: string;
|
|
22
|
+
};
|
|
23
|
+
export type RawTokenLeaf = {
|
|
24
|
+
$type: RawTokenType;
|
|
25
|
+
$path: string;
|
|
26
|
+
$value?: string | number;
|
|
27
|
+
$source: RawTokenSource;
|
|
28
|
+
};
|
|
29
|
+
export type LegacyNestedLeaf = {
|
|
30
|
+
$type: Record<string, any>;
|
|
31
|
+
$path: Record<string, any>;
|
|
32
|
+
$value?: Record<string, any>;
|
|
33
|
+
$source: Record<string, any>;
|
|
34
|
+
};
|
|
35
|
+
export type RawTokenLeafOrLegacy = RawTokenLeaf | LegacyNestedLeaf;
|
|
36
|
+
export type RawTokenNode = {
|
|
37
|
+
[key: string]: RawTokenNode | RawTokenLeaf;
|
|
38
|
+
};
|
|
39
|
+
export type RawTokenTree = {
|
|
40
|
+
[collectionName: string]: RawTokenNode;
|
|
41
|
+
};
|
|
42
|
+
export type ThemeTokens = {
|
|
43
|
+
theme: Record<string, any>;
|
|
44
|
+
};
|
|
45
|
+
export type Mapping = Record<string, string>;
|
|
46
|
+
export type BuildOptions = {
|
|
47
|
+
/** optional: theme.css を生成するか */
|
|
48
|
+
generateCss?: boolean;
|
|
49
|
+
/** CSS変数のプレフィックス(デフォルト: "--theme-") */
|
|
50
|
+
cssVarPrefix?: string;
|
|
51
|
+
/** ソートを安定化(diff がブレない) */
|
|
52
|
+
stableSort?: boolean;
|
|
53
|
+
};
|
|
54
|
+
export interface ValidationIssue {
|
|
55
|
+
type: "undefined-reference" | "nested-key" | "missing-required-key" | "invalid-type" | "key-collision";
|
|
56
|
+
themeKey: string;
|
|
57
|
+
sourcePath?: string;
|
|
58
|
+
message: string;
|
|
59
|
+
}
|
|
60
|
+
export interface ValidationResult {
|
|
61
|
+
valid: boolean;
|
|
62
|
+
issues: ValidationIssue[];
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,gBAAgB,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnC,CAAC;AAGF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAGF,MAAM,MAAM,oBAAoB,GAAG,eAAe,EAAE,CAAC;AAGrD,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,eAAe,GACf,oBAAoB,GACpB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAGxB,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,OAAO,EAAE,cAAc,CAAC;CACzB,CAAC;AAIF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B,CAAC;AAGF,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,gBAAgB,CAAC;AAGnE,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,YAAY,CAAC;CAC5C,CAAC;AAGF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,CAAC;CACxC,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,CAAC;AAGF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAG7C,MAAM,MAAM,YAAY,GAAG;IACzB,iCAAiC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAGF,MAAM,WAAW,eAAe;IAC9B,IAAI,EACA,qBAAqB,GACrB,YAAY,GACZ,sBAAsB,GACtB,cAAc,GACd,eAAe,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":";AAAA,YAAY"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { RawTokenTree, Mapping, ValidationResult, ValidationIssue } from "./schema";
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated Use ValidationIssue from schema instead
|
|
4
|
+
*/
|
|
5
|
+
export interface MappingValidationError extends ValidationIssue {
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* mapping を検証
|
|
9
|
+
* @param mapping - フラットな mapping オブジェクト
|
|
10
|
+
* @param rawTree - 正規化済みの RawTokenTree(optional: 未定義参照チェックに使用)
|
|
11
|
+
* @returns ValidationResult
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateMapping(mapping: Mapping, rawTree?: RawTokenTree): ValidationResult;
|
|
14
|
+
/**
|
|
15
|
+
* 検証エラーを表示
|
|
16
|
+
* @deprecated Use formatValidationErrors instead
|
|
17
|
+
*/
|
|
18
|
+
export declare function printValidationErrors(issues: ValidationIssue[]): void;
|
|
19
|
+
/**
|
|
20
|
+
* ValidationResult を人間が読める形式にフォーマット
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatValidationErrors(result: ValidationResult): string;
|
|
23
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,eAAe,EAChB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,eAAe;CAAG;AAclE;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,YAAY,GACrB,gBAAgB,CA2FlB;AASD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAsBvE"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// validate.ts - mapping 検証
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.validateMapping = validateMapping;
|
|
5
|
+
exports.printValidationErrors = printValidationErrors;
|
|
6
|
+
exports.formatValidationErrors = formatValidationErrors;
|
|
7
|
+
/**
|
|
8
|
+
* 必須キーのリスト(v1では最小限)
|
|
9
|
+
*/
|
|
10
|
+
const REQUIRED_KEYS = [
|
|
11
|
+
"theme.color.background.base",
|
|
12
|
+
"theme.color.surface.default",
|
|
13
|
+
"theme.color.on.high",
|
|
14
|
+
"theme.color.on.inverse",
|
|
15
|
+
"theme.color.border.opacity",
|
|
16
|
+
"theme.color.accent.primary",
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* mapping を検証
|
|
20
|
+
* @param mapping - フラットな mapping オブジェクト
|
|
21
|
+
* @param rawTree - 正規化済みの RawTokenTree(optional: 未定義参照チェックに使用)
|
|
22
|
+
* @returns ValidationResult
|
|
23
|
+
*/
|
|
24
|
+
function validateMapping(mapping, rawTree) {
|
|
25
|
+
const issues = [];
|
|
26
|
+
// 1. ネスト禁止のチェック
|
|
27
|
+
for (const [themeKey, sourcePath] of Object.entries(mapping)) {
|
|
28
|
+
if (typeof themeKey !== "string") {
|
|
29
|
+
issues.push({
|
|
30
|
+
type: "invalid-type",
|
|
31
|
+
themeKey: String(themeKey),
|
|
32
|
+
message: `Invalid themeKey type: expected string, got ${typeof themeKey}`,
|
|
33
|
+
});
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (typeof sourcePath !== "string") {
|
|
37
|
+
issues.push({
|
|
38
|
+
type: "invalid-type",
|
|
39
|
+
themeKey,
|
|
40
|
+
message: `Invalid sourcePath type: expected string, got ${typeof sourcePath}`,
|
|
41
|
+
});
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// ネスト(オブジェクト値)の検出
|
|
45
|
+
// mapping はフラットな Record<string, string> であるべき
|
|
46
|
+
if (typeof sourcePath === "object" && sourcePath !== null) {
|
|
47
|
+
issues.push({
|
|
48
|
+
type: "nested-key",
|
|
49
|
+
themeKey,
|
|
50
|
+
message: `Nested mapping not allowed. Use flat Record<string, string>`,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// 2. 未定義参照のチェック(rawTree が提供されている場合のみ)
|
|
55
|
+
if (rawTree) {
|
|
56
|
+
for (const [themeKey, sourcePath] of Object.entries(mapping)) {
|
|
57
|
+
if (typeof sourcePath !== "string")
|
|
58
|
+
continue;
|
|
59
|
+
const value = getByPath(rawTree, sourcePath);
|
|
60
|
+
if (value === undefined) {
|
|
61
|
+
issues.push({
|
|
62
|
+
type: "undefined-reference",
|
|
63
|
+
themeKey,
|
|
64
|
+
sourcePath,
|
|
65
|
+
message: `Source path not found: ${sourcePath}`,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// 3. キー衝突のチェック(同じthemeKeyに複数の値が設定される)
|
|
71
|
+
const themeKeyUsage = new Map();
|
|
72
|
+
for (const [themeKey, sourcePath] of Object.entries(mapping)) {
|
|
73
|
+
if (typeof themeKey !== "string" || typeof sourcePath !== "string")
|
|
74
|
+
continue;
|
|
75
|
+
if (!themeKeyUsage.has(themeKey)) {
|
|
76
|
+
themeKeyUsage.set(themeKey, []);
|
|
77
|
+
}
|
|
78
|
+
themeKeyUsage.get(themeKey).push(sourcePath);
|
|
79
|
+
}
|
|
80
|
+
for (const [themeKey, sourcePaths] of themeKeyUsage.entries()) {
|
|
81
|
+
if (sourcePaths.length > 1) {
|
|
82
|
+
issues.push({
|
|
83
|
+
type: "key-collision",
|
|
84
|
+
themeKey,
|
|
85
|
+
message: `Key collision detected: ${themeKey} is mapped from multiple sources: ${sourcePaths.join(", ")}`,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// 4. 必須キーのチェック(v0.1では警告のみ、エラーにはしない)
|
|
90
|
+
const mappedKeys = new Set(Object.keys(mapping));
|
|
91
|
+
for (const requiredKey of REQUIRED_KEYS) {
|
|
92
|
+
if (!mappedKeys.has(requiredKey)) {
|
|
93
|
+
// v0.1: 必須キーチェックは warning レベル(今後 error に変更可能)
|
|
94
|
+
// issues.push({
|
|
95
|
+
// type: "missing-required-key",
|
|
96
|
+
// themeKey: requiredKey,
|
|
97
|
+
// message: `Required key missing: ${requiredKey}`,
|
|
98
|
+
// });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
valid: issues.length === 0,
|
|
103
|
+
issues,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* パスで値を取得
|
|
108
|
+
*/
|
|
109
|
+
function getByPath(obj, pathStr) {
|
|
110
|
+
return pathStr.split(".").reduce((acc, key) => acc?.[key], obj);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 検証エラーを表示
|
|
114
|
+
* @deprecated Use formatValidationErrors instead
|
|
115
|
+
*/
|
|
116
|
+
function printValidationErrors(issues) {
|
|
117
|
+
console.log(formatValidationErrors({ valid: issues.length === 0, issues }));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* ValidationResult を人間が読める形式にフォーマット
|
|
121
|
+
*/
|
|
122
|
+
function formatValidationErrors(result) {
|
|
123
|
+
if (result.valid) {
|
|
124
|
+
return "[stil] ✅ Mapping validation passed";
|
|
125
|
+
}
|
|
126
|
+
const lines = [];
|
|
127
|
+
lines.push(`\n[stil] ❌ Mapping validation failed with ${result.issues.length} error(s):\n`);
|
|
128
|
+
for (const issue of result.issues) {
|
|
129
|
+
lines.push(` • [${issue.type}] ${issue.message}`);
|
|
130
|
+
if (issue.sourcePath) {
|
|
131
|
+
lines.push(` Theme key: ${issue.themeKey}`);
|
|
132
|
+
lines.push(` Source path: ${issue.sourcePath}`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
lines.push(` Key: ${issue.themeKey}`);
|
|
136
|
+
}
|
|
137
|
+
lines.push("");
|
|
138
|
+
}
|
|
139
|
+
return lines.join("\n");
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { buildThemeTokens, writeThemeTokens } from "./core/build";
|
|
2
|
+
export { normalize, normalizeFromFigmaSemantics, normalizeFromFigmaPlugin, normalizeFromFigmaPluginMulti, detectInputFormat, } from "./core/normalize";
|
|
3
|
+
export { validateMapping, formatValidationErrors, printValidationErrors, } from "./core/validate";
|
|
4
|
+
export { loadFigmaVariables, validateFigmaVariables } from "./adapters/figma";
|
|
5
|
+
export type { ThemeTokens, RawTokenTree, RawTokenNode, RawTokenLeaf, RawTokenType, RawTokenSource, FigmaVariableAlias, FigmaSemanticsJson, FigmaPluginJson, FigmaPluginMultiJson, TokenInputJson, Mapping, BuildOptions, ValidationIssue, ValidationResult, } from "./core/schema";
|
|
6
|
+
export type { InputFormat } from "./core/normalize";
|
|
7
|
+
export type { MappingValidationError } from "./core/validate";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EACL,SAAS,EACT,2BAA2B,EAC3B,wBAAwB,EACxB,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAG9E,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,OAAO,EACP,YAAY,EACZ,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// @stilhq/core - Main entry point
|
|
3
|
+
// 公開APIはここからのみ提供(深いパスimport禁止)
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.validateFigmaVariables = exports.loadFigmaVariables = exports.printValidationErrors = exports.formatValidationErrors = exports.validateMapping = exports.detectInputFormat = exports.normalizeFromFigmaPluginMulti = exports.normalizeFromFigmaPlugin = exports.normalizeFromFigmaSemantics = exports.normalize = exports.writeThemeTokens = exports.buildThemeTokens = void 0;
|
|
6
|
+
// Core functions
|
|
7
|
+
var build_1 = require("./core/build");
|
|
8
|
+
Object.defineProperty(exports, "buildThemeTokens", { enumerable: true, get: function () { return build_1.buildThemeTokens; } });
|
|
9
|
+
Object.defineProperty(exports, "writeThemeTokens", { enumerable: true, get: function () { return build_1.writeThemeTokens; } });
|
|
10
|
+
var normalize_1 = require("./core/normalize");
|
|
11
|
+
Object.defineProperty(exports, "normalize", { enumerable: true, get: function () { return normalize_1.normalize; } });
|
|
12
|
+
Object.defineProperty(exports, "normalizeFromFigmaSemantics", { enumerable: true, get: function () { return normalize_1.normalizeFromFigmaSemantics; } });
|
|
13
|
+
Object.defineProperty(exports, "normalizeFromFigmaPlugin", { enumerable: true, get: function () { return normalize_1.normalizeFromFigmaPlugin; } });
|
|
14
|
+
Object.defineProperty(exports, "normalizeFromFigmaPluginMulti", { enumerable: true, get: function () { return normalize_1.normalizeFromFigmaPluginMulti; } });
|
|
15
|
+
Object.defineProperty(exports, "detectInputFormat", { enumerable: true, get: function () { return normalize_1.detectInputFormat; } });
|
|
16
|
+
var validate_1 = require("./core/validate");
|
|
17
|
+
Object.defineProperty(exports, "validateMapping", { enumerable: true, get: function () { return validate_1.validateMapping; } });
|
|
18
|
+
Object.defineProperty(exports, "formatValidationErrors", { enumerable: true, get: function () { return validate_1.formatValidationErrors; } });
|
|
19
|
+
Object.defineProperty(exports, "printValidationErrors", { enumerable: true, get: function () { return validate_1.printValidationErrors; } });
|
|
20
|
+
// Adapters
|
|
21
|
+
var figma_1 = require("./adapters/figma");
|
|
22
|
+
Object.defineProperty(exports, "loadFigmaVariables", { enumerable: true, get: function () { return figma_1.loadFigmaVariables; } });
|
|
23
|
+
Object.defineProperty(exports, "validateFigmaVariables", { enumerable: true, get: function () { return figma_1.validateFigmaVariables; } });
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAClC,+BAA+B;;;AAE/B,iBAAiB;AACjB,sCAAkE;AAAzD,yGAAA,gBAAgB,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AAC3C,8CAM0B;AALxB,sGAAA,SAAS,OAAA;AACT,wHAAA,2BAA2B,OAAA;AAC3B,qHAAA,wBAAwB,OAAA;AACxB,0HAAA,6BAA6B,OAAA;AAC7B,8GAAA,iBAAiB,OAAA;AAEnB,4CAIyB;AAHvB,2GAAA,eAAe,OAAA;AACf,kHAAA,sBAAsB,OAAA;AACtB,iHAAA,qBAAqB,OAAA;AAGvB,WAAW;AACX,0CAA8E;AAArE,2GAAA,kBAAkB,OAAA;AAAE,+GAAA,sBAAsB,OAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@stilhq/core",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Design token pipeline for Stil",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"test": "vitest",
|
|
16
|
+
"clean": "rm -rf dist",
|
|
17
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"design-tokens"
|
|
21
|
+
],
|
|
22
|
+
"author": "Tetsu",
|
|
23
|
+
"license": "BUSL-1.1",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/techang/stil-systems.git",
|
|
27
|
+
"directory": "packages/core"
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist",
|
|
34
|
+
"README.md",
|
|
35
|
+
"LICENSE"
|
|
36
|
+
],
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^20.11.0",
|
|
39
|
+
"ts-node": "^10.9.2",
|
|
40
|
+
"typescript": "^5.7.0",
|
|
41
|
+
"vitest": "^1.2.0"
|
|
42
|
+
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=18.0.0"
|
|
45
|
+
}
|
|
46
|
+
}
|