popeye-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/.env.example +25 -0
- package/.prettierrc +8 -0
- package/README.md +320 -0
- package/dist/adapters/claude.d.ts +82 -0
- package/dist/adapters/claude.d.ts.map +1 -0
- package/dist/adapters/claude.js +230 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/openai.d.ts +48 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +257 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/auth/claude.d.ts +44 -0
- package/dist/auth/claude.d.ts.map +1 -0
- package/dist/auth/claude.js +139 -0
- package/dist/auth/claude.js.map +1 -0
- package/dist/auth/index.d.ts +61 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +141 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/keychain.d.ts +66 -0
- package/dist/auth/keychain.d.ts.map +1 -0
- package/dist/auth/keychain.js +125 -0
- package/dist/auth/keychain.js.map +1 -0
- package/dist/auth/openai-entry.d.ts +9 -0
- package/dist/auth/openai-entry.d.ts.map +1 -0
- package/dist/auth/openai-entry.js +410 -0
- package/dist/auth/openai-entry.js.map +1 -0
- package/dist/auth/openai.d.ts +71 -0
- package/dist/auth/openai.d.ts.map +1 -0
- package/dist/auth/openai.js +212 -0
- package/dist/auth/openai.js.map +1 -0
- package/dist/auth/server.d.ts +32 -0
- package/dist/auth/server.d.ts.map +1 -0
- package/dist/auth/server.js +213 -0
- package/dist/auth/server.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +10 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +162 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/config.d.ts +10 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +215 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/create.d.ts +10 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +240 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/index.d.ts +10 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +10 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +18 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +241 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/status.d.ts +18 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +154 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +71 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/interactive.d.ts +9 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +330 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/output.d.ts +182 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +355 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/config/defaults.d.ts +57 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +103 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +138 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +244 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +220 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +141 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/generators/index.d.ts +101 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +200 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/python.d.ts +48 -0
- package/dist/generators/python.d.ts.map +1 -0
- package/dist/generators/python.js +262 -0
- package/dist/generators/python.js.map +1 -0
- package/dist/generators/templates/index.d.ts +6 -0
- package/dist/generators/templates/index.d.ts.map +1 -0
- package/dist/generators/templates/index.js +6 -0
- package/dist/generators/templates/index.js.map +1 -0
- package/dist/generators/templates/python.d.ts +53 -0
- package/dist/generators/templates/python.d.ts.map +1 -0
- package/dist/generators/templates/python.js +454 -0
- package/dist/generators/templates/python.js.map +1 -0
- package/dist/generators/templates/typescript.d.ts +53 -0
- package/dist/generators/templates/typescript.d.ts.map +1 -0
- package/dist/generators/templates/typescript.js +394 -0
- package/dist/generators/templates/typescript.js.map +1 -0
- package/dist/generators/typescript.d.ts +64 -0
- package/dist/generators/typescript.d.ts.map +1 -0
- package/dist/generators/typescript.js +271 -0
- package/dist/generators/typescript.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/state/index.d.ts +168 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +338 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/persistence.d.ts +91 -0
- package/dist/state/persistence.d.ts.map +1 -0
- package/dist/state/persistence.js +201 -0
- package/dist/state/persistence.js.map +1 -0
- package/dist/types/cli.d.ts +132 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +17 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/consensus.d.ts +111 -0
- package/dist/types/consensus.d.ts.map +1 -0
- package/dist/types/consensus.js +29 -0
- package/dist/types/consensus.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +13 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/project.d.ts +73 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +55 -0
- package/dist/types/project.js.map +1 -0
- package/dist/types/workflow.d.ts +236 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +74 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/workflow/consensus.d.ts +89 -0
- package/dist/workflow/consensus.d.ts.map +1 -0
- package/dist/workflow/consensus.js +220 -0
- package/dist/workflow/consensus.js.map +1 -0
- package/dist/workflow/execution-mode.d.ts +82 -0
- package/dist/workflow/execution-mode.d.ts.map +1 -0
- package/dist/workflow/execution-mode.js +346 -0
- package/dist/workflow/execution-mode.js.map +1 -0
- package/dist/workflow/index.d.ts +110 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +283 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/plan-mode.d.ts +83 -0
- package/dist/workflow/plan-mode.d.ts.map +1 -0
- package/dist/workflow/plan-mode.js +241 -0
- package/dist/workflow/plan-mode.js.map +1 -0
- package/dist/workflow/test-runner.d.ts +87 -0
- package/dist/workflow/test-runner.d.ts.map +1 -0
- package/dist/workflow/test-runner.js +273 -0
- package/dist/workflow/test-runner.js.map +1 -0
- package/eslint.config.js +25 -0
- package/package.json +66 -0
- package/src/adapters/claude.ts +298 -0
- package/src/adapters/openai.ts +300 -0
- package/src/auth/claude.ts +166 -0
- package/src/auth/index.ts +171 -0
- package/src/auth/keychain.ts +138 -0
- package/src/auth/openai-entry.ts +410 -0
- package/src/auth/openai.ts +260 -0
- package/src/auth/server.ts +252 -0
- package/src/cli/commands/auth.ts +194 -0
- package/src/cli/commands/config.ts +241 -0
- package/src/cli/commands/create.ts +308 -0
- package/src/cli/commands/index.ts +10 -0
- package/src/cli/commands/resume.ts +304 -0
- package/src/cli/commands/status.ts +189 -0
- package/src/cli/index.ts +90 -0
- package/src/cli/interactive.ts +418 -0
- package/src/cli/output.ts +410 -0
- package/src/config/defaults.ts +114 -0
- package/src/config/index.ts +315 -0
- package/src/config/schema.ts +164 -0
- package/src/generators/index.ts +251 -0
- package/src/generators/python.ts +318 -0
- package/src/generators/templates/index.ts +6 -0
- package/src/generators/templates/python.ts +465 -0
- package/src/generators/templates/typescript.ts +417 -0
- package/src/generators/typescript.ts +340 -0
- package/src/index.ts +13 -0
- package/src/state/index.ts +454 -0
- package/src/state/persistence.ts +230 -0
- package/src/types/cli.ts +146 -0
- package/src/types/consensus.ts +116 -0
- package/src/types/index.ts +64 -0
- package/src/types/project.ts +85 -0
- package/src/types/workflow.ts +149 -0
- package/src/workflow/consensus.ts +299 -0
- package/src/workflow/execution-mode.ts +517 -0
- package/src/workflow/index.ts +396 -0
- package/src/workflow/plan-mode.ts +356 -0
- package/src/workflow/test-runner.ts +345 -0
- package/tests/adapters/openai.test.ts +145 -0
- package/tests/config/config.test.ts +208 -0
- package/tests/generators/generators.test.ts +185 -0
- package/tests/types/consensus.test.ts +152 -0
- package/tests/types/project.test.ts +134 -0
- package/tests/workflow/consensus.test.ts +221 -0
- package/tests/workflow/test-runner.test.ts +214 -0
- package/tsconfig.json +25 -0
- package/vitest.config.ts +22 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript project templates
|
|
3
|
+
* Provides template files for TypeScript project generation
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Generate package.json content
|
|
7
|
+
*/
|
|
8
|
+
export function generatePackageJson(projectName, description) {
|
|
9
|
+
return JSON.stringify({
|
|
10
|
+
name: projectName,
|
|
11
|
+
version: '1.0.0',
|
|
12
|
+
description: description || 'Generated by Popeye CLI',
|
|
13
|
+
main: './dist/index.js',
|
|
14
|
+
type: 'module',
|
|
15
|
+
scripts: {
|
|
16
|
+
build: 'tsc',
|
|
17
|
+
dev: 'tsc --watch',
|
|
18
|
+
start: 'node dist/index.js',
|
|
19
|
+
test: 'vitest run',
|
|
20
|
+
'test:watch': 'vitest',
|
|
21
|
+
'test:coverage': 'vitest run --coverage',
|
|
22
|
+
lint: 'eslint src --ext .ts',
|
|
23
|
+
'lint:fix': 'eslint src --ext .ts --fix',
|
|
24
|
+
format: 'prettier --write "src/**/*.ts"',
|
|
25
|
+
typecheck: 'tsc --noEmit',
|
|
26
|
+
clean: 'rm -rf dist',
|
|
27
|
+
},
|
|
28
|
+
keywords: [],
|
|
29
|
+
author: '',
|
|
30
|
+
license: 'MIT',
|
|
31
|
+
engines: {
|
|
32
|
+
node: '>=18.0.0',
|
|
33
|
+
},
|
|
34
|
+
dependencies: {},
|
|
35
|
+
devDependencies: {
|
|
36
|
+
'@types/node': '^20.17.6',
|
|
37
|
+
'@typescript-eslint/eslint-plugin': '^8.14.0',
|
|
38
|
+
'@typescript-eslint/parser': '^8.14.0',
|
|
39
|
+
'@vitest/coverage-v8': '^2.1.4',
|
|
40
|
+
eslint: '^9.14.0',
|
|
41
|
+
prettier: '^3.3.3',
|
|
42
|
+
typescript: '^5.6.3',
|
|
43
|
+
vitest: '^2.1.4',
|
|
44
|
+
},
|
|
45
|
+
}, null, 2);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate tsconfig.json content
|
|
49
|
+
*/
|
|
50
|
+
export function generateTsconfig() {
|
|
51
|
+
return JSON.stringify({
|
|
52
|
+
compilerOptions: {
|
|
53
|
+
target: 'ES2022',
|
|
54
|
+
module: 'NodeNext',
|
|
55
|
+
moduleResolution: 'NodeNext',
|
|
56
|
+
lib: ['ES2022'],
|
|
57
|
+
outDir: './dist',
|
|
58
|
+
rootDir: './src',
|
|
59
|
+
strict: true,
|
|
60
|
+
esModuleInterop: true,
|
|
61
|
+
skipLibCheck: true,
|
|
62
|
+
forceConsistentCasingInFileNames: true,
|
|
63
|
+
declaration: true,
|
|
64
|
+
declarationMap: true,
|
|
65
|
+
sourceMap: true,
|
|
66
|
+
resolveJsonModule: true,
|
|
67
|
+
noImplicitAny: true,
|
|
68
|
+
noUnusedLocals: true,
|
|
69
|
+
noUnusedParameters: true,
|
|
70
|
+
noImplicitReturns: true,
|
|
71
|
+
noFallthroughCasesInSwitch: true,
|
|
72
|
+
},
|
|
73
|
+
include: ['src/**/*'],
|
|
74
|
+
exclude: ['node_modules', 'dist', 'tests'],
|
|
75
|
+
}, null, 2);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Generate vitest.config.ts content
|
|
79
|
+
*/
|
|
80
|
+
export function generateVitestConfig() {
|
|
81
|
+
return `import { defineConfig } from 'vitest/config';
|
|
82
|
+
|
|
83
|
+
export default defineConfig({
|
|
84
|
+
test: {
|
|
85
|
+
globals: true,
|
|
86
|
+
environment: 'node',
|
|
87
|
+
coverage: {
|
|
88
|
+
provider: 'v8',
|
|
89
|
+
reporter: ['text', 'json', 'html'],
|
|
90
|
+
exclude: ['node_modules/', 'dist/', 'tests/'],
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Generate eslint.config.js content
|
|
98
|
+
*/
|
|
99
|
+
export function generateEslintConfig() {
|
|
100
|
+
return `import eslint from '@eslint/js';
|
|
101
|
+
import tseslint from '@typescript-eslint/eslint-plugin';
|
|
102
|
+
import tsparser from '@typescript-eslint/parser';
|
|
103
|
+
|
|
104
|
+
export default [
|
|
105
|
+
eslint.configs.recommended,
|
|
106
|
+
{
|
|
107
|
+
files: ['src/**/*.ts'],
|
|
108
|
+
languageOptions: {
|
|
109
|
+
parser: tsparser,
|
|
110
|
+
parserOptions: {
|
|
111
|
+
ecmaVersion: 2022,
|
|
112
|
+
sourceType: 'module',
|
|
113
|
+
},
|
|
114
|
+
globals: {
|
|
115
|
+
console: 'readonly',
|
|
116
|
+
process: 'readonly',
|
|
117
|
+
Buffer: 'readonly',
|
|
118
|
+
__dirname: 'readonly',
|
|
119
|
+
__filename: 'readonly',
|
|
120
|
+
setTimeout: 'readonly',
|
|
121
|
+
clearTimeout: 'readonly',
|
|
122
|
+
setInterval: 'readonly',
|
|
123
|
+
clearInterval: 'readonly',
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
plugins: {
|
|
127
|
+
'@typescript-eslint': tseslint,
|
|
128
|
+
},
|
|
129
|
+
rules: {
|
|
130
|
+
...tseslint.configs.recommended.rules,
|
|
131
|
+
'@typescript-eslint/explicit-function-return-type': 'warn',
|
|
132
|
+
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
|
|
133
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
];
|
|
137
|
+
`;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Generate .prettierrc content
|
|
141
|
+
*/
|
|
142
|
+
export function generatePrettierrc() {
|
|
143
|
+
return JSON.stringify({
|
|
144
|
+
semi: true,
|
|
145
|
+
singleQuote: true,
|
|
146
|
+
tabWidth: 2,
|
|
147
|
+
trailingComma: 'es5',
|
|
148
|
+
printWidth: 100,
|
|
149
|
+
}, null, 2);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Generate main index.ts content
|
|
153
|
+
*/
|
|
154
|
+
export function generateIndexTs(projectName) {
|
|
155
|
+
return `/**
|
|
156
|
+
* ${projectName}
|
|
157
|
+
*
|
|
158
|
+
* Generated by Popeye CLI
|
|
159
|
+
*/
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Main function
|
|
163
|
+
*/
|
|
164
|
+
export function main(): void {
|
|
165
|
+
console.log('Hello from ${projectName}!');
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Run if executed directly
|
|
169
|
+
main();
|
|
170
|
+
`;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Generate test file content
|
|
174
|
+
*/
|
|
175
|
+
export function generateTestFile(projectName) {
|
|
176
|
+
return `import { describe, it, expect } from 'vitest';
|
|
177
|
+
import { main } from '../src/index.js';
|
|
178
|
+
|
|
179
|
+
describe('${projectName}', () => {
|
|
180
|
+
describe('main', () => {
|
|
181
|
+
it('should run without errors', () => {
|
|
182
|
+
expect(() => main()).not.toThrow();
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
describe('placeholder tests', () => {
|
|
187
|
+
it('should pass basic assertion', () => {
|
|
188
|
+
expect(true).toBe(true);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it('should handle sample data', () => {
|
|
192
|
+
const data = { key: 'value', number: 42 };
|
|
193
|
+
expect(data.key).toBe('value');
|
|
194
|
+
expect(data.number).toBe(42);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
`;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Generate Dockerfile content
|
|
202
|
+
*/
|
|
203
|
+
export function generateDockerfile(_projectName) {
|
|
204
|
+
return `# Node.js base image
|
|
205
|
+
FROM node:20-slim as base
|
|
206
|
+
|
|
207
|
+
WORKDIR /app
|
|
208
|
+
|
|
209
|
+
# Copy package files
|
|
210
|
+
COPY package*.json ./
|
|
211
|
+
|
|
212
|
+
# Install dependencies
|
|
213
|
+
RUN npm ci --only=production
|
|
214
|
+
|
|
215
|
+
# Copy built files
|
|
216
|
+
COPY dist/ ./dist/
|
|
217
|
+
|
|
218
|
+
# Production stage
|
|
219
|
+
FROM base as production
|
|
220
|
+
|
|
221
|
+
# Create non-root user
|
|
222
|
+
RUN adduser --disabled-password --gecos '' appuser
|
|
223
|
+
USER appuser
|
|
224
|
+
|
|
225
|
+
CMD ["node", "dist/index.js"]
|
|
226
|
+
|
|
227
|
+
# Development stage
|
|
228
|
+
FROM node:20-slim as development
|
|
229
|
+
|
|
230
|
+
WORKDIR /app
|
|
231
|
+
|
|
232
|
+
COPY package*.json ./
|
|
233
|
+
RUN npm ci
|
|
234
|
+
|
|
235
|
+
COPY . .
|
|
236
|
+
|
|
237
|
+
CMD ["npm", "run", "dev"]
|
|
238
|
+
`;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Generate docker-compose.yml content
|
|
242
|
+
*/
|
|
243
|
+
export function generateDockerCompose(projectName) {
|
|
244
|
+
return `version: "3.8"
|
|
245
|
+
|
|
246
|
+
services:
|
|
247
|
+
app:
|
|
248
|
+
build:
|
|
249
|
+
context: .
|
|
250
|
+
target: production
|
|
251
|
+
container_name: ${projectName}
|
|
252
|
+
restart: unless-stopped
|
|
253
|
+
env_file:
|
|
254
|
+
- .env
|
|
255
|
+
volumes:
|
|
256
|
+
- ./data:/app/data
|
|
257
|
+
|
|
258
|
+
dev:
|
|
259
|
+
build:
|
|
260
|
+
context: .
|
|
261
|
+
target: development
|
|
262
|
+
container_name: ${projectName}-dev
|
|
263
|
+
volumes:
|
|
264
|
+
- ./src:/app/src
|
|
265
|
+
- ./tests:/app/tests
|
|
266
|
+
command: ["npm", "run", "dev"]
|
|
267
|
+
`;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Generate .gitignore content
|
|
271
|
+
*/
|
|
272
|
+
export function generateGitignore() {
|
|
273
|
+
return `# Dependencies
|
|
274
|
+
node_modules/
|
|
275
|
+
|
|
276
|
+
# Build output
|
|
277
|
+
dist/
|
|
278
|
+
build/
|
|
279
|
+
|
|
280
|
+
# IDE
|
|
281
|
+
.idea/
|
|
282
|
+
.vscode/
|
|
283
|
+
*.swp
|
|
284
|
+
*.swo
|
|
285
|
+
|
|
286
|
+
# Environment
|
|
287
|
+
.env
|
|
288
|
+
.env.local
|
|
289
|
+
.env.*.local
|
|
290
|
+
|
|
291
|
+
# Logs
|
|
292
|
+
*.log
|
|
293
|
+
npm-debug.log*
|
|
294
|
+
yarn-debug.log*
|
|
295
|
+
yarn-error.log*
|
|
296
|
+
|
|
297
|
+
# Testing
|
|
298
|
+
coverage/
|
|
299
|
+
.nyc_output/
|
|
300
|
+
|
|
301
|
+
# OS files
|
|
302
|
+
.DS_Store
|
|
303
|
+
Thumbs.db
|
|
304
|
+
|
|
305
|
+
# Project specific
|
|
306
|
+
.popeye/
|
|
307
|
+
data/
|
|
308
|
+
`;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Generate .env.example content
|
|
312
|
+
*/
|
|
313
|
+
export function generateEnvExample() {
|
|
314
|
+
return `# Environment variables
|
|
315
|
+
# Copy this file to .env and fill in the values
|
|
316
|
+
|
|
317
|
+
# Application settings
|
|
318
|
+
NODE_ENV=development
|
|
319
|
+
DEBUG=true
|
|
320
|
+
LOG_LEVEL=info
|
|
321
|
+
|
|
322
|
+
# Add your environment variables below
|
|
323
|
+
`;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Generate README.md content
|
|
327
|
+
*/
|
|
328
|
+
export function generateReadme(projectName, description) {
|
|
329
|
+
return `# ${projectName}
|
|
330
|
+
|
|
331
|
+
${description || 'Generated by Popeye CLI'}
|
|
332
|
+
|
|
333
|
+
## Installation
|
|
334
|
+
|
|
335
|
+
\`\`\`bash
|
|
336
|
+
npm install
|
|
337
|
+
\`\`\`
|
|
338
|
+
|
|
339
|
+
## Usage
|
|
340
|
+
|
|
341
|
+
\`\`\`bash
|
|
342
|
+
# Build
|
|
343
|
+
npm run build
|
|
344
|
+
|
|
345
|
+
# Run
|
|
346
|
+
npm start
|
|
347
|
+
|
|
348
|
+
# Development mode
|
|
349
|
+
npm run dev
|
|
350
|
+
\`\`\`
|
|
351
|
+
|
|
352
|
+
## Development
|
|
353
|
+
|
|
354
|
+
### Running Tests
|
|
355
|
+
|
|
356
|
+
\`\`\`bash
|
|
357
|
+
npm test
|
|
358
|
+
|
|
359
|
+
# With coverage
|
|
360
|
+
npm run test:coverage
|
|
361
|
+
|
|
362
|
+
# Watch mode
|
|
363
|
+
npm run test:watch
|
|
364
|
+
\`\`\`
|
|
365
|
+
|
|
366
|
+
### Code Quality
|
|
367
|
+
|
|
368
|
+
\`\`\`bash
|
|
369
|
+
# Lint
|
|
370
|
+
npm run lint
|
|
371
|
+
|
|
372
|
+
# Format
|
|
373
|
+
npm run format
|
|
374
|
+
|
|
375
|
+
# Type check
|
|
376
|
+
npm run typecheck
|
|
377
|
+
\`\`\`
|
|
378
|
+
|
|
379
|
+
## Docker
|
|
380
|
+
|
|
381
|
+
\`\`\`bash
|
|
382
|
+
# Build and run with Docker Compose
|
|
383
|
+
docker-compose up --build
|
|
384
|
+
|
|
385
|
+
# Run in development mode
|
|
386
|
+
docker-compose run dev
|
|
387
|
+
\`\`\`
|
|
388
|
+
|
|
389
|
+
## License
|
|
390
|
+
|
|
391
|
+
MIT
|
|
392
|
+
`;
|
|
393
|
+
}
|
|
394
|
+
//# sourceMappingURL=typescript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../src/generators/templates/typescript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript project generator
|
|
3
|
+
* Creates complete TypeScript project scaffolding
|
|
4
|
+
*/
|
|
5
|
+
import type { ProjectSpec } from '../types/project.js';
|
|
6
|
+
/**
|
|
7
|
+
* Project generation result
|
|
8
|
+
*/
|
|
9
|
+
export interface GenerationResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
projectDir: string;
|
|
12
|
+
filesCreated: string[];
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generate a complete TypeScript project
|
|
17
|
+
*
|
|
18
|
+
* @param spec - Project specification
|
|
19
|
+
* @param outputDir - Output directory
|
|
20
|
+
* @returns Generation result
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateTypeScriptProject(spec: ProjectSpec, outputDir: string): Promise<GenerationResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Get the list of files that would be generated
|
|
25
|
+
*
|
|
26
|
+
* @param projectName - Project name
|
|
27
|
+
* @returns List of relative file paths
|
|
28
|
+
*/
|
|
29
|
+
export declare function getTypeScriptProjectFiles(_projectName: string): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Validate a TypeScript project structure
|
|
32
|
+
*
|
|
33
|
+
* @param projectDir - Project directory
|
|
34
|
+
* @returns Validation result
|
|
35
|
+
*/
|
|
36
|
+
export declare function validateTypeScriptProject(projectDir: string): Promise<{
|
|
37
|
+
valid: boolean;
|
|
38
|
+
missingFiles: string[];
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Add a new TypeScript module to an existing project
|
|
42
|
+
*
|
|
43
|
+
* @param projectDir - Project directory
|
|
44
|
+
* @param moduleName - Module name
|
|
45
|
+
* @returns Files created
|
|
46
|
+
*/
|
|
47
|
+
export declare function addTypeScriptModule(projectDir: string, moduleName: string): Promise<string[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Add a dependency to package.json
|
|
50
|
+
*
|
|
51
|
+
* @param projectDir - Project directory
|
|
52
|
+
* @param packageName - Package name
|
|
53
|
+
* @param version - Package version
|
|
54
|
+
* @param dev - Whether it's a dev dependency
|
|
55
|
+
*/
|
|
56
|
+
export declare function addDependency(projectDir: string, packageName: string, version: string, dev?: boolean): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Update package.json scripts
|
|
59
|
+
*
|
|
60
|
+
* @param projectDir - Project directory
|
|
61
|
+
* @param scripts - Scripts to add/update
|
|
62
|
+
*/
|
|
63
|
+
export declare function updateScripts(projectDir: string, scripts: Record<string, string>): Promise<void>;
|
|
64
|
+
//# sourceMappingURL=typescript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/generators/typescript.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAgBvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgBD;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,CA8F3B;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBxE;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3E,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,CAwBD;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiEnB;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,OAAe,GACnB,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAWf"}
|