@spwig/theme-cli 1.0.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 +278 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +99 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/component.d.ts +13 -0
- package/dist/commands/component.d.ts.map +1 -0
- package/dist/commands/component.js +229 -0
- package/dist/commands/component.js.map +1 -0
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +249 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/package.d.ts +12 -0
- package/dist/commands/package.d.ts.map +1 -0
- package/dist/commands/package.js +320 -0
- package/dist/commands/package.js.map +1 -0
- package/dist/commands/validate.d.ts +10 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +204 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/component_manifest_schema.json +221 -0
- package/dist/schemas/theme_manifest_schema.json +267 -0
- package/dist/templates/components/blank.template.html.template +4 -0
- package/dist/templates/components/footer.manifest.json.template +11 -0
- package/dist/templates/components/footer.template.html.template +36 -0
- package/dist/templates/components/header.manifest.json.template +11 -0
- package/dist/templates/components/header.schema.json.template +23 -0
- package/dist/templates/components/header.template.html.template +39 -0
- package/dist/templates/components/schema.json.template +15 -0
- package/dist/templates/components/section.manifest.json.template +11 -0
- package/dist/templates/components/section.template.html.template +13 -0
- package/dist/templates/components/utility.manifest.json.template +11 -0
- package/dist/templates/theme/README.md.template +64 -0
- package/dist/templates/theme/design_tokens.json.template +66 -0
- package/dist/templates/theme/manifest.json.template +40 -0
- package/dist/utils/file-system.d.ts +49 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +115 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/validation.d.ts +40 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +98 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +62 -0
- package/schemas/component_manifest_schema.json +221 -0
- package/schemas/theme_manifest_schema.json +267 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { directoryExists, ensureDirectory, writeFromTemplate, writeJSON, } from '../utils/file-system.js';
|
|
6
|
+
import { toKebabCase, toTitleCase, getThemeNameError, isValidEmail, } from '../utils/validation.js';
|
|
7
|
+
/**
|
|
8
|
+
* Initialize a new theme
|
|
9
|
+
*/
|
|
10
|
+
export async function initCommand(themeName, options) {
|
|
11
|
+
console.log(chalk.blue.bold('\n🎨 Spwig Theme SDK - Create New Theme\n'));
|
|
12
|
+
// Get theme name
|
|
13
|
+
let finalThemeName = themeName;
|
|
14
|
+
if (!finalThemeName) {
|
|
15
|
+
const { name } = await inquirer.prompt([
|
|
16
|
+
{
|
|
17
|
+
type: 'input',
|
|
18
|
+
name: 'name',
|
|
19
|
+
message: 'Theme name (lowercase, hyphens):',
|
|
20
|
+
validate: (input) => {
|
|
21
|
+
const error = getThemeNameError(input);
|
|
22
|
+
return error || true;
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
]);
|
|
26
|
+
finalThemeName = name;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Validate provided name
|
|
30
|
+
const error = getThemeNameError(finalThemeName);
|
|
31
|
+
if (error) {
|
|
32
|
+
throw new Error(`Invalid theme name: ${error}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const themeSlug = toKebabCase(finalThemeName);
|
|
36
|
+
const themePath = path.join(process.cwd(), themeSlug);
|
|
37
|
+
// Check if directory already exists
|
|
38
|
+
if (await directoryExists(themePath)) {
|
|
39
|
+
throw new Error(`Directory ${themeSlug} already exists`);
|
|
40
|
+
}
|
|
41
|
+
// Get other theme details
|
|
42
|
+
const answers = await inquirer.prompt([
|
|
43
|
+
{
|
|
44
|
+
type: 'input',
|
|
45
|
+
name: 'displayName',
|
|
46
|
+
message: 'Display name:',
|
|
47
|
+
default: toTitleCase(themeSlug),
|
|
48
|
+
validate: (input) => (input.length > 0 ? true : 'Display name is required'),
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: 'input',
|
|
52
|
+
name: 'author',
|
|
53
|
+
message: 'Author name:',
|
|
54
|
+
default: options.author,
|
|
55
|
+
validate: (input) => (input.length > 0 ? true : 'Author name is required'),
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'input',
|
|
59
|
+
name: 'email',
|
|
60
|
+
message: 'Author email:',
|
|
61
|
+
default: options.email,
|
|
62
|
+
validate: (input) => {
|
|
63
|
+
if (!input)
|
|
64
|
+
return true; // Email is optional
|
|
65
|
+
return isValidEmail(input) ? true : 'Invalid email address';
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
type: 'input',
|
|
70
|
+
name: 'description',
|
|
71
|
+
message: 'Description:',
|
|
72
|
+
default: options.description || `A modern theme for Spwig eCommerce`,
|
|
73
|
+
validate: (input) => input.length >= 10 ? true : 'Description must be at least 10 characters',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'list',
|
|
77
|
+
name: 'license',
|
|
78
|
+
message: 'License:',
|
|
79
|
+
choices: ['MIT', 'Apache-2.0', 'GPL-3.0', 'Proprietary'],
|
|
80
|
+
default: options.license || 'MIT',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
type: 'confirm',
|
|
84
|
+
name: 'initGit',
|
|
85
|
+
message: 'Initialize git repository?',
|
|
86
|
+
default: options.git !== false,
|
|
87
|
+
},
|
|
88
|
+
]);
|
|
89
|
+
const spinner = ora('Creating theme...').start();
|
|
90
|
+
try {
|
|
91
|
+
// Create theme directory structure
|
|
92
|
+
await createThemeStructure(themePath, {
|
|
93
|
+
themeName: themeSlug,
|
|
94
|
+
displayName: answers.displayName,
|
|
95
|
+
author: answers.author,
|
|
96
|
+
email: answers.email,
|
|
97
|
+
description: answers.description,
|
|
98
|
+
license: answers.license,
|
|
99
|
+
template: options.template || 'full',
|
|
100
|
+
});
|
|
101
|
+
spinner.succeed(chalk.green('Theme created successfully!'));
|
|
102
|
+
// Show next steps
|
|
103
|
+
console.log(chalk.blue('\n📦 Next steps:\n'));
|
|
104
|
+
console.log(chalk.white(` cd ${themeSlug}`));
|
|
105
|
+
console.log(chalk.white(` spwig dev`));
|
|
106
|
+
console.log(chalk.dim('\n Visit http://localhost:3000 to see your theme\n'));
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
spinner.fail(chalk.red('Failed to create theme'));
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create theme directory structure
|
|
115
|
+
*/
|
|
116
|
+
async function createThemeStructure(themePath, config) {
|
|
117
|
+
const { themeName, displayName, author, description, license, template } = config;
|
|
118
|
+
// Create base directories
|
|
119
|
+
await ensureDirectory(themePath);
|
|
120
|
+
// Template variables
|
|
121
|
+
const variables = {
|
|
122
|
+
themeName,
|
|
123
|
+
displayName,
|
|
124
|
+
author,
|
|
125
|
+
description,
|
|
126
|
+
license,
|
|
127
|
+
};
|
|
128
|
+
// Get templates directory
|
|
129
|
+
const templatesDir = path.join(__dirname, '../templates');
|
|
130
|
+
// Always create manifest.json
|
|
131
|
+
await writeFromTemplate(path.join(templatesDir, 'theme/manifest.json.template'), path.join(themePath, 'manifest.json'), variables);
|
|
132
|
+
// Always create README.md
|
|
133
|
+
await writeFromTemplate(path.join(templatesDir, 'theme/README.md.template'), path.join(themePath, 'README.md'), variables);
|
|
134
|
+
// Create .gitignore
|
|
135
|
+
const gitignoreContent = `node_modules/
|
|
136
|
+
dist/
|
|
137
|
+
*.log
|
|
138
|
+
.DS_Store
|
|
139
|
+
Thumbs.db
|
|
140
|
+
`;
|
|
141
|
+
await ensureDirectory(themePath);
|
|
142
|
+
const fs = await import('fs-extra');
|
|
143
|
+
await fs.writeFile(path.join(themePath, '.gitignore'), gitignoreContent);
|
|
144
|
+
if (template === 'blank') {
|
|
145
|
+
// Blank template - just manifest and README
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
// Minimal and full templates include design tokens
|
|
149
|
+
await writeFromTemplate(path.join(templatesDir, 'theme/design_tokens.json.template'), path.join(themePath, 'design_tokens.json'), variables);
|
|
150
|
+
if (template === 'minimal') {
|
|
151
|
+
// Minimal template - basic structure only
|
|
152
|
+
await ensureDirectory(path.join(themePath, 'components'));
|
|
153
|
+
await ensureDirectory(path.join(themePath, 'pages'));
|
|
154
|
+
await ensureDirectory(path.join(themePath, 'assets'));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// Full template - complete structure with default components
|
|
158
|
+
// Create components
|
|
159
|
+
await createDefaultComponent(themePath, 'header', 'default_header', 'Default Header', variables);
|
|
160
|
+
await createDefaultComponent(themePath, 'footer', 'default_footer', 'Default Footer', variables);
|
|
161
|
+
await createDefaultComponent(themePath, 'section', 'hero_section', 'Hero Section', variables);
|
|
162
|
+
// Create pages directory with basic schemas
|
|
163
|
+
await ensureDirectory(path.join(themePath, 'pages'));
|
|
164
|
+
const pagesDir = path.join(themePath, 'pages');
|
|
165
|
+
// Home page schema
|
|
166
|
+
await writeJSON(path.join(pagesDir, 'home.json'), {
|
|
167
|
+
page_type: 'home',
|
|
168
|
+
sections: [
|
|
169
|
+
{
|
|
170
|
+
type: 'hero_section',
|
|
171
|
+
settings: {
|
|
172
|
+
title: 'Welcome to Your Store',
|
|
173
|
+
description: 'Discover our amazing products',
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
});
|
|
178
|
+
// Product page schema
|
|
179
|
+
await writeJSON(path.join(pagesDir, 'product.json'), {
|
|
180
|
+
page_type: 'product',
|
|
181
|
+
sections: [],
|
|
182
|
+
});
|
|
183
|
+
// Collection page schema
|
|
184
|
+
await writeJSON(path.join(pagesDir, 'collection.json'), {
|
|
185
|
+
page_type: 'collection',
|
|
186
|
+
sections: [],
|
|
187
|
+
});
|
|
188
|
+
// Cart page schema
|
|
189
|
+
await writeJSON(path.join(pagesDir, 'cart.json'), {
|
|
190
|
+
page_type: 'cart',
|
|
191
|
+
sections: [],
|
|
192
|
+
});
|
|
193
|
+
// Create assets directory
|
|
194
|
+
await ensureDirectory(path.join(themePath, 'assets/styles'));
|
|
195
|
+
await ensureDirectory(path.join(themePath, 'assets/scripts'));
|
|
196
|
+
await ensureDirectory(path.join(themePath, 'assets/images'));
|
|
197
|
+
// Create global CSS
|
|
198
|
+
const globalCSS = `/* Global Styles */
|
|
199
|
+
* {
|
|
200
|
+
box-sizing: border-box;
|
|
201
|
+
margin: 0;
|
|
202
|
+
padding: 0;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
body {
|
|
206
|
+
font-family: var(--body-font);
|
|
207
|
+
font-size: var(--base-size);
|
|
208
|
+
color: var(--text-color);
|
|
209
|
+
line-height: 1.6;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.container {
|
|
213
|
+
max-width: 1280px;
|
|
214
|
+
margin: 0 auto;
|
|
215
|
+
padding: 0 1rem;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
a {
|
|
219
|
+
color: var(--primary-color);
|
|
220
|
+
text-decoration: none;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
a:hover {
|
|
224
|
+
text-decoration: underline;
|
|
225
|
+
}
|
|
226
|
+
`;
|
|
227
|
+
await fs.writeFile(path.join(themePath, 'assets/styles/global.css'), globalCSS);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Create a default component
|
|
231
|
+
*/
|
|
232
|
+
async function createDefaultComponent(themePath, type, name, displayName, variables) {
|
|
233
|
+
const componentDir = path.join(themePath, `components/${type}s/${name}`);
|
|
234
|
+
await ensureDirectory(componentDir);
|
|
235
|
+
const templatesDir = path.join(__dirname, '../templates/components');
|
|
236
|
+
const componentVars = {
|
|
237
|
+
...variables,
|
|
238
|
+
componentName: name,
|
|
239
|
+
displayName: displayName,
|
|
240
|
+
description: `${displayName} component`,
|
|
241
|
+
};
|
|
242
|
+
// Manifest
|
|
243
|
+
await writeFromTemplate(path.join(templatesDir, `${type}.manifest.json.template`), path.join(componentDir, 'manifest.json'), componentVars);
|
|
244
|
+
// Template
|
|
245
|
+
await writeFromTemplate(path.join(templatesDir, `${type}.template.html.template`), path.join(componentDir, 'template.html'), componentVars);
|
|
246
|
+
// Schema
|
|
247
|
+
await writeFromTemplate(path.join(templatesDir, `${type}.schema.json.template`), path.join(componentDir, 'schema.json'), componentVars);
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package command
|
|
3
|
+
* Creates distributable ZIP packages from themes
|
|
4
|
+
*/
|
|
5
|
+
export interface PackageOptions {
|
|
6
|
+
output?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
validate?: boolean;
|
|
9
|
+
checksum?: 'sha256' | 'md5';
|
|
10
|
+
}
|
|
11
|
+
export declare function packageCommand(themePath: string, options: PackageOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=package.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../src/commands/package.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;CAC7B;AAqBD,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E9F"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package command
|
|
3
|
+
* Creates distributable ZIP packages from themes
|
|
4
|
+
*/
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
import archiver from 'archiver';
|
|
10
|
+
import crypto from 'crypto';
|
|
11
|
+
import { ThemeValidator } from '@spwig/theme-validator';
|
|
12
|
+
export async function packageCommand(themePath, options) {
|
|
13
|
+
console.log(chalk.blue.bold('\n📦 Spwig Theme SDK - Package Theme\n'));
|
|
14
|
+
const absolutePath = path.resolve(themePath);
|
|
15
|
+
// Check if directory exists
|
|
16
|
+
if (!(await fs.pathExists(absolutePath))) {
|
|
17
|
+
console.error(chalk.red('Error:'), `Directory does not exist: ${absolutePath}`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
// Load manifest
|
|
21
|
+
const manifestPath = path.join(absolutePath, 'manifest.json');
|
|
22
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
23
|
+
console.error(chalk.red('Error:'), 'No manifest.json found in theme directory');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
let manifest;
|
|
27
|
+
try {
|
|
28
|
+
manifest = await fs.readJSON(manifestPath);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error(chalk.red('Error:'), 'Failed to parse manifest.json');
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
console.log(chalk.bold('Theme:'), manifest.display_name);
|
|
35
|
+
console.log(chalk.gray('Version:'), manifest.version);
|
|
36
|
+
console.log();
|
|
37
|
+
// Validate theme first (unless --no-validate)
|
|
38
|
+
if (options.validate !== false) {
|
|
39
|
+
const validateSpinner = ora('Validating theme...').start();
|
|
40
|
+
const validator = new ThemeValidator(absolutePath);
|
|
41
|
+
const result = await validator.validate();
|
|
42
|
+
if (!result.isValid) {
|
|
43
|
+
validateSpinner.fail(chalk.red('Validation failed'));
|
|
44
|
+
console.log();
|
|
45
|
+
console.log(chalk.red.bold(`❌ ERRORS (${result.errors.length}):`));
|
|
46
|
+
for (const error of result.errors) {
|
|
47
|
+
console.log(chalk.red(' •'), error.message);
|
|
48
|
+
}
|
|
49
|
+
console.log();
|
|
50
|
+
console.error(chalk.red('Cannot package theme with validation errors'));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
validateSpinner.succeed('Theme validation passed');
|
|
54
|
+
}
|
|
55
|
+
// Determine output path
|
|
56
|
+
const outputDir = options.output ? path.resolve(options.output) : path.join(absolutePath, 'dist');
|
|
57
|
+
await fs.ensureDir(outputDir);
|
|
58
|
+
const packageName = options.name || `${manifest.name}-${manifest.version}.zip`;
|
|
59
|
+
const outputPath = path.join(outputDir, packageName);
|
|
60
|
+
// Create package
|
|
61
|
+
const spinner = ora('Creating package...').start();
|
|
62
|
+
try {
|
|
63
|
+
const packageInfo = await createPackage(absolutePath, outputPath, manifest);
|
|
64
|
+
spinner.succeed('Package created successfully');
|
|
65
|
+
console.log();
|
|
66
|
+
console.log(chalk.green.bold('✨ Package Summary:'));
|
|
67
|
+
console.log(chalk.gray(' Package:'), packageInfo.package_file);
|
|
68
|
+
console.log(chalk.gray(' Size:'), formatBytes(packageInfo.package_size));
|
|
69
|
+
console.log(chalk.gray(' Files:'), packageInfo.file_count);
|
|
70
|
+
console.log(chalk.gray(' Checksum:'), packageInfo.checksum_file);
|
|
71
|
+
console.log(chalk.gray(' Components:'), packageInfo.bundled_components);
|
|
72
|
+
console.log();
|
|
73
|
+
console.log(chalk.green('✅ Theme package ready for distribution!'));
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
spinner.fail('Packaging failed');
|
|
77
|
+
console.error(chalk.red('\nError:'), error instanceof Error ? error.message : error);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create ZIP package from theme directory
|
|
83
|
+
*/
|
|
84
|
+
async function createPackage(themePath, outputPath, manifest) {
|
|
85
|
+
// Create temporary build directory
|
|
86
|
+
const buildDir = path.join(path.dirname(outputPath), `build_${manifest.name}_${Date.now()}`);
|
|
87
|
+
await fs.ensureDir(buildDir);
|
|
88
|
+
try {
|
|
89
|
+
// Copy theme to build directory
|
|
90
|
+
await copyToBuildDir(themePath, buildDir);
|
|
91
|
+
// Clean build directory
|
|
92
|
+
await cleanBuildDir(buildDir);
|
|
93
|
+
// Calculate metadata
|
|
94
|
+
const metadata = await calculateMetadata(buildDir);
|
|
95
|
+
// Update manifest with metadata
|
|
96
|
+
await updateManifestWithMetadata(buildDir, metadata);
|
|
97
|
+
// Create ZIP
|
|
98
|
+
await createZip(buildDir, outputPath);
|
|
99
|
+
// Calculate package checksum
|
|
100
|
+
const packageChecksum = await calculateFileChecksum(outputPath);
|
|
101
|
+
// Create checksum file
|
|
102
|
+
const checksumPath = `${outputPath}.sha256`;
|
|
103
|
+
await fs.writeFile(checksumPath, `${packageChecksum} ${path.basename(outputPath)}\n`);
|
|
104
|
+
// Return package info
|
|
105
|
+
return {
|
|
106
|
+
theme_name: manifest.name,
|
|
107
|
+
version: manifest.version,
|
|
108
|
+
package_file: outputPath,
|
|
109
|
+
checksum_file: checksumPath,
|
|
110
|
+
package_size: (await fs.stat(outputPath)).size,
|
|
111
|
+
package_checksum: packageChecksum,
|
|
112
|
+
content_checksum: metadata.checksum,
|
|
113
|
+
file_count: metadata.file_count,
|
|
114
|
+
total_size: metadata.total_size,
|
|
115
|
+
bundled_components: manifest.bundled_components?.length || 0,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
// Cleanup build directory
|
|
120
|
+
if (await fs.pathExists(buildDir)) {
|
|
121
|
+
await fs.remove(buildDir);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Copy theme directory to build directory
|
|
127
|
+
*/
|
|
128
|
+
async function copyToBuildDir(themePath, buildDir) {
|
|
129
|
+
const ignorePatterns = [
|
|
130
|
+
'__pycache__',
|
|
131
|
+
'*.pyc',
|
|
132
|
+
'.DS_Store',
|
|
133
|
+
'.git',
|
|
134
|
+
'.gitignore',
|
|
135
|
+
'node_modules',
|
|
136
|
+
'.env',
|
|
137
|
+
'*.log',
|
|
138
|
+
'dist',
|
|
139
|
+
'build',
|
|
140
|
+
'.vscode',
|
|
141
|
+
'.idea',
|
|
142
|
+
];
|
|
143
|
+
await fs.copy(themePath, buildDir, {
|
|
144
|
+
filter: (src) => {
|
|
145
|
+
const basename = path.basename(src);
|
|
146
|
+
return !ignorePatterns.some((pattern) => {
|
|
147
|
+
if (pattern.startsWith('*')) {
|
|
148
|
+
return basename.endsWith(pattern.substring(1));
|
|
149
|
+
}
|
|
150
|
+
return basename === pattern;
|
|
151
|
+
});
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Clean build directory of unwanted files
|
|
157
|
+
*/
|
|
158
|
+
async function cleanBuildDir(buildDir) {
|
|
159
|
+
// Remove Python cache files
|
|
160
|
+
const pycFiles = await findFiles(buildDir, '**/*.pyc');
|
|
161
|
+
for (const file of pycFiles) {
|
|
162
|
+
await fs.remove(file);
|
|
163
|
+
}
|
|
164
|
+
// Remove __pycache__ directories
|
|
165
|
+
const pycacheDirs = await findDirectories(buildDir, '**/__pycache__');
|
|
166
|
+
for (const dir of pycacheDirs) {
|
|
167
|
+
await fs.remove(dir);
|
|
168
|
+
}
|
|
169
|
+
// Remove .DS_Store files (macOS)
|
|
170
|
+
const dsFiles = await findFiles(buildDir, '**/.DS_Store');
|
|
171
|
+
for (const file of dsFiles) {
|
|
172
|
+
await fs.remove(file);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Calculate package metadata (file count, size, checksum)
|
|
177
|
+
*/
|
|
178
|
+
async function calculateMetadata(buildDir) {
|
|
179
|
+
let fileCount = 0;
|
|
180
|
+
let totalSize = 0;
|
|
181
|
+
const fileHashes = [];
|
|
182
|
+
const files = await getAllFiles(buildDir);
|
|
183
|
+
for (const file of files) {
|
|
184
|
+
const stats = await fs.stat(file);
|
|
185
|
+
fileCount++;
|
|
186
|
+
totalSize += stats.size;
|
|
187
|
+
// Don't include manifest.json in checksum (will be updated)
|
|
188
|
+
if (path.basename(file) !== 'manifest.json') {
|
|
189
|
+
const hash = await calculateFileChecksum(file);
|
|
190
|
+
fileHashes.push(hash);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Calculate overall checksum from sorted file hashes
|
|
194
|
+
const combinedHash = crypto.createHash('sha256');
|
|
195
|
+
for (const hash of fileHashes.sort()) {
|
|
196
|
+
combinedHash.update(hash);
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
file_count: fileCount,
|
|
200
|
+
total_size: totalSize,
|
|
201
|
+
checksum: `sha256:${combinedHash.digest('hex')}`,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Update manifest.json with package metadata
|
|
206
|
+
*/
|
|
207
|
+
async function updateManifestWithMetadata(buildDir, metadata) {
|
|
208
|
+
const manifestPath = path.join(buildDir, 'manifest.json');
|
|
209
|
+
const manifest = await fs.readJSON(manifestPath);
|
|
210
|
+
manifest.total_size_bytes = metadata.total_size;
|
|
211
|
+
manifest.file_count = metadata.file_count;
|
|
212
|
+
manifest.checksum = metadata.checksum;
|
|
213
|
+
await fs.writeJSON(manifestPath, manifest, { spaces: 2 });
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Create ZIP package
|
|
217
|
+
*/
|
|
218
|
+
async function createZip(buildDir, outputPath) {
|
|
219
|
+
return new Promise((resolve, reject) => {
|
|
220
|
+
const output = fs.createWriteStream(outputPath);
|
|
221
|
+
const archive = archiver('zip', {
|
|
222
|
+
zlib: { level: 9 }, // Maximum compression
|
|
223
|
+
});
|
|
224
|
+
output.on('close', () => resolve());
|
|
225
|
+
archive.on('error', (err) => reject(err));
|
|
226
|
+
archive.pipe(output);
|
|
227
|
+
// Add all files to ZIP (at root level, not in subdirectory)
|
|
228
|
+
archive.directory(buildDir, false);
|
|
229
|
+
archive.finalize();
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Calculate SHA256 checksum of a file
|
|
234
|
+
*/
|
|
235
|
+
async function calculateFileChecksum(filePath) {
|
|
236
|
+
return new Promise((resolve, reject) => {
|
|
237
|
+
const hash = crypto.createHash('sha256');
|
|
238
|
+
const stream = fs.createReadStream(filePath);
|
|
239
|
+
stream.on('data', (data) => hash.update(data));
|
|
240
|
+
stream.on('end', () => resolve(hash.digest('hex')));
|
|
241
|
+
stream.on('error', reject);
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Get all files recursively
|
|
246
|
+
*/
|
|
247
|
+
async function getAllFiles(dir) {
|
|
248
|
+
const files = [];
|
|
249
|
+
async function walk(currentPath) {
|
|
250
|
+
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
251
|
+
for (const entry of entries) {
|
|
252
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
253
|
+
if (entry.isDirectory()) {
|
|
254
|
+
await walk(fullPath);
|
|
255
|
+
}
|
|
256
|
+
else if (entry.isFile()) {
|
|
257
|
+
files.push(fullPath);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
await walk(dir);
|
|
262
|
+
return files;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Find files matching pattern
|
|
266
|
+
*/
|
|
267
|
+
async function findFiles(dir, pattern) {
|
|
268
|
+
// Simple implementation - would use glob in production
|
|
269
|
+
const files = [];
|
|
270
|
+
const extension = pattern.includes('*') ? pattern.split('*')[1] : null;
|
|
271
|
+
async function walk(currentPath) {
|
|
272
|
+
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
273
|
+
for (const entry of entries) {
|
|
274
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
275
|
+
if (entry.isDirectory()) {
|
|
276
|
+
await walk(fullPath);
|
|
277
|
+
}
|
|
278
|
+
else if (entry.isFile()) {
|
|
279
|
+
if (!extension || fullPath.endsWith(extension)) {
|
|
280
|
+
files.push(fullPath);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
await walk(dir);
|
|
286
|
+
return files;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Find directories matching pattern
|
|
290
|
+
*/
|
|
291
|
+
async function findDirectories(dir, pattern) {
|
|
292
|
+
const dirs = [];
|
|
293
|
+
const targetName = pattern.includes('**') ? pattern.split('/').pop() : pattern;
|
|
294
|
+
async function walk(currentPath) {
|
|
295
|
+
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
296
|
+
for (const entry of entries) {
|
|
297
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
298
|
+
if (entry.isDirectory()) {
|
|
299
|
+
if (entry.name === targetName) {
|
|
300
|
+
dirs.push(fullPath);
|
|
301
|
+
}
|
|
302
|
+
await walk(fullPath);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
await walk(dir);
|
|
307
|
+
return dirs;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Format bytes to human-readable string
|
|
311
|
+
*/
|
|
312
|
+
function formatBytes(bytes) {
|
|
313
|
+
if (bytes === 0)
|
|
314
|
+
return '0 Bytes';
|
|
315
|
+
const k = 1024;
|
|
316
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB'];
|
|
317
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
318
|
+
return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=package.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/commands/package.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate command
|
|
3
|
+
* Validates theme or component packages
|
|
4
|
+
*/
|
|
5
|
+
export interface ValidateOptions {
|
|
6
|
+
type?: 'theme' | 'component';
|
|
7
|
+
verbose?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function validateCommand(targetPath: string | undefined, options: ValidateOptions): Promise<number>;
|
|
10
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,YAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqCzG"}
|