@buoy-design/core 0.1.1 → 0.1.2

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 (109) hide show
  1. package/dist/analysis/audit.d.ts +47 -0
  2. package/dist/analysis/audit.d.ts.map +1 -0
  3. package/dist/analysis/audit.js +168 -0
  4. package/dist/analysis/audit.js.map +1 -0
  5. package/dist/analysis/index.d.ts +1 -0
  6. package/dist/analysis/index.d.ts.map +1 -1
  7. package/dist/analysis/index.js +2 -0
  8. package/dist/analysis/index.js.map +1 -1
  9. package/dist/analysis/semantic-diff.d.ts.map +1 -1
  10. package/dist/analysis/semantic-diff.js +2 -1
  11. package/dist/analysis/semantic-diff.js.map +1 -1
  12. package/dist/analysis/token-suggestions.d.ts +8 -1
  13. package/dist/analysis/token-suggestions.d.ts.map +1 -1
  14. package/dist/analysis/token-suggestions.js +116 -10
  15. package/dist/analysis/token-suggestions.js.map +1 -1
  16. package/dist/extraction/css-parser.d.ts +51 -0
  17. package/dist/extraction/css-parser.d.ts.map +1 -0
  18. package/dist/extraction/css-parser.js +303 -0
  19. package/dist/extraction/css-parser.js.map +1 -0
  20. package/dist/extraction/index.d.ts +2 -0
  21. package/dist/extraction/index.d.ts.map +1 -0
  22. package/dist/extraction/index.js +2 -0
  23. package/dist/extraction/index.js.map +1 -0
  24. package/dist/graph/builder.d.ts +118 -0
  25. package/dist/graph/builder.d.ts.map +1 -0
  26. package/dist/graph/builder.js +328 -0
  27. package/dist/graph/builder.js.map +1 -0
  28. package/dist/graph/collectors/git.d.ts +90 -0
  29. package/dist/graph/collectors/git.d.ts.map +1 -0
  30. package/dist/graph/collectors/git.js +253 -0
  31. package/dist/graph/collectors/git.js.map +1 -0
  32. package/dist/graph/collectors/imports.d.ts +55 -0
  33. package/dist/graph/collectors/imports.d.ts.map +1 -0
  34. package/dist/graph/collectors/imports.js +230 -0
  35. package/dist/graph/collectors/imports.js.map +1 -0
  36. package/dist/graph/collectors/index.d.ts +9 -0
  37. package/dist/graph/collectors/index.d.ts.map +1 -0
  38. package/dist/graph/collectors/index.js +12 -0
  39. package/dist/graph/collectors/index.js.map +1 -0
  40. package/dist/graph/collectors/usages.d.ts +68 -0
  41. package/dist/graph/collectors/usages.d.ts.map +1 -0
  42. package/dist/graph/collectors/usages.js +244 -0
  43. package/dist/graph/collectors/usages.js.map +1 -0
  44. package/dist/graph/index.d.ts +11 -0
  45. package/dist/graph/index.d.ts.map +1 -0
  46. package/dist/graph/index.js +29 -0
  47. package/dist/graph/index.js.map +1 -0
  48. package/dist/graph/queries.d.ts +81 -0
  49. package/dist/graph/queries.d.ts.map +1 -0
  50. package/dist/graph/queries.js +379 -0
  51. package/dist/graph/queries.js.map +1 -0
  52. package/dist/graph/types.d.ts +135 -0
  53. package/dist/graph/types.d.ts.map +1 -0
  54. package/dist/graph/types.js +8 -0
  55. package/dist/graph/types.js.map +1 -0
  56. package/dist/index.d.ts +4 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +8 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/models/drift.d.ts +6 -0
  61. package/dist/models/drift.d.ts.map +1 -1
  62. package/dist/models/drift.js +17 -0
  63. package/dist/models/drift.js.map +1 -1
  64. package/dist/models/index.d.ts +3 -3
  65. package/dist/models/index.d.ts.map +1 -1
  66. package/dist/models/index.js +2 -2
  67. package/dist/models/index.js.map +1 -1
  68. package/dist/models/token.d.ts +57 -0
  69. package/dist/models/token.d.ts.map +1 -1
  70. package/dist/models/token.js +9 -0
  71. package/dist/models/token.js.map +1 -1
  72. package/dist/tokenization/generator.d.ts +49 -0
  73. package/dist/tokenization/generator.d.ts.map +1 -0
  74. package/dist/tokenization/generator.js +886 -0
  75. package/dist/tokenization/generator.js.map +1 -0
  76. package/dist/tokenization/index.d.ts +2 -0
  77. package/dist/tokenization/index.d.ts.map +1 -0
  78. package/dist/tokenization/index.js +2 -0
  79. package/dist/tokenization/index.js.map +1 -0
  80. package/dist/tokens/comparison.d.ts +30 -0
  81. package/dist/tokens/comparison.d.ts.map +1 -0
  82. package/dist/tokens/comparison.js +142 -0
  83. package/dist/tokens/comparison.js.map +1 -0
  84. package/dist/tokens/index.d.ts +3 -0
  85. package/dist/tokens/index.d.ts.map +1 -0
  86. package/dist/tokens/index.js +5 -0
  87. package/dist/tokens/index.js.map +1 -0
  88. package/dist/tokens/parser.d.ts +11 -0
  89. package/dist/tokens/parser.d.ts.map +1 -0
  90. package/dist/tokens/parser.js +268 -0
  91. package/dist/tokens/parser.js.map +1 -0
  92. package/package.json +12 -8
  93. package/LICENSE +0 -21
  94. package/dist/analysis/semantic-diff.test.d.ts +0 -2
  95. package/dist/analysis/semantic-diff.test.d.ts.map +0 -1
  96. package/dist/analysis/semantic-diff.test.js +0 -188
  97. package/dist/analysis/semantic-diff.test.js.map +0 -1
  98. package/dist/models/component.test.d.ts +0 -2
  99. package/dist/models/component.test.d.ts.map +0 -1
  100. package/dist/models/component.test.js +0 -55
  101. package/dist/models/component.test.js.map +0 -1
  102. package/dist/models/drift.test.d.ts +0 -2
  103. package/dist/models/drift.test.d.ts.map +0 -1
  104. package/dist/models/drift.test.js +0 -38
  105. package/dist/models/drift.test.js.map +0 -1
  106. package/dist/models/token.test.d.ts +0 -2
  107. package/dist/models/token.test.d.ts.map +0 -1
  108. package/dist/models/token.test.js +0 -168
  109. package/dist/models/token.test.js.map +0 -1
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=semantic-diff.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semantic-diff.test.d.ts","sourceRoot":"","sources":["../../src/analysis/semantic-diff.test.ts"],"names":[],"mappings":""}
@@ -1,188 +0,0 @@
1
- // packages/core/src/analysis/semantic-diff.test.ts
2
- import { describe, it, expect } from 'vitest';
3
- import { SemanticDiffEngine } from './semantic-diff.js';
4
- describe('SemanticDiffEngine', () => {
5
- const engine = new SemanticDiffEngine();
6
- describe('checkFrameworkSprawl', () => {
7
- it('returns null for single framework', () => {
8
- const result = engine.checkFrameworkSprawl([
9
- { name: 'react', version: '18.2.0' },
10
- ]);
11
- expect(result).toBeNull();
12
- });
13
- it('returns null for empty frameworks', () => {
14
- const result = engine.checkFrameworkSprawl([]);
15
- expect(result).toBeNull();
16
- });
17
- it('detects sprawl with two UI frameworks', () => {
18
- const result = engine.checkFrameworkSprawl([
19
- { name: 'react', version: '18.2.0' },
20
- { name: 'vue', version: '3.0.0' },
21
- ]);
22
- expect(result).not.toBeNull();
23
- expect(result?.type).toBe('framework-sprawl');
24
- expect(result?.severity).toBe('warning');
25
- expect(result?.message).toContain('2 UI frameworks');
26
- });
27
- it('ignores non-UI frameworks', () => {
28
- const result = engine.checkFrameworkSprawl([
29
- { name: 'react', version: '18.2.0' },
30
- { name: 'express', version: '4.0.0' },
31
- ]);
32
- expect(result).toBeNull();
33
- });
34
- it('detects sprawl with meta-frameworks', () => {
35
- const result = engine.checkFrameworkSprawl([
36
- { name: 'nextjs', version: '14.0.0' },
37
- { name: 'nuxt', version: '3.0.0' },
38
- ]);
39
- expect(result).not.toBeNull();
40
- expect(result?.message).toContain('nextjs');
41
- expect(result?.message).toContain('nuxt');
42
- });
43
- });
44
- describe('compareComponents', () => {
45
- it('matches components with exact names', () => {
46
- const source = [createMockComponent('Button', 'react')];
47
- const target = [createMockComponent('Button', 'figma')];
48
- const result = engine.compareComponents(source, target);
49
- expect(result.matches).toHaveLength(1);
50
- expect(result.matches[0].matchType).toBe('exact');
51
- expect(result.matches[0].confidence).toBe(1);
52
- expect(result.orphanedSource).toHaveLength(0);
53
- expect(result.orphanedTarget).toHaveLength(0);
54
- });
55
- it('identifies orphaned source components', () => {
56
- const source = [
57
- createMockComponent('Button', 'react'),
58
- createMockComponent('Card', 'react'),
59
- ];
60
- const target = [createMockComponent('Button', 'figma')];
61
- const result = engine.compareComponents(source, target);
62
- expect(result.orphanedSource).toHaveLength(1);
63
- expect(result.orphanedSource[0].name).toBe('Card');
64
- });
65
- it('identifies orphaned target components', () => {
66
- const source = [createMockComponent('Button', 'react')];
67
- const target = [
68
- createMockComponent('Button', 'figma'),
69
- createMockComponent('Modal', 'figma'),
70
- ];
71
- const result = engine.compareComponents(source, target);
72
- expect(result.orphanedTarget).toHaveLength(1);
73
- expect(result.orphanedTarget[0].name).toBe('Modal');
74
- });
75
- it('generates drift signals for orphaned components', () => {
76
- const source = [createMockComponent('UniqueComponent', 'react')];
77
- const target = [];
78
- const result = engine.compareComponents(source, target);
79
- expect(result.drifts).toHaveLength(1);
80
- expect(result.drifts[0].type).toBe('orphaned-component');
81
- });
82
- });
83
- describe('analyzeComponents', () => {
84
- describe('deprecated patterns', () => {
85
- it('detects deprecated components', () => {
86
- const components = [
87
- createMockComponentWithMetadata('OldButton', { deprecated: true }),
88
- ];
89
- const result = engine.analyzeComponents(components, { checkDeprecated: true });
90
- expect(result.drifts).toHaveLength(1);
91
- expect(result.drifts[0].type).toBe('deprecated-pattern');
92
- expect(result.drifts[0].severity).toBe('warning');
93
- });
94
- it('includes deprecation reason in suggestions', () => {
95
- const components = [
96
- createMockComponentWithMetadata('OldButton', {
97
- deprecated: true,
98
- deprecationReason: 'Use NewButton instead',
99
- }),
100
- ];
101
- const result = engine.analyzeComponents(components, { checkDeprecated: true });
102
- expect(result.drifts[0].details.suggestions).toContain('Use NewButton instead');
103
- });
104
- });
105
- describe('hardcoded values', () => {
106
- it('detects hardcoded colors', () => {
107
- const components = [
108
- createMockComponentWithMetadata('Button', {
109
- hardcodedValues: [
110
- { type: 'color', value: '#ff0000', property: 'backgroundColor', location: 'line 10' },
111
- ],
112
- }),
113
- ];
114
- const result = engine.analyzeComponents(components, {});
115
- const colorDrift = result.drifts.find(d => d.type === 'hardcoded-value' && d.message.includes('color'));
116
- expect(colorDrift).toBeDefined();
117
- expect(colorDrift?.severity).toBe('warning');
118
- });
119
- });
120
- });
121
- describe('compareTokens', () => {
122
- it('matches tokens with same names', () => {
123
- const source = [createMockToken('--primary-color', '#0066cc', 'css')];
124
- const target = [createMockToken('--primary-color', '#0066cc', 'figma')];
125
- const result = engine.compareTokens(source, target);
126
- expect(result.matches).toHaveLength(1);
127
- expect(result.drifts).toHaveLength(0);
128
- });
129
- it('detects value divergence', () => {
130
- const source = [createMockToken('--primary-color', '#0066cc', 'css')];
131
- const target = [createMockToken('--primary-color', '#ff0000', 'figma')];
132
- const result = engine.compareTokens(source, target);
133
- expect(result.matches).toHaveLength(1);
134
- expect(result.drifts).toHaveLength(1);
135
- expect(result.drifts[0].type).toBe('value-divergence');
136
- });
137
- it('identifies orphaned tokens', () => {
138
- const source = [
139
- createMockToken('--primary-color', '#0066cc', 'css'),
140
- createMockToken('--secondary-color', '#666666', 'css'),
141
- ];
142
- const target = [createMockToken('--primary-color', '#0066cc', 'figma')];
143
- const result = engine.compareTokens(source, target);
144
- expect(result.orphanedSource).toHaveLength(1);
145
- expect(result.orphanedSource[0].name).toBe('--secondary-color');
146
- });
147
- });
148
- });
149
- // Helper functions
150
- function createMockComponent(name, type) {
151
- const source = type === 'react'
152
- ? { type: 'react', path: `src/${name}.tsx`, exportName: name }
153
- : { type: 'figma', fileKey: 'abc', nodeId: '1:1' };
154
- return {
155
- id: `${type}:${name}`,
156
- name,
157
- source,
158
- props: [],
159
- variants: [],
160
- tokens: [],
161
- dependencies: [],
162
- metadata: {},
163
- scannedAt: new Date(),
164
- };
165
- }
166
- function createMockComponentWithMetadata(name, metadata) {
167
- return {
168
- ...createMockComponent(name, 'react'),
169
- metadata,
170
- };
171
- }
172
- function createMockToken(name, hexValue, type) {
173
- const source = type === 'css'
174
- ? { type: 'css', path: 'tokens.css' }
175
- : { type: 'figma', fileKey: 'abc' };
176
- return {
177
- id: `${type}:${name}`,
178
- name,
179
- value: { type: 'color', hex: hexValue },
180
- category: 'color',
181
- source,
182
- aliases: [],
183
- usedBy: [],
184
- metadata: {},
185
- scannedAt: new Date(),
186
- };
187
- }
188
- //# sourceMappingURL=semantic-diff.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semantic-diff.test.js","sourceRoot":"","sources":["../../src/analysis/semantic-diff.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=component.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component.test.d.ts","sourceRoot":"","sources":["../../src/models/component.test.ts"],"names":[],"mappings":""}
@@ -1,55 +0,0 @@
1
- // packages/core/src/models/component.test.ts
2
- import { describe, it, expect } from 'vitest';
3
- import { createComponentId, normalizeComponentName } from './component.js';
4
- describe('component model helpers', () => {
5
- describe('createComponentId', () => {
6
- it('creates id for React component', () => {
7
- const source = {
8
- type: 'react',
9
- path: 'src/Button.tsx',
10
- exportName: 'Button',
11
- };
12
- const id = createComponentId(source, 'Button');
13
- expect(id).toBe('react:src/Button.tsx:Button');
14
- });
15
- it('creates id for Figma component', () => {
16
- const source = {
17
- type: 'figma',
18
- fileKey: 'abc123',
19
- nodeId: '1:23',
20
- };
21
- const id = createComponentId(source, 'Button');
22
- expect(id).toBe('figma:abc123:1:23');
23
- });
24
- it('creates id for Vue component', () => {
25
- const source = {
26
- type: 'vue',
27
- path: 'src/Button.vue',
28
- exportName: 'default',
29
- };
30
- const id = createComponentId(source, 'Button');
31
- expect(id).toBe('vue:src/Button.vue:default');
32
- });
33
- });
34
- describe('normalizeComponentName', () => {
35
- it('lowercases names', () => {
36
- expect(normalizeComponentName('Button')).toBe('button');
37
- });
38
- it('removes hyphens', () => {
39
- expect(normalizeComponentName('my-button')).toBe('mybutton');
40
- });
41
- it('removes underscores', () => {
42
- expect(normalizeComponentName('my_button')).toBe('mybutton');
43
- });
44
- it('removes spaces', () => {
45
- expect(normalizeComponentName('My Button')).toBe('mybutton');
46
- });
47
- it('removes Component suffix', () => {
48
- expect(normalizeComponentName('ButtonComponent')).toBe('button');
49
- });
50
- it('handles complex names', () => {
51
- expect(normalizeComponentName('Primary-Button_Component')).toBe('primarybutton');
52
- });
53
- });
54
- });
55
- //# sourceMappingURL=component.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component.test.js","sourceRoot":"","sources":["../../src/models/component.test.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAG3E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAgB;gBAC1B,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,gBAAgB;gBACtB,UAAU,EAAE,QAAQ;aACrB,CAAC;YACF,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC/C,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAgB;gBAC1B,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,MAAM;aACf,CAAC;YACF,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC/C,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,MAAM,GAAc;gBACxB,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,gBAAgB;gBACtB,UAAU,EAAE,SAAS;aACtB,CAAC;YACF,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC/C,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACzB,MAAM,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=drift.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"drift.test.d.ts","sourceRoot":"","sources":["../../src/models/drift.test.ts"],"names":[],"mappings":""}
@@ -1,38 +0,0 @@
1
- // packages/core/src/models/drift.test.ts
2
- import { describe, it, expect } from 'vitest';
3
- import { createDriftId, getSeverityWeight, getDefaultSeverity, } from './drift.js';
4
- describe('drift model helpers', () => {
5
- describe('createDriftId', () => {
6
- it('creates id with source only', () => {
7
- const id = createDriftId('hardcoded-value', 'component-123');
8
- expect(id).toBe('drift:hardcoded-value:component-123');
9
- });
10
- it('creates id with source and target', () => {
11
- const id = createDriftId('semantic-mismatch', 'src-1', 'tgt-2');
12
- expect(id).toBe('drift:semantic-mismatch:src-1:tgt-2');
13
- });
14
- });
15
- describe('getSeverityWeight', () => {
16
- it('returns 3 for critical', () => {
17
- expect(getSeverityWeight('critical')).toBe(3);
18
- });
19
- it('returns 2 for warning', () => {
20
- expect(getSeverityWeight('warning')).toBe(2);
21
- });
22
- it('returns 1 for info', () => {
23
- expect(getSeverityWeight('info')).toBe(1);
24
- });
25
- });
26
- describe('getDefaultSeverity', () => {
27
- it('returns critical for accessibility-conflict', () => {
28
- expect(getDefaultSeverity('accessibility-conflict')).toBe('critical');
29
- });
30
- it('returns warning for hardcoded-value', () => {
31
- expect(getDefaultSeverity('hardcoded-value')).toBe('warning');
32
- });
33
- it('returns info for naming-inconsistency', () => {
34
- expect(getDefaultSeverity('naming-inconsistency')).toBe('info');
35
- });
36
- });
37
- });
38
- //# sourceMappingURL=drift.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"drift.test.js","sourceRoot":"","sources":["../../src/models/drift.test.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,EAAE,GAAG,aAAa,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;YAC7D,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,EAAE,GAAG,aAAa,CAAC,mBAAmB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=token.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token.test.d.ts","sourceRoot":"","sources":["../../src/models/token.test.ts"],"names":[],"mappings":""}
@@ -1,168 +0,0 @@
1
- // packages/core/src/models/token.test.ts
2
- import { describe, it, expect } from 'vitest';
3
- import { createTokenId, normalizeTokenName, tokensMatch, } from './token.js';
4
- describe('token model helpers', () => {
5
- describe('createTokenId', () => {
6
- it('creates id for CSS token', () => {
7
- const source = { type: 'css', path: 'variables.css' };
8
- const id = createTokenId(source, '--primary-color');
9
- expect(id).toBe('css:variables.css:--primary-color');
10
- });
11
- it('creates id for JSON token', () => {
12
- const source = { type: 'json', path: 'tokens.json', key: 'colors' };
13
- const id = createTokenId(source, 'primary');
14
- expect(id).toBe('json:tokens.json:primary');
15
- });
16
- it('creates id for SCSS token', () => {
17
- const source = { type: 'scss', path: '_variables.scss', variableName: '$primary' };
18
- const id = createTokenId(source, '$primary');
19
- expect(id).toBe('scss:_variables.scss:$primary');
20
- });
21
- it('creates id for Figma token with variableId', () => {
22
- const source = { type: 'figma', fileKey: 'abc123', variableId: 'var-456' };
23
- const id = createTokenId(source, 'Primary/500');
24
- expect(id).toBe('figma:abc123:var-456');
25
- });
26
- it('creates id for Figma token without variableId (uses name)', () => {
27
- const source = { type: 'figma', fileKey: 'abc123' };
28
- const id = createTokenId(source, 'Primary/500');
29
- expect(id).toBe('figma:abc123:Primary/500');
30
- });
31
- });
32
- describe('normalizeTokenName', () => {
33
- it('lowercases names', () => {
34
- expect(normalizeTokenName('PrimaryColor')).toBe('primarycolor');
35
- });
36
- it('removes hyphens', () => {
37
- expect(normalizeTokenName('--primary-color')).toBe('primarycolor');
38
- });
39
- it('removes underscores', () => {
40
- expect(normalizeTokenName('primary_color')).toBe('primarycolor');
41
- });
42
- it('removes spaces', () => {
43
- expect(normalizeTokenName('primary color')).toBe('primarycolor');
44
- });
45
- it('removes dots', () => {
46
- expect(normalizeTokenName('color.primary.500')).toBe('colorprimary500');
47
- });
48
- it('normalizes complex names consistently', () => {
49
- // These should all normalize to the same value
50
- expect(normalizeTokenName('--spacing-lg')).toBe('spacinglg');
51
- expect(normalizeTokenName('spacing_lg')).toBe('spacinglg');
52
- expect(normalizeTokenName('spacing.lg')).toBe('spacinglg');
53
- expect(normalizeTokenName('SPACING-LG')).toBe('spacinglg');
54
- });
55
- });
56
- describe('tokensMatch', () => {
57
- describe('color tokens', () => {
58
- it('matches identical colors', () => {
59
- const a = { type: 'color', hex: '#ffffff' };
60
- const b = { type: 'color', hex: '#ffffff' };
61
- expect(tokensMatch(a, b)).toBe(true);
62
- });
63
- it('matches equivalent hex colors (case insensitive)', () => {
64
- const a = { type: 'color', hex: '#FFFFFF' };
65
- const b = { type: 'color', hex: '#ffffff' };
66
- expect(tokensMatch(a, b)).toBe(true);
67
- });
68
- it('detects different colors', () => {
69
- const a = { type: 'color', hex: '#ffffff' };
70
- const b = { type: 'color', hex: '#000000' };
71
- expect(tokensMatch(a, b)).toBe(false);
72
- });
73
- });
74
- describe('spacing tokens', () => {
75
- it('matches identical spacing', () => {
76
- const a = { type: 'spacing', value: 16, unit: 'px' };
77
- const b = { type: 'spacing', value: 16, unit: 'px' };
78
- expect(tokensMatch(a, b)).toBe(true);
79
- });
80
- it('detects different spacing values', () => {
81
- const a = { type: 'spacing', value: 16, unit: 'px' };
82
- const b = { type: 'spacing', value: 24, unit: 'px' };
83
- expect(tokensMatch(a, b)).toBe(false);
84
- });
85
- it('detects different spacing units', () => {
86
- const a = { type: 'spacing', value: 16, unit: 'px' };
87
- const b = { type: 'spacing', value: 16, unit: 'rem' };
88
- expect(tokensMatch(a, b)).toBe(false);
89
- });
90
- });
91
- describe('typography tokens', () => {
92
- it('matches identical typography', () => {
93
- const a = { type: 'typography', fontFamily: 'Inter', fontSize: 16, fontWeight: 400 };
94
- const b = { type: 'typography', fontFamily: 'Inter', fontSize: 16, fontWeight: 400 };
95
- expect(tokensMatch(a, b)).toBe(true);
96
- });
97
- it('detects different font family', () => {
98
- const a = { type: 'typography', fontFamily: 'Inter', fontSize: 16, fontWeight: 400 };
99
- const b = { type: 'typography', fontFamily: 'Roboto', fontSize: 16, fontWeight: 400 };
100
- expect(tokensMatch(a, b)).toBe(false);
101
- });
102
- it('detects different font size', () => {
103
- const a = { type: 'typography', fontFamily: 'Inter', fontSize: 16, fontWeight: 400 };
104
- const b = { type: 'typography', fontFamily: 'Inter', fontSize: 18, fontWeight: 400 };
105
- expect(tokensMatch(a, b)).toBe(false);
106
- });
107
- it('detects different font weight', () => {
108
- const a = { type: 'typography', fontFamily: 'Inter', fontSize: 16, fontWeight: 400 };
109
- const b = { type: 'typography', fontFamily: 'Inter', fontSize: 16, fontWeight: 700 };
110
- expect(tokensMatch(a, b)).toBe(false);
111
- });
112
- });
113
- describe('shadow tokens', () => {
114
- it('matches identical shadows', () => {
115
- const a = { type: 'shadow', x: 0, y: 4, blur: 8, spread: 0, color: '#000000' };
116
- const b = { type: 'shadow', x: 0, y: 4, blur: 8, spread: 0, color: '#000000' };
117
- expect(tokensMatch(a, b)).toBe(true);
118
- });
119
- it('matches shadows with case-insensitive colors', () => {
120
- const a = { type: 'shadow', x: 0, y: 4, blur: 8, spread: 0, color: '#AABBCC' };
121
- const b = { type: 'shadow', x: 0, y: 4, blur: 8, spread: 0, color: '#aabbcc' };
122
- expect(tokensMatch(a, b)).toBe(true);
123
- });
124
- it('detects different shadow properties', () => {
125
- const a = { type: 'shadow', x: 0, y: 4, blur: 8, spread: 0, color: '#000000' };
126
- const b = { type: 'shadow', x: 0, y: 8, blur: 8, spread: 0, color: '#000000' };
127
- expect(tokensMatch(a, b)).toBe(false);
128
- });
129
- });
130
- describe('border tokens', () => {
131
- it('matches identical borders', () => {
132
- const a = { type: 'border', width: 1, style: 'solid', color: '#000000' };
133
- const b = { type: 'border', width: 1, style: 'solid', color: '#000000' };
134
- expect(tokensMatch(a, b)).toBe(true);
135
- });
136
- it('matches borders with case-insensitive colors', () => {
137
- const a = { type: 'border', width: 1, style: 'solid', color: '#AABBCC' };
138
- const b = { type: 'border', width: 1, style: 'solid', color: '#aabbcc' };
139
- expect(tokensMatch(a, b)).toBe(true);
140
- });
141
- it('detects different border style', () => {
142
- const a = { type: 'border', width: 1, style: 'solid', color: '#000000' };
143
- const b = { type: 'border', width: 1, style: 'dashed', color: '#000000' };
144
- expect(tokensMatch(a, b)).toBe(false);
145
- });
146
- });
147
- describe('raw tokens', () => {
148
- it('matches identical raw values', () => {
149
- const a = { type: 'raw', value: '10px 20px' };
150
- const b = { type: 'raw', value: '10px 20px' };
151
- expect(tokensMatch(a, b)).toBe(true);
152
- });
153
- it('detects different raw values', () => {
154
- const a = { type: 'raw', value: '10px 20px' };
155
- const b = { type: 'raw', value: '10px 30px' };
156
- expect(tokensMatch(a, b)).toBe(false);
157
- });
158
- });
159
- describe('cross-type matching', () => {
160
- it('returns false for different token types', () => {
161
- const color = { type: 'color', hex: '#ffffff' };
162
- const spacing = { type: 'spacing', value: 16, unit: 'px' };
163
- expect(tokensMatch(color, spacing)).toBe(false);
164
- });
165
- });
166
- });
167
- });
168
- //# sourceMappingURL=token.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token.test.js","sourceRoot":"","sources":["../../src/models/token.test.ts"],"names":[],"mappings":"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"}