@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.
Files changed (61) hide show
  1. package/.claude/settings.local.json +18 -0
  2. package/.cursor/rules.md +203 -0
  3. package/.eslintrc.js +31 -0
  4. package/README.md +227 -0
  5. package/bin/cli.js +61 -0
  6. package/docs/ADDING_NEW_PROJECT_TYPE.md +156 -0
  7. package/docs/ARCHITECTURE_RELATIONSHIPS.md +411 -0
  8. package/docs/CLI_AUTHENTICATION.md +214 -0
  9. package/docs/DETECTOR_ARCHITECTURE.md +326 -0
  10. package/docs/DEVELOPMENT.md +194 -0
  11. package/docs/IMPLEMENTATION_PHASES.md +468 -0
  12. package/docs/OAUTH_CLARIFICATION.md +258 -0
  13. package/docs/OAUTH_SETUP_GUIDE_TEMPLATE.md +211 -0
  14. package/docs/PHASE_0_PROGRESS.md +120 -0
  15. package/docs/PHASE_1_COMPLETE.md +366 -0
  16. package/docs/PHASE_SUMMARY.md +149 -0
  17. package/docs/PLAN.md +511 -0
  18. package/docs/README.md +56 -0
  19. package/docs/STRIPE_INTEGRATION.md +447 -0
  20. package/docs/SUMMARY.md +230 -0
  21. package/docs/UPDATED_PLAN.md +447 -0
  22. package/package.json +53 -0
  23. package/src/api/backend-client.js +148 -0
  24. package/src/commands/login.js +146 -0
  25. package/src/commands/logout.js +24 -0
  26. package/src/commands/spread.js +364 -0
  27. package/src/commands/status.js +62 -0
  28. package/src/config/config-manager.js +205 -0
  29. package/src/detectors/api-client-detector.js +85 -0
  30. package/src/detectors/base-detector.js +77 -0
  31. package/src/detectors/github-detector.js +74 -0
  32. package/src/detectors/index.js +80 -0
  33. package/src/detectors/nextjs-detector.js +139 -0
  34. package/src/detectors/oauth-detector.js +122 -0
  35. package/src/detectors/registry.js +97 -0
  36. package/src/generators/api-client-generator.js +197 -0
  37. package/src/generators/env-generator.js +162 -0
  38. package/src/generators/gitignore-generator.js +92 -0
  39. package/src/generators/index.js +50 -0
  40. package/src/generators/nextauth-generator.js +242 -0
  41. package/src/generators/oauth-guide-generator.js +277 -0
  42. package/src/logo.js +116 -0
  43. package/tests/api-client-detector.test.js +214 -0
  44. package/tests/api-client-generator.test.js +169 -0
  45. package/tests/backend-client.test.js +361 -0
  46. package/tests/base-detector.test.js +101 -0
  47. package/tests/commands/login.test.js +98 -0
  48. package/tests/commands/logout.test.js +70 -0
  49. package/tests/commands/status.test.js +167 -0
  50. package/tests/config-manager.test.js +313 -0
  51. package/tests/detector-index.test.js +209 -0
  52. package/tests/detector-registry.test.js +93 -0
  53. package/tests/env-generator.test.js +278 -0
  54. package/tests/generators-index.test.js +215 -0
  55. package/tests/github-detector.test.js +145 -0
  56. package/tests/gitignore-generator.test.js +109 -0
  57. package/tests/logo.test.js +96 -0
  58. package/tests/nextauth-generator.test.js +231 -0
  59. package/tests/nextjs-detector.test.js +235 -0
  60. package/tests/oauth-detector.test.js +264 -0
  61. 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
+