@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.
- package/README.md +166 -0
- package/bin/oaysus.js +6 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +75 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +23 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +44 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/components/App.d.ts +43 -0
- package/dist/components/App.d.ts.map +1 -0
- package/dist/components/App.js +63 -0
- package/dist/components/App.js.map +1 -0
- package/dist/components/BuildProgress.d.ts +16 -0
- package/dist/components/BuildProgress.d.ts.map +1 -0
- package/dist/components/BuildProgress.js +42 -0
- package/dist/components/BuildProgress.js.map +1 -0
- package/dist/components/ErrorMessage.d.ts +13 -0
- package/dist/components/ErrorMessage.d.ts.map +1 -0
- package/dist/components/ErrorMessage.js +29 -0
- package/dist/components/ErrorMessage.js.map +1 -0
- package/dist/components/FileList.d.ts +13 -0
- package/dist/components/FileList.d.ts.map +1 -0
- package/dist/components/FileList.js +25 -0
- package/dist/components/FileList.js.map +1 -0
- package/dist/components/Header.d.ts +12 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +18 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/LastCommand.d.ts +9 -0
- package/dist/components/LastCommand.d.ts.map +1 -0
- package/dist/components/LastCommand.js +39 -0
- package/dist/components/LastCommand.js.map +1 -0
- package/dist/components/Logo.d.ts +14 -0
- package/dist/components/Logo.d.ts.map +1 -0
- package/dist/components/Logo.js +44 -0
- package/dist/components/Logo.js.map +1 -0
- package/dist/components/ProgressBar.d.ts +13 -0
- package/dist/components/ProgressBar.d.ts.map +1 -0
- package/dist/components/ProgressBar.js +20 -0
- package/dist/components/ProgressBar.js.map +1 -0
- package/dist/components/SlashCommands.d.ts +17 -0
- package/dist/components/SlashCommands.d.ts.map +1 -0
- package/dist/components/SlashCommands.js +59 -0
- package/dist/components/SlashCommands.js.map +1 -0
- package/dist/components/Spinner.d.ts +13 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +16 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/StatusCard.d.ts +14 -0
- package/dist/components/StatusCard.d.ts.map +1 -0
- package/dist/components/StatusCard.js +40 -0
- package/dist/components/StatusCard.js.map +1 -0
- package/dist/components/SuccessMessage.d.ts +12 -0
- package/dist/components/SuccessMessage.d.ts.map +1 -0
- package/dist/components/SuccessMessage.js +18 -0
- package/dist/components/SuccessMessage.js.map +1 -0
- package/dist/components/UploadProgress.d.ts +13 -0
- package/dist/components/UploadProgress.d.ts.map +1 -0
- package/dist/components/UploadProgress.js +40 -0
- package/dist/components/UploadProgress.js.map +1 -0
- package/dist/components/ValidationProgress.d.ts +12 -0
- package/dist/components/ValidationProgress.d.ts.map +1 -0
- package/dist/components/ValidationProgress.js +44 -0
- package/dist/components/ValidationProgress.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/core/framework-registry.d.ts +27 -0
- package/dist/lib/core/framework-registry.d.ts.map +1 -0
- package/dist/lib/core/framework-registry.js +67 -0
- package/dist/lib/core/framework-registry.js.map +1 -0
- package/dist/lib/core/types.d.ts +124 -0
- package/dist/lib/core/types.d.ts.map +1 -0
- package/dist/lib/core/types.js +6 -0
- package/dist/lib/core/types.js.map +1 -0
- package/dist/lib/project-generator.d.ts +15 -0
- package/dist/lib/project-generator.d.ts.map +1 -0
- package/dist/lib/project-generator.js +286 -0
- package/dist/lib/project-generator.js.map +1 -0
- package/dist/lib/push.d.ts +20 -0
- package/dist/lib/push.d.ts.map +1 -0
- package/dist/lib/push.js +222 -0
- package/dist/lib/push.js.map +1 -0
- package/dist/lib/react/builder.d.ts +45 -0
- package/dist/lib/react/builder.d.ts.map +1 -0
- package/dist/lib/react/builder.js +381 -0
- package/dist/lib/react/builder.js.map +1 -0
- package/dist/lib/react/bundler.d.ts +104 -0
- package/dist/lib/react/bundler.d.ts.map +1 -0
- package/dist/lib/react/bundler.js +654 -0
- package/dist/lib/react/bundler.js.map +1 -0
- package/dist/lib/react/config.d.ts +34 -0
- package/dist/lib/react/config.d.ts.map +1 -0
- package/dist/lib/react/config.js +64 -0
- package/dist/lib/react/config.js.map +1 -0
- package/dist/lib/react/import-map.d.ts +54 -0
- package/dist/lib/react/import-map.d.ts.map +1 -0
- package/dist/lib/react/import-map.js +187 -0
- package/dist/lib/react/import-map.js.map +1 -0
- package/dist/lib/shared/auth-middleware.d.ts +29 -0
- package/dist/lib/shared/auth-middleware.d.ts.map +1 -0
- package/dist/lib/shared/auth-middleware.js +48 -0
- package/dist/lib/shared/auth-middleware.js.map +1 -0
- package/dist/lib/shared/auth.d.ts +50 -0
- package/dist/lib/shared/auth.d.ts.map +1 -0
- package/dist/lib/shared/auth.js +243 -0
- package/dist/lib/shared/auth.js.map +1 -0
- package/dist/lib/shared/cdn-downloader.d.ts +30 -0
- package/dist/lib/shared/cdn-downloader.d.ts.map +1 -0
- package/dist/lib/shared/cdn-downloader.js +126 -0
- package/dist/lib/shared/cdn-downloader.js.map +1 -0
- package/dist/lib/shared/command-history.d.ts +29 -0
- package/dist/lib/shared/command-history.d.ts.map +1 -0
- package/dist/lib/shared/command-history.js +73 -0
- package/dist/lib/shared/command-history.js.map +1 -0
- package/dist/lib/shared/commands.d.ts +24 -0
- package/dist/lib/shared/commands.d.ts.map +1 -0
- package/dist/lib/shared/commands.js +63 -0
- package/dist/lib/shared/commands.js.map +1 -0
- package/dist/lib/shared/config.d.ts +40 -0
- package/dist/lib/shared/config.d.ts.map +1 -0
- package/dist/lib/shared/config.js +69 -0
- package/dist/lib/shared/config.js.map +1 -0
- package/dist/lib/shared/file-utils.d.ts +45 -0
- package/dist/lib/shared/file-utils.d.ts.map +1 -0
- package/dist/lib/shared/file-utils.js +88 -0
- package/dist/lib/shared/file-utils.js.map +1 -0
- package/dist/lib/shared/import-analyzer.d.ts +49 -0
- package/dist/lib/shared/import-analyzer.d.ts.map +1 -0
- package/dist/lib/shared/import-analyzer.js +268 -0
- package/dist/lib/shared/import-analyzer.js.map +1 -0
- package/dist/lib/shared/path-builder.d.ts +55 -0
- package/dist/lib/shared/path-builder.d.ts.map +1 -0
- package/dist/lib/shared/path-builder.js +66 -0
- package/dist/lib/shared/path-builder.js.map +1 -0
- package/dist/lib/shared/uploader.d.ts +79 -0
- package/dist/lib/shared/uploader.d.ts.map +1 -0
- package/dist/lib/shared/uploader.js +340 -0
- package/dist/lib/shared/uploader.js.map +1 -0
- package/dist/lib/shared/zip-creator.d.ts +18 -0
- package/dist/lib/shared/zip-creator.d.ts.map +1 -0
- package/dist/lib/shared/zip-creator.js +131 -0
- package/dist/lib/shared/zip-creator.js.map +1 -0
- package/dist/lib/svelte/builder.d.ts +37 -0
- package/dist/lib/svelte/builder.d.ts.map +1 -0
- package/dist/lib/svelte/builder.js +364 -0
- package/dist/lib/svelte/builder.js.map +1 -0
- package/dist/lib/svelte/bundler.d.ts +92 -0
- package/dist/lib/svelte/bundler.d.ts.map +1 -0
- package/dist/lib/svelte/bundler.js +499 -0
- package/dist/lib/svelte/bundler.js.map +1 -0
- package/dist/lib/svelte/config.d.ts +22 -0
- package/dist/lib/svelte/config.d.ts.map +1 -0
- package/dist/lib/svelte/config.js +65 -0
- package/dist/lib/svelte/config.js.map +1 -0
- package/dist/lib/svelte/import-map.d.ts +42 -0
- package/dist/lib/svelte/import-map.d.ts.map +1 -0
- package/dist/lib/svelte/import-map.js +197 -0
- package/dist/lib/svelte/import-map.js.map +1 -0
- package/dist/lib/template-manager.d.ts +33 -0
- package/dist/lib/template-manager.d.ts.map +1 -0
- package/dist/lib/template-manager.js +69 -0
- package/dist/lib/template-manager.js.map +1 -0
- package/dist/lib/validator.d.ts +10 -0
- package/dist/lib/validator.d.ts.map +1 -0
- package/dist/lib/validator.js +343 -0
- package/dist/lib/validator.js.map +1 -0
- package/dist/lib/vue/builder.d.ts +37 -0
- package/dist/lib/vue/builder.d.ts.map +1 -0
- package/dist/lib/vue/builder.js +366 -0
- package/dist/lib/vue/builder.js.map +1 -0
- package/dist/lib/vue/bundler.d.ts +78 -0
- package/dist/lib/vue/bundler.d.ts.map +1 -0
- package/dist/lib/vue/bundler.js +208 -0
- package/dist/lib/vue/bundler.js.map +1 -0
- package/dist/lib/vue/config.d.ts +18 -0
- package/dist/lib/vue/config.d.ts.map +1 -0
- package/dist/lib/vue/config.js +42 -0
- package/dist/lib/vue/config.js.map +1 -0
- package/dist/lib/vue/import-map.d.ts +42 -0
- package/dist/lib/vue/import-map.d.ts.map +1 -0
- package/dist/lib/vue/import-map.js +156 -0
- package/dist/lib/vue/import-map.js.map +1 -0
- package/dist/screens/BuildScreen.d.ts +8 -0
- package/dist/screens/BuildScreen.d.ts.map +1 -0
- package/dist/screens/BuildScreen.js +158 -0
- package/dist/screens/BuildScreen.js.map +1 -0
- package/dist/screens/CreateScreen.d.ts +12 -0
- package/dist/screens/CreateScreen.d.ts.map +1 -0
- package/dist/screens/CreateScreen.js +305 -0
- package/dist/screens/CreateScreen.js.map +1 -0
- package/dist/screens/InitScreen.d.ts +11 -0
- package/dist/screens/InitScreen.d.ts.map +1 -0
- package/dist/screens/InitScreen.js +339 -0
- package/dist/screens/InitScreen.js.map +1 -0
- package/dist/screens/LoginScreen.d.ts +15 -0
- package/dist/screens/LoginScreen.d.ts.map +1 -0
- package/dist/screens/LoginScreen.js +427 -0
- package/dist/screens/LoginScreen.js.map +1 -0
- package/dist/screens/LogoutScreen.d.ts +15 -0
- package/dist/screens/LogoutScreen.d.ts.map +1 -0
- package/dist/screens/LogoutScreen.js +187 -0
- package/dist/screens/LogoutScreen.js.map +1 -0
- package/dist/screens/PushScreen.d.ts +12 -0
- package/dist/screens/PushScreen.d.ts.map +1 -0
- package/dist/screens/PushScreen.js +546 -0
- package/dist/screens/PushScreen.js.map +1 -0
- package/dist/screens/ValidateScreen.d.ts +12 -0
- package/dist/screens/ValidateScreen.d.ts.map +1 -0
- package/dist/screens/ValidateScreen.js +193 -0
- package/dist/screens/ValidateScreen.js.map +1 -0
- package/dist/screens/WelcomeScreen.d.ts +39 -0
- package/dist/screens/WelcomeScreen.d.ts.map +1 -0
- package/dist/screens/WelcomeScreen.js +297 -0
- package/dist/screens/WelcomeScreen.js.map +1 -0
- package/dist/screens/WhoamiScreen.d.ts +14 -0
- package/dist/screens/WhoamiScreen.d.ts.map +1 -0
- package/dist/screens/WhoamiScreen.js +180 -0
- package/dist/screens/WhoamiScreen.js.map +1 -0
- package/dist/types/index.d.ts +40 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/templates.d.ts +55 -0
- package/dist/types/templates.d.ts.map +1 -0
- package/dist/types/templates.js +6 -0
- package/dist/types/templates.js.map +1 -0
- package/dist/types/validation.d.ts +108 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +6 -0
- package/dist/types/validation.js.map +1 -0
- 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"}
|
package/dist/lib/push.js
ADDED
|
@@ -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"}
|