@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 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 Variables.
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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"}
@@ -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
@@ -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,iBAAiB;AACjB,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,WAAW;AACX,0CAA8E;AAArE,2GAAA,kBAAkB,OAAA;AAAE,+GAAA,sBAAsB,OAAA"}
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.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",