@stilhq/core 0.4.0 → 0.6.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.md +121 -1
- package/dist/core/components.d.ts +48 -0
- package/dist/core/components.d.ts.map +1 -0
- package/dist/core/components.js +185 -0
- package/dist/core/components.js.map +1 -0
- package/dist/core/schema.d.ts +125 -0
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/text.d.ts +45 -0
- package/dist/core/text.d.ts.map +1 -0
- package/dist/core/text.js +189 -0
- package/dist/core/text.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @stilhq/core
|
|
2
2
|
|
|
3
|
-
Design token pipeline for Stil. Normalize, validate, and build design tokens from Figma
|
|
3
|
+
Design token and component pipeline for Stil. Normalize, validate, and build design tokens and components from Figma.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -82,6 +82,126 @@ workspace_repo/
|
|
|
82
82
|
|
|
83
83
|
Priority: workspace config > core default
|
|
84
84
|
|
|
85
|
+
## Component Processing
|
|
86
|
+
|
|
87
|
+
### Basic Usage
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { buildComponentsWithMeta, normalizeComponents } from "@stilhq/core";
|
|
91
|
+
|
|
92
|
+
// Load component snapshot from Figma Plugin
|
|
93
|
+
const snapshot = JSON.parse(fs.readFileSync(".stil/components/snapshots/components.json"));
|
|
94
|
+
|
|
95
|
+
// Build with validation and metadata
|
|
96
|
+
const { components, meta } = buildComponentsWithMeta(snapshot);
|
|
97
|
+
|
|
98
|
+
// components.dist.json - valid components only
|
|
99
|
+
fs.writeFileSync("components.dist.json", JSON.stringify(components, null, 2));
|
|
100
|
+
|
|
101
|
+
// components.meta.json - validation warnings and stats
|
|
102
|
+
fs.writeFileSync("components.meta.json", JSON.stringify(meta, null, 2));
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Validation Rules (v1)
|
|
106
|
+
|
|
107
|
+
Components are validated with minimal rules:
|
|
108
|
+
- Component must have a name
|
|
109
|
+
- Component must have a variants array
|
|
110
|
+
- Variant must have a name
|
|
111
|
+
- Variant props are optional (warning only)
|
|
112
|
+
|
|
113
|
+
**Invalid components/variants** are:
|
|
114
|
+
- Excluded from `components.dist.json`
|
|
115
|
+
- Recorded in `components.meta.json` with reasons
|
|
116
|
+
- Displayed in Storybook Warnings panel
|
|
117
|
+
- Non-fatal: CI passes even with validation issues
|
|
118
|
+
|
|
119
|
+
### Component Metadata
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
type ComponentMeta = {
|
|
123
|
+
unknown: {
|
|
124
|
+
invalidComponents: Array<{ name: string; reason: string; nodeId?: string }>;
|
|
125
|
+
invalidVariants: Array<{
|
|
126
|
+
component: string;
|
|
127
|
+
variant: string;
|
|
128
|
+
reason: string;
|
|
129
|
+
nodeId?: string;
|
|
130
|
+
}>;
|
|
131
|
+
};
|
|
132
|
+
warnings: string[];
|
|
133
|
+
stats: {
|
|
134
|
+
totalComponents: number;
|
|
135
|
+
validComponents: number;
|
|
136
|
+
invalidComponents: number;
|
|
137
|
+
totalVariants: number;
|
|
138
|
+
validVariants: number;
|
|
139
|
+
invalidVariants: number;
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Text QA
|
|
145
|
+
|
|
146
|
+
### Basic Usage
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
import { buildTextWithMeta, normalizeTextList } from "@stilhq/core";
|
|
150
|
+
|
|
151
|
+
// Load text snapshot from Figma Plugin
|
|
152
|
+
const snapshot = JSON.parse(fs.readFileSync(".stil/text/snapshots/textlist.json"));
|
|
153
|
+
|
|
154
|
+
// Build with QA validation and metadata
|
|
155
|
+
const { text, meta } = buildTextWithMeta(snapshot);
|
|
156
|
+
|
|
157
|
+
// textlist.dist.json - validated text items
|
|
158
|
+
fs.writeFileSync("textlist.dist.json", JSON.stringify(text, null, 2));
|
|
159
|
+
|
|
160
|
+
// textlist.meta.json - QA issues/warnings/stats
|
|
161
|
+
fs.writeFileSync("textlist.meta.json", JSON.stringify(meta, null, 2));
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### QA Rules (v1)
|
|
165
|
+
|
|
166
|
+
Text items are validated with the following rules:
|
|
167
|
+
- **Empty text**: Text is empty or whitespace-only (Error)
|
|
168
|
+
- **Duplicates**: Same text appears in multiple locations (Info)
|
|
169
|
+
- **Too long**: Text exceeds 500 characters (Warning)
|
|
170
|
+
- **Too short**: Single character text (Info)
|
|
171
|
+
- **Invalid characters**: Contains control characters except tab/newline (Warning)
|
|
172
|
+
|
|
173
|
+
**QA issues** are:
|
|
174
|
+
- Recorded in `textlist.meta.json` with details
|
|
175
|
+
- Displayed in Storybook QA report
|
|
176
|
+
- Non-fatal: CI passes even with issues (v1 policy)
|
|
177
|
+
|
|
178
|
+
### Text Metadata
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
type TextMeta = {
|
|
182
|
+
issues: {
|
|
183
|
+
emptyText: Array<{ nodeId: string; nodePath?: string }>;
|
|
184
|
+
duplicates: Array<{
|
|
185
|
+
text: string;
|
|
186
|
+
count: number;
|
|
187
|
+
locations: Array<{ nodeId: string; nodePath?: string }>;
|
|
188
|
+
}>;
|
|
189
|
+
tooLong: Array<{ nodeId: string; text: string; length: number }>;
|
|
190
|
+
tooShort: Array<{ nodeId: string; text: string }>;
|
|
191
|
+
invalidChars: Array<{ nodeId: string; text: string; issue: string }>;
|
|
192
|
+
};
|
|
193
|
+
warnings: string[];
|
|
194
|
+
stats: {
|
|
195
|
+
totalItems: number;
|
|
196
|
+
validItems: number;
|
|
197
|
+
itemsWithIssues: number;
|
|
198
|
+
uniqueTexts: number;
|
|
199
|
+
emptyCount: number;
|
|
200
|
+
duplicateCount: number;
|
|
201
|
+
};
|
|
202
|
+
};
|
|
203
|
+
```
|
|
204
|
+
|
|
85
205
|
## Status
|
|
86
206
|
|
|
87
207
|
0.x — API is not yet stable. Breaking changes may occur in minor versions.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ComponentItem, ComponentMeta } from "./schema";
|
|
2
|
+
export type NormalizedComponent = ComponentItem;
|
|
3
|
+
export type NormalizedComponentSnapshot = {
|
|
4
|
+
components: {
|
|
5
|
+
scopeLabel: string;
|
|
6
|
+
scopeKey: string;
|
|
7
|
+
generatedAt?: string;
|
|
8
|
+
stats?: {
|
|
9
|
+
total: number;
|
|
10
|
+
componentSets: number;
|
|
11
|
+
components: number;
|
|
12
|
+
variants: number;
|
|
13
|
+
variantKeys?: string[];
|
|
14
|
+
};
|
|
15
|
+
items: NormalizedComponent[];
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Normalize component snapshot from Figma Plugin
|
|
20
|
+
* Currently a pass-through, but reserves room for future transformations
|
|
21
|
+
*/
|
|
22
|
+
export declare function normalizeComponents(snapshot: any): NormalizedComponentSnapshot;
|
|
23
|
+
/**
|
|
24
|
+
* Validate components and collect warnings
|
|
25
|
+
* Rules (v1 minimal):
|
|
26
|
+
* - Component must have a name
|
|
27
|
+
* - Component must have variants array
|
|
28
|
+
* - Variant must have name
|
|
29
|
+
* - Variant must have props (optional warning)
|
|
30
|
+
*/
|
|
31
|
+
export declare function validateComponentsWithWarnings(normalized: NormalizedComponentSnapshot): {
|
|
32
|
+
valid: NormalizedComponentSnapshot;
|
|
33
|
+
meta: ComponentMeta;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Build component dist + meta from raw snapshot
|
|
37
|
+
* Returns both the valid components (dist) and metadata (warnings/stats)
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildComponentsWithMeta(snapshot: any): {
|
|
40
|
+
components: NormalizedComponentSnapshot;
|
|
41
|
+
meta: ComponentMeta;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Simple normalize + validate without meta
|
|
45
|
+
* For cases where warnings are not needed
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildComponents(snapshot: any): NormalizedComponentSnapshot;
|
|
48
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/core/components.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,aAAa,EAEb,aAAa,EACd,MAAM,UAAU,CAAC;AAMlB,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAEhD,MAAM,MAAM,2BAA2B,GAAG;IACxC,UAAU,EAAE;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE;YACN,KAAK,EAAE,MAAM,CAAC;YACd,aAAa,EAAE,MAAM,CAAC;YACtB,UAAU,EAAE,MAAM,CAAC;YACnB,QAAQ,EAAE,MAAM,CAAC;YACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;SACxB,CAAC;QACF,KAAK,EAAE,mBAAmB,EAAE,CAAC;KAC9B,CAAC;CACH,CAAC;AAMF;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,GAAG,GACZ,2BAA2B,CAqB7B;AAMD;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,2BAA2B,GACtC;IAAE,KAAK,EAAE,2BAA2B,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CA0I7D;AAMD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,GAAG,GAAG;IACtD,UAAU,EAAE,2BAA2B,CAAC;IACxC,IAAI,EAAE,aAAa,CAAC;CACrB,CAWA;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,2BAA2B,CAG1E"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// components.ts - Component snapshot processing
|
|
3
|
+
// Follows the same pattern as token processing: normalize → validate → build
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.normalizeComponents = normalizeComponents;
|
|
6
|
+
exports.validateComponentsWithWarnings = validateComponentsWithWarnings;
|
|
7
|
+
exports.buildComponentsWithMeta = buildComponentsWithMeta;
|
|
8
|
+
exports.buildComponents = buildComponents;
|
|
9
|
+
// ========================================
|
|
10
|
+
// Normalize
|
|
11
|
+
// ========================================
|
|
12
|
+
/**
|
|
13
|
+
* Normalize component snapshot from Figma Plugin
|
|
14
|
+
* Currently a pass-through, but reserves room for future transformations
|
|
15
|
+
*/
|
|
16
|
+
function normalizeComponents(snapshot) {
|
|
17
|
+
// Validate input structure
|
|
18
|
+
if (!snapshot || typeof snapshot !== "object") {
|
|
19
|
+
throw new Error("Invalid component snapshot: must be an object");
|
|
20
|
+
}
|
|
21
|
+
if (!snapshot.components) {
|
|
22
|
+
throw new Error("Invalid component snapshot: missing 'components' property");
|
|
23
|
+
}
|
|
24
|
+
if (!Array.isArray(snapshot.components.items)) {
|
|
25
|
+
throw new Error("Invalid component snapshot: components.items must be an array");
|
|
26
|
+
}
|
|
27
|
+
// For v1, we just validate and pass through
|
|
28
|
+
// Future versions may normalize names, extract types, etc.
|
|
29
|
+
return snapshot;
|
|
30
|
+
}
|
|
31
|
+
// ========================================
|
|
32
|
+
// Validation with Warnings
|
|
33
|
+
// ========================================
|
|
34
|
+
/**
|
|
35
|
+
* Validate components and collect warnings
|
|
36
|
+
* Rules (v1 minimal):
|
|
37
|
+
* - Component must have a name
|
|
38
|
+
* - Component must have variants array
|
|
39
|
+
* - Variant must have name
|
|
40
|
+
* - Variant must have props (optional warning)
|
|
41
|
+
*/
|
|
42
|
+
function validateComponentsWithWarnings(normalized) {
|
|
43
|
+
const warnings = [];
|
|
44
|
+
const invalidComponents = [];
|
|
45
|
+
const invalidVariants = [];
|
|
46
|
+
let totalComponents = 0;
|
|
47
|
+
let validComponents = 0;
|
|
48
|
+
let invalidComponentsCount = 0;
|
|
49
|
+
let totalVariants = 0;
|
|
50
|
+
let validVariants = 0;
|
|
51
|
+
let invalidVariantsCount = 0;
|
|
52
|
+
const validItems = [];
|
|
53
|
+
for (const item of normalized.components.items) {
|
|
54
|
+
totalComponents++;
|
|
55
|
+
let componentIsValid = true;
|
|
56
|
+
const componentVariants = [];
|
|
57
|
+
// Check component name
|
|
58
|
+
if (!item.name || item.name.trim() === "") {
|
|
59
|
+
componentIsValid = false;
|
|
60
|
+
invalidComponents.push({
|
|
61
|
+
name: item.name || "(unnamed)",
|
|
62
|
+
reason: "Missing or empty component name",
|
|
63
|
+
nodeId: item.nodeId,
|
|
64
|
+
});
|
|
65
|
+
warnings.push(`Component ${item.nodeId || "unknown"}: Missing or empty name`);
|
|
66
|
+
}
|
|
67
|
+
// Check variants array
|
|
68
|
+
if (!Array.isArray(item.variants)) {
|
|
69
|
+
componentIsValid = false;
|
|
70
|
+
invalidComponents.push({
|
|
71
|
+
name: item.name || "(unnamed)",
|
|
72
|
+
reason: "Missing or invalid variants array",
|
|
73
|
+
nodeId: item.nodeId,
|
|
74
|
+
});
|
|
75
|
+
warnings.push(`Component "${item.name || "unknown"}": Missing or invalid variants array`);
|
|
76
|
+
continue; // Can't process variants if array is invalid
|
|
77
|
+
}
|
|
78
|
+
// Validate each variant
|
|
79
|
+
for (const variant of item.variants) {
|
|
80
|
+
totalVariants++;
|
|
81
|
+
let variantIsValid = true;
|
|
82
|
+
// Check variant name
|
|
83
|
+
if (!variant.name || variant.name.trim() === "") {
|
|
84
|
+
variantIsValid = false;
|
|
85
|
+
invalidVariants.push({
|
|
86
|
+
component: item.name || "(unnamed)",
|
|
87
|
+
variant: variant.name || "(unnamed)",
|
|
88
|
+
reason: "Missing or empty variant name",
|
|
89
|
+
nodeId: variant.nodeId,
|
|
90
|
+
});
|
|
91
|
+
warnings.push(`Component "${item.name || "unknown"}", variant ${variant.nodeId || "unknown"}: Missing or empty name`);
|
|
92
|
+
}
|
|
93
|
+
// Check props (optional warning only)
|
|
94
|
+
if (!variant.props || Object.keys(variant.props).length === 0) {
|
|
95
|
+
warnings.push(`Component "${item.name || "unknown"}", variant "${variant.name || "unknown"}": No props detected (may be intentional)`);
|
|
96
|
+
}
|
|
97
|
+
if (variantIsValid) {
|
|
98
|
+
validVariants++;
|
|
99
|
+
componentVariants.push(variant);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
invalidVariantsCount++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Component is valid only if it has at least one valid variant
|
|
106
|
+
if (componentIsValid && componentVariants.length > 0) {
|
|
107
|
+
validComponents++;
|
|
108
|
+
validItems.push({
|
|
109
|
+
...item,
|
|
110
|
+
variants: componentVariants,
|
|
111
|
+
variantCount: componentVariants.length,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
invalidComponentsCount++;
|
|
116
|
+
if (componentVariants.length === 0 && componentIsValid) {
|
|
117
|
+
// Component structure was OK but no valid variants
|
|
118
|
+
invalidComponents.push({
|
|
119
|
+
name: item.name,
|
|
120
|
+
reason: "No valid variants found",
|
|
121
|
+
nodeId: item.nodeId,
|
|
122
|
+
});
|
|
123
|
+
warnings.push(`Component "${item.name || "unknown"}": No valid variants found`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const validSnapshot = {
|
|
128
|
+
components: {
|
|
129
|
+
...normalized.components,
|
|
130
|
+
items: validItems,
|
|
131
|
+
stats: {
|
|
132
|
+
...normalized.components.stats,
|
|
133
|
+
total: validItems.length,
|
|
134
|
+
componentSets: validItems.length,
|
|
135
|
+
components: validItems.reduce((sum, item) => sum + (item.componentIds?.length || 0), 0),
|
|
136
|
+
variants: validVariants,
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
const meta = {
|
|
141
|
+
unknown: {
|
|
142
|
+
invalidComponents,
|
|
143
|
+
invalidVariants,
|
|
144
|
+
},
|
|
145
|
+
warnings,
|
|
146
|
+
stats: {
|
|
147
|
+
totalComponents,
|
|
148
|
+
validComponents,
|
|
149
|
+
invalidComponents: invalidComponentsCount,
|
|
150
|
+
totalVariants,
|
|
151
|
+
validVariants,
|
|
152
|
+
invalidVariants: invalidVariantsCount,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
return { valid: validSnapshot, meta };
|
|
156
|
+
}
|
|
157
|
+
// ========================================
|
|
158
|
+
// Build with Meta
|
|
159
|
+
// ========================================
|
|
160
|
+
/**
|
|
161
|
+
* Build component dist + meta from raw snapshot
|
|
162
|
+
* Returns both the valid components (dist) and metadata (warnings/stats)
|
|
163
|
+
*/
|
|
164
|
+
function buildComponentsWithMeta(snapshot) {
|
|
165
|
+
// Step 1: Normalize
|
|
166
|
+
const normalized = normalizeComponents(snapshot);
|
|
167
|
+
// Step 2: Validate and separate valid/invalid
|
|
168
|
+
const { valid, meta } = validateComponentsWithWarnings(normalized);
|
|
169
|
+
return {
|
|
170
|
+
components: valid,
|
|
171
|
+
meta,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
// ========================================
|
|
175
|
+
// Convenience export (without meta)
|
|
176
|
+
// ========================================
|
|
177
|
+
/**
|
|
178
|
+
* Simple normalize + validate without meta
|
|
179
|
+
* For cases where warnings are not needed
|
|
180
|
+
*/
|
|
181
|
+
function buildComponents(snapshot) {
|
|
182
|
+
const { components } = buildComponentsWithMeta(snapshot);
|
|
183
|
+
return components;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/core/components.ts"],"names":[],"mappings":"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"}
|
package/dist/core/schema.d.ts
CHANGED
|
@@ -51,6 +51,131 @@ export type TokenMeta = {
|
|
|
51
51
|
unknownTokens: number;
|
|
52
52
|
};
|
|
53
53
|
};
|
|
54
|
+
export type ComponentSnapshot = {
|
|
55
|
+
components: {
|
|
56
|
+
scopeLabel: string;
|
|
57
|
+
scopeKey: string;
|
|
58
|
+
generatedAt?: string;
|
|
59
|
+
stats?: {
|
|
60
|
+
total: number;
|
|
61
|
+
componentSets: number;
|
|
62
|
+
components: number;
|
|
63
|
+
variants: number;
|
|
64
|
+
variantKeys?: string[];
|
|
65
|
+
};
|
|
66
|
+
items: ComponentItem[];
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
export type ComponentItem = {
|
|
70
|
+
nodeId: string;
|
|
71
|
+
componentSetId?: string;
|
|
72
|
+
name: string;
|
|
73
|
+
type: string;
|
|
74
|
+
pageName?: string;
|
|
75
|
+
updatedAt?: string;
|
|
76
|
+
scopeKey?: string;
|
|
77
|
+
variantKeys?: string[];
|
|
78
|
+
variantCount?: number;
|
|
79
|
+
componentIds?: string[];
|
|
80
|
+
variants: ComponentVariant[];
|
|
81
|
+
};
|
|
82
|
+
export type ComponentVariant = {
|
|
83
|
+
nodeId: string;
|
|
84
|
+
name: string;
|
|
85
|
+
props?: Record<string, string>;
|
|
86
|
+
propsSource?: string;
|
|
87
|
+
pageName?: string;
|
|
88
|
+
updatedAt?: string;
|
|
89
|
+
componentName?: string;
|
|
90
|
+
};
|
|
91
|
+
export type ComponentMeta = {
|
|
92
|
+
unknown: {
|
|
93
|
+
invalidComponents: Array<{
|
|
94
|
+
name: string;
|
|
95
|
+
reason: string;
|
|
96
|
+
nodeId?: string;
|
|
97
|
+
}>;
|
|
98
|
+
invalidVariants: Array<{
|
|
99
|
+
component: string;
|
|
100
|
+
variant: string;
|
|
101
|
+
reason: string;
|
|
102
|
+
nodeId?: string;
|
|
103
|
+
}>;
|
|
104
|
+
};
|
|
105
|
+
warnings: string[];
|
|
106
|
+
stats: {
|
|
107
|
+
totalComponents: number;
|
|
108
|
+
validComponents: number;
|
|
109
|
+
invalidComponents: number;
|
|
110
|
+
totalVariants: number;
|
|
111
|
+
validVariants: number;
|
|
112
|
+
invalidVariants: number;
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
export type TextSnapshot = {
|
|
116
|
+
textList: {
|
|
117
|
+
scope: string;
|
|
118
|
+
generatedAt?: string;
|
|
119
|
+
stats?: {
|
|
120
|
+
processedNodes: number;
|
|
121
|
+
foundTextNodes: number;
|
|
122
|
+
elapsedMs?: number;
|
|
123
|
+
};
|
|
124
|
+
items: TextItem[];
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
export type TextItem = {
|
|
128
|
+
nodeId: string;
|
|
129
|
+
pageName?: string;
|
|
130
|
+
nodeName?: string;
|
|
131
|
+
text: string;
|
|
132
|
+
charCount?: number;
|
|
133
|
+
updatedAt?: string;
|
|
134
|
+
scopeKey?: string;
|
|
135
|
+
nodePath?: string;
|
|
136
|
+
};
|
|
137
|
+
export type TextMeta = {
|
|
138
|
+
issues: {
|
|
139
|
+
emptyText: Array<{
|
|
140
|
+
nodeId: string;
|
|
141
|
+
nodePath?: string;
|
|
142
|
+
}>;
|
|
143
|
+
duplicates: Array<{
|
|
144
|
+
text: string;
|
|
145
|
+
count: number;
|
|
146
|
+
locations: Array<{
|
|
147
|
+
nodeId: string;
|
|
148
|
+
nodePath?: string;
|
|
149
|
+
}>;
|
|
150
|
+
}>;
|
|
151
|
+
tooLong: Array<{
|
|
152
|
+
nodeId: string;
|
|
153
|
+
text: string;
|
|
154
|
+
length: number;
|
|
155
|
+
nodePath?: string;
|
|
156
|
+
}>;
|
|
157
|
+
tooShort: Array<{
|
|
158
|
+
nodeId: string;
|
|
159
|
+
text: string;
|
|
160
|
+
nodePath?: string;
|
|
161
|
+
}>;
|
|
162
|
+
invalidChars: Array<{
|
|
163
|
+
nodeId: string;
|
|
164
|
+
text: string;
|
|
165
|
+
issue: string;
|
|
166
|
+
nodePath?: string;
|
|
167
|
+
}>;
|
|
168
|
+
};
|
|
169
|
+
warnings: string[];
|
|
170
|
+
stats: {
|
|
171
|
+
totalItems: number;
|
|
172
|
+
validItems: number;
|
|
173
|
+
itemsWithIssues: number;
|
|
174
|
+
uniqueTexts: number;
|
|
175
|
+
emptyCount: number;
|
|
176
|
+
duplicateCount: number;
|
|
177
|
+
};
|
|
178
|
+
};
|
|
54
179
|
export type Mapping = Record<string, string>;
|
|
55
180
|
export type BuildOptions = {
|
|
56
181
|
/** optional: theme.css を生成するか */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { TextItem, TextMeta } from "./schema";
|
|
2
|
+
export type NormalizedTextItem = TextItem;
|
|
3
|
+
export type NormalizedTextSnapshot = {
|
|
4
|
+
textList: {
|
|
5
|
+
scope: string;
|
|
6
|
+
generatedAt?: string;
|
|
7
|
+
stats?: {
|
|
8
|
+
processedNodes: number;
|
|
9
|
+
foundTextNodes: number;
|
|
10
|
+
elapsedMs?: number;
|
|
11
|
+
};
|
|
12
|
+
items: NormalizedTextItem[];
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Normalize text snapshot from Figma Plugin
|
|
17
|
+
* Currently a pass-through, but reserves room for future transformations
|
|
18
|
+
*/
|
|
19
|
+
export declare function normalizeTextList(snapshot: any): NormalizedTextSnapshot;
|
|
20
|
+
/**
|
|
21
|
+
* Validate text and perform QA checks
|
|
22
|
+
* QA Rules (v1):
|
|
23
|
+
* - Empty text check
|
|
24
|
+
* - Duplicate detection
|
|
25
|
+
* - Length check (too long: >500, too short: 1 char)
|
|
26
|
+
* - Invalid characters (control chars except tab/newline)
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateTextWithWarnings(normalized: NormalizedTextSnapshot): {
|
|
29
|
+
valid: NormalizedTextSnapshot;
|
|
30
|
+
meta: TextMeta;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Build text dist + meta from raw snapshot
|
|
34
|
+
* Returns both the valid text items (dist) and QA metadata (issues/warnings/stats)
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildTextWithMeta(snapshot: any): {
|
|
37
|
+
text: NormalizedTextSnapshot;
|
|
38
|
+
meta: TextMeta;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Simple normalize + validate without meta
|
|
42
|
+
* For cases where QA reports are not needed
|
|
43
|
+
*/
|
|
44
|
+
export declare function buildTextList(snapshot: any): NormalizedTextSnapshot;
|
|
45
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/core/text.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAMjE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAE1C,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE;YACN,cAAc,EAAE,MAAM,CAAC;YACvB,cAAc,EAAE,MAAM,CAAC;YACvB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,KAAK,EAAE,kBAAkB,EAAE,CAAC;KAC7B,CAAC;CACH,CAAC;AAMF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,sBAAsB,CAgBvE;AAMD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,sBAAsB,GACjC;IAAE,KAAK,EAAE,sBAAsB,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAmJnD;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG;IAChD,IAAI,EAAE,sBAAsB,CAAC;IAC7B,IAAI,EAAE,QAAQ,CAAC;CAChB,CAWA;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,GAAG,GAAG,sBAAsB,CAGnE"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// text.ts - Text QA and validation
|
|
3
|
+
// Follows the same pattern as token/component processing: normalize → validate → build
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.normalizeTextList = normalizeTextList;
|
|
6
|
+
exports.validateTextWithWarnings = validateTextWithWarnings;
|
|
7
|
+
exports.buildTextWithMeta = buildTextWithMeta;
|
|
8
|
+
exports.buildTextList = buildTextList;
|
|
9
|
+
// ========================================
|
|
10
|
+
// Normalize
|
|
11
|
+
// ========================================
|
|
12
|
+
/**
|
|
13
|
+
* Normalize text snapshot from Figma Plugin
|
|
14
|
+
* Currently a pass-through, but reserves room for future transformations
|
|
15
|
+
*/
|
|
16
|
+
function normalizeTextList(snapshot) {
|
|
17
|
+
// Validate input structure
|
|
18
|
+
if (!snapshot || typeof snapshot !== "object") {
|
|
19
|
+
throw new Error("Invalid text snapshot: must be an object");
|
|
20
|
+
}
|
|
21
|
+
if (!snapshot.textList) {
|
|
22
|
+
throw new Error("Invalid text snapshot: missing 'textList' property");
|
|
23
|
+
}
|
|
24
|
+
if (!Array.isArray(snapshot.textList.items)) {
|
|
25
|
+
throw new Error("Invalid text snapshot: textList.items must be an array");
|
|
26
|
+
}
|
|
27
|
+
// For v1, we just validate and pass through
|
|
28
|
+
return snapshot;
|
|
29
|
+
}
|
|
30
|
+
// ========================================
|
|
31
|
+
// QA Validation with Warnings
|
|
32
|
+
// ========================================
|
|
33
|
+
/**
|
|
34
|
+
* Validate text and perform QA checks
|
|
35
|
+
* QA Rules (v1):
|
|
36
|
+
* - Empty text check
|
|
37
|
+
* - Duplicate detection
|
|
38
|
+
* - Length check (too long: >500, too short: 1 char)
|
|
39
|
+
* - Invalid characters (control chars except tab/newline)
|
|
40
|
+
*/
|
|
41
|
+
function validateTextWithWarnings(normalized) {
|
|
42
|
+
const warnings = [];
|
|
43
|
+
const emptyText = [];
|
|
44
|
+
const duplicates = [];
|
|
45
|
+
const tooLong = [];
|
|
46
|
+
const tooShort = [];
|
|
47
|
+
const invalidChars = [];
|
|
48
|
+
let totalItems = 0;
|
|
49
|
+
let validItems = 0;
|
|
50
|
+
let itemsWithIssues = 0;
|
|
51
|
+
// Track text occurrences for duplicate detection
|
|
52
|
+
const textOccurrences = new Map();
|
|
53
|
+
const validItemsList = [];
|
|
54
|
+
for (const item of normalized.textList.items) {
|
|
55
|
+
totalItems++;
|
|
56
|
+
let itemHasIssues = false;
|
|
57
|
+
// QA Check 1: Empty text
|
|
58
|
+
if (!item.text || item.text.trim() === "") {
|
|
59
|
+
itemHasIssues = true;
|
|
60
|
+
emptyText.push({
|
|
61
|
+
nodeId: item.nodeId,
|
|
62
|
+
nodePath: item.nodePath,
|
|
63
|
+
});
|
|
64
|
+
warnings.push(`Empty text found at ${item.nodePath || item.nodeId || "unknown"}`);
|
|
65
|
+
}
|
|
66
|
+
// QA Check 2: Track for duplicate detection (do after empty check)
|
|
67
|
+
if (item.text && item.text.trim() !== "") {
|
|
68
|
+
if (!textOccurrences.has(item.text)) {
|
|
69
|
+
textOccurrences.set(item.text, []);
|
|
70
|
+
}
|
|
71
|
+
textOccurrences.get(item.text).push({
|
|
72
|
+
nodeId: item.nodeId,
|
|
73
|
+
nodePath: item.nodePath,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// QA Check 3: Too long (>500 characters)
|
|
77
|
+
if (item.text && item.text.length > 500) {
|
|
78
|
+
itemHasIssues = true;
|
|
79
|
+
tooLong.push({
|
|
80
|
+
nodeId: item.nodeId,
|
|
81
|
+
text: item.text.substring(0, 100) + "...", // Truncate for display
|
|
82
|
+
length: item.text.length,
|
|
83
|
+
nodePath: item.nodePath,
|
|
84
|
+
});
|
|
85
|
+
warnings.push(`Text exceeds 500 characters (${item.text.length} chars) at ${item.nodePath || item.nodeId || "unknown"}`);
|
|
86
|
+
}
|
|
87
|
+
// QA Check 4: Too short (1 character, excluding intentional spaces)
|
|
88
|
+
if (item.text && item.text.length === 1 && item.text.trim().length === 1) {
|
|
89
|
+
// This is info-level, not an error
|
|
90
|
+
tooShort.push({
|
|
91
|
+
nodeId: item.nodeId,
|
|
92
|
+
text: item.text,
|
|
93
|
+
nodePath: item.nodePath,
|
|
94
|
+
});
|
|
95
|
+
warnings.push(`Single character text "${item.text}" at ${item.nodePath || item.nodeId || "unknown"}`);
|
|
96
|
+
}
|
|
97
|
+
// QA Check 5: Invalid control characters (except \t, \n, \r)
|
|
98
|
+
if (item.text) {
|
|
99
|
+
const invalidControlChars = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/;
|
|
100
|
+
if (invalidControlChars.test(item.text)) {
|
|
101
|
+
itemHasIssues = true;
|
|
102
|
+
invalidChars.push({
|
|
103
|
+
nodeId: item.nodeId,
|
|
104
|
+
text: item.text,
|
|
105
|
+
issue: "Contains invalid control characters (U+0000-U+001F except tab/newline)",
|
|
106
|
+
nodePath: item.nodePath,
|
|
107
|
+
});
|
|
108
|
+
warnings.push(`Invalid control characters in text at ${item.nodePath || item.nodeId || "unknown"}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Count valid vs issues
|
|
112
|
+
if (itemHasIssues) {
|
|
113
|
+
itemsWithIssues++;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
validItems++;
|
|
117
|
+
}
|
|
118
|
+
// Include all items in valid list (v1 policy: warnings only, not filtering)
|
|
119
|
+
validItemsList.push(item);
|
|
120
|
+
}
|
|
121
|
+
// Process duplicates
|
|
122
|
+
let duplicateCount = 0;
|
|
123
|
+
for (const [text, locations] of textOccurrences.entries()) {
|
|
124
|
+
if (locations.length > 1) {
|
|
125
|
+
duplicateCount += locations.length;
|
|
126
|
+
duplicates.push({
|
|
127
|
+
text,
|
|
128
|
+
count: locations.length,
|
|
129
|
+
locations,
|
|
130
|
+
});
|
|
131
|
+
warnings.push(`Duplicate text "${text}" appears ${locations.length} times`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const uniqueTexts = textOccurrences.size;
|
|
135
|
+
const validSnapshot = {
|
|
136
|
+
textList: {
|
|
137
|
+
...normalized.textList,
|
|
138
|
+
items: validItemsList,
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
const meta = {
|
|
142
|
+
issues: {
|
|
143
|
+
emptyText,
|
|
144
|
+
duplicates,
|
|
145
|
+
tooLong,
|
|
146
|
+
tooShort,
|
|
147
|
+
invalidChars,
|
|
148
|
+
},
|
|
149
|
+
warnings,
|
|
150
|
+
stats: {
|
|
151
|
+
totalItems,
|
|
152
|
+
validItems,
|
|
153
|
+
itemsWithIssues,
|
|
154
|
+
uniqueTexts,
|
|
155
|
+
emptyCount: emptyText.length,
|
|
156
|
+
duplicateCount,
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
return { valid: validSnapshot, meta };
|
|
160
|
+
}
|
|
161
|
+
// ========================================
|
|
162
|
+
// Build with Meta
|
|
163
|
+
// ========================================
|
|
164
|
+
/**
|
|
165
|
+
* Build text dist + meta from raw snapshot
|
|
166
|
+
* Returns both the valid text items (dist) and QA metadata (issues/warnings/stats)
|
|
167
|
+
*/
|
|
168
|
+
function buildTextWithMeta(snapshot) {
|
|
169
|
+
// Step 1: Normalize
|
|
170
|
+
const normalized = normalizeTextList(snapshot);
|
|
171
|
+
// Step 2: Validate and perform QA checks
|
|
172
|
+
const { valid, meta } = validateTextWithWarnings(normalized);
|
|
173
|
+
return {
|
|
174
|
+
text: valid,
|
|
175
|
+
meta,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// ========================================
|
|
179
|
+
// Convenience export (without meta)
|
|
180
|
+
// ========================================
|
|
181
|
+
/**
|
|
182
|
+
* Simple normalize + validate without meta
|
|
183
|
+
* For cases where QA reports are not needed
|
|
184
|
+
*/
|
|
185
|
+
function buildTextList(snapshot) {
|
|
186
|
+
const { text } = buildTextWithMeta(snapshot);
|
|
187
|
+
return text;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/core/text.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
export { buildThemeTokens, buildThemeTokensWithMeta, writeThemeTokens, } from "./core/build";
|
|
2
2
|
export { normalize, normalizeWithWarnings, normalizeFromFigmaSemantics, normalizeFromFigmaPlugin, normalizeFromFigmaPluginMulti, detectInputFormat, } from "./core/normalize";
|
|
3
3
|
export { validateMapping, formatValidationErrors, printValidationErrors, } from "./core/validate";
|
|
4
|
+
export { normalizeComponents, validateComponentsWithWarnings, buildComponents, buildComponentsWithMeta, } from "./core/components";
|
|
5
|
+
export { normalizeTextList, validateTextWithWarnings, buildTextList, buildTextWithMeta, } from "./core/text";
|
|
4
6
|
export { loadFigmaVariables, validateFigmaVariables } from "./adapters/figma";
|
|
5
7
|
export type { ThemeTokens, TokenMeta, RawTokenTree, RawTokenNode, RawTokenLeaf, RawTokenType, RawTokenSource, FigmaVariableAlias, FigmaSemanticsJson, FigmaPluginJson, FigmaPluginMultiJson, TokenInputJson, Mapping, BuildOptions, ValidationIssue, ValidationResult, } from "./core/schema";
|
|
8
|
+
export type { ComponentSnapshot, ComponentItem, ComponentVariant, ComponentMeta, } from "./core/schema";
|
|
9
|
+
export type { TextSnapshot, TextItem, TextMeta, } from "./core/schema";
|
|
6
10
|
export type { InputFormat } from "./core/normalize";
|
|
7
11
|
export type { MappingValidationError } from "./core/validate";
|
|
8
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,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,SAAS,EACT,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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,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,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,eAAe,EACf,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EACb,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAG9E,YAAY,EACV,WAAW,EACX,SAAS,EACT,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;AAGvB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// @stilhq/core - Main entry point
|
|
3
3
|
// 公開APIはここからのみ提供(深いパスimport禁止)
|
|
4
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.normalizeWithWarnings = exports.normalize = exports.writeThemeTokens = exports.buildThemeTokensWithMeta = exports.buildThemeTokens = void 0;
|
|
6
|
-
// Core functions
|
|
5
|
+
exports.validateFigmaVariables = exports.loadFigmaVariables = exports.buildTextWithMeta = exports.buildTextList = exports.validateTextWithWarnings = exports.normalizeTextList = exports.buildComponentsWithMeta = exports.buildComponents = exports.validateComponentsWithWarnings = exports.normalizeComponents = exports.printValidationErrors = exports.formatValidationErrors = exports.validateMapping = exports.detectInputFormat = exports.normalizeFromFigmaPluginMulti = exports.normalizeFromFigmaPlugin = exports.normalizeFromFigmaSemantics = exports.normalizeWithWarnings = exports.normalize = exports.writeThemeTokens = exports.buildThemeTokensWithMeta = exports.buildThemeTokens = void 0;
|
|
6
|
+
// Core functions - Tokens
|
|
7
7
|
var build_1 = require("./core/build");
|
|
8
8
|
Object.defineProperty(exports, "buildThemeTokens", { enumerable: true, get: function () { return build_1.buildThemeTokens; } });
|
|
9
9
|
Object.defineProperty(exports, "buildThemeTokensWithMeta", { enumerable: true, get: function () { return build_1.buildThemeTokensWithMeta; } });
|
|
@@ -19,6 +19,18 @@ var validate_1 = require("./core/validate");
|
|
|
19
19
|
Object.defineProperty(exports, "validateMapping", { enumerable: true, get: function () { return validate_1.validateMapping; } });
|
|
20
20
|
Object.defineProperty(exports, "formatValidationErrors", { enumerable: true, get: function () { return validate_1.formatValidationErrors; } });
|
|
21
21
|
Object.defineProperty(exports, "printValidationErrors", { enumerable: true, get: function () { return validate_1.printValidationErrors; } });
|
|
22
|
+
// Core functions - Components
|
|
23
|
+
var components_1 = require("./core/components");
|
|
24
|
+
Object.defineProperty(exports, "normalizeComponents", { enumerable: true, get: function () { return components_1.normalizeComponents; } });
|
|
25
|
+
Object.defineProperty(exports, "validateComponentsWithWarnings", { enumerable: true, get: function () { return components_1.validateComponentsWithWarnings; } });
|
|
26
|
+
Object.defineProperty(exports, "buildComponents", { enumerable: true, get: function () { return components_1.buildComponents; } });
|
|
27
|
+
Object.defineProperty(exports, "buildComponentsWithMeta", { enumerable: true, get: function () { return components_1.buildComponentsWithMeta; } });
|
|
28
|
+
// Core functions - Text
|
|
29
|
+
var text_1 = require("./core/text");
|
|
30
|
+
Object.defineProperty(exports, "normalizeTextList", { enumerable: true, get: function () { return text_1.normalizeTextList; } });
|
|
31
|
+
Object.defineProperty(exports, "validateTextWithWarnings", { enumerable: true, get: function () { return text_1.validateTextWithWarnings; } });
|
|
32
|
+
Object.defineProperty(exports, "buildTextList", { enumerable: true, get: function () { return text_1.buildTextList; } });
|
|
33
|
+
Object.defineProperty(exports, "buildTextWithMeta", { enumerable: true, get: function () { return text_1.buildTextWithMeta; } });
|
|
22
34
|
// Adapters
|
|
23
35
|
var figma_1 = require("./adapters/figma");
|
|
24
36
|
Object.defineProperty(exports, "loadFigmaVariables", { enumerable: true, get: function () { return figma_1.loadFigmaVariables; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAClC,+BAA+B;;;AAE/B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAClC,+BAA+B;;;AAE/B,0BAA0B;AAC1B,sCAIsB;AAHpB,yGAAA,gBAAgB,OAAA;AAChB,iHAAA,wBAAwB,OAAA;AACxB,yGAAA,gBAAgB,OAAA;AAElB,8CAO0B;AANxB,sGAAA,SAAS,OAAA;AACT,kHAAA,qBAAqB,OAAA;AACrB,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,8BAA8B;AAC9B,gDAK2B;AAJzB,iHAAA,mBAAmB,OAAA;AACnB,4HAAA,8BAA8B,OAAA;AAC9B,6GAAA,eAAe,OAAA;AACf,qHAAA,uBAAuB,OAAA;AAGzB,wBAAwB;AACxB,oCAKqB;AAJnB,yGAAA,iBAAiB,OAAA;AACjB,gHAAA,wBAAwB,OAAA;AACxB,qGAAA,aAAa,OAAA;AACb,yGAAA,iBAAiB,OAAA;AAGnB,WAAW;AACX,0CAA8E;AAArE,2GAAA,kBAAkB,OAAA;AAAE,+GAAA,sBAAsB,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stilhq/core",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Design token pipeline for Stil",
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "Design token, component, and text QA pipeline for Stil",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -17,7 +17,10 @@
|
|
|
17
17
|
"prepublishOnly": "npm run clean && npm run build"
|
|
18
18
|
},
|
|
19
19
|
"keywords": [
|
|
20
|
-
"design-tokens"
|
|
20
|
+
"design-tokens",
|
|
21
|
+
"design-system",
|
|
22
|
+
"components",
|
|
23
|
+
"text-qa"
|
|
21
24
|
],
|
|
22
25
|
"author": "Tetsu",
|
|
23
26
|
"license": "BUSL-1.1",
|