@oaysus/cli 0.1.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.
Files changed (243) hide show
  1. package/README.md +166 -0
  2. package/bin/oaysus.js +6 -0
  3. package/dist/cli.d.ts +11 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +174 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/login.d.ts +2 -0
  8. package/dist/commands/login.d.ts.map +1 -0
  9. package/dist/commands/login.js +75 -0
  10. package/dist/commands/login.js.map +1 -0
  11. package/dist/commands/logout.d.ts +2 -0
  12. package/dist/commands/logout.d.ts.map +1 -0
  13. package/dist/commands/logout.js +23 -0
  14. package/dist/commands/logout.js.map +1 -0
  15. package/dist/commands/whoami.d.ts +2 -0
  16. package/dist/commands/whoami.d.ts.map +1 -0
  17. package/dist/commands/whoami.js +44 -0
  18. package/dist/commands/whoami.js.map +1 -0
  19. package/dist/components/App.d.ts +43 -0
  20. package/dist/components/App.d.ts.map +1 -0
  21. package/dist/components/App.js +63 -0
  22. package/dist/components/App.js.map +1 -0
  23. package/dist/components/BuildProgress.d.ts +16 -0
  24. package/dist/components/BuildProgress.d.ts.map +1 -0
  25. package/dist/components/BuildProgress.js +42 -0
  26. package/dist/components/BuildProgress.js.map +1 -0
  27. package/dist/components/ErrorMessage.d.ts +13 -0
  28. package/dist/components/ErrorMessage.d.ts.map +1 -0
  29. package/dist/components/ErrorMessage.js +29 -0
  30. package/dist/components/ErrorMessage.js.map +1 -0
  31. package/dist/components/FileList.d.ts +13 -0
  32. package/dist/components/FileList.d.ts.map +1 -0
  33. package/dist/components/FileList.js +25 -0
  34. package/dist/components/FileList.js.map +1 -0
  35. package/dist/components/Header.d.ts +12 -0
  36. package/dist/components/Header.d.ts.map +1 -0
  37. package/dist/components/Header.js +18 -0
  38. package/dist/components/Header.js.map +1 -0
  39. package/dist/components/LastCommand.d.ts +9 -0
  40. package/dist/components/LastCommand.d.ts.map +1 -0
  41. package/dist/components/LastCommand.js +39 -0
  42. package/dist/components/LastCommand.js.map +1 -0
  43. package/dist/components/Logo.d.ts +14 -0
  44. package/dist/components/Logo.d.ts.map +1 -0
  45. package/dist/components/Logo.js +44 -0
  46. package/dist/components/Logo.js.map +1 -0
  47. package/dist/components/ProgressBar.d.ts +13 -0
  48. package/dist/components/ProgressBar.d.ts.map +1 -0
  49. package/dist/components/ProgressBar.js +20 -0
  50. package/dist/components/ProgressBar.js.map +1 -0
  51. package/dist/components/SlashCommands.d.ts +17 -0
  52. package/dist/components/SlashCommands.d.ts.map +1 -0
  53. package/dist/components/SlashCommands.js +59 -0
  54. package/dist/components/SlashCommands.js.map +1 -0
  55. package/dist/components/Spinner.d.ts +13 -0
  56. package/dist/components/Spinner.d.ts.map +1 -0
  57. package/dist/components/Spinner.js +16 -0
  58. package/dist/components/Spinner.js.map +1 -0
  59. package/dist/components/StatusCard.d.ts +14 -0
  60. package/dist/components/StatusCard.d.ts.map +1 -0
  61. package/dist/components/StatusCard.js +40 -0
  62. package/dist/components/StatusCard.js.map +1 -0
  63. package/dist/components/SuccessMessage.d.ts +12 -0
  64. package/dist/components/SuccessMessage.d.ts.map +1 -0
  65. package/dist/components/SuccessMessage.js +18 -0
  66. package/dist/components/SuccessMessage.js.map +1 -0
  67. package/dist/components/UploadProgress.d.ts +13 -0
  68. package/dist/components/UploadProgress.d.ts.map +1 -0
  69. package/dist/components/UploadProgress.js +40 -0
  70. package/dist/components/UploadProgress.js.map +1 -0
  71. package/dist/components/ValidationProgress.d.ts +12 -0
  72. package/dist/components/ValidationProgress.d.ts.map +1 -0
  73. package/dist/components/ValidationProgress.js +44 -0
  74. package/dist/components/ValidationProgress.js.map +1 -0
  75. package/dist/index.d.ts +7 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +21 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/lib/core/framework-registry.d.ts +27 -0
  80. package/dist/lib/core/framework-registry.d.ts.map +1 -0
  81. package/dist/lib/core/framework-registry.js +67 -0
  82. package/dist/lib/core/framework-registry.js.map +1 -0
  83. package/dist/lib/core/types.d.ts +124 -0
  84. package/dist/lib/core/types.d.ts.map +1 -0
  85. package/dist/lib/core/types.js +6 -0
  86. package/dist/lib/core/types.js.map +1 -0
  87. package/dist/lib/project-generator.d.ts +15 -0
  88. package/dist/lib/project-generator.d.ts.map +1 -0
  89. package/dist/lib/project-generator.js +286 -0
  90. package/dist/lib/project-generator.js.map +1 -0
  91. package/dist/lib/push.d.ts +20 -0
  92. package/dist/lib/push.d.ts.map +1 -0
  93. package/dist/lib/push.js +222 -0
  94. package/dist/lib/push.js.map +1 -0
  95. package/dist/lib/react/builder.d.ts +45 -0
  96. package/dist/lib/react/builder.d.ts.map +1 -0
  97. package/dist/lib/react/builder.js +381 -0
  98. package/dist/lib/react/builder.js.map +1 -0
  99. package/dist/lib/react/bundler.d.ts +104 -0
  100. package/dist/lib/react/bundler.d.ts.map +1 -0
  101. package/dist/lib/react/bundler.js +654 -0
  102. package/dist/lib/react/bundler.js.map +1 -0
  103. package/dist/lib/react/config.d.ts +34 -0
  104. package/dist/lib/react/config.d.ts.map +1 -0
  105. package/dist/lib/react/config.js +64 -0
  106. package/dist/lib/react/config.js.map +1 -0
  107. package/dist/lib/react/import-map.d.ts +54 -0
  108. package/dist/lib/react/import-map.d.ts.map +1 -0
  109. package/dist/lib/react/import-map.js +187 -0
  110. package/dist/lib/react/import-map.js.map +1 -0
  111. package/dist/lib/shared/auth-middleware.d.ts +29 -0
  112. package/dist/lib/shared/auth-middleware.d.ts.map +1 -0
  113. package/dist/lib/shared/auth-middleware.js +48 -0
  114. package/dist/lib/shared/auth-middleware.js.map +1 -0
  115. package/dist/lib/shared/auth.d.ts +50 -0
  116. package/dist/lib/shared/auth.d.ts.map +1 -0
  117. package/dist/lib/shared/auth.js +243 -0
  118. package/dist/lib/shared/auth.js.map +1 -0
  119. package/dist/lib/shared/cdn-downloader.d.ts +30 -0
  120. package/dist/lib/shared/cdn-downloader.d.ts.map +1 -0
  121. package/dist/lib/shared/cdn-downloader.js +126 -0
  122. package/dist/lib/shared/cdn-downloader.js.map +1 -0
  123. package/dist/lib/shared/command-history.d.ts +29 -0
  124. package/dist/lib/shared/command-history.d.ts.map +1 -0
  125. package/dist/lib/shared/command-history.js +73 -0
  126. package/dist/lib/shared/command-history.js.map +1 -0
  127. package/dist/lib/shared/commands.d.ts +24 -0
  128. package/dist/lib/shared/commands.d.ts.map +1 -0
  129. package/dist/lib/shared/commands.js +63 -0
  130. package/dist/lib/shared/commands.js.map +1 -0
  131. package/dist/lib/shared/config.d.ts +40 -0
  132. package/dist/lib/shared/config.d.ts.map +1 -0
  133. package/dist/lib/shared/config.js +69 -0
  134. package/dist/lib/shared/config.js.map +1 -0
  135. package/dist/lib/shared/file-utils.d.ts +45 -0
  136. package/dist/lib/shared/file-utils.d.ts.map +1 -0
  137. package/dist/lib/shared/file-utils.js +88 -0
  138. package/dist/lib/shared/file-utils.js.map +1 -0
  139. package/dist/lib/shared/import-analyzer.d.ts +49 -0
  140. package/dist/lib/shared/import-analyzer.d.ts.map +1 -0
  141. package/dist/lib/shared/import-analyzer.js +268 -0
  142. package/dist/lib/shared/import-analyzer.js.map +1 -0
  143. package/dist/lib/shared/path-builder.d.ts +55 -0
  144. package/dist/lib/shared/path-builder.d.ts.map +1 -0
  145. package/dist/lib/shared/path-builder.js +66 -0
  146. package/dist/lib/shared/path-builder.js.map +1 -0
  147. package/dist/lib/shared/uploader.d.ts +79 -0
  148. package/dist/lib/shared/uploader.d.ts.map +1 -0
  149. package/dist/lib/shared/uploader.js +340 -0
  150. package/dist/lib/shared/uploader.js.map +1 -0
  151. package/dist/lib/shared/zip-creator.d.ts +18 -0
  152. package/dist/lib/shared/zip-creator.d.ts.map +1 -0
  153. package/dist/lib/shared/zip-creator.js +131 -0
  154. package/dist/lib/shared/zip-creator.js.map +1 -0
  155. package/dist/lib/svelte/builder.d.ts +37 -0
  156. package/dist/lib/svelte/builder.d.ts.map +1 -0
  157. package/dist/lib/svelte/builder.js +364 -0
  158. package/dist/lib/svelte/builder.js.map +1 -0
  159. package/dist/lib/svelte/bundler.d.ts +92 -0
  160. package/dist/lib/svelte/bundler.d.ts.map +1 -0
  161. package/dist/lib/svelte/bundler.js +499 -0
  162. package/dist/lib/svelte/bundler.js.map +1 -0
  163. package/dist/lib/svelte/config.d.ts +22 -0
  164. package/dist/lib/svelte/config.d.ts.map +1 -0
  165. package/dist/lib/svelte/config.js +65 -0
  166. package/dist/lib/svelte/config.js.map +1 -0
  167. package/dist/lib/svelte/import-map.d.ts +42 -0
  168. package/dist/lib/svelte/import-map.d.ts.map +1 -0
  169. package/dist/lib/svelte/import-map.js +197 -0
  170. package/dist/lib/svelte/import-map.js.map +1 -0
  171. package/dist/lib/template-manager.d.ts +33 -0
  172. package/dist/lib/template-manager.d.ts.map +1 -0
  173. package/dist/lib/template-manager.js +69 -0
  174. package/dist/lib/template-manager.js.map +1 -0
  175. package/dist/lib/validator.d.ts +10 -0
  176. package/dist/lib/validator.d.ts.map +1 -0
  177. package/dist/lib/validator.js +343 -0
  178. package/dist/lib/validator.js.map +1 -0
  179. package/dist/lib/vue/builder.d.ts +37 -0
  180. package/dist/lib/vue/builder.d.ts.map +1 -0
  181. package/dist/lib/vue/builder.js +366 -0
  182. package/dist/lib/vue/builder.js.map +1 -0
  183. package/dist/lib/vue/bundler.d.ts +78 -0
  184. package/dist/lib/vue/bundler.d.ts.map +1 -0
  185. package/dist/lib/vue/bundler.js +208 -0
  186. package/dist/lib/vue/bundler.js.map +1 -0
  187. package/dist/lib/vue/config.d.ts +18 -0
  188. package/dist/lib/vue/config.d.ts.map +1 -0
  189. package/dist/lib/vue/config.js +42 -0
  190. package/dist/lib/vue/config.js.map +1 -0
  191. package/dist/lib/vue/import-map.d.ts +42 -0
  192. package/dist/lib/vue/import-map.d.ts.map +1 -0
  193. package/dist/lib/vue/import-map.js +156 -0
  194. package/dist/lib/vue/import-map.js.map +1 -0
  195. package/dist/screens/BuildScreen.d.ts +8 -0
  196. package/dist/screens/BuildScreen.d.ts.map +1 -0
  197. package/dist/screens/BuildScreen.js +158 -0
  198. package/dist/screens/BuildScreen.js.map +1 -0
  199. package/dist/screens/CreateScreen.d.ts +12 -0
  200. package/dist/screens/CreateScreen.d.ts.map +1 -0
  201. package/dist/screens/CreateScreen.js +305 -0
  202. package/dist/screens/CreateScreen.js.map +1 -0
  203. package/dist/screens/InitScreen.d.ts +11 -0
  204. package/dist/screens/InitScreen.d.ts.map +1 -0
  205. package/dist/screens/InitScreen.js +339 -0
  206. package/dist/screens/InitScreen.js.map +1 -0
  207. package/dist/screens/LoginScreen.d.ts +15 -0
  208. package/dist/screens/LoginScreen.d.ts.map +1 -0
  209. package/dist/screens/LoginScreen.js +427 -0
  210. package/dist/screens/LoginScreen.js.map +1 -0
  211. package/dist/screens/LogoutScreen.d.ts +15 -0
  212. package/dist/screens/LogoutScreen.d.ts.map +1 -0
  213. package/dist/screens/LogoutScreen.js +187 -0
  214. package/dist/screens/LogoutScreen.js.map +1 -0
  215. package/dist/screens/PushScreen.d.ts +12 -0
  216. package/dist/screens/PushScreen.d.ts.map +1 -0
  217. package/dist/screens/PushScreen.js +546 -0
  218. package/dist/screens/PushScreen.js.map +1 -0
  219. package/dist/screens/ValidateScreen.d.ts +12 -0
  220. package/dist/screens/ValidateScreen.d.ts.map +1 -0
  221. package/dist/screens/ValidateScreen.js +193 -0
  222. package/dist/screens/ValidateScreen.js.map +1 -0
  223. package/dist/screens/WelcomeScreen.d.ts +39 -0
  224. package/dist/screens/WelcomeScreen.d.ts.map +1 -0
  225. package/dist/screens/WelcomeScreen.js +297 -0
  226. package/dist/screens/WelcomeScreen.js.map +1 -0
  227. package/dist/screens/WhoamiScreen.d.ts +14 -0
  228. package/dist/screens/WhoamiScreen.d.ts.map +1 -0
  229. package/dist/screens/WhoamiScreen.js +180 -0
  230. package/dist/screens/WhoamiScreen.js.map +1 -0
  231. package/dist/types/index.d.ts +40 -0
  232. package/dist/types/index.d.ts.map +1 -0
  233. package/dist/types/index.js +2 -0
  234. package/dist/types/index.js.map +1 -0
  235. package/dist/types/templates.d.ts +55 -0
  236. package/dist/types/templates.d.ts.map +1 -0
  237. package/dist/types/templates.js +6 -0
  238. package/dist/types/templates.js.map +1 -0
  239. package/dist/types/validation.d.ts +108 -0
  240. package/dist/types/validation.d.ts.map +1 -0
  241. package/dist/types/validation.js +6 -0
  242. package/dist/types/validation.js.map +1 -0
  243. package/package.json +94 -0
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Project Generator
3
+ * Orchestrates project scaffolding from templates
4
+ */
5
+ import path from 'path';
6
+ import { directoryExists, createDirectory, toPascalCase, toKebabCase } from './shared/file-utils.js';
7
+ import { getTemplateDir, getTemplatesDir, processTemplate, getComponentExtension } from './template-manager.js';
8
+ /**
9
+ * Generate a new project from templates
10
+ * All projects use theme pack structure (components/ directory)
11
+ */
12
+ export async function generateProject(options, targetDir) {
13
+ const filesCreated = [];
14
+ try {
15
+ // Check if directory already exists
16
+ if (directoryExists(targetDir)) {
17
+ return {
18
+ success: false,
19
+ projectPath: targetDir,
20
+ filesCreated: [],
21
+ error: `Directory "${targetDir}" already exists`
22
+ };
23
+ }
24
+ // Create project directory
25
+ createDirectory(targetDir);
26
+ // Prepare template variables
27
+ const variables = {
28
+ PROJECT_NAME: options.projectName,
29
+ DISPLAY_NAME: toPascalCase(options.projectName),
30
+ DESCRIPTION: options.description,
31
+ AUTHOR: options.author,
32
+ FRAMEWORK: options.framework
33
+ };
34
+ // Get template directory (always theme pack)
35
+ const templateDir = getTemplateDir(options.framework);
36
+ // Generate theme pack structure
37
+ await generateThemePack(targetDir, templateDir, variables, filesCreated);
38
+ // Add shared files
39
+ await generateSharedFiles(targetDir, variables, filesCreated);
40
+ return {
41
+ success: true,
42
+ projectPath: targetDir,
43
+ filesCreated
44
+ };
45
+ }
46
+ catch (error) {
47
+ return {
48
+ success: false,
49
+ projectPath: targetDir,
50
+ filesCreated,
51
+ error: error instanceof Error ? error.message : 'Unknown error occurred'
52
+ };
53
+ }
54
+ }
55
+ /**
56
+ * Generate a theme pack project
57
+ * Creates one example component by default (Hero)
58
+ */
59
+ async function generateThemePack(targetDir, templateDir, variables, filesCreated) {
60
+ const extension = getComponentExtension(variables.FRAMEWORK);
61
+ // Generate package.json
62
+ const packageTemplate = path.join(templateDir, 'package.json.template');
63
+ const packageTarget = path.join(targetDir, 'package.json');
64
+ processTemplate(packageTemplate, packageTarget, variables);
65
+ filesCreated.push('package.json');
66
+ // Generate README.md
67
+ const readmeTemplate = path.join(templateDir, 'README.md.template');
68
+ const readmeTarget = path.join(targetDir, 'README.md');
69
+ processTemplate(readmeTemplate, readmeTarget, variables);
70
+ filesCreated.push('README.md');
71
+ // Generate tsconfig.json if TypeScript
72
+ if (variables.FRAMEWORK === 'react') {
73
+ const tsconfigTemplate = path.join(templateDir, 'tsconfig.json.template');
74
+ const tsconfigTarget = path.join(targetDir, 'tsconfig.json');
75
+ processTemplate(tsconfigTemplate, tsconfigTarget, variables);
76
+ filesCreated.push('tsconfig.json');
77
+ }
78
+ // Create components directory
79
+ const componentsDir = path.join(targetDir, 'components');
80
+ createDirectory(componentsDir);
81
+ // Create ONE example component (Hero) by default
82
+ const componentName = 'Hero';
83
+ const componentDir = path.join(componentsDir, componentName);
84
+ createDirectory(componentDir);
85
+ // Component file
86
+ const componentTemplate = path.join(templateDir, 'components', `example${extension}.template`);
87
+ const componentTarget = path.join(componentDir, `index${extension}`);
88
+ const componentVars = {
89
+ ...variables,
90
+ COMPONENT_NAME: componentName,
91
+ COMPONENT_TYPE: toKebabCase(componentName),
92
+ CATEGORY: 'marketing'
93
+ };
94
+ processTemplate(componentTemplate, componentTarget, componentVars);
95
+ filesCreated.push(`components/${componentName}/index${extension}`);
96
+ // Schema file
97
+ const schemaTemplate = path.join(templateDir, 'components', 'example-schema.json.template');
98
+ const schemaTarget = path.join(componentDir, 'schema.json');
99
+ processTemplate(schemaTemplate, schemaTarget, componentVars);
100
+ filesCreated.push(`components/${componentName}/schema.json`);
101
+ // Story file (for React with Storybook)
102
+ if (variables.FRAMEWORK === 'react') {
103
+ const storyTemplate = path.join(templateDir, 'components', 'example.stories.tsx.template');
104
+ const storyTarget = path.join(componentDir, `${componentName}.stories.tsx`);
105
+ processTemplate(storyTemplate, storyTarget, componentVars);
106
+ filesCreated.push(`components/${componentName}/${componentName}.stories.tsx`);
107
+ }
108
+ // Create shared directory
109
+ const sharedDir = path.join(targetDir, 'shared');
110
+ createDirectory(sharedDir);
111
+ // Shared types file (if TypeScript)
112
+ if (variables.FRAMEWORK === 'react') {
113
+ const typesTemplate = path.join(templateDir, 'shared', 'types.ts.template');
114
+ const typesTarget = path.join(sharedDir, 'types.ts');
115
+ processTemplate(typesTemplate, typesTarget, variables);
116
+ filesCreated.push('shared/types.ts');
117
+ // Shared utils file
118
+ const utilsTemplate = path.join(templateDir, 'shared', 'utils.ts.template');
119
+ const utilsTarget = path.join(sharedDir, 'utils.ts');
120
+ processTemplate(utilsTemplate, utilsTarget, variables);
121
+ filesCreated.push('shared/utils.ts');
122
+ }
123
+ // Generate preview files
124
+ await generatePreviewFiles(targetDir, templateDir, variables, filesCreated);
125
+ // Generate Storybook files (for React)
126
+ if (variables.FRAMEWORK === 'react') {
127
+ await generateStorybookFiles(targetDir, templateDir, variables, filesCreated);
128
+ }
129
+ }
130
+ /**
131
+ * Generate Storybook configuration files (React only)
132
+ */
133
+ async function generateStorybookFiles(targetDir, templateDir, variables, filesCreated) {
134
+ // Create .storybook directory
135
+ const storybookDir = path.join(targetDir, '.storybook');
136
+ createDirectory(storybookDir);
137
+ // Create .storybook/utils directory
138
+ const storybookUtilsDir = path.join(storybookDir, 'utils');
139
+ createDirectory(storybookUtilsDir);
140
+ // Create styles directory
141
+ const stylesDir = path.join(targetDir, 'styles');
142
+ createDirectory(stylesDir);
143
+ // Generate .storybook/main.ts
144
+ const mainTemplate = path.join(templateDir, '.storybook', 'main.ts.template');
145
+ const mainTarget = path.join(storybookDir, 'main.ts');
146
+ processTemplate(mainTemplate, mainTarget, variables);
147
+ filesCreated.push('.storybook/main.ts');
148
+ // Generate .storybook/preview.ts
149
+ const previewTemplate = path.join(templateDir, '.storybook', 'preview.ts.template');
150
+ const previewTarget = path.join(storybookDir, 'preview.ts');
151
+ processTemplate(previewTemplate, previewTarget, variables);
152
+ filesCreated.push('.storybook/preview.ts');
153
+ // Generate .storybook/utils/schemaToArgTypes.ts
154
+ const schemaUtilsTemplate = path.join(templateDir, '.storybook', 'utils', 'schemaToArgTypes.ts.template');
155
+ const schemaUtilsTarget = path.join(storybookUtilsDir, 'schemaToArgTypes.ts');
156
+ processTemplate(schemaUtilsTemplate, schemaUtilsTarget, variables);
157
+ filesCreated.push('.storybook/utils/schemaToArgTypes.ts');
158
+ // Generate vite.config.ts
159
+ const viteTemplate = path.join(templateDir, 'vite.config.ts.template');
160
+ const viteTarget = path.join(targetDir, 'vite.config.ts');
161
+ processTemplate(viteTemplate, viteTarget, variables);
162
+ filesCreated.push('vite.config.ts');
163
+ // Generate styles/tailwind.css
164
+ const tailwindCssTemplate = path.join(templateDir, 'styles', 'tailwind.css.template');
165
+ const tailwindCssTarget = path.join(stylesDir, 'tailwind.css');
166
+ processTemplate(tailwindCssTemplate, tailwindCssTarget, variables);
167
+ filesCreated.push('styles/tailwind.css');
168
+ }
169
+ /**
170
+ * Generate preview files (generate.js, server.js)
171
+ */
172
+ async function generatePreviewFiles(targetDir, templateDir, variables, filesCreated) {
173
+ // Create preview directory
174
+ const previewDir = path.join(targetDir, 'preview');
175
+ createDirectory(previewDir);
176
+ // Create preview/dist directory
177
+ const previewDistDir = path.join(previewDir, 'dist');
178
+ createDirectory(previewDistDir);
179
+ // Generate generate.js
180
+ const generateTemplate = path.join(templateDir, 'preview', 'generate.js.template');
181
+ const generateTarget = path.join(previewDir, 'generate.js');
182
+ processTemplate(generateTemplate, generateTarget, variables);
183
+ filesCreated.push('preview/generate.js');
184
+ // Generate server.js
185
+ const serverTemplate = path.join(templateDir, 'preview', 'server.js.template');
186
+ const serverTarget = path.join(previewDir, 'server.js');
187
+ processTemplate(serverTemplate, serverTarget, variables);
188
+ filesCreated.push('preview/server.js');
189
+ // Add .gitkeep to dist/ to ensure it's tracked
190
+ filesCreated.push('preview/dist/.gitkeep');
191
+ }
192
+ /**
193
+ * Generate shared files (.gitignore, etc.)
194
+ */
195
+ async function generateSharedFiles(targetDir, variables, filesCreated) {
196
+ const sharedTemplatesDir = path.join(getTemplatesDir(), 'shared');
197
+ // .gitignore
198
+ const gitignoreTemplate = path.join(sharedTemplatesDir, '.gitignore.template');
199
+ const gitignoreTarget = path.join(targetDir, '.gitignore');
200
+ processTemplate(gitignoreTemplate, gitignoreTarget, variables);
201
+ filesCreated.push('.gitignore');
202
+ // tailwind.config.js
203
+ const tailwindTemplate = path.join(sharedTemplatesDir, 'tailwind.config.js.template');
204
+ const tailwindTarget = path.join(targetDir, 'tailwind.config.js');
205
+ processTemplate(tailwindTemplate, tailwindTarget, variables);
206
+ filesCreated.push('tailwind.config.js');
207
+ // postcss.config.js
208
+ const postcssTemplate = path.join(sharedTemplatesDir, 'postcss.config.js.template');
209
+ const postcssTarget = path.join(targetDir, 'postcss.config.js');
210
+ processTemplate(postcssTemplate, postcssTarget, variables);
211
+ filesCreated.push('postcss.config.js');
212
+ }
213
+ /**
214
+ * Create a new component in an existing theme pack
215
+ */
216
+ export async function createComponent(options, projectPath, framework) {
217
+ const filesCreated = [];
218
+ try {
219
+ const componentsDir = path.join(projectPath, 'components');
220
+ // Check if components directory exists
221
+ if (!directoryExists(componentsDir)) {
222
+ return {
223
+ success: false,
224
+ projectPath,
225
+ filesCreated: [],
226
+ error: 'Not a theme pack project (components/ directory not found)'
227
+ };
228
+ }
229
+ const componentDir = path.join(componentsDir, options.name);
230
+ // Check if component already exists
231
+ if (directoryExists(componentDir)) {
232
+ return {
233
+ success: false,
234
+ projectPath,
235
+ filesCreated: [],
236
+ error: `Component "${options.name}" already exists`
237
+ };
238
+ }
239
+ // Create component directory
240
+ createDirectory(componentDir);
241
+ // Prepare variables
242
+ const variables = {
243
+ PROJECT_NAME: options.name,
244
+ DISPLAY_NAME: options.displayName,
245
+ DESCRIPTION: options.description || `${options.displayName} component`,
246
+ AUTHOR: '',
247
+ FRAMEWORK: framework,
248
+ COMPONENT_NAME: options.name,
249
+ COMPONENT_TYPE: toKebabCase(options.name),
250
+ CATEGORY: options.category
251
+ };
252
+ const extension = getComponentExtension(framework);
253
+ const templateDir = getTemplateDir(framework);
254
+ // Component file
255
+ const componentTemplate = path.join(templateDir, 'components', `example${extension}.template`);
256
+ const componentTarget = path.join(componentDir, `index${extension}`);
257
+ processTemplate(componentTemplate, componentTarget, variables);
258
+ filesCreated.push(`components/${options.name}/index${extension}`);
259
+ // Schema file
260
+ const schemaTemplate = path.join(templateDir, 'components', 'example-schema.json.template');
261
+ const schemaTarget = path.join(componentDir, 'schema.json');
262
+ processTemplate(schemaTemplate, schemaTarget, variables);
263
+ filesCreated.push(`components/${options.name}/schema.json`);
264
+ // Story file (for React with Storybook)
265
+ if (framework === 'react') {
266
+ const storyTemplate = path.join(templateDir, 'components', 'example.stories.tsx.template');
267
+ const storyTarget = path.join(componentDir, `${options.name}.stories.tsx`);
268
+ processTemplate(storyTemplate, storyTarget, variables);
269
+ filesCreated.push(`components/${options.name}/${options.name}.stories.tsx`);
270
+ }
271
+ return {
272
+ success: true,
273
+ projectPath,
274
+ filesCreated
275
+ };
276
+ }
277
+ catch (error) {
278
+ return {
279
+ success: false,
280
+ projectPath,
281
+ filesCreated,
282
+ error: error instanceof Error ? error.message : 'Unknown error occurred'
283
+ };
284
+ }
285
+ }
286
+ //# sourceMappingURL=project-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-generator.js","sourceRoot":"","sources":["../../src/lib/project-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Non-interactive Push Module
3
+ * Runs the full push flow without requiring TTY/Ink
4
+ */
5
+ interface PushOptions {
6
+ projectPath?: string;
7
+ silent?: boolean;
8
+ }
9
+ interface PushResult {
10
+ success: boolean;
11
+ themePackId?: string;
12
+ componentCount?: number;
13
+ error?: string;
14
+ }
15
+ /**
16
+ * Run the full push flow non-interactively
17
+ */
18
+ export declare function push(options?: PushOptions): Promise<PushResult>;
19
+ export {};
20
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/lib/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoBD;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAsNzE"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Non-interactive Push Module
3
+ * Runs the full push flow without requiring TTY/Ink
4
+ */
5
+ import path from 'path';
6
+ import fs from 'fs';
7
+ import { exec } from 'child_process';
8
+ import { promisify } from 'util';
9
+ import { requireAuth } from './shared/auth.js';
10
+ import { validatePackage } from './validator.js';
11
+ import { uploadBuildFilesToR2 } from './shared/uploader.js';
12
+ import { buildR2Path } from './shared/path-builder.js';
13
+ import { R2_PUBLIC_URL } from './shared/config.js';
14
+ import { detectFramework, getBuilder, getBundler, getImportMapGenerator } from './core/framework-registry.js';
15
+ import { analyzeComponentImports } from './shared/import-analyzer.js';
16
+ const execAsync = promisify(exec);
17
+ function log(message, silent = false) {
18
+ if (!silent) {
19
+ console.log(message);
20
+ }
21
+ }
22
+ function logSuccess(message, silent = false) {
23
+ if (!silent) {
24
+ console.log(`✓ ${message}`);
25
+ }
26
+ }
27
+ function logError(message, silent = false) {
28
+ if (!silent) {
29
+ console.error(`✗ ${message}`);
30
+ }
31
+ }
32
+ /**
33
+ * Run the full push flow non-interactively
34
+ */
35
+ export async function push(options = {}) {
36
+ const { projectPath = '.', silent = false } = options;
37
+ try {
38
+ // Step 1: Check authentication
39
+ log('\n📦 Oaysus Push', silent);
40
+ log('─'.repeat(40), silent);
41
+ let credentials;
42
+ try {
43
+ credentials = await requireAuth();
44
+ logSuccess('Authenticated', silent);
45
+ }
46
+ catch (error) {
47
+ const message = error instanceof Error ? error.message : 'Not authenticated';
48
+ logError(message, silent);
49
+ if (message.toLowerCase().includes('expired')) {
50
+ log('Tip: Your session has expired. Run "oaysus login" to re-authenticate.', silent);
51
+ }
52
+ else {
53
+ log('Tip: Run "oaysus login" to authenticate.', silent);
54
+ }
55
+ return { success: false, error: message };
56
+ }
57
+ // Step 2: Validate package
58
+ const absolutePath = path.resolve(projectPath);
59
+ log(`\nValidating package at ${absolutePath}...`, silent);
60
+ const validationResult = await validatePackage(absolutePath);
61
+ if (!validationResult.valid) {
62
+ logError(`Validation failed: ${validationResult.errors.join(', ')}`, silent);
63
+ return { success: false, error: validationResult.errors.join(', ') };
64
+ }
65
+ logSuccess(`Validated ${validationResult.components.length} component(s)`, silent);
66
+ // Step 3: Install dependencies if needed
67
+ const nodeModulesPath = path.join(absolutePath, 'node_modules');
68
+ if (!fs.existsSync(nodeModulesPath)) {
69
+ log('\nInstalling dependencies...', silent);
70
+ try {
71
+ await execAsync('npm install', { cwd: absolutePath });
72
+ logSuccess('Dependencies installed', silent);
73
+ }
74
+ catch (err) {
75
+ logError('Failed to install dependencies', silent);
76
+ return { success: false, error: 'Failed to install dependencies' };
77
+ }
78
+ }
79
+ // Step 3.5: Analyze component imports to detect external dependencies
80
+ log('\nAnalyzing component imports...', silent);
81
+ // Note: entryPoint is already an absolute path from validation
82
+ const componentPaths = validationResult.components.map(c => c.entryPoint);
83
+ const detectedDeps = analyzeComponentImports(componentPaths, validationResult.packageJson);
84
+ if (detectedDeps.length > 0) {
85
+ logSuccess(`Detected ${detectedDeps.length} external dependencies: ${detectedDeps.map(d => d.name).join(', ')}`, silent);
86
+ }
87
+ else {
88
+ log(' No external dependencies detected (only React)', silent);
89
+ }
90
+ // Step 4: Build client components
91
+ log('\nBuilding client components...', silent);
92
+ const framework = detectFramework(validationResult.packageJson);
93
+ const builder = await getBuilder(framework);
94
+ const buildResult = await builder.buildComponents(validationResult, absolutePath, detectedDeps);
95
+ if (!buildResult.success) {
96
+ logError(`Build failed: ${buildResult.error}`, silent);
97
+ return { success: false, error: buildResult.error };
98
+ }
99
+ logSuccess(`Built ${buildResult.components.length} component(s) (${(buildResult.totalSize / 1024).toFixed(1)} KB)`, silent);
100
+ // Step 5: Build server components for SSR
101
+ log('\nBuilding server components for SSR...', silent);
102
+ const serverBuildResult = await builder.buildServerComponents(validationResult, absolutePath);
103
+ if (serverBuildResult.success) {
104
+ logSuccess(`Built ${serverBuildResult.components.length} server component(s) (${(serverBuildResult.totalSize / 1024).toFixed(1)} KB)`, silent);
105
+ }
106
+ else {
107
+ log(`⚠ Server components skipped: ${serverBuildResult.error}`, silent);
108
+ }
109
+ // Step 6: Bundle client dependencies (React framework deps)
110
+ log('\nBundling React dependencies...', silent);
111
+ const bundler = await getBundler(framework);
112
+ const importMapGen = await getImportMapGenerator(framework);
113
+ const allDeps = importMapGen.getDependenciesToBundle(validationResult.packageJson);
114
+ const runtimeDeps = bundler.filterRuntimeDependencies(allDeps);
115
+ const bundledDeps = await bundler.bundleDependencies(runtimeDeps, {
116
+ projectRoot: absolutePath,
117
+ outputDir: path.join(buildResult.outputDir, 'deps')
118
+ });
119
+ logSuccess(`Bundled ${bundledDeps.length} React dependencies`, silent);
120
+ // Step 6.5: Bundle detected external dependencies (Swiper, etc.)
121
+ if (detectedDeps.length > 0) {
122
+ log('\nBundling external dependencies...', silent);
123
+ const externalBundled = await bundler.bundleDetectedDependencies(detectedDeps, {
124
+ projectRoot: absolutePath,
125
+ outputDir: path.join(buildResult.outputDir, 'deps')
126
+ });
127
+ logSuccess(`Bundled ${externalBundled.length} external dependencies`, silent);
128
+ }
129
+ // Step 7: Bundle server dependencies for SSR
130
+ log('\nBundling server dependencies for SSR...', silent);
131
+ const serverDeps = await bundler.bundleServerDependencies(runtimeDeps, {
132
+ projectRoot: absolutePath,
133
+ outputDir: buildResult.outputDir
134
+ });
135
+ if (serverDeps.length > 0) {
136
+ const serverDepSize = serverDeps.reduce((sum, d) => sum + d.size, 0);
137
+ logSuccess(`Bundled server dependencies (${(serverDepSize / 1024).toFixed(1)} KB)`, silent);
138
+ }
139
+ // Step 8: Generate theme manifest
140
+ const allDepsForManifest = { ...validationResult.packageJson.dependencies, ...validationResult.packageJson.devDependencies };
141
+ const reactVersion = (allDepsForManifest['react'] || '19.0.0').replace(/^[\^~>=<]/, '');
142
+ const themeManifest = {
143
+ framework: framework,
144
+ frameworkVersion: reactVersion,
145
+ components: validationResult.components.map(c => c.name),
146
+ deps: [
147
+ // React framework deps
148
+ ...runtimeDeps.map(dep => ({
149
+ name: dep.name,
150
+ version: dep.version,
151
+ r2Path: `server-deps/react@${reactVersion}/`
152
+ })),
153
+ // Detected external deps
154
+ ...detectedDeps.map(dep => ({
155
+ name: dep.name,
156
+ version: dep.version,
157
+ r2Path: `deps/${dep.name}@${dep.version}/`,
158
+ subExports: dep.subExports,
159
+ cssImports: dep.cssImports
160
+ }))
161
+ ],
162
+ createdAt: new Date().toISOString()
163
+ };
164
+ fs.writeFileSync(path.join(buildResult.outputDir, 'manifest.json'), JSON.stringify(themeManifest, null, 2));
165
+ logSuccess('Generated theme manifest', silent);
166
+ // Step 9: Generate import map (includes detected deps)
167
+ const r2BasePath = buildR2Path(validationResult.packageJson, credentials);
168
+ const importMapWithStyles = importMapGen.generateImportMapWithStylesheets(validationResult.packageJson, {
169
+ r2PublicUrl: R2_PUBLIC_URL,
170
+ r2BasePath,
171
+ detectedDeps // Pass detected deps for import map generation
172
+ });
173
+ const importMap = { imports: importMapWithStyles.imports };
174
+ const stylesheets = importMapWithStyles.stylesheets;
175
+ fs.writeFileSync(path.join(buildResult.outputDir, 'import-map.json'), JSON.stringify(importMap, null, 2));
176
+ logSuccess(`Generated import map (${Object.keys(importMap.imports).length} entries)`, silent);
177
+ // Step 10: Upload to R2
178
+ log('\nUploading to server...', silent);
179
+ const deps = validationResult.packageJson.dependencies || {};
180
+ const dependenciesArray = Object.entries(deps).map(([name, version]) => ({
181
+ name,
182
+ version: version
183
+ }));
184
+ let lastPercent = 0;
185
+ const uploadResult = await uploadBuildFilesToR2(buildResult.outputDir, validationResult.packageJson, (bytesUploaded, totalBytes, pct) => {
186
+ if (!silent && pct >= lastPercent + 10) {
187
+ lastPercent = Math.floor(pct / 10) * 10;
188
+ process.stdout.write(`\r Uploading: ${pct}%`);
189
+ }
190
+ }, {
191
+ importMap,
192
+ stylesheets,
193
+ dependencies: dependenciesArray
194
+ });
195
+ if (!silent) {
196
+ process.stdout.write('\r');
197
+ }
198
+ logSuccess(`Uploaded to R2`, silent);
199
+ // Success!
200
+ log('\n' + '─'.repeat(40), silent);
201
+ logSuccess(`Published ${uploadResult.componentCount} component(s) to Oaysus`, silent);
202
+ log(` Theme Pack ID: ${uploadResult.themePackId}`, silent);
203
+ log('─'.repeat(40) + '\n', silent);
204
+ return {
205
+ success: true,
206
+ themePackId: uploadResult.themePackId,
207
+ componentCount: uploadResult.componentCount
208
+ };
209
+ }
210
+ catch (err) {
211
+ logError(err.message || 'Push failed', silent);
212
+ return { success: false, error: err.message || 'Push failed' };
213
+ }
214
+ }
215
+ // Allow running directly
216
+ if (process.argv[1]?.includes('push.js') || process.argv[1]?.includes('push.ts')) {
217
+ const projectPath = process.argv[2] || '.';
218
+ push({ projectPath }).then(result => {
219
+ process.exit(result.success ? 0 : 1);
220
+ });
221
+ }
222
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/lib/push.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * React Component Builder
3
+ * React-specific implementation of the component builder
4
+ */
5
+ import type { ValidationResult } from '../../types/validation.js';
6
+ import type { IBuilder, BuildResult } from '../core/types.js';
7
+ import type { DetectedDependency } from '../shared/import-analyzer.js';
8
+ declare class ReactBuilder implements IBuilder {
9
+ /** Detected dependencies to externalize (set during buildComponents) */
10
+ private detectedDeps;
11
+ /**
12
+ * Build a single React component with Vite
13
+ */
14
+ private buildComponent;
15
+ /**
16
+ * Build theme-level Tailwind CSS
17
+ * Supports both Tailwind v3 and v4
18
+ */
19
+ buildThemeCSS(projectPath: string, outputDir: string, packageJson: any): Promise<{
20
+ cssPath: string;
21
+ size: number;
22
+ } | null>;
23
+ /**
24
+ * Set detected dependencies to externalize during build
25
+ * Call this before buildComponents() to externalize third-party libs
26
+ */
27
+ setDetectedDependencies(deps: DetectedDependency[]): void;
28
+ /**
29
+ * Build all React components in a package
30
+ */
31
+ buildComponents(validationResult: ValidationResult, projectPath: string, detectedDeps?: DetectedDependency[]): Promise<BuildResult>;
32
+ /**
33
+ * Build a single React component for server-side rendering
34
+ * Creates self-contained Node.js bundle with render function export
35
+ */
36
+ private buildServerComponent;
37
+ /**
38
+ * Build all React components for server-side rendering
39
+ */
40
+ buildServerComponents(validationResult: ValidationResult, projectPath: string): Promise<import('../core/types.js').ServerBuildResult>;
41
+ }
42
+ declare const builder: ReactBuilder;
43
+ export default builder;
44
+ export { builder };
45
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/lib/react/builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,2BAA2B,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAwB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,cAAM,YAAa,YAAW,QAAQ;IACpC,wEAAwE;IACxE,OAAO,CAAC,YAAY,CAA4B;IAEhD;;OAEG;YACW,cAAc;IAsG5B;;;OAGG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,GAAG,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAiGpD;;;OAGG;IACH,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,IAAI;IAIzD;;OAEG;IACG,eAAe,CACnB,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,kBAAkB,EAAE,GAClC,OAAO,CAAC,WAAW,CAAC;IA8DvB;;;OAGG;YACW,oBAAoB;IAoHlC;;OAEG;IACG,qBAAqB,CACzB,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,kBAAkB,EAAE,iBAAiB,CAAC;CAkCzD;AAGD,QAAA,MAAM,OAAO,cAAqB,CAAC;AACnC,eAAe,OAAO,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,CAAC"}