buncargo 1.0.29 → 3.2.0

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 (246) hide show
  1. package/dist/bin.d.ts +1 -12
  2. package/dist/bin.js +261 -253
  3. package/dist/cli/bin.d.ts +13 -0
  4. package/dist/cli/bin.js +317 -0
  5. package/dist/cli/commands/help.d.ts +1 -0
  6. package/dist/cli/commands/runtime.d.ts +5 -0
  7. package/dist/cli/commands/version.d.ts +1 -0
  8. package/dist/cli/index.d.ts +1 -0
  9. package/dist/cli/index.js +14 -0
  10. package/dist/cli/run-cli.d.ts +30 -0
  11. package/dist/cli.d.ts +1 -22
  12. package/dist/cli.js +5 -13
  13. package/dist/config/config.d.ts +1 -0
  14. package/dist/config/define-config.d.ts +13 -0
  15. package/dist/config/index.d.ts +3 -0
  16. package/dist/config/index.js +15 -0
  17. package/dist/config/merge-configs.d.ts +3 -0
  18. package/dist/config/validate-config.d.ts +3 -0
  19. package/dist/config.d.ts +1 -72
  20. package/dist/config.js +12 -12
  21. package/dist/core/docker.d.ts +1 -83
  22. package/dist/core/docker.js +35 -32
  23. package/dist/core/index.d.ts +1 -1
  24. package/dist/core/index.js +123 -118
  25. package/dist/core/network.js +2 -2
  26. package/dist/core/ports.js +1 -1
  27. package/dist/core/process.js +1 -1
  28. package/dist/core/quick-tunnel/cloudflared-process.d.ts +10 -0
  29. package/dist/core/quick-tunnel/constants.d.ts +9 -0
  30. package/dist/core/quick-tunnel/index.d.ts +17 -0
  31. package/dist/core/quick-tunnel/install.d.ts +1 -0
  32. package/dist/core/tunnel.d.ts +34 -0
  33. package/dist/core/utils.js +2 -2
  34. package/dist/core/watchdog-runner.js +45 -42
  35. package/dist/core/watchdog.d.ts +1 -0
  36. package/dist/core/watchdog.js +4 -2
  37. package/dist/docker/index.d.ts +1 -0
  38. package/dist/docker/index.js +38 -0
  39. package/dist/docker/runtime.d.ts +87 -0
  40. package/dist/docker/runtime.js +37 -0
  41. package/dist/docker-compose/compose.d.ts +1 -0
  42. package/dist/docker-compose/generated-file.d.ts +7 -0
  43. package/dist/docker-compose/index.d.ts +3 -0
  44. package/dist/docker-compose/index.js +15 -0
  45. package/dist/docker-compose/model.d.ts +6 -0
  46. package/dist/docker-compose/services/clickhouse.d.ts +16 -0
  47. package/dist/docker-compose/services/define-docker-service.d.ts +41 -0
  48. package/dist/docker-compose/services/index.d.ts +23 -0
  49. package/dist/docker-compose/services/index.js +17 -0
  50. package/dist/docker-compose/services/postgres.d.ts +12 -0
  51. package/dist/docker-compose/services/redis.d.ts +12 -0
  52. package/dist/docker-compose/services/shared.d.ts +7 -0
  53. package/dist/docker-compose/yaml.d.ts +2 -0
  54. package/dist/environment/create-dev-environment.d.ts +23 -0
  55. package/dist/environment/index.d.ts +1 -0
  56. package/dist/environment/index.js +15 -0
  57. package/dist/environment/logging.d.ts +17 -0
  58. package/dist/environment/only-apps.d.ts +10 -0
  59. package/dist/environment/seeding.d.ts +9 -0
  60. package/dist/environment.d.ts +1 -23
  61. package/dist/environment.js +12 -14
  62. package/dist/index-045jksh5.js +147 -0
  63. package/dist/index-08wa79cs.js +125 -117
  64. package/dist/index-0kxnae3z.js +335 -0
  65. package/dist/index-1mdrf7nz.js +51 -43
  66. package/dist/index-1yvbwj4k.js +262 -242
  67. package/dist/index-23ev345g.js +475 -0
  68. package/dist/index-2ckr49sf.js +228 -0
  69. package/dist/index-2f47khe5.js +376 -369
  70. package/dist/index-2fr3g85b.js +220 -183
  71. package/dist/index-38xnzpa6.js +450 -0
  72. package/dist/index-3eyrdxw9.js +577 -0
  73. package/dist/index-3h3dhtf2.js +51 -43
  74. package/dist/index-42x95209.js +51 -43
  75. package/dist/index-4gp0az1g.js +145 -0
  76. package/dist/index-4xrxh8yv.js +72 -0
  77. package/dist/index-5aq985p4.js +250 -0
  78. package/dist/index-5gmws6ah.js +181 -0
  79. package/dist/index-5hka0tff.js +78 -76
  80. package/dist/index-5rfqps4b.js +3 -0
  81. package/dist/index-5t9jxqm0.js +428 -0
  82. package/dist/index-6c1w1xk5.js +101 -0
  83. package/dist/index-6cmex7m5.js +72 -0
  84. package/dist/index-6d6x175r.js +572 -0
  85. package/dist/index-6fm7mvwj.js +118 -97
  86. package/dist/index-6srpc523.js +127 -128
  87. package/dist/index-731rzzfp.js +157 -142
  88. package/dist/index-75y4cg2z.js +51 -43
  89. package/dist/index-7ja4ywyj.js +126 -127
  90. package/dist/index-7v19es2e.js +666 -0
  91. package/dist/index-8bw1cmz4.js +531 -0
  92. package/dist/index-8hbbj1mp.js +120 -121
  93. package/dist/index-8xj2p5n5.js +118 -97
  94. package/dist/index-9wyhzw0h.js +574 -0
  95. package/dist/index-ag90ry8t.js +576 -0
  96. package/dist/index-bj79tw5w.js +0 -0
  97. package/dist/index-bnk6nr0g.js +73 -0
  98. package/dist/index-brbbzyks.js +72 -0
  99. package/dist/index-byeqyjrz.js +72 -0
  100. package/dist/index-c0dr6mcv.js +123 -0
  101. package/dist/index-cty0bcry.js +235 -218
  102. package/dist/index-d8tyv5se.js +228 -0
  103. package/dist/index-d9efy0n4.js +176 -150
  104. package/dist/index-enj4zdma.js +574 -0
  105. package/dist/index-etfmqjjf.js +427 -0
  106. package/dist/index-fb29934k.js +172 -0
  107. package/dist/index-g50jw1yf.js +72 -0
  108. package/dist/index-g6eb5wdw.js +118 -117
  109. package/dist/index-ggq3yryx.js +99 -95
  110. package/dist/index-h70tce00.js +177 -0
  111. package/dist/index-hkxtfqtc.js +333 -0
  112. package/dist/index-k370bech.js +72 -0
  113. package/dist/index-kf3dhser.js +146 -143
  114. package/dist/index-ma6tgdb2.js +500 -0
  115. package/dist/index-mam0bcyz.js +123 -0
  116. package/dist/index-mm412dkp.js +274 -0
  117. package/dist/index-n8v18aeb.js +0 -0
  118. package/dist/index-ndnmnsej.js +378 -371
  119. package/dist/index-p8wty0e2.js +389 -379
  120. package/dist/index-qa8akv6y.js +666 -0
  121. package/dist/index-qfphr2fd.js +78 -76
  122. package/dist/index-qqmms8rs.js +51 -43
  123. package/dist/index-qw4093g2.js +51 -43
  124. package/dist/index-qzwpzjbx.js +121 -122
  125. package/dist/index-segbnm0h.js +146 -143
  126. package/dist/index-t0fj6gg1.js +112 -0
  127. package/dist/index-thdkwnv7.js +122 -0
  128. package/dist/index-tjbx2r2t.js +270 -0
  129. package/dist/index-tjqw9vtj.js +62 -54
  130. package/dist/index-vbpb89jy.js +248 -0
  131. package/dist/index-vg55rq0y.js +250 -0
  132. package/dist/index-vhs88xhe.js +99 -95
  133. package/dist/index-vs81yaks.js +244 -0
  134. package/dist/index-w8zxnjka.js +249 -0
  135. package/dist/index-wk2na3t9.js +385 -375
  136. package/dist/index-wz9x8g7z.js +383 -373
  137. package/dist/index-x249gyde.js +388 -378
  138. package/dist/index-x54nbgs7.js +355 -0
  139. package/dist/index-xkvd0nsd.js +187 -0
  140. package/dist/index-yedqxm1z.js +80 -0
  141. package/dist/index-yz4jfz7z.js +338 -0
  142. package/dist/index-zfjzzjkf.js +240 -199
  143. package/dist/index.d.ts +12 -8
  144. package/dist/index.js +56 -34
  145. package/dist/lint.d.ts +1 -46
  146. package/dist/lint.js +3 -7
  147. package/dist/loader/cache.d.ts +4 -0
  148. package/dist/loader/find-config-file.d.ts +2 -0
  149. package/dist/loader/index.d.ts +5 -0
  150. package/dist/loader/index.js +24 -0
  151. package/dist/loader/load-dev-env.d.ts +5 -0
  152. package/dist/loader/loader.d.ts +1 -0
  153. package/dist/loader.d.ts +1 -45
  154. package/dist/loader.js +22 -20
  155. package/dist/prisma/index.d.ts +1 -0
  156. package/dist/prisma/prisma.d.ts +29 -0
  157. package/dist/prisma.d.ts +1 -29
  158. package/dist/prisma.js +6 -10
  159. package/dist/src/bin.js +309 -0
  160. package/dist/src/cli.js +5 -0
  161. package/dist/src/config.js +15 -0
  162. package/dist/src/core/docker.js +38 -0
  163. package/dist/src/core/index.js +130 -0
  164. package/dist/src/core/network.js +9 -0
  165. package/dist/src/core/ports.js +23 -0
  166. package/dist/src/core/process.js +31 -0
  167. package/dist/src/core/utils.js +11 -0
  168. package/dist/src/core/watchdog-runner.js +69 -0
  169. package/dist/src/core/watchdog.js +28 -0
  170. package/dist/src/docker/runtime.js +37 -0
  171. package/dist/src/docker-compose/index.js +16 -0
  172. package/dist/src/docker-compose/services/index.js +17 -0
  173. package/dist/src/environment.js +12 -0
  174. package/dist/src/index.js +122 -0
  175. package/dist/src/lint.js +3 -0
  176. package/dist/src/loader.js +25 -0
  177. package/dist/src/prisma.js +6 -0
  178. package/dist/src/types.js +0 -0
  179. package/dist/typecheck/index.d.ts +1 -0
  180. package/dist/typecheck/index.js +7 -0
  181. package/dist/typecheck/typecheck.d.ts +46 -0
  182. package/dist/types/all-types.d.ts +544 -0
  183. package/dist/types/cli.d.ts +1 -0
  184. package/dist/types/config.d.ts +6 -0
  185. package/dist/types/docker.d.ts +15 -0
  186. package/dist/types/environment.d.ts +8 -0
  187. package/dist/types/hooks.d.ts +9 -0
  188. package/dist/types/index.d.ts +1 -0
  189. package/dist/types/index.js +0 -0
  190. package/dist/types/prisma.d.ts +1 -0
  191. package/dist/types.d.ts +1 -399
  192. package/package.json +55 -48
  193. package/readme.md +365 -109
  194. package/src/cli/bin.ts +77 -0
  195. package/src/cli/commands/help.ts +39 -0
  196. package/src/cli/commands/runtime.ts +72 -0
  197. package/src/cli/commands/version.ts +4 -0
  198. package/src/cli/index.ts +1 -0
  199. package/{cli.ts → src/cli/run-cli.ts} +114 -10
  200. package/src/config/define-config.ts +30 -0
  201. package/src/config/index.ts +3 -0
  202. package/src/config/merge-configs.ts +33 -0
  203. package/src/config/validate-config.ts +136 -0
  204. package/{core → src/core}/index.ts +2 -2
  205. package/{core → src/core}/ports.ts +5 -2
  206. package/{core → src/core}/process.ts +6 -2
  207. package/src/core/quick-tunnel/cloudflared-process.ts +83 -0
  208. package/src/core/quick-tunnel/constants.ts +31 -0
  209. package/src/core/quick-tunnel/index.ts +96 -0
  210. package/src/core/quick-tunnel/install.ts +160 -0
  211. package/src/core/tunnel.ts +165 -0
  212. package/{core → src/core}/utils.ts +1 -0
  213. package/{core → src/core}/watchdog.ts +5 -1
  214. package/src/docker/index.ts +1 -0
  215. package/{core/docker.ts → src/docker/runtime.ts} +11 -4
  216. package/src/docker-compose/generated-file.ts +45 -0
  217. package/src/docker-compose/index.ts +7 -0
  218. package/src/docker-compose/model.ts +197 -0
  219. package/src/docker-compose/services/clickhouse.ts +79 -0
  220. package/src/docker-compose/services/define-docker-service.ts +109 -0
  221. package/src/docker-compose/services/index.ts +67 -0
  222. package/src/docker-compose/services/postgres.ts +60 -0
  223. package/src/docker-compose/services/redis.ts +48 -0
  224. package/src/docker-compose/services/shared.ts +79 -0
  225. package/src/docker-compose/yaml.ts +88 -0
  226. package/{environment.ts → src/environment/create-dev-environment.ts} +214 -141
  227. package/src/environment/index.ts +1 -0
  228. package/src/environment/logging.ts +115 -0
  229. package/src/environment/only-apps.ts +34 -0
  230. package/src/environment/seeding.ts +57 -0
  231. package/{index.ts → src/index.ts} +52 -20
  232. package/src/loader/cache.ts +23 -0
  233. package/src/loader/find-config-file.ts +29 -0
  234. package/src/loader/index.ts +17 -0
  235. package/src/loader/load-dev-env.ts +38 -0
  236. package/src/prisma/index.ts +1 -0
  237. package/{prisma.ts → src/prisma/prisma.ts} +4 -2
  238. package/src/typecheck/index.ts +1 -0
  239. package/{types.ts → src/types/all-types.ts} +186 -8
  240. package/src/types/index.ts +1 -0
  241. package/bin.ts +0 -192
  242. package/config.ts +0 -194
  243. package/loader.ts +0 -126
  244. /package/{core → src/core}/network.ts +0 -0
  245. /package/{core → src/core}/watchdog-runner.ts +0 -0
  246. /package/{lint.ts → src/typecheck/typecheck.ts} +0 -0
package/dist/types.d.ts CHANGED
@@ -1,399 +1 @@
1
- /**
2
- * Health check function signature for custom health checks.
3
- */
4
- export type HealthCheckFn = (port: number) => Promise<boolean>;
5
- /**
6
- * Built-in health check types that map to common patterns.
7
- */
8
- export type BuiltInHealthCheck = "pg_isready" | "redis-cli" | "http" | "tcp";
9
- /**
10
- * URL builder context passed to urlTemplate function.
11
- */
12
- export interface UrlBuilderContext {
13
- port: number;
14
- secondaryPort?: number;
15
- host: string;
16
- localIp: string;
17
- }
18
- /**
19
- * URL builder function receives port info and returns the connection URL.
20
- */
21
- export type UrlBuilderFn = (ctx: UrlBuilderContext) => string;
22
- /**
23
- * Configuration for a Docker Compose service (e.g., postgres, redis).
24
- */
25
- export interface ServiceConfig {
26
- /** Base port for the service (before offset is applied) */
27
- port: number;
28
- /** Optional secondary port (e.g., ClickHouse native protocol) */
29
- secondaryPort?: number;
30
- /** Health check: built-in name, custom function, or disabled (false) */
31
- healthCheck?: BuiltInHealthCheck | HealthCheckFn | false;
32
- /** URL builder function that returns the connection URL */
33
- urlTemplate?: UrlBuilderFn;
34
- /** Docker Compose service name (defaults to the key name) */
35
- serviceName?: string;
36
- /** Database name (for postgres, mysql, clickhouse). Enables built-in URL template. */
37
- database?: string;
38
- /** Username (default: 'postgres' for postgres, 'root' for mysql, 'default' for clickhouse) */
39
- user?: string;
40
- /** Password (default: 'postgres' for postgres, 'root' for mysql, 'clickhouse' for clickhouse) */
41
- password?: string;
42
- }
43
- /**
44
- * Configuration for an application (e.g., api, web).
45
- */
46
- export interface AppConfig {
47
- /** Base port for the app (before offset is applied) */
48
- port: number;
49
- /** Command to start the dev server */
50
- devCommand: string;
51
- /** Command to start production server (optional) */
52
- prodCommand?: string;
53
- /** Command to build for production (optional) */
54
- buildCommand?: string;
55
- /** Working directory relative to monorepo root */
56
- cwd?: string;
57
- /** Health check endpoint path (e.g., '/api/health') */
58
- healthEndpoint?: string;
59
- /** Timeout for health check in milliseconds */
60
- healthTimeout?: number;
61
- }
62
- /**
63
- * Execution options for the exec helper.
64
- */
65
- export interface ExecOptions {
66
- /** Working directory relative to monorepo root */
67
- cwd?: string;
68
- /** Print output to console */
69
- verbose?: boolean;
70
- /** Environment variables to add */
71
- env?: Record<string, string>;
72
- /** Throw on non-zero exit code (default: true) */
73
- throwOnError?: boolean;
74
- }
75
- /**
76
- * Context passed to hooks for executing commands and accessing environment.
77
- */
78
- export interface HookContext<TServices extends Record<string, ServiceConfig>, TApps extends Record<string, AppConfig>> {
79
- /** Project name (with suffix if applicable) */
80
- projectName: string;
81
- /** Computed ports for all services and apps */
82
- ports: ComputedPorts<TServices, TApps>;
83
- /** Computed URLs for all services and apps */
84
- urls: ComputedUrls<TServices, TApps>;
85
- /** Execute a shell command with environment variables set */
86
- exec: (cmd: string, options?: ExecOptions) => Promise<{
87
- exitCode: number;
88
- stdout: string;
89
- stderr: string;
90
- }>;
91
- /** Path to monorepo root */
92
- root: string;
93
- /** Whether running in CI environment */
94
- isCI: boolean;
95
- /** Port offset applied to all ports */
96
- portOffset: number;
97
- /** Local IP address for mobile connectivity */
98
- localIp: string;
99
- }
100
- /**
101
- * Lifecycle hooks for customizing the dev environment.
102
- */
103
- export interface DevHooks<TServices extends Record<string, ServiceConfig>, TApps extends Record<string, AppConfig>> {
104
- /** Called after all containers are healthy */
105
- afterContainersReady?: (ctx: HookContext<TServices, TApps>) => Promise<void>;
106
- /** Called before starting dev servers */
107
- beforeServers?: (ctx: HookContext<TServices, TApps>) => Promise<void>;
108
- /** Called after dev servers are ready */
109
- afterServers?: (ctx: HookContext<TServices, TApps>) => Promise<void>;
110
- /** Called before stopping the environment */
111
- beforeStop?: (ctx: HookContext<TServices, TApps>) => Promise<void>;
112
- }
113
- /**
114
- * Configuration for Prisma integration.
115
- */
116
- export interface PrismaConfig {
117
- /** Working directory where prisma schema lives (relative to monorepo root). Default: 'packages/prisma' */
118
- cwd?: string;
119
- /** Docker Compose service name for the database. Default: 'postgres' */
120
- service?: string;
121
- /** Environment variable name for the database URL. Default: 'DATABASE_URL' */
122
- urlEnvVar?: string;
123
- }
124
- /**
125
- * Prisma runner interface available on dev.prisma when prisma is configured.
126
- */
127
- export interface PrismaRunner {
128
- /** Run a prisma command with the correct environment. Returns exit code. */
129
- run(args: string[]): Promise<number>;
130
- /** Get the database URL from the dev environment */
131
- getDatabaseUrl(): string;
132
- /** Ensure the database container is running and healthy */
133
- ensureDatabase(): Promise<void>;
134
- }
135
- /**
136
- * Configuration for a migration command to run after containers are ready.
137
- */
138
- export interface MigrationConfig {
139
- /** Display name for the migration (e.g., 'prisma', 'clickhouse') */
140
- name: string;
141
- /** Command to run the migration */
142
- command: string;
143
- /** Working directory relative to monorepo root */
144
- cwd?: string;
145
- }
146
- /**
147
- * Helper functions available in the seed check function.
148
- */
149
- export interface SeedCheckHelpers<TServices extends Record<string, ServiceConfig>> {
150
- /**
151
- * Check if a database table is empty.
152
- * Returns true if the table has 0 rows (needs seeding), false otherwise.
153
- *
154
- * @param tableName - The table name to check (e.g., 'User')
155
- * @param service - The database service name. Default: 'postgres'
156
- *
157
- * @example
158
- * ```typescript
159
- * seed: {
160
- * command: 'bun run run:seeder',
161
- * check: ({ checkTable }) => checkTable('User')
162
- * }
163
- * ```
164
- */
165
- checkTable: (tableName: string, service: keyof TServices) => Promise<boolean>;
166
- }
167
- /**
168
- * Context passed to the seed check function.
169
- */
170
- export type SeedCheckContext<TServices extends Record<string, ServiceConfig>, TApps extends Record<string, AppConfig>> = HookContext<TServices, TApps> & SeedCheckHelpers<TServices>;
171
- /**
172
- * Configuration for database seeding.
173
- */
174
- export interface SeedConfig<TServices extends Record<string, ServiceConfig>, TApps extends Record<string, AppConfig>> {
175
- /** Command to run the seeder */
176
- command: string;
177
- /** Working directory relative to monorepo root */
178
- cwd?: string;
179
- /**
180
- * Check function to determine if seeding is needed.
181
- * Return true to run the seed command, false to skip.
182
- * If not provided, seeding always runs.
183
- *
184
- * Receives hook context plus helper functions like `checkTable`.
185
- *
186
- * @example
187
- * ```typescript
188
- * seed: {
189
- * command: 'bun run run:seeder',
190
- * check: ({ checkTable }) => checkTable('User')
191
- * }
192
- * ```
193
- */
194
- check?: (ctx: SeedCheckContext<TServices, TApps>) => Promise<boolean>;
195
- }
196
- /**
197
- * Options for the dev environment.
198
- */
199
- export interface DevOptions {
200
- /**
201
- * Enable worktree isolation. When true (default), each worktree gets:
202
- * - unique ports (offset)
203
- * - unique Docker Compose project name (separate containers/networks/volumes)
204
- *
205
- * Set to false to intentionally share Docker state across worktrees.
206
- */
207
- worktreeIsolation?: boolean;
208
- /** Auto-shutdown after idle time in ms. Set to false to disable. Default: false */
209
- autoShutdown?: number | false;
210
- /** Path to docker-compose.yml relative to root. Default: 'docker-compose.yml' */
211
- composeFile?: string;
212
- /** Default verbose setting for all operations. Default: true */
213
- verbose?: boolean;
214
- }
215
- /**
216
- * Environment variable builder function.
217
- */
218
- export type EnvVarsBuilder<TServices extends Record<string, ServiceConfig>, TApps extends Record<string, AppConfig>> = (ports: ComputedPorts<TServices, TApps>, urls: ComputedUrls<TServices, TApps>, ctx: {
219
- projectName: string;
220
- localIp: string;
221
- portOffset: number;
222
- }) => Record<string, string | number>;
223
- /**
224
- * Main configuration for the dev environment.
225
- */
226
- export interface DevConfig<TServices extends Record<string, ServiceConfig> = Record<string, ServiceConfig>, TApps extends Record<string, AppConfig> = Record<string, AppConfig>> {
227
- /** Prefix for Docker project name (e.g., 'myapp' -> 'myapp-main') */
228
- projectPrefix: string;
229
- /** Docker Compose services to manage */
230
- services: TServices;
231
- /** Applications to start (optional) */
232
- apps?: TApps;
233
- /**
234
- * Environment variables builder. Define all env vars here.
235
- *
236
- * @example
237
- * ```typescript
238
- * envVars: (ports, urls, { localIp }) => ({
239
- * DATABASE_URL: urls.postgres,
240
- * BASE_URL: urls.api,
241
- * VITE_PORT: ports.platform,
242
- * EXPO_API_URL: `http://${localIp}:${ports.api}`
243
- * })
244
- * ```
245
- */
246
- envVars?: EnvVarsBuilder<TServices, TApps>;
247
- /** Lifecycle hooks (optional) */
248
- hooks?: DevHooks<TServices, TApps>;
249
- /** Migrations to run after containers are ready (optional). Runs in parallel. */
250
- migrations?: MigrationConfig[];
251
- /** Seed configuration (optional). Runs after migrations, before servers. */
252
- seed?: SeedConfig<TServices, TApps>;
253
- /** Prisma configuration (optional). When set, dev.prisma is available. */
254
- prisma?: PrismaConfig;
255
- /** Additional options (optional) */
256
- options?: DevOptions;
257
- }
258
- /**
259
- * Computed ports object - maps service/app names to their port numbers.
260
- */
261
- type ServicesWithSecondaryPort<TServices extends Record<string, ServiceConfig>> = {
262
- [K in keyof TServices as TServices[K] extends {
263
- secondaryPort: number;
264
- } ? `${K & string}Secondary` : never]: number;
265
- };
266
- export type ComputedPorts<TServices extends Record<string, ServiceConfig>, TApps extends Record<string, AppConfig>> = {
267
- [K in keyof TServices]: number;
268
- } & {
269
- [K in keyof TApps]: number;
270
- } & ServicesWithSecondaryPort<TServices>;
271
- /**
272
- * Computed URLs object - maps service/app names to their URLs.
273
- */
274
- export type ComputedUrls<TServices extends Record<string, ServiceConfig>, TApps extends Record<string, AppConfig>> = {
275
- [K in keyof TServices]: string;
276
- } & {
277
- [K in keyof TApps]: string;
278
- };
279
- /**
280
- * Options for starting the dev environment.
281
- */
282
- export interface StartOptions {
283
- /** Print output to console. Default: true */
284
- verbose?: boolean;
285
- /** Wait for containers to be healthy. Default: true */
286
- wait?: boolean;
287
- /** Start dev servers after containers. Default: true */
288
- startServers?: boolean;
289
- /** Use production build for servers. Default: false (true in CI) */
290
- productionBuild?: boolean;
291
- /** Environment suffix for isolation (e.g., 'test'). Default: undefined */
292
- suffix?: string;
293
- /** Skip automatic seeding (useful when CLI handles seeding separately). Default: false */
294
- skipSeed?: boolean;
295
- }
296
- /**
297
- * Options for stopping the dev environment.
298
- */
299
- export interface StopOptions {
300
- /** Print output to console. Default: true */
301
- verbose?: boolean;
302
- /** Remove Docker volumes (destroys data). Default: false */
303
- removeVolumes?: boolean;
304
- }
305
- /**
306
- * Process IDs for running dev servers.
307
- */
308
- export interface DevServerPids {
309
- [appName: string]: number;
310
- }
311
- /**
312
- * The main dev environment interface returned by createDevEnvironment().
313
- */
314
- export interface DevEnvironment<TServices extends Record<string, ServiceConfig>, TApps extends Record<string, AppConfig>> {
315
- /** Docker project name (includes suffix if set) */
316
- readonly projectName: string;
317
- /** Computed ports for all services and apps */
318
- readonly ports: ComputedPorts<TServices, TApps>;
319
- /** Computed URLs for all services and apps */
320
- readonly urls: ComputedUrls<TServices, TApps>;
321
- /** Apps configuration (for CLI to build commands) */
322
- readonly apps: TApps;
323
- /** Port offset applied (0 for main, > 0 for worktrees) */
324
- readonly portOffset: number;
325
- /** Whether running in a git worktree */
326
- readonly isWorktree: boolean;
327
- /** Local IP address for mobile connectivity */
328
- readonly localIp: string;
329
- /** Path to monorepo root */
330
- readonly root: string;
331
- /** Start the dev environment (containers + optional servers) */
332
- start(options?: StartOptions): Promise<DevServerPids | null>;
333
- /** Stop the dev environment */
334
- stop(options?: StopOptions): Promise<void>;
335
- /** Restart containers only */
336
- restart(): Promise<void>;
337
- /** Check if containers are running */
338
- isRunning(): Promise<boolean>;
339
- /** Start dev servers only (assumes containers are running) */
340
- startServers(options?: {
341
- productionBuild?: boolean;
342
- verbose?: boolean;
343
- }): Promise<DevServerPids>;
344
- /** Stop a process by PID */
345
- stopProcess(pid: number): void;
346
- /** Wait for servers to be ready */
347
- waitForServers(options?: {
348
- timeout?: number;
349
- productionBuild?: boolean;
350
- }): Promise<void>;
351
- /** Build environment variables for shell commands */
352
- buildEnvVars(production?: boolean): Record<string, string>;
353
- /** Execute a command with environment variables set */
354
- exec(cmd: string, options?: ExecOptions): Promise<{
355
- exitCode: number;
356
- stdout: string;
357
- stderr: string;
358
- }>;
359
- /** Wait for an HTTP server to respond */
360
- waitForServer(url: string, timeout?: number): Promise<void>;
361
- /** Log environment info to console */
362
- logInfo(label?: string): void;
363
- /**
364
- * Get the Expo API URL (http://<local-ip>:<api-port>) and log it for detection.
365
- * Used by tools like Vibe Kanban to find the API server for mobile testing.
366
- */
367
- getExpoApiUrl(): string;
368
- /**
369
- * Get the frontend port and log it for detection.
370
- * Used by tools like Vibe Kanban to find the dev server.
371
- */
372
- getFrontendPort(): number | undefined;
373
- /** Start writing heartbeat for watchdog */
374
- startHeartbeat(intervalMs?: number): void;
375
- /** Stop writing heartbeat */
376
- stopHeartbeat(): void;
377
- /** Spawn watchdog process for auto-shutdown */
378
- spawnWatchdog(timeoutMinutes?: number): Promise<void>;
379
- /** Stop the watchdog process */
380
- stopWatchdog(): void;
381
- /** Prisma runner (only available when prisma is configured) */
382
- readonly prisma?: PrismaRunner;
383
- /** Create a new environment with a different suffix (for test isolation) */
384
- withSuffix(suffix: string): DevEnvironment<TServices, TApps>;
385
- }
386
- /**
387
- * Options for the CLI runner.
388
- */
389
- export interface CliOptions {
390
- /** Custom args (defaults to process.argv.slice(2)) */
391
- args?: string[];
392
- /** Enable watchdog auto-shutdown (default: true) */
393
- watchdog?: boolean;
394
- /** Watchdog timeout in minutes (default: 10) */
395
- watchdogTimeout?: number;
396
- /** Command to run dev servers (e.g., 'bun concurrently ...') */
397
- devServersCommand?: string;
398
- }
399
- export {};
1
+ export * from "./types/index";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "buncargo",
3
- "version": "1.0.29",
3
+ "version": "3.2.0",
4
4
  "description": "A Bun-powered development environment CLI for managing Docker Compose services, dev servers, and environment variables",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",
@@ -27,107 +27,114 @@
27
27
  "bun": ">=1.0.0"
28
28
  },
29
29
  "files": [
30
- "*.ts",
31
- "core/*.ts",
30
+ "src/**/*.ts",
32
31
  "dist",
33
- "!*.test.ts",
34
- "!core/*.test.ts"
32
+ "!src/**/*.test.ts"
35
33
  ],
36
34
  "bin": {
37
- "dev-tools": "./dist/bin.js",
38
- "buncargo": "./dist/bin.js"
35
+ "dev-tools": "./dist/cli/bin.js",
36
+ "buncargo": "./dist/cli/bin.js"
39
37
  },
40
38
  "exports": {
41
39
  ".": {
42
40
  "types": "./dist/index.d.ts",
43
- "bun": "./index.ts",
41
+ "bun": "./src/index.ts",
44
42
  "import": "./dist/index.js",
45
43
  "default": "./dist/index.js"
46
44
  },
47
45
  "./types": {
48
- "types": "./dist/types.d.ts",
49
- "bun": "./types.ts",
50
- "import": "./dist/types.js",
51
- "default": "./dist/types.js"
46
+ "types": "./dist/types/index.d.ts",
47
+ "bun": "./src/types/index.ts",
48
+ "import": "./dist/types/index.js",
49
+ "default": "./dist/types/index.js"
52
50
  },
53
51
  "./config": {
54
- "types": "./dist/config.d.ts",
55
- "bun": "./config.ts",
56
- "import": "./dist/config.js",
57
- "default": "./dist/config.js"
52
+ "types": "./dist/config/index.d.ts",
53
+ "bun": "./src/config/index.ts",
54
+ "import": "./dist/config/index.js",
55
+ "default": "./dist/config/index.js"
58
56
  },
59
57
  "./environment": {
60
- "types": "./dist/environment.d.ts",
61
- "bun": "./environment.ts",
62
- "import": "./dist/environment.js",
63
- "default": "./dist/environment.js"
58
+ "types": "./dist/environment/index.d.ts",
59
+ "bun": "./src/environment/index.ts",
60
+ "import": "./dist/environment/index.js",
61
+ "default": "./dist/environment/index.js"
64
62
  },
65
63
  "./core/ports": {
66
64
  "types": "./dist/core/ports.d.ts",
67
- "bun": "./core/ports.ts",
65
+ "bun": "./src/core/ports.ts",
68
66
  "import": "./dist/core/ports.js",
69
67
  "default": "./dist/core/ports.js"
70
68
  },
71
- "./core/docker": {
72
- "types": "./dist/core/docker.d.ts",
73
- "bun": "./core/docker.ts",
74
- "import": "./dist/core/docker.js",
75
- "default": "./dist/core/docker.js"
76
- },
77
69
  "./core/network": {
78
70
  "types": "./dist/core/network.d.ts",
79
- "bun": "./core/network.ts",
71
+ "bun": "./src/core/network.ts",
80
72
  "import": "./dist/core/network.js",
81
73
  "default": "./dist/core/network.js"
82
74
  },
83
75
  "./core/process": {
84
76
  "types": "./dist/core/process.d.ts",
85
- "bun": "./core/process.ts",
77
+ "bun": "./src/core/process.ts",
86
78
  "import": "./dist/core/process.js",
87
79
  "default": "./dist/core/process.js"
88
80
  },
89
81
  "./core/watchdog": {
90
82
  "types": "./dist/core/watchdog.d.ts",
91
- "bun": "./core/watchdog.ts",
83
+ "bun": "./src/core/watchdog.ts",
92
84
  "import": "./dist/core/watchdog.js",
93
85
  "default": "./dist/core/watchdog.js"
94
86
  },
95
87
  "./core/utils": {
96
88
  "types": "./dist/core/utils.d.ts",
97
- "bun": "./core/utils.ts",
89
+ "bun": "./src/core/utils.ts",
98
90
  "import": "./dist/core/utils.js",
99
91
  "default": "./dist/core/utils.js"
100
92
  },
101
93
  "./cli": {
102
- "types": "./dist/cli.d.ts",
103
- "bun": "./cli.ts",
104
- "import": "./dist/cli.js",
105
- "default": "./dist/cli.js"
94
+ "types": "./dist/cli/index.d.ts",
95
+ "bun": "./src/cli/index.ts",
96
+ "import": "./dist/cli/index.js",
97
+ "default": "./dist/cli/index.js"
106
98
  },
107
- "./lint": {
108
- "types": "./dist/lint.d.ts",
109
- "bun": "./lint.ts",
110
- "import": "./dist/lint.js",
111
- "default": "./dist/lint.js"
99
+ "./typecheck": {
100
+ "types": "./dist/typecheck/index.d.ts",
101
+ "bun": "./src/typecheck/index.ts",
102
+ "import": "./dist/typecheck/index.js",
103
+ "default": "./dist/typecheck/index.js"
112
104
  },
113
105
  "./loader": {
114
- "types": "./dist/loader.d.ts",
115
- "bun": "./loader.ts",
116
- "import": "./dist/loader.js",
117
- "default": "./dist/loader.js"
106
+ "types": "./dist/loader/index.d.ts",
107
+ "bun": "./src/loader/index.ts",
108
+ "import": "./dist/loader/index.js",
109
+ "default": "./dist/loader/index.js"
110
+ },
111
+ "./docker": {
112
+ "types": "./dist/docker/index.d.ts",
113
+ "bun": "./src/docker/index.ts",
114
+ "import": "./dist/docker/index.js",
115
+ "default": "./dist/docker/index.js"
116
+ },
117
+ "./docker-compose": {
118
+ "types": "./dist/docker-compose/index.d.ts",
119
+ "bun": "./src/docker-compose/index.ts",
120
+ "import": "./dist/docker-compose/index.js",
121
+ "default": "./dist/docker-compose/index.js"
118
122
  }
119
123
  },
120
124
  "scripts": {
121
125
  "build": "bun run build:js && bun run build:types",
122
- "build:js": "bun build ./index.ts ./bin.ts ./cli.ts ./config.ts ./environment.ts ./lint.ts ./loader.ts ./prisma.ts ./types.ts ./core/docker.ts ./core/index.ts ./core/network.ts ./core/ports.ts ./core/process.ts ./core/utils.ts ./core/watchdog.ts ./core/watchdog-runner.ts --outdir ./dist --target node --packages external --splitting",
126
+ "build:js": "bun build ./src/index.ts ./src/cli/bin.ts ./src/cli/index.ts ./src/config/index.ts ./src/environment/index.ts ./src/loader/index.ts ./src/typecheck/index.ts ./src/types/index.ts ./src/core/network.ts ./src/core/ports.ts ./src/core/process.ts ./src/core/utils.ts ./src/core/watchdog.ts ./src/docker/index.ts ./src/docker-compose/index.ts --outdir ./dist --root ./src --target node --packages external --splitting",
123
127
  "build:types": "tsc -p tsconfig.build.json",
124
128
  "prepublishOnly": "bun run build",
125
129
  "publish:patch": "npm version patch && npm publish",
126
130
  "publish:minor": "npm version minor && npm publish",
127
131
  "publish:major": "npm version major && npm publish",
128
- "lint": "bun run typecheck && biome check",
129
- "lint:write": "bun run typecheck && biome check --fix && biome format",
130
- "typecheck": "tsgo --incremental"
132
+ "lint": "bun run typecheck && biome check src example",
133
+ "lint:write": "bun run typecheck && biome check --fix src example && biome format src example",
134
+ "typecheck": "tsgo --incremental",
135
+ "test": "bun test",
136
+ "test:integration-cloudflared": "bun test src/core/quick-tunnel/quick-tunnel.test.ts",
137
+ "test:integration-cloudflared-e2e": "BUNCARGO_TEST_CLOUDFLARED_E2E=1 bun test src/core/quick-tunnel/quick-tunnel.test.ts"
131
138
  },
132
139
  "devDependencies": {
133
140
  "@types/bun": "1.3.2",