@spwig/theme-cli 1.0.0 → 2.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/CHANGELOG.md +77 -0
- package/README.md +0 -0
- package/dist/cli.d.ts +0 -0
- package/dist/cli.d.ts.map +0 -0
- package/dist/cli.js +14 -22
- package/dist/cli.js.map +1 -1
- package/dist/commands/component.d.ts +0 -0
- package/dist/commands/component.d.ts.map +0 -0
- package/dist/commands/component.js +0 -0
- package/dist/commands/component.js.map +0 -0
- package/dist/commands/dev.d.ts +14 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +310 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/init.d.ts +5 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +80 -115
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/package.d.ts +0 -0
- package/dist/commands/package.d.ts.map +1 -1
- package/dist/commands/package.js +0 -2
- package/dist/commands/package.js.map +1 -1
- package/dist/commands/validate.d.ts +1 -2
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +10 -112
- package/dist/commands/validate.js.map +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/schemas/component_manifest_schema.json +0 -0
- package/dist/schemas/theme_manifest_schema.json +5 -63
- package/dist/templates/assets/logo.svg.template +6 -0
- package/dist/templates/assets/theme.js.template +150 -0
- package/dist/templates/components/blank.template.html.template +0 -0
- package/dist/templates/components/footer.manifest.json.template +0 -0
- package/dist/templates/components/footer.schema.json.template +22 -0
- package/dist/templates/components/footer.styles.css.template +80 -0
- package/dist/templates/components/footer.template.html.template +0 -0
- package/dist/templates/components/header.manifest.json.template +0 -0
- package/dist/templates/components/header.schema.json.template +0 -0
- package/dist/templates/components/header.styles.css.template +104 -0
- package/dist/templates/components/header.template.html.template +0 -0
- package/dist/templates/components/schema.json.template +0 -0
- package/dist/templates/components/section.manifest.json.template +2 -2
- package/dist/templates/components/section.schema.json.template +40 -0
- package/dist/templates/components/section.styles.css.template +60 -0
- package/dist/templates/components/section.template.html.template +0 -0
- package/dist/templates/components/utility.manifest.json.template +0 -0
- package/dist/templates/pages/cart.html.template +104 -0
- package/dist/templates/pages/collection.html.template +86 -0
- package/dist/templates/pages/home.html.template +51 -0
- package/dist/templates/pages/layout.html.template +48 -0
- package/dist/templates/pages/product.html.template +90 -0
- package/dist/templates/presets/footer.json.template +16 -0
- package/dist/templates/presets/header.json.template +16 -0
- package/dist/templates/theme/README.md.template +51 -21
- package/dist/templates/theme/design_tokens.json.template +0 -0
- package/dist/templates/theme/manifest.json.template +6 -28
- package/dist/templates/theme/tokens.json.template +1254 -0
- package/dist/utils/file-system.d.ts +0 -0
- package/dist/utils/file-system.d.ts.map +0 -0
- package/dist/utils/file-system.js +0 -0
- package/dist/utils/file-system.js.map +0 -0
- package/dist/utils/validation.d.ts +0 -0
- package/dist/utils/validation.d.ts.map +0 -0
- package/dist/utils/validation.js +0 -0
- package/dist/utils/validation.js.map +0 -0
- package/package.json +6 -3
- package/schemas/theme_manifest_schema.json +5 -63
- package/schemas/component_manifest_schema.json +0 -221
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to @spwig/theme-cli will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.2.0] - 2026-01-26
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- **Design tokens documentation overhaul**
|
|
12
|
+
- Token file renamed from `design_tokens.json` to `tokens.json`
|
|
13
|
+
- Token naming convention standardized to kebab-case (hyphens, not underscores)
|
|
14
|
+
- Added comprehensive documentation for all color variants
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- **New token categories documented**
|
|
18
|
+
- `z-index` tokens for consistent stacking (dropdown, sticky, fixed, modal, tooltip)
|
|
19
|
+
- `container` tokens for layout (max-width, padding)
|
|
20
|
+
- `letter-spacing` typography tokens
|
|
21
|
+
- Per-heading typography tokens (font-family-h1 through h6, etc.)
|
|
22
|
+
- Additional easing functions (easing-in, easing-out)
|
|
23
|
+
- `2xl` breakpoint (1536px)
|
|
24
|
+
|
|
25
|
+
- **New color tokens documented**
|
|
26
|
+
- `primary-hover`, `secondary-hover`, `accent-hover` for interaction states
|
|
27
|
+
- `text-muted` for subdued text
|
|
28
|
+
- `background-secondary`, `background-tertiary`, `background-alt`
|
|
29
|
+
- `surface-secondary`, `surface-variant`, `surface-hover`, `surface-dark`
|
|
30
|
+
- `header-bg`, `footer-bg` for layout areas
|
|
31
|
+
- `shadow`, `overlay` utility colors
|
|
32
|
+
|
|
33
|
+
- **Menu tokens for navigation styling**
|
|
34
|
+
- Color tokens: `text-color`, `text-hover-color`, `background`, `background-hover`, `dropdown-background`, `dropdown-shadow`, `border-color`, `active-indicator-color`
|
|
35
|
+
- Spacing tokens: `item-gap`, `link-padding-x`, `link-padding-y`, `dropdown-padding`, `dropdown-offset`
|
|
36
|
+
- Typography tokens: `font-size`, `font-weight`, `font-weight-active`
|
|
37
|
+
- Shape tokens: `border-radius`, `dropdown-border-radius`
|
|
38
|
+
- Animation tokens: `animation-duration`, `animation-timing`, `slide-duration`
|
|
39
|
+
- Mobile mode classes: `.mobile-mode-hamburger`, `.mobile-mode-bottom-nav`, `.mobile-mode-slide`, `.mobile-mode-fullscreen`
|
|
40
|
+
|
|
41
|
+
### Migration
|
|
42
|
+
- See DESIGN_TOKENS.md "Migration from v1.0" section for upgrade instructions
|
|
43
|
+
|
|
44
|
+
## [1.1.0] - 2025-11-19
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
- **`spwig dev` command** - Development server with hot reload
|
|
48
|
+
- Connect to a running Spwig shop for live theme development
|
|
49
|
+
- Automatic file watching and synchronization
|
|
50
|
+
- CSS-only hot reload for style changes
|
|
51
|
+
- Full page reload for template/manifest changes
|
|
52
|
+
- Basic auth with shop admin credentials
|
|
53
|
+
- Auto-opens browser to preview URL
|
|
54
|
+
- Clean disconnect on Ctrl+C
|
|
55
|
+
|
|
56
|
+
### Dependencies
|
|
57
|
+
- Added `chokidar` for file watching
|
|
58
|
+
- Added `open` for browser launching
|
|
59
|
+
|
|
60
|
+
## [1.0.0] - 2025-11-18
|
|
61
|
+
|
|
62
|
+
### Added
|
|
63
|
+
- Initial release
|
|
64
|
+
- **`spwig init`** - Create new theme with interactive prompts
|
|
65
|
+
- Template options: full, minimal, blank
|
|
66
|
+
- Git initialization support
|
|
67
|
+
- **`spwig validate`** - Validate theme or component structure
|
|
68
|
+
- JSON schema validation for manifests
|
|
69
|
+
- File structure verification
|
|
70
|
+
- Asset size checks (5MB max for images)
|
|
71
|
+
- **`spwig package`** - Create distributable theme package
|
|
72
|
+
- ZIP archive generation
|
|
73
|
+
- SHA256 checksum calculation
|
|
74
|
+
- Pre-packaging validation
|
|
75
|
+
- **`spwig component add`** - Add components to theme
|
|
76
|
+
- Scaffold component files (manifest, template, schema, styles)
|
|
77
|
+
- Auto-update theme manifest with new component
|
package/README.md
CHANGED
|
File without changes
|
package/dist/cli.d.ts
CHANGED
|
File without changes
|
package/dist/cli.d.ts.map
CHANGED
|
File without changes
|
package/dist/cli.js
CHANGED
|
@@ -4,12 +4,12 @@ import chalk from 'chalk';
|
|
|
4
4
|
import { initCommand } from './commands/init.js';
|
|
5
5
|
import { validateCommand } from './commands/validate.js';
|
|
6
6
|
import { packageCommand } from './commands/package.js';
|
|
7
|
-
import {
|
|
7
|
+
import { devCommand } from './commands/dev.js';
|
|
8
8
|
const program = new Command();
|
|
9
9
|
program
|
|
10
10
|
.name('spwig')
|
|
11
11
|
.description('Spwig Theme SDK - Build professional themes for Spwig eCommerce')
|
|
12
|
-
.version('
|
|
12
|
+
.version('2.0.0');
|
|
13
13
|
// spwig init
|
|
14
14
|
program
|
|
15
15
|
.command('init [name]')
|
|
@@ -18,8 +18,8 @@ program
|
|
|
18
18
|
.option('-e, --email <email>', 'Author email')
|
|
19
19
|
.option('-d, --description <text>', 'Theme description')
|
|
20
20
|
.option('-l, --license <type>', 'License type', 'MIT')
|
|
21
|
-
.option('--
|
|
22
|
-
.option('-
|
|
21
|
+
.option('-t, --template <name>', 'Use template (basic, standard, complete)', 'standard')
|
|
22
|
+
.option('--primary-color <hex>', 'Primary color hex (e.g., #2563eb)')
|
|
23
23
|
.action(async (name, options) => {
|
|
24
24
|
try {
|
|
25
25
|
await initCommand(name, options);
|
|
@@ -32,8 +32,7 @@ program
|
|
|
32
32
|
// spwig validate
|
|
33
33
|
program
|
|
34
34
|
.command('validate [path]')
|
|
35
|
-
.description('Validate theme
|
|
36
|
-
.option('-t, --type <type>', 'Package type (theme, component)', undefined)
|
|
35
|
+
.description('Validate theme package')
|
|
37
36
|
.option('-v, --verbose', 'Show detailed validation output')
|
|
38
37
|
.action(async (path, options) => {
|
|
39
38
|
try {
|
|
@@ -62,24 +61,17 @@ program
|
|
|
62
61
|
process.exit(1);
|
|
63
62
|
}
|
|
64
63
|
});
|
|
65
|
-
// spwig
|
|
64
|
+
// spwig dev
|
|
66
65
|
program
|
|
67
|
-
.command('
|
|
68
|
-
.description('
|
|
69
|
-
.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
.
|
|
74
|
-
.description('Add a new component')
|
|
75
|
-
.option('-d, --display-name <text>', 'Display name')
|
|
76
|
-
.option('--description <text>', 'Component description')
|
|
77
|
-
.option('--with-css', 'Create styles.css')
|
|
78
|
-
.option('--with-js', 'Create script.js')
|
|
79
|
-
.option('-t, --template <name>', 'Use template (blank, basic, advanced)', 'basic')
|
|
80
|
-
.action(async (type, name, options) => {
|
|
66
|
+
.command('dev [path]')
|
|
67
|
+
.description('Start development server with hot reload')
|
|
68
|
+
.requiredOption('-s, --shop <url>', 'Spwig shop URL (e.g., http://localhost:8000)')
|
|
69
|
+
.option('-p, --port <port>', 'Local port for dev server', '3000')
|
|
70
|
+
.option('--no-open', 'Do not open browser automatically')
|
|
71
|
+
.option('-v, --verbose', 'Enable verbose logging')
|
|
72
|
+
.action(async (path, options) => {
|
|
81
73
|
try {
|
|
82
|
-
await
|
|
74
|
+
await devCommand(path || process.cwd(), options);
|
|
83
75
|
}
|
|
84
76
|
catch (error) {
|
|
85
77
|
console.error(chalk.red('Error:'), error instanceof Error ? error.message : error);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Development server command for Spwig Theme SDK
|
|
3
|
+
*
|
|
4
|
+
* Connects to a running Spwig shop for live theme development with hot reload.
|
|
5
|
+
*/
|
|
6
|
+
interface DevOptions {
|
|
7
|
+
shop: string;
|
|
8
|
+
port?: number;
|
|
9
|
+
open?: boolean;
|
|
10
|
+
verbose?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function devCommand(themePath: string, options: DevOptions): Promise<void>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=dev.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA0BD,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA8KtF"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Development server command for Spwig Theme SDK
|
|
3
|
+
*
|
|
4
|
+
* Connects to a running Spwig shop for live theme development with hot reload.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs/promises';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as crypto from 'crypto';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import ora from 'ora';
|
|
11
|
+
import chokidar from 'chokidar';
|
|
12
|
+
import open from 'open';
|
|
13
|
+
// File extensions that should be encoded as base64
|
|
14
|
+
const BINARY_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.webp', '.woff', '.woff2', '.ico', '.gif'];
|
|
15
|
+
export async function devCommand(themePath, options) {
|
|
16
|
+
const spinner = ora();
|
|
17
|
+
let session = null;
|
|
18
|
+
let watcher = null;
|
|
19
|
+
// Cleanup handler
|
|
20
|
+
const cleanup = async () => {
|
|
21
|
+
if (watcher) {
|
|
22
|
+
await watcher.close();
|
|
23
|
+
}
|
|
24
|
+
if (session) {
|
|
25
|
+
await disconnectSession(options.shop, session.token, spinner);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
// Handle process termination
|
|
29
|
+
process.on('SIGINT', async () => {
|
|
30
|
+
console.log(chalk.yellow('\n\nShutting down dev server...'));
|
|
31
|
+
await cleanup();
|
|
32
|
+
process.exit(0);
|
|
33
|
+
});
|
|
34
|
+
process.on('SIGTERM', async () => {
|
|
35
|
+
await cleanup();
|
|
36
|
+
process.exit(0);
|
|
37
|
+
});
|
|
38
|
+
try {
|
|
39
|
+
// Resolve theme path
|
|
40
|
+
const absoluteThemePath = path.resolve(themePath || process.cwd());
|
|
41
|
+
// Check theme exists
|
|
42
|
+
const manifestPath = path.join(absoluteThemePath, 'manifest.json');
|
|
43
|
+
if (!await fileExists(manifestPath)) {
|
|
44
|
+
console.error(chalk.red('Error: manifest.json not found. Are you in a theme directory?'));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
// Read theme manifest
|
|
48
|
+
const manifest = JSON.parse(await fs.readFile(manifestPath, 'utf-8'));
|
|
49
|
+
const themeName = manifest.name || 'Unknown Theme';
|
|
50
|
+
console.log(chalk.blue(`\n🚀 Spwig Theme SDK v2.0 - Dev Server\n`));
|
|
51
|
+
console.log(`Theme: ${chalk.bold(themeName)}`);
|
|
52
|
+
console.log(`Shop: ${chalk.cyan(options.shop)}\n`);
|
|
53
|
+
// Connect to shop
|
|
54
|
+
spinner.start('Connecting to shop...');
|
|
55
|
+
session = await connectToShop(options.shop, themeName, absoluteThemePath, options);
|
|
56
|
+
spinner.succeed(`Connected as ${chalk.green(session.message)}`);
|
|
57
|
+
// Initial sync
|
|
58
|
+
spinner.start('Syncing theme files...');
|
|
59
|
+
const files = await collectThemeFiles(absoluteThemePath);
|
|
60
|
+
const syncResult = await syncFiles(options.shop, session.token, files);
|
|
61
|
+
if (syncResult.success) {
|
|
62
|
+
spinner.succeed(`Synced ${chalk.green(syncResult.synced.length)} files`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
spinner.warn(`Synced with ${chalk.yellow(syncResult.errors.length)} errors`);
|
|
66
|
+
syncResult.errors.forEach(err => console.log(chalk.red(` - ${err}`)));
|
|
67
|
+
}
|
|
68
|
+
// Validate theme
|
|
69
|
+
spinner.start('Validating theme...');
|
|
70
|
+
const validation = await validateTheme(options.shop, session.token);
|
|
71
|
+
if (validation.is_valid) {
|
|
72
|
+
spinner.succeed('Theme validation passed');
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
spinner.warn(`Validation: ${chalk.yellow(validation.error_count)} errors, ${chalk.yellow(validation.warning_count)} warnings`);
|
|
76
|
+
validation.errors.forEach((err) => console.log(chalk.red(` ✗ ${err}`)));
|
|
77
|
+
validation.warnings.forEach((warn) => console.log(chalk.yellow(` ⚠ ${warn}`)));
|
|
78
|
+
}
|
|
79
|
+
// Get preview URL
|
|
80
|
+
const previewUrl = `${options.shop}${session.theme_dev_url}`;
|
|
81
|
+
console.log(chalk.green(`\n✓ Dev server ready!\n`));
|
|
82
|
+
console.log(`Preview: ${chalk.cyan(previewUrl)}`);
|
|
83
|
+
console.log(`Watch: ${chalk.dim('Watching for file changes...')}\n`);
|
|
84
|
+
// Open browser if requested
|
|
85
|
+
if (options.open !== false) {
|
|
86
|
+
await open(previewUrl);
|
|
87
|
+
}
|
|
88
|
+
// Start file watcher
|
|
89
|
+
watcher = chokidar.watch(absoluteThemePath, {
|
|
90
|
+
ignored: [
|
|
91
|
+
/(^|[\/\\])\../, // Ignore dotfiles
|
|
92
|
+
'**/node_modules/**',
|
|
93
|
+
'**/dist/**',
|
|
94
|
+
'**/*.log',
|
|
95
|
+
],
|
|
96
|
+
persistent: true,
|
|
97
|
+
ignoreInitial: true,
|
|
98
|
+
awaitWriteFinish: {
|
|
99
|
+
stabilityThreshold: 100,
|
|
100
|
+
pollInterval: 50,
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
// Track pending changes for debouncing
|
|
104
|
+
let pendingChanges = new Map();
|
|
105
|
+
const DEBOUNCE_MS = 200;
|
|
106
|
+
const handleChange = async (filePath) => {
|
|
107
|
+
const relativePath = path.relative(absoluteThemePath, filePath);
|
|
108
|
+
// Clear existing timeout for this file
|
|
109
|
+
const existingTimeout = pendingChanges.get(relativePath);
|
|
110
|
+
if (existingTimeout) {
|
|
111
|
+
clearTimeout(existingTimeout);
|
|
112
|
+
}
|
|
113
|
+
// Set new debounced timeout
|
|
114
|
+
pendingChanges.set(relativePath, setTimeout(async () => {
|
|
115
|
+
pendingChanges.delete(relativePath);
|
|
116
|
+
try {
|
|
117
|
+
const content = await fs.readFile(filePath);
|
|
118
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
119
|
+
const isBinary = BINARY_EXTENSIONS.includes(ext);
|
|
120
|
+
const file = {
|
|
121
|
+
path: relativePath,
|
|
122
|
+
content: isBinary ? content.toString('base64') : content.toString('utf-8'),
|
|
123
|
+
checksum: crypto.createHash('sha256').update(content).digest('hex'),
|
|
124
|
+
encoding: isBinary ? 'base64' : 'utf-8',
|
|
125
|
+
};
|
|
126
|
+
const result = await syncFiles(options.shop, session.token, [file]);
|
|
127
|
+
if (result.success) {
|
|
128
|
+
const icon = result.reload_type === 'css' ? '🎨' : '🔄';
|
|
129
|
+
console.log(`${icon} ${chalk.dim(relativePath)} ${chalk.green('synced')}`);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
console.log(`${chalk.red('✗')} ${chalk.dim(relativePath)} ${chalk.red('failed')}`);
|
|
133
|
+
result.errors.forEach(err => console.log(chalk.red(` ${err}`)));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
console.log(`${chalk.red('✗')} ${chalk.dim(relativePath)} ${chalk.red('read error')}`);
|
|
138
|
+
}
|
|
139
|
+
}, DEBOUNCE_MS));
|
|
140
|
+
};
|
|
141
|
+
watcher
|
|
142
|
+
.on('change', handleChange)
|
|
143
|
+
.on('add', handleChange)
|
|
144
|
+
.on('unlink', (filePath) => {
|
|
145
|
+
const relativePath = path.relative(absoluteThemePath, filePath);
|
|
146
|
+
console.log(`${chalk.yellow('⊖')} ${chalk.dim(relativePath)} ${chalk.yellow('deleted')}`);
|
|
147
|
+
// TODO: Send delete event to shop
|
|
148
|
+
});
|
|
149
|
+
// Keep process running
|
|
150
|
+
console.log(chalk.dim('Press Ctrl+C to stop\n'));
|
|
151
|
+
// Keep alive
|
|
152
|
+
await new Promise(() => { });
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
spinner.fail('Dev server failed');
|
|
156
|
+
await cleanup();
|
|
157
|
+
if (error instanceof Error) {
|
|
158
|
+
console.error(chalk.red(`\nError: ${error.message}`));
|
|
159
|
+
if (options.verbose) {
|
|
160
|
+
console.error(error.stack);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function connectToShop(shopUrl, themeName, themePath, options) {
|
|
167
|
+
// Prompt for credentials
|
|
168
|
+
const readline = await import('readline');
|
|
169
|
+
const rl = readline.createInterface({
|
|
170
|
+
input: process.stdin,
|
|
171
|
+
output: process.stdout,
|
|
172
|
+
});
|
|
173
|
+
const question = (prompt) => {
|
|
174
|
+
return new Promise((resolve) => {
|
|
175
|
+
rl.question(prompt, (answer) => {
|
|
176
|
+
resolve(answer);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
};
|
|
180
|
+
console.log(chalk.dim('\nEnter admin credentials:'));
|
|
181
|
+
const username = await question('Username: ');
|
|
182
|
+
// Use muted input for password (or prompt without echo)
|
|
183
|
+
process.stdout.write('Password: ');
|
|
184
|
+
const password = await new Promise((resolve) => {
|
|
185
|
+
let pwd = '';
|
|
186
|
+
process.stdin.setRawMode(true);
|
|
187
|
+
process.stdin.resume();
|
|
188
|
+
process.stdin.on('data', (char) => {
|
|
189
|
+
const c = char.toString();
|
|
190
|
+
if (c === '\n' || c === '\r') {
|
|
191
|
+
process.stdin.setRawMode(false);
|
|
192
|
+
process.stdout.write('\n');
|
|
193
|
+
resolve(pwd);
|
|
194
|
+
}
|
|
195
|
+
else if (c === '\u007f') {
|
|
196
|
+
// Backspace
|
|
197
|
+
pwd = pwd.slice(0, -1);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
pwd += c;
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
rl.close();
|
|
205
|
+
// Connect to shop
|
|
206
|
+
const credentials = Buffer.from(`${username}:${password}`).toString('base64');
|
|
207
|
+
const response = await fetch(`${shopUrl}/api/theme-dev/connect/`, {
|
|
208
|
+
method: 'POST',
|
|
209
|
+
headers: {
|
|
210
|
+
'Content-Type': 'application/json',
|
|
211
|
+
'Authorization': `Basic ${credentials}`,
|
|
212
|
+
},
|
|
213
|
+
body: JSON.stringify({
|
|
214
|
+
theme_name: themeName,
|
|
215
|
+
theme_path: themePath,
|
|
216
|
+
client_info: {
|
|
217
|
+
cli_version: '2.0.0',
|
|
218
|
+
node_version: process.version,
|
|
219
|
+
os: process.platform,
|
|
220
|
+
},
|
|
221
|
+
}),
|
|
222
|
+
});
|
|
223
|
+
if (!response.ok) {
|
|
224
|
+
const error = await response.json().catch(() => ({ error: response.statusText }));
|
|
225
|
+
throw new Error(error.error || `Connection failed: ${response.status}`);
|
|
226
|
+
}
|
|
227
|
+
return response.json();
|
|
228
|
+
}
|
|
229
|
+
async function disconnectSession(shopUrl, token, spinner) {
|
|
230
|
+
try {
|
|
231
|
+
spinner.start('Disconnecting...');
|
|
232
|
+
await fetch(`${shopUrl}/api/theme-dev/disconnect/`, {
|
|
233
|
+
method: 'POST',
|
|
234
|
+
headers: {
|
|
235
|
+
'X-Dev-Token': token,
|
|
236
|
+
},
|
|
237
|
+
});
|
|
238
|
+
spinner.succeed('Disconnected');
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
spinner.warn('Failed to disconnect cleanly');
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
async function collectThemeFiles(themePath) {
|
|
245
|
+
const files = [];
|
|
246
|
+
const walk = async (dir) => {
|
|
247
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
248
|
+
for (const entry of entries) {
|
|
249
|
+
const fullPath = path.join(dir, entry.name);
|
|
250
|
+
const relativePath = path.relative(themePath, fullPath);
|
|
251
|
+
// Skip ignored files/directories
|
|
252
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist') {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (entry.isDirectory()) {
|
|
256
|
+
await walk(fullPath);
|
|
257
|
+
}
|
|
258
|
+
else if (entry.isFile()) {
|
|
259
|
+
const content = await fs.readFile(fullPath);
|
|
260
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
261
|
+
const isBinary = BINARY_EXTENSIONS.includes(ext);
|
|
262
|
+
files.push({
|
|
263
|
+
path: relativePath,
|
|
264
|
+
content: isBinary ? content.toString('base64') : content.toString('utf-8'),
|
|
265
|
+
checksum: crypto.createHash('sha256').update(content).digest('hex'),
|
|
266
|
+
encoding: isBinary ? 'base64' : 'utf-8',
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
await walk(themePath);
|
|
272
|
+
return files;
|
|
273
|
+
}
|
|
274
|
+
async function syncFiles(shopUrl, token, files) {
|
|
275
|
+
const response = await fetch(`${shopUrl}/api/theme-dev/sync/`, {
|
|
276
|
+
method: 'POST',
|
|
277
|
+
headers: {
|
|
278
|
+
'Content-Type': 'application/json',
|
|
279
|
+
'X-Dev-Token': token,
|
|
280
|
+
},
|
|
281
|
+
body: JSON.stringify({ files }),
|
|
282
|
+
});
|
|
283
|
+
if (!response.ok) {
|
|
284
|
+
const error = await response.json().catch(() => ({ error: response.statusText }));
|
|
285
|
+
throw new Error(error.error || `Sync failed: ${response.status}`);
|
|
286
|
+
}
|
|
287
|
+
return response.json();
|
|
288
|
+
}
|
|
289
|
+
async function validateTheme(shopUrl, token) {
|
|
290
|
+
const response = await fetch(`${shopUrl}/api/theme-dev/validate/`, {
|
|
291
|
+
method: 'GET',
|
|
292
|
+
headers: {
|
|
293
|
+
'X-Dev-Token': token,
|
|
294
|
+
},
|
|
295
|
+
});
|
|
296
|
+
if (!response.ok) {
|
|
297
|
+
throw new Error(`Validation request failed: ${response.status}`);
|
|
298
|
+
}
|
|
299
|
+
return response.json();
|
|
300
|
+
}
|
|
301
|
+
async function fileExists(filePath) {
|
|
302
|
+
try {
|
|
303
|
+
await fs.access(filePath);
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -7,7 +7,11 @@ export interface InitOptions {
|
|
|
7
7
|
template?: 'blank' | 'minimal' | 'full';
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
* Initialize a new theme
|
|
10
|
+
* Initialize a new Spwig theme (v2.0 architecture)
|
|
11
|
+
*
|
|
12
|
+
* Theme v2.0 is token-driven: the primary deliverable is tokens.json
|
|
13
|
+
* which controls all visual aspects of the storefront. Themes no longer
|
|
14
|
+
* bundle components or page schemas.
|
|
11
15
|
*/
|
|
12
16
|
export declare function initCommand(themeName: string | undefined, options: InitOptions): Promise<void>;
|
|
13
17
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CACzC;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyIpG"}
|