@sxl-studio/token-transformer 1.0.0 → 2.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.
Files changed (93) hide show
  1. package/README.en.md +77 -608
  2. package/README.md +77 -685
  3. package/config/sxl-transform.config.yaml +120 -0
  4. package/dist/cli.d.ts +1 -1
  5. package/dist/cli.js +411 -141
  6. package/dist/cli.js.map +1 -1
  7. package/dist/config/loader.d.ts +6 -0
  8. package/dist/config/loader.js +160 -0
  9. package/dist/config/loader.js.map +1 -0
  10. package/dist/config/schema.d.ts +847 -0
  11. package/dist/config/schema.js +123 -0
  12. package/dist/config/schema.js.map +1 -0
  13. package/dist/core/color-modifiers.d.ts +31 -0
  14. package/dist/core/color-modifiers.js +289 -0
  15. package/dist/core/color-modifiers.js.map +1 -0
  16. package/dist/core/color-parser.d.ts +24 -0
  17. package/dist/core/color-parser.js +281 -0
  18. package/dist/core/color-parser.js.map +1 -0
  19. package/dist/core/debug-report.d.ts +11 -0
  20. package/dist/core/debug-report.js +161 -0
  21. package/dist/core/debug-report.js.map +1 -0
  22. package/dist/core/incremental.d.ts +18 -0
  23. package/dist/core/incremental.js +105 -0
  24. package/dist/core/incremental.js.map +1 -0
  25. package/dist/core/math.d.ts +3 -0
  26. package/dist/core/math.js +261 -0
  27. package/dist/core/math.js.map +1 -0
  28. package/dist/core/parser.d.ts +4 -3
  29. package/dist/core/parser.js +68 -172
  30. package/dist/core/parser.js.map +1 -1
  31. package/dist/core/resolver.d.ts +26 -0
  32. package/dist/core/resolver.js +431 -0
  33. package/dist/core/resolver.js.map +1 -0
  34. package/dist/core/token-loader.d.ts +11 -0
  35. package/dist/core/token-loader.js +380 -0
  36. package/dist/core/token-loader.js.map +1 -0
  37. package/dist/core/token-parser.d.ts +9 -0
  38. package/dist/core/token-parser.js +138 -0
  39. package/dist/core/token-parser.js.map +1 -0
  40. package/dist/core/token-types.d.ts +7 -0
  41. package/dist/core/token-types.js +132 -0
  42. package/dist/core/token-types.js.map +1 -0
  43. package/dist/core/types.d.ts +154 -63
  44. package/dist/core/writer.d.ts +18 -5
  45. package/dist/core/writer.js +545 -91
  46. package/dist/core/writer.js.map +1 -1
  47. package/dist/emit/css.d.ts +2 -0
  48. package/dist/emit/css.js +538 -0
  49. package/dist/emit/css.js.map +1 -0
  50. package/dist/emit/kotlin.d.ts +2 -0
  51. package/dist/emit/kotlin.js +406 -0
  52. package/dist/emit/kotlin.js.map +1 -0
  53. package/dist/emit/shared.d.ts +13 -0
  54. package/dist/emit/shared.js +127 -0
  55. package/dist/emit/shared.js.map +1 -0
  56. package/dist/emit/swift.d.ts +2 -0
  57. package/dist/emit/swift.js +432 -0
  58. package/dist/emit/swift.js.map +1 -0
  59. package/dist/emit/typography.d.ts +17 -0
  60. package/dist/emit/typography.js +132 -0
  61. package/dist/emit/typography.js.map +1 -0
  62. package/dist/emit/xml.d.ts +2 -0
  63. package/dist/emit/xml.js +311 -0
  64. package/dist/emit/xml.js.map +1 -0
  65. package/dist/index.d.ts +15 -6
  66. package/dist/index.js +13 -5
  67. package/dist/index.js.map +1 -1
  68. package/dist/transformers/css.d.ts +1 -1
  69. package/dist/transformers/css.js +13 -482
  70. package/dist/transformers/css.js.map +1 -1
  71. package/dist/transformers/kotlin.d.ts +2 -2
  72. package/dist/transformers/kotlin.js +14 -442
  73. package/dist/transformers/kotlin.js.map +1 -1
  74. package/dist/transformers/swiftui.d.ts +2 -2
  75. package/dist/transformers/swiftui.js +14 -433
  76. package/dist/transformers/swiftui.js.map +1 -1
  77. package/dist/utils/color.d.ts +7 -5
  78. package/dist/utils/color.js +90 -86
  79. package/dist/utils/color.js.map +1 -1
  80. package/dist/utils/dimension.d.ts +8 -5
  81. package/dist/utils/dimension.js +54 -52
  82. package/dist/utils/dimension.js.map +1 -1
  83. package/dist/utils/naming.d.ts +10 -12
  84. package/dist/utils/naming.js +102 -44
  85. package/dist/utils/naming.js.map +1 -1
  86. package/package.json +30 -10
  87. package/config.example.json +0 -45
  88. package/dist/core/loader.d.ts +0 -8
  89. package/dist/core/loader.js +0 -105
  90. package/dist/core/loader.js.map +0 -1
  91. package/dist/transformers/vue3.d.ts +0 -28
  92. package/dist/transformers/vue3.js +0 -534
  93. package/dist/transformers/vue3.js.map +0 -1
package/package.json CHANGED
@@ -1,40 +1,60 @@
1
1
  {
2
2
  "name": "@sxl-studio/token-transformer",
3
- "version": "1.0.0",
4
- "description": "Transform DTCG design tokens to CSS, SwiftUI, and Kotlin",
3
+ "version": "2.0.0",
4
+ "description": "Transform DTCG design tokens to CSS, Swift, Kotlin, and Android XML",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "files": [
8
8
  "dist",
9
9
  "README.md",
10
10
  "README.en.md",
11
- "config.example.json"
11
+ "config/sxl-transform.config.yaml"
12
12
  ],
13
13
  "bin": {
14
14
  "sxl-transform": "dist/cli.js"
15
15
  },
16
16
  "scripts": {
17
17
  "prepublishOnly": "npm run build && npm test",
18
- "build": "tsc",
18
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.json",
19
19
  "start": "node dist/cli.js",
20
20
  "dev": "tsx src/cli.ts",
21
21
  "test": "vitest run",
22
- "lint": "tsc --noEmit"
22
+ "eslint": "eslint \"src/**/*.ts\" --max-warnings=0",
23
+ "typecheck": "tsc -p tsconfig.json --noEmit",
24
+ "lint": "npm run eslint && npm run typecheck",
25
+ "check": "npm run eslint && npm run typecheck && npm run test && npm run build"
23
26
  },
24
- "keywords": ["design-tokens", "dtcg", "css", "swiftui", "kotlin", "figma"],
27
+ "keywords": [
28
+ "design-tokens",
29
+ "dtcg",
30
+ "css",
31
+ "swift",
32
+ "kotlin",
33
+ "android",
34
+ "xml",
35
+ "figma"
36
+ ],
25
37
  "license": "MIT",
26
38
  "publishConfig": {
27
39
  "access": "public"
28
40
  },
29
41
  "devDependencies": {
30
- "typescript": "^5.4.0",
42
+ "@eslint/js": "^9.27.0",
43
+ "@types/js-yaml": "^4.0.9",
31
44
  "@types/node": "^20.11.0",
45
+ "eslint": "^9.27.0",
46
+ "globals": "^15.15.0",
47
+ "typescript": "^5.4.0",
48
+ "typescript-eslint": "^8.33.1",
32
49
  "vitest": "^3.0.0"
33
50
  },
34
51
  "dependencies": {
35
- "ora": "^8.0.1",
36
52
  "chalk": "^5.3.0",
37
53
  "glob": "^10.3.10",
38
- "tsx": "^4.7.0"
54
+ "js-yaml": "^4.1.0",
55
+ "minimatch": "^9.0.5",
56
+ "ora": "^8.0.1",
57
+ "tsx": "^4.7.0",
58
+ "zod": "^3.25.42"
39
59
  }
40
- }
60
+ }
@@ -1,45 +0,0 @@
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
- }
@@ -1,8 +0,0 @@
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[]>;
@@ -1,105 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- type CompositionJSON = {
2
- $type: "composition";
3
- name: string;
4
- props: Record<string, string[]>;
5
- structure: StructureNode;
6
- componentProperties: Record<string, ComponentProperty>;
7
- styles: Record<string, Record<string, unknown>>;
8
- adapters: Record<string, Record<string, Record<string, unknown>>>;
9
- };
10
- type StructureNode = {
11
- tag: "FRAME" | "TEXT" | "INSTANCE" | "GROUP" | "VECTOR";
12
- class: string;
13
- name?: string;
14
- content?: string;
15
- children?: StructureNode[];
16
- ref?: {
17
- component: string;
18
- properties?: Record<string, string>;
19
- };
20
- };
21
- type ComponentProperty = {
22
- type: "TEXT" | "BOOLEAN" | "INSTANCE_SWAP" | "VARIANT";
23
- layer: string;
24
- defaultValue: unknown;
25
- };
26
- export declare function transformCompositionFile(filePath: string, outputDir: string): string;
27
- export declare function generateVueSFC(comp: CompositionJSON): string;
28
- export {};