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.
- package/README.md +212 -0
- package/dist/commands/add.d.ts +7 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +123 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/create.d.ts +8 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +160 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/setup-mcp.d.ts +7 -0
- package/dist/commands/setup-mcp.d.ts.map +1 -0
- package/dist/commands/setup-mcp.js +179 -0
- package/dist/commands/setup-mcp.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/generators.d.ts +6 -0
- package/dist/lib/generators.d.ts.map +1 -0
- package/dist/lib/generators.js +470 -0
- package/dist/lib/generators.js.map +1 -0
- package/dist/lib/utils.d.ts +17 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +101 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +54 -0
- package/templates/starter/.env.example +21 -0
- package/templates/starter/.graphqlrc.ts +27 -0
- package/templates/starter/README.md +117 -0
- package/templates/starter/app/assets/favicon.svg +28 -0
- package/templates/starter/app/components/AddToCartButton.tsx +102 -0
- package/templates/starter/app/components/Aside.tsx +136 -0
- package/templates/starter/app/components/CartLineItem.tsx +229 -0
- package/templates/starter/app/components/CartMain.tsx +131 -0
- package/templates/starter/app/components/CartSummary.tsx +315 -0
- package/templates/starter/app/components/CollectionFilters.tsx +330 -0
- package/templates/starter/app/components/CollectionGrid.tsx +141 -0
- package/templates/starter/app/components/Footer.tsx +218 -0
- package/templates/starter/app/components/Header.tsx +296 -0
- package/templates/starter/app/components/PageLayout.tsx +174 -0
- package/templates/starter/app/components/PaginatedResourceSection.tsx +41 -0
- package/templates/starter/app/components/ProductCard.tsx +151 -0
- package/templates/starter/app/components/ProductForm.tsx +156 -0
- package/templates/starter/app/components/ProductGallery.tsx +164 -0
- package/templates/starter/app/components/ProductGrid.tsx +64 -0
- package/templates/starter/app/components/ProductImage.tsx +23 -0
- package/templates/starter/app/components/ProductItem.tsx +44 -0
- package/templates/starter/app/components/ProductPrice.tsx +97 -0
- package/templates/starter/app/components/SearchDialog.tsx +599 -0
- package/templates/starter/app/components/SearchForm.tsx +68 -0
- package/templates/starter/app/components/SearchFormPredictive.tsx +76 -0
- package/templates/starter/app/components/SearchResults.tsx +161 -0
- package/templates/starter/app/components/SearchResultsPredictive.tsx +461 -0
- package/templates/starter/app/entry.client.tsx +21 -0
- package/templates/starter/app/entry.server.tsx +53 -0
- package/templates/starter/app/graphql/customer-account/CustomerAddressMutations.ts +64 -0
- package/templates/starter/app/graphql/customer-account/CustomerDetailsQuery.ts +40 -0
- package/templates/starter/app/graphql/customer-account/CustomerOrderQuery.ts +90 -0
- package/templates/starter/app/graphql/customer-account/CustomerOrdersQuery.ts +63 -0
- package/templates/starter/app/graphql/customer-account/CustomerUpdateMutation.ts +25 -0
- package/templates/starter/app/lib/context.ts +60 -0
- package/templates/starter/app/lib/fragments.ts +234 -0
- package/templates/starter/app/lib/orderFilters.ts +90 -0
- package/templates/starter/app/lib/redirect.ts +23 -0
- package/templates/starter/app/lib/search.ts +79 -0
- package/templates/starter/app/lib/session.ts +72 -0
- package/templates/starter/app/lib/variants.ts +46 -0
- package/templates/starter/app/root.tsx +209 -0
- package/templates/starter/app/routes/$.tsx +11 -0
- package/templates/starter/app/routes/[robots.txt].tsx +117 -0
- package/templates/starter/app/routes/[sitemap.xml].tsx +16 -0
- package/templates/starter/app/routes/_index.tsx +167 -0
- package/templates/starter/app/routes/account.$.tsx +9 -0
- package/templates/starter/app/routes/account._index.tsx +5 -0
- package/templates/starter/app/routes/account.addresses.tsx +516 -0
- package/templates/starter/app/routes/account.orders.$id.tsx +222 -0
- package/templates/starter/app/routes/account.orders._index.tsx +222 -0
- package/templates/starter/app/routes/account.profile.tsx +133 -0
- package/templates/starter/app/routes/account.tsx +97 -0
- package/templates/starter/app/routes/account_.authorize.tsx +5 -0
- package/templates/starter/app/routes/account_.login.tsx +7 -0
- package/templates/starter/app/routes/account_.logout.tsx +11 -0
- package/templates/starter/app/routes/api.$version.[graphql.json].tsx +14 -0
- package/templates/starter/app/routes/blogs.$blogHandle.$articleHandle.tsx +129 -0
- package/templates/starter/app/routes/blogs.$blogHandle._index.tsx +175 -0
- package/templates/starter/app/routes/blogs._index.tsx +109 -0
- package/templates/starter/app/routes/cart.$lines.tsx +70 -0
- package/templates/starter/app/routes/cart.tsx +117 -0
- package/templates/starter/app/routes/collections.$handle.tsx +161 -0
- package/templates/starter/app/routes/collections._index.tsx +133 -0
- package/templates/starter/app/routes/collections.all.tsx +122 -0
- package/templates/starter/app/routes/discount.$code.tsx +48 -0
- package/templates/starter/app/routes/pages.$handle.tsx +88 -0
- package/templates/starter/app/routes/policies.$handle.tsx +93 -0
- package/templates/starter/app/routes/policies._index.tsx +69 -0
- package/templates/starter/app/routes/products.$handle.tsx +232 -0
- package/templates/starter/app/routes/search.tsx +426 -0
- package/templates/starter/app/routes/sitemap.$type.$page[.xml].tsx +23 -0
- package/templates/starter/app/routes.ts +9 -0
- package/templates/starter/app/styles/app.css +574 -0
- package/templates/starter/app/styles/reset.css +139 -0
- package/templates/starter/app/styles/tailwind.css +116 -0
- package/templates/starter/customer-accountapi.generated.d.ts +543 -0
- package/templates/starter/env.d.ts +7 -0
- package/templates/starter/eslint.config.js +247 -0
- package/templates/starter/guides/predictiveSearch/predictiveSearch.jpg +0 -0
- package/templates/starter/guides/predictiveSearch/predictiveSearch.md +394 -0
- package/templates/starter/guides/search/search.jpg +0 -0
- package/templates/starter/guides/search/search.md +335 -0
- package/templates/starter/package.json +71 -0
- package/templates/starter/postcss.config.js +6 -0
- package/templates/starter/public/.gitkeep +0 -0
- package/templates/starter/react-router.config.ts +13 -0
- package/templates/starter/server.ts +59 -0
- package/templates/starter/storefrontapi.generated.d.ts +1264 -0
- package/templates/starter/tailwind.config.js +83 -0
- package/templates/starter/tsconfig.json +67 -0
- package/templates/starter/vite.config.ts +32 -0
package/README.md
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# hydrogen-forge
|
|
2
|
+
|
|
3
|
+
CLI for creating and managing Hydrogen Forge projects.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g hydrogen-forge
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or use directly with npx:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx hydrogen-forge create my-store
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Commands
|
|
18
|
+
|
|
19
|
+
### create
|
|
20
|
+
|
|
21
|
+
Create a new Hydrogen Forge project.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
hydrogen-forge create [name]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Options:**
|
|
28
|
+
|
|
29
|
+
| Option | Description |
|
|
30
|
+
| ---------------- | ---------------------------------- |
|
|
31
|
+
| `-t, --template` | Template to use (default: starter) |
|
|
32
|
+
| `--skip-install` | Skip npm install |
|
|
33
|
+
| `--skip-git` | Skip git initialization |
|
|
34
|
+
|
|
35
|
+
**Examples:**
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Interactive mode
|
|
39
|
+
hydrogen-forge create
|
|
40
|
+
|
|
41
|
+
# With project name
|
|
42
|
+
hydrogen-forge create my-store
|
|
43
|
+
|
|
44
|
+
# Skip npm install
|
|
45
|
+
hydrogen-forge create my-store --skip-install
|
|
46
|
+
|
|
47
|
+
# Use different template
|
|
48
|
+
hydrogen-forge create my-store --template starter
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### add
|
|
52
|
+
|
|
53
|
+
Add a component or route to your project.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
hydrogen-forge add <type> <name>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Types:**
|
|
60
|
+
|
|
61
|
+
- `component` - Add a React component
|
|
62
|
+
- `route` - Add a React Router route
|
|
63
|
+
|
|
64
|
+
**Options:**
|
|
65
|
+
|
|
66
|
+
| Option | Description |
|
|
67
|
+
| ------------- | ------------------------- |
|
|
68
|
+
| `-d, --dir` | Output directory |
|
|
69
|
+
| `--no-styles` | Skip Tailwind CSS classes |
|
|
70
|
+
|
|
71
|
+
**Examples:**
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Add a component
|
|
75
|
+
hydrogen-forge add component ProductCard
|
|
76
|
+
hydrogen-forge add component CartDrawer
|
|
77
|
+
hydrogen-forge add component NewsletterForm
|
|
78
|
+
|
|
79
|
+
# Add a route
|
|
80
|
+
hydrogen-forge add route products.$handle
|
|
81
|
+
hydrogen-forge add route collections._index
|
|
82
|
+
hydrogen-forge add route api.webhook
|
|
83
|
+
|
|
84
|
+
# Custom directory
|
|
85
|
+
hydrogen-forge add component ProductCard --dir app/components/products
|
|
86
|
+
|
|
87
|
+
# Without Tailwind styles
|
|
88
|
+
hydrogen-forge add component BasicCard --no-styles
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Component Types (auto-detected from name):**
|
|
92
|
+
|
|
93
|
+
| Name Contains | Template Type |
|
|
94
|
+
| ------------- | ----------------------------------- |
|
|
95
|
+
| `Product` | Product component with Image, Money |
|
|
96
|
+
| `Collection` | Collection card with overlay |
|
|
97
|
+
| `Cart` | Cart line item with CartForm |
|
|
98
|
+
| `Form` | Form with useNavigation |
|
|
99
|
+
| `Layout` | Layout wrapper with slots |
|
|
100
|
+
| (other) | Basic component |
|
|
101
|
+
|
|
102
|
+
**Route Types (auto-detected from name):**
|
|
103
|
+
|
|
104
|
+
| Name Pattern | Template Type |
|
|
105
|
+
| -------------- | --------------- |
|
|
106
|
+
| `api.*` | API endpoint |
|
|
107
|
+
| `account*` | Account page |
|
|
108
|
+
| `*product*` | Product page |
|
|
109
|
+
| `*collection*` | Collection page |
|
|
110
|
+
| (other) | Standard page |
|
|
111
|
+
|
|
112
|
+
### setup-mcp
|
|
113
|
+
|
|
114
|
+
Configure MCP servers for Claude Code.
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
hydrogen-forge setup-mcp
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Options:**
|
|
121
|
+
|
|
122
|
+
| Option | Description |
|
|
123
|
+
| ------------ | ------------------------ |
|
|
124
|
+
| `--shopify` | Set up Shopify MCP only |
|
|
125
|
+
| `--hydrogen` | Set up Hydrogen MCP only |
|
|
126
|
+
|
|
127
|
+
**Examples:**
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# Interactive setup (both MCPs)
|
|
131
|
+
hydrogen-forge setup-mcp
|
|
132
|
+
|
|
133
|
+
# Shopify MCP only
|
|
134
|
+
hydrogen-forge setup-mcp --shopify
|
|
135
|
+
|
|
136
|
+
# Hydrogen MCP only
|
|
137
|
+
hydrogen-forge setup-mcp --hydrogen
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
This command will:
|
|
141
|
+
|
|
142
|
+
1. Detect your Claude Code configuration location
|
|
143
|
+
2. Prompt for Shopify store credentials (if configuring Shopify MCP)
|
|
144
|
+
3. Add MCP server configurations to `claude_desktop_config.json`
|
|
145
|
+
|
|
146
|
+
## Quick Start
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Create a new project
|
|
150
|
+
npx hydrogen-forge create my-store
|
|
151
|
+
cd my-store
|
|
152
|
+
|
|
153
|
+
# Connect to Shopify
|
|
154
|
+
npx shopify hydrogen link
|
|
155
|
+
|
|
156
|
+
# Start development
|
|
157
|
+
npm run dev
|
|
158
|
+
|
|
159
|
+
# Set up MCP servers for Claude Code
|
|
160
|
+
npx hydrogen-forge setup-mcp
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Project Structure
|
|
164
|
+
|
|
165
|
+
Projects created with `hydrogen-forge create` include:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
my-store/
|
|
169
|
+
├── app/
|
|
170
|
+
│ ├── components/ # React components
|
|
171
|
+
│ ├── routes/ # React Router routes
|
|
172
|
+
│ ├── lib/ # Utilities
|
|
173
|
+
│ └── styles/ # CSS files
|
|
174
|
+
├── public/ # Static assets
|
|
175
|
+
├── .env # Environment variables
|
|
176
|
+
├── package.json
|
|
177
|
+
├── tailwind.config.js
|
|
178
|
+
└── vite.config.ts
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## MCP Servers
|
|
182
|
+
|
|
183
|
+
After running `setup-mcp`, you'll have access to:
|
|
184
|
+
|
|
185
|
+
### Shopify MCP
|
|
186
|
+
|
|
187
|
+
- `executeGraphQL` - Run any Shopify Admin API query
|
|
188
|
+
- `createProduct` - Create products with variants
|
|
189
|
+
- `updateProduct` - Update product fields
|
|
190
|
+
- `getProduct` - Get product by ID or handle
|
|
191
|
+
- `listProducts` - List and filter products
|
|
192
|
+
- `deleteProduct` - Delete products
|
|
193
|
+
- `updateInventory` - Set inventory quantity
|
|
194
|
+
- `adjustInventory` - Adjust inventory by delta
|
|
195
|
+
- `getInventoryLevels` - Get stock levels
|
|
196
|
+
- `listLocations` - List inventory locations
|
|
197
|
+
- `getProductInventory` - Get variant inventory
|
|
198
|
+
|
|
199
|
+
### Hydrogen MCP
|
|
200
|
+
|
|
201
|
+
- `scaffoldComponent` - Generate component files
|
|
202
|
+
- `scaffoldRoute` - Generate route files
|
|
203
|
+
- `analyzeProject` - Analyze project structure
|
|
204
|
+
|
|
205
|
+
## Requirements
|
|
206
|
+
|
|
207
|
+
- Node.js 20.0.0 or later
|
|
208
|
+
- npm, pnpm, or yarn
|
|
209
|
+
|
|
210
|
+
## License
|
|
211
|
+
|
|
212
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAOA,UAAU,UAAU;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAOD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CAwBf"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import * as fs from 'fs-extra';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { printSuccess, printError, printInfo } from '../lib/utils.js';
|
|
5
|
+
import { generateComponent } from '../lib/generators.js';
|
|
6
|
+
import { generateRoute } from '../lib/generators.js';
|
|
7
|
+
const COMPONENT_TYPES = ['basic', 'product', 'collection', 'cart', 'form', 'layout'];
|
|
8
|
+
const ROUTE_TYPES = ['page', 'resource', 'collection', 'product', 'account', 'api'];
|
|
9
|
+
export async function addCommand(type, name, options) {
|
|
10
|
+
const normalizedType = type.toLowerCase();
|
|
11
|
+
if (normalizedType !== 'component' && normalizedType !== 'route') {
|
|
12
|
+
printError(`Invalid type "${type}". Use "component" or "route".`);
|
|
13
|
+
console.log();
|
|
14
|
+
console.log('Examples:');
|
|
15
|
+
console.log(` ${chalk.cyan('hydrogen-forge add component ProductCard')}`);
|
|
16
|
+
console.log(` ${chalk.cyan('hydrogen-forge add route products.$handle')}`);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
// Check if we're in a Hydrogen project
|
|
20
|
+
const packageJsonPath = path.join(process.cwd(), 'package.json');
|
|
21
|
+
if (!(await fs.pathExists(packageJsonPath))) {
|
|
22
|
+
printError('Not in a project directory. Run this command from your project root.');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
if (normalizedType === 'component') {
|
|
26
|
+
await addComponent(name, options);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
await addRoute(name, options);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function addComponent(name, options) {
|
|
33
|
+
// Validate component name is PascalCase
|
|
34
|
+
if (!/^[A-Z][a-zA-Z0-9]*$/.test(name)) {
|
|
35
|
+
printError('Component name must be PascalCase (e.g., "ProductCard", "CartDrawer")');
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
// Detect component type from name
|
|
39
|
+
const componentType = detectComponentType(name);
|
|
40
|
+
const withStyles = options.styles !== false;
|
|
41
|
+
const outputDir = options.dir || 'app/components';
|
|
42
|
+
const componentPath = path.join(process.cwd(), outputDir, `${name}.tsx`);
|
|
43
|
+
// Check if file already exists
|
|
44
|
+
if (await fs.pathExists(componentPath)) {
|
|
45
|
+
printError(`Component ${name} already exists at ${componentPath}`);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
// Generate component
|
|
49
|
+
const code = generateComponent(name, componentType, withStyles);
|
|
50
|
+
// Ensure directory exists
|
|
51
|
+
await fs.ensureDir(path.dirname(componentPath));
|
|
52
|
+
// Write file
|
|
53
|
+
await fs.writeFile(componentPath, code);
|
|
54
|
+
printSuccess(`Created ${chalk.cyan(name)} component`);
|
|
55
|
+
printInfo(`Location: ${chalk.dim(componentPath)}`);
|
|
56
|
+
console.log();
|
|
57
|
+
console.log(chalk.dim('Import with:'));
|
|
58
|
+
console.log(` ${chalk.cyan(`import {${name}} from '~/components/${name}';`)}`);
|
|
59
|
+
}
|
|
60
|
+
async function addRoute(name, options) {
|
|
61
|
+
// Validate route name
|
|
62
|
+
if (!/^[a-z$_.[\]]+$/i.test(name)) {
|
|
63
|
+
printError('Invalid route name. Use format like "products.$handle" or "collections._index"');
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
// Detect route type from name
|
|
67
|
+
const routeType = detectRouteType(name);
|
|
68
|
+
const outputDir = options.dir || 'app/routes';
|
|
69
|
+
const routePath = path.join(process.cwd(), outputDir, `${name}.tsx`);
|
|
70
|
+
// Check if file already exists
|
|
71
|
+
if (await fs.pathExists(routePath)) {
|
|
72
|
+
printError(`Route ${name} already exists at ${routePath}`);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
// Generate route
|
|
76
|
+
const code = generateRoute(name, routeType);
|
|
77
|
+
// Ensure directory exists
|
|
78
|
+
await fs.ensureDir(path.dirname(routePath));
|
|
79
|
+
// Write file
|
|
80
|
+
await fs.writeFile(routePath, code);
|
|
81
|
+
// Calculate URL path
|
|
82
|
+
const urlPath = routeNameToUrlPath(name);
|
|
83
|
+
printSuccess(`Created ${chalk.cyan(name)} route`);
|
|
84
|
+
printInfo(`Location: ${chalk.dim(routePath)}`);
|
|
85
|
+
printInfo(`URL: ${chalk.dim(urlPath)}`);
|
|
86
|
+
}
|
|
87
|
+
function detectComponentType(name) {
|
|
88
|
+
const lowerName = name.toLowerCase();
|
|
89
|
+
if (lowerName.includes('product'))
|
|
90
|
+
return 'product';
|
|
91
|
+
if (lowerName.includes('collection'))
|
|
92
|
+
return 'collection';
|
|
93
|
+
if (lowerName.includes('cart'))
|
|
94
|
+
return 'cart';
|
|
95
|
+
if (lowerName.includes('form'))
|
|
96
|
+
return 'form';
|
|
97
|
+
if (lowerName.includes('layout'))
|
|
98
|
+
return 'layout';
|
|
99
|
+
return 'basic';
|
|
100
|
+
}
|
|
101
|
+
function detectRouteType(name) {
|
|
102
|
+
const lowerName = name.toLowerCase();
|
|
103
|
+
if (lowerName.startsWith('api.'))
|
|
104
|
+
return 'api';
|
|
105
|
+
if (lowerName.startsWith('account'))
|
|
106
|
+
return 'account';
|
|
107
|
+
if (lowerName.includes('product'))
|
|
108
|
+
return 'product';
|
|
109
|
+
if (lowerName.includes('collection'))
|
|
110
|
+
return 'collection';
|
|
111
|
+
if (lowerName.includes('_index'))
|
|
112
|
+
return 'page';
|
|
113
|
+
return 'page';
|
|
114
|
+
}
|
|
115
|
+
function routeNameToUrlPath(routeName) {
|
|
116
|
+
return ('/' +
|
|
117
|
+
routeName
|
|
118
|
+
.replace(/\._index$/, '')
|
|
119
|
+
.replace(/\./g, '/')
|
|
120
|
+
.replace(/\$/g, ':')
|
|
121
|
+
.replace(/\[([^\]]+)\]/g, '$1'));
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAeA,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAoIf"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import * as fs from 'fs-extra';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
import { withSpinner, runCommand, validateProjectName, isDirectoryEmpty, printSuccess, printError, printInfo, printStep, } from '../lib/utils.js';
|
|
6
|
+
export async function createCommand(name, options) {
|
|
7
|
+
console.log();
|
|
8
|
+
console.log(chalk.bold('🔨 Hydrogen Forge'));
|
|
9
|
+
console.log(chalk.dim('Create a new Hydrogen project'));
|
|
10
|
+
console.log();
|
|
11
|
+
// Get project name if not provided
|
|
12
|
+
let projectName = name;
|
|
13
|
+
if (!projectName) {
|
|
14
|
+
const answers = await inquirer.prompt([
|
|
15
|
+
{
|
|
16
|
+
type: 'input',
|
|
17
|
+
name: 'projectName',
|
|
18
|
+
message: 'What is your project named?',
|
|
19
|
+
default: 'my-hydrogen-store',
|
|
20
|
+
validate: (input) => {
|
|
21
|
+
if (!validateProjectName(input)) {
|
|
22
|
+
return 'Project name must be a valid npm package name (lowercase, no spaces)';
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
]);
|
|
28
|
+
projectName = answers.projectName;
|
|
29
|
+
}
|
|
30
|
+
// Validate project name
|
|
31
|
+
if (!projectName || !validateProjectName(projectName)) {
|
|
32
|
+
printError('Project name must be a valid npm package name (lowercase, no spaces)');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
const targetDir = path.resolve(process.cwd(), projectName);
|
|
36
|
+
// Check if directory exists and is not empty
|
|
37
|
+
if (await fs.pathExists(targetDir)) {
|
|
38
|
+
if (!(await isDirectoryEmpty(targetDir))) {
|
|
39
|
+
const { overwrite } = await inquirer.prompt([
|
|
40
|
+
{
|
|
41
|
+
type: 'confirm',
|
|
42
|
+
name: 'overwrite',
|
|
43
|
+
message: `Directory ${projectName} is not empty. Continue anyway?`,
|
|
44
|
+
default: false,
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
if (!overwrite) {
|
|
48
|
+
printInfo('Cancelled');
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const totalSteps = options.skipInstall ? (options.skipGit ? 2 : 3) : (options.skipGit ? 3 : 4);
|
|
54
|
+
let currentStep = 1;
|
|
55
|
+
// Step 1: Create project directory
|
|
56
|
+
printStep(currentStep++, totalSteps, 'Creating project directory...');
|
|
57
|
+
await withSpinner({ text: 'Setting up project structure' }, async () => {
|
|
58
|
+
await fs.ensureDir(targetDir);
|
|
59
|
+
// Copy template files
|
|
60
|
+
const templateDir = await getTemplateDir(options.template);
|
|
61
|
+
await copyTemplateFiles(templateDir, targetDir, projectName);
|
|
62
|
+
});
|
|
63
|
+
// Step 2: Update package.json
|
|
64
|
+
printStep(currentStep++, totalSteps, 'Configuring project...');
|
|
65
|
+
await withSpinner({ text: 'Updating package.json' }, async () => {
|
|
66
|
+
const packageJsonPath = path.join(targetDir, 'package.json');
|
|
67
|
+
if (await fs.pathExists(packageJsonPath)) {
|
|
68
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
69
|
+
packageJson.name = projectName;
|
|
70
|
+
await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
// Step 3: Initialize git (optional)
|
|
74
|
+
if (!options.skipGit) {
|
|
75
|
+
printStep(currentStep++, totalSteps, 'Initializing git repository...');
|
|
76
|
+
await withSpinner({ text: 'Running git init' }, async () => {
|
|
77
|
+
await runCommand('git', ['init'], targetDir);
|
|
78
|
+
await runCommand('git', ['add', '.'], targetDir);
|
|
79
|
+
await runCommand('git', ['commit', '-m', 'Initial commit from Hydrogen Forge'], targetDir);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// Step 4: Install dependencies (optional)
|
|
83
|
+
if (!options.skipInstall) {
|
|
84
|
+
printStep(currentStep++, totalSteps, 'Installing dependencies...');
|
|
85
|
+
await withSpinner({ text: 'Running npm install (this may take a moment)' }, async () => {
|
|
86
|
+
await runCommand('npm', ['install'], targetDir);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// Success message
|
|
90
|
+
console.log();
|
|
91
|
+
printSuccess(`Project ${chalk.cyan(projectName)} created successfully!`);
|
|
92
|
+
console.log();
|
|
93
|
+
console.log(chalk.bold('Next steps:'));
|
|
94
|
+
console.log();
|
|
95
|
+
console.log(` ${chalk.cyan('cd')} ${projectName}`);
|
|
96
|
+
if (options.skipInstall) {
|
|
97
|
+
console.log(` ${chalk.cyan('npm install')}`);
|
|
98
|
+
}
|
|
99
|
+
console.log(` ${chalk.cyan('npm run dev')}`);
|
|
100
|
+
console.log();
|
|
101
|
+
console.log(chalk.dim('To connect to Shopify, run:'));
|
|
102
|
+
console.log(` ${chalk.cyan('npx shopify hydrogen link')}`);
|
|
103
|
+
console.log();
|
|
104
|
+
console.log(chalk.dim('To set up MCP servers for Claude Code:'));
|
|
105
|
+
console.log(` ${chalk.cyan('hydrogen-forge setup-mcp')}`);
|
|
106
|
+
console.log();
|
|
107
|
+
}
|
|
108
|
+
async function getTemplateDir(template) {
|
|
109
|
+
// First, check if running from the monorepo (development)
|
|
110
|
+
const monorepoTemplate = path.resolve(import.meta.dirname, '../../../../templates', template);
|
|
111
|
+
if (await fs.pathExists(monorepoTemplate)) {
|
|
112
|
+
return monorepoTemplate;
|
|
113
|
+
}
|
|
114
|
+
// Check in the package's templates directory (published)
|
|
115
|
+
const packageTemplate = path.resolve(import.meta.dirname, '../templates', template);
|
|
116
|
+
if (await fs.pathExists(packageTemplate)) {
|
|
117
|
+
return packageTemplate;
|
|
118
|
+
}
|
|
119
|
+
throw new Error(`Template "${template}" not found`);
|
|
120
|
+
}
|
|
121
|
+
async function copyTemplateFiles(templateDir, targetDir, _projectName) {
|
|
122
|
+
// Copy all files from template
|
|
123
|
+
await fs.copy(templateDir, targetDir, {
|
|
124
|
+
filter: (src) => {
|
|
125
|
+
const basename = path.basename(src);
|
|
126
|
+
// Skip node_modules and build artifacts
|
|
127
|
+
if (basename === 'node_modules' || basename === 'dist' || basename === '.cache') {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
return true;
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
// Create .env file if it doesn't exist
|
|
134
|
+
const envPath = path.join(targetDir, '.env');
|
|
135
|
+
if (!(await fs.pathExists(envPath))) {
|
|
136
|
+
const envContent = `# Shopify Storefront API
|
|
137
|
+
SESSION_SECRET="your-session-secret"
|
|
138
|
+
PUBLIC_STOREFRONT_API_TOKEN=""
|
|
139
|
+
PUBLIC_STORE_DOMAIN=""
|
|
140
|
+
|
|
141
|
+
# Optional: Customer Account API
|
|
142
|
+
PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID=""
|
|
143
|
+
PUBLIC_CUSTOMER_ACCOUNT_API_URL=""
|
|
144
|
+
`;
|
|
145
|
+
await fs.writeFile(envPath, envContent);
|
|
146
|
+
}
|
|
147
|
+
// Create .gitignore if it doesn't exist
|
|
148
|
+
const gitignorePath = path.join(targetDir, '.gitignore');
|
|
149
|
+
if (!(await fs.pathExists(gitignorePath))) {
|
|
150
|
+
const gitignoreContent = `node_modules
|
|
151
|
+
.cache
|
|
152
|
+
dist
|
|
153
|
+
.env
|
|
154
|
+
*.local
|
|
155
|
+
.DS_Store
|
|
156
|
+
`;
|
|
157
|
+
await fs.writeFile(gitignorePath, gitignoreContent);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-mcp.d.ts","sourceRoot":"","sources":["../../src/commands/setup-mcp.ts"],"names":[],"mappings":"AAOA,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAYD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2H7E"}
|