devports 0.0.1 → 1.0.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.
Files changed (151) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/LICENSE +21 -0
  3. package/README.md +810 -29
  4. package/dist/cli.d.ts +7 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +329 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/allocate.command.d.ts +8 -0
  9. package/dist/commands/allocate.command.d.ts.map +1 -0
  10. package/dist/commands/allocate.command.js +84 -0
  11. package/dist/commands/allocate.command.js.map +1 -0
  12. package/dist/commands/base-command.d.ts +28 -0
  13. package/dist/commands/base-command.d.ts.map +1 -0
  14. package/dist/commands/base-command.js +33 -0
  15. package/dist/commands/base-command.js.map +1 -0
  16. package/dist/commands/check.command.d.ts +7 -0
  17. package/dist/commands/check.command.d.ts.map +1 -0
  18. package/dist/commands/check.command.js +44 -0
  19. package/dist/commands/check.command.js.map +1 -0
  20. package/dist/commands/completion.command.d.ts +7 -0
  21. package/dist/commands/completion.command.d.ts.map +1 -0
  22. package/dist/commands/completion.command.js +116 -0
  23. package/dist/commands/completion.command.js.map +1 -0
  24. package/dist/commands/gitignore.command.d.ts +7 -0
  25. package/dist/commands/gitignore.command.d.ts.map +1 -0
  26. package/dist/commands/gitignore.command.js +61 -0
  27. package/dist/commands/gitignore.command.js.map +1 -0
  28. package/dist/commands/index.d.ts +7 -0
  29. package/dist/commands/index.d.ts.map +1 -0
  30. package/dist/commands/index.js +35 -0
  31. package/dist/commands/index.js.map +1 -0
  32. package/dist/commands/info.command.d.ts +7 -0
  33. package/dist/commands/info.command.d.ts.map +1 -0
  34. package/dist/commands/info.command.js +40 -0
  35. package/dist/commands/info.command.js.map +1 -0
  36. package/dist/commands/list.command.d.ts +8 -0
  37. package/dist/commands/list.command.d.ts.map +1 -0
  38. package/dist/commands/list.command.js +165 -0
  39. package/dist/commands/list.command.js.map +1 -0
  40. package/dist/commands/release.command.d.ts +8 -0
  41. package/dist/commands/release.command.d.ts.map +1 -0
  42. package/dist/commands/release.command.js +89 -0
  43. package/dist/commands/release.command.js.map +1 -0
  44. package/dist/commands/render.command.d.ts +7 -0
  45. package/dist/commands/render.command.d.ts.map +1 -0
  46. package/dist/commands/render.command.js +53 -0
  47. package/dist/commands/render.command.js.map +1 -0
  48. package/dist/commands/reserve.command.d.ts +7 -0
  49. package/dist/commands/reserve.command.d.ts.map +1 -0
  50. package/dist/commands/reserve.command.js +42 -0
  51. package/dist/commands/reserve.command.js.map +1 -0
  52. package/dist/commands/setup.command.d.ts +7 -0
  53. package/dist/commands/setup.command.d.ts.map +1 -0
  54. package/dist/commands/setup.command.js +43 -0
  55. package/dist/commands/setup.command.js.map +1 -0
  56. package/dist/commands/status.command.d.ts +7 -0
  57. package/dist/commands/status.command.d.ts.map +1 -0
  58. package/dist/commands/status.command.js +41 -0
  59. package/dist/commands/status.command.js.map +1 -0
  60. package/dist/commands/unreserve.command.d.ts +7 -0
  61. package/dist/commands/unreserve.command.d.ts.map +1 -0
  62. package/dist/commands/unreserve.command.js +38 -0
  63. package/dist/commands/unreserve.command.js.map +1 -0
  64. package/dist/commands/worktree-add.command.d.ts +7 -0
  65. package/dist/commands/worktree-add.command.d.ts.map +1 -0
  66. package/dist/commands/worktree-add.command.js +68 -0
  67. package/dist/commands/worktree-add.command.js.map +1 -0
  68. package/dist/commands/worktree-remove.command.d.ts +7 -0
  69. package/dist/commands/worktree-remove.command.d.ts.map +1 -0
  70. package/dist/commands/worktree-remove.command.js +33 -0
  71. package/dist/commands/worktree-remove.command.js.map +1 -0
  72. package/dist/completion/bash-completion-template.d.ts +5 -0
  73. package/dist/completion/bash-completion-template.d.ts.map +1 -0
  74. package/dist/completion/bash-completion-template.js +14 -0
  75. package/dist/completion/bash-completion-template.js.map +1 -0
  76. package/dist/completion/bash.sh +208 -0
  77. package/dist/completion/completion-data.d.ts +16 -0
  78. package/dist/completion/completion-data.d.ts.map +1 -0
  79. package/dist/completion/completion-data.js +38 -0
  80. package/dist/completion/completion-data.js.map +1 -0
  81. package/dist/completion/index.d.ts +24 -0
  82. package/dist/completion/index.d.ts.map +1 -0
  83. package/dist/completion/index.js +30 -0
  84. package/dist/completion/index.js.map +1 -0
  85. package/dist/completion/shell-config.d.ts +27 -0
  86. package/dist/completion/shell-config.d.ts.map +1 -0
  87. package/dist/completion/shell-config.js +243 -0
  88. package/dist/completion/shell-config.js.map +1 -0
  89. package/dist/completion/zsh-completion-template.d.ts +5 -0
  90. package/dist/completion/zsh-completion-template.d.ts.map +1 -0
  91. package/dist/completion/zsh-completion-template.js +14 -0
  92. package/dist/completion/zsh-completion-template.js.map +1 -0
  93. package/dist/completion/zsh.sh +164 -0
  94. package/dist/config.d.ts +6 -0
  95. package/dist/config.d.ts.map +1 -0
  96. package/dist/config.js +111 -0
  97. package/dist/config.js.map +1 -0
  98. package/dist/devports-1.0.1.tgz +0 -0
  99. package/dist/execution.d.ts +31 -0
  100. package/dist/execution.d.ts.map +1 -0
  101. package/dist/execution.js +110 -0
  102. package/dist/execution.js.map +1 -0
  103. package/dist/gitignore.d.ts +22 -0
  104. package/dist/gitignore.d.ts.map +1 -0
  105. package/dist/gitignore.js +142 -0
  106. package/dist/gitignore.js.map +1 -0
  107. package/dist/index.d.ts +7 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +6 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/port-manager.d.ts +33 -0
  112. package/dist/port-manager.d.ts.map +1 -0
  113. package/dist/port-manager.js +169 -0
  114. package/dist/port-manager.js.map +1 -0
  115. package/dist/port-utils.d.ts +9 -0
  116. package/dist/port-utils.d.ts.map +1 -0
  117. package/dist/port-utils.js +38 -0
  118. package/dist/port-utils.js.map +1 -0
  119. package/dist/render.d.ts +54 -0
  120. package/dist/render.d.ts.map +1 -0
  121. package/dist/render.js +286 -0
  122. package/dist/render.js.map +1 -0
  123. package/dist/services/lock-manager.d.ts +46 -0
  124. package/dist/services/lock-manager.d.ts.map +1 -0
  125. package/dist/services/lock-manager.js +118 -0
  126. package/dist/services/lock-manager.js.map +1 -0
  127. package/dist/services/response-formatter.d.ts +45 -0
  128. package/dist/services/response-formatter.d.ts.map +1 -0
  129. package/dist/services/response-formatter.js +102 -0
  130. package/dist/services/response-formatter.js.map +1 -0
  131. package/dist/services/validation-service.d.ts +109 -0
  132. package/dist/services/validation-service.d.ts.map +1 -0
  133. package/dist/services/validation-service.js +267 -0
  134. package/dist/services/validation-service.js.map +1 -0
  135. package/dist/setup.d.ts +20 -0
  136. package/dist/setup.d.ts.map +1 -0
  137. package/dist/setup.js +245 -0
  138. package/dist/setup.js.map +1 -0
  139. package/dist/types.d.ts +29 -0
  140. package/dist/types.d.ts.map +1 -0
  141. package/dist/types.js +18 -0
  142. package/dist/types.js.map +1 -0
  143. package/dist/validation.d.ts +69 -0
  144. package/dist/validation.d.ts.map +1 -0
  145. package/dist/validation.js +344 -0
  146. package/dist/validation.js.map +1 -0
  147. package/dist/worktree.d.ts +24 -0
  148. package/dist/worktree.d.ts.map +1 -0
  149. package/dist/worktree.js +245 -0
  150. package/dist/worktree.js.map +1 -0
  151. package/package.json +90 -6
package/dist/cli.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Secure CLI wrapper with comprehensive input validation
4
+ * This file provides security-hardened versions of all CLI commands
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
package/dist/cli.js ADDED
@@ -0,0 +1,329 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Secure CLI wrapper with comprehensive input validation
4
+ * This file provides security-hardened versions of all CLI commands
5
+ */
6
+ import { Command } from 'commander';
7
+ const program = new Command();
8
+ const ASCII_HEADER = `
9
+ ██████╗ ███████╗██╗ ██╗██████╗ ██████╗ ██████╗ ████████╗███████╗
10
+ ██╔══██╗██╔════╝██║ ██║██╔══██╗██╔═══██╗██╔══██╗╚══██╔══╝██╔════╝
11
+ ██║ ██║█████╗ ██║ ██║██████╔╝██║ ██║██████╔╝ ██║ ███████╗
12
+ ██║ ██║██╔══╝ ╚██╗ ██╔╝██╔═══╝ ██║ ██║██╔══██╗ ██║ ╚════██║
13
+ ██████╔╝███████╗ ╚████╔╝ ██║ ╚██████╔╝██║ ██║ ██║ ███████║
14
+ ╚═════╝ ╚══════╝ ╚═══╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝
15
+
16
+ Port allocation manager for multi-project development
17
+ `;
18
+ // Override process.stdout.write and process.stderr.write to add extra line after output
19
+ const originalStdoutWrite = process.stdout.write.bind(process.stdout);
20
+ const originalStderrWrite = process.stderr.write.bind(process.stderr);
21
+ // Track if we should add blank lines (disabled for quiet/json modes)
22
+ let shouldAddBlankLines = true;
23
+ function setShouldAddBlankLines(value) {
24
+ shouldAddBlankLines = value;
25
+ }
26
+ function addBlankLineAfterOutput(output) {
27
+ if (!shouldAddBlankLines) {
28
+ return output;
29
+ }
30
+ // Check if this looks like help output by looking for common help patterns
31
+ if (output.includes('Usage:') &&
32
+ (output.includes('Options:') || output.includes('Commands:'))) {
33
+ return `${output}\n`;
34
+ }
35
+ // Check if this looks like command completion (ends with success/error emoji and doesn't already end with newline)
36
+ if ((output.includes('✅') || output.includes('❌')) &&
37
+ !output.endsWith('\n\n')) {
38
+ return `${output}\n`;
39
+ }
40
+ return output;
41
+ }
42
+ process.stdout.write = ((chunk, encoding, callback) => {
43
+ if (typeof chunk === 'string') {
44
+ chunk = addBlankLineAfterOutput(chunk);
45
+ }
46
+ return originalStdoutWrite(chunk, encoding, callback);
47
+ });
48
+ process.stderr.write = ((chunk, encoding, callback) => {
49
+ if (typeof chunk === 'string') {
50
+ chunk = addBlankLineAfterOutput(chunk);
51
+ }
52
+ return originalStderrWrite(chunk, encoding, callback);
53
+ });
54
+ program
55
+ .name('devports')
56
+ .description('Port allocation manager for multi-project development')
57
+ .version('0.1.0')
58
+ .addHelpText('before', ASCII_HEADER);
59
+ // Setup command
60
+ const setupCmd = new SetupCommand();
61
+ program
62
+ .command('setup')
63
+ .description(setupCmd.description)
64
+ .option('--template <file>', 'Template file to use (default: .env.devports if exists)')
65
+ .option('--services <services>', 'Services to allocate (comma-separated, e.g., postgres:postgres,api:api)')
66
+ .option('--force', 'Overwrite existing .env file (creates .env.backup)')
67
+ .option('--skip-render', 'Skip auto-rendering of *.devports files')
68
+ .option('--post-hook <script>', 'Run script after setup (passed env vars)')
69
+ .option('--json', 'Output as JSON')
70
+ .action(async (options) => {
71
+ // Disable blank lines for quiet or json mode
72
+ if (options.quiet || options.json) {
73
+ setShouldAddBlankLines(false);
74
+ }
75
+ // Show ASCII header for setup command (but not if --json is used)
76
+ if (!options.json) {
77
+ console.log(ASCII_HEADER);
78
+ }
79
+ const result = await setupCmd.execute([], options);
80
+ process.exit(result.success ? 0 : 1);
81
+ });
82
+ // Worktree command group
83
+ const worktreeAddCmd = new WorktreeAddCommand();
84
+ const worktreeRemoveCmd = new WorktreeRemoveCommand();
85
+ const worktree = program
86
+ .command('worktree')
87
+ .description('Git worktree integration with automatic port allocation');
88
+ // Worktree add
89
+ worktree
90
+ .command('add')
91
+ .description(worktreeAddCmd.description)
92
+ .argument('<path>', 'Path for the new worktree')
93
+ .option('-b, --branch <branch>', 'Create and checkout a new branch')
94
+ .option('--no-env', 'Skip .env file creation')
95
+ .option('--env-file <file>', 'Custom .env file name', '.env')
96
+ .option('--services <services>', 'Services to allocate (comma-separated, e.g., postgres:postgres,api:api)')
97
+ .option('--template <file>', 'Use template file for .env generation (default: .env.devports if exists)')
98
+ .option('--post-hook <script>', 'Run script after worktree creation (passed env vars)')
99
+ .option('--json', 'Output as JSON')
100
+ .action(async (path, options) => {
101
+ // Disable blank lines for json mode
102
+ if (options.json) {
103
+ setShouldAddBlankLines(false);
104
+ }
105
+ const result = await worktreeAddCmd.execute([path], options);
106
+ process.exit(result.success ? 0 : 1);
107
+ });
108
+ // Worktree remove
109
+ worktree
110
+ .command('remove')
111
+ .description(worktreeRemoveCmd.description)
112
+ .argument('<path>', 'Path to the worktree to remove')
113
+ .option('-f, --force', 'Force removal even if worktree is dirty')
114
+ .option('--json', 'Output as JSON')
115
+ .action(async (path, options) => {
116
+ // Disable blank lines for json mode
117
+ if (options.json) {
118
+ setShouldAddBlankLines(false);
119
+ }
120
+ const result = await worktreeRemoveCmd.execute([path], options);
121
+ process.exit(result.success ? 0 : 1);
122
+ });
123
+ // Allocate command
124
+ import { AllocateCommand } from './commands/allocate.command.js';
125
+ import { ReleaseCommand } from './commands/release.command.js';
126
+ import { ListCommand } from './commands/list.command.js';
127
+ import { StatusCommand } from './commands/status.command.js';
128
+ import { ReserveCommand } from './commands/reserve.command.js';
129
+ import { UnreserveCommand } from './commands/unreserve.command.js';
130
+ import { CheckCommand } from './commands/check.command.js';
131
+ import { InfoCommand } from './commands/info.command.js';
132
+ import { SetupCommand } from './commands/setup.command.js';
133
+ import { WorktreeAddCommand } from './commands/worktree-add.command.js';
134
+ import { WorktreeRemoveCommand } from './commands/worktree-remove.command.js';
135
+ import { RenderCommand } from './commands/render.command.js';
136
+ import { GitignoreCommand } from './commands/gitignore.command.js';
137
+ import { CompletionCommand } from './commands/completion.command.js';
138
+ const allocateCmd = new AllocateCommand();
139
+ program
140
+ .command('allocate')
141
+ .description(allocateCmd.description)
142
+ .argument('[project]', 'Project name')
143
+ .argument('[service]', 'Service name (e.g., postgres, api)')
144
+ .option('-t, --type <type>', 'Service type (postgres, mysql, redis, api, app, custom)')
145
+ .option('-q, --quiet', 'Only output the port number (for scripting)')
146
+ .option('--json', 'Output result as JSON')
147
+ .option('--completion <mode>', 'Output for shell completion: projects, services, types')
148
+ .action(async (project, service, options) => {
149
+ // Disable blank lines for quiet or json mode
150
+ if (options.quiet || options.json) {
151
+ setShouldAddBlankLines(false);
152
+ }
153
+ await allocateCmd.execute([project, service], options);
154
+ process.exit(0);
155
+ });
156
+ // Release command
157
+ const releaseCmd = new ReleaseCommand();
158
+ program
159
+ .command('release')
160
+ .description(releaseCmd.description)
161
+ .argument('[project]', 'Project name (or port number with --port)')
162
+ .argument('[service]', 'Service name (optional if using --all or --port)')
163
+ .option('-a, --all', 'Release all ports for this project')
164
+ .option('-p, --port', 'First argument is a port number to release')
165
+ .option('-q, --quiet', 'Suppress output (exit code indicates success)')
166
+ .option('--json', 'Output result as JSON')
167
+ .option('--completion <mode>', 'Output for shell completion: projects, services')
168
+ .option('--project <name>', 'Project name for completion filtering (internal use)')
169
+ .action(async (projectOrPort, service, options) => {
170
+ // Disable blank lines for quiet or json mode
171
+ if (options.quiet || options.json) {
172
+ setShouldAddBlankLines(false);
173
+ }
174
+ const args = service ? [projectOrPort, service] : [projectOrPort];
175
+ const result = await releaseCmd.execute(args, options);
176
+ process.exit(result.success ? 0 : 1);
177
+ });
178
+ // List command
179
+ const listCmd = new ListCommand();
180
+ program
181
+ .command('list')
182
+ .description(listCmd.description)
183
+ .option('-p, --project <project>', 'Filter by project')
184
+ .option('-t, --type <type>', 'Filter by service type')
185
+ .option('--json', 'Output as JSON')
186
+ .option('-q, --quiet', 'Minimal output (just port numbers, one per line)')
187
+ .option('--completion <mode>', 'Output for shell completion: projects, services, types')
188
+ .action((options) => {
189
+ // Disable blank lines for quiet or json mode
190
+ if (options.quiet || options.json) {
191
+ setShouldAddBlankLines(false);
192
+ }
193
+ const result = listCmd.execute([], options);
194
+ if (!result.success) {
195
+ process.exit(1);
196
+ }
197
+ });
198
+ // Status command
199
+ const statusCmd = new StatusCommand();
200
+ program
201
+ .command('status')
202
+ .description(statusCmd.description)
203
+ .option('--json', 'Output as JSON')
204
+ .option('-q, --quiet', 'Minimal output (just next available ports)')
205
+ .action((options) => {
206
+ // Disable blank lines for quiet or json mode
207
+ if (options.quiet || options.json) {
208
+ setShouldAddBlankLines(false);
209
+ }
210
+ const result = statusCmd.execute([], options);
211
+ process.exit(result.success ? 0 : 1);
212
+ });
213
+ // Reserve command
214
+ const reserveCmd = new ReserveCommand();
215
+ program
216
+ .command('reserve')
217
+ .description(reserveCmd.description)
218
+ .argument('<port>', 'Port number to reserve')
219
+ .argument('[reason]', 'Reason for reservation', 'Reserved')
220
+ .option('--json', 'Output as JSON')
221
+ .option('-q, --quiet', 'Suppress output')
222
+ .action(async (portStr, reason, options) => {
223
+ // Disable blank lines for quiet or json mode
224
+ if (options.quiet || options.json) {
225
+ setShouldAddBlankLines(false);
226
+ }
227
+ const result = await reserveCmd.execute([portStr, reason], options);
228
+ process.exit(result.success ? 0 : 1);
229
+ });
230
+ // Unreserve command
231
+ const unreserveCmd = new UnreserveCommand();
232
+ program
233
+ .command('unreserve')
234
+ .description(unreserveCmd.description)
235
+ .argument('<port>', 'Port number to unreserve')
236
+ .option('--json', 'Output as JSON')
237
+ .option('-q, --quiet', 'Suppress output')
238
+ .action(async (portStr, options) => {
239
+ // Disable blank lines for quiet or json mode
240
+ if (options.quiet || options.json) {
241
+ setShouldAddBlankLines(false);
242
+ }
243
+ const result = await unreserveCmd.execute([portStr], options);
244
+ process.exit(result.success ? 0 : 1);
245
+ });
246
+ // Check command
247
+ const checkCmd = new CheckCommand();
248
+ program
249
+ .command('check')
250
+ .description(checkCmd.description)
251
+ .argument('<port>', 'Port number to check')
252
+ .option('--json', 'Output as JSON')
253
+ .option('-q, --quiet', 'Silent mode (exit code only: 0=available, 1=in use)')
254
+ .action((portStr, options) => {
255
+ // Disable blank lines for quiet or json mode
256
+ if (options.quiet || options.json) {
257
+ setShouldAddBlankLines(false);
258
+ }
259
+ const result = checkCmd.execute([portStr], options);
260
+ process.exit(result.success ? 0 : 1);
261
+ });
262
+ // Info command
263
+ const infoCmd = new InfoCommand();
264
+ program
265
+ .command('info')
266
+ .description(infoCmd.description)
267
+ .option('--json', 'Output as JSON')
268
+ .action(async (options) => {
269
+ // Disable blank lines for json mode
270
+ if (options.json) {
271
+ setShouldAddBlankLines(false);
272
+ }
273
+ const result = await infoCmd.execute([], options);
274
+ process.exit(result.success ? 0 : 1);
275
+ });
276
+ // Render command
277
+ const renderCmd = new RenderCommand();
278
+ program
279
+ .command('render')
280
+ .description(renderCmd.description)
281
+ .argument('<file>', 'Template file to process')
282
+ .option('-p, --project <n>', 'Project name (overrides DEVPORTS_PROJECT_NAME in template)')
283
+ .option('-o, --output <file>', 'Output file (defaults to stdout)')
284
+ .option('--json', 'Output allocation info as JSON')
285
+ .action(async (file, options) => {
286
+ // Disable blank lines for json mode
287
+ if (options.json) {
288
+ setShouldAddBlankLines(false);
289
+ }
290
+ const result = await renderCmd.execute([file], options);
291
+ process.exit(result.success ? 0 : 1);
292
+ });
293
+ // Gitignore command
294
+ const gitignoreCmd = new GitignoreCommand();
295
+ program
296
+ .command('gitignore')
297
+ .description(gitignoreCmd.description)
298
+ .option('--preview', 'Show what would be added without making changes')
299
+ .option('--clean', 'Remove stale devports entries from .gitignore')
300
+ .option('--json', 'Output as JSON')
301
+ .action(async (options) => {
302
+ // Disable blank lines for json mode
303
+ if (options.json) {
304
+ setShouldAddBlankLines(false);
305
+ }
306
+ const result = await gitignoreCmd.execute([], options);
307
+ process.exit(result.success ? 0 : 1);
308
+ });
309
+ // Completion command
310
+ const completionCmd = new CompletionCommand();
311
+ program
312
+ .command('completion')
313
+ .description(completionCmd.description)
314
+ .argument('[shell]', 'Shell type (bash, zsh)', 'zsh')
315
+ .option('-i, --install', 'Install completion script to user directory')
316
+ .option('-u, --uninstall', 'Remove completion script and shell config')
317
+ .option('--check', 'Check if completion is already installed')
318
+ .option('--test', 'Test if completion works in a fresh shell')
319
+ .option('--json', 'Output as JSON')
320
+ .action(async (shell, options) => {
321
+ // Disable blank lines for json mode
322
+ if (options.json) {
323
+ setShouldAddBlankLines(false);
324
+ }
325
+ const result = await completionCmd.execute([shell], options);
326
+ process.exit(result.success ? 0 : 1);
327
+ });
328
+ program.parse();
329
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Command, CommandOptions, CommandResult } from './base-command.js';
2
+ export declare class AllocateCommand implements Command {
3
+ name: string;
4
+ description: string;
5
+ execute(args: string[], options: CommandOptions): Promise<CommandResult>;
6
+ private handleCompletion;
7
+ }
8
+ //# sourceMappingURL=allocate.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allocate.command.d.ts","sourceRoot":"","sources":["../../src/commands/allocate.command.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAM3B,qBAAa,eAAgB,YAAW,OAAO;IAC7C,IAAI,SAAc;IAClB,WAAW,SAA2C;IAEhD,OAAO,CACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC;IAuDzB,OAAO,CAAC,gBAAgB;CAwCzB"}
@@ -0,0 +1,84 @@
1
+ import { handleCommandError, } from './base-command.js';
2
+ import { allocatePort, listAllocations } from '../port-manager.js';
3
+ import { ValidationService } from '../services/validation-service.js';
4
+ import { ResponseFormatter } from '../services/response-formatter.js';
5
+ import { VALID_PORT_TYPES } from '../types.js';
6
+ export class AllocateCommand {
7
+ name = 'allocate';
8
+ description = 'Allocate a port for a project/service';
9
+ async execute(args, options) {
10
+ try {
11
+ // Handle completion mode
12
+ if (options.completion) {
13
+ return this.handleCompletion(options);
14
+ }
15
+ const [project, service] = args;
16
+ if (!project) {
17
+ throw new Error('Project name is required');
18
+ }
19
+ if (!service) {
20
+ throw new Error('Service name is required');
21
+ }
22
+ if (!options.type) {
23
+ throw new Error('Service type is required. Use --type to specify one of: postgres, mysql, redis, api, app, custom');
24
+ }
25
+ // Validate inputs
26
+ const validatedProject = ValidationService.validateProjectName(project);
27
+ const validatedService = ValidationService.validateServiceName(service);
28
+ const validatedType = ValidationService.validateServiceType(options.type);
29
+ const port = await allocatePort(validatedProject, validatedService, validatedType);
30
+ // Handle quiet mode first
31
+ if (options.quiet) {
32
+ return ResponseFormatter.quiet(port, { port });
33
+ }
34
+ // Use centralized formatter for all output patterns
35
+ const response = ResponseFormatter.portAllocation(port, validatedProject, validatedService, validatedType);
36
+ return ResponseFormatter.format(response, options);
37
+ }
38
+ catch (error) {
39
+ handleCommandError(error, options);
40
+ return { success: false };
41
+ }
42
+ }
43
+ handleCompletion(options) {
44
+ const mode = options.completion.toLowerCase();
45
+ switch (mode) {
46
+ case 'projects': {
47
+ const allocations = listAllocations();
48
+ const projects = [...new Set(allocations.map((a) => a.project))].sort();
49
+ projects.forEach((p) => console.log(p));
50
+ process.exit(0);
51
+ break;
52
+ }
53
+ case 'services': {
54
+ // For services, we need a specific project - check if one was provided
55
+ const project = options.project;
56
+ if (project) {
57
+ const allocations = listAllocations({ project });
58
+ const services = [
59
+ ...new Set(allocations.map((a) => a.service)),
60
+ ].sort();
61
+ services.forEach((s) => console.log(s));
62
+ }
63
+ else {
64
+ // No project specified, return all services
65
+ const allocations = listAllocations();
66
+ const services = [
67
+ ...new Set(allocations.map((a) => a.service)),
68
+ ].sort();
69
+ services.forEach((s) => console.log(s));
70
+ }
71
+ process.exit(0);
72
+ break;
73
+ }
74
+ case 'types': {
75
+ VALID_PORT_TYPES.forEach((t) => console.log(t));
76
+ process.exit(0);
77
+ break;
78
+ }
79
+ default:
80
+ throw new Error(`Invalid completion mode: ${mode}`);
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=allocate.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allocate.command.js","sourceRoot":"","sources":["../../src/commands/allocate.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Base command interface and utilities for CLI commands
3
+ */
4
+ export interface CommandOptions {
5
+ [key: string]: unknown;
6
+ }
7
+ export interface CommandResult {
8
+ success: boolean;
9
+ message?: string;
10
+ data?: unknown;
11
+ }
12
+ /**
13
+ * Base interface for all commands
14
+ */
15
+ export interface Command {
16
+ name: string;
17
+ description: string;
18
+ execute(args: string[], options: CommandOptions): Promise<CommandResult> | CommandResult;
19
+ }
20
+ /**
21
+ * Helper function for consistent JSON/text output
22
+ */
23
+ export declare function formatOutput(result: CommandResult, options: CommandOptions): void;
24
+ /**
25
+ * Helper function for error handling
26
+ */
27
+ export declare function handleCommandError(error: unknown, options: CommandOptions): void;
28
+ //# sourceMappingURL=base-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-command.d.ts","sourceRoot":"","sources":["../../src/commands/base-command.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CACL,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,cAAc,GACtB,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,cAAc,GACtB,IAAI,CAiBN"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Base command interface and utilities for CLI commands
3
+ */
4
+ /**
5
+ * Helper function for consistent JSON/text output
6
+ */
7
+ export function formatOutput(result, options) {
8
+ if (options.json) {
9
+ console.log(JSON.stringify(result));
10
+ }
11
+ else if (result.message) {
12
+ console.log(result.message);
13
+ }
14
+ }
15
+ /**
16
+ * Helper function for error handling
17
+ */
18
+ export function handleCommandError(error, options) {
19
+ const message = error instanceof Error ? error.message : String(error);
20
+ if (!options.quiet) {
21
+ if (options.json) {
22
+ console.error(JSON.stringify({
23
+ success: false,
24
+ error: message,
25
+ }));
26
+ }
27
+ else {
28
+ console.error(`❌ ${message}`);
29
+ }
30
+ }
31
+ process.exit(1);
32
+ }
33
+ //# sourceMappingURL=base-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-command.js","sourceRoot":"","sources":["../../src/commands/base-command.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwBH;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAqB,EACrB,OAAuB;IAEvB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAc,EACd,OAAuB;IAEvB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CACX,IAAI,CAAC,SAAS,CAAC;gBACb,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,OAAO;aACf,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Command, CommandOptions, CommandResult } from './base-command.js';
2
+ export declare class CheckCommand implements Command {
3
+ name: string;
4
+ description: string;
5
+ execute(args: string[], options: CommandOptions): CommandResult;
6
+ }
7
+ //# sourceMappingURL=check.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.command.d.ts","sourceRoot":"","sources":["../../src/commands/check.command.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAI3B,qBAAa,YAAa,YAAW,OAAO;IAC1C,IAAI,SAAW;IACf,WAAW,SAAoD;IAE/D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,aAAa;CAyChE"}
@@ -0,0 +1,44 @@
1
+ import { handleCommandError, } from './base-command.js';
2
+ import { listAllocations } from '../port-manager.js';
3
+ import { ValidationService } from '../services/validation-service.js';
4
+ export class CheckCommand {
5
+ name = 'check';
6
+ description = 'Check if a port is available (non-destructive)';
7
+ execute(args, options) {
8
+ try {
9
+ const [portStr] = args;
10
+ if (!portStr) {
11
+ throw new Error('Port number is required');
12
+ }
13
+ const validatedPort = ValidationService.validatePort(portStr);
14
+ const allocations = listAllocations();
15
+ const allocated = allocations.find((a) => a.port === validatedPort);
16
+ const available = !allocated;
17
+ const message = options.quiet
18
+ ? undefined
19
+ : available
20
+ ? `✅ Port ${validatedPort} is available`
21
+ : `❌ Port ${validatedPort} is allocated to ${ValidationService.sanitizeForDisplay(allocated?.project ?? 'unknown')}/${ValidationService.sanitizeForDisplay(allocated?.service ?? 'unknown')}`;
22
+ if (!options.quiet) {
23
+ console.log(message);
24
+ }
25
+ if (options.json) {
26
+ return {
27
+ success: available,
28
+ message,
29
+ data: {
30
+ port: validatedPort,
31
+ available,
32
+ allocation: allocated ?? null,
33
+ },
34
+ };
35
+ }
36
+ return { success: available, message };
37
+ }
38
+ catch (error) {
39
+ handleCommandError(error, options);
40
+ return { success: false };
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=check.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.command.js","sourceRoot":"","sources":["../../src/commands/check.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,OAAO,YAAY;IACvB,IAAI,GAAG,OAAO,CAAC;IACf,WAAW,GAAG,gDAAgD,CAAC;IAE/D,OAAO,CAAC,IAAc,EAAE,OAAuB;QAC7C,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;YAEvB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC;YAE7B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK;gBAC3B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,SAAS;oBACT,CAAC,CAAC,UAAU,aAAa,eAAe;oBACxC,CAAC,CAAC,UAAU,aAAa,oBAAoB,iBAAiB,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,IAAI,SAAS,CAAC,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC;YAElM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE,SAAS;oBAClB,OAAO;oBACP,IAAI,EAAE;wBACJ,IAAI,EAAE,aAAa;wBACnB,SAAS;wBACT,UAAU,EAAE,SAAS,IAAI,IAAI;qBAC9B;iBACF,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { Command, CommandOptions, CommandResult } from './base-command.js';
2
+ export declare class CompletionCommand implements Command {
3
+ name: string;
4
+ description: string;
5
+ execute(args: string[], options: CommandOptions): Promise<CommandResult>;
6
+ }
7
+ //# sourceMappingURL=completion.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.command.d.ts","sourceRoot":"","sources":["../../src/commands/completion.command.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAS3B,qBAAa,iBAAkB,YAAW,OAAO;IAC/C,IAAI,SAAgB;IACpB,WAAW,SAAsC;IAE3C,OAAO,CACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC;CAyI1B"}