@idealyst/cli 1.1.9 → 1.2.1
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/dist/commands/add.js +233 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/index.js +13 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/info.js +193 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.js +155 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/constants.js +119 -0
- package/dist/constants.js.map +1 -0
- package/dist/generators/core/index.js +23 -0
- package/dist/generators/core/index.js.map +1 -0
- package/dist/generators/core/mobile.js +286 -0
- package/dist/generators/core/mobile.js.map +1 -0
- package/dist/generators/core/shared.js +207 -0
- package/dist/generators/core/shared.js.map +1 -0
- package/dist/generators/core/web.js +377 -0
- package/dist/generators/core/web.js.map +1 -0
- package/dist/generators/extensions/api.js +223 -0
- package/dist/generators/extensions/api.js.map +1 -0
- package/dist/generators/extensions/devcontainer.js +510 -0
- package/dist/generators/extensions/devcontainer.js.map +1 -0
- package/dist/generators/extensions/graphql.js +202 -0
- package/dist/generators/extensions/graphql.js.map +1 -0
- package/dist/generators/extensions/index.js +17 -0
- package/dist/generators/extensions/index.js.map +1 -0
- package/dist/generators/extensions/prisma.js +249 -0
- package/dist/generators/extensions/prisma.js.map +1 -0
- package/dist/generators/extensions/trpc.js +258 -0
- package/dist/generators/extensions/trpc.js.map +1 -0
- package/dist/generators/index.js +106 -4
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/reactNative.js +177 -0
- package/dist/generators/reactNative.js.map +1 -0
- package/dist/generators/workspace.js +272 -0
- package/dist/generators/workspace.js.map +1 -0
- package/dist/identifiers/android.js +75 -0
- package/dist/identifiers/android.js.map +1 -0
- package/dist/identifiers/index.js +35 -0
- package/dist/identifiers/index.js.map +1 -0
- package/dist/identifiers/ios.js +65 -0
- package/dist/identifiers/ios.js.map +1 -0
- package/dist/index.js +41 -319
- package/dist/index.js.map +1 -1
- package/dist/templates/copier.js +135 -0
- package/dist/templates/copier.js.map +1 -0
- package/dist/templates/index.js +23 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/merger.js +113 -0
- package/dist/templates/merger.js.map +1 -0
- package/dist/templates/processor.js +142 -0
- package/dist/templates/processor.js.map +1 -0
- package/dist/types/commands/add.d.ts +14 -0
- package/dist/types/commands/index.d.ts +6 -0
- package/dist/types/commands/info.d.ts +10 -0
- package/dist/types/commands/init.d.ts +19 -0
- package/dist/types/constants.d.ts +76 -0
- package/dist/types/generators/core/index.d.ts +6 -0
- package/dist/types/generators/core/mobile.d.ts +13 -0
- package/dist/types/generators/core/shared.d.ts +8 -0
- package/dist/types/generators/core/web.d.ts +8 -0
- package/dist/types/generators/extensions/api.d.ts +8 -0
- package/dist/types/generators/extensions/devcontainer.d.ts +15 -0
- package/dist/types/generators/extensions/graphql.d.ts +8 -0
- package/dist/types/generators/extensions/index.d.ts +8 -0
- package/dist/types/generators/extensions/prisma.d.ts +8 -0
- package/dist/types/generators/extensions/trpc.d.ts +9 -0
- package/dist/types/generators/index.d.ts +11 -3
- package/dist/types/generators/reactNative.d.ts +19 -0
- package/dist/types/generators/workspace.d.ts +8 -0
- package/dist/types/identifiers/android.d.ts +26 -0
- package/dist/types/identifiers/index.d.ts +26 -0
- package/dist/types/identifiers/ios.d.ts +21 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/templates/copier.d.ts +24 -0
- package/dist/types/templates/index.d.ts +6 -0
- package/dist/types/templates/merger.d.ts +43 -0
- package/dist/types/templates/processor.d.ts +39 -0
- package/dist/types/types.d.ts +153 -5
- package/dist/types/utils/filesystem.d.ts +56 -0
- package/dist/types/utils/index.d.ts +7 -0
- package/dist/types/utils/logger.d.ts +58 -0
- package/dist/types/utils/shell.d.ts +35 -0
- package/dist/types/utils/validation.d.ts +32 -0
- package/dist/types/wizard/index.d.ts +20 -0
- package/dist/types/wizard/steps/apiExtension.d.ts +5 -0
- package/dist/types/wizard/steps/appDisplayName.d.ts +5 -0
- package/dist/types/wizard/steps/devcontainerExtension.d.ts +5 -0
- package/dist/types/wizard/steps/graphqlExtension.d.ts +5 -0
- package/dist/types/wizard/steps/index.d.ts +12 -0
- package/dist/types/wizard/steps/orgDomain.d.ts +5 -0
- package/dist/types/wizard/steps/prismaExtension.d.ts +5 -0
- package/dist/types/wizard/steps/projectName.d.ts +5 -0
- package/dist/types/wizard/steps/summary.d.ts +5 -0
- package/dist/types/wizard/steps/trpcExtension.d.ts +5 -0
- package/dist/types/wizard/validators.d.ts +17 -0
- package/dist/types.js +41 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/filesystem.js +173 -0
- package/dist/utils/filesystem.js.map +1 -0
- package/dist/utils/index.js +24 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.js +95 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/shell.js +113 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/validation.js +196 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/wizard/index.js +177 -0
- package/dist/wizard/index.js.map +1 -0
- package/dist/wizard/steps/apiExtension.js +33 -0
- package/dist/wizard/steps/apiExtension.js.map +1 -0
- package/dist/wizard/steps/appDisplayName.js +53 -0
- package/dist/wizard/steps/appDisplayName.js.map +1 -0
- package/dist/wizard/steps/devcontainerExtension.js +78 -0
- package/dist/wizard/steps/devcontainerExtension.js.map +1 -0
- package/dist/wizard/steps/graphqlExtension.js +37 -0
- package/dist/wizard/steps/graphqlExtension.js.map +1 -0
- package/dist/wizard/steps/index.js +25 -0
- package/dist/wizard/steps/index.js.map +1 -0
- package/dist/wizard/steps/orgDomain.js +40 -0
- package/dist/wizard/steps/orgDomain.js.map +1 -0
- package/dist/wizard/steps/prismaExtension.js +33 -0
- package/dist/wizard/steps/prismaExtension.js.map +1 -0
- package/dist/wizard/steps/projectName.js +40 -0
- package/dist/wizard/steps/projectName.js.map +1 -0
- package/dist/wizard/steps/summary.js +107 -0
- package/dist/wizard/steps/summary.js.map +1 -0
- package/dist/wizard/steps/trpcExtension.js +37 -0
- package/dist/wizard/steps/trpcExtension.js.map +1 -0
- package/dist/wizard/validators.js +35 -0
- package/dist/wizard/validators.js.map +1 -0
- package/package.json +6 -19
- package/README.md +0 -110
- package/dist/generators/init.js +0 -268
- package/dist/generators/init.js.map +0 -1
- package/dist/generators/utils.js +0 -682
- package/dist/generators/utils.js.map +0 -1
- package/dist/scripts/configure-react-native-monorepo.js +0 -144
- package/dist/scripts/configure-react-native-monorepo.js.map +0 -1
- package/dist/template/.devcontainer/Dockerfile +0 -26
- package/dist/template/.devcontainer/devcontainer.json +0 -113
- package/dist/template/.devcontainer/docker-compose.yml +0 -59
- package/dist/template/.devcontainer/figma-mcp.sh +0 -32
- package/dist/template/.devcontainer/gitignore.template +0 -2
- package/dist/template/.devcontainer/setup.sh +0 -45
- package/dist/template/DOCKER.md +0 -0
- package/dist/template/Dockerfile +0 -111
- package/dist/template/README.md +0 -233
- package/dist/template/docker/nginx/prod.conf +0 -238
- package/dist/template/docker/nginx.conf +0 -131
- package/dist/template/docker/postgres/init.sql +0 -41
- package/dist/template/docker/prometheus/prometheus.yml +0 -52
- package/dist/template/docker-compose.prod.yml +0 -146
- package/dist/template/docker-compose.yml +0 -143
- package/dist/template/dockerignore.template +0 -151
- package/dist/template/env.example.template +0 -36
- package/dist/template/gitignore.template +0 -56
- package/dist/template/jest.config.js +0 -20
- package/dist/template/mcp.json.template +0 -8
- package/dist/template/package.json +0 -45
- package/dist/template/packages/api/README.md +0 -510
- package/dist/template/packages/api/__tests__/api.test.ts +0 -26
- package/dist/template/packages/api/env.example.template +0 -6
- package/dist/template/packages/api/gitignore.template +0 -35
- package/dist/template/packages/api/jest.config.js +0 -23
- package/dist/template/packages/api/jest.setup.js +0 -9
- package/dist/template/packages/api/package.json +0 -66
- package/dist/template/packages/api/src/context.ts +0 -52
- package/dist/template/packages/api/src/controllers/TestController.ts +0 -0
- package/dist/template/packages/api/src/graphql/builder.ts +0 -75
- package/dist/template/packages/api/src/graphql/generated.ts +0 -64
- package/dist/template/packages/api/src/graphql/index.ts +0 -75
- package/dist/template/packages/api/src/graphql/types/index.ts +0 -44
- package/dist/template/packages/api/src/graphql/types/test.ts +0 -245
- package/dist/template/packages/api/src/index.ts +0 -26
- package/dist/template/packages/api/src/lib/database.ts +0 -23
- package/dist/template/packages/api/src/router/index.ts +0 -163
- package/dist/template/packages/api/src/routers/test.ts +0 -161
- package/dist/template/packages/api/src/server.ts +0 -68
- package/dist/template/packages/api/src/trpc.ts +0 -28
- package/dist/template/packages/api/tsconfig.json +0 -44
- package/dist/template/packages/database/README.md +0 -162
- package/dist/template/packages/database/gitignore.template +0 -41
- package/dist/template/packages/database/package.json +0 -49
- package/dist/template/packages/database/prisma/seed.ts +0 -64
- package/dist/template/packages/database/schema.prisma +0 -107
- package/dist/template/packages/database/src/index.ts +0 -15
- package/dist/template/packages/database/src/validators.ts +0 -10
- package/dist/template/packages/database/tsconfig.json +0 -18
- package/dist/template/packages/mobile/README.md +0 -86
- package/dist/template/packages/mobile/__tests__/App.test.tsx +0 -156
- package/dist/template/packages/mobile/__tests__/components.test.tsx +0 -300
- package/dist/template/packages/mobile/app.json +0 -5
- package/dist/template/packages/mobile/babel.config.js +0 -10
- package/dist/template/packages/mobile/gitignore.template +0 -73
- package/dist/template/packages/mobile/index.js +0 -6
- package/dist/template/packages/mobile/jest.config.js +0 -21
- package/dist/template/packages/mobile/jest.setup.js +0 -12
- package/dist/template/packages/mobile/metro.config.js +0 -36
- package/dist/template/packages/mobile/package.json +0 -60
- package/dist/template/packages/mobile/src/App.tsx +0 -8
- package/dist/template/packages/mobile/src/utils/trpc.ts +0 -7
- package/dist/template/packages/mobile/tsconfig.json +0 -28
- package/dist/template/packages/shared/README.md +0 -135
- package/dist/template/packages/shared/__tests__/shared.test.ts +0 -51
- package/dist/template/packages/shared/gitignore.template +0 -35
- package/dist/template/packages/shared/jest.config.js +0 -22
- package/dist/template/packages/shared/package.json +0 -68
- package/dist/template/packages/shared/src/components/App.tsx +0 -57
- package/dist/template/packages/shared/src/components/HelloWorld.tsx +0 -531
- package/dist/template/packages/shared/src/components/index.ts +0 -1
- package/dist/template/packages/shared/src/graphql/client.ts +0 -34
- package/dist/template/packages/shared/src/index.ts +0 -22
- package/dist/template/packages/shared/src/navigation/AppRouter.tsx +0 -565
- package/dist/template/packages/shared/src/trpc/client.ts +0 -44
- package/dist/template/packages/shared/tsconfig.json +0 -22
- package/dist/template/packages/web/README.md +0 -131
- package/dist/template/packages/web/__tests__/App.test.tsx +0 -342
- package/dist/template/packages/web/__tests__/components.test.tsx +0 -564
- package/dist/template/packages/web/gitignore.template +0 -35
- package/dist/template/packages/web/index.html +0 -13
- package/dist/template/packages/web/jest.config.js +0 -27
- package/dist/template/packages/web/jest.setup.js +0 -24
- package/dist/template/packages/web/package.json +0 -69
- package/dist/template/packages/web/src/App.tsx +0 -14
- package/dist/template/packages/web/src/components/TestDemo.tsx +0 -164
- package/dist/template/packages/web/src/main.tsx +0 -25
- package/dist/template/packages/web/src/utils/trpc.ts +0 -7
- package/dist/template/packages/web/tsconfig.json +0 -26
- package/dist/template/packages/web/vite.config.ts +0 -98
- package/dist/template/setup.sh +0 -30
- package/dist/template/tsconfig.json +0 -22
- package/dist/template/yarnrc.yml.template +0 -4
- package/dist/types/generators/init.d.ts +0 -5
- package/dist/types/generators/utils.d.ts +0 -45
- package/dist/types/scripts/configure-react-native-monorepo.d.ts +0 -23
- package/template/.devcontainer/Dockerfile +0 -26
- package/template/.devcontainer/devcontainer.json +0 -113
- package/template/.devcontainer/docker-compose.yml +0 -59
- package/template/.devcontainer/figma-mcp.sh +0 -32
- package/template/.devcontainer/setup.sh +0 -45
- package/template/.dockerignore +0 -151
- package/template/.env.example +0 -36
- package/template/.env.production +0 -56
- package/template/DOCKER.md +0 -0
- package/template/Dockerfile +0 -111
- package/template/README.md +0 -233
- package/template/docker/nginx/prod.conf +0 -238
- package/template/docker/nginx.conf +0 -131
- package/template/docker/postgres/init.sql +0 -41
- package/template/docker/prometheus/prometheus.yml +0 -52
- package/template/docker-compose.prod.yml +0 -146
- package/template/docker-compose.yml +0 -143
- package/template/jest.config.js +0 -20
- package/template/package.json +0 -45
- package/template/packages/api/.env.example +0 -6
- package/template/packages/api/README.md +0 -510
- package/template/packages/api/__tests__/api.test.ts +0 -26
- package/template/packages/api/jest.config.js +0 -23
- package/template/packages/api/jest.setup.js +0 -9
- package/template/packages/api/package.json +0 -66
- package/template/packages/api/src/context.ts +0 -52
- package/template/packages/api/src/controllers/TestController.ts +0 -0
- package/template/packages/api/src/graphql/builder.ts +0 -75
- package/template/packages/api/src/graphql/generated.ts +0 -64
- package/template/packages/api/src/graphql/index.ts +0 -75
- package/template/packages/api/src/graphql/types/index.ts +0 -44
- package/template/packages/api/src/graphql/types/test.ts +0 -245
- package/template/packages/api/src/index.ts +0 -26
- package/template/packages/api/src/lib/database.ts +0 -23
- package/template/packages/api/src/router/index.ts +0 -163
- package/template/packages/api/src/routers/test.ts +0 -161
- package/template/packages/api/src/server.ts +0 -68
- package/template/packages/api/src/trpc.ts +0 -28
- package/template/packages/api/tsconfig.json +0 -44
- package/template/packages/database/README.md +0 -162
- package/template/packages/database/package.json +0 -49
- package/template/packages/database/prisma/seed.ts +0 -64
- package/template/packages/database/schema.prisma +0 -107
- package/template/packages/database/src/index.ts +0 -15
- package/template/packages/database/src/validators.ts +0 -10
- package/template/packages/database/tsconfig.json +0 -18
- package/template/packages/mobile/README.md +0 -86
- package/template/packages/mobile/__tests__/App.test.tsx +0 -156
- package/template/packages/mobile/__tests__/components.test.tsx +0 -300
- package/template/packages/mobile/app.json +0 -5
- package/template/packages/mobile/babel.config.js +0 -26
- package/template/packages/mobile/index.js +0 -8
- package/template/packages/mobile/jest.config.js +0 -21
- package/template/packages/mobile/jest.setup.js +0 -12
- package/template/packages/mobile/metro.config.js +0 -36
- package/template/packages/mobile/package.json +0 -60
- package/template/packages/mobile/src/App.tsx +0 -8
- package/template/packages/mobile/src/utils/trpc.ts +0 -7
- package/template/packages/mobile/tsconfig.json +0 -28
- package/template/packages/shared/README.md +0 -135
- package/template/packages/shared/__tests__/shared.test.ts +0 -51
- package/template/packages/shared/jest.config.js +0 -22
- package/template/packages/shared/package.json +0 -68
- package/template/packages/shared/src/components/App.tsx +0 -57
- package/template/packages/shared/src/components/HelloWorld.tsx +0 -531
- package/template/packages/shared/src/components/index.ts +0 -1
- package/template/packages/shared/src/graphql/client.ts +0 -34
- package/template/packages/shared/src/index.ts +0 -25
- package/template/packages/shared/src/navigation/AppRouter.tsx +0 -565
- package/template/packages/shared/src/trpc/client.ts +0 -44
- package/template/packages/shared/src/unistyles.ts +0 -50
- package/template/packages/shared/tsconfig.json +0 -22
- package/template/packages/web/README.md +0 -131
- package/template/packages/web/__tests__/App.test.tsx +0 -342
- package/template/packages/web/__tests__/components.test.tsx +0 -564
- package/template/packages/web/index.html +0 -13
- package/template/packages/web/jest.config.js +0 -27
- package/template/packages/web/jest.setup.js +0 -24
- package/template/packages/web/package.json +0 -69
- package/template/packages/web/src/App.tsx +0 -14
- package/template/packages/web/src/components/TestDemo.tsx +0 -164
- package/template/packages/web/src/main.tsx +0 -27
- package/template/packages/web/src/utils/trpc.ts +0 -7
- package/template/packages/web/tsconfig.json +0 -26
- package/template/packages/web/vite.config.ts +0 -114
- package/template/setup.sh +0 -30
- package/template/tsconfig.json +0 -22
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Devcontainer extension generator
|
|
4
|
+
*
|
|
5
|
+
* Creates a development container setup with optional services:
|
|
6
|
+
* - Base: Node.js, Yarn, Expo CLI (always included)
|
|
7
|
+
* - Optional: PostgreSQL database
|
|
8
|
+
* - Optional: Redis cache
|
|
9
|
+
* - Optional: Headless Chrome for browser automation
|
|
10
|
+
* - Optional: Claude Code with MCP servers
|
|
11
|
+
*/
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.applyDevcontainerExtension = applyDevcontainerExtension;
|
|
17
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
18
|
+
const path_1 = __importDefault(require("path"));
|
|
19
|
+
const logger_1 = require("../../utils/logger");
|
|
20
|
+
/**
|
|
21
|
+
* Normalize devcontainer config from boolean or object
|
|
22
|
+
*/
|
|
23
|
+
function normalizeDevcontainerConfig(config) {
|
|
24
|
+
if (typeof config === 'boolean') {
|
|
25
|
+
// If just --with-devcontainer flag was used, enable all services
|
|
26
|
+
return {
|
|
27
|
+
enabled: config,
|
|
28
|
+
postgres: config,
|
|
29
|
+
redis: config,
|
|
30
|
+
chrome: config,
|
|
31
|
+
claudeCode: config,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return config;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Apply devcontainer extension to a project
|
|
38
|
+
*/
|
|
39
|
+
async function applyDevcontainerExtension(projectPath, data, devcontainerConfig) {
|
|
40
|
+
// Normalize config - default to all services if not specified
|
|
41
|
+
const config = normalizeDevcontainerConfig(devcontainerConfig ?? true);
|
|
42
|
+
if (!config.enabled) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
logger_1.logger.info('Creating devcontainer configuration...');
|
|
46
|
+
const devcontainerDir = path_1.default.join(projectPath, '.devcontainer');
|
|
47
|
+
await fs_extra_1.default.ensureDir(devcontainerDir);
|
|
48
|
+
// Create all devcontainer files
|
|
49
|
+
const tasks = [
|
|
50
|
+
createDockerfile(devcontainerDir, config),
|
|
51
|
+
createDockerCompose(devcontainerDir, data, config),
|
|
52
|
+
createDevcontainerJson(devcontainerDir, data, config),
|
|
53
|
+
createSetupScript(devcontainerDir, data, config),
|
|
54
|
+
];
|
|
55
|
+
// Only create Claude setup script if Claude Code is enabled
|
|
56
|
+
if (config.claudeCode) {
|
|
57
|
+
tasks.push(createClaudeSetupScript(devcontainerDir));
|
|
58
|
+
}
|
|
59
|
+
await Promise.all(tasks);
|
|
60
|
+
logger_1.logger.success('Devcontainer configuration created');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Create the Dockerfile
|
|
64
|
+
*/
|
|
65
|
+
async function createDockerfile(devcontainerDir, config) {
|
|
66
|
+
const aptPackages = ['git', 'curl'];
|
|
67
|
+
// Add postgresql-client only if postgres is enabled
|
|
68
|
+
if (config.postgres) {
|
|
69
|
+
aptPackages.push('postgresql-client');
|
|
70
|
+
}
|
|
71
|
+
const globalPackages = ['@expo/cli'];
|
|
72
|
+
// Add claude-code if enabled
|
|
73
|
+
if (config.claudeCode) {
|
|
74
|
+
globalPackages.push('@anthropic-ai/claude-code');
|
|
75
|
+
}
|
|
76
|
+
const claudeCodeSetup = config.claudeCode
|
|
77
|
+
? `
|
|
78
|
+
# Create Claude Code data directory (volume mount point)
|
|
79
|
+
RUN mkdir -p /home/node/.claude-code
|
|
80
|
+
`
|
|
81
|
+
: '';
|
|
82
|
+
const content = `FROM node:20-bullseye
|
|
83
|
+
|
|
84
|
+
# Install additional tools
|
|
85
|
+
RUN apt-get update && apt-get install -y \\
|
|
86
|
+
${aptPackages.join(' \\\n ')} \\
|
|
87
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
88
|
+
|
|
89
|
+
# Enable corepack for yarn
|
|
90
|
+
RUN corepack enable
|
|
91
|
+
|
|
92
|
+
# Install global tools
|
|
93
|
+
RUN npm install -g ${globalPackages.join(' ')}
|
|
94
|
+
|
|
95
|
+
# Set up git
|
|
96
|
+
RUN git config --global init.defaultBranch main
|
|
97
|
+
|
|
98
|
+
# Create workspace directory
|
|
99
|
+
RUN mkdir -p /workspace
|
|
100
|
+
WORKDIR /workspace
|
|
101
|
+
RUN chown -R node:node /workspace
|
|
102
|
+
|
|
103
|
+
# Switch to node user
|
|
104
|
+
USER node
|
|
105
|
+
${claudeCodeSetup}`;
|
|
106
|
+
await fs_extra_1.default.writeFile(path_1.default.join(devcontainerDir, 'Dockerfile'), content);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Create docker-compose.yml
|
|
110
|
+
*/
|
|
111
|
+
async function createDockerCompose(devcontainerDir, data, config) {
|
|
112
|
+
const dbName = data.projectName.replace(/-/g, '_') + '_db';
|
|
113
|
+
const services = [];
|
|
114
|
+
const volumes = ['node_modules'];
|
|
115
|
+
const appDependsOn = [];
|
|
116
|
+
const appEnv = [
|
|
117
|
+
'NODE_ENV: development',
|
|
118
|
+
];
|
|
119
|
+
const appVolumes = [
|
|
120
|
+
'../:/workspace:cached',
|
|
121
|
+
'node_modules:/workspace/node_modules',
|
|
122
|
+
];
|
|
123
|
+
// PostgreSQL service
|
|
124
|
+
if (config.postgres) {
|
|
125
|
+
services.push(` # PostgreSQL Database
|
|
126
|
+
postgres:
|
|
127
|
+
image: postgres:15-alpine
|
|
128
|
+
environment:
|
|
129
|
+
POSTGRES_DB: ${dbName}
|
|
130
|
+
POSTGRES_USER: postgres
|
|
131
|
+
POSTGRES_PASSWORD: postgres
|
|
132
|
+
ports:
|
|
133
|
+
- "5432:5432"
|
|
134
|
+
volumes:
|
|
135
|
+
- postgres_data:/var/lib/postgresql/data
|
|
136
|
+
healthcheck:
|
|
137
|
+
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
138
|
+
interval: 5s
|
|
139
|
+
timeout: 5s
|
|
140
|
+
retries: 5
|
|
141
|
+
`);
|
|
142
|
+
volumes.push('postgres_data');
|
|
143
|
+
appDependsOn.push(` postgres:
|
|
144
|
+
condition: service_healthy`);
|
|
145
|
+
appEnv.push(`DATABASE_URL: postgresql://postgres:postgres@postgres:5432/${dbName}`);
|
|
146
|
+
}
|
|
147
|
+
// Redis service
|
|
148
|
+
if (config.redis) {
|
|
149
|
+
services.push(` # Redis Cache
|
|
150
|
+
redis:
|
|
151
|
+
image: redis:7-alpine
|
|
152
|
+
ports:
|
|
153
|
+
- "6379:6379"
|
|
154
|
+
volumes:
|
|
155
|
+
- redis_data:/data
|
|
156
|
+
healthcheck:
|
|
157
|
+
test: ["CMD", "redis-cli", "ping"]
|
|
158
|
+
interval: 5s
|
|
159
|
+
timeout: 5s
|
|
160
|
+
retries: 5
|
|
161
|
+
`);
|
|
162
|
+
volumes.push('redis_data');
|
|
163
|
+
appDependsOn.push(` redis:
|
|
164
|
+
condition: service_healthy`);
|
|
165
|
+
appEnv.push('REDIS_URL: redis://redis:6379');
|
|
166
|
+
}
|
|
167
|
+
// Claude Code config
|
|
168
|
+
if (config.claudeCode) {
|
|
169
|
+
appEnv.push('CLAUDE_CONFIG_DIR: /home/node/.claude-code');
|
|
170
|
+
appVolumes.push('claude_data:/home/node/.claude-code');
|
|
171
|
+
volumes.push('claude_data');
|
|
172
|
+
}
|
|
173
|
+
// Chrome service
|
|
174
|
+
if (config.chrome) {
|
|
175
|
+
services.push(` # Headless Chrome Browser (for Playwright)
|
|
176
|
+
chrome:
|
|
177
|
+
image: browserless/chrome:latest
|
|
178
|
+
environment:
|
|
179
|
+
- CONNECTION_TIMEOUT=600000
|
|
180
|
+
- MAX_CONCURRENT_SESSIONS=10
|
|
181
|
+
- ENABLE_DEBUGGER=true
|
|
182
|
+
- PREBOOT_CHROME=true
|
|
183
|
+
ports:
|
|
184
|
+
- "3100:3000"
|
|
185
|
+
shm_size: "2gb"
|
|
186
|
+
dns:
|
|
187
|
+
- 8.8.8.8
|
|
188
|
+
- 8.8.4.4
|
|
189
|
+
extra_hosts:
|
|
190
|
+
- "localhost:host-gateway"
|
|
191
|
+
- "host.docker.internal:host-gateway"
|
|
192
|
+
healthcheck:
|
|
193
|
+
test: ["CMD", "curl", "-f", "http://localhost:3000/json/version"]
|
|
194
|
+
interval: 10s
|
|
195
|
+
timeout: 5s
|
|
196
|
+
retries: 3
|
|
197
|
+
`);
|
|
198
|
+
appEnv.push('BROWSER_WS_ENDPOINT: ws://chrome:3000');
|
|
199
|
+
}
|
|
200
|
+
// Build the depends_on section
|
|
201
|
+
const dependsOnSection = appDependsOn.length > 0
|
|
202
|
+
? ` depends_on:
|
|
203
|
+
${appDependsOn.join('\n')}`
|
|
204
|
+
: '';
|
|
205
|
+
// Build app service
|
|
206
|
+
const appService = ` # Development Service (for devcontainer)
|
|
207
|
+
app:
|
|
208
|
+
build:
|
|
209
|
+
context: .
|
|
210
|
+
dockerfile: Dockerfile
|
|
211
|
+
environment:
|
|
212
|
+
${appEnv.join('\n ')}
|
|
213
|
+
ports:
|
|
214
|
+
- "3000:3000" # API server
|
|
215
|
+
- "5173:5173" # Vite dev server
|
|
216
|
+
- "8081:8081" # Metro bundler
|
|
217
|
+
- "19006:19006" # Expo dev tools
|
|
218
|
+
volumes:
|
|
219
|
+
- ${appVolumes.join('\n - ')}
|
|
220
|
+
${dependsOnSection}
|
|
221
|
+
command: sleep infinity
|
|
222
|
+
`;
|
|
223
|
+
const content = `services:
|
|
224
|
+
${services.join('\n')}
|
|
225
|
+
${appService}
|
|
226
|
+
volumes:
|
|
227
|
+
${volumes.map(v => ` ${v}:`).join('\n')}
|
|
228
|
+
`;
|
|
229
|
+
await fs_extra_1.default.writeFile(path_1.default.join(devcontainerDir, 'docker-compose.yml'), content);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Create devcontainer.json
|
|
233
|
+
*/
|
|
234
|
+
async function createDevcontainerJson(devcontainerDir, data, config) {
|
|
235
|
+
// Build forward ports list
|
|
236
|
+
const forwardPorts = [
|
|
237
|
+
3000, // API server
|
|
238
|
+
5173, // Vite dev server
|
|
239
|
+
8081, // Metro Bundler
|
|
240
|
+
19006, // Expo dev tools
|
|
241
|
+
];
|
|
242
|
+
const portsAttributes = {
|
|
243
|
+
'3000': {
|
|
244
|
+
label: 'API Server',
|
|
245
|
+
onAutoForward: 'notify',
|
|
246
|
+
},
|
|
247
|
+
'5173': {
|
|
248
|
+
label: 'Vite Dev Server',
|
|
249
|
+
onAutoForward: 'openBrowser',
|
|
250
|
+
},
|
|
251
|
+
'8081': {
|
|
252
|
+
label: 'Metro Bundler',
|
|
253
|
+
onAutoForward: 'notify',
|
|
254
|
+
},
|
|
255
|
+
'19006': {
|
|
256
|
+
label: 'Expo Dev Tools',
|
|
257
|
+
onAutoForward: 'openBrowser',
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
if (config.postgres) {
|
|
261
|
+
forwardPorts.push(5432);
|
|
262
|
+
portsAttributes['5432'] = {
|
|
263
|
+
label: 'PostgreSQL Database',
|
|
264
|
+
onAutoForward: 'silent',
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
if (config.redis) {
|
|
268
|
+
forwardPorts.push(6379);
|
|
269
|
+
portsAttributes['6379'] = {
|
|
270
|
+
label: 'Redis Cache',
|
|
271
|
+
onAutoForward: 'silent',
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
if (config.chrome) {
|
|
275
|
+
forwardPorts.push(3100);
|
|
276
|
+
portsAttributes['3100'] = {
|
|
277
|
+
label: 'Browserless Chrome',
|
|
278
|
+
onAutoForward: 'silent',
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
const devcontainerJson = {
|
|
282
|
+
name: `${data.appDisplayName} Development`,
|
|
283
|
+
dockerComposeFile: 'docker-compose.yml',
|
|
284
|
+
service: 'app',
|
|
285
|
+
workspaceFolder: '/workspace',
|
|
286
|
+
forwardPorts,
|
|
287
|
+
portsAttributes,
|
|
288
|
+
customizations: {
|
|
289
|
+
vscode: {
|
|
290
|
+
extensions: [
|
|
291
|
+
// React Native/React development
|
|
292
|
+
'msjsdiag.vscode-react-native',
|
|
293
|
+
// TypeScript/JavaScript
|
|
294
|
+
'ms-vscode.vscode-typescript-next',
|
|
295
|
+
'dbaeumer.vscode-eslint',
|
|
296
|
+
'esbenp.prettier-vscode',
|
|
297
|
+
// General development
|
|
298
|
+
'ms-vscode.vscode-json',
|
|
299
|
+
'redhat.vscode-yaml',
|
|
300
|
+
'ms-azuretools.vscode-docker',
|
|
301
|
+
'christian-kohler.path-intellisense',
|
|
302
|
+
'formulahendry.auto-rename-tag',
|
|
303
|
+
// Testing
|
|
304
|
+
'orta.vscode-jest',
|
|
305
|
+
// Git
|
|
306
|
+
'mhutchie.git-graph',
|
|
307
|
+
'eamodio.gitlens',
|
|
308
|
+
'github.vscode-pull-request-github',
|
|
309
|
+
// AI
|
|
310
|
+
'github.copilot',
|
|
311
|
+
'github.copilot-chat',
|
|
312
|
+
],
|
|
313
|
+
settings: {
|
|
314
|
+
'terminal.integrated.defaultProfile.linux': 'bash',
|
|
315
|
+
'typescript.preferences.includePackageJsonAutoImports': 'auto',
|
|
316
|
+
'editor.formatOnSave': true,
|
|
317
|
+
'editor.defaultFormatter': 'esbenp.prettier-vscode',
|
|
318
|
+
'editor.codeActionsOnSave': {
|
|
319
|
+
'source.fixAll.eslint': 'explicit',
|
|
320
|
+
'source.organizeImports': 'explicit',
|
|
321
|
+
},
|
|
322
|
+
'files.watcherExclude': {
|
|
323
|
+
'**/node_modules/**': true,
|
|
324
|
+
'**/.git/**': true,
|
|
325
|
+
'**/dist/**': true,
|
|
326
|
+
'**/coverage/**': true,
|
|
327
|
+
},
|
|
328
|
+
'search.exclude': {
|
|
329
|
+
'**/node_modules': true,
|
|
330
|
+
'**/dist': true,
|
|
331
|
+
'**/coverage': true,
|
|
332
|
+
'**/.yarn': true,
|
|
333
|
+
},
|
|
334
|
+
'jest.jestCommandLine': 'yarn test',
|
|
335
|
+
'jest.autoRun': 'off',
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
remoteUser: 'node',
|
|
340
|
+
postCreateCommand: 'bash .devcontainer/setup.sh',
|
|
341
|
+
};
|
|
342
|
+
// Add post-start command only if Claude Code is enabled
|
|
343
|
+
if (config.claudeCode) {
|
|
344
|
+
devcontainerJson.postStartCommand = 'bash .devcontainer/setup-claude.sh';
|
|
345
|
+
}
|
|
346
|
+
await fs_extra_1.default.writeJson(path_1.default.join(devcontainerDir, 'devcontainer.json'), devcontainerJson, { spaces: 2 });
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Create setup.sh script
|
|
350
|
+
*/
|
|
351
|
+
async function createSetupScript(devcontainerDir, data, config) {
|
|
352
|
+
const dbName = data.projectName.replace(/-/g, '_') + '_db';
|
|
353
|
+
const envVars = [
|
|
354
|
+
'# API Configuration',
|
|
355
|
+
'API_PORT=3000',
|
|
356
|
+
'JWT_SECRET=change-this-in-production',
|
|
357
|
+
'',
|
|
358
|
+
'# Web Configuration',
|
|
359
|
+
'WEB_PORT=5173',
|
|
360
|
+
'',
|
|
361
|
+
'# Development Configuration',
|
|
362
|
+
'NODE_ENV=development',
|
|
363
|
+
'LOG_LEVEL=debug',
|
|
364
|
+
];
|
|
365
|
+
if (config.postgres) {
|
|
366
|
+
envVars.unshift('# Database Configuration', `DATABASE_URL=postgresql://postgres:postgres@postgres:5432/${dbName}`, `POSTGRES_DB=${dbName}`, 'POSTGRES_USER=postgres', 'POSTGRES_PASSWORD=postgres', '');
|
|
367
|
+
}
|
|
368
|
+
if (config.redis) {
|
|
369
|
+
envVars.push('', '# Redis Configuration', 'REDIS_URL=redis://redis:6379');
|
|
370
|
+
}
|
|
371
|
+
if (config.chrome) {
|
|
372
|
+
envVars.push('', '# Browserless Chrome (for Playwright)', 'BROWSER_WS_ENDPOINT=ws://chrome:3000');
|
|
373
|
+
}
|
|
374
|
+
// Build wait sections
|
|
375
|
+
const waitSections = [];
|
|
376
|
+
if (config.postgres) {
|
|
377
|
+
waitSections.push(`
|
|
378
|
+
# Wait for database to be ready
|
|
379
|
+
echo "⏳ Waiting for database to be ready..."
|
|
380
|
+
until pg_isready -h postgres -p 5432 -U postgres; do
|
|
381
|
+
echo "Database is unavailable - sleeping"
|
|
382
|
+
sleep 1
|
|
383
|
+
done
|
|
384
|
+
echo "✅ Database is ready!"`);
|
|
385
|
+
}
|
|
386
|
+
if (config.redis) {
|
|
387
|
+
waitSections.push(`
|
|
388
|
+
# Wait for Redis to be ready
|
|
389
|
+
echo "⏳ Waiting for Redis to be ready..."
|
|
390
|
+
until redis-cli -h redis ping > /dev/null 2>&1; do
|
|
391
|
+
echo "Redis is unavailable - sleeping"
|
|
392
|
+
sleep 1
|
|
393
|
+
done
|
|
394
|
+
echo "✅ Redis is ready!"`);
|
|
395
|
+
}
|
|
396
|
+
if (config.chrome) {
|
|
397
|
+
waitSections.push(`
|
|
398
|
+
# Wait for Chrome to be ready
|
|
399
|
+
echo "⏳ Waiting for Chrome browser to be ready..."
|
|
400
|
+
until curl -s http://chrome:3000/json/version > /dev/null; do
|
|
401
|
+
echo "Chrome is unavailable - sleeping"
|
|
402
|
+
sleep 1
|
|
403
|
+
done
|
|
404
|
+
echo "✅ Chrome browser is ready!"`);
|
|
405
|
+
}
|
|
406
|
+
// Claude Code setup
|
|
407
|
+
const claudeSetup = config.claudeCode
|
|
408
|
+
? `
|
|
409
|
+
# Setup Claude Code MCP servers
|
|
410
|
+
echo "🤖 Configuring Claude Code MCP servers..."
|
|
411
|
+
${config.chrome ? `
|
|
412
|
+
# Add Playwright MCP (connects to browserless chrome)
|
|
413
|
+
claude mcp add playwright --transport sse --url http://chrome:3000/playwright 2>/dev/null || true
|
|
414
|
+
` : ''}
|
|
415
|
+
# Add Serena MCP for code navigation
|
|
416
|
+
claude mcp add serena 2>/dev/null || true
|
|
417
|
+
`
|
|
418
|
+
: '';
|
|
419
|
+
// Prisma setup
|
|
420
|
+
const prismaSetup = data.hasPrisma
|
|
421
|
+
? `
|
|
422
|
+
# Generate Prisma client
|
|
423
|
+
echo "🗄️ Generating Prisma client..."
|
|
424
|
+
yarn db:generate
|
|
425
|
+
|
|
426
|
+
# Run database migrations (if any exist)
|
|
427
|
+
if [ -d "packages/database/prisma/migrations" ]; then
|
|
428
|
+
echo "🗄️ Running database migrations..."
|
|
429
|
+
yarn db:migrate
|
|
430
|
+
fi
|
|
431
|
+
`
|
|
432
|
+
: '';
|
|
433
|
+
// Available commands
|
|
434
|
+
const commands = [
|
|
435
|
+
'echo " yarn dev - Start all development servers"',
|
|
436
|
+
'echo " yarn web:dev - Start web dev server only"',
|
|
437
|
+
'echo " yarn mobile:start - Start mobile dev server only"',
|
|
438
|
+
];
|
|
439
|
+
if (data.hasApi) {
|
|
440
|
+
commands.push('echo " yarn api:dev - Start API server only"');
|
|
441
|
+
}
|
|
442
|
+
if (data.hasPrisma) {
|
|
443
|
+
commands.push('echo " yarn db:studio - Open Prisma Studio"');
|
|
444
|
+
}
|
|
445
|
+
const content = `#!/bin/bash
|
|
446
|
+
|
|
447
|
+
echo "🚀 Setting up ${data.appDisplayName} development environment..."
|
|
448
|
+
|
|
449
|
+
# Create environment file if it doesn't exist
|
|
450
|
+
if [ ! -f ".env" ]; then
|
|
451
|
+
echo "📝 Creating .env file..."
|
|
452
|
+
cat > .env << EOF
|
|
453
|
+
${envVars.join('\n')}
|
|
454
|
+
EOF
|
|
455
|
+
fi
|
|
456
|
+
${waitSections.join('\n')}
|
|
457
|
+
|
|
458
|
+
# Install dependencies
|
|
459
|
+
echo "📦 Installing dependencies..."
|
|
460
|
+
yarn install
|
|
461
|
+
${claudeSetup}${prismaSetup}
|
|
462
|
+
echo ""
|
|
463
|
+
echo "✅ Development environment is ready!"
|
|
464
|
+
echo ""
|
|
465
|
+
echo "🎉 You can now start developing your ${data.appDisplayName} application!"
|
|
466
|
+
echo ""
|
|
467
|
+
echo "Available commands:"
|
|
468
|
+
${commands.join('\n')}
|
|
469
|
+
echo ""
|
|
470
|
+
`;
|
|
471
|
+
const scriptPath = path_1.default.join(devcontainerDir, 'setup.sh');
|
|
472
|
+
await fs_extra_1.default.writeFile(scriptPath, content);
|
|
473
|
+
await fs_extra_1.default.chmod(scriptPath, 0o755);
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Create setup-claude.sh script
|
|
477
|
+
*/
|
|
478
|
+
async function createClaudeSetupScript(devcontainerDir) {
|
|
479
|
+
const content = `#!/bin/bash
|
|
480
|
+
|
|
481
|
+
# Setup Claude Code data directory in the dev container
|
|
482
|
+
# This creates a persistent volume-backed directory for all Claude Code data
|
|
483
|
+
|
|
484
|
+
echo "Setting up Claude Code data directory..."
|
|
485
|
+
|
|
486
|
+
# Create the Claude Code directory structure if it doesn't exist
|
|
487
|
+
mkdir -p /home/node/.claude-code/.claude
|
|
488
|
+
mkdir -p /home/node/.claude-code/.claude/session-env
|
|
489
|
+
mkdir -p /home/node/.claude-code/.claude/projects
|
|
490
|
+
|
|
491
|
+
# Create symlinks from default locations to the persisted volume
|
|
492
|
+
# Remove any existing files/dirs first
|
|
493
|
+
rm -rf /home/node/.claude 2>/dev/null || true
|
|
494
|
+
rm -f /home/node/.claude.json 2>/dev/null || true
|
|
495
|
+
|
|
496
|
+
# Create symlinks to the volume-backed directory
|
|
497
|
+
ln -sf /home/node/.claude-code/.claude /home/node/.claude
|
|
498
|
+
ln -sf /home/node/.claude-code/.claude.json /home/node/.claude.json 2>/dev/null || true
|
|
499
|
+
|
|
500
|
+
# Set proper permissions
|
|
501
|
+
chmod -R 700 /home/node/.claude-code 2>/dev/null || true
|
|
502
|
+
|
|
503
|
+
echo "Claude Code data directory configured at /home/node/.claude-code"
|
|
504
|
+
echo "All Claude Code data will persist across container rebuilds"
|
|
505
|
+
`;
|
|
506
|
+
const scriptPath = path_1.default.join(devcontainerDir, 'setup-claude.sh');
|
|
507
|
+
await fs_extra_1.default.writeFile(scriptPath, content);
|
|
508
|
+
await fs_extra_1.default.chmod(scriptPath, 0o755);
|
|
509
|
+
}
|
|
510
|
+
//# sourceMappingURL=devcontainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devcontainer.js","sourceRoot":"","sources":["../../../src/generators/extensions/devcontainer.ts"],"names":[],"mappings":"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"}
|