@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.
Files changed (71) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/README.md +0 -0
  3. package/dist/cli.d.ts +0 -0
  4. package/dist/cli.d.ts.map +0 -0
  5. package/dist/cli.js +14 -22
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/component.d.ts +0 -0
  8. package/dist/commands/component.d.ts.map +0 -0
  9. package/dist/commands/component.js +0 -0
  10. package/dist/commands/component.js.map +0 -0
  11. package/dist/commands/dev.d.ts +14 -0
  12. package/dist/commands/dev.d.ts.map +1 -0
  13. package/dist/commands/dev.js +310 -0
  14. package/dist/commands/dev.js.map +1 -0
  15. package/dist/commands/init.d.ts +5 -1
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +80 -115
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/package.d.ts +0 -0
  20. package/dist/commands/package.d.ts.map +1 -1
  21. package/dist/commands/package.js +0 -2
  22. package/dist/commands/package.js.map +1 -1
  23. package/dist/commands/validate.d.ts +1 -2
  24. package/dist/commands/validate.d.ts.map +1 -1
  25. package/dist/commands/validate.js +10 -112
  26. package/dist/commands/validate.js.map +1 -1
  27. package/dist/index.d.ts +0 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +0 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/schemas/component_manifest_schema.json +0 -0
  32. package/dist/schemas/theme_manifest_schema.json +5 -63
  33. package/dist/templates/assets/logo.svg.template +6 -0
  34. package/dist/templates/assets/theme.js.template +150 -0
  35. package/dist/templates/components/blank.template.html.template +0 -0
  36. package/dist/templates/components/footer.manifest.json.template +0 -0
  37. package/dist/templates/components/footer.schema.json.template +22 -0
  38. package/dist/templates/components/footer.styles.css.template +80 -0
  39. package/dist/templates/components/footer.template.html.template +0 -0
  40. package/dist/templates/components/header.manifest.json.template +0 -0
  41. package/dist/templates/components/header.schema.json.template +0 -0
  42. package/dist/templates/components/header.styles.css.template +104 -0
  43. package/dist/templates/components/header.template.html.template +0 -0
  44. package/dist/templates/components/schema.json.template +0 -0
  45. package/dist/templates/components/section.manifest.json.template +2 -2
  46. package/dist/templates/components/section.schema.json.template +40 -0
  47. package/dist/templates/components/section.styles.css.template +60 -0
  48. package/dist/templates/components/section.template.html.template +0 -0
  49. package/dist/templates/components/utility.manifest.json.template +0 -0
  50. package/dist/templates/pages/cart.html.template +104 -0
  51. package/dist/templates/pages/collection.html.template +86 -0
  52. package/dist/templates/pages/home.html.template +51 -0
  53. package/dist/templates/pages/layout.html.template +48 -0
  54. package/dist/templates/pages/product.html.template +90 -0
  55. package/dist/templates/presets/footer.json.template +16 -0
  56. package/dist/templates/presets/header.json.template +16 -0
  57. package/dist/templates/theme/README.md.template +51 -21
  58. package/dist/templates/theme/design_tokens.json.template +0 -0
  59. package/dist/templates/theme/manifest.json.template +6 -28
  60. package/dist/templates/theme/tokens.json.template +1254 -0
  61. package/dist/utils/file-system.d.ts +0 -0
  62. package/dist/utils/file-system.d.ts.map +0 -0
  63. package/dist/utils/file-system.js +0 -0
  64. package/dist/utils/file-system.js.map +0 -0
  65. package/dist/utils/validation.d.ts +0 -0
  66. package/dist/utils/validation.d.ts.map +0 -0
  67. package/dist/utils/validation.js +0 -0
  68. package/dist/utils/validation.js.map +0 -0
  69. package/package.json +6 -3
  70. package/schemas/theme_manifest_schema.json +5 -63
  71. 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 { componentCommand } from './commands/component.js';
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('1.0.0');
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('--no-git', 'Skip git initialization')
22
- .option('-t, --template <name>', 'Use template (blank, minimal, full)', 'full')
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 or component package')
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 component
64
+ // spwig dev
66
65
  program
67
- .command('component')
68
- .description('Component management')
69
- .action(() => {
70
- program.help();
71
- });
72
- program
73
- .command('component add [type] [name]')
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 componentCommand(type, name, options);
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,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,iEAAiE,CAAC;KAC9E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,aAAa;AACb,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,qBAAqB,EAAE,aAAa,CAAC;KAC5C,MAAM,CAAC,qBAAqB,EAAE,cAAc,CAAC;KAC7C,MAAM,CAAC,0BAA0B,EAAE,mBAAmB,CAAC;KACvD,MAAM,CAAC,sBAAsB,EAAE,cAAc,EAAE,KAAK,CAAC;KACrD,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;KAC7C,MAAM,CAAC,uBAAuB,EAAE,qCAAqC,EAAE,MAAM,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,EAAE,SAAS,CAAC;KACzE,MAAM,CAAC,eAAe,EAAE,iCAAiC,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,CAAC;KACzD,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;KACtD,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;KAC3D,MAAM,CAAC,uBAAuB,EAAE,kCAAkC,EAAE,QAAQ,CAAC;KAC7E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,6BAA6B,CAAC;KACtC,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,2BAA2B,EAAE,cAAc,CAAC;KACnD,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;KACvD,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC;KACzC,MAAM,CAAC,WAAW,EAAE,kBAAkB,CAAC;KACvC,MAAM,CAAC,uBAAuB,EAAE,uCAAuC,EAAE,OAAO,CAAC;KACjF,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IACpC,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,uBAAuB;AACvB,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC"}
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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"}
@@ -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":"AAkBA,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;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4GpG"}
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"}