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.
Files changed (62) hide show
  1. package/.dev-env.example.yml +71 -0
  2. package/LICENSE +21 -0
  3. package/README.md +128 -0
  4. package/dist/cli/index.d.ts +3 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +176 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/commands/generate.d.ts +5 -0
  9. package/dist/commands/generate.d.ts.map +1 -0
  10. package/dist/commands/generate.js +62 -0
  11. package/dist/commands/generate.js.map +1 -0
  12. package/dist/commands/setup.d.ts +7 -0
  13. package/dist/commands/setup.d.ts.map +1 -0
  14. package/dist/commands/setup.js +123 -0
  15. package/dist/commands/setup.js.map +1 -0
  16. package/dist/commands/share.d.ts +11 -0
  17. package/dist/commands/share.d.ts.map +1 -0
  18. package/dist/commands/share.js +113 -0
  19. package/dist/commands/share.js.map +1 -0
  20. package/dist/commands/snapshot.d.ts +4 -0
  21. package/dist/commands/snapshot.d.ts.map +1 -0
  22. package/dist/commands/snapshot.js +75 -0
  23. package/dist/commands/snapshot.js.map +1 -0
  24. package/dist/core/config/loader.d.ts +10 -0
  25. package/dist/core/config/loader.d.ts.map +1 -0
  26. package/dist/core/config/loader.js +137 -0
  27. package/dist/core/config/loader.js.map +1 -0
  28. package/dist/core/config/validator.d.ts +10 -0
  29. package/dist/core/config/validator.d.ts.map +1 -0
  30. package/dist/core/config/validator.js +63 -0
  31. package/dist/core/config/validator.js.map +1 -0
  32. package/dist/core/docker/compose-generator.d.ts +10 -0
  33. package/dist/core/docker/compose-generator.d.ts.map +1 -0
  34. package/dist/core/docker/compose-generator.js +133 -0
  35. package/dist/core/docker/compose-generator.js.map +1 -0
  36. package/dist/core/snapshot/storage.d.ts +13 -0
  37. package/dist/core/snapshot/storage.d.ts.map +1 -0
  38. package/dist/core/snapshot/storage.js +99 -0
  39. package/dist/core/snapshot/storage.js.map +1 -0
  40. package/dist/types/config.d.ts +378 -0
  41. package/dist/types/config.d.ts.map +1 -0
  42. package/dist/types/config.js +61 -0
  43. package/dist/types/config.js.map +1 -0
  44. package/dist/utils/exec.d.ts +11 -0
  45. package/dist/utils/exec.d.ts.map +1 -0
  46. package/dist/utils/exec.js +63 -0
  47. package/dist/utils/exec.js.map +1 -0
  48. package/dist/utils/file-ops.d.ts +10 -0
  49. package/dist/utils/file-ops.d.ts.map +1 -0
  50. package/dist/utils/file-ops.js +150 -0
  51. package/dist/utils/file-ops.js.map +1 -0
  52. package/dist/utils/load-execa.js +4 -0
  53. package/dist/utils/logger.d.ts +21 -0
  54. package/dist/utils/logger.d.ts.map +1 -0
  55. package/dist/utils/logger.js +94 -0
  56. package/dist/utils/logger.js.map +1 -0
  57. package/dist/utils/platform.d.ts +12 -0
  58. package/dist/utils/platform.d.ts.map +1 -0
  59. package/dist/utils/platform.js +103 -0
  60. package/dist/utils/platform.js.map +1 -0
  61. package/package.json +72 -0
  62. 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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ export interface GenerateOptions {
2
+ output?: string;
3
+ }
4
+ export declare function runGenerate(options?: GenerateOptions): Promise<void>;
5
+ //# sourceMappingURL=generate.d.ts.map
@@ -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,7 @@
1
+ export interface SetupOptions {
2
+ skipDeps?: boolean;
3
+ skipDb?: boolean;
4
+ dryRun?: boolean;
5
+ }
6
+ export declare function runSetup(options?: SetupOptions): Promise<void>;
7
+ //# sourceMappingURL=setup.d.ts.map
@@ -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"}