@l4yercak3/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +18 -0
- package/.cursor/rules.md +203 -0
- package/.eslintrc.js +31 -0
- package/README.md +227 -0
- package/bin/cli.js +61 -0
- package/docs/ADDING_NEW_PROJECT_TYPE.md +156 -0
- package/docs/ARCHITECTURE_RELATIONSHIPS.md +411 -0
- package/docs/CLI_AUTHENTICATION.md +214 -0
- package/docs/DETECTOR_ARCHITECTURE.md +326 -0
- package/docs/DEVELOPMENT.md +194 -0
- package/docs/IMPLEMENTATION_PHASES.md +468 -0
- package/docs/OAUTH_CLARIFICATION.md +258 -0
- package/docs/OAUTH_SETUP_GUIDE_TEMPLATE.md +211 -0
- package/docs/PHASE_0_PROGRESS.md +120 -0
- package/docs/PHASE_1_COMPLETE.md +366 -0
- package/docs/PHASE_SUMMARY.md +149 -0
- package/docs/PLAN.md +511 -0
- package/docs/README.md +56 -0
- package/docs/STRIPE_INTEGRATION.md +447 -0
- package/docs/SUMMARY.md +230 -0
- package/docs/UPDATED_PLAN.md +447 -0
- package/package.json +53 -0
- package/src/api/backend-client.js +148 -0
- package/src/commands/login.js +146 -0
- package/src/commands/logout.js +24 -0
- package/src/commands/spread.js +364 -0
- package/src/commands/status.js +62 -0
- package/src/config/config-manager.js +205 -0
- package/src/detectors/api-client-detector.js +85 -0
- package/src/detectors/base-detector.js +77 -0
- package/src/detectors/github-detector.js +74 -0
- package/src/detectors/index.js +80 -0
- package/src/detectors/nextjs-detector.js +139 -0
- package/src/detectors/oauth-detector.js +122 -0
- package/src/detectors/registry.js +97 -0
- package/src/generators/api-client-generator.js +197 -0
- package/src/generators/env-generator.js +162 -0
- package/src/generators/gitignore-generator.js +92 -0
- package/src/generators/index.js +50 -0
- package/src/generators/nextauth-generator.js +242 -0
- package/src/generators/oauth-guide-generator.js +277 -0
- package/src/logo.js +116 -0
- package/tests/api-client-detector.test.js +214 -0
- package/tests/api-client-generator.test.js +169 -0
- package/tests/backend-client.test.js +361 -0
- package/tests/base-detector.test.js +101 -0
- package/tests/commands/login.test.js +98 -0
- package/tests/commands/logout.test.js +70 -0
- package/tests/commands/status.test.js +167 -0
- package/tests/config-manager.test.js +313 -0
- package/tests/detector-index.test.js +209 -0
- package/tests/detector-registry.test.js +93 -0
- package/tests/env-generator.test.js +278 -0
- package/tests/generators-index.test.js +215 -0
- package/tests/github-detector.test.js +145 -0
- package/tests/gitignore-generator.test.js +109 -0
- package/tests/logo.test.js +96 -0
- package/tests/nextauth-generator.test.js +231 -0
- package/tests/nextjs-detector.test.js +235 -0
- package/tests/oauth-detector.test.js +264 -0
- package/tests/oauth-guide-generator.test.js +273 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# Project Detector Architecture
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The CLI uses a **plugin-based detector system** that can identify different project types (Next.js, React, Vue, Svelte, etc.) and generate appropriate boilerplate for each.
|
|
6
|
+
|
|
7
|
+
## Design Principles
|
|
8
|
+
|
|
9
|
+
1. **Extensibility**: Easy to add new project types without modifying core code
|
|
10
|
+
2. **Separation of Concerns**: Detectors detect, generators generate
|
|
11
|
+
3. **Type Safety**: Each project type has its own detector and generator
|
|
12
|
+
4. **Graceful Degradation**: CLI works even if project type isn't fully supported
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Architecture
|
|
17
|
+
|
|
18
|
+
### 1. Base Detector Interface
|
|
19
|
+
|
|
20
|
+
All project detectors implement a common interface:
|
|
21
|
+
|
|
22
|
+
```javascript
|
|
23
|
+
{
|
|
24
|
+
name: string, // e.g., "nextjs", "react", "vue"
|
|
25
|
+
priority: number, // Detection priority (higher = checked first)
|
|
26
|
+
detect(projectPath): {
|
|
27
|
+
detected: boolean, // Is this project type?
|
|
28
|
+
confidence: number, // 0-1, how confident are we?
|
|
29
|
+
metadata: object, // Type-specific metadata
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 2. Detector Registry
|
|
35
|
+
|
|
36
|
+
Detectors are registered in a central registry:
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
// src/detectors/registry.js
|
|
40
|
+
const detectors = [
|
|
41
|
+
require('./nextjs-detector'),
|
|
42
|
+
require('./react-detector'), // Future
|
|
43
|
+
require('./vue-detector'), // Future
|
|
44
|
+
// ... more detectors
|
|
45
|
+
];
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 3. Detection Flow
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
1. User runs `l4yercak3 spread`
|
|
52
|
+
2. CLI scans project directory
|
|
53
|
+
3. Runs all detectors (sorted by priority)
|
|
54
|
+
4. First detector with confidence > 0.8 wins
|
|
55
|
+
5. If no match, prompt user to select type
|
|
56
|
+
6. Use matched detector's metadata for generation
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 4. Generator Mapping
|
|
60
|
+
|
|
61
|
+
Each project type maps to specific generators:
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
{
|
|
65
|
+
nextjs: {
|
|
66
|
+
generators: ['api-client', 'nextauth', 'env'],
|
|
67
|
+
supportedFeatures: ['oauth', 'stripe', 'crm', 'projects', 'invoices']
|
|
68
|
+
},
|
|
69
|
+
react: {
|
|
70
|
+
generators: ['api-client', 'env'],
|
|
71
|
+
supportedFeatures: ['oauth', 'crm', 'projects'] // No NextAuth
|
|
72
|
+
},
|
|
73
|
+
vue: {
|
|
74
|
+
generators: ['api-client', 'env'],
|
|
75
|
+
supportedFeatures: ['oauth', 'crm', 'projects']
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Current Implementation (MVP)
|
|
83
|
+
|
|
84
|
+
### Phase 1: Next.js Only
|
|
85
|
+
|
|
86
|
+
- ✅ `nextjs-detector.js` - Detects Next.js projects
|
|
87
|
+
- ✅ `github-detector.js` - Detects Git/GitHub (framework-agnostic)
|
|
88
|
+
- ✅ `api-client-detector.js` - Detects existing API clients (framework-agnostic)
|
|
89
|
+
|
|
90
|
+
**Current Flow:**
|
|
91
|
+
- If Next.js detected → Full feature support
|
|
92
|
+
- If not Next.js → Warn user, but still allow basic setup
|
|
93
|
+
|
|
94
|
+
### Future: Multi-Framework Support
|
|
95
|
+
|
|
96
|
+
When adding new frameworks:
|
|
97
|
+
|
|
98
|
+
1. **Create Detector** (`src/detectors/react-detector.js`)
|
|
99
|
+
```javascript
|
|
100
|
+
class ReactDetector {
|
|
101
|
+
name = 'react';
|
|
102
|
+
priority = 50; // Lower than Next.js (100)
|
|
103
|
+
|
|
104
|
+
detect(projectPath) {
|
|
105
|
+
// Check for React-specific files
|
|
106
|
+
return {
|
|
107
|
+
detected: hasReact,
|
|
108
|
+
confidence: 0.9,
|
|
109
|
+
metadata: { version, hasTypeScript, ... }
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
2. **Register Detector** (`src/detectors/registry.js`)
|
|
116
|
+
```javascript
|
|
117
|
+
const detectors = [
|
|
118
|
+
require('./nextjs-detector'),
|
|
119
|
+
require('./react-detector'), // Add here
|
|
120
|
+
];
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
3. **Create Generators** (if needed)
|
|
124
|
+
- React might need different OAuth setup (no NextAuth)
|
|
125
|
+
- React might need different file structure
|
|
126
|
+
- API client generator can be shared
|
|
127
|
+
|
|
128
|
+
4. **Update Feature Matrix** (`src/generators/feature-matrix.js`)
|
|
129
|
+
```javascript
|
|
130
|
+
{
|
|
131
|
+
react: {
|
|
132
|
+
oauth: 'manual', // No NextAuth, manual setup
|
|
133
|
+
stripe: 'full',
|
|
134
|
+
crm: 'full',
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Detector Interface Specification
|
|
142
|
+
|
|
143
|
+
### Required Methods
|
|
144
|
+
|
|
145
|
+
```javascript
|
|
146
|
+
class BaseDetector {
|
|
147
|
+
/**
|
|
148
|
+
* Unique identifier for this project type
|
|
149
|
+
*/
|
|
150
|
+
get name() {
|
|
151
|
+
return 'project-type';
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Detection priority (higher = checked first)
|
|
156
|
+
* Range: 0-100
|
|
157
|
+
*/
|
|
158
|
+
get priority() {
|
|
159
|
+
return 50;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Detect if project matches this type
|
|
164
|
+
* @param {string} projectPath - Path to project directory
|
|
165
|
+
* @returns {object} Detection result
|
|
166
|
+
*/
|
|
167
|
+
detect(projectPath) {
|
|
168
|
+
return {
|
|
169
|
+
detected: boolean, // Is this the project type?
|
|
170
|
+
confidence: number, // 0-1, how sure are we?
|
|
171
|
+
metadata: { // Type-specific info
|
|
172
|
+
version: string,
|
|
173
|
+
hasTypeScript: boolean,
|
|
174
|
+
// ... more metadata
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Get supported features for this project type
|
|
181
|
+
* @returns {object} Feature support matrix
|
|
182
|
+
*/
|
|
183
|
+
getSupportedFeatures() {
|
|
184
|
+
return {
|
|
185
|
+
oauth: boolean | 'manual', // true = full support, 'manual' = guide only, false = not supported
|
|
186
|
+
stripe: boolean,
|
|
187
|
+
crm: boolean,
|
|
188
|
+
projects: boolean,
|
|
189
|
+
invoices: boolean,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Get available generators for this project type
|
|
195
|
+
* @returns {string[]} List of generator names
|
|
196
|
+
*/
|
|
197
|
+
getAvailableGenerators() {
|
|
198
|
+
return ['api-client', 'env'];
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Generator Interface Specification
|
|
206
|
+
|
|
207
|
+
Generators are framework-agnostic where possible, but can be framework-specific when needed.
|
|
208
|
+
|
|
209
|
+
### Shared Generators (Work for all frameworks)
|
|
210
|
+
|
|
211
|
+
- `api-client-generator.js` - Generates API client (framework-agnostic)
|
|
212
|
+
- `env-generator.js` - Generates `.env.local.example` (framework-agnostic)
|
|
213
|
+
|
|
214
|
+
### Framework-Specific Generators
|
|
215
|
+
|
|
216
|
+
- `nextauth-generator.js` - Next.js only (NextAuth.js)
|
|
217
|
+
- `react-auth-generator.js` - React only (manual OAuth)
|
|
218
|
+
- `vue-auth-generator.js` - Vue only (manual OAuth)
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Detection Priority System
|
|
223
|
+
|
|
224
|
+
Detectors run in priority order. First match wins (if confidence > 0.8).
|
|
225
|
+
|
|
226
|
+
**Priority Levels:**
|
|
227
|
+
- **100**: Very specific frameworks (Next.js, Nuxt, SvelteKit)
|
|
228
|
+
- **75**: Framework with build tool (Vite + React, Webpack + Vue)
|
|
229
|
+
- **50**: Pure frameworks (React, Vue, Svelte)
|
|
230
|
+
- **25**: Generic JavaScript/TypeScript projects
|
|
231
|
+
|
|
232
|
+
**Example:**
|
|
233
|
+
```
|
|
234
|
+
Next.js (100) → Detected first
|
|
235
|
+
React + Vite (75) → Only checked if Next.js not detected
|
|
236
|
+
React (50) → Only checked if above not detected
|
|
237
|
+
Generic JS (25) → Fallback
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Adding a New Project Type
|
|
243
|
+
|
|
244
|
+
### Step-by-Step Guide
|
|
245
|
+
|
|
246
|
+
1. **Create Detector** (`src/detectors/myframework-detector.js`)
|
|
247
|
+
```javascript
|
|
248
|
+
const BaseDetector = require('./base-detector');
|
|
249
|
+
|
|
250
|
+
class MyFrameworkDetector extends BaseDetector {
|
|
251
|
+
get name() { return 'myframework'; }
|
|
252
|
+
get priority() { return 50; }
|
|
253
|
+
|
|
254
|
+
detect(projectPath) {
|
|
255
|
+
// Detection logic
|
|
256
|
+
return {
|
|
257
|
+
detected: true,
|
|
258
|
+
confidence: 0.9,
|
|
259
|
+
metadata: { version: '1.0.0' }
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
getSupportedFeatures() {
|
|
264
|
+
return {
|
|
265
|
+
oauth: 'manual',
|
|
266
|
+
stripe: true,
|
|
267
|
+
crm: true,
|
|
268
|
+
projects: true,
|
|
269
|
+
invoices: false,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
module.exports = new MyFrameworkDetector();
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
2. **Register Detector** (`src/detectors/registry.js`)
|
|
278
|
+
```javascript
|
|
279
|
+
const detectors = [
|
|
280
|
+
require('./nextjs-detector'),
|
|
281
|
+
require('./myframework-detector'), // Add here
|
|
282
|
+
];
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
3. **Create Generators** (if needed)
|
|
286
|
+
- Check if existing generators work
|
|
287
|
+
- Create framework-specific generators if needed
|
|
288
|
+
|
|
289
|
+
4. **Test**
|
|
290
|
+
- Run `l4yercak3 spread` in a MyFramework project
|
|
291
|
+
- Verify detection works
|
|
292
|
+
- Verify generation works
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Current Status
|
|
297
|
+
|
|
298
|
+
### ✅ Implemented (Phase 1)
|
|
299
|
+
- Next.js detector (full support)
|
|
300
|
+
- GitHub detector (framework-agnostic)
|
|
301
|
+
- API client detector (framework-agnostic)
|
|
302
|
+
- Basic registry system
|
|
303
|
+
|
|
304
|
+
### 🚧 Future (Phase 4+)
|
|
305
|
+
- React detector
|
|
306
|
+
- Vue detector
|
|
307
|
+
- Svelte detector
|
|
308
|
+
- Generic JavaScript/TypeScript detector
|
|
309
|
+
- Framework-specific generators
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Benefits of This Architecture
|
|
314
|
+
|
|
315
|
+
1. **Easy to Extend**: Add new detectors without touching core code
|
|
316
|
+
2. **Type Safety**: Each framework has its own detection logic
|
|
317
|
+
3. **Feature Gating**: Can disable features per framework
|
|
318
|
+
4. **Graceful Degradation**: Works even if framework not fully supported
|
|
319
|
+
5. **Maintainable**: Clear separation between detection and generation
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
**Last Updated:** 2025-01-14
|
|
324
|
+
**Status:** Phase 1 (Next.js only)
|
|
325
|
+
**Next:** Ready for multi-framework support when needed
|
|
326
|
+
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Development Guide
|
|
2
|
+
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
# Install dependencies
|
|
7
|
+
npm install
|
|
8
|
+
|
|
9
|
+
# Run the CLI locally
|
|
10
|
+
npm start
|
|
11
|
+
|
|
12
|
+
# Or link globally for testing
|
|
13
|
+
npm link
|
|
14
|
+
l4yercak3
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Development Standards
|
|
18
|
+
|
|
19
|
+
### Quality Checks
|
|
20
|
+
|
|
21
|
+
Before committing, always run:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm run verify
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
This runs:
|
|
28
|
+
- ✅ Linting (`npm run lint`)
|
|
29
|
+
- ✅ Type checking (`npm run type-check`)
|
|
30
|
+
- ✅ Build verification (`npm run build`)
|
|
31
|
+
|
|
32
|
+
### Individual Commands
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Lint code
|
|
36
|
+
npm run lint
|
|
37
|
+
|
|
38
|
+
# Fix linting issues automatically
|
|
39
|
+
npm run lint:fix
|
|
40
|
+
|
|
41
|
+
# Check types
|
|
42
|
+
npm run type-check
|
|
43
|
+
|
|
44
|
+
# Verify build
|
|
45
|
+
npm run build
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Project Structure
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
l4yercak3-cli/
|
|
52
|
+
├── .cursor/
|
|
53
|
+
│ └── rules.md # Development rules for Cursor AI
|
|
54
|
+
├── bin/
|
|
55
|
+
│ └── cli.js # CLI entry point
|
|
56
|
+
├── src/
|
|
57
|
+
│ └── logo.js # Logo display module
|
|
58
|
+
├── .eslintrc.js # ESLint configuration
|
|
59
|
+
├── .gitignore # Git ignore rules
|
|
60
|
+
├── package.json # Package configuration
|
|
61
|
+
├── PLAN.md # Strategic plan document
|
|
62
|
+
├── README.md # User documentation
|
|
63
|
+
└── DEVELOPMENT.md # This file
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Adding New Features
|
|
67
|
+
|
|
68
|
+
### 1. Create Feature Branch
|
|
69
|
+
```bash
|
|
70
|
+
git checkout -b feature/your-feature-name
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 2. Implement Feature
|
|
74
|
+
- Follow code standards in `.cursor/rules.md`
|
|
75
|
+
- Add JSDoc comments
|
|
76
|
+
- Keep functions small and focused
|
|
77
|
+
|
|
78
|
+
### 3. Test Locally
|
|
79
|
+
```bash
|
|
80
|
+
npm link
|
|
81
|
+
# Test in a real project
|
|
82
|
+
cd ~/Development/test-project
|
|
83
|
+
l4yercak3 your-command
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 4. Run Quality Checks
|
|
87
|
+
```bash
|
|
88
|
+
npm run verify
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 5. Commit and Push
|
|
92
|
+
```bash
|
|
93
|
+
git add .
|
|
94
|
+
git commit -m "feat: add your feature"
|
|
95
|
+
git push origin feature/your-feature-name
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Code Style
|
|
99
|
+
|
|
100
|
+
### JavaScript/Node.js
|
|
101
|
+
- Use CommonJS (`require`/`module.exports`)
|
|
102
|
+
- Use async/await for async operations
|
|
103
|
+
- Handle errors with try/catch
|
|
104
|
+
- Use meaningful variable names
|
|
105
|
+
|
|
106
|
+
### Example
|
|
107
|
+
```javascript
|
|
108
|
+
const chalk = require('chalk');
|
|
109
|
+
|
|
110
|
+
async function doSomething() {
|
|
111
|
+
try {
|
|
112
|
+
console.log(chalk.green('Success!'));
|
|
113
|
+
} catch (error) {
|
|
114
|
+
console.error(chalk.red('Error:'), error.message);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Testing
|
|
120
|
+
|
|
121
|
+
### Manual Testing
|
|
122
|
+
1. Link package: `npm link`
|
|
123
|
+
2. Test in example project
|
|
124
|
+
3. Verify all features work
|
|
125
|
+
4. Check error handling
|
|
126
|
+
|
|
127
|
+
### Example Projects
|
|
128
|
+
- `~/Development/l4yercak3-landing`
|
|
129
|
+
- `~/Development/freelancer-client-portal`
|
|
130
|
+
|
|
131
|
+
## Publishing
|
|
132
|
+
|
|
133
|
+
### Before Publishing
|
|
134
|
+
1. Update version in `package.json`
|
|
135
|
+
2. Update CHANGELOG.md (if exists)
|
|
136
|
+
3. Run `npm run verify`
|
|
137
|
+
4. Test installation: `npm pack` then `npm install -g *.tgz`
|
|
138
|
+
|
|
139
|
+
### Publishing Steps
|
|
140
|
+
```bash
|
|
141
|
+
# Login to npm (if needed)
|
|
142
|
+
npm login
|
|
143
|
+
|
|
144
|
+
# Publish
|
|
145
|
+
npm publish --access public
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Version Management
|
|
149
|
+
```bash
|
|
150
|
+
# Patch version (1.0.0 → 1.0.1)
|
|
151
|
+
npm version patch
|
|
152
|
+
|
|
153
|
+
# Minor version (1.0.0 → 1.1.0)
|
|
154
|
+
npm version minor
|
|
155
|
+
|
|
156
|
+
# Major version (1.0.0 → 2.0.0)
|
|
157
|
+
npm version major
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Troubleshooting
|
|
161
|
+
|
|
162
|
+
### Command Not Found After `npm link`
|
|
163
|
+
```bash
|
|
164
|
+
# Check executable permissions
|
|
165
|
+
chmod +x bin/cli.js
|
|
166
|
+
|
|
167
|
+
# Verify npm bin path
|
|
168
|
+
npm bin -g
|
|
169
|
+
|
|
170
|
+
# Try unlinking and relinking
|
|
171
|
+
npm unlink
|
|
172
|
+
npm link
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Linting Errors
|
|
176
|
+
```bash
|
|
177
|
+
# Auto-fix what can be fixed
|
|
178
|
+
npm run lint:fix
|
|
179
|
+
|
|
180
|
+
# Check specific file
|
|
181
|
+
npx eslint bin/cli.js
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Build Errors
|
|
185
|
+
- Check Node.js version: `node --version` (should be >=14)
|
|
186
|
+
- Verify package.json structure
|
|
187
|
+
- Check for syntax errors
|
|
188
|
+
|
|
189
|
+
## Resources
|
|
190
|
+
|
|
191
|
+
- [Plan Document](./PLAN.md) - Strategic plan and roadmap
|
|
192
|
+
- [Development Rules](./.cursor/rules.md) - Detailed coding standards
|
|
193
|
+
- [README](./README.md) - User documentation
|
|
194
|
+
|