dev-env-kit 0.1.3
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/.dev-env.example.yml +71 -0
- package/LICENSE +21 -0
- package/README.md +128 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +176 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/generate.d.ts +5 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +62 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/setup.d.ts +7 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +123 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/share.d.ts +11 -0
- package/dist/commands/share.d.ts.map +1 -0
- package/dist/commands/share.js +113 -0
- package/dist/commands/share.js.map +1 -0
- package/dist/commands/snapshot.d.ts +4 -0
- package/dist/commands/snapshot.d.ts.map +1 -0
- package/dist/commands/snapshot.js +75 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/core/config/loader.d.ts +10 -0
- package/dist/core/config/loader.d.ts.map +1 -0
- package/dist/core/config/loader.js +137 -0
- package/dist/core/config/loader.js.map +1 -0
- package/dist/core/config/validator.d.ts +10 -0
- package/dist/core/config/validator.d.ts.map +1 -0
- package/dist/core/config/validator.js +63 -0
- package/dist/core/config/validator.js.map +1 -0
- package/dist/core/docker/compose-generator.d.ts +10 -0
- package/dist/core/docker/compose-generator.d.ts.map +1 -0
- package/dist/core/docker/compose-generator.js +133 -0
- package/dist/core/docker/compose-generator.js.map +1 -0
- package/dist/core/snapshot/storage.d.ts +13 -0
- package/dist/core/snapshot/storage.d.ts.map +1 -0
- package/dist/core/snapshot/storage.js +99 -0
- package/dist/core/snapshot/storage.js.map +1 -0
- package/dist/types/config.d.ts +378 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +61 -0
- package/dist/types/config.js.map +1 -0
- package/dist/utils/exec.d.ts +11 -0
- package/dist/utils/exec.d.ts.map +1 -0
- package/dist/utils/exec.js +63 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/file-ops.d.ts +10 -0
- package/dist/utils/file-ops.d.ts.map +1 -0
- package/dist/utils/file-ops.js +150 -0
- package/dist/utils/file-ops.js.map +1 -0
- package/dist/utils/load-execa.js +4 -0
- package/dist/utils/logger.d.ts +21 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +94 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/platform.d.ts +12 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +103 -0
- package/dist/utils/platform.js.map +1 -0
- package/package.json +72 -0
- package/templates/docker-compose.hbs +31 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Example Dev Environment Configuration
|
|
2
|
+
# Copy this file to .dev-env.yml and customize for your project
|
|
3
|
+
|
|
4
|
+
name: my-project
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
|
|
7
|
+
dependencies:
|
|
8
|
+
- type: npm
|
|
9
|
+
command: npm install
|
|
10
|
+
path: .
|
|
11
|
+
# - type: pip
|
|
12
|
+
# command: pip install -r requirements.txt
|
|
13
|
+
# path: ./backend
|
|
14
|
+
|
|
15
|
+
databases:
|
|
16
|
+
- type: postgresql
|
|
17
|
+
name: myapp_db
|
|
18
|
+
version: "15"
|
|
19
|
+
port: 5432
|
|
20
|
+
host: localhost
|
|
21
|
+
user: ${DB_USER} # Use environment variable
|
|
22
|
+
password: ${DB_PASSWORD} # Use environment variable
|
|
23
|
+
database: myapp
|
|
24
|
+
migrations:
|
|
25
|
+
- path: ./migrations
|
|
26
|
+
command: npm run migrate
|
|
27
|
+
seed:
|
|
28
|
+
command: npm run seed
|
|
29
|
+
|
|
30
|
+
# - type: redis
|
|
31
|
+
# version: "7"
|
|
32
|
+
# port: 6379
|
|
33
|
+
# host: localhost
|
|
34
|
+
|
|
35
|
+
services:
|
|
36
|
+
# - type: rabbitmq
|
|
37
|
+
# version: "3.12"
|
|
38
|
+
# port: 5672
|
|
39
|
+
# management_port: 15672
|
|
40
|
+
|
|
41
|
+
# Environment variables (use .env file for secrets)
|
|
42
|
+
env:
|
|
43
|
+
NODE_ENV: development
|
|
44
|
+
# Use ${VAR_NAME} syntax to reference .env variables
|
|
45
|
+
DATABASE_URL: postgresql://${DB_USER}:${DB_PASSWORD}@localhost:5432/myapp
|
|
46
|
+
# REDIS_URL: redis://localhost:6379
|
|
47
|
+
|
|
48
|
+
# Health checks to verify setup
|
|
49
|
+
health_checks:
|
|
50
|
+
- name: database
|
|
51
|
+
type: postgresql
|
|
52
|
+
connection_string: postgresql://${DB_USER}:${DB_PASSWORD}@localhost:5432/myapp
|
|
53
|
+
# - name: redis
|
|
54
|
+
# type: redis
|
|
55
|
+
# url: redis://localhost:6379
|
|
56
|
+
|
|
57
|
+
# Snapshot configuration
|
|
58
|
+
snapshot:
|
|
59
|
+
include_databases: true
|
|
60
|
+
include_volumes: true
|
|
61
|
+
exclude_paths:
|
|
62
|
+
- node_modules
|
|
63
|
+
- .git
|
|
64
|
+
- dist
|
|
65
|
+
- build
|
|
66
|
+
|
|
67
|
+
# Docker Compose generation
|
|
68
|
+
docker:
|
|
69
|
+
enabled: true
|
|
70
|
+
output_file: docker-compose.yml
|
|
71
|
+
network_name: dev-network
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Shabnam
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# envkit
|
|
2
|
+
|
|
3
|
+
A CLI for local development environments: one-command setup, environment snapshots, and Docker Compose generation from a single config file.
|
|
4
|
+
|
|
5
|
+
**Requires:** Node.js >= 16
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
- **Setup** — Reads your project’s `.dev-env.yml`, installs dependencies, runs database migrations and seed commands.
|
|
10
|
+
- **Generate** — Produces `docker-compose.yml` from the same config (databases, services, network).
|
|
11
|
+
- **Snapshots** — Save and list copies of your current config under `.devkit/snapshots/<name>/` for later restore.
|
|
12
|
+
- **Share** — Export sanitized config (no secrets) or import a shared config file.
|
|
13
|
+
|
|
14
|
+
Config is one YAML file plus optional `.env` for secrets; you reference variables with `${VAR_NAME}`. The CLI finds the project root from the current directory (looks for `.dev-env.yml` or `package.json`).
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install -g dev-env-kit
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or run without installing: `npx dev-env-kit <command>`
|
|
23
|
+
|
|
24
|
+
## How to use
|
|
25
|
+
|
|
26
|
+
### 1. Configure your project
|
|
27
|
+
|
|
28
|
+
In your project root, add a `.dev-env.yml` that describes your dev environment (dependencies, databases, services). Copy the example file to `.dev-env.yml`, then edit:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
cp .dev-env.example.yml .dev-env.yml
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
See [.dev-env.example.yml](./.dev-env.example.yml) for all options. Put secrets in a `.env` file and reference them in the config with `${VAR_NAME}`.
|
|
35
|
+
|
|
36
|
+
### 2. Set up the environment
|
|
37
|
+
|
|
38
|
+
From the project root (or any subdirectory):
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
envkit setup
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
This installs dependencies, runs database migrations, and runs seed commands according to your config. Options:
|
|
45
|
+
|
|
46
|
+
| Option | Description |
|
|
47
|
+
|---------------|--------------------------------------|
|
|
48
|
+
| `--skip-deps` | Skip installing dependencies |
|
|
49
|
+
| `--skip-db` | Skip database migrations and seed |
|
|
50
|
+
| `--dry-run` | Show what would run, without running |
|
|
51
|
+
|
|
52
|
+
### 3. Generate Docker Compose
|
|
53
|
+
|
|
54
|
+
To create a `docker-compose.yml` from your `.dev-env.yml` (when `docker.enabled` is true):
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
envkit generate
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Use `-o <file>` to write to a different file, e.g. `envkit generate -o docker-compose.dev.yml`.
|
|
61
|
+
|
|
62
|
+
### 4. Snapshots
|
|
63
|
+
|
|
64
|
+
Save the current config and metadata under `.devkit/snapshots/<name>/`:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
envkit snapshot create [name]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
If you omit `name`, a timestamped name is used. List snapshots:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
envkit snapshot list
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Restore a snapshot to `.dev-env.yml`: `envkit snapshot restore <name>`.
|
|
77
|
+
|
|
78
|
+
### 5. Share (export / import)
|
|
79
|
+
|
|
80
|
+
Export a sanitized copy of your config (passwords and secrets replaced with placeholders like `${DB_PASSWORD}`):
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
envkit share export
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Writes to `dev-env.shared.yml` by default. Use `-o <file>` to choose another path.
|
|
87
|
+
|
|
88
|
+
Import a shared config file into your project (validates and writes to `.dev-env.yml` by default):
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
envkit share import path/to/dev-env.shared.yml
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Use `-o <file>` to write to a different path.
|
|
95
|
+
|
|
96
|
+
### 6. Global options
|
|
97
|
+
|
|
98
|
+
- `-v, --verbose` — more log output
|
|
99
|
+
- `-q, --quiet` — less output
|
|
100
|
+
|
|
101
|
+
Example: `envkit -q setup`
|
|
102
|
+
|
|
103
|
+
### Quick reference
|
|
104
|
+
|
|
105
|
+
| Command | Description |
|
|
106
|
+
|-----------------------------|------------------------------------------|
|
|
107
|
+
| `envkit setup` | Install deps, run migrations & seed |
|
|
108
|
+
| `envkit generate` | Generate docker-compose from config |
|
|
109
|
+
| `envkit snapshot create [name]` | Save current config to a snapshot |
|
|
110
|
+
| `envkit snapshot list` | List snapshots |
|
|
111
|
+
| `envkit snapshot restore <name>` | Restore a snapshot to .dev-env.yml |
|
|
112
|
+
| `envkit share export` | Export sanitized config (-o file) |
|
|
113
|
+
| `envkit share import <file>` | Import shared config (-o file) |
|
|
114
|
+
|
|
115
|
+
Use `envkit --help` or `envkit <command> --help` for details.
|
|
116
|
+
|
|
117
|
+
## Testing
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm install
|
|
121
|
+
npm test
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Optional: `npm test -- --coverage` for a coverage report.
|
|
125
|
+
|
|
126
|
+
## License
|
|
127
|
+
|
|
128
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const commander_1 = require("commander");
|
|
38
|
+
const logger_1 = require("../utils/logger");
|
|
39
|
+
const platform_1 = require("../utils/platform");
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const packageJsonPath = path.join(__dirname, '../../package.json');
|
|
43
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
44
|
+
const version = packageJson.version;
|
|
45
|
+
const setup_1 = require("../commands/setup");
|
|
46
|
+
const generate_1 = require("../commands/generate");
|
|
47
|
+
const snapshot_1 = require("../commands/snapshot");
|
|
48
|
+
const share_1 = require("../commands/share");
|
|
49
|
+
const program = new commander_1.Command();
|
|
50
|
+
program
|
|
51
|
+
.name('envkit')
|
|
52
|
+
.description('Local Dev Environment Manager - One-command project setup and environment management')
|
|
53
|
+
.version(version);
|
|
54
|
+
program
|
|
55
|
+
.option('-v, --verbose', 'Enable verbose logging')
|
|
56
|
+
.option('-q, --quiet', 'Suppress output')
|
|
57
|
+
.hook('preAction', (thisCommand) => {
|
|
58
|
+
if (thisCommand.opts().verbose) {
|
|
59
|
+
logger_1.logger.setLevel(0);
|
|
60
|
+
}
|
|
61
|
+
else if (thisCommand.opts().quiet) {
|
|
62
|
+
logger_1.logger.setLevel(3);
|
|
63
|
+
}
|
|
64
|
+
const os = (0, platform_1.detectOS)();
|
|
65
|
+
logger_1.logger.debug(`Running on ${os}`);
|
|
66
|
+
});
|
|
67
|
+
program
|
|
68
|
+
.command('setup')
|
|
69
|
+
.description('Set up the development environment')
|
|
70
|
+
.option('--skip-deps', 'Skip dependency installation')
|
|
71
|
+
.option('--skip-db', 'Skip database setup')
|
|
72
|
+
.option('--dry-run', 'Preview changes without executing')
|
|
73
|
+
.action(async (options) => {
|
|
74
|
+
try {
|
|
75
|
+
await (0, setup_1.runSetup)({
|
|
76
|
+
skipDeps: options.skipDeps,
|
|
77
|
+
skipDb: options.skipDb,
|
|
78
|
+
dryRun: options.dryRun,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
logger_1.logger.error(err.message ?? 'Setup failed');
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const snapshotCommand = program
|
|
87
|
+
.command('snapshot')
|
|
88
|
+
.description('Manage environment snapshots');
|
|
89
|
+
snapshotCommand
|
|
90
|
+
.command('create')
|
|
91
|
+
.description('Create a new snapshot')
|
|
92
|
+
.argument('[name]', 'Snapshot name')
|
|
93
|
+
.action(async (name) => {
|
|
94
|
+
try {
|
|
95
|
+
await (0, snapshot_1.runSnapshotCreate)(name);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
logger_1.logger.error(err.message ?? 'Snapshot create failed');
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
snapshotCommand
|
|
103
|
+
.command('list')
|
|
104
|
+
.description('List all snapshots')
|
|
105
|
+
.action(async () => {
|
|
106
|
+
try {
|
|
107
|
+
await (0, snapshot_1.runSnapshotList)();
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
logger_1.logger.error(err.message ?? 'Snapshot list failed');
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
snapshotCommand
|
|
115
|
+
.command('restore')
|
|
116
|
+
.description('Restore .dev-env.yml from a snapshot')
|
|
117
|
+
.argument('<name>', 'Snapshot name')
|
|
118
|
+
.action(async (name) => {
|
|
119
|
+
try {
|
|
120
|
+
await (0, snapshot_1.runSnapshotRestore)(name);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
logger_1.logger.error(err.message ?? 'Snapshot restore failed');
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
program
|
|
128
|
+
.command('generate')
|
|
129
|
+
.description('Generate docker-compose.yml from configuration')
|
|
130
|
+
.option('-o, --output <file>', 'Output file path', 'docker-compose.yml')
|
|
131
|
+
.action(async (options) => {
|
|
132
|
+
try {
|
|
133
|
+
await (0, generate_1.runGenerate)({ output: options.output });
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
logger_1.logger.error(err.message ?? 'Generate failed');
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
const shareCommand = program
|
|
141
|
+
.command('share')
|
|
142
|
+
.description('Share development environments');
|
|
143
|
+
shareCommand
|
|
144
|
+
.command('export')
|
|
145
|
+
.description('Export sanitized configuration for sharing (no secrets)')
|
|
146
|
+
.option('-o, --output <file>', 'Output file path', 'dev-env.shared.yml')
|
|
147
|
+
.action(async (options) => {
|
|
148
|
+
try {
|
|
149
|
+
await (0, share_1.runShareExport)({ output: options.output });
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
logger_1.logger.error(err.message ?? 'Share export failed');
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
shareCommand
|
|
157
|
+
.command('import')
|
|
158
|
+
.description('Import shared configuration into project')
|
|
159
|
+
.argument('<file>', 'Configuration file to import')
|
|
160
|
+
.option('-o, --output <file>', 'Output file path', '.dev-env.yml')
|
|
161
|
+
.action(async (file, options) => {
|
|
162
|
+
try {
|
|
163
|
+
await (0, share_1.runShareImport)(file, { output: options.output });
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
logger_1.logger.error(err.message ?? 'Share import failed');
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
program.parseAsync().catch((error) => {
|
|
171
|
+
if (error.code !== 'commander.helpDisplayed' && error.code !== 'commander.help') {
|
|
172
|
+
logger_1.logger.error(error.message || 'An error occurred');
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAsB,WAAW,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB9E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runGenerate = runGenerate;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const loader_1 = require("../core/config/loader");
|
|
39
|
+
const validator_1 = require("../core/config/validator");
|
|
40
|
+
const compose_generator_1 = require("../core/docker/compose-generator");
|
|
41
|
+
const logger_1 = require("../utils/logger");
|
|
42
|
+
const file_ops_1 = require("../utils/file-ops");
|
|
43
|
+
function getTemplatesDir() {
|
|
44
|
+
return path.resolve(__dirname, '../../templates');
|
|
45
|
+
}
|
|
46
|
+
async function runGenerate(options = {}) {
|
|
47
|
+
const outputFile = options.output ?? 'docker-compose.yml';
|
|
48
|
+
const projectRoot = await (0, loader_1.findProjectRoot)(process.cwd());
|
|
49
|
+
logger_1.logger.debug(`Project root: ${projectRoot}`);
|
|
50
|
+
const config = await (0, loader_1.loadConfig)(projectRoot);
|
|
51
|
+
(0, validator_1.checkConfigWarnings)(config);
|
|
52
|
+
if (config.docker?.enabled === false) {
|
|
53
|
+
logger_1.logger.info('Docker generation is disabled in config (docker.enabled: false).');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const templatesDir = getTemplatesDir();
|
|
57
|
+
const content = (0, compose_generator_1.generateComposeContent)(config, templatesDir);
|
|
58
|
+
const outPath = path.resolve(projectRoot, outputFile);
|
|
59
|
+
await (0, file_ops_1.writeFile)(outPath, content);
|
|
60
|
+
logger_1.logger.success(`Wrote ${outputFile}`);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,kCAoBC;AAnCD,2CAA6B;AAC7B,kDAAoE;AACpE,wDAA+D;AAC/D,wEAA0E;AAC1E,4CAAyC;AACzC,gDAA8C;AAM9C,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACpD,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,UAA2B,EAAE;IAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,oBAAoB,CAAC;IAE1D,MAAM,WAAW,GAAG,MAAM,IAAA,wBAAe,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,eAAM,CAAC,KAAK,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,EAAC,WAAW,CAAC,CAAC;IAC7C,IAAA,+BAAmB,EAAC,MAAM,CAAC,CAAC;IAE5B,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;QACrC,eAAM,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,IAAA,0CAAsB,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEtD,MAAM,IAAA,oBAAS,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,eAAM,CAAC,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAoCD,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DxE"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runSetup = runSetup;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const loader_1 = require("../core/config/loader");
|
|
39
|
+
const validator_1 = require("../core/config/validator");
|
|
40
|
+
const logger_1 = require("../utils/logger");
|
|
41
|
+
const exec_1 = require("../utils/exec");
|
|
42
|
+
//Parse a command string into executable and args (split on whitespace)
|
|
43
|
+
function parseCommand(commandStr) {
|
|
44
|
+
const parts = commandStr.trim().split(/\s+/).filter(Boolean);
|
|
45
|
+
if (parts.length === 0) {
|
|
46
|
+
throw new Error('Empty command');
|
|
47
|
+
}
|
|
48
|
+
return { cmd: parts[0], args: parts.slice(1) };
|
|
49
|
+
}
|
|
50
|
+
//Run a single dependency install (command in path with merged env)
|
|
51
|
+
async function runDependency(dep, projectRoot, env, dryRun) {
|
|
52
|
+
const cwd = path.resolve(projectRoot, dep.path);
|
|
53
|
+
const { cmd, args } = parseCommand(dep.command);
|
|
54
|
+
if (dryRun) {
|
|
55
|
+
logger_1.logger.info(`[dry-run] Would run in ${dep.path}: ${dep.command}`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
logger_1.logger.step(`Installing dependencies (${dep.type}) in ${dep.path}...`);
|
|
59
|
+
await (0, exec_1.exec)(cmd, args, {
|
|
60
|
+
cwd,
|
|
61
|
+
env: { ...process.env, ...env },
|
|
62
|
+
silent: false,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async function runSetup(options = {}) {
|
|
66
|
+
const { skipDeps = false, skipDb = false, dryRun = false } = options;
|
|
67
|
+
const projectRoot = await (0, loader_1.findProjectRoot)(process.cwd());
|
|
68
|
+
logger_1.logger.debug(`Project root: ${projectRoot}`);
|
|
69
|
+
const config = await (0, loader_1.loadConfig)(projectRoot);
|
|
70
|
+
(0, validator_1.checkConfigWarnings)(config);
|
|
71
|
+
const env = config.env ?? {};
|
|
72
|
+
if (dryRun) {
|
|
73
|
+
logger_1.logger.info('Dry run: no commands will be executed.');
|
|
74
|
+
}
|
|
75
|
+
if (!skipDeps && config.dependencies && config.dependencies.length > 0) {
|
|
76
|
+
for (const dep of config.dependencies) {
|
|
77
|
+
await runDependency(dep, projectRoot, env, dryRun);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (skipDeps) {
|
|
81
|
+
logger_1.logger.debug('Skipping dependency installation (--skip-deps).');
|
|
82
|
+
}
|
|
83
|
+
if (!skipDb && config.databases && config.databases.length > 0) {
|
|
84
|
+
for (const db of config.databases) {
|
|
85
|
+
if (db.migrations?.length) {
|
|
86
|
+
for (const mig of db.migrations) {
|
|
87
|
+
const cwd = path.resolve(projectRoot, mig.path);
|
|
88
|
+
const { cmd, args } = parseCommand(mig.command);
|
|
89
|
+
if (dryRun) {
|
|
90
|
+
logger_1.logger.info(`[dry-run] Would run migration in ${mig.path}: ${mig.command}`);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
logger_1.logger.step(`Running migration in ${mig.path}...`);
|
|
94
|
+
await (0, exec_1.exec)(cmd, args, {
|
|
95
|
+
cwd,
|
|
96
|
+
env: { ...process.env, ...env },
|
|
97
|
+
silent: false,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (db.seed && !dryRun) {
|
|
103
|
+
const { cmd, args } = parseCommand(db.seed.command);
|
|
104
|
+
logger_1.logger.step(`Running seed (${db.type})...`);
|
|
105
|
+
await (0, exec_1.exec)(cmd, args, {
|
|
106
|
+
cwd: projectRoot,
|
|
107
|
+
env: { ...process.env, ...env },
|
|
108
|
+
silent: false,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
else if (db.seed && dryRun) {
|
|
112
|
+
logger_1.logger.info(`[dry-run] Would run seed: ${db.seed.command}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else if (skipDb) {
|
|
117
|
+
logger_1.logger.debug('Skipping database setup (--skip-db).');
|
|
118
|
+
}
|
|
119
|
+
if (!dryRun) {
|
|
120
|
+
logger_1.logger.success(`Setup complete for ${config.name}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DevEnvConfig } from '../types/config';
|
|
2
|
+
export declare function sanitizeConfigForShare(config: DevEnvConfig): DevEnvConfig;
|
|
3
|
+
export interface ShareExportOptions {
|
|
4
|
+
output?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function runShareExport(options?: ShareExportOptions): Promise<void>;
|
|
7
|
+
export interface ShareImportOptions {
|
|
8
|
+
output?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function runShareImport(filePath: string, options?: ShareImportOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=share.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAKnE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CA2BzE;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpF;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BtG"}
|