galaxy-design 0.2.73 → 0.2.74

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 (50) hide show
  1. package/README.md +113 -95
  2. package/dist/bin.js +17 -1
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/add.js +59 -99
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/init.js +120 -611
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/migrate-tailwind.js +90 -0
  9. package/dist/commands/migrate-tailwind.js.map +1 -0
  10. package/dist/index.js +6 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/registries/registry-angular.json +145 -537
  13. package/dist/registry-angular.json +145 -537
  14. package/dist/schemas/components-schema.json +66 -11
  15. package/dist/schemas/registry-framework-schema.json +17 -7
  16. package/dist/utils/angular-provider-manager.js +1 -1
  17. package/dist/utils/angular-provider-manager.js.map +1 -1
  18. package/dist/utils/component-copier.js +102 -62
  19. package/dist/utils/component-copier.js.map +1 -1
  20. package/dist/utils/component-transformer.js +86 -16
  21. package/dist/utils/component-transformer.js.map +1 -1
  22. package/dist/utils/config-schema.js +160 -9
  23. package/dist/utils/config-schema.js.map +1 -1
  24. package/dist/utils/framework-registry-service.js +181 -0
  25. package/dist/utils/framework-registry-service.js.map +1 -0
  26. package/dist/utils/framework-registry.js +1 -138
  27. package/dist/utils/framework-registry.js.map +1 -1
  28. package/dist/utils/github-fetcher.js +55 -27
  29. package/dist/utils/github-fetcher.js.map +1 -1
  30. package/dist/utils/index.js +4 -3
  31. package/dist/utils/index.js.map +1 -1
  32. package/dist/utils/init-runtime.js +477 -0
  33. package/dist/utils/init-runtime.js.map +1 -0
  34. package/dist/utils/init-scaffold.js +115 -0
  35. package/dist/utils/init-scaffold.js.map +1 -0
  36. package/dist/utils/init-workflow.js +189 -0
  37. package/dist/utils/init-workflow.js.map +1 -0
  38. package/dist/utils/package-manager.js +77 -2
  39. package/dist/utils/package-manager.js.map +1 -1
  40. package/dist/utils/platform-detector.js +12 -8
  41. package/dist/utils/platform-detector.js.map +1 -1
  42. package/dist/utils/registry-loader.js +20 -41
  43. package/dist/utils/registry-loader.js.map +1 -1
  44. package/dist/utils/tailwind-detector.js +162 -0
  45. package/dist/utils/tailwind-detector.js.map +1 -0
  46. package/dist/utils/tailwind-migration.js +401 -0
  47. package/dist/utils/tailwind-migration.js.map +1 -0
  48. package/dist/utils/tailwind-scaffold.js +398 -0
  49. package/dist/utils/tailwind-scaffold.js.map +1 -0
  50. package/package.json +20 -2
@@ -0,0 +1,181 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ import { existsSync, readFileSync } from 'fs';
3
+ import { dirname, join } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+ const registryCache = new Map();
8
+ function normalizeRegistryTarget(target) {
9
+ switch(target){
10
+ case 'nextjs':
11
+ return 'react';
12
+ case 'nuxtjs':
13
+ return 'vue';
14
+ case 'react':
15
+ case 'vue':
16
+ case 'angular':
17
+ case 'react-native':
18
+ case 'flutter':
19
+ return target;
20
+ default:
21
+ throw new Error(`Unsupported registry target: ${String(target)}`);
22
+ }
23
+ }
24
+ function getRegistrySearchPaths(framework, kind, registryDir) {
25
+ const fileName = `${kind}-${framework}.json`;
26
+ if (registryDir) {
27
+ return [
28
+ join(registryDir, fileName),
29
+ join(registryDir, 'registries', fileName)
30
+ ];
31
+ }
32
+ return [
33
+ join(__dirname, '..', 'registries', fileName),
34
+ join(__dirname, '..', fileName)
35
+ ];
36
+ }
37
+ function readRegistryJson(framework, kind, registryDir) {
38
+ const candidates = getRegistrySearchPaths(framework, kind, registryDir);
39
+ for (const candidate of candidates){
40
+ if (!existsSync(candidate)) {
41
+ continue;
42
+ }
43
+ const content = readFileSync(candidate, 'utf-8');
44
+ return JSON.parse(content);
45
+ }
46
+ return null;
47
+ }
48
+ export function loadFrameworkRegistry(target, options) {
49
+ const framework = normalizeRegistryTarget(target);
50
+ const includeBlocks = (options == null ? void 0 : options.includeBlocks) !== false;
51
+ const cacheKey = [
52
+ framework,
53
+ (options == null ? void 0 : options.registryDir) || '',
54
+ includeBlocks
55
+ ].filter(Boolean).join(':');
56
+ const cached = registryCache.get(cacheKey);
57
+ if (cached) {
58
+ return cached;
59
+ }
60
+ const registry = readRegistryJson(framework, 'registry', options == null ? void 0 : options.registryDir);
61
+ if (!registry) {
62
+ const attemptedPaths = getRegistrySearchPaths(framework, 'registry', options == null ? void 0 : options.registryDir);
63
+ throw new Error(`Registry not found for ${target}. Looked in: ${attemptedPaths.join(', ')}`);
64
+ }
65
+ const mergedRegistry = _extends({}, registry, {
66
+ framework,
67
+ platform: registry.platform || framework,
68
+ components: _extends({}, registry.components),
69
+ groups: _extends({}, registry.groups)
70
+ });
71
+ if (includeBlocks) {
72
+ const blocksRegistry = readRegistryJson(framework, 'blocks', options == null ? void 0 : options.registryDir);
73
+ if (blocksRegistry) {
74
+ mergedRegistry.components = _extends({}, mergedRegistry.components, blocksRegistry.components);
75
+ mergedRegistry.groups = _extends({}, mergedRegistry.groups, blocksRegistry.groups);
76
+ }
77
+ }
78
+ registryCache.set(cacheKey, mergedRegistry);
79
+ return mergedRegistry;
80
+ }
81
+ export function getFrameworkComponent(target, name, options) {
82
+ return loadFrameworkRegistry(target, options).components[name];
83
+ }
84
+ export function getAllFrameworkComponents(target, options) {
85
+ return loadFrameworkRegistry(target, options).components;
86
+ }
87
+ export function getAllFrameworkGroups(target, options) {
88
+ return loadFrameworkRegistry(target, options).groups;
89
+ }
90
+ export function frameworkComponentExists(target, name, options) {
91
+ return !!getFrameworkComponent(target, name, options);
92
+ }
93
+ export function getFrameworkComponentsByType(target, type, options) {
94
+ return Object.values(getAllFrameworkComponents(target, options)).filter((component)=>component.type === type);
95
+ }
96
+ export function getFrameworkComponentsByGroup(target, groupName, options) {
97
+ const registry = loadFrameworkRegistry(target, options);
98
+ const group = registry.groups[groupName];
99
+ if (!group) {
100
+ return [];
101
+ }
102
+ return group.components.map((name)=>registry.components[name]).filter(Boolean);
103
+ }
104
+ export function resolveFrameworkComponentName(target, input, options) {
105
+ const registry = loadFrameworkRegistry(target, options);
106
+ if (registry.components[input] || registry.groups[input]) {
107
+ return input;
108
+ }
109
+ const lowerInput = input.toLowerCase();
110
+ for (const name of Object.keys(registry.components)){
111
+ if (name.toLowerCase() === lowerInput) {
112
+ return name;
113
+ }
114
+ }
115
+ for (const name of Object.keys(registry.groups)){
116
+ if (name.toLowerCase() === lowerInput) {
117
+ return name;
118
+ }
119
+ }
120
+ return null;
121
+ }
122
+ export function getFrameworkComponentDependencies(target, name, options) {
123
+ const component = getFrameworkComponent(target, name, options);
124
+ if (!component) {
125
+ return {
126
+ dependencies: [],
127
+ devDependencies: [],
128
+ registryDependencies: []
129
+ };
130
+ }
131
+ return {
132
+ dependencies: [
133
+ ...component.dependencies || [],
134
+ ...component.peerDependencies || []
135
+ ],
136
+ devDependencies: component.devDependencies || [],
137
+ registryDependencies: component.registryDependencies || []
138
+ };
139
+ }
140
+ export function resolveFrameworkComponentGraph(target, componentNames, options) {
141
+ const registry = loadFrameworkRegistry(target, options);
142
+ const resolved = new Set();
143
+ const toProcess = [
144
+ ...componentNames
145
+ ];
146
+ while(toProcess.length > 0){
147
+ var _registry_components_componentName;
148
+ const componentName = toProcess.shift();
149
+ if (!componentName || resolved.has(componentName)) {
150
+ continue;
151
+ }
152
+ resolved.add(componentName);
153
+ const dependencies = ((_registry_components_componentName = registry.components[componentName]) == null ? void 0 : _registry_components_componentName.registryDependencies) || [];
154
+ for (const dependency of dependencies){
155
+ if (!resolved.has(dependency)) {
156
+ toProcess.push(dependency);
157
+ }
158
+ }
159
+ }
160
+ return Array.from(resolved);
161
+ }
162
+ export function validateFrameworkComponentDependencies(target, name, options) {
163
+ const registry = loadFrameworkRegistry(target, options);
164
+ const component = registry.components[name];
165
+ if (!component) {
166
+ return {
167
+ valid: false,
168
+ missing: []
169
+ };
170
+ }
171
+ const missing = (component.registryDependencies || []).filter((dependency)=>!registry.components[dependency]);
172
+ return {
173
+ valid: missing.length === 0,
174
+ missing
175
+ };
176
+ }
177
+ export function clearFrameworkRegistryCache() {
178
+ registryCache.clear();
179
+ }
180
+
181
+ //# sourceMappingURL=framework-registry-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/framework-registry-service.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { fileURLToPath } from 'url';\nimport type { Framework } from './config-schema.js';\nimport type { Platform } from './platform-detector.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport type RegistryFramework =\n | 'react'\n | 'vue'\n | 'angular'\n | 'react-native'\n | 'flutter';\n\nexport type RegistryTarget = Framework | Exclude<Platform, 'unknown'>;\n\nexport interface FrameworkComponentProvider {\n import: string;\n function: string;\n}\n\nexport interface FrameworkRegistryComponent {\n name: string;\n type: string;\n description: string;\n files: string[];\n dependencies?: string[];\n devDependencies?: string[];\n peerDependencies?: string[];\n registryDependencies?: string[];\n category?: string;\n exports?: string[];\n selector?: string;\n providers?: FrameworkComponentProvider;\n [key: string]: unknown;\n}\n\nexport interface FrameworkComponentGroup {\n name: string;\n description?: string;\n components: string[];\n}\n\nexport interface FrameworkRegistry {\n name: string;\n framework?: RegistryFramework;\n platform?: RegistryFramework;\n version?: string;\n components: Record<string, FrameworkRegistryComponent>;\n groups: Record<string, FrameworkComponentGroup>;\n}\n\nconst registryCache = new Map<string, FrameworkRegistry>();\n\nfunction normalizeRegistryTarget(target: RegistryTarget): RegistryFramework {\n switch (target) {\n case 'nextjs':\n return 'react';\n case 'nuxtjs':\n return 'vue';\n case 'react':\n case 'vue':\n case 'angular':\n case 'react-native':\n case 'flutter':\n return target;\n default:\n throw new Error(`Unsupported registry target: ${String(target)}`);\n }\n}\n\nfunction getRegistrySearchPaths(\n framework: RegistryFramework,\n kind: 'registry' | 'blocks',\n registryDir?: string,\n): string[] {\n const fileName = `${kind}-${framework}.json`;\n\n if (registryDir) {\n return [\n join(registryDir, fileName),\n join(registryDir, 'registries', fileName),\n ];\n }\n\n return [\n join(__dirname, '..', 'registries', fileName),\n join(__dirname, '..', fileName),\n ];\n}\n\nfunction readRegistryJson(\n framework: RegistryFramework,\n kind: 'registry' | 'blocks',\n registryDir?: string,\n): FrameworkRegistry | null {\n const candidates = getRegistrySearchPaths(framework, kind, registryDir);\n\n for (const candidate of candidates) {\n if (!existsSync(candidate)) {\n continue;\n }\n\n const content = readFileSync(candidate, 'utf-8');\n return JSON.parse(content) as FrameworkRegistry;\n }\n\n return null;\n}\n\nexport function loadFrameworkRegistry(\n target: RegistryTarget,\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): FrameworkRegistry {\n const framework = normalizeRegistryTarget(target);\n const includeBlocks = options?.includeBlocks !== false;\n const cacheKey = [framework, options?.registryDir || '', includeBlocks]\n .filter(Boolean)\n .join(':');\n\n const cached = registryCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n const registry = readRegistryJson(\n framework,\n 'registry',\n options?.registryDir,\n );\n\n if (!registry) {\n const attemptedPaths = getRegistrySearchPaths(\n framework,\n 'registry',\n options?.registryDir,\n );\n throw new Error(\n `Registry not found for ${target}. Looked in: ${attemptedPaths.join(', ')}`,\n );\n }\n\n const mergedRegistry: FrameworkRegistry = {\n ...registry,\n framework,\n platform: registry.platform || framework,\n components: { ...registry.components },\n groups: { ...registry.groups },\n };\n\n if (includeBlocks) {\n const blocksRegistry = readRegistryJson(\n framework,\n 'blocks',\n options?.registryDir,\n );\n\n if (blocksRegistry) {\n mergedRegistry.components = {\n ...mergedRegistry.components,\n ...blocksRegistry.components,\n };\n\n mergedRegistry.groups = {\n ...mergedRegistry.groups,\n ...blocksRegistry.groups,\n };\n }\n }\n\n registryCache.set(cacheKey, mergedRegistry);\n return mergedRegistry;\n}\n\nexport function getFrameworkComponent(\n target: RegistryTarget,\n name: string,\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): FrameworkRegistryComponent | undefined {\n return loadFrameworkRegistry(target, options).components[name];\n}\n\nexport function getAllFrameworkComponents(\n target: RegistryTarget,\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): Record<string, FrameworkRegistryComponent> {\n return loadFrameworkRegistry(target, options).components;\n}\n\nexport function getAllFrameworkGroups(\n target: RegistryTarget,\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): Record<string, FrameworkComponentGroup> {\n return loadFrameworkRegistry(target, options).groups;\n}\n\nexport function frameworkComponentExists(\n target: RegistryTarget,\n name: string,\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): boolean {\n return !!getFrameworkComponent(target, name, options);\n}\n\nexport function getFrameworkComponentsByType(\n target: RegistryTarget,\n type: string,\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): FrameworkRegistryComponent[] {\n return Object.values(getAllFrameworkComponents(target, options)).filter(\n (component) => component.type === type,\n );\n}\n\nexport function getFrameworkComponentsByGroup(\n target: RegistryTarget,\n groupName: string,\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): FrameworkRegistryComponent[] {\n const registry = loadFrameworkRegistry(target, options);\n const group = registry.groups[groupName];\n\n if (!group) {\n return [];\n }\n\n return group.components\n .map((name) => registry.components[name])\n .filter(Boolean);\n}\n\nexport function resolveFrameworkComponentName(\n target: RegistryTarget,\n input: string,\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): string | null {\n const registry = loadFrameworkRegistry(target, options);\n\n if (registry.components[input] || registry.groups[input]) {\n return input;\n }\n\n const lowerInput = input.toLowerCase();\n for (const name of Object.keys(registry.components)) {\n if (name.toLowerCase() === lowerInput) {\n return name;\n }\n }\n\n for (const name of Object.keys(registry.groups)) {\n if (name.toLowerCase() === lowerInput) {\n return name;\n }\n }\n\n return null;\n}\n\nexport function getFrameworkComponentDependencies(\n target: RegistryTarget,\n name: string,\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): {\n dependencies: string[];\n devDependencies: string[];\n registryDependencies: string[];\n} {\n const component = getFrameworkComponent(target, name, options);\n\n if (!component) {\n return {\n dependencies: [],\n devDependencies: [],\n registryDependencies: [],\n };\n }\n\n return {\n dependencies: [\n ...(component.dependencies || []),\n ...(component.peerDependencies || []),\n ],\n devDependencies: component.devDependencies || [],\n registryDependencies: component.registryDependencies || [],\n };\n}\n\nexport function resolveFrameworkComponentGraph(\n target: RegistryTarget,\n componentNames: string[],\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): string[] {\n const registry = loadFrameworkRegistry(target, options);\n const resolved = new Set<string>();\n const toProcess = [...componentNames];\n\n while (toProcess.length > 0) {\n const componentName = toProcess.shift();\n\n if (!componentName || resolved.has(componentName)) {\n continue;\n }\n\n resolved.add(componentName);\n\n const dependencies =\n registry.components[componentName]?.registryDependencies || [];\n for (const dependency of dependencies) {\n if (!resolved.has(dependency)) {\n toProcess.push(dependency);\n }\n }\n }\n\n return Array.from(resolved);\n}\n\nexport function validateFrameworkComponentDependencies(\n target: RegistryTarget,\n name: string,\n options?: {\n includeBlocks?: boolean;\n registryDir?: string;\n },\n): { valid: boolean; missing: string[] } {\n const registry = loadFrameworkRegistry(target, options);\n const component = registry.components[name];\n\n if (!component) {\n return { valid: false, missing: [] };\n }\n\n const missing = (component.registryDependencies || []).filter(\n (dependency) => !registry.components[dependency],\n );\n\n return {\n valid: missing.length === 0,\n missing,\n };\n}\n\nexport function clearFrameworkRegistryCache(): void {\n registryCache.clear();\n}\n"],"names":["existsSync","readFileSync","dirname","join","fileURLToPath","__filename","url","__dirname","registryCache","Map","normalizeRegistryTarget","target","Error","String","getRegistrySearchPaths","framework","kind","registryDir","fileName","readRegistryJson","candidates","candidate","content","JSON","parse","loadFrameworkRegistry","options","includeBlocks","cacheKey","filter","Boolean","cached","get","registry","attemptedPaths","mergedRegistry","platform","components","groups","blocksRegistry","set","getFrameworkComponent","name","getAllFrameworkComponents","getAllFrameworkGroups","frameworkComponentExists","getFrameworkComponentsByType","type","Object","values","component","getFrameworkComponentsByGroup","groupName","group","map","resolveFrameworkComponentName","input","lowerInput","toLowerCase","keys","getFrameworkComponentDependencies","dependencies","devDependencies","registryDependencies","peerDependencies","resolveFrameworkComponentGraph","componentNames","resolved","Set","toProcess","length","componentName","shift","has","add","dependency","push","Array","from","validateFrameworkComponentDependencies","valid","missing","clearFrameworkRegistryCache","clear"],"mappings":"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"}
@@ -1,140 +1,3 @@
1
- import { _ as _extends } from "@swc/helpers/_/_extends";
2
- import { readFileSync, existsSync } from 'fs';
3
- import { resolve, dirname } from 'path';
4
- import { fileURLToPath } from 'url';
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = dirname(__filename);
7
- // Cache registries by framework
8
- const registryCache = new Map();
9
- /**
10
- * Load framework-specific registry (includes both components and blocks)
11
- */ export function loadFrameworkRegistry(framework) {
12
- // Check cache first
13
- if (registryCache.has(framework)) {
14
- return registryCache.get(framework);
15
- }
16
- // Map Next.js to React registry and Nuxt.js to Vue registry
17
- let registryFramework = framework;
18
- if (framework === 'nextjs') {
19
- registryFramework = 'react';
20
- } else if (framework === 'nuxtjs') {
21
- registryFramework = 'vue';
22
- }
23
- const registryPath = resolve(__dirname, `../registries/registry-${registryFramework}.json`);
24
- if (!existsSync(registryPath)) {
25
- throw new Error(`Registry not found for framework: ${framework}. Expected at ${registryPath}`);
26
- }
27
- try {
28
- const registryContent = readFileSync(registryPath, 'utf-8');
29
- const registry = JSON.parse(registryContent);
30
- // Try to load and merge blocks registry
31
- const blocksRegistryPath = resolve(__dirname, `../registries/blocks-${registryFramework}.json`);
32
- if (existsSync(blocksRegistryPath)) {
33
- try {
34
- const blocksContent = readFileSync(blocksRegistryPath, 'utf-8');
35
- const blocksRegistry = JSON.parse(blocksContent);
36
- // Merge blocks into main registry
37
- registry.components = _extends({}, registry.components, blocksRegistry.components);
38
- registry.groups = _extends({}, registry.groups, blocksRegistry.groups);
39
- } catch (error) {
40
- // Blocks registry is optional, so we just log and continue
41
- console.warn(`Warning: Failed to load blocks registry for ${framework}`);
42
- }
43
- }
44
- // Cache the merged registry
45
- registryCache.set(framework, registry);
46
- return registry;
47
- } catch (error) {
48
- throw new Error(`Failed to load registry for ${framework}: ${error}`);
49
- }
50
- }
51
- /**
52
- * Get a component by name from framework registry
53
- */ export function getFrameworkComponent(framework, name) {
54
- const registry = loadFrameworkRegistry(framework);
55
- return registry.components[name];
56
- }
57
- /**
58
- * Get all components from framework registry
59
- */ export function getAllFrameworkComponents(framework) {
60
- const registry = loadFrameworkRegistry(framework);
61
- return registry.components;
62
- }
63
- /**
64
- * Get components by type from framework registry
65
- */ export function getFrameworkComponentsByType(framework, type) {
66
- const registry = loadFrameworkRegistry(framework);
67
- return Object.values(registry.components).filter((c)=>c.type === type);
68
- }
69
- /**
70
- * Get components by group name from framework registry
71
- */ export function getFrameworkComponentsByGroup(framework, groupName) {
72
- const registry = loadFrameworkRegistry(framework);
73
- const group = registry.groups[groupName];
74
- if (!group) {
75
- return [];
76
- }
77
- return group.components.map((name)=>registry.components[name]).filter(Boolean);
78
- }
79
- /**
80
- * Get all component groups from framework registry
81
- */ export function getAllFrameworkGroups(framework) {
82
- const registry = loadFrameworkRegistry(framework);
83
- return registry.groups;
84
- }
85
- /**
86
- * Check if a component exists in framework registry
87
- */ export function frameworkComponentExists(framework, name) {
88
- const registry = loadFrameworkRegistry(framework);
89
- return !!registry.components[name];
90
- }
91
- /**
92
- * Get component dependencies (including registry dependencies)
93
- */ export function getFrameworkComponentDependencies(framework, name) {
94
- const component = getFrameworkComponent(framework, name);
95
- if (!component) {
96
- return {
97
- dependencies: [],
98
- devDependencies: [],
99
- registryDependencies: []
100
- };
101
- }
102
- // Merge peerDependencies into dependencies for installation
103
- const allDependencies = [
104
- ...component.dependencies || [],
105
- ...component.peerDependencies || []
106
- ];
107
- return {
108
- dependencies: allDependencies,
109
- devDependencies: component.devDependencies || [],
110
- registryDependencies: component.registryDependencies || []
111
- };
112
- }
113
- /**
114
- * Resolve component name with aliases (case-insensitive match)
115
- */ export function resolveFrameworkComponentName(framework, input) {
116
- const registry = loadFrameworkRegistry(framework);
117
- // Check exact match
118
- if (registry.components[input]) {
119
- return input;
120
- }
121
- // Check group match
122
- if (registry.groups[input]) {
123
- return input;
124
- }
125
- // Check case-insensitive match
126
- const lowerInput = input.toLowerCase();
127
- for (const name of Object.keys(registry.components)){
128
- if (name.toLowerCase() === lowerInput) {
129
- return name;
130
- }
131
- }
132
- return null;
133
- }
134
- /**
135
- * Clear registry cache (useful for testing)
136
- */ export function clearRegistryCache() {
137
- registryCache.clear();
138
- }
1
+ export { clearFrameworkRegistryCache as clearRegistryCache, frameworkComponentExists, getAllFrameworkComponents, getAllFrameworkGroups, getFrameworkComponent, getFrameworkComponentDependencies, getFrameworkComponentsByGroup, getFrameworkComponentsByType, loadFrameworkRegistry, resolveFrameworkComponentGraph, resolveFrameworkComponentName, validateFrameworkComponentDependencies } from './framework-registry-service.js';
139
2
 
140
3
  //# sourceMappingURL=framework-registry.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/framework-registry.ts"],"sourcesContent":["import { readFileSync, existsSync } from 'fs';\nimport { resolve, dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport type { Framework } from './config-schema.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport interface FrameworkComponent {\n name: string;\n type: 'form' | 'layout' | 'navigation' | 'feedback' | 'data-display' | 'modal-overlay' | 'block' | 'other';\n description: string;\n files: string[];\n dependencies: string[];\n devDependencies: string[];\n peerDependencies?: string[];\n registryDependencies: string[];\n category: string;\n}\n\nexport interface FrameworkComponentGroup {\n name: string;\n components: string[];\n}\n\nexport interface FrameworkRegistry {\n name: string;\n components: Record<string, FrameworkComponent>;\n groups: Record<string, FrameworkComponentGroup>;\n}\n\n// Cache registries by framework\nconst registryCache: Map<Framework, FrameworkRegistry> = new Map();\n\n/**\n * Load framework-specific registry (includes both components and blocks)\n */\nexport function loadFrameworkRegistry(framework: Framework): FrameworkRegistry {\n // Check cache first\n if (registryCache.has(framework)) {\n return registryCache.get(framework)!;\n }\n\n // Map Next.js to React registry and Nuxt.js to Vue registry\n let registryFramework = framework;\n if (framework === 'nextjs') {\n registryFramework = 'react';\n } else if (framework === 'nuxtjs') {\n registryFramework = 'vue';\n }\n\n const registryPath = resolve(__dirname, `../registries/registry-${registryFramework}.json`);\n\n if (!existsSync(registryPath)) {\n throw new Error(\n `Registry not found for framework: ${framework}. Expected at ${registryPath}`\n );\n }\n\n try {\n const registryContent = readFileSync(registryPath, 'utf-8');\n const registry: FrameworkRegistry = JSON.parse(registryContent);\n\n // Try to load and merge blocks registry\n const blocksRegistryPath = resolve(__dirname, `../registries/blocks-${registryFramework}.json`);\n if (existsSync(blocksRegistryPath)) {\n try {\n const blocksContent = readFileSync(blocksRegistryPath, 'utf-8');\n const blocksRegistry: FrameworkRegistry = JSON.parse(blocksContent);\n\n // Merge blocks into main registry\n registry.components = {\n ...registry.components,\n ...blocksRegistry.components,\n };\n\n registry.groups = {\n ...registry.groups,\n ...blocksRegistry.groups,\n };\n } catch (error) {\n // Blocks registry is optional, so we just log and continue\n console.warn(`Warning: Failed to load blocks registry for ${framework}`);\n }\n }\n\n // Cache the merged registry\n registryCache.set(framework, registry);\n\n return registry;\n } catch (error) {\n throw new Error(`Failed to load registry for ${framework}: ${error}`);\n }\n}\n\n/**\n * Get a component by name from framework registry\n */\nexport function getFrameworkComponent(\n framework: Framework,\n name: string\n): FrameworkComponent | undefined {\n const registry = loadFrameworkRegistry(framework);\n return registry.components[name];\n}\n\n/**\n * Get all components from framework registry\n */\nexport function getAllFrameworkComponents(\n framework: Framework\n): Record<string, FrameworkComponent> {\n const registry = loadFrameworkRegistry(framework);\n return registry.components;\n}\n\n/**\n * Get components by type from framework registry\n */\nexport function getFrameworkComponentsByType(\n framework: Framework,\n type: FrameworkComponent['type']\n): FrameworkComponent[] {\n const registry = loadFrameworkRegistry(framework);\n return Object.values(registry.components).filter((c) => c.type === type);\n}\n\n/**\n * Get components by group name from framework registry\n */\nexport function getFrameworkComponentsByGroup(\n framework: Framework,\n groupName: string\n): FrameworkComponent[] {\n const registry = loadFrameworkRegistry(framework);\n const group = registry.groups[groupName];\n\n if (!group) {\n return [];\n }\n\n return group.components\n .map((name) => registry.components[name])\n .filter(Boolean);\n}\n\n/**\n * Get all component groups from framework registry\n */\nexport function getAllFrameworkGroups(\n framework: Framework\n): Record<string, FrameworkComponentGroup> {\n const registry = loadFrameworkRegistry(framework);\n return registry.groups;\n}\n\n/**\n * Check if a component exists in framework registry\n */\nexport function frameworkComponentExists(\n framework: Framework,\n name: string\n): boolean {\n const registry = loadFrameworkRegistry(framework);\n return !!registry.components[name];\n}\n\n/**\n * Get component dependencies (including registry dependencies)\n */\nexport function getFrameworkComponentDependencies(\n framework: Framework,\n name: string\n): {\n dependencies: string[];\n devDependencies: string[];\n registryDependencies: string[];\n} {\n const component = getFrameworkComponent(framework, name);\n\n if (!component) {\n return {\n dependencies: [],\n devDependencies: [],\n registryDependencies: [],\n };\n }\n\n // Merge peerDependencies into dependencies for installation\n const allDependencies = [\n ...(component.dependencies || []),\n ...(component.peerDependencies || []),\n ];\n\n return {\n dependencies: allDependencies,\n devDependencies: component.devDependencies || [],\n registryDependencies: component.registryDependencies || [],\n };\n}\n\n/**\n * Resolve component name with aliases (case-insensitive match)\n */\nexport function resolveFrameworkComponentName(\n framework: Framework,\n input: string\n): string | null {\n const registry = loadFrameworkRegistry(framework);\n\n // Check exact match\n if (registry.components[input]) {\n return input;\n }\n\n // Check group match\n if (registry.groups[input]) {\n return input;\n }\n\n // Check case-insensitive match\n const lowerInput = input.toLowerCase();\n for (const name of Object.keys(registry.components)) {\n if (name.toLowerCase() === lowerInput) {\n return name;\n }\n }\n\n return null;\n}\n\n/**\n * Clear registry cache (useful for testing)\n */\nexport function clearRegistryCache(): void {\n registryCache.clear();\n}\n"],"names":["readFileSync","existsSync","resolve","dirname","fileURLToPath","__filename","url","__dirname","registryCache","Map","loadFrameworkRegistry","framework","has","get","registryFramework","registryPath","Error","registryContent","registry","JSON","parse","blocksRegistryPath","blocksContent","blocksRegistry","components","groups","error","console","warn","set","getFrameworkComponent","name","getAllFrameworkComponents","getFrameworkComponentsByType","type","Object","values","filter","c","getFrameworkComponentsByGroup","groupName","group","map","Boolean","getAllFrameworkGroups","frameworkComponentExists","getFrameworkComponentDependencies","component","dependencies","devDependencies","registryDependencies","allDependencies","peerDependencies","resolveFrameworkComponentName","input","lowerInput","toLowerCase","keys","clearRegistryCache","clear"],"mappings":";AAAA,SAASA,YAAY,EAAEC,UAAU,QAAQ,KAAK;AAC9C,SAASC,OAAO,EAAEC,OAAO,QAAQ,OAAO;AACxC,SAASC,aAAa,QAAQ,MAAM;AAGpC,MAAMC,aAAaD,cAAc,YAAYE,GAAG;AAChD,MAAMC,YAAYJ,QAAQE;AAyB1B,gCAAgC;AAChC,MAAMG,gBAAmD,IAAIC;AAE7D;;CAEC,GACD,OAAO,SAASC,sBAAsBC,SAAoB;IACxD,oBAAoB;IACpB,IAAIH,cAAcI,GAAG,CAACD,YAAY;QAChC,OAAOH,cAAcK,GAAG,CAACF;IAC3B;IAEA,4DAA4D;IAC5D,IAAIG,oBAAoBH;IACxB,IAAIA,cAAc,UAAU;QAC1BG,oBAAoB;IACtB,OAAO,IAAIH,cAAc,UAAU;QACjCG,oBAAoB;IACtB;IAEA,MAAMC,eAAeb,QAAQK,WAAW,CAAC,uBAAuB,EAAEO,kBAAkB,KAAK,CAAC;IAE1F,IAAI,CAACb,WAAWc,eAAe;QAC7B,MAAM,IAAIC,MACR,CAAC,kCAAkC,EAAEL,UAAU,cAAc,EAAEI,cAAc;IAEjF;IAEA,IAAI;QACF,MAAME,kBAAkBjB,aAAae,cAAc;QACnD,MAAMG,WAA8BC,KAAKC,KAAK,CAACH;QAE/C,wCAAwC;QACxC,MAAMI,qBAAqBnB,QAAQK,WAAW,CAAC,qBAAqB,EAAEO,kBAAkB,KAAK,CAAC;QAC9F,IAAIb,WAAWoB,qBAAqB;YAClC,IAAI;gBACF,MAAMC,gBAAgBtB,aAAaqB,oBAAoB;gBACvD,MAAME,iBAAoCJ,KAAKC,KAAK,CAACE;gBAErD,kCAAkC;gBAClCJ,SAASM,UAAU,GAAG,aACjBN,SAASM,UAAU,EACnBD,eAAeC,UAAU;gBAG9BN,SAASO,MAAM,GAAG,aACbP,SAASO,MAAM,EACfF,eAAeE,MAAM;YAE5B,EAAE,OAAOC,OAAO;gBACd,2DAA2D;gBAC3DC,QAAQC,IAAI,CAAC,CAAC,4CAA4C,EAAEjB,WAAW;YACzE;QACF;QAEA,4BAA4B;QAC5BH,cAAcqB,GAAG,CAAClB,WAAWO;QAE7B,OAAOA;IACT,EAAE,OAAOQ,OAAO;QACd,MAAM,IAAIV,MAAM,CAAC,4BAA4B,EAAEL,UAAU,EAAE,EAAEe,OAAO;IACtE;AACF;AAEA;;CAEC,GACD,OAAO,SAASI,sBACdnB,SAAoB,EACpBoB,IAAY;IAEZ,MAAMb,WAAWR,sBAAsBC;IACvC,OAAOO,SAASM,UAAU,CAACO,KAAK;AAClC;AAEA;;CAEC,GACD,OAAO,SAASC,0BACdrB,SAAoB;IAEpB,MAAMO,WAAWR,sBAAsBC;IACvC,OAAOO,SAASM,UAAU;AAC5B;AAEA;;CAEC,GACD,OAAO,SAASS,6BACdtB,SAAoB,EACpBuB,IAAgC;IAEhC,MAAMhB,WAAWR,sBAAsBC;IACvC,OAAOwB,OAAOC,MAAM,CAAClB,SAASM,UAAU,EAAEa,MAAM,CAAC,CAACC,IAAMA,EAAEJ,IAAI,KAAKA;AACrE;AAEA;;CAEC,GACD,OAAO,SAASK,8BACd5B,SAAoB,EACpB6B,SAAiB;IAEjB,MAAMtB,WAAWR,sBAAsBC;IACvC,MAAM8B,QAAQvB,SAASO,MAAM,CAACe,UAAU;IAExC,IAAI,CAACC,OAAO;QACV,OAAO,EAAE;IACX;IAEA,OAAOA,MAAMjB,UAAU,CACpBkB,GAAG,CAAC,CAACX,OAASb,SAASM,UAAU,CAACO,KAAK,EACvCM,MAAM,CAACM;AACZ;AAEA;;CAEC,GACD,OAAO,SAASC,sBACdjC,SAAoB;IAEpB,MAAMO,WAAWR,sBAAsBC;IACvC,OAAOO,SAASO,MAAM;AACxB;AAEA;;CAEC,GACD,OAAO,SAASoB,yBACdlC,SAAoB,EACpBoB,IAAY;IAEZ,MAAMb,WAAWR,sBAAsBC;IACvC,OAAO,CAAC,CAACO,SAASM,UAAU,CAACO,KAAK;AACpC;AAEA;;CAEC,GACD,OAAO,SAASe,kCACdnC,SAAoB,EACpBoB,IAAY;IAMZ,MAAMgB,YAAYjB,sBAAsBnB,WAAWoB;IAEnD,IAAI,CAACgB,WAAW;QACd,OAAO;YACLC,cAAc,EAAE;YAChBC,iBAAiB,EAAE;YACnBC,sBAAsB,EAAE;QAC1B;IACF;IAEA,4DAA4D;IAC5D,MAAMC,kBAAkB;WAClBJ,UAAUC,YAAY,IAAI,EAAE;WAC5BD,UAAUK,gBAAgB,IAAI,EAAE;KACrC;IAED,OAAO;QACLJ,cAAcG;QACdF,iBAAiBF,UAAUE,eAAe,IAAI,EAAE;QAChDC,sBAAsBH,UAAUG,oBAAoB,IAAI,EAAE;IAC5D;AACF;AAEA;;CAEC,GACD,OAAO,SAASG,8BACd1C,SAAoB,EACpB2C,KAAa;IAEb,MAAMpC,WAAWR,sBAAsBC;IAEvC,oBAAoB;IACpB,IAAIO,SAASM,UAAU,CAAC8B,MAAM,EAAE;QAC9B,OAAOA;IACT;IAEA,oBAAoB;IACpB,IAAIpC,SAASO,MAAM,CAAC6B,MAAM,EAAE;QAC1B,OAAOA;IACT;IAEA,+BAA+B;IAC/B,MAAMC,aAAaD,MAAME,WAAW;IACpC,KAAK,MAAMzB,QAAQI,OAAOsB,IAAI,CAACvC,SAASM,UAAU,EAAG;QACnD,IAAIO,KAAKyB,WAAW,OAAOD,YAAY;YACrC,OAAOxB;QACT;IACF;IAEA,OAAO;AACT;AAEA;;CAEC,GACD,OAAO,SAAS2B;IACdlD,cAAcmD,KAAK;AACrB"}
1
+ {"version":3,"sources":["../../src/utils/framework-registry.ts"],"sourcesContent":["export type {\n FrameworkComponentGroup,\n FrameworkRegistry,\n FrameworkRegistryComponent as FrameworkComponent,\n FrameworkComponentProvider,\n RegistryFramework,\n RegistryTarget,\n} from './framework-registry-service.js';\nexport {\n clearFrameworkRegistryCache as clearRegistryCache,\n frameworkComponentExists,\n getAllFrameworkComponents,\n getAllFrameworkGroups,\n getFrameworkComponent,\n getFrameworkComponentDependencies,\n getFrameworkComponentsByGroup,\n getFrameworkComponentsByType,\n loadFrameworkRegistry,\n resolveFrameworkComponentGraph,\n resolveFrameworkComponentName,\n validateFrameworkComponentDependencies,\n} from './framework-registry-service.js';\n"],"names":["clearFrameworkRegistryCache","clearRegistryCache","frameworkComponentExists","getAllFrameworkComponents","getAllFrameworkGroups","getFrameworkComponent","getFrameworkComponentDependencies","getFrameworkComponentsByGroup","getFrameworkComponentsByType","loadFrameworkRegistry","resolveFrameworkComponentGraph","resolveFrameworkComponentName","validateFrameworkComponentDependencies"],"mappings":"AAQA,SACEA,+BAA+BC,kBAAkB,EACjDC,wBAAwB,EACxBC,yBAAyB,EACzBC,qBAAqB,EACrBC,qBAAqB,EACrBC,iCAAiC,EACjCC,6BAA6B,EAC7BC,4BAA4B,EAC5BC,qBAAqB,EACrBC,8BAA8B,EAC9BC,6BAA6B,EAC7BC,sCAAsC,QACjC,kCAAkC"}
@@ -14,34 +14,62 @@ import { dirname } from 'path';
14
14
  const cacheBust = Date.now();
15
15
  return `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${filePath}?v=${cacheBust}`;
16
16
  }
17
+ function getCandidateFileNames(filePath) {
18
+ const segments = filePath.split('/');
19
+ const fileName = segments.pop();
20
+ if (!fileName) {
21
+ return [
22
+ filePath
23
+ ];
24
+ }
25
+ const candidates = [
26
+ fileName
27
+ ];
28
+ const capitalized = fileName.charAt(0).toUpperCase() + fileName.slice(1);
29
+ if (!candidates.includes(capitalized)) {
30
+ candidates.push(capitalized);
31
+ }
32
+ return candidates.map((candidate)=>[
33
+ ...segments,
34
+ candidate
35
+ ].join('/'));
36
+ }
17
37
  /**
18
38
  * Fetch file content from GitHub
19
39
  *
20
40
  * @param filePath - Relative path in repository
21
41
  * @returns File content as string
22
42
  */ export async function fetchFileFromGitHub(filePath) {
23
- const url = getGitHubRawUrl(filePath);
24
- try {
25
- const response = await fetch(url, {
26
- cache: 'no-store',
27
- headers: {
28
- 'Cache-Control': 'no-cache',
29
- Pragma: 'no-cache'
43
+ const errors = [];
44
+ for (const candidatePath of getCandidateFileNames(filePath)){
45
+ const url = getGitHubRawUrl(candidatePath);
46
+ for(let attempt = 1; attempt <= 2; attempt += 1){
47
+ try {
48
+ const response = await fetch(url, {
49
+ cache: 'no-store',
50
+ headers: {
51
+ 'Cache-Control': 'no-cache',
52
+ Pragma: 'no-cache'
53
+ }
54
+ });
55
+ if (!response.ok) {
56
+ if (response.status === 404) {
57
+ errors.push(`404 ${candidatePath}`);
58
+ break;
59
+ }
60
+ throw new Error(`Failed to fetch ${candidatePath}: ${response.status} ${response.statusText}`);
61
+ }
62
+ return await response.text();
63
+ } catch (error) {
64
+ const message = error instanceof Error ? error.message : 'Unknown error';
65
+ errors.push(`${candidatePath} (attempt ${attempt}): ${message}`);
66
+ if (attempt === 2) {
67
+ break;
68
+ }
30
69
  }
31
- });
32
- if (!response.ok) {
33
- if (response.status === 404) {
34
- throw new Error(`File not found: ${filePath}`);
35
- }
36
- throw new Error(`Failed to fetch ${filePath}: ${response.statusText}`);
37
- }
38
- return await response.text();
39
- } catch (error) {
40
- if (error instanceof Error) {
41
- throw new Error(`GitHub fetch error: ${error.message}`);
42
70
  }
43
- throw new Error(`Unknown error fetching ${filePath}`);
44
71
  }
72
+ throw new Error(`GitHub fetch error: ${errors.join(' | ')}`);
45
73
  }
46
74
  /**
47
75
  * Fetch and save file from GitHub to local path
@@ -98,17 +126,17 @@ import { dirname } from 'path';
98
126
  * @param componentName - Component name
99
127
  * @param fileName - File name
100
128
  * @returns GitHub repository path
101
- */ export function getComponentGitHubPath(platform, componentName, fileName) {
129
+ */ export function getComponentGitHubPath(platform, componentName, fileName, sourceType = 'components') {
102
130
  // Map platform to package directory
103
131
  const platformMap = {
104
- vue: 'packages/vue/src/components',
105
- react: 'packages/react/src/components',
106
- angular: 'packages/angular/src/components',
107
- 'react-native': 'packages/react-native/src/components',
108
- flutter: 'packages/flutter/lib/components'
132
+ vue: 'packages/vue/src',
133
+ react: 'packages/react/src',
134
+ angular: 'packages/angular/src',
135
+ 'react-native': 'packages/react-native/src',
136
+ flutter: 'packages/flutter/lib'
109
137
  };
110
- const basePath = platformMap[platform] || `packages/${platform}/src/components`;
111
- return `${basePath}/${componentName}/${fileName}`;
138
+ const basePath = platformMap[platform] || `packages/${platform}/src`;
139
+ return `${basePath}/${sourceType}/${componentName}/${fileName}`;
112
140
  }
113
141
  /**
114
142
  * Check if GitHub repository is accessible
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/github-fetcher.ts"],"sourcesContent":["import { writeFileSync, mkdirSync, existsSync } from 'fs';\nimport { dirname } from 'path';\n\n/**\n * GitHub repository configuration\n */\nconst GITHUB_CONFIG = {\n\towner: 'buikevin',\n\trepo: 'galaxy-design',\n\tbranch: 'main',\n};\n\n/**\n * Get GitHub raw content URL\n */\nexport function getGitHubRawUrl(filePath: string): string {\n\tconst { owner, repo, branch } = GITHUB_CONFIG;\n\tconst cacheBust = Date.now();\n\treturn `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${filePath}?v=${cacheBust}`;\n}\n\n/**\n * Fetch file content from GitHub\n *\n * @param filePath - Relative path in repository\n * @returns File content as string\n */\nexport async function fetchFileFromGitHub(filePath: string): Promise<string> {\n\tconst url = getGitHubRawUrl(filePath);\n\n\ttry {\n\t\tconst response = await fetch(url, {\n\t\t\tcache: 'no-store',\n\t\t\theaders: {\n\t\t\t\t'Cache-Control': 'no-cache',\n\t\t\t\tPragma: 'no-cache',\n\t\t\t},\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tif (response.status === 404) {\n\t\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t\t}\n\t\t\tthrow new Error(`Failed to fetch ${filePath}: ${response.statusText}`);\n\t\t}\n\n\t\treturn await response.text();\n\t} catch (error) {\n\t\tif (error instanceof Error) {\n\t\t\tthrow new Error(`GitHub fetch error: ${error.message}`);\n\t\t}\n\t\tthrow new Error(`Unknown error fetching ${filePath}`);\n\t}\n}\n\n/**\n * Fetch and save file from GitHub to local path\n *\n * @param sourceFilePath - Path in GitHub repository\n * @param targetFilePath - Local file path to save\n * @returns True if successful\n */\nexport async function fetchAndSaveFile(\n\tsourceFilePath: string,\n\ttargetFilePath: string,\n): Promise<boolean> {\n\ttry {\n\t\tconst content = await fetchFileFromGitHub(sourceFilePath);\n\n\t\t// Create directory if it doesn't exist\n\t\tconst dir = dirname(targetFilePath);\n\t\tif (!existsSync(dir)) {\n\t\t\tmkdirSync(dir, { recursive: true });\n\t\t}\n\n\t\t// Write file\n\t\twriteFileSync(targetFilePath, content, 'utf-8');\n\t\treturn true;\n\t} catch (error) {\n\t\tconsole.error(`Failed to fetch and save ${sourceFilePath}:`, error);\n\t\treturn false;\n\t}\n}\n\n/**\n * Fetch multiple files from GitHub\n *\n * @param files - Array of { source: githubPath, target: localPath }\n * @returns Results for each file\n */\nexport async function fetchMultipleFiles(\n\tfiles: Array<{ source: string; target: string }>,\n): Promise<Array<{ file: string; success: boolean; error?: string }>> {\n\tconst results = await Promise.all(\n\t\tfiles.map(async ({ source, target }) => {\n\t\t\ttry {\n\t\t\t\tconst success = await fetchAndSaveFile(source, target);\n\t\t\t\treturn {\n\t\t\t\t\tfile: source,\n\t\t\t\t\tsuccess,\n\t\t\t\t\terror: success ? undefined : 'Failed to fetch',\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\treturn {\n\t\t\t\t\tfile: source,\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: error instanceof Error ? error.message : 'Unknown error',\n\t\t\t\t};\n\t\t\t}\n\t\t}),\n\t);\n\n\treturn results;\n}\n\n/**\n * Get component source path in GitHub repository\n *\n * @param platform - Platform (vue, react, angular, react-native, flutter)\n * @param componentName - Component name\n * @param fileName - File name\n * @returns GitHub repository path\n */\nexport function getComponentGitHubPath(\n\tplatform: string,\n\tcomponentName: string,\n\tfileName: string,\n): string {\n\t// Map platform to package directory\n\tconst platformMap: Record<string, string> = {\n\t\tvue: 'packages/vue/src/components',\n\t\treact: 'packages/react/src/components',\n\t\tangular: 'packages/angular/src/components',\n\t\t'react-native': 'packages/react-native/src/components',\n\t\tflutter: 'packages/flutter/lib/components',\n\t};\n\n\tconst basePath = platformMap[platform] || `packages/${platform}/src/components`;\n\treturn `${basePath}/${componentName}/${fileName}`;\n}\n\n/**\n * Check if GitHub repository is accessible\n */\nexport async function checkGitHubConnection(): Promise<boolean> {\n\ttry {\n\t\tconst url = getGitHubRawUrl('README.md');\n\t\tconst response = await fetch(url, { method: 'HEAD' });\n\t\treturn response.ok;\n\t} catch {\n\t\treturn false;\n\t}\n}\n"],"names":["writeFileSync","mkdirSync","existsSync","dirname","GITHUB_CONFIG","owner","repo","branch","getGitHubRawUrl","filePath","cacheBust","Date","now","fetchFileFromGitHub","url","response","fetch","cache","headers","Pragma","ok","status","Error","statusText","text","error","message","fetchAndSaveFile","sourceFilePath","targetFilePath","content","dir","recursive","console","fetchMultipleFiles","files","results","Promise","all","map","source","target","success","file","undefined","getComponentGitHubPath","platform","componentName","fileName","platformMap","vue","react","angular","flutter","basePath","checkGitHubConnection","method"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/github-fetcher.ts"],"sourcesContent":["import { writeFileSync, mkdirSync, existsSync } from 'fs';\nimport { dirname } from 'path';\n\n/**\n * GitHub repository configuration\n */\nconst GITHUB_CONFIG = {\n owner: 'buikevin',\n repo: 'galaxy-design',\n branch: 'main',\n};\n\n/**\n * Get GitHub raw content URL\n */\nexport function getGitHubRawUrl(filePath: string): string {\n const { owner, repo, branch } = GITHUB_CONFIG;\n const cacheBust = Date.now();\n return `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${filePath}?v=${cacheBust}`;\n}\n\nfunction getCandidateFileNames(filePath: string): string[] {\n const segments = filePath.split('/');\n const fileName = segments.pop();\n\n if (!fileName) {\n return [filePath];\n }\n\n const candidates = [fileName];\n const capitalized = fileName.charAt(0).toUpperCase() + fileName.slice(1);\n\n if (!candidates.includes(capitalized)) {\n candidates.push(capitalized);\n }\n\n return candidates.map((candidate) => [...segments, candidate].join('/'));\n}\n\n/**\n * Fetch file content from GitHub\n *\n * @param filePath - Relative path in repository\n * @returns File content as string\n */\nexport async function fetchFileFromGitHub(filePath: string): Promise<string> {\n const errors: string[] = [];\n\n for (const candidatePath of getCandidateFileNames(filePath)) {\n const url = getGitHubRawUrl(candidatePath);\n\n for (let attempt = 1; attempt <= 2; attempt += 1) {\n try {\n const response = await fetch(url, {\n cache: 'no-store',\n headers: {\n 'Cache-Control': 'no-cache',\n Pragma: 'no-cache',\n },\n });\n\n if (!response.ok) {\n if (response.status === 404) {\n errors.push(`404 ${candidatePath}`);\n break;\n }\n\n throw new Error(\n `Failed to fetch ${candidatePath}: ${response.status} ${response.statusText}`,\n );\n }\n\n return await response.text();\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unknown error';\n errors.push(`${candidatePath} (attempt ${attempt}): ${message}`);\n\n if (attempt === 2) {\n break;\n }\n }\n }\n }\n\n throw new Error(`GitHub fetch error: ${errors.join(' | ')}`);\n}\n\n/**\n * Fetch and save file from GitHub to local path\n *\n * @param sourceFilePath - Path in GitHub repository\n * @param targetFilePath - Local file path to save\n * @returns True if successful\n */\nexport async function fetchAndSaveFile(\n sourceFilePath: string,\n targetFilePath: string,\n): Promise<boolean> {\n try {\n const content = await fetchFileFromGitHub(sourceFilePath);\n\n // Create directory if it doesn't exist\n const dir = dirname(targetFilePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n // Write file\n writeFileSync(targetFilePath, content, 'utf-8');\n return true;\n } catch (error) {\n console.error(`Failed to fetch and save ${sourceFilePath}:`, error);\n return false;\n }\n}\n\n/**\n * Fetch multiple files from GitHub\n *\n * @param files - Array of { source: githubPath, target: localPath }\n * @returns Results for each file\n */\nexport async function fetchMultipleFiles(\n files: Array<{ source: string; target: string }>,\n): Promise<Array<{ file: string; success: boolean; error?: string }>> {\n const results = await Promise.all(\n files.map(async ({ source, target }) => {\n try {\n const success = await fetchAndSaveFile(source, target);\n return {\n file: source,\n success,\n error: success ? undefined : 'Failed to fetch',\n };\n } catch (error) {\n return {\n file: source,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }),\n );\n\n return results;\n}\n\n/**\n * Get component source path in GitHub repository\n *\n * @param platform - Platform (vue, react, angular, react-native, flutter)\n * @param componentName - Component name\n * @param fileName - File name\n * @returns GitHub repository path\n */\nexport function getComponentGitHubPath(\n platform: string,\n componentName: string,\n fileName: string,\n sourceType: 'components' | 'blocks' = 'components',\n): string {\n // Map platform to package directory\n const platformMap: Record<string, string> = {\n vue: 'packages/vue/src',\n react: 'packages/react/src',\n angular: 'packages/angular/src',\n 'react-native': 'packages/react-native/src',\n flutter: 'packages/flutter/lib',\n };\n\n const basePath = platformMap[platform] || `packages/${platform}/src`;\n return `${basePath}/${sourceType}/${componentName}/${fileName}`;\n}\n\n/**\n * Check if GitHub repository is accessible\n */\nexport async function checkGitHubConnection(): Promise<boolean> {\n try {\n const url = getGitHubRawUrl('README.md');\n const response = await fetch(url, { method: 'HEAD' });\n return response.ok;\n } catch {\n return false;\n }\n}\n"],"names":["writeFileSync","mkdirSync","existsSync","dirname","GITHUB_CONFIG","owner","repo","branch","getGitHubRawUrl","filePath","cacheBust","Date","now","getCandidateFileNames","segments","split","fileName","pop","candidates","capitalized","charAt","toUpperCase","slice","includes","push","map","candidate","join","fetchFileFromGitHub","errors","candidatePath","url","attempt","response","fetch","cache","headers","Pragma","ok","status","Error","statusText","text","error","message","fetchAndSaveFile","sourceFilePath","targetFilePath","content","dir","recursive","console","fetchMultipleFiles","files","results","Promise","all","source","target","success","file","undefined","getComponentGitHubPath","platform","componentName","sourceType","platformMap","vue","react","angular","flutter","basePath","checkGitHubConnection","method"],"mappings":"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"}
@@ -3,10 +3,11 @@
3
3
  *
4
4
  * Centralized export for all utility modules
5
5
  */ // Platform detection
6
- export * from './platform-detector';
6
+ export * from './platform-detector.js';
7
7
  // Registry loading
8
- export * from './registry-loader';
8
+ export * from './framework-registry-service.js';
9
+ export * from './registry-loader.js';
9
10
  // Component copying
10
- export * from './component-copier';
11
+ export * from './component-copier.js';
11
12
 
12
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["/**\n * Galaxy UI CLI - Utilities\n *\n * Centralized export for all utility modules\n */\n\n// Platform detection\nexport * from './platform-detector';\n\n// Registry loading\nexport * from './registry-loader';\n\n// Component copying\nexport * from './component-copier';\n"],"names":[],"mappings":"AAAA;;;;CAIC,GAED,qBAAqB;AACrB,cAAc,sBAAsB;AAEpC,mBAAmB;AACnB,cAAc,oBAAoB;AAElC,oBAAoB;AACpB,cAAc,qBAAqB"}
1
+ {"version":3,"sources":["../../src/utils/index.ts"],"sourcesContent":["/**\n * Galaxy UI CLI - Utilities\n *\n * Centralized export for all utility modules\n */\n\n// Platform detection\nexport * from './platform-detector.js';\n\n// Registry loading\nexport * from './framework-registry-service.js';\nexport * from './registry-loader.js';\n\n// Component copying\nexport * from './component-copier.js';\n"],"names":[],"mappings":"AAAA;;;;CAIC,GAED,qBAAqB;AACrB,cAAc,yBAAyB;AAEvC,mBAAmB;AACnB,cAAc,kCAAkC;AAChD,cAAc,uBAAuB;AAErC,oBAAoB;AACpB,cAAc,wBAAwB"}