@specific.dev/cli 0.1.37 → 0.1.38

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 (173) hide show
  1. package/dist/admin/404/index.html +1 -1
  2. package/dist/admin/404.html +1 -1
  3. package/dist/admin/__next.__PAGE__.txt +2 -2
  4. package/dist/admin/__next._full.txt +3 -3
  5. package/dist/admin/__next._head.txt +1 -1
  6. package/dist/admin/__next._index.txt +2 -2
  7. package/dist/admin/__next._tree.txt +2 -2
  8. package/dist/admin/_next/static/chunks/{de6af6d8adf8b50a.js → 0476153b08658d87.js} +2 -2
  9. package/dist/admin/_next/static/chunks/{4ab079bdcb131778.js → 1de437acc5206b1f.js} +2 -2
  10. package/dist/admin/_next/static/chunks/5ff94899b8b7a03a.css +3 -0
  11. package/dist/admin/_next/static/chunks/{895a6f91f0b479fb.js → 6aae09c9429b9f24.js} +2 -2
  12. package/dist/admin/_next/static/chunks/b71388016463cab2.js +1 -0
  13. package/dist/admin/_not-found/__next._full.txt +2 -2
  14. package/dist/admin/_not-found/__next._head.txt +1 -1
  15. package/dist/admin/_not-found/__next._index.txt +2 -2
  16. package/dist/admin/_not-found/__next._not-found.__PAGE__.txt +1 -1
  17. package/dist/admin/_not-found/__next._not-found.txt +1 -1
  18. package/dist/admin/_not-found/__next._tree.txt +2 -2
  19. package/dist/admin/_not-found/index.html +1 -1
  20. package/dist/admin/_not-found/index.txt +2 -2
  21. package/dist/admin/databases/__next._full.txt +3 -3
  22. package/dist/admin/databases/__next._head.txt +1 -1
  23. package/dist/admin/databases/__next._index.txt +2 -2
  24. package/dist/admin/databases/__next._tree.txt +2 -2
  25. package/dist/admin/databases/__next.databases.__PAGE__.txt +2 -2
  26. package/dist/admin/databases/__next.databases.txt +1 -1
  27. package/dist/admin/databases/index.html +1 -1
  28. package/dist/admin/databases/index.txt +3 -3
  29. package/dist/admin/index.html +1 -1
  30. package/dist/admin/index.txt +3 -3
  31. package/dist/cli.js +1182 -496
  32. package/package.json +1 -1
  33. package/dist/admin/_next/static/1o2O2QPOKhuZyxcNaCjq8/_buildManifest.js +0 -11
  34. package/dist/admin/_next/static/1o2O2QPOKhuZyxcNaCjq8/_clientMiddlewareManifest.json +0 -1
  35. package/dist/admin/_next/static/1o2O2QPOKhuZyxcNaCjq8/_ssgManifest.js +0 -1
  36. package/dist/admin/_next/static/2ZtqtFX2EkuM82mTM7NWT/_buildManifest.js +0 -11
  37. package/dist/admin/_next/static/2ZtqtFX2EkuM82mTM7NWT/_clientMiddlewareManifest.json +0 -1
  38. package/dist/admin/_next/static/2ZtqtFX2EkuM82mTM7NWT/_ssgManifest.js +0 -1
  39. package/dist/admin/_next/static/2vLF5bo4ZtUfhs8bdQBoF/_buildManifest.js +0 -11
  40. package/dist/admin/_next/static/2vLF5bo4ZtUfhs8bdQBoF/_clientMiddlewareManifest.json +0 -1
  41. package/dist/admin/_next/static/2vLF5bo4ZtUfhs8bdQBoF/_ssgManifest.js +0 -1
  42. package/dist/admin/_next/static/8_8s51m7RbLVvbIechG-b/_buildManifest.js +0 -11
  43. package/dist/admin/_next/static/8_8s51m7RbLVvbIechG-b/_clientMiddlewareManifest.json +0 -1
  44. package/dist/admin/_next/static/8_8s51m7RbLVvbIechG-b/_ssgManifest.js +0 -1
  45. package/dist/admin/_next/static/C4Y44KtLnP684m57gN3Ga/_buildManifest.js +0 -11
  46. package/dist/admin/_next/static/C4Y44KtLnP684m57gN3Ga/_clientMiddlewareManifest.json +0 -1
  47. package/dist/admin/_next/static/C4Y44KtLnP684m57gN3Ga/_ssgManifest.js +0 -1
  48. package/dist/admin/_next/static/DBeh36kAJnZBeBMJSPBW8/_buildManifest.js +0 -11
  49. package/dist/admin/_next/static/DBeh36kAJnZBeBMJSPBW8/_clientMiddlewareManifest.json +0 -1
  50. package/dist/admin/_next/static/DBeh36kAJnZBeBMJSPBW8/_ssgManifest.js +0 -1
  51. package/dist/admin/_next/static/REKEUu6DP2t99jKSAqNOu/_buildManifest.js +0 -11
  52. package/dist/admin/_next/static/REKEUu6DP2t99jKSAqNOu/_clientMiddlewareManifest.json +0 -1
  53. package/dist/admin/_next/static/REKEUu6DP2t99jKSAqNOu/_ssgManifest.js +0 -1
  54. package/dist/admin/_next/static/TDGT3mkKtTe0w_CxujLxI/_buildManifest.js +0 -11
  55. package/dist/admin/_next/static/TDGT3mkKtTe0w_CxujLxI/_clientMiddlewareManifest.json +0 -1
  56. package/dist/admin/_next/static/TDGT3mkKtTe0w_CxujLxI/_ssgManifest.js +0 -1
  57. package/dist/admin/_next/static/ZHMJ-g7mAlAMt_2uCXeEk/_buildManifest.js +0 -11
  58. package/dist/admin/_next/static/ZHMJ-g7mAlAMt_2uCXeEk/_clientMiddlewareManifest.json +0 -1
  59. package/dist/admin/_next/static/ZHMJ-g7mAlAMt_2uCXeEk/_ssgManifest.js +0 -1
  60. package/dist/admin/_next/static/a6JDAB-CdvWPvS4sBgJji/_buildManifest.js +0 -11
  61. package/dist/admin/_next/static/a6JDAB-CdvWPvS4sBgJji/_clientMiddlewareManifest.json +0 -1
  62. package/dist/admin/_next/static/a6JDAB-CdvWPvS4sBgJji/_ssgManifest.js +0 -1
  63. package/dist/admin/_next/static/abFUeBpymhlx-IxygVnM9/_buildManifest.js +0 -11
  64. package/dist/admin/_next/static/abFUeBpymhlx-IxygVnM9/_clientMiddlewareManifest.json +0 -1
  65. package/dist/admin/_next/static/abFUeBpymhlx-IxygVnM9/_ssgManifest.js +0 -1
  66. package/dist/admin/_next/static/chunks/1584f10ea1cebcb2.js +0 -4
  67. package/dist/admin/_next/static/chunks/195bbec70cfcd241.js +0 -2
  68. package/dist/admin/_next/static/chunks/2583656ea9ac4ad6.js +0 -5
  69. package/dist/admin/_next/static/chunks/605800ff25160d05.js +0 -1
  70. package/dist/admin/_next/static/chunks/656b870f0567ed5f.js +0 -1
  71. package/dist/admin/_next/static/chunks/71098a6cd6181738.css +0 -3
  72. package/dist/admin/_next/static/chunks/9032f4a1aac1ca5d.css +0 -3
  73. package/dist/admin/_next/static/chunks/a28af2dc6f5fbaad.js +0 -1
  74. package/dist/admin/_next/static/chunks/b4205fc2f84bda68.css +0 -3
  75. package/dist/admin/_next/static/chunks/c1a750c25bc8d092.js +0 -1
  76. package/dist/admin/_next/static/chunks/c3d30f6f144dca51.js +0 -2
  77. package/dist/admin/_next/static/chunks/cbf55ce8731457ae.js +0 -2
  78. package/dist/admin/_next/static/chunks/f0c001244d275aab.js +0 -5
  79. package/dist/admin/_next/static/chunks/fde89fd76ad6a3d0.css +0 -3
  80. package/dist/admin/_next/static/chunks/turbopack-a3d691c83d4b1778.js +0 -4
  81. package/dist/admin/_next/static/dcjrfD44GuB6g8bZ6BcFm/_buildManifest.js +0 -11
  82. package/dist/admin/_next/static/dcjrfD44GuB6g8bZ6BcFm/_clientMiddlewareManifest.json +0 -1
  83. package/dist/admin/_next/static/dcjrfD44GuB6g8bZ6BcFm/_ssgManifest.js +0 -1
  84. package/dist/admin/_next/static/fTEa8Scx922n-dMuqN3Vc/_buildManifest.js +0 -11
  85. package/dist/admin/_next/static/fTEa8Scx922n-dMuqN3Vc/_clientMiddlewareManifest.json +0 -1
  86. package/dist/admin/_next/static/fTEa8Scx922n-dMuqN3Vc/_ssgManifest.js +0 -1
  87. package/dist/admin/_next/static/kZNwyhHft01wPtJ_AvqQT/_buildManifest.js +0 -11
  88. package/dist/admin/_next/static/kZNwyhHft01wPtJ_AvqQT/_clientMiddlewareManifest.json +0 -1
  89. package/dist/admin/_next/static/kZNwyhHft01wPtJ_AvqQT/_ssgManifest.js +0 -1
  90. package/dist/admin/_next/static/kyVInC6N3DY6NWnjkLQ4J/_buildManifest.js +0 -11
  91. package/dist/admin/_next/static/kyVInC6N3DY6NWnjkLQ4J/_clientMiddlewareManifest.json +0 -1
  92. package/dist/admin/_next/static/kyVInC6N3DY6NWnjkLQ4J/_ssgManifest.js +0 -1
  93. package/dist/admin/_next/static/twedXBdhyxpjS68UQoNAc/_buildManifest.js +0 -11
  94. package/dist/admin/_next/static/twedXBdhyxpjS68UQoNAc/_clientMiddlewareManifest.json +0 -1
  95. package/dist/admin/_next/static/twedXBdhyxpjS68UQoNAc/_ssgManifest.js +0 -1
  96. package/dist/cli.d.ts +0 -3
  97. package/dist/cli.d.ts.map +0 -1
  98. package/dist/cli.js.map +0 -1
  99. package/dist/commands/check.d.ts +0 -2
  100. package/dist/commands/check.d.ts.map +0 -1
  101. package/dist/commands/check.js +0 -104
  102. package/dist/commands/check.js.map +0 -1
  103. package/dist/commands/clean.d.ts +0 -2
  104. package/dist/commands/clean.d.ts.map +0 -1
  105. package/dist/commands/clean.js +0 -70
  106. package/dist/commands/clean.js.map +0 -1
  107. package/dist/commands/deploy.d.ts +0 -2
  108. package/dist/commands/deploy.d.ts.map +0 -1
  109. package/dist/commands/deploy.js +0 -11
  110. package/dist/commands/deploy.js.map +0 -1
  111. package/dist/commands/dev.d.ts +0 -2
  112. package/dist/commands/dev.d.ts.map +0 -1
  113. package/dist/commands/dev.js +0 -398
  114. package/dist/commands/dev.js.map +0 -1
  115. package/dist/commands/docs.d.ts +0 -2
  116. package/dist/commands/docs.d.ts.map +0 -1
  117. package/dist/commands/docs.js +0 -32
  118. package/dist/commands/docs.js.map +0 -1
  119. package/dist/commands/exec.d.ts +0 -2
  120. package/dist/commands/exec.d.ts.map +0 -1
  121. package/dist/commands/exec.js +0 -178
  122. package/dist/commands/exec.js.map +0 -1
  123. package/dist/commands/init.d.ts +0 -2
  124. package/dist/commands/init.d.ts.map +0 -1
  125. package/dist/commands/init.js +0 -339
  126. package/dist/commands/init.js.map +0 -1
  127. package/dist/commands/psql.d.ts +0 -2
  128. package/dist/commands/psql.d.ts.map +0 -1
  129. package/dist/commands/psql.js +0 -53
  130. package/dist/commands/psql.js.map +0 -1
  131. package/dist/commands/secrets.d.ts +0 -3
  132. package/dist/commands/secrets.d.ts.map +0 -1
  133. package/dist/commands/secrets.js +0 -136
  134. package/dist/commands/secrets.js.map +0 -1
  135. package/dist/lib/dev/database-manager.d.ts +0 -17
  136. package/dist/lib/dev/database-manager.d.ts.map +0 -1
  137. package/dist/lib/dev/database-manager.js +0 -114
  138. package/dist/lib/dev/database-manager.js.map +0 -1
  139. package/dist/lib/dev/env-resolver.d.ts +0 -14
  140. package/dist/lib/dev/env-resolver.d.ts.map +0 -1
  141. package/dist/lib/dev/env-resolver.js +0 -109
  142. package/dist/lib/dev/env-resolver.js.map +0 -1
  143. package/dist/lib/dev/http-proxy.d.ts +0 -11
  144. package/dist/lib/dev/http-proxy.d.ts.map +0 -1
  145. package/dist/lib/dev/http-proxy.js +0 -165
  146. package/dist/lib/dev/http-proxy.js.map +0 -1
  147. package/dist/lib/dev/index.d.ts +0 -11
  148. package/dist/lib/dev/index.d.ts.map +0 -1
  149. package/dist/lib/dev/index.js +0 -7
  150. package/dist/lib/dev/index.js.map +0 -1
  151. package/dist/lib/dev/instance-state.d.ts +0 -45
  152. package/dist/lib/dev/instance-state.d.ts.map +0 -1
  153. package/dist/lib/dev/instance-state.js +0 -213
  154. package/dist/lib/dev/instance-state.js.map +0 -1
  155. package/dist/lib/dev/port-allocator.d.ts +0 -5
  156. package/dist/lib/dev/port-allocator.d.ts.map +0 -1
  157. package/dist/lib/dev/port-allocator.js +0 -21
  158. package/dist/lib/dev/port-allocator.js.map +0 -1
  159. package/dist/lib/dev/service-runner.d.ts +0 -16
  160. package/dist/lib/dev/service-runner.d.ts.map +0 -1
  161. package/dist/lib/dev/service-runner.js +0 -61
  162. package/dist/lib/dev/service-runner.js.map +0 -1
  163. package/dist/lib/secrets/index.d.ts +0 -2
  164. package/dist/lib/secrets/index.d.ts.map +0 -1
  165. package/dist/lib/secrets/index.js +0 -2
  166. package/dist/lib/secrets/index.js.map +0 -1
  167. package/dist/lib/secrets/parser.d.ts +0 -37
  168. package/dist/lib/secrets/parser.d.ts.map +0 -1
  169. package/dist/lib/secrets/parser.js +0 -116
  170. package/dist/lib/secrets/parser.js.map +0 -1
  171. /package/dist/admin/_next/static/{0zkv3YeV6IWOWVWE1S1A1 → dtzWfchSIjRVrII5xoJl6}/_buildManifest.js +0 -0
  172. /package/dist/admin/_next/static/{0zkv3YeV6IWOWVWE1S1A1 → dtzWfchSIjRVrII5xoJl6}/_clientMiddlewareManifest.json +0 -0
  173. /package/dist/admin/_next/static/{0zkv3YeV6IWOWVWE1S1A1 → dtzWfchSIjRVrII5xoJl6}/_ssgManifest.js +0 -0
@@ -1,213 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- export class InstanceStateManager {
4
- stateDir;
5
- statePath;
6
- lockPath;
7
- ownsInstances = false;
8
- constructor(projectRoot) {
9
- this.stateDir = path.join(projectRoot, ".specific");
10
- this.statePath = path.join(this.stateDir, "state.json");
11
- this.lockPath = path.join(this.stateDir, "state.lock");
12
- }
13
- ensureStateDir() {
14
- if (!fs.existsSync(this.stateDir)) {
15
- fs.mkdirSync(this.stateDir, { recursive: true });
16
- }
17
- }
18
- isProcessRunning(pid) {
19
- try {
20
- process.kill(pid, 0);
21
- return true;
22
- }
23
- catch (e) {
24
- const err = e;
25
- // ESRCH means no such process
26
- return err.code !== "ESRCH";
27
- }
28
- }
29
- async acquireLock(timeoutMs = 5000) {
30
- this.ensureStateDir();
31
- const startTime = Date.now();
32
- while (Date.now() - startTime < timeoutMs) {
33
- try {
34
- // Try to create lock file exclusively
35
- const fd = fs.openSync(this.lockPath, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_WRONLY);
36
- fs.writeSync(fd, String(process.pid));
37
- fs.closeSync(fd);
38
- return () => {
39
- try {
40
- fs.unlinkSync(this.lockPath);
41
- }
42
- catch {
43
- // Ignore errors when removing lock
44
- }
45
- };
46
- }
47
- catch (e) {
48
- const err = e;
49
- if (err.code === "EEXIST") {
50
- // Lock exists, check if owner is still alive
51
- try {
52
- const lockPid = parseInt(fs.readFileSync(this.lockPath, "utf-8").trim(), 10);
53
- if (!this.isProcessRunning(lockPid)) {
54
- // Owner is dead, remove stale lock
55
- fs.unlinkSync(this.lockPath);
56
- continue;
57
- }
58
- }
59
- catch {
60
- // Error reading lock, try to remove it
61
- try {
62
- fs.unlinkSync(this.lockPath);
63
- }
64
- catch {
65
- // Ignore
66
- }
67
- continue;
68
- }
69
- // Owner is alive, wait and retry
70
- await new Promise((resolve) => setTimeout(resolve, 100));
71
- }
72
- else {
73
- throw e;
74
- }
75
- }
76
- }
77
- throw new Error("Failed to acquire state lock (timeout)");
78
- }
79
- async getExistingInstances() {
80
- if (!fs.existsSync(this.statePath)) {
81
- return null;
82
- }
83
- const releaseLock = await this.acquireLock();
84
- try {
85
- const content = fs.readFileSync(this.statePath, "utf-8");
86
- const state = JSON.parse(content);
87
- // Verify owner is still running
88
- if (!this.isProcessRunning(state.owner.pid)) {
89
- return null; // State is stale
90
- }
91
- return state;
92
- }
93
- catch {
94
- return null;
95
- }
96
- finally {
97
- releaseLock();
98
- }
99
- }
100
- async cleanStaleState() {
101
- if (!fs.existsSync(this.statePath)) {
102
- return false;
103
- }
104
- const releaseLock = await this.acquireLock();
105
- try {
106
- const content = fs.readFileSync(this.statePath, "utf-8");
107
- const state = JSON.parse(content);
108
- if (!this.isProcessRunning(state.owner.pid)) {
109
- // Owner is dead, clean up state
110
- fs.unlinkSync(this.statePath);
111
- return true;
112
- }
113
- return false;
114
- }
115
- catch {
116
- // Error reading state, try to clean it
117
- try {
118
- fs.unlinkSync(this.statePath);
119
- return true;
120
- }
121
- catch {
122
- // Ignore
123
- }
124
- return false;
125
- }
126
- finally {
127
- releaseLock();
128
- }
129
- }
130
- async claimOwnership(command) {
131
- const releaseLock = await this.acquireLock();
132
- try {
133
- // Check if state already exists
134
- if (fs.existsSync(this.statePath)) {
135
- const content = fs.readFileSync(this.statePath, "utf-8");
136
- const state = JSON.parse(content);
137
- if (this.isProcessRunning(state.owner.pid)) {
138
- throw new Error(`Instances already owned by PID ${state.owner.pid}`);
139
- }
140
- // Owner is dead, we can take over
141
- }
142
- const state = {
143
- version: 1,
144
- owner: {
145
- pid: process.pid,
146
- command,
147
- startedAt: new Date().toISOString(),
148
- },
149
- databases: {},
150
- services: {},
151
- };
152
- this.writeStateAtomic(state);
153
- this.ownsInstances = true;
154
- }
155
- finally {
156
- releaseLock();
157
- }
158
- }
159
- async registerDatabase(name, info) {
160
- if (!this.ownsInstances) {
161
- throw new Error("Cannot register database: not the owner");
162
- }
163
- const releaseLock = await this.acquireLock();
164
- try {
165
- const state = this.readState();
166
- state.databases[name] = info;
167
- this.writeStateAtomic(state);
168
- }
169
- finally {
170
- releaseLock();
171
- }
172
- }
173
- async registerService(name, info) {
174
- if (!this.ownsInstances) {
175
- throw new Error("Cannot register service: not the owner");
176
- }
177
- const releaseLock = await this.acquireLock();
178
- try {
179
- const state = this.readState();
180
- state.services[name] = info;
181
- this.writeStateAtomic(state);
182
- }
183
- finally {
184
- releaseLock();
185
- }
186
- }
187
- async releaseOwnership() {
188
- if (!this.ownsInstances) {
189
- return;
190
- }
191
- const releaseLock = await this.acquireLock();
192
- try {
193
- if (fs.existsSync(this.statePath)) {
194
- fs.unlinkSync(this.statePath);
195
- }
196
- this.ownsInstances = false;
197
- }
198
- finally {
199
- releaseLock();
200
- }
201
- }
202
- readState() {
203
- const content = fs.readFileSync(this.statePath, "utf-8");
204
- return JSON.parse(content);
205
- }
206
- writeStateAtomic(state) {
207
- this.ensureStateDir();
208
- const tmpPath = this.statePath + ".tmp";
209
- fs.writeFileSync(tmpPath, JSON.stringify(state, null, 2));
210
- fs.renameSync(tmpPath, this.statePath);
211
- }
212
- }
213
- //# sourceMappingURL=instance-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instance-state.js","sourceRoot":"","sources":["../../../src/lib/dev/instance-state.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export declare class PortAllocator {
2
- private usedPorts;
3
- allocate(): number;
4
- }
5
- //# sourceMappingURL=port-allocator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"port-allocator.d.ts","sourceRoot":"","sources":["../../../src/lib/dev/port-allocator.ts"],"names":[],"mappings":"AAMA,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAA0B;IAE3C,QAAQ,IAAI,MAAM;CAgBnB"}
@@ -1,21 +0,0 @@
1
- // Port allocator that assigns random unique ports in a high range
2
- // Uses range 40000-49999 to avoid conflicts with common applications
3
- const PORT_RANGE_START = 40000;
4
- const PORT_RANGE_END = 49999;
5
- export class PortAllocator {
6
- usedPorts = new Set();
7
- allocate() {
8
- const rangeSize = PORT_RANGE_END - PORT_RANGE_START + 1;
9
- // Safety check to prevent infinite loop
10
- if (this.usedPorts.size >= rangeSize) {
11
- throw new Error("No available ports in range");
12
- }
13
- let port;
14
- do {
15
- port = PORT_RANGE_START + Math.floor(Math.random() * rangeSize);
16
- } while (this.usedPorts.has(port));
17
- this.usedPorts.add(port);
18
- return port;
19
- }
20
- }
21
- //# sourceMappingURL=port-allocator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"port-allocator.js","sourceRoot":"","sources":["../../../src/lib/dev/port-allocator.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,qEAAqE;AAErE,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,MAAM,OAAO,aAAa;IAChB,SAAS,GAAgB,IAAI,GAAG,EAAE,CAAC;IAE3C,QAAQ;QACN,MAAM,SAAS,GAAG,cAAc,GAAG,gBAAgB,GAAG,CAAC,CAAC;QAExD,wCAAwC;QACxC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,IAAY,CAAC;QACjB,GAAG,CAAC;YACF,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;QAClE,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAEnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1,16 +0,0 @@
1
- import { ChildProcess } from "child_process";
2
- import type { Service } from "@specific/config";
3
- import type { DatabaseInstance } from "./database-manager.js";
4
- export interface RunningService {
5
- name: string;
6
- port: number | undefined;
7
- process: ChildProcess;
8
- stop(): Promise<void>;
9
- }
10
- export interface LogLine {
11
- service: string;
12
- text: string;
13
- stream: "stdout" | "stderr";
14
- }
15
- export declare function startService(service: Service, databases: Map<string, DatabaseInstance>, secrets: Map<string, string>, port: number | undefined, onLog: (line: LogLine) => void): RunningService;
16
- //# sourceMappingURL=service-runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-runner.d.ts","sourceRoot":"","sources":["../../../src/lib/dev/service-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,YAAY,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACxC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAC7B,cAAc,CAgEhB"}
@@ -1,61 +0,0 @@
1
- import { spawn, ChildProcess } from "child_process";
2
- import { resolveEnv } from "./env-resolver.js";
3
- export function startService(service, databases, secrets, port, onLog) {
4
- // Determine command: prefer dev.command, fallback to command
5
- const command = service.dev?.command ?? service.command;
6
- if (!command) {
7
- throw new Error(`Service "${service.name}" has no command`);
8
- }
9
- // Resolve environment variables
10
- const resolvedEnv = resolveEnv(service.env, databases, secrets, port);
11
- // Spawn the process
12
- const child = spawn(command, {
13
- shell: true,
14
- cwd: process.cwd(),
15
- env: {
16
- ...process.env,
17
- ...resolvedEnv,
18
- },
19
- stdio: ["ignore", "pipe", "pipe"],
20
- });
21
- // Handle stdout
22
- child.stdout?.on("data", (data) => {
23
- const lines = data.toString().split("\n");
24
- for (const line of lines) {
25
- if (line.trim()) {
26
- onLog({ service: service.name, text: line, stream: "stdout" });
27
- }
28
- }
29
- });
30
- // Handle stderr
31
- child.stderr?.on("data", (data) => {
32
- const lines = data.toString().split("\n");
33
- for (const line of lines) {
34
- if (line.trim()) {
35
- onLog({ service: service.name, text: line, stream: "stderr" });
36
- }
37
- }
38
- });
39
- return {
40
- name: service.name,
41
- port,
42
- process: child,
43
- async stop() {
44
- return new Promise((resolve) => {
45
- if (child.killed) {
46
- resolve();
47
- return;
48
- }
49
- child.once("exit", () => resolve());
50
- child.kill("SIGTERM");
51
- // Force kill after 5 seconds
52
- setTimeout(() => {
53
- if (!child.killed) {
54
- child.kill("SIGKILL");
55
- }
56
- }, 5000);
57
- });
58
- },
59
- };
60
- }
61
- //# sourceMappingURL=service-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-runner.js","sourceRoot":"","sources":["../../../src/lib/dev/service-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAe/C,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,SAAwC,EACxC,OAA4B,EAC5B,IAAwB,EACxB,KAA8B;IAE9B,6DAA6D;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IACxD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,IAAI,kBAAkB,CAAC,CAAC;IAC9D,CAAC;IAED,gCAAgC;IAChC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAEtE,oBAAoB;IACpB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE;QAC3B,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,GAAG,WAAW;SACf;QACD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;KAClC,CAAC,CAAC;IAEH,gBAAgB;IAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gBAAgB;IAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI;QACJ,OAAO,EAAE,KAAK;QACd,KAAK,CAAC,IAAI;YACR,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAEtB,6BAA6B;gBAC7B,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;wBAClB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- export { loadSecrets, parseSecretsFile, SECRETS_FILE, loadGeneratedSecrets, saveGeneratedSecret, generateRandomString, prepareSecrets, GENERATED_SECRETS_FILE, } from "./parser.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/secrets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
@@ -1,2 +0,0 @@
1
- export { loadSecrets, parseSecretsFile, SECRETS_FILE, loadGeneratedSecrets, saveGeneratedSecret, generateRandomString, prepareSecrets, GENERATED_SECRETS_FILE, } from "./parser.js";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/secrets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,GACvB,MAAM,aAAa,CAAC"}
@@ -1,37 +0,0 @@
1
- export declare const SECRETS_FILE = "specific.secrets";
2
- export declare const GENERATED_SECRETS_FILE = ".specific/generated-secrets.json";
3
- /**
4
- * Parse a specific.secrets file and return a map of secret names to values.
5
- * Format: HCL key = "value" pairs
6
- */
7
- export declare function parseSecretsFile(content: string): Promise<Map<string, string>>;
8
- /**
9
- * Load secrets from specific.secrets file.
10
- * Returns an empty map if the file doesn't exist.
11
- */
12
- export declare function loadSecrets(): Promise<Map<string, string>>;
13
- /**
14
- * Generate a random alphanumeric string.
15
- */
16
- export declare function generateRandomString(length?: number): string;
17
- /**
18
- * Load generated secrets from .specific/generated-secrets.json.
19
- * Returns an empty map if the file doesn't exist.
20
- */
21
- export declare function loadGeneratedSecrets(): Promise<Map<string, string>>;
22
- /**
23
- * Save a generated secret to .specific/generated-secrets.json.
24
- * Creates the file and directory if they don't exist.
25
- */
26
- export declare function saveGeneratedSecret(name: string, value: string): Promise<void>;
27
- /**
28
- * Prepare all secrets for use, handling generated secrets.
29
- * - Loads user secrets from specific.secrets
30
- * - For generated secrets not in user secrets, loads or creates from generated storage
31
- * - Returns merged secrets map ready for env resolution
32
- */
33
- export declare function prepareSecrets(secretsConfig: Array<{
34
- name: string;
35
- generated?: boolean;
36
- }>): Promise<Map<string, string>>;
37
- //# sourceMappingURL=parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/lib/secrets/parser.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,YAAY,qBAAqB,CAAC;AAC/C,eAAO,MAAM,sBAAsB,qCAAqC,CAAC;AAEzE;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgBpF;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAOhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAQhE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQzE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBpF;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,aAAa,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC1D,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgC9B"}
@@ -1,116 +0,0 @@
1
- import { readFile, writeFile, mkdir } from "fs/promises";
2
- import { existsSync } from "fs";
3
- import * as path from "path";
4
- import * as crypto from "crypto";
5
- import hcl2JsonParser from "hcl2-json-parser";
6
- const { parseToObject } = hcl2JsonParser;
7
- export const SECRETS_FILE = "specific.secrets";
8
- export const GENERATED_SECRETS_FILE = ".specific/generated-secrets.json";
9
- /**
10
- * Parse a specific.secrets file and return a map of secret names to values.
11
- * Format: HCL key = "value" pairs
12
- */
13
- export async function parseSecretsFile(content) {
14
- const secrets = new Map();
15
- if (!content.trim()) {
16
- return secrets;
17
- }
18
- const parsed = (await parseToObject(content));
19
- for (const [key, value] of Object.entries(parsed)) {
20
- if (typeof value === "string") {
21
- secrets.set(key, value);
22
- }
23
- }
24
- return secrets;
25
- }
26
- /**
27
- * Load secrets from specific.secrets file.
28
- * Returns an empty map if the file doesn't exist.
29
- */
30
- export async function loadSecrets() {
31
- if (!existsSync(SECRETS_FILE)) {
32
- return new Map();
33
- }
34
- const content = await readFile(SECRETS_FILE, "utf-8");
35
- return await parseSecretsFile(content);
36
- }
37
- /**
38
- * Generate a random alphanumeric string.
39
- */
40
- export function generateRandomString(length = 30) {
41
- const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
42
- const bytes = crypto.randomBytes(length);
43
- let result = "";
44
- for (let i = 0; i < length; i++) {
45
- result += chars[bytes[i] % chars.length];
46
- }
47
- return result;
48
- }
49
- /**
50
- * Load generated secrets from .specific/generated-secrets.json.
51
- * Returns an empty map if the file doesn't exist.
52
- */
53
- export async function loadGeneratedSecrets() {
54
- if (!existsSync(GENERATED_SECRETS_FILE)) {
55
- return new Map();
56
- }
57
- const content = await readFile(GENERATED_SECRETS_FILE, "utf-8");
58
- const parsed = JSON.parse(content);
59
- return new Map(Object.entries(parsed));
60
- }
61
- /**
62
- * Save a generated secret to .specific/generated-secrets.json.
63
- * Creates the file and directory if they don't exist.
64
- */
65
- export async function saveGeneratedSecret(name, value) {
66
- // Load existing secrets
67
- let secrets = {};
68
- if (existsSync(GENERATED_SECRETS_FILE)) {
69
- const content = await readFile(GENERATED_SECRETS_FILE, "utf-8");
70
- secrets = JSON.parse(content);
71
- }
72
- // Add new secret
73
- secrets[name] = value;
74
- // Ensure .specific directory exists
75
- const dir = path.dirname(GENERATED_SECRETS_FILE);
76
- if (!existsSync(dir)) {
77
- await mkdir(dir, { recursive: true });
78
- }
79
- // Write back
80
- await writeFile(GENERATED_SECRETS_FILE, JSON.stringify(secrets, null, 2) + "\n");
81
- }
82
- /**
83
- * Prepare all secrets for use, handling generated secrets.
84
- * - Loads user secrets from specific.secrets
85
- * - For generated secrets not in user secrets, loads or creates from generated storage
86
- * - Returns merged secrets map ready for env resolution
87
- */
88
- export async function prepareSecrets(secretsConfig) {
89
- // Load user-defined secrets
90
- const userSecrets = await loadSecrets();
91
- // Load previously generated secrets
92
- const generatedSecrets = await loadGeneratedSecrets();
93
- // Build final secrets map
94
- const finalSecrets = new Map();
95
- for (const secretDef of secretsConfig) {
96
- // Check user secrets first
97
- const userValue = userSecrets.get(secretDef.name);
98
- if (userValue !== undefined) {
99
- finalSecrets.set(secretDef.name, userValue);
100
- continue;
101
- }
102
- // For generated secrets, check or create generated value
103
- if (secretDef.generated) {
104
- let generatedValue = generatedSecrets.get(secretDef.name);
105
- if (generatedValue === undefined) {
106
- // Generate new value and persist it
107
- generatedValue = generateRandomString(30);
108
- await saveGeneratedSecret(secretDef.name, generatedValue);
109
- }
110
- finalSecrets.set(secretDef.name, generatedValue);
111
- }
112
- // Non-generated secrets without values will be handled by MissingSecretError in resolver
113
- }
114
- return finalSecrets;
115
- }
116
- //# sourceMappingURL=parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/lib/secrets/parser.ts"],"names":[],"mappings":"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"}