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,150 @@
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.fileExists = fileExists;
37
+ exports.readFile = readFile;
38
+ exports.writeFile = writeFile;
39
+ exports.readJson = readJson;
40
+ exports.writeJson = writeJson;
41
+ exports.ensureDir = ensureDir;
42
+ exports.copy = copy;
43
+ exports.findFile = findFile;
44
+ exports.findFiles = findFiles;
45
+ const fs = __importStar(require("fs-extra"));
46
+ const path = __importStar(require("path"));
47
+ const logger_1 = require("./logger");
48
+ async function fileExists(filePath) {
49
+ try {
50
+ await fs.access(filePath);
51
+ return true;
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ }
57
+ async function readFile(filePath) {
58
+ try {
59
+ return await fs.readFile(filePath, 'utf-8');
60
+ }
61
+ catch (error) {
62
+ logger_1.logger.error(`Failed to read file: ${filePath}`, error.message);
63
+ throw error;
64
+ }
65
+ }
66
+ async function writeFile(filePath, content) {
67
+ try {
68
+ await fs.ensureDir(path.dirname(filePath));
69
+ await fs.writeFile(filePath, content, 'utf-8');
70
+ }
71
+ catch (error) {
72
+ logger_1.logger.error(`Failed to write file: ${filePath}`, error.message);
73
+ throw error;
74
+ }
75
+ }
76
+ async function readJson(filePath) {
77
+ try {
78
+ const content = await readFile(filePath);
79
+ return JSON.parse(content);
80
+ }
81
+ catch (error) {
82
+ logger_1.logger.error(`Failed to read JSON file: ${filePath}`, error.message);
83
+ throw error;
84
+ }
85
+ }
86
+ async function writeJson(filePath, data, indent = 2) {
87
+ const content = JSON.stringify(data, null, indent);
88
+ await writeFile(filePath, content);
89
+ }
90
+ async function ensureDir(dirPath) {
91
+ try {
92
+ await fs.ensureDir(dirPath);
93
+ }
94
+ catch (error) {
95
+ logger_1.logger.error(`Failed to create directory: ${dirPath}`, error.message);
96
+ throw error;
97
+ }
98
+ }
99
+ async function copy(src, dest) {
100
+ try {
101
+ await fs.copy(src, dest);
102
+ }
103
+ catch (error) {
104
+ logger_1.logger.error(`Failed to copy ${src} to ${dest}`, error.message);
105
+ throw error;
106
+ }
107
+ }
108
+ async function findFile(dirPath, fileName) {
109
+ try {
110
+ const files = await fs.readdir(dirPath);
111
+ for (const file of files) {
112
+ const fullPath = path.join(dirPath, file);
113
+ const stat = await fs.stat(fullPath);
114
+ if (stat.isDirectory()) {
115
+ const found = await findFile(fullPath, fileName);
116
+ if (found)
117
+ return found;
118
+ }
119
+ else if (file === fileName) {
120
+ return fullPath;
121
+ }
122
+ }
123
+ return null;
124
+ }
125
+ catch {
126
+ return null;
127
+ }
128
+ }
129
+ async function findFiles(dirPath, pattern) {
130
+ const results = [];
131
+ try {
132
+ const files = await fs.readdir(dirPath);
133
+ for (const file of files) {
134
+ const fullPath = path.join(dirPath, file);
135
+ const stat = await fs.stat(fullPath);
136
+ if (stat.isDirectory()) {
137
+ const subResults = await findFiles(fullPath, pattern);
138
+ results.push(...subResults);
139
+ }
140
+ else if (pattern.test(file)) {
141
+ results.push(fullPath);
142
+ }
143
+ }
144
+ }
145
+ catch (error) {
146
+ logger_1.logger.debug(`Error searching for files: ${error.message}`);
147
+ }
148
+ return results;
149
+ }
150
+ //# sourceMappingURL=file-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-ops.js","sourceRoot":"","sources":["../../src/utils/file-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+ module.exports = function loadExeca() {
3
+ return import('execa');
4
+ };
@@ -0,0 +1,21 @@
1
+ export declare enum LogLevel {
2
+ DEBUG = 0,
3
+ INFO = 1,
4
+ WARN = 2,
5
+ ERROR = 3
6
+ }
7
+ declare class Logger {
8
+ private level;
9
+ private colors;
10
+ setLevel(level: LogLevel): void;
11
+ private formatMessage;
12
+ debug(message: string, ...args: any[]): void;
13
+ info(message: string, ...args: any[]): void;
14
+ warn(message: string, ...args: any[]): void;
15
+ error(message: string, ...args: any[]): void;
16
+ success(message: string): void;
17
+ step(message: string): void;
18
+ }
19
+ export declare const logger: Logger;
20
+ export {};
21
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,cAAM,MAAM;IACV,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,MAAM,CAQZ;IAEF,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,OAAO,CAAC,aAAa;IASrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM5C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG5B;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -0,0 +1,94 @@
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.logger = exports.LogLevel = void 0;
37
+ const util = __importStar(require("util"));
38
+ var LogLevel;
39
+ (function (LogLevel) {
40
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
41
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
42
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
43
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
44
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
45
+ class Logger {
46
+ constructor() {
47
+ this.level = LogLevel.INFO;
48
+ this.colors = {
49
+ reset: '\x1b[0m',
50
+ bright: '\x1b[1m',
51
+ red: '\x1b[31m',
52
+ green: '\x1b[32m',
53
+ yellow: '\x1b[33m',
54
+ blue: '\x1b[34m',
55
+ cyan: '\x1b[36m',
56
+ };
57
+ }
58
+ setLevel(level) {
59
+ this.level = level;
60
+ }
61
+ formatMessage(level, message, ...args) {
62
+ const timestamp = new Date().toISOString();
63
+ const formattedArgs = args.map(arg => typeof arg === 'object' ? util.inspect(arg, { depth: 2 }) : String(arg)).join(' ');
64
+ return `[${timestamp}] [${level}] ${message}${formattedArgs ? ' ' + formattedArgs : ''}`;
65
+ }
66
+ debug(message, ...args) {
67
+ if (this.level <= LogLevel.DEBUG) {
68
+ console.debug(this.colors.cyan + this.formatMessage('DEBUG', message, ...args) + this.colors.reset);
69
+ }
70
+ }
71
+ info(message, ...args) {
72
+ if (this.level <= LogLevel.INFO) {
73
+ console.log(this.colors.green + this.formatMessage('INFO', message, ...args) + this.colors.reset);
74
+ }
75
+ }
76
+ warn(message, ...args) {
77
+ if (this.level <= LogLevel.WARN) {
78
+ console.warn(this.colors.yellow + this.formatMessage('WARN', message, ...args) + this.colors.reset);
79
+ }
80
+ }
81
+ error(message, ...args) {
82
+ if (this.level <= LogLevel.ERROR) {
83
+ console.error(this.colors.red + this.formatMessage('ERROR', message, ...args) + this.colors.reset);
84
+ }
85
+ }
86
+ success(message) {
87
+ console.log(this.colors.green + this.colors.bright + `✓ ${message}` + this.colors.reset);
88
+ }
89
+ step(message) {
90
+ console.log(this.colors.blue + `→ ${message}` + this.colors.reset);
91
+ }
92
+ }
93
+ exports.logger = new Logger();
94
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type Platform = 'windows' | 'macos' | 'linux';
2
+ export declare function detectOS(): Platform;
3
+ export declare function isWindows(): boolean;
4
+ export declare function getShell(): string;
5
+ export declare function getPathSeparator(): string;
6
+ export declare function normalizePath(filePath: string): string;
7
+ export declare function getExecutableExtension(): string;
8
+ export declare function joinPaths(...paths: string[]): string;
9
+ export declare function resolvePath(...paths: string[]): string;
10
+ export declare function getHomeDirectory(): string;
11
+ export declare function getTempDirectory(): string;
12
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAIrD,wBAAgB,QAAQ,IAAI,QAAQ,CAUnC;AAID,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAID,wBAAgB,QAAQ,IAAI,MAAM,CAQjC;AAID,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAID,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAID,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAID,wBAAgB,SAAS,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEpD;AAID,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtD;AAID,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAID,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
@@ -0,0 +1,103 @@
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.detectOS = detectOS;
37
+ exports.isWindows = isWindows;
38
+ exports.getShell = getShell;
39
+ exports.getPathSeparator = getPathSeparator;
40
+ exports.normalizePath = normalizePath;
41
+ exports.getExecutableExtension = getExecutableExtension;
42
+ exports.joinPaths = joinPaths;
43
+ exports.resolvePath = resolvePath;
44
+ exports.getHomeDirectory = getHomeDirectory;
45
+ exports.getTempDirectory = getTempDirectory;
46
+ const os = __importStar(require("os"));
47
+ const path = __importStar(require("path"));
48
+ //Detect the operating system
49
+ function detectOS() {
50
+ const platform = process.platform;
51
+ if (platform === 'win32') {
52
+ return 'windows';
53
+ }
54
+ else if (platform === 'darwin') {
55
+ return 'macos';
56
+ }
57
+ else {
58
+ return 'linux';
59
+ }
60
+ }
61
+ //Check if running on Windows
62
+ function isWindows() {
63
+ return process.platform === 'win32';
64
+ }
65
+ //Get the appropriate shell for the platform
66
+ function getShell() {
67
+ if (isWindows()) {
68
+ // Prefer PowerShell, fallback to cmd
69
+ return process.env.SHELL?.includes('powershell') || process.env.PSModulePath
70
+ ? 'powershell'
71
+ : 'cmd';
72
+ }
73
+ return 'bash';
74
+ }
75
+ //Get path separator for the platform
76
+ function getPathSeparator() {
77
+ return path.sep;
78
+ }
79
+ //Normalize a path for the current platform
80
+ function normalizePath(filePath) {
81
+ return path.normalize(filePath);
82
+ }
83
+ //Get executable extension for the platform
84
+ function getExecutableExtension() {
85
+ return isWindows() ? '.exe' : '';
86
+ }
87
+ //Join paths in a platform-agnostic way
88
+ function joinPaths(...paths) {
89
+ return path.join(...paths);
90
+ }
91
+ //Resolve a path relative to the current working directory
92
+ function resolvePath(...paths) {
93
+ return path.resolve(...paths);
94
+ }
95
+ //Get the home directory for the current user
96
+ function getHomeDirectory() {
97
+ return os.homedir();
98
+ }
99
+ //Get temporary directory for the platform
100
+ function getTempDirectory() {
101
+ return os.tmpdir();
102
+ }
103
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,4BAUC;AAID,8BAEC;AAID,4BAQC;AAID,4CAEC;AAID,sCAEC;AAID,wDAEC;AAID,8BAEC;AAID,kCAEC;AAID,4CAEC;AAID,4CAEC;AA7ED,uCAAyB;AACzB,2CAA6B;AAI5B,6BAA6B;AAE9B,SAAgB,QAAQ;IACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAEA,6BAA6B;AAE9B,SAAgB,SAAS;IACvB,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AACtC,CAAC;AAEA,4CAA4C;AAE7C,SAAgB,QAAQ;IACtB,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,qCAAqC;QACrC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;YAC1E,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,KAAK,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAEA,qCAAqC;AAEtC,SAAgB,gBAAgB;IAC9B,OAAO,IAAI,CAAC,GAAG,CAAC;AAClB,CAAC;AAEA,2CAA2C;AAE5C,SAAgB,aAAa,CAAC,QAAgB;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAEA,2CAA2C;AAE5C,SAAgB,sBAAsB;IACpC,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC,CAAC;AAEA,uCAAuC;AAExC,SAAgB,SAAS,CAAC,GAAG,KAAe;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AAC7B,CAAC;AAEA,0DAA0D;AAE3D,SAAgB,WAAW,CAAC,GAAG,KAAe;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AAChC,CAAC;AAEA,6CAA6C;AAE9C,SAAgB,gBAAgB;IAC9B,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;AACtB,CAAC;AAEA,0CAA0C;AAE3C,SAAgB,gBAAgB;IAC9B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;AACrB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "dev-env-kit",
3
+ "version": "0.1.3",
4
+ "description": "One-command project setup, environment snapshots, and Docker Compose generation for local development",
5
+ "main": "dist/cli/index.js",
6
+ "bin": {
7
+ "envkit": "dist/cli/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "templates",
12
+ "README.md",
13
+ ".dev-env.example.yml"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc && node -e \"require('fs').copyFileSync('src/utils/load-execa.js','dist/utils/load-execa.js')\"",
17
+ "dev": "ts-node src/cli/index.ts",
18
+ "start": "node dist/cli/index.js",
19
+ "test": "jest",
20
+ "lint": "eslint src --ext .ts",
21
+ "format": "prettier --write \"src/**/*.ts\"",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "keywords": [
25
+ "dev-environment",
26
+ "development",
27
+ "setup",
28
+ "docker",
29
+ "snapshot",
30
+ "local-development",
31
+ "devops",
32
+ "environment-manager",
33
+ "docker-compose",
34
+ "cli"
35
+ ],
36
+ "author": "",
37
+ "license": "MIT",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/nazarli-shabnam/devkit.git"
41
+ },
42
+ "bugs": {
43
+ "url": "https://github.com/nazarli-shabnam/devkit/issues"
44
+ },
45
+ "homepage": "https://github.com/nazarli-shabnam/devkit#readme",
46
+ "engines": {
47
+ "node": ">=16.0.0"
48
+ },
49
+ "dependencies": {
50
+ "commander": "^11.1.0",
51
+ "dotenv": "^16.3.1",
52
+ "execa": "^8.0.1",
53
+ "fs-extra": "^11.2.0",
54
+ "handlebars": "^4.7.8",
55
+ "js-yaml": "^4.1.0",
56
+ "zod": "^3.22.4"
57
+ },
58
+ "devDependencies": {
59
+ "@types/fs-extra": "^11.0.4",
60
+ "@types/jest": "^29.5.12",
61
+ "@types/js-yaml": "^4.0.9",
62
+ "@types/node": "^20.10.6",
63
+ "@typescript-eslint/eslint-plugin": "^6.17.0",
64
+ "@typescript-eslint/parser": "^6.17.0",
65
+ "eslint": "^8.56.0",
66
+ "jest": "^29.7.0",
67
+ "prettier": "^3.1.1",
68
+ "ts-jest": "^29.1.2",
69
+ "ts-node": "^10.9.2",
70
+ "typescript": "^5.3.3"
71
+ }
72
+ }
@@ -0,0 +1,31 @@
1
+ version: "3.8"
2
+
3
+ services:
4
+ {{#each services}}
5
+ {{name}}:
6
+ image: {{image}}{{#if version}}:{{version}}{{/if}}
7
+ {{#if ports}}
8
+ ports:
9
+ {{#each ports}}
10
+ - "{{this}}"
11
+ {{/each}}
12
+ {{/if}}
13
+ {{#if env}}
14
+ environment:
15
+ {{#each env}}
16
+ - {{@key}}={{this}}
17
+ {{/each}}
18
+ {{/if}}
19
+ {{#if healthcheck}}
20
+ healthcheck:
21
+ {{#each healthcheck}}
22
+ {{@key}}: {{this}}
23
+ {{/each}}
24
+ {{/if}}
25
+ networks:
26
+ - {{../networkName}}
27
+ {{/each}}
28
+
29
+ networks:
30
+ {{networkName}}:
31
+ name: {{networkName}}