hydrogen-forge 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +212 -0
  2. package/dist/commands/add.d.ts +7 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +123 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/create.d.ts +8 -0
  7. package/dist/commands/create.d.ts.map +1 -0
  8. package/dist/commands/create.js +160 -0
  9. package/dist/commands/create.js.map +1 -0
  10. package/dist/commands/setup-mcp.d.ts +7 -0
  11. package/dist/commands/setup-mcp.d.ts.map +1 -0
  12. package/dist/commands/setup-mcp.js +179 -0
  13. package/dist/commands/setup-mcp.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +50 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/lib/generators.d.ts +6 -0
  19. package/dist/lib/generators.d.ts.map +1 -0
  20. package/dist/lib/generators.js +470 -0
  21. package/dist/lib/generators.js.map +1 -0
  22. package/dist/lib/utils.d.ts +17 -0
  23. package/dist/lib/utils.d.ts.map +1 -0
  24. package/dist/lib/utils.js +101 -0
  25. package/dist/lib/utils.js.map +1 -0
  26. package/package.json +54 -0
  27. package/templates/starter/.env.example +21 -0
  28. package/templates/starter/.graphqlrc.ts +27 -0
  29. package/templates/starter/README.md +117 -0
  30. package/templates/starter/app/assets/favicon.svg +28 -0
  31. package/templates/starter/app/components/AddToCartButton.tsx +102 -0
  32. package/templates/starter/app/components/Aside.tsx +136 -0
  33. package/templates/starter/app/components/CartLineItem.tsx +229 -0
  34. package/templates/starter/app/components/CartMain.tsx +131 -0
  35. package/templates/starter/app/components/CartSummary.tsx +315 -0
  36. package/templates/starter/app/components/CollectionFilters.tsx +330 -0
  37. package/templates/starter/app/components/CollectionGrid.tsx +141 -0
  38. package/templates/starter/app/components/Footer.tsx +218 -0
  39. package/templates/starter/app/components/Header.tsx +296 -0
  40. package/templates/starter/app/components/PageLayout.tsx +174 -0
  41. package/templates/starter/app/components/PaginatedResourceSection.tsx +41 -0
  42. package/templates/starter/app/components/ProductCard.tsx +151 -0
  43. package/templates/starter/app/components/ProductForm.tsx +156 -0
  44. package/templates/starter/app/components/ProductGallery.tsx +164 -0
  45. package/templates/starter/app/components/ProductGrid.tsx +64 -0
  46. package/templates/starter/app/components/ProductImage.tsx +23 -0
  47. package/templates/starter/app/components/ProductItem.tsx +44 -0
  48. package/templates/starter/app/components/ProductPrice.tsx +97 -0
  49. package/templates/starter/app/components/SearchDialog.tsx +599 -0
  50. package/templates/starter/app/components/SearchForm.tsx +68 -0
  51. package/templates/starter/app/components/SearchFormPredictive.tsx +76 -0
  52. package/templates/starter/app/components/SearchResults.tsx +161 -0
  53. package/templates/starter/app/components/SearchResultsPredictive.tsx +461 -0
  54. package/templates/starter/app/entry.client.tsx +21 -0
  55. package/templates/starter/app/entry.server.tsx +53 -0
  56. package/templates/starter/app/graphql/customer-account/CustomerAddressMutations.ts +64 -0
  57. package/templates/starter/app/graphql/customer-account/CustomerDetailsQuery.ts +40 -0
  58. package/templates/starter/app/graphql/customer-account/CustomerOrderQuery.ts +90 -0
  59. package/templates/starter/app/graphql/customer-account/CustomerOrdersQuery.ts +63 -0
  60. package/templates/starter/app/graphql/customer-account/CustomerUpdateMutation.ts +25 -0
  61. package/templates/starter/app/lib/context.ts +60 -0
  62. package/templates/starter/app/lib/fragments.ts +234 -0
  63. package/templates/starter/app/lib/orderFilters.ts +90 -0
  64. package/templates/starter/app/lib/redirect.ts +23 -0
  65. package/templates/starter/app/lib/search.ts +79 -0
  66. package/templates/starter/app/lib/session.ts +72 -0
  67. package/templates/starter/app/lib/variants.ts +46 -0
  68. package/templates/starter/app/root.tsx +209 -0
  69. package/templates/starter/app/routes/$.tsx +11 -0
  70. package/templates/starter/app/routes/[robots.txt].tsx +117 -0
  71. package/templates/starter/app/routes/[sitemap.xml].tsx +16 -0
  72. package/templates/starter/app/routes/_index.tsx +167 -0
  73. package/templates/starter/app/routes/account.$.tsx +9 -0
  74. package/templates/starter/app/routes/account._index.tsx +5 -0
  75. package/templates/starter/app/routes/account.addresses.tsx +516 -0
  76. package/templates/starter/app/routes/account.orders.$id.tsx +222 -0
  77. package/templates/starter/app/routes/account.orders._index.tsx +222 -0
  78. package/templates/starter/app/routes/account.profile.tsx +133 -0
  79. package/templates/starter/app/routes/account.tsx +97 -0
  80. package/templates/starter/app/routes/account_.authorize.tsx +5 -0
  81. package/templates/starter/app/routes/account_.login.tsx +7 -0
  82. package/templates/starter/app/routes/account_.logout.tsx +11 -0
  83. package/templates/starter/app/routes/api.$version.[graphql.json].tsx +14 -0
  84. package/templates/starter/app/routes/blogs.$blogHandle.$articleHandle.tsx +129 -0
  85. package/templates/starter/app/routes/blogs.$blogHandle._index.tsx +175 -0
  86. package/templates/starter/app/routes/blogs._index.tsx +109 -0
  87. package/templates/starter/app/routes/cart.$lines.tsx +70 -0
  88. package/templates/starter/app/routes/cart.tsx +117 -0
  89. package/templates/starter/app/routes/collections.$handle.tsx +161 -0
  90. package/templates/starter/app/routes/collections._index.tsx +133 -0
  91. package/templates/starter/app/routes/collections.all.tsx +122 -0
  92. package/templates/starter/app/routes/discount.$code.tsx +48 -0
  93. package/templates/starter/app/routes/pages.$handle.tsx +88 -0
  94. package/templates/starter/app/routes/policies.$handle.tsx +93 -0
  95. package/templates/starter/app/routes/policies._index.tsx +69 -0
  96. package/templates/starter/app/routes/products.$handle.tsx +232 -0
  97. package/templates/starter/app/routes/search.tsx +426 -0
  98. package/templates/starter/app/routes/sitemap.$type.$page[.xml].tsx +23 -0
  99. package/templates/starter/app/routes.ts +9 -0
  100. package/templates/starter/app/styles/app.css +574 -0
  101. package/templates/starter/app/styles/reset.css +139 -0
  102. package/templates/starter/app/styles/tailwind.css +116 -0
  103. package/templates/starter/customer-accountapi.generated.d.ts +543 -0
  104. package/templates/starter/env.d.ts +7 -0
  105. package/templates/starter/eslint.config.js +247 -0
  106. package/templates/starter/guides/predictiveSearch/predictiveSearch.jpg +0 -0
  107. package/templates/starter/guides/predictiveSearch/predictiveSearch.md +394 -0
  108. package/templates/starter/guides/search/search.jpg +0 -0
  109. package/templates/starter/guides/search/search.md +335 -0
  110. package/templates/starter/package.json +71 -0
  111. package/templates/starter/postcss.config.js +6 -0
  112. package/templates/starter/public/.gitkeep +0 -0
  113. package/templates/starter/react-router.config.ts +13 -0
  114. package/templates/starter/server.ts +59 -0
  115. package/templates/starter/storefrontapi.generated.d.ts +1264 -0
  116. package/templates/starter/tailwind.config.js +83 -0
  117. package/templates/starter/tsconfig.json +67 -0
  118. package/templates/starter/vite.config.ts +32 -0
@@ -0,0 +1,179 @@
1
+ import * as fs from 'fs-extra';
2
+ import * as path from 'node:path';
3
+ import * as os from 'node:os';
4
+ import chalk from 'chalk';
5
+ import inquirer from 'inquirer';
6
+ import { printSuccess, printError, printInfo, printWarning } from '../lib/utils.js';
7
+ export async function setupMcpCommand(options) {
8
+ console.log();
9
+ console.log(chalk.bold('🔧 MCP Server Setup'));
10
+ console.log(chalk.dim('Configure MCP servers for Claude Code'));
11
+ console.log();
12
+ // Determine which MCPs to set up
13
+ let setupShopify = options.shopify || (!options.shopify && !options.hydrogen);
14
+ let setupHydrogen = options.hydrogen || (!options.shopify && !options.hydrogen);
15
+ // If no options specified, ask the user
16
+ if (!options.shopify && !options.hydrogen) {
17
+ const answers = await inquirer.prompt([
18
+ {
19
+ type: 'checkbox',
20
+ name: 'mcps',
21
+ message: 'Which MCP servers would you like to configure?',
22
+ choices: [
23
+ { name: 'Shopify MCP (GraphQL, products, inventory)', value: 'shopify', checked: true },
24
+ { name: 'Hydrogen MCP (scaffolding, analysis)', value: 'hydrogen', checked: true },
25
+ ],
26
+ },
27
+ ]);
28
+ setupShopify = answers.mcps.includes('shopify');
29
+ setupHydrogen = answers.mcps.includes('hydrogen');
30
+ }
31
+ if (!setupShopify && !setupHydrogen) {
32
+ printInfo('No MCP servers selected');
33
+ return;
34
+ }
35
+ // Find Claude Code config location
36
+ const configPath = getClaudeConfigPath();
37
+ if (!configPath) {
38
+ printError('Could not find Claude Code configuration directory');
39
+ printInfo('Make sure Claude Code is installed');
40
+ process.exit(1);
41
+ }
42
+ printInfo(`Config location: ${chalk.dim(configPath)}`);
43
+ // Load existing config or create new
44
+ let config = { mcpServers: {} };
45
+ if (await fs.pathExists(configPath)) {
46
+ try {
47
+ config = await fs.readJson(configPath);
48
+ if (!config.mcpServers) {
49
+ config.mcpServers = {};
50
+ }
51
+ }
52
+ catch {
53
+ printWarning('Could not parse existing config, creating new one');
54
+ }
55
+ }
56
+ // Add Shopify MCP
57
+ if (setupShopify) {
58
+ // Check if already configured
59
+ if (config.mcpServers.shopify) {
60
+ const { overwrite } = await inquirer.prompt([
61
+ {
62
+ type: 'confirm',
63
+ name: 'overwrite',
64
+ message: 'Shopify MCP is already configured. Overwrite?',
65
+ default: false,
66
+ },
67
+ ]);
68
+ if (!overwrite) {
69
+ printInfo('Skipping Shopify MCP');
70
+ }
71
+ else {
72
+ await configureShopifyMcp(config);
73
+ }
74
+ }
75
+ else {
76
+ await configureShopifyMcp(config);
77
+ }
78
+ }
79
+ // Add Hydrogen MCP
80
+ if (setupHydrogen) {
81
+ if (config.mcpServers.hydrogen) {
82
+ const { overwrite } = await inquirer.prompt([
83
+ {
84
+ type: 'confirm',
85
+ name: 'overwrite',
86
+ message: 'Hydrogen MCP is already configured. Overwrite?',
87
+ default: false,
88
+ },
89
+ ]);
90
+ if (!overwrite) {
91
+ printInfo('Skipping Hydrogen MCP');
92
+ }
93
+ else {
94
+ configureHydrogenMcp(config);
95
+ }
96
+ }
97
+ else {
98
+ configureHydrogenMcp(config);
99
+ }
100
+ }
101
+ // Write config
102
+ await fs.ensureDir(path.dirname(configPath));
103
+ await fs.writeJson(configPath, config, { spaces: 2 });
104
+ console.log();
105
+ printSuccess('MCP servers configured successfully!');
106
+ console.log();
107
+ // Print summary
108
+ console.log(chalk.bold('Configured servers:'));
109
+ if (config.mcpServers.shopify) {
110
+ console.log(` ${chalk.cyan('shopify')} - Shopify Admin API operations`);
111
+ }
112
+ if (config.mcpServers.hydrogen) {
113
+ console.log(` ${chalk.cyan('hydrogen')} - Component and route scaffolding`);
114
+ }
115
+ console.log();
116
+ console.log(chalk.dim('Restart Claude Code to apply changes'));
117
+ console.log();
118
+ }
119
+ function getClaudeConfigPath() {
120
+ const platform = os.platform();
121
+ const home = os.homedir();
122
+ if (platform === 'darwin') {
123
+ // macOS
124
+ return path.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
125
+ }
126
+ else if (platform === 'win32') {
127
+ // Windows
128
+ return path.join(home, 'AppData', 'Roaming', 'Claude', 'claude_desktop_config.json');
129
+ }
130
+ else if (platform === 'linux') {
131
+ // Linux
132
+ return path.join(home, '.config', 'Claude', 'claude_desktop_config.json');
133
+ }
134
+ return null;
135
+ }
136
+ async function configureShopifyMcp(config) {
137
+ const answers = await inquirer.prompt([
138
+ {
139
+ type: 'input',
140
+ name: 'storeDomain',
141
+ message: 'Shopify store domain (e.g., my-store.myshopify.com):',
142
+ validate: (input) => {
143
+ if (!input.includes('.myshopify.com') && !input.includes('.')) {
144
+ return 'Please enter a valid Shopify domain';
145
+ }
146
+ return true;
147
+ },
148
+ },
149
+ {
150
+ type: 'password',
151
+ name: 'accessToken',
152
+ message: 'Admin API access token:',
153
+ mask: '*',
154
+ validate: (input) => {
155
+ if (!input || input.length < 10) {
156
+ return 'Please enter a valid access token';
157
+ }
158
+ return true;
159
+ },
160
+ },
161
+ ]);
162
+ config.mcpServers.shopify = {
163
+ command: 'npx',
164
+ args: ['@hydrogen-forge/mcp-shopify'],
165
+ env: {
166
+ SHOPIFY_STORE_DOMAIN: answers.storeDomain,
167
+ SHOPIFY_ACCESS_TOKEN: answers.accessToken,
168
+ },
169
+ };
170
+ printSuccess('Shopify MCP configured');
171
+ }
172
+ function configureHydrogenMcp(config) {
173
+ config.mcpServers.hydrogen = {
174
+ command: 'npx',
175
+ args: ['@hydrogen-forge/mcp-hydrogen'],
176
+ };
177
+ printSuccess('Hydrogen MCP configured');
178
+ }
179
+ //# sourceMappingURL=setup-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-mcp.js","sourceRoot":"","sources":["../../src/commands/setup-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { createCommand } from './commands/create.js';
5
+ import { addCommand } from './commands/add.js';
6
+ import { setupMcpCommand } from './commands/setup-mcp.js';
7
+ const program = new Command();
8
+ program
9
+ .name('hydrogen-forge')
10
+ .description('CLI for creating and managing Hydrogen Forge projects')
11
+ .version('0.1.0');
12
+ // Create command - npx hydrogen-forge create [name]
13
+ program
14
+ .command('create [name]')
15
+ .description('Create a new Hydrogen Forge project')
16
+ .option('-t, --template <template>', 'Template to use', 'starter')
17
+ .option('--skip-install', 'Skip npm install')
18
+ .option('--skip-git', 'Skip git initialization')
19
+ .action(createCommand);
20
+ // Add command - hydrogen-forge add <type> <name>
21
+ program
22
+ .command('add <type> <name>')
23
+ .description('Add a component or route to your project')
24
+ .option('-d, --dir <directory>', 'Output directory')
25
+ .option('--no-styles', 'Skip Tailwind CSS classes')
26
+ .action(addCommand);
27
+ // Setup MCP command - hydrogen-forge setup-mcp
28
+ program
29
+ .command('setup-mcp')
30
+ .description('Configure MCP servers for Claude Code')
31
+ .option('--shopify', 'Set up Shopify MCP only')
32
+ .option('--hydrogen', 'Set up Hydrogen MCP only')
33
+ .action(setupMcpCommand);
34
+ // Help styling
35
+ program.configureHelp({
36
+ sortSubcommands: true,
37
+ subcommandTerm: (cmd) => chalk.cyan(cmd.name()),
38
+ });
39
+ // Error handling
40
+ program.exitOverride();
41
+ try {
42
+ await program.parseAsync(process.argv);
43
+ }
44
+ catch (err) {
45
+ if (err instanceof Error && err.message !== 'commander.executeSubCommandAsync') {
46
+ console.error(chalk.red('Error:'), err.message);
47
+ process.exit(1);
48
+ }
49
+ }
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAExD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,oDAAoD;AACpD,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,2BAA2B,EAAE,iBAAiB,EAAE,SAAS,CAAC;KACjE,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;KAC5C,MAAM,CAAC,YAAY,EAAE,yBAAyB,CAAC;KAC/C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,iDAAiD;AACjD,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,CAAC;KACnD,MAAM,CAAC,aAAa,EAAE,2BAA2B,CAAC;KAClD,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtB,+CAA+C;AAC/C,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC;KAC9C,MAAM,CAAC,YAAY,EAAE,0BAA0B,CAAC;KAChD,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,eAAe;AACf,OAAO,CAAC,aAAa,CAAC;IACpB,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;CAChD,CAAC,CAAC;AAEH,iBAAiB;AACjB,OAAO,CAAC,YAAY,EAAE,CAAC;AAEvB,IAAI,CAAC;IACH,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,kCAAkC,EAAE,CAAC;QAC/E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ type ComponentType = 'basic' | 'product' | 'collection' | 'cart' | 'form' | 'layout';
2
+ type RouteType = 'page' | 'resource' | 'collection' | 'product' | 'account' | 'api';
3
+ export declare function generateComponent(name: string, type: ComponentType, withStyles: boolean): string;
4
+ export declare function generateRoute(name: string, type: RouteType): string;
5
+ export {};
6
+ //# sourceMappingURL=generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/lib/generators.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AACrF,KAAK,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC;AAEpF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,OAAO,GAClB,MAAM,CAeR;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAenE"}