@fragments-sdk/cli 0.7.2 → 0.7.4

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 (73) hide show
  1. package/README.md +2 -0
  2. package/dist/bin.js +25 -17
  3. package/dist/bin.js.map +1 -1
  4. package/dist/chunk-AWYCDRPG.js +272 -0
  5. package/dist/chunk-AWYCDRPG.js.map +1 -0
  6. package/dist/chunk-EKLMXTWU.js +80 -0
  7. package/dist/chunk-EKLMXTWU.js.map +1 -0
  8. package/dist/{chunk-DH4ETVSM.js → chunk-NEJ2FBTN.js} +9 -7
  9. package/dist/{chunk-DH4ETVSM.js.map → chunk-NEJ2FBTN.js.map} +1 -1
  10. package/dist/{chunk-GHYYFAQN.js → chunk-P33AKQJW.js} +1 -76
  11. package/dist/chunk-P33AKQJW.js.map +1 -0
  12. package/dist/{chunk-3T6QL7IY.js → chunk-R6IZZSE7.js} +23 -275
  13. package/dist/chunk-R6IZZSE7.js.map +1 -0
  14. package/dist/{chunk-7KUSBMI4.js → chunk-S56I5FST.js} +174 -45
  15. package/dist/chunk-S56I5FST.js.map +1 -0
  16. package/dist/{chunk-DQHWLAUV.js → chunk-TOIE7VXF.js} +2 -2
  17. package/dist/{chunk-OOGTG5FM.js → chunk-UXLGIGSX.js} +56 -2
  18. package/dist/chunk-UXLGIGSX.js.map +1 -0
  19. package/dist/{chunk-GKX2HPZ6.js → chunk-YMPGYEWK.js} +9 -3
  20. package/dist/chunk-YMPGYEWK.js.map +1 -0
  21. package/dist/chunk-Z7EY4VHE.js +50 -0
  22. package/dist/{core-UQXZTBFZ.js → core-3NMNCLFW.js} +8 -5
  23. package/dist/discovery-Z4RDDFVR.js +28 -0
  24. package/dist/{generate-GP6ZLAQB.js → generate-23VLX7QN.js} +7 -4
  25. package/dist/{generate-GP6ZLAQB.js.map → generate-23VLX7QN.js.map} +1 -1
  26. package/dist/index.js +15 -11
  27. package/dist/index.js.map +1 -1
  28. package/dist/{init-W72WBSU2.js → init-VYVYMVHH.js} +10 -6
  29. package/dist/{init-W72WBSU2.js.map → init-VYVYMVHH.js.map} +1 -1
  30. package/dist/mcp-bin.js +5 -3
  31. package/dist/mcp-bin.js.map +1 -1
  32. package/dist/sass.node-4XJK6YBF.js +130708 -0
  33. package/dist/sass.node-4XJK6YBF.js.map +1 -0
  34. package/dist/scan-FZR6YVI5.js +15 -0
  35. package/dist/{service-PVGTYUKX.js → service-CFFBHW4X.js} +6 -4
  36. package/dist/service-CFFBHW4X.js.map +1 -0
  37. package/dist/{static-viewer-KILKIVN7.js → static-viewer-VA2JXSCX.js} +6 -4
  38. package/dist/static-viewer-VA2JXSCX.js.map +1 -0
  39. package/dist/{test-3YRYQRGV.js → test-VTD7R6G2.js} +8 -4
  40. package/dist/{test-3YRYQRGV.js.map → test-VTD7R6G2.js.map} +1 -1
  41. package/dist/{tokens-IXSQHPQK.js → tokens-7JA5CPDL.js} +10 -7
  42. package/dist/{tokens-IXSQHPQK.js.map → tokens-7JA5CPDL.js.map} +1 -1
  43. package/dist/{viewer-K42REJU2.js → viewer-WXTDDQGK.js} +403 -26
  44. package/dist/viewer-WXTDDQGK.js.map +1 -0
  45. package/package.json +5 -1
  46. package/src/build.ts +57 -5
  47. package/src/commands/init.ts +6 -2
  48. package/src/core/__tests__/token-resolver.test.ts +82 -0
  49. package/src/core/discovery.ts +7 -1
  50. package/src/core/token-parser.ts +102 -0
  51. package/src/core/token-resolver.ts +155 -0
  52. package/src/migrate/detect.ts +4 -0
  53. package/src/service/__tests__/patch-generator.test.ts +2 -2
  54. package/src/service/patch-generator.ts +8 -1
  55. package/src/viewer/components/App.tsx +63 -2
  56. package/src/viewer/components/Layout.tsx +1 -1
  57. package/src/viewer/components/LeftSidebar.tsx +35 -77
  58. package/src/viewer/preview-frame.html +1 -1
  59. package/src/viewer/render-utils.ts +141 -0
  60. package/src/viewer/styles/globals.css +2 -1
  61. package/src/viewer/vite-plugin.ts +399 -24
  62. package/dist/chunk-3T6QL7IY.js.map +0 -1
  63. package/dist/chunk-7KUSBMI4.js.map +0 -1
  64. package/dist/chunk-GHYYFAQN.js.map +0 -1
  65. package/dist/chunk-GKX2HPZ6.js.map +0 -1
  66. package/dist/chunk-OOGTG5FM.js.map +0 -1
  67. package/dist/scan-V54HWRDY.js +0 -12
  68. package/dist/viewer-K42REJU2.js.map +0 -1
  69. /package/dist/{chunk-DQHWLAUV.js.map → chunk-TOIE7VXF.js.map} +0 -0
  70. /package/dist/{core-UQXZTBFZ.js.map → chunk-Z7EY4VHE.js.map} +0 -0
  71. /package/dist/{scan-V54HWRDY.js.map → core-3NMNCLFW.js.map} +0 -0
  72. /package/dist/{service-PVGTYUKX.js.map → discovery-Z4RDDFVR.js.map} +0 -0
  73. /package/dist/{static-viewer-KILKIVN7.js.map → scan-FZR6YVI5.js.map} +0 -0
@@ -1,78 +1,5 @@
1
1
  import { createRequire as __banner_createRequire } from 'module'; const require = __banner_createRequire(import.meta.url);
2
2
 
3
- // src/core/constants.ts
4
- var BRAND = {
5
- /** Display name (e.g., "Fragments") */
6
- name: "Fragments",
7
- /** Lowercase name for file paths and CLI (e.g., "fragments") */
8
- nameLower: "fragments",
9
- /** File extension for fragment definition files (e.g., ".fragment.tsx") */
10
- fileExtension: ".fragment.tsx",
11
- /** Legacy file extension for segments (still supported for migration) */
12
- legacyFileExtension: ".segment.tsx",
13
- /** JSON file extension for compiled output */
14
- jsonExtension: ".fragment.json",
15
- /** Default output file name (e.g., "fragments.json") */
16
- outFile: "fragments.json",
17
- /** Config file name (e.g., "fragments.config.ts") */
18
- configFile: "fragments.config.ts",
19
- /** Legacy config file name (still supported for migration) */
20
- legacyConfigFile: "segments.config.ts",
21
- /** CLI command name (e.g., "fragments") */
22
- cliCommand: "fragments",
23
- /** Package scope (e.g., "@fragments") */
24
- packageScope: "@fragments",
25
- /** Directory for storing fragments, registry, and cache */
26
- dataDir: ".fragments",
27
- /** Components subdirectory within .fragments/ */
28
- componentsDir: "components",
29
- /** Registry file name */
30
- registryFile: "registry.json",
31
- /** Context file name (AI-ready markdown) */
32
- contextFile: "context.md",
33
- /** Screenshots subdirectory */
34
- screenshotsDir: "screenshots",
35
- /** Cache subdirectory (gitignored) */
36
- cacheDir: "cache",
37
- /** Diff output subdirectory (gitignored) */
38
- diffDir: "diff",
39
- /** Manifest filename */
40
- manifestFile: "manifest.json",
41
- /** Prefix for localStorage keys (e.g., "fragments-") */
42
- storagePrefix: "fragments-",
43
- /** Static viewer HTML file name */
44
- viewerHtmlFile: "fragments-viewer.html",
45
- /** MCP tool name prefix (e.g., "fragments_") */
46
- mcpToolPrefix: "fragments_",
47
- /** File extension for block definition files */
48
- blockFileExtension: ".block.ts",
49
- /** @deprecated Use blockFileExtension instead */
50
- recipeFileExtension: ".recipe.ts",
51
- /** Vite plugin namespace */
52
- vitePluginNamespace: "fragments-core-shim"
53
- };
54
- var DEFAULTS = {
55
- /** Default viewport dimensions */
56
- viewport: {
57
- width: 1280,
58
- height: 800
59
- },
60
- /** Default diff threshold (percentage) */
61
- diffThreshold: 5,
62
- /** Browser pool size */
63
- poolSize: 3,
64
- /** Idle timeout before browser shutdown (ms) - 5 minutes */
65
- idleTimeoutMs: 5 * 60 * 1e3,
66
- /** Delay after render before capture (ms) */
67
- captureDelayMs: 100,
68
- /** Font loading timeout (ms) */
69
- fontTimeoutMs: 3e3,
70
- /** Default theme */
71
- theme: "light",
72
- /** Dev server port */
73
- port: 6006
74
- };
75
-
76
3
  // src/core/schema.ts
77
4
  import { z } from "zod";
78
5
  var figmaStringMappingSchema = z.object({
@@ -229,8 +156,6 @@ var fragmentsConfigSchema = z.object({
229
156
  var recipeDefinitionSchema = blockDefinitionSchema;
230
157
 
231
158
  export {
232
- BRAND,
233
- DEFAULTS,
234
159
  figmaPropMappingSchema,
235
160
  fragmentMetaSchema,
236
161
  fragmentUsageSchema,
@@ -246,4 +171,4 @@ export {
246
171
  fragmentsConfigSchema,
247
172
  recipeDefinitionSchema
248
173
  };
249
- //# sourceMappingURL=chunk-GHYYFAQN.js.map
174
+ //# sourceMappingURL=chunk-P33AKQJW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/schema.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Zod schemas for runtime validation of fragment definitions\n */\n\n// Figma property mapping schemas\nconst figmaStringMappingSchema = z.object({\n __type: z.literal('figma-string'),\n figmaProperty: z.string().min(1),\n});\n\nconst figmaBooleanMappingSchema = z.object({\n __type: z.literal('figma-boolean'),\n figmaProperty: z.string().min(1),\n valueMapping: z.object({ true: z.unknown(), false: z.unknown() }).optional(),\n});\n\nconst figmaEnumMappingSchema = z.object({\n __type: z.literal('figma-enum'),\n figmaProperty: z.string().min(1),\n valueMapping: z.record(z.unknown()),\n});\n\nconst figmaInstanceMappingSchema = z.object({\n __type: z.literal('figma-instance'),\n figmaProperty: z.string().min(1),\n});\n\nconst figmaChildrenMappingSchema = z.object({\n __type: z.literal('figma-children'),\n layers: z.array(z.string().min(1)),\n});\n\nconst figmaTextContentMappingSchema = z.object({\n __type: z.literal('figma-text-content'),\n layer: z.string().min(1),\n});\n\nexport const figmaPropMappingSchema = z.discriminatedUnion('__type', [\n figmaStringMappingSchema,\n figmaBooleanMappingSchema,\n figmaEnumMappingSchema,\n figmaInstanceMappingSchema,\n figmaChildrenMappingSchema,\n figmaTextContentMappingSchema,\n]);\n\nexport const fragmentMetaSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n category: z.string().min(1),\n tags: z.array(z.string()).optional(),\n status: z.enum(['stable', 'beta', 'deprecated', 'experimental']).optional(),\n since: z.string().optional(),\n figma: z.string().url().optional(),\n figmaProps: z.record(figmaPropMappingSchema).optional(),\n});\n\nexport const fragmentUsageSchema = z.object({\n when: z.array(z.string()).min(1),\n whenNot: z.array(z.string()).min(1),\n guidelines: z.array(z.string()).optional(),\n accessibility: z.array(z.string()).optional(),\n});\n\nexport const propTypeSchema: z.ZodType<string> = z.enum([\n 'string',\n 'number',\n 'boolean',\n 'enum',\n 'function',\n 'node',\n 'element',\n 'object',\n 'array',\n 'union',\n 'custom',\n]);\n\nexport const propDefinitionSchema = z.object({\n type: propTypeSchema,\n values: z.array(z.string()).readonly().optional(),\n default: z.unknown().optional(),\n description: z.string().optional(),\n required: z.boolean().optional(),\n constraints: z.array(z.string()).optional(),\n typeDetails: z.record(z.unknown()).optional(),\n});\n\nexport const relationshipTypeSchema = z.enum([\n 'alternative',\n 'sibling',\n 'parent',\n 'child',\n 'composition',\n 'complementary',\n 'used-by',\n]);\n\nexport const componentRelationSchema = z.object({\n component: z.string().min(1),\n relationship: relationshipTypeSchema,\n note: z.string().min(1),\n});\n\nexport const fragmentVariantSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n render: z.function().returns(z.unknown()),\n code: z.string().optional(),\n figma: z.string().url().optional(),\n});\n\n/**\n * Schema for banned patterns in codebase\n */\nexport const fragmentBanSchema = z.object({\n pattern: z.string().min(1),\n message: z.string().min(1),\n});\n\n/**\n * Schema for agent-optimized contract metadata\n */\nexport const fragmentContractSchema = z.object({\n propsSummary: z.array(z.string()).optional(),\n a11yRules: z.array(z.string()).optional(),\n bans: z.array(fragmentBanSchema).optional(),\n scenarioTags: z.array(z.string()).optional(),\n});\n\n/**\n * Schema for provenance tracking of generated fragments\n */\nexport const fragmentGeneratedSchema = z.object({\n source: z.enum(['storybook', 'manual', 'ai']),\n sourceFile: z.string().optional(),\n confidence: z.number().min(0).max(1).optional(),\n timestamp: z.string().datetime().optional(),\n});\n\n/**\n * Schema for AI-specific metadata for playground context generation\n */\nexport const aiMetadataSchema = z.object({\n compositionPattern: z.enum(['compound', 'simple', 'controlled']).optional(),\n subComponents: z.array(z.string()).optional(),\n requiredChildren: z.array(z.string()).optional(),\n commonPatterns: z.array(z.string()).optional(),\n});\n\n/**\n * Schema for block definitions\n */\nexport const blockDefinitionSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n category: z.string().min(1),\n components: z.array(z.string().min(1)).min(1),\n code: z.string().min(1),\n tags: z.array(z.string()).optional(),\n});\n\nexport const fragmentDefinitionSchema = z.object({\n component: z.any(), // Allow any component type (function, class, forwardRef, etc.)\n meta: fragmentMetaSchema,\n usage: fragmentUsageSchema,\n props: z.record(propDefinitionSchema),\n relations: z.array(componentRelationSchema).optional(),\n variants: z.array(fragmentVariantSchema), // Allow empty variants array\n contract: fragmentContractSchema.optional(),\n ai: aiMetadataSchema.optional(),\n _generated: fragmentGeneratedSchema.optional(),\n});\n\n/**\n * Config schema - validates required fields, passes through optional config objects.\n * Type definitions are in types.ts - schema just ensures basic structure.\n */\nexport const fragmentsConfigSchema = z.object({\n include: z.array(z.string()).min(1),\n exclude: z.array(z.string()).optional(),\n components: z.array(z.string()).optional(),\n outFile: z.string().optional(),\n framework: z.enum(['react', 'vue', 'svelte']).optional(),\n figmaFile: z.string().url().optional(),\n figmaToken: z.string().optional(),\n screenshots: z.object({}).passthrough().optional(),\n service: z.object({}).passthrough().optional(),\n registry: z.object({}).passthrough().optional(),\n tokens: z.object({\n include: z.array(z.string()).min(1),\n }).passthrough().optional(),\n});\n\n/**\n * @deprecated Use blockDefinitionSchema instead\n */\nexport const recipeDefinitionSchema = blockDefinitionSchema;\n"],"mappings":"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","names":[]}
@@ -1,8 +1,10 @@
1
1
  import { createRequire as __banner_createRequire } from 'module'; const require = __banner_createRequire(import.meta.url);
2
2
  import {
3
- BRAND,
4
3
  fragmentsConfigSchema
5
- } from "./chunk-GHYYFAQN.js";
4
+ } from "./chunk-P33AKQJW.js";
5
+ import {
6
+ BRAND
7
+ } from "./chunk-EKLMXTWU.js";
6
8
 
7
9
  // src/core/config.ts
8
10
  import { existsSync } from "fs";
@@ -65,253 +67,6 @@ ${errors}`);
65
67
  }
66
68
  }
67
69
 
68
- // src/core/discovery.ts
69
- import { resolve as resolve2, dirname as dirname2 } from "path";
70
- import { readFile } from "fs/promises";
71
- import { existsSync as existsSync2 } from "fs";
72
- import fg from "fast-glob";
73
- async function discoverBlockFiles(configDir, exclude) {
74
- const patterns = [
75
- `**/*${BRAND.blockFileExtension}`,
76
- `**/*${BRAND.recipeFileExtension}`
77
- ];
78
- const files = await fg(patterns, {
79
- cwd: configDir,
80
- ignore: exclude ?? ["**/node_modules/**", "**/dist/**"],
81
- absolute: false
82
- });
83
- return files.map((relativePath) => ({
84
- relativePath,
85
- absolutePath: resolve2(configDir, relativePath)
86
- }));
87
- }
88
- async function discoverFragmentFiles(config, configDir) {
89
- const files = await fg(config.include, {
90
- cwd: configDir,
91
- ignore: config.exclude ?? [],
92
- absolute: false
93
- });
94
- return files.map((relativePath) => ({
95
- relativePath,
96
- absolutePath: resolve2(configDir, relativePath)
97
- }));
98
- }
99
- async function discoverComponentFiles(config, configDir) {
100
- if (!config.components || config.components.length === 0) {
101
- return [];
102
- }
103
- const files = await fg(config.components, {
104
- cwd: configDir,
105
- ignore: [
106
- ...config.exclude ?? [],
107
- // Exclude fragment files themselves
108
- ...config.include,
109
- // Exclude test files
110
- "**/*.test.*",
111
- "**/*.spec.*",
112
- "**/__tests__/**"
113
- ],
114
- absolute: false
115
- });
116
- return files.map((relativePath) => ({
117
- relativePath,
118
- absolutePath: resolve2(configDir, relativePath)
119
- }));
120
- }
121
- function extractComponentName(filePath) {
122
- const parts = filePath.replace(/\\/g, "/").split("/");
123
- const fileName = parts[parts.length - 1];
124
- if (fileName === "index.tsx" || fileName === "index.ts") {
125
- return parts[parts.length - 2] ?? "Unknown";
126
- }
127
- return fileName.replace(/\.(tsx?|jsx?)$/, "");
128
- }
129
- var DEFAULT_COMPONENT_PATTERNS = [
130
- "src/components/**/*.tsx",
131
- "src/components/**/index.tsx",
132
- "components/**/*.tsx",
133
- "lib/components/**/*.tsx",
134
- "packages/*/src/components/**/*.tsx"
135
- ];
136
- var DEFAULT_EXCLUDE_PATTERNS = [
137
- "**/*.test.*",
138
- "**/*.spec.*",
139
- "**/*.stories.*",
140
- "**/*.story.*",
141
- "**/__tests__/**",
142
- "**/__mocks__/**",
143
- "**/node_modules/**",
144
- "**/dist/**"
145
- ];
146
- async function discoverComponentsFromSource(configDir, patterns, exclude) {
147
- const searchPatterns = patterns && patterns.length > 0 ? patterns : DEFAULT_COMPONENT_PATTERNS;
148
- const excludePatterns = [
149
- ...DEFAULT_EXCLUDE_PATTERNS,
150
- ...exclude ?? []
151
- ];
152
- const files = await fg(searchPatterns, {
153
- cwd: configDir,
154
- ignore: excludePatterns,
155
- absolute: false
156
- });
157
- const componentFiles = files.filter((file) => {
158
- const name = extractComponentName(file);
159
- return /^[A-Z]/.test(name);
160
- });
161
- const storyPatterns = [
162
- "**/*.stories.tsx",
163
- "**/*.stories.ts",
164
- "**/*.story.tsx",
165
- "**/*.story.ts"
166
- ];
167
- const storyFiles = await fg(storyPatterns, {
168
- cwd: configDir,
169
- ignore: ["**/node_modules/**", "**/dist/**"],
170
- absolute: false
171
- });
172
- const storyMap = /* @__PURE__ */ new Map();
173
- for (const storyFile of storyFiles) {
174
- const name = extractComponentName(storyFile.replace(/\.stories?\.(tsx?|jsx?)$/, ".tsx"));
175
- storyMap.set(name, storyFile);
176
- }
177
- const components = [];
178
- for (const file of componentFiles) {
179
- const name = extractComponentName(file);
180
- const absolutePath = resolve2(configDir, file);
181
- const storyFile = storyMap.get(name);
182
- components.push({
183
- name,
184
- sourcePath: absolutePath,
185
- relativePath: file,
186
- storyPath: storyFile ? resolve2(configDir, storyFile) : void 0
187
- });
188
- }
189
- components.sort((a, b) => a.name.localeCompare(b.name));
190
- return components;
191
- }
192
- async function discoverComponentsFromBarrel(barrelPath, configDir) {
193
- const absoluteBarrelPath = resolve2(configDir, barrelPath);
194
- if (!existsSync2(absoluteBarrelPath)) {
195
- return [];
196
- }
197
- const content = await readFile(absoluteBarrelPath, "utf-8");
198
- const components = [];
199
- const exportRegex = /export\s+(?:\*|{([^}]+)})\s+from\s+['"]([^'"]+)['"]/g;
200
- let match;
201
- while ((match = exportRegex.exec(content)) !== null) {
202
- const exportedNames = match[1];
203
- const importPath = match[2];
204
- const barrelDir = dirname2(absoluteBarrelPath);
205
- let resolvedPath = resolve2(barrelDir, importPath);
206
- if (!resolvedPath.endsWith(".tsx") && !resolvedPath.endsWith(".ts")) {
207
- if (existsSync2(`${resolvedPath}.tsx`)) {
208
- resolvedPath = `${resolvedPath}.tsx`;
209
- } else if (existsSync2(`${resolvedPath}.ts`)) {
210
- resolvedPath = `${resolvedPath}.ts`;
211
- } else if (existsSync2(`${resolvedPath}/index.tsx`)) {
212
- resolvedPath = `${resolvedPath}/index.tsx`;
213
- } else if (existsSync2(`${resolvedPath}/index.ts`)) {
214
- resolvedPath = `${resolvedPath}/index.ts`;
215
- }
216
- }
217
- if (!existsSync2(resolvedPath)) {
218
- continue;
219
- }
220
- if (exportedNames) {
221
- const names = exportedNames.split(",").map((n) => n.trim().split(/\s+as\s+/)[0].trim());
222
- for (const name of names) {
223
- if (/^[A-Z]/.test(name)) {
224
- const relativePath = resolvedPath.replace(configDir + "/", "");
225
- components.push({
226
- name,
227
- sourcePath: resolvedPath,
228
- relativePath
229
- });
230
- }
231
- }
232
- } else {
233
- const name = extractComponentName(importPath);
234
- if (/^[A-Z]/.test(name)) {
235
- const relativePath = resolvedPath.replace(configDir + "/", "");
236
- components.push({
237
- name,
238
- sourcePath: resolvedPath,
239
- relativePath
240
- });
241
- }
242
- }
243
- }
244
- return components;
245
- }
246
- var DEFAULT_TOKEN_PATTERNS = [
247
- "src/**/tokens/**/_variables.scss",
248
- "src/**/tokens/**/variables.scss",
249
- "src/**/styles/**/variables.scss",
250
- "src/**/styles/**/tokens.scss",
251
- "src/**/styles/**/variables.css",
252
- "src/**/theme/**/_variables.scss",
253
- "src/**/theme/**/tokens.css"
254
- ];
255
- async function discoverTokenFiles(configDir, patterns, exclude) {
256
- const searchPatterns = patterns && patterns.length > 0 ? patterns : DEFAULT_TOKEN_PATTERNS;
257
- const files = await fg(searchPatterns, {
258
- cwd: configDir,
259
- ignore: exclude ?? ["**/node_modules/**", "**/dist/**"],
260
- absolute: false
261
- });
262
- return files.map((relativePath) => ({
263
- relativePath,
264
- absolutePath: resolve2(configDir, relativePath)
265
- }));
266
- }
267
- async function discoverInstalledFragments(projectRoot) {
268
- const pkgJsonPath = resolve2(projectRoot, "package.json");
269
- if (!existsSync2(pkgJsonPath)) return [];
270
- const pkgJson = JSON.parse(await readFile(pkgJsonPath, "utf-8"));
271
- const allDeps = { ...pkgJson.dependencies, ...pkgJson.devDependencies };
272
- const results = [];
273
- for (const depName of Object.keys(allDeps)) {
274
- const depDir = resolve2(projectRoot, "node_modules", depName);
275
- const depPkgPath = resolve2(depDir, "package.json");
276
- if (!existsSync2(depPkgPath)) continue;
277
- const depPkg = JSON.parse(await readFile(depPkgPath, "utf-8"));
278
- if (!depPkg.fragments) continue;
279
- const files = await fg(
280
- [`src/**/*${BRAND.fileExtension}`, "src/**/*.stories.tsx"],
281
- { cwd: depDir, ignore: ["**/node_modules/**"], absolute: false }
282
- );
283
- for (const rel of files) {
284
- results.push({
285
- relativePath: `${depName}/${rel}`,
286
- absolutePath: resolve2(depDir, rel)
287
- });
288
- }
289
- }
290
- return results;
291
- }
292
- async function discoverAllComponents(configDir, options = {}) {
293
- const componentsMap = /* @__PURE__ */ new Map();
294
- const sourceComponents = await discoverComponentsFromSource(
295
- configDir,
296
- options.patterns,
297
- options.exclude
298
- );
299
- for (const comp of sourceComponents) {
300
- componentsMap.set(comp.name, comp);
301
- }
302
- if (options.barrelFiles && options.barrelFiles.length > 0) {
303
- for (const barrelFile of options.barrelFiles) {
304
- const barrelComponents = await discoverComponentsFromBarrel(barrelFile, configDir);
305
- for (const comp of barrelComponents) {
306
- if (!componentsMap.has(comp.name)) {
307
- componentsMap.set(comp.name, comp);
308
- }
309
- }
310
- }
311
- }
312
- return Array.from(componentsMap.values()).sort((a, b) => a.name.localeCompare(b.name));
313
- }
314
-
315
70
  // src/core/generators/typescript-extractor.ts
316
71
  import ts from "typescript";
317
72
  import { readFileSync } from "fs";
@@ -562,8 +317,8 @@ function getJSDocDefault(node) {
562
317
 
563
318
  // src/core/generators/registry.ts
564
319
  import { readFileSync as readFileSync2 } from "fs";
565
- import { relative, dirname as dirname3, basename as basename2, join } from "path";
566
- import fg2 from "fast-glob";
320
+ import { relative, dirname as dirname2, basename, join } from "path";
321
+ import fg from "fast-glob";
567
322
  async function generateRegistry(options) {
568
323
  const {
569
324
  projectRoot,
@@ -581,18 +336,18 @@ async function generateRegistry(options) {
581
336
  } = registryOptions;
582
337
  const errors = [];
583
338
  const warnings = [];
584
- const storyFiles = await fg2(storyPatterns, {
339
+ const storyFiles = await fg(storyPatterns, {
585
340
  cwd: projectRoot,
586
341
  ignore: ["**/node_modules/**"],
587
342
  absolute: true
588
343
  });
589
344
  const storyMap = /* @__PURE__ */ new Map();
590
345
  for (const storyPath of storyFiles) {
591
- const storyDir = dirname3(storyPath);
592
- const storyBase = basename2(storyPath).replace(/\.stories\.(tsx?|jsx?)$/, "");
346
+ const storyDir = dirname2(storyPath);
347
+ const storyBase = basename(storyPath).replace(/\.stories\.(tsx?|jsx?)$/, "");
593
348
  storyMap.set(`${storyDir}/${storyBase}`, storyPath);
594
349
  }
595
- const componentFiles = await fg2(componentPatterns, {
350
+ const componentFiles = await fg(componentPatterns, {
596
351
  cwd: projectRoot,
597
352
  ignore: [
598
353
  "**/node_modules/**",
@@ -608,13 +363,13 @@ async function generateRegistry(options) {
608
363
  BRAND.componentsDir,
609
364
  `*${BRAND.fileExtension}`
610
365
  );
611
- const fragmentFiles = await fg2(fragmentPattern, {
366
+ const fragmentFiles = await fg(fragmentPattern, {
612
367
  cwd: projectRoot,
613
368
  absolute: true
614
369
  });
615
370
  const fragmentMap = /* @__PURE__ */ new Map();
616
371
  for (const fragmentPath of fragmentFiles) {
617
- const fragmentName = basename2(fragmentPath).replace(BRAND.fileExtension, "");
372
+ const fragmentName = basename(fragmentPath).replace(BRAND.fileExtension, "");
618
373
  try {
619
374
  const content = readFileSync2(fragmentPath, "utf-8");
620
375
  const fragment = JSON.parse(content);
@@ -643,8 +398,8 @@ async function generateRegistry(options) {
643
398
  if (publicOnly && !extracted.exports.includes(componentName)) {
644
399
  continue;
645
400
  }
646
- const componentDir = dirname3(filePath);
647
- const baseNameWithoutExt = basename2(filePath).replace(/\.(tsx?|jsx?)$/, "");
401
+ const componentDir = dirname2(filePath);
402
+ const baseNameWithoutExt = basename(filePath).replace(/\.(tsx?|jsx?)$/, "");
648
403
  const storyPath = storyMap.get(`${componentDir}/${baseNameWithoutExt}`);
649
404
  if (requireStory && !storyPath) {
650
405
  continue;
@@ -1025,7 +780,7 @@ function estimateTokens(text) {
1025
780
 
1026
781
  // src/core/loader.ts
1027
782
  import { unlink } from "fs/promises";
1028
- import { dirname as dirname4, basename as basename3, join as join2 } from "path";
783
+ import { dirname as dirname3, basename as basename2, join as join2 } from "path";
1029
784
  import { pathToFileURL } from "url";
1030
785
  import { build } from "esbuild";
1031
786
  var DEFINE_FRAGMENT_SHIM = `
@@ -1066,8 +821,8 @@ async function loadFragmentFile(absolutePath) {
1066
821
  const module = await import(fileUrl);
1067
822
  return module.default ?? null;
1068
823
  }
1069
- const sourceDir = dirname4(absolutePath);
1070
- const baseName = basename3(absolutePath, `.${ext}`);
824
+ const sourceDir = dirname3(absolutePath);
825
+ const baseName = basename2(absolutePath, `.${ext}`);
1071
826
  const tempFile = join2(sourceDir, `.${baseName}.fragments-temp-${Date.now()}.cjs`);
1072
827
  try {
1073
828
  await build({
@@ -1520,8 +1275,8 @@ function extractLiteralValue(expr) {
1520
1275
  }
1521
1276
 
1522
1277
  // src/core/previewLoader.ts
1523
- import { existsSync as existsSync4 } from "fs";
1524
- import { join as join3, resolve as resolve3 } from "path";
1278
+ import { existsSync as existsSync3 } from "fs";
1279
+ import { join as join3, resolve as resolve2 } from "path";
1525
1280
  var PREVIEW_FILES = [
1526
1281
  "preview.tsx",
1527
1282
  "preview.ts",
@@ -1531,7 +1286,7 @@ var PREVIEW_FILES = [
1531
1286
  function findPreviewConfigPath(storybookDir) {
1532
1287
  for (const fileName of PREVIEW_FILES) {
1533
1288
  const filePath = join3(storybookDir, fileName);
1534
- if (existsSync4(filePath)) {
1289
+ if (existsSync3(filePath)) {
1535
1290
  return filePath;
1536
1291
  }
1537
1292
  }
@@ -1543,7 +1298,7 @@ function findStorybookDir(projectRoot) {
1543
1298
  join3(projectRoot, "storybook")
1544
1299
  ];
1545
1300
  for (const dir of possiblePaths) {
1546
- if (existsSync4(dir)) {
1301
+ if (existsSync3(dir)) {
1547
1302
  return dir;
1548
1303
  }
1549
1304
  }
@@ -1593,18 +1348,11 @@ export default {
1593
1348
  // src/core/importAnalyzer.ts
1594
1349
  import ts3 from "typescript";
1595
1350
  import { readFileSync as readFileSync3 } from "fs";
1596
- import { dirname as dirname5, basename as basename4 } from "path";
1351
+ import { dirname as dirname4, basename as basename3 } from "path";
1597
1352
 
1598
1353
  export {
1599
1354
  findConfigFile,
1600
1355
  loadConfig,
1601
- discoverBlockFiles,
1602
- discoverFragmentFiles,
1603
- discoverComponentFiles,
1604
- extractComponentName,
1605
- discoverTokenFiles,
1606
- discoverInstalledFragments,
1607
- discoverAllComponents,
1608
1356
  loadFragmentFile,
1609
1357
  parseFragmentFile,
1610
1358
  findPreviewConfigPath,
@@ -1614,4 +1362,4 @@ export {
1614
1362
  generateRegistry,
1615
1363
  generateContextMd
1616
1364
  };
1617
- //# sourceMappingURL=chunk-3T6QL7IY.js.map
1365
+ //# sourceMappingURL=chunk-R6IZZSE7.js.map