@sxl-studio/token-transformer 1.0.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/README.en.md +638 -0
- package/README.md +715 -0
- package/config.example.json +45 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +160 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/loader.d.ts +8 -0
- package/dist/core/loader.js +105 -0
- package/dist/core/loader.js.map +1 -0
- package/dist/core/parser.d.ts +5 -0
- package/dist/core/parser.js +186 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/types.d.ts +83 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/writer.d.ts +6 -0
- package/dist/core/writer.js +124 -0
- package/dist/core/writer.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/transformers/css.d.ts +2 -0
- package/dist/transformers/css.js +485 -0
- package/dist/transformers/css.js.map +1 -0
- package/dist/transformers/kotlin.d.ts +2 -0
- package/dist/transformers/kotlin.js +445 -0
- package/dist/transformers/kotlin.js.map +1 -0
- package/dist/transformers/swiftui.d.ts +2 -0
- package/dist/transformers/swiftui.js +436 -0
- package/dist/transformers/swiftui.js.map +1 -0
- package/dist/transformers/vue3.d.ts +28 -0
- package/dist/transformers/vue3.js +534 -0
- package/dist/transformers/vue3.js.map +1 -0
- package/dist/utils/color.d.ts +11 -0
- package/dist/utils/color.js +101 -0
- package/dist/utils/color.js.map +1 -0
- package/dist/utils/dimension.d.ts +7 -0
- package/dist/utils/dimension.js +62 -0
- package/dist/utils/dimension.js.map +1 -0
- package/dist/utils/naming.d.ts +13 -0
- package/dist/utils/naming.js +58 -0
- package/dist/utils/naming.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"source": {
|
|
3
|
+
"tokenDir": "../Plugin/tokens",
|
|
4
|
+
"include": ["example/*.json", "core/*.json"],
|
|
5
|
+
"exclude": ["config.json", "**/diff-id*.json", "**/composition*"]
|
|
6
|
+
},
|
|
7
|
+
"platforms": {
|
|
8
|
+
"css": {
|
|
9
|
+
"outputDir": "./project-style/example",
|
|
10
|
+
"prefix": "",
|
|
11
|
+
"resolveAliases": false,
|
|
12
|
+
"fileMapping": [
|
|
13
|
+
{
|
|
14
|
+
"sources": ["example/*.json"],
|
|
15
|
+
"output": "all-tokens.css"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
"swiftui": {
|
|
20
|
+
"outputDir": "./project-style/example",
|
|
21
|
+
"prefix": "",
|
|
22
|
+
"resolveAliases": false,
|
|
23
|
+
"fileMapping": [
|
|
24
|
+
{
|
|
25
|
+
"sources": ["example/*.json"],
|
|
26
|
+
"output": "AllTokens.swift"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"kotlin": {
|
|
31
|
+
"outputDir": "./project-style/example",
|
|
32
|
+
"prefix": "",
|
|
33
|
+
"resolveAliases": false,
|
|
34
|
+
"fileMapping": [
|
|
35
|
+
{
|
|
36
|
+
"sources": ["example/*.json"],
|
|
37
|
+
"output": "AllTokens.kt"
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"settings": {
|
|
43
|
+
"remBase": 16
|
|
44
|
+
}
|
|
45
|
+
}
|
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import ora from "ora";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import { runTransform, writeOutputFiles } from "./core/writer.js";
|
|
7
|
+
import { transformCompositionFile } from "./transformers/vue3.js";
|
|
8
|
+
const CONFIG_FILE = "sxl-transform.config.json";
|
|
9
|
+
async function main() {
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
const compositionArg = args.find(a => a.startsWith("--composition="))?.split("=")[1];
|
|
12
|
+
const compositionOutArg = args.find(a => a.startsWith("--output="))?.split("=")[1];
|
|
13
|
+
if (compositionArg) {
|
|
14
|
+
return runComposition(compositionArg, compositionOutArg);
|
|
15
|
+
}
|
|
16
|
+
const configPath = args.find(a => a.startsWith("--config="))?.split("=")[1]
|
|
17
|
+
?? args[args.indexOf("--config") + 1]
|
|
18
|
+
?? CONFIG_FILE;
|
|
19
|
+
console.log("");
|
|
20
|
+
console.log(chalk.bold.magenta(" ╔═══════════════════════════════════════╗"));
|
|
21
|
+
console.log(chalk.bold.magenta(" ║") + chalk.bold.white(" SXL Studio — Token Transformer ") + chalk.bold.magenta("║"));
|
|
22
|
+
console.log(chalk.bold.magenta(" ╚═══════════════════════════════════════╝"));
|
|
23
|
+
console.log("");
|
|
24
|
+
const fullConfigPath = path.resolve(configPath);
|
|
25
|
+
if (!fs.existsSync(fullConfigPath)) {
|
|
26
|
+
if (args.includes("--init")) {
|
|
27
|
+
generateDefaultConfig(fullConfigPath);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
console.log(chalk.red(` Config file not found: ${fullConfigPath}`));
|
|
31
|
+
console.log(chalk.dim(` Run with --init to generate a default config.`));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
const spinner = ora({ text: "Loading config...", color: "magenta" }).start();
|
|
35
|
+
let config;
|
|
36
|
+
try {
|
|
37
|
+
config = JSON.parse(fs.readFileSync(fullConfigPath, "utf-8"));
|
|
38
|
+
spinner.succeed(chalk.green("Config loaded"));
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
spinner.fail(chalk.red(`Invalid config: ${err}`));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
const platforms = Object.keys(config.platforms);
|
|
45
|
+
console.log(chalk.dim(` Platforms: ${platforms.map(p => chalk.cyan(p)).join(", ")}`));
|
|
46
|
+
console.log(chalk.dim(` Source: ${config.source.tokenDir}`));
|
|
47
|
+
console.log("");
|
|
48
|
+
spinner.start("Parsing tokens...");
|
|
49
|
+
const results = await runTransform(config);
|
|
50
|
+
const totalTokens = results.reduce((sum, r) => sum + r.tokenCount, 0);
|
|
51
|
+
spinner.succeed(chalk.green(`Parsed ${chalk.bold(String(totalTokens))} tokens`));
|
|
52
|
+
for (const result of results) {
|
|
53
|
+
const allErrors = result.errors;
|
|
54
|
+
if (allErrors.length > 0) {
|
|
55
|
+
console.log(chalk.yellow(`\n ⚠ ${result.platform} warnings:`));
|
|
56
|
+
for (const err of allErrors) {
|
|
57
|
+
console.log(chalk.dim(` • ${err}`));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
spinner.start("Writing output files...");
|
|
62
|
+
const { written, errors: writeErrors } = writeOutputFiles(results);
|
|
63
|
+
spinner.succeed(chalk.green(`Written ${chalk.bold(String(written))} files`));
|
|
64
|
+
if (writeErrors.length > 0) {
|
|
65
|
+
for (const err of writeErrors) {
|
|
66
|
+
console.log(chalk.red(` ✗ ${err}`));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
console.log("");
|
|
70
|
+
for (const result of results) {
|
|
71
|
+
const icon = platformIcon(result.platform);
|
|
72
|
+
console.log(chalk.bold(` ${icon} ${chalk.cyan(result.platform.toUpperCase())}`));
|
|
73
|
+
for (const file of result.files) {
|
|
74
|
+
console.log(chalk.dim(` → ${file.path} (${file.tokenCount} tokens)`));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
console.log("");
|
|
78
|
+
console.log(chalk.green.bold(" ✓ Transform complete!"));
|
|
79
|
+
console.log("");
|
|
80
|
+
}
|
|
81
|
+
function runComposition(inputPath, outputDir) {
|
|
82
|
+
console.log("");
|
|
83
|
+
console.log(chalk.bold.magenta(" ╔═══════════════════════════════════════╗"));
|
|
84
|
+
console.log(chalk.bold.magenta(" ║") + chalk.bold.white(" SXL Studio — Composition → Vue 3 ") + chalk.bold.magenta("║"));
|
|
85
|
+
console.log(chalk.bold.magenta(" ╚═══════════════════════════════════════╝"));
|
|
86
|
+
console.log("");
|
|
87
|
+
const fullPath = path.resolve(inputPath);
|
|
88
|
+
if (!fs.existsSync(fullPath)) {
|
|
89
|
+
console.log(chalk.red(` File not found: ${fullPath}`));
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
const outDir = outputDir ? path.resolve(outputDir) : path.dirname(fullPath);
|
|
93
|
+
const spinner = ora({ text: "Transforming composition → Vue 3...", color: "magenta" }).start();
|
|
94
|
+
try {
|
|
95
|
+
const outPath = transformCompositionFile(fullPath, outDir);
|
|
96
|
+
spinner.succeed(chalk.green("Composition transformed"));
|
|
97
|
+
console.log("");
|
|
98
|
+
console.log(chalk.bold(` 🧩 ${chalk.cyan("VUE 3")}`));
|
|
99
|
+
console.log(chalk.dim(` → ${outPath}`));
|
|
100
|
+
console.log("");
|
|
101
|
+
console.log(chalk.green.bold(" ✓ Done!"));
|
|
102
|
+
console.log("");
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
spinner.fail(chalk.red(`Composition transform failed: ${err}`));
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function platformIcon(platform) {
|
|
110
|
+
switch (platform) {
|
|
111
|
+
case "css": return "🌐";
|
|
112
|
+
case "swiftui": return "🍎";
|
|
113
|
+
case "kotlin": return "🤖";
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function generateDefaultConfig(configPath) {
|
|
117
|
+
const config = {
|
|
118
|
+
source: {
|
|
119
|
+
tokenDir: "./tokens",
|
|
120
|
+
configFile: "config.json",
|
|
121
|
+
exclude: ["config.json", "**/diff-id*.json", "**/composition*"],
|
|
122
|
+
},
|
|
123
|
+
platforms: {
|
|
124
|
+
css: {
|
|
125
|
+
outputDir: "./output/css",
|
|
126
|
+
prefix: "ds",
|
|
127
|
+
resolveAliases: false,
|
|
128
|
+
splitEffects: true,
|
|
129
|
+
showDescriptions: true,
|
|
130
|
+
codeSyntax: {
|
|
131
|
+
colorFormat: "hex",
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
swiftui: {
|
|
135
|
+
outputDir: "./output/ios",
|
|
136
|
+
prefix: "DS",
|
|
137
|
+
resolveAliases: true,
|
|
138
|
+
showDescriptions: true,
|
|
139
|
+
},
|
|
140
|
+
kotlin: {
|
|
141
|
+
outputDir: "./output/android",
|
|
142
|
+
prefix: "DS",
|
|
143
|
+
resolveAliases: true,
|
|
144
|
+
showDescriptions: true,
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
settings: {
|
|
148
|
+
remBase: 16,
|
|
149
|
+
verbose: false,
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
153
|
+
console.log(chalk.green(` ✓ Default config generated at: ${configPath}`));
|
|
154
|
+
console.log(chalk.dim(` Edit the config and run again.`));
|
|
155
|
+
}
|
|
156
|
+
main().catch(err => {
|
|
157
|
+
console.error(chalk.red(`\n Fatal error: ${err}`));
|
|
158
|
+
process.exit(1);
|
|
159
|
+
});
|
|
160
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FlatToken, TransformConfig, CollectionConfig } from "./types.js";
|
|
2
|
+
export type LoadResult = {
|
|
3
|
+
tokens: FlatToken[];
|
|
4
|
+
collections: CollectionConfig[];
|
|
5
|
+
errors: string[];
|
|
6
|
+
};
|
|
7
|
+
export declare function loadTokens(config: TransformConfig): Promise<LoadResult>;
|
|
8
|
+
export declare function groupTokensByFile(tokens: FlatToken[], collections: CollectionConfig[]): Map<string, FlatToken[]>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { glob } from "glob";
|
|
4
|
+
import { parseTokenFile, buildValueMap, resolveAllAliases, evaluateMathExpressions, } from "./parser.js";
|
|
5
|
+
export async function loadTokens(config) {
|
|
6
|
+
const errors = [];
|
|
7
|
+
const tokenDir = path.resolve(config.source.tokenDir);
|
|
8
|
+
if (!fs.existsSync(tokenDir)) {
|
|
9
|
+
return { tokens: [], collections: [], errors: [`Token directory not found: ${tokenDir}`] };
|
|
10
|
+
}
|
|
11
|
+
let collections = [];
|
|
12
|
+
const pluginConfigPath = config.source.configFile
|
|
13
|
+
? path.resolve(tokenDir, config.source.configFile)
|
|
14
|
+
: path.resolve(tokenDir, "config.json");
|
|
15
|
+
if (fs.existsSync(pluginConfigPath)) {
|
|
16
|
+
try {
|
|
17
|
+
const raw = JSON.parse(fs.readFileSync(pluginConfigPath, "utf-8"));
|
|
18
|
+
if (raw.collections && Array.isArray(raw.collections)) {
|
|
19
|
+
collections = raw.collections;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
errors.push(`Failed to parse config.json: ${e}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
let filePaths;
|
|
27
|
+
if (config.source.include && config.source.include.length > 0) {
|
|
28
|
+
filePaths = [];
|
|
29
|
+
for (const pattern of config.source.include) {
|
|
30
|
+
const matches = await glob(pattern, { cwd: tokenDir, absolute: false });
|
|
31
|
+
filePaths.push(...matches);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
filePaths = await glob("**/*.json", { cwd: tokenDir, absolute: false });
|
|
36
|
+
}
|
|
37
|
+
const exclude = new Set(config.source.exclude ?? ["config.json", "**/diff-id*.json", "**/composition*"]);
|
|
38
|
+
filePaths = filePaths.filter(fp => {
|
|
39
|
+
for (const ex of exclude) {
|
|
40
|
+
if (fp === ex)
|
|
41
|
+
return false;
|
|
42
|
+
if (ex.includes("*") && new RegExp("^" + ex.replace(/\*/g, ".*") + "$").test(fp))
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
});
|
|
47
|
+
const allTokens = [];
|
|
48
|
+
for (const fp of filePaths) {
|
|
49
|
+
const fullPath = path.join(tokenDir, fp);
|
|
50
|
+
try {
|
|
51
|
+
const raw = fs.readFileSync(fullPath, "utf-8");
|
|
52
|
+
const json = JSON.parse(raw);
|
|
53
|
+
const tokens = parseTokenFile(json, fp);
|
|
54
|
+
allTokens.push(...tokens);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
errors.push(`Failed to parse ${fp}: ${e}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const lookup = buildValueMap(allTokens);
|
|
61
|
+
resolveAllAliases(allTokens, lookup);
|
|
62
|
+
evaluateMathExpressions(allTokens);
|
|
63
|
+
return { tokens: allTokens, collections, errors };
|
|
64
|
+
}
|
|
65
|
+
export function groupTokensByFile(tokens, collections) {
|
|
66
|
+
if (collections.length === 0) {
|
|
67
|
+
const groups = new Map();
|
|
68
|
+
for (const t of tokens) {
|
|
69
|
+
const file = t.sourceFile || "tokens";
|
|
70
|
+
if (!groups.has(file))
|
|
71
|
+
groups.set(file, []);
|
|
72
|
+
groups.get(file).push(t);
|
|
73
|
+
}
|
|
74
|
+
return groups;
|
|
75
|
+
}
|
|
76
|
+
const groups = new Map();
|
|
77
|
+
const tokensBySource = new Map();
|
|
78
|
+
for (const t of tokens) {
|
|
79
|
+
const src = t.sourceFile || "";
|
|
80
|
+
if (!tokensBySource.has(src))
|
|
81
|
+
tokensBySource.set(src, []);
|
|
82
|
+
tokensBySource.get(src).push(t);
|
|
83
|
+
}
|
|
84
|
+
for (const coll of collections) {
|
|
85
|
+
if (!coll.enabled)
|
|
86
|
+
continue;
|
|
87
|
+
for (const mode of coll.modes) {
|
|
88
|
+
if (!mode.enabled)
|
|
89
|
+
continue;
|
|
90
|
+
const key = `${coll.name}/${mode.name}`;
|
|
91
|
+
const modeTokens = [];
|
|
92
|
+
for (const [filePath, status] of Object.entries(mode.files)) {
|
|
93
|
+
if (status !== "enabled")
|
|
94
|
+
continue;
|
|
95
|
+
const fileTokens = tokensBySource.get(filePath) ?? [];
|
|
96
|
+
modeTokens.push(...fileTokens);
|
|
97
|
+
}
|
|
98
|
+
if (modeTokens.length > 0) {
|
|
99
|
+
groups.set(key, modeTokens);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return groups;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { FlatToken } from "./types.js";
|
|
2
|
+
export declare function parseTokenFile(json: Record<string, unknown>, filePath: string): FlatToken[];
|
|
3
|
+
export declare function buildValueMap(tokens: FlatToken[]): Map<string, FlatToken>;
|
|
4
|
+
export declare function resolveAllAliases(tokens: FlatToken[], lookup: Map<string, FlatToken>): void;
|
|
5
|
+
export declare function evaluateMathExpressions(tokens: FlatToken[]): void;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
export function parseTokenFile(json, filePath) {
|
|
2
|
+
return collectTokens(json, undefined, "", filePath);
|
|
3
|
+
}
|
|
4
|
+
function collectTokens(obj, inheritedType, prefix, filePath) {
|
|
5
|
+
const tokens = [];
|
|
6
|
+
const groupType = obj.$type || inheritedType;
|
|
7
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
8
|
+
if (key.startsWith("$"))
|
|
9
|
+
continue;
|
|
10
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
11
|
+
continue;
|
|
12
|
+
const node = value;
|
|
13
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
14
|
+
const nodeType = node.$type || groupType;
|
|
15
|
+
if ("$value" in node) {
|
|
16
|
+
const val = node.$value;
|
|
17
|
+
const isPureAlias = typeof val === "string" && /^\{[^{}]+\}$/.test(val.trim());
|
|
18
|
+
const aliasPath = isPureAlias ? val.slice(1, -1) : undefined;
|
|
19
|
+
const description = node.$description;
|
|
20
|
+
const extensions = node.$extensions;
|
|
21
|
+
tokens.push({
|
|
22
|
+
path,
|
|
23
|
+
name: key,
|
|
24
|
+
type: (nodeType || inferType(val)),
|
|
25
|
+
value: val,
|
|
26
|
+
isAlias: isPureAlias,
|
|
27
|
+
aliasPath,
|
|
28
|
+
description,
|
|
29
|
+
extensions,
|
|
30
|
+
sourceFile: filePath,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
tokens.push(...collectTokens(node, nodeType, path, filePath));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return tokens;
|
|
38
|
+
}
|
|
39
|
+
function inferType(value) {
|
|
40
|
+
if (typeof value === "boolean")
|
|
41
|
+
return "boolean";
|
|
42
|
+
if (typeof value === "number")
|
|
43
|
+
return "number";
|
|
44
|
+
if (typeof value === "string") {
|
|
45
|
+
const v = value.trim();
|
|
46
|
+
if (/^#|^rgb|^hsl|^oklch|^lch|^color\(/.test(v))
|
|
47
|
+
return "color";
|
|
48
|
+
if (/^-?\d+(\.\d+)?(px|rem|em|%|pt|dp|sp)?$/.test(v))
|
|
49
|
+
return "dimension";
|
|
50
|
+
}
|
|
51
|
+
if (typeof value === "object" && value !== null) {
|
|
52
|
+
const obj = value;
|
|
53
|
+
if ("fontFamily" in obj)
|
|
54
|
+
return "typography";
|
|
55
|
+
if ("offsetX" in obj || "offsetY" in obj)
|
|
56
|
+
return "shadow";
|
|
57
|
+
if ("color" in obj && "width" in obj && "style" in obj)
|
|
58
|
+
return "border";
|
|
59
|
+
if ("stops" in obj)
|
|
60
|
+
return "gradient";
|
|
61
|
+
if ("blur" in obj)
|
|
62
|
+
return "blur";
|
|
63
|
+
}
|
|
64
|
+
return "string";
|
|
65
|
+
}
|
|
66
|
+
export function buildValueMap(tokens) {
|
|
67
|
+
const map = new Map();
|
|
68
|
+
for (const t of tokens) {
|
|
69
|
+
map.set(t.path, t);
|
|
70
|
+
map.set(t.path.replace(/\./g, "/"), t);
|
|
71
|
+
}
|
|
72
|
+
return map;
|
|
73
|
+
}
|
|
74
|
+
export function resolveAllAliases(tokens, lookup) {
|
|
75
|
+
for (const token of tokens) {
|
|
76
|
+
if (token.isAlias && token.aliasPath) {
|
|
77
|
+
token.resolvedValue = resolveAlias(token.aliasPath, lookup, new Set(), 20);
|
|
78
|
+
}
|
|
79
|
+
else if (hasEmbeddedAliases(token.value)) {
|
|
80
|
+
token.resolvedValue = resolveEmbeddedAliases(token.value, lookup);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
token.resolvedValue = token.value;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function resolveAlias(aliasPath, lookup, visited, maxDepth) {
|
|
88
|
+
if (maxDepth <= 0 || visited.has(aliasPath))
|
|
89
|
+
return `{${aliasPath}}`;
|
|
90
|
+
visited.add(aliasPath);
|
|
91
|
+
const normalized = aliasPath.replace(/\//g, ".");
|
|
92
|
+
const target = lookup.get(normalized) ?? lookup.get(aliasPath);
|
|
93
|
+
if (!target)
|
|
94
|
+
return `{${aliasPath}}`;
|
|
95
|
+
if (target.isAlias && target.aliasPath) {
|
|
96
|
+
return resolveAlias(target.aliasPath, lookup, visited, maxDepth - 1);
|
|
97
|
+
}
|
|
98
|
+
if (hasEmbeddedAliases(target.value)) {
|
|
99
|
+
return resolveEmbeddedAliases(target.value, lookup, visited);
|
|
100
|
+
}
|
|
101
|
+
return target.value;
|
|
102
|
+
}
|
|
103
|
+
function hasEmbeddedAliases(val) {
|
|
104
|
+
if (typeof val === "string")
|
|
105
|
+
return /\{[^{}]+\}/.test(val);
|
|
106
|
+
if (Array.isArray(val))
|
|
107
|
+
return val.some(hasEmbeddedAliases);
|
|
108
|
+
if (typeof val === "object" && val !== null) {
|
|
109
|
+
return Object.values(val).some(hasEmbeddedAliases);
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
function resolveEmbeddedAliases(val, lookup, visited) {
|
|
114
|
+
const seen = visited ?? new Set();
|
|
115
|
+
if (typeof val === "string") {
|
|
116
|
+
if (/^\{[^{}]+\}$/.test(val.trim())) {
|
|
117
|
+
const ref = val.trim().slice(1, -1);
|
|
118
|
+
return resolveAlias(ref, lookup, new Set(seen), 20);
|
|
119
|
+
}
|
|
120
|
+
return val.replace(/\{([^{}]+)\}/g, (_m, ref) => {
|
|
121
|
+
const resolved = resolveAlias(ref, lookup, new Set(seen), 20);
|
|
122
|
+
if (typeof resolved === "string")
|
|
123
|
+
return resolved;
|
|
124
|
+
if (typeof resolved === "number" || typeof resolved === "boolean")
|
|
125
|
+
return String(resolved);
|
|
126
|
+
try {
|
|
127
|
+
return JSON.stringify(resolved);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return `{${ref}}`;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
if (Array.isArray(val))
|
|
135
|
+
return val.map(item => resolveEmbeddedAliases(item, lookup, seen));
|
|
136
|
+
if (typeof val === "object" && val !== null) {
|
|
137
|
+
const result = {};
|
|
138
|
+
for (const [k, v] of Object.entries(val)) {
|
|
139
|
+
result[k] = resolveEmbeddedAliases(v, lookup, seen);
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
return val;
|
|
144
|
+
}
|
|
145
|
+
export function evaluateMathExpressions(tokens) {
|
|
146
|
+
for (const t of tokens) {
|
|
147
|
+
t.resolvedValue = evalMathDeep(t.resolvedValue);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function evalMathDeep(val) {
|
|
151
|
+
if (typeof val === "string")
|
|
152
|
+
return tryEvalMath(val);
|
|
153
|
+
if (Array.isArray(val))
|
|
154
|
+
return val.map(evalMathDeep);
|
|
155
|
+
if (typeof val === "object" && val !== null) {
|
|
156
|
+
const result = {};
|
|
157
|
+
for (const [k, v] of Object.entries(val)) {
|
|
158
|
+
result[k] = evalMathDeep(v);
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
return val;
|
|
163
|
+
}
|
|
164
|
+
function tryEvalMath(val) {
|
|
165
|
+
if (/^\d+(\.\d+)?$/.test(val.trim()))
|
|
166
|
+
return val;
|
|
167
|
+
const mathPattern = /^[\d.]+\s*[*/+-]\s*[\d.]+(\s*[*/+-]\s*[\d.]+)*$/;
|
|
168
|
+
const stripped = val.replace(/px|rem|em|%|pt|dp|sp/g, "").trim();
|
|
169
|
+
if (mathPattern.test(stripped)) {
|
|
170
|
+
try {
|
|
171
|
+
const result = Function(`"use strict"; return (${stripped})`)();
|
|
172
|
+
const unit = val.match(/(px|rem|em|%|pt|dp|sp)/)?.[1] || "";
|
|
173
|
+
return unit ? `${result}${unit}` : result;
|
|
174
|
+
}
|
|
175
|
+
catch { /* not math */ }
|
|
176
|
+
}
|
|
177
|
+
const roundMatch = val.match(/^round\((.+)\)$/);
|
|
178
|
+
if (roundMatch) {
|
|
179
|
+
const inner = tryEvalMath(roundMatch[1]);
|
|
180
|
+
const num = typeof inner === "number" ? inner : parseFloat(String(inner));
|
|
181
|
+
if (!isNaN(num))
|
|
182
|
+
return Math.round(num);
|
|
183
|
+
}
|
|
184
|
+
return val;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAC5B,IAA6B,EAC7B,QAAgB;IAEhB,OAAO,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CACpB,GAA4B,EAC5B,aAAiC,EACjC,MAAc,EACd,QAAgB;IAEhB,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAI,GAAG,CAAC,KAAgB,IAAI,aAAa,CAAC;IAEzD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QAElF,MAAM,IAAI,GAAG,KAAgC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/C,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAgB,IAAI,SAAS,CAAC;QAErD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/E,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAE,GAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,MAAM,WAAW,GAAG,IAAI,CAAC,YAAkC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAkD,CAAC;YAE3E,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,IAAI,EAAE,GAAG;gBACT,IAAI,EAAE,CAAC,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,CAAc;gBAC/C,KAAK,EAAE,GAAG;gBACV,OAAO,EAAE,WAAW;gBACpB,SAAS;gBACT,WAAW;gBACX,UAAU;gBACV,UAAU,EAAE,QAAQ;aACrB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,mCAAmC,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,OAAO,CAAC;QAChE,IAAI,wCAAwC,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,WAAW,CAAC;IAC3E,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,IAAI,YAAY,IAAI,GAAG;YAAE,OAAO,YAAY,CAAC;QAC7C,IAAI,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG;YAAE,OAAO,QAAQ,CAAC;QAC1D,IAAI,OAAO,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG;YAAE,OAAO,QAAQ,CAAC;QACxE,IAAI,OAAO,IAAI,GAAG;YAAE,OAAO,UAAU,CAAC;QACtC,IAAI,MAAM,IAAI,GAAG;YAAE,OAAO,MAAM,CAAC;IACnC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAmB;IAEnB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAmB,EACnB,MAA8B;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACrC,KAAK,CAAC,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;aAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,KAAK,CAAC,aAAa,GAAG,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;QACpC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,SAAiB,EACjB,MAA8B,EAC9B,OAAoB,EACpB,QAAgB;IAEhB,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,SAAS,GAAG,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEvB,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,SAAS,GAAG,CAAC;IAErC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACvC,OAAO,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAY;IACtC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,GAA8B,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAAY,EACZ,MAA8B,EAC9B,OAAqB;IAErB,MAAM,IAAI,GAAG,OAAO,IAAI,IAAI,GAAG,EAAU,CAAC;IAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,GAAW,EAAE,EAAE;YACtD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAClD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3F,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,IAAI,GAAG,GAAG,CAAC;YAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3F,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IACzD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACrD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IACjD,MAAM,WAAW,GAAG,iDAAiD,CAAC;IACtE,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjE,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,yBAAyB,QAAQ,GAAG,CAAC,EAAY,CAAC;YAC1E,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5D,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAChD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export type Platform = "css" | "swiftui" | "kotlin";
|
|
2
|
+
export type SimpleTokenType = "color" | "dimension" | "sizing" | "spacing" | "borderRadius" | "borderWidth" | "opacity" | "number" | "fontFamily" | "fontWeight" | "fontStyle" | "fontSize" | "lineHeight" | "letterSpacing" | "paragraphSpacing" | "paragraphIndent" | "textCase" | "textDecoration" | "boolean" | "text" | "string" | "duration" | "cubicBezier" | "strokeStyle";
|
|
3
|
+
export type CompositeTokenType = "typography" | "shadow" | "border" | "fill" | "gradient" | "effects" | "blur" | "backdrop-blur" | "glass" | "grid" | "transition";
|
|
4
|
+
export type TokenType = SimpleTokenType | CompositeTokenType;
|
|
5
|
+
export type FlatToken = {
|
|
6
|
+
path: string;
|
|
7
|
+
name: string;
|
|
8
|
+
type: TokenType | string;
|
|
9
|
+
value: unknown;
|
|
10
|
+
resolvedValue?: unknown;
|
|
11
|
+
isAlias: boolean;
|
|
12
|
+
aliasPath?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
extensions?: Record<string, unknown>;
|
|
15
|
+
sourceFile?: string;
|
|
16
|
+
};
|
|
17
|
+
export type TransformConfig = {
|
|
18
|
+
source: SourceConfig;
|
|
19
|
+
platforms: Partial<Record<Platform, PlatformConfig>>;
|
|
20
|
+
settings?: GlobalSettings;
|
|
21
|
+
};
|
|
22
|
+
export type SourceConfig = {
|
|
23
|
+
tokenDir: string;
|
|
24
|
+
configFile?: string;
|
|
25
|
+
include?: string[];
|
|
26
|
+
exclude?: string[];
|
|
27
|
+
};
|
|
28
|
+
export type PlatformConfig = {
|
|
29
|
+
outputDir: string;
|
|
30
|
+
fileMapping?: FileMapping[];
|
|
31
|
+
prefix?: string;
|
|
32
|
+
codeSyntax?: CodeSyntaxConfig;
|
|
33
|
+
resolveAliases?: boolean;
|
|
34
|
+
splitEffects?: boolean;
|
|
35
|
+
showDescriptions?: boolean;
|
|
36
|
+
options?: Record<string, unknown>;
|
|
37
|
+
};
|
|
38
|
+
export type FileMapping = {
|
|
39
|
+
sources: string[];
|
|
40
|
+
output: string;
|
|
41
|
+
filter?: TokenFilter;
|
|
42
|
+
};
|
|
43
|
+
export type TokenFilter = {
|
|
44
|
+
types?: string[];
|
|
45
|
+
paths?: string[];
|
|
46
|
+
excludePaths?: string[];
|
|
47
|
+
};
|
|
48
|
+
export type CodeSyntaxConfig = {
|
|
49
|
+
variableTemplate?: string;
|
|
50
|
+
colorFormat?: "hex" | "rgb" | "rgba" | "hsl";
|
|
51
|
+
dimensionUnit?: string;
|
|
52
|
+
prefix?: string;
|
|
53
|
+
};
|
|
54
|
+
export type GlobalSettings = {
|
|
55
|
+
remBase?: number;
|
|
56
|
+
colorFormat?: "hex" | "rgb" | "rgba" | "hsl";
|
|
57
|
+
verbose?: boolean;
|
|
58
|
+
};
|
|
59
|
+
export type TransformResult = {
|
|
60
|
+
platform: Platform;
|
|
61
|
+
files: OutputFile[];
|
|
62
|
+
tokenCount: number;
|
|
63
|
+
errors: string[];
|
|
64
|
+
};
|
|
65
|
+
export type OutputFile = {
|
|
66
|
+
path: string;
|
|
67
|
+
content: string;
|
|
68
|
+
tokenCount: number;
|
|
69
|
+
};
|
|
70
|
+
export type CollectionConfig = {
|
|
71
|
+
name: string;
|
|
72
|
+
enabled: boolean;
|
|
73
|
+
modes: ModeConfig[];
|
|
74
|
+
ref?: {
|
|
75
|
+
type: string;
|
|
76
|
+
collection: string;
|
|
77
|
+
}[];
|
|
78
|
+
};
|
|
79
|
+
export type ModeConfig = {
|
|
80
|
+
name: string;
|
|
81
|
+
enabled: boolean;
|
|
82
|
+
files: Record<string, string>;
|
|
83
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { TransformConfig, TransformResult } from "./types.js";
|
|
2
|
+
export declare function runTransform(config: TransformConfig): Promise<TransformResult[]>;
|
|
3
|
+
export declare function writeOutputFiles(results: TransformResult[]): {
|
|
4
|
+
written: number;
|
|
5
|
+
errors: string[];
|
|
6
|
+
};
|