@kodycodes/cli 1.26.2 → 1.27.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 (296) hide show
  1. package/README.md +175 -167
  2. package/dist/add-mcp-install.d.ts +1 -1
  3. package/dist/api-token.d.ts +1 -1
  4. package/dist/auth-6ZE6QQXA.js +31 -0
  5. package/dist/auth-6ZE6QQXA.js.map +6 -0
  6. package/dist/auth-bootstrap.d.ts +1 -1
  7. package/dist/auth.d.ts +27 -3
  8. package/dist/bin.js +27 -3
  9. package/dist/bin.js.map +6 -1
  10. package/dist/capability-proxy.d.ts +1 -1
  11. package/dist/chunk-2IHISXHN.js +1413 -0
  12. package/dist/chunk-2IHISXHN.js.map +6 -0
  13. package/dist/chunk-2XPH7L2P.js +23 -0
  14. package/dist/chunk-2XPH7L2P.js.map +6 -0
  15. package/dist/chunk-3H72XY5R.js +535 -0
  16. package/dist/chunk-3H72XY5R.js.map +6 -0
  17. package/dist/chunk-46IJPEID.js +30 -0
  18. package/dist/chunk-46IJPEID.js.map +6 -0
  19. package/dist/chunk-4GIFJVGT.js +14 -0
  20. package/dist/chunk-4GIFJVGT.js.map +6 -0
  21. package/dist/chunk-5JIRHJQP.js +1016 -0
  22. package/dist/chunk-5JIRHJQP.js.map +6 -0
  23. package/dist/chunk-5ZBJAP6G.js +2005 -0
  24. package/dist/chunk-5ZBJAP6G.js.map +6 -0
  25. package/dist/chunk-6ZYUGXVW.js +26 -0
  26. package/dist/chunk-6ZYUGXVW.js.map +6 -0
  27. package/dist/chunk-7PRJ36I5.js +23 -0
  28. package/dist/chunk-7PRJ36I5.js.map +6 -0
  29. package/dist/chunk-BTL3PJ2H.js +38 -0
  30. package/dist/chunk-BTL3PJ2H.js.map +6 -0
  31. package/dist/chunk-CASGRYOF.js +21 -0
  32. package/dist/chunk-CASGRYOF.js.map +6 -0
  33. package/dist/chunk-CPS7HW4T.js +56 -0
  34. package/dist/chunk-CPS7HW4T.js.map +6 -0
  35. package/dist/chunk-CWWHR4FH.js +19 -0
  36. package/dist/chunk-CWWHR4FH.js.map +6 -0
  37. package/dist/chunk-D366STO5.js +2051 -0
  38. package/dist/chunk-D366STO5.js.map +6 -0
  39. package/dist/chunk-DW5UTJ6T.js +115 -0
  40. package/dist/chunk-DW5UTJ6T.js.map +6 -0
  41. package/dist/chunk-EJXEVGWF.js +47 -0
  42. package/dist/chunk-EJXEVGWF.js.map +6 -0
  43. package/dist/chunk-FBEZ6PZ7.js +746 -0
  44. package/dist/chunk-FBEZ6PZ7.js.map +6 -0
  45. package/dist/chunk-JOMBXQOS.js +435 -0
  46. package/dist/chunk-JOMBXQOS.js.map +6 -0
  47. package/dist/{package-local-runtime-source.js → chunk-LU7I7CQ4.js} +395 -52
  48. package/dist/chunk-LU7I7CQ4.js.map +6 -0
  49. package/dist/chunk-OZDWOZLV.js +964 -0
  50. package/dist/chunk-OZDWOZLV.js.map +6 -0
  51. package/dist/chunk-SLNAWWQK.js +64 -0
  52. package/dist/chunk-SLNAWWQK.js.map +6 -0
  53. package/dist/chunk-TUUFQYWP.js +348 -0
  54. package/dist/chunk-TUUFQYWP.js.map +6 -0
  55. package/dist/chunk-UW6AWLXX.js +43 -0
  56. package/dist/chunk-UW6AWLXX.js.map +6 -0
  57. package/dist/chunk-W2SAFAT4.js +1563 -0
  58. package/dist/chunk-W2SAFAT4.js.map +6 -0
  59. package/dist/chunk-XV6D6HSG.js +57 -0
  60. package/dist/chunk-XV6D6HSG.js.map +6 -0
  61. package/dist/chunk-Y4FOJETX.js +616 -0
  62. package/dist/chunk-Y4FOJETX.js.map +6 -0
  63. package/dist/chunk-YDWTXEKQ.js +469 -0
  64. package/dist/chunk-YDWTXEKQ.js.map +6 -0
  65. package/dist/chunk-ZILB2HWE.js +24 -0
  66. package/dist/chunk-ZILB2HWE.js.map +6 -0
  67. package/dist/cli.js +74 -1500
  68. package/dist/cli.js.map +6 -1
  69. package/dist/defaults.d.ts +1 -1
  70. package/dist/detect-running-hosts.d.ts +1 -1
  71. package/dist/dev/dev-assets.d.ts +1 -1
  72. package/dist/dev/dev-registry.d.ts +1 -1
  73. package/dist/dev/error-page.d.ts +1 -1
  74. package/dist/dev/live-reload.d.ts +2 -2
  75. package/dist/dev-command-5PDEIWOC.js +5025 -0
  76. package/dist/dev-command-5PDEIWOC.js.map +6 -0
  77. package/dist/dev-command.d.ts +1 -1
  78. package/dist/discover-login-identity.d.ts +6 -7
  79. package/dist/discover-org.d.ts +2 -3
  80. package/dist/generated/openapi-routes.d.ts +6 -0
  81. package/dist/git-credential-INB2UV4C.js +170 -0
  82. package/dist/git-credential-INB2UV4C.js.map +6 -0
  83. package/dist/install-ONEJRYZ3.js +10728 -0
  84. package/dist/install-ONEJRYZ3.js.map +6 -0
  85. package/dist/install.d.ts +1 -1
  86. package/dist/local-execute-I3BP5NEQ.js +395 -0
  87. package/dist/local-execute-I3BP5NEQ.js.map +6 -0
  88. package/dist/local-execute-auth.d.ts +2 -2
  89. package/dist/local-execute.d.ts +1 -1
  90. package/dist/local-gateway-fetch-forward.d.ts +2 -2
  91. package/dist/local-package-run-JFKNSNWM.js +23 -0
  92. package/dist/local-package-run-JFKNSNWM.js.map +6 -0
  93. package/dist/local-package-run.d.ts +2 -2
  94. package/dist/mock/mock-fetch-gateway.d.ts +2 -2
  95. package/dist/mock/mock-supported.d.ts +1 -1
  96. package/dist/mock-dep-resolve-B5ZH4U3H.js +60 -0
  97. package/dist/mock-dep-resolve-B5ZH4U3H.js.map +6 -0
  98. package/dist/mock-fetch-gateway-S2ULVFAI.js +35 -0
  99. package/dist/mock-fetch-gateway-S2ULVFAI.js.map +6 -0
  100. package/dist/mock-local-deps-2VVNJLFF.js +200 -0
  101. package/dist/mock-local-deps-2VVNJLFF.js.map +6 -0
  102. package/dist/mock-local-deps.d.ts +1 -1
  103. package/dist/mock-server-TFO7Q26H.js +22 -0
  104. package/dist/mock-server-TFO7Q26H.js.map +6 -0
  105. package/dist/oauth-browser.d.ts +42 -0
  106. package/dist/oauth-provider.d.ts +14 -19
  107. package/dist/open-api-client-SR4B7265.js +43 -0
  108. package/dist/open-api-client-SR4B7265.js.map +6 -0
  109. package/dist/open-api-client.d.ts +2 -1
  110. package/dist/org-535LB4PD.js +134 -0
  111. package/dist/org-535LB4PD.js.map +6 -0
  112. package/dist/org-resolve.d.ts +2 -0
  113. package/dist/package-app-dev.d.ts +2 -2
  114. package/dist/package-manifest-DFF6XCPV.js +15 -0
  115. package/dist/package-manifest-DFF6XCPV.js.map +6 -0
  116. package/dist/remote-execute-JN6DRFEU.js +129 -0
  117. package/dist/remote-execute-JN6DRFEU.js.map +6 -0
  118. package/dist/remote-execute.d.ts +3 -3
  119. package/dist/setup-git-MHK563LB.js +87 -0
  120. package/dist/setup-git-MHK563LB.js.map +6 -0
  121. package/dist/setup-git.d.ts +1 -1
  122. package/dist/skill-D74XVI6T.js +61 -0
  123. package/dist/skill-D74XVI6T.js.map +6 -0
  124. package/dist/store-27J4CQZ2.js +48 -0
  125. package/dist/store-27J4CQZ2.js.map +6 -0
  126. package/dist/structured-error-5MLWXYR3.js +14 -0
  127. package/dist/structured-error-5MLWXYR3.js.map +6 -0
  128. package/dist/structured-error.d.ts +1 -1
  129. package/dist/target-33ATHDUF.js +17 -0
  130. package/dist/target-33ATHDUF.js.map +6 -0
  131. package/package.json +12 -11
  132. package/skills/kody/SKILL.md +53 -50
  133. package/dist/add-mcp-install.js +0 -59
  134. package/dist/add-mcp-install.js.map +0 -1
  135. package/dist/api-token-store.js +0 -120
  136. package/dist/api-token-store.js.map +0 -1
  137. package/dist/api-token.js +0 -238
  138. package/dist/api-token.js.map +0 -1
  139. package/dist/auth-bootstrap.js +0 -373
  140. package/dist/auth-bootstrap.js.map +0 -1
  141. package/dist/auth.js +0 -386
  142. package/dist/auth.js.map +0 -1
  143. package/dist/capability-proxy.js +0 -527
  144. package/dist/capability-proxy.js.map +0 -1
  145. package/dist/credential-call-map.js +0 -155
  146. package/dist/credential-call-map.js.map +0 -1
  147. package/dist/credential-client-runtime-source.js +0 -9
  148. package/dist/credential-client-runtime-source.js.map +0 -1
  149. package/dist/credentialed-fetch-scan.js +0 -98
  150. package/dist/credentialed-fetch-scan.js.map +0 -1
  151. package/dist/defaults.js +0 -34
  152. package/dist/defaults.js.map +0 -1
  153. package/dist/detect-running-hosts.js +0 -13
  154. package/dist/detect-running-hosts.js.map +0 -1
  155. package/dist/dev/dev-assets.js +0 -202
  156. package/dist/dev/dev-assets.js.map +0 -1
  157. package/dist/dev/dev-bundler.js +0 -65
  158. package/dist/dev/dev-bundler.js.map +0 -1
  159. package/dist/dev/dev-events.js +0 -94
  160. package/dist/dev/dev-events.js.map +0 -1
  161. package/dist/dev/dev-port.js +0 -80
  162. package/dist/dev/dev-port.js.map +0 -1
  163. package/dist/dev/dev-protocol.js +0 -14
  164. package/dist/dev/dev-protocol.js.map +0 -1
  165. package/dist/dev/dev-registry.js +0 -95
  166. package/dist/dev/dev-registry.js.map +0 -1
  167. package/dist/dev/dev-watcher.js +0 -162
  168. package/dist/dev/dev-watcher.js.map +0 -1
  169. package/dist/dev/error-page.js +0 -64
  170. package/dist/dev/error-page.js.map +0 -1
  171. package/dist/dev/live-reload.js +0 -151
  172. package/dist/dev/live-reload.js.map +0 -1
  173. package/dist/dev/prebuild.js +0 -102
  174. package/dist/dev/prebuild.js.map +0 -1
  175. package/dist/dev/process-reaper.js +0 -151
  176. package/dist/dev/process-reaper.js.map +0 -1
  177. package/dist/dev/stack-trace.js +0 -56
  178. package/dist/dev/stack-trace.js.map +0 -1
  179. package/dist/dev/workerd-process.js +0 -118
  180. package/dist/dev/workerd-process.js.map +0 -1
  181. package/dist/dev-command.js +0 -676
  182. package/dist/dev-command.js.map +0 -1
  183. package/dist/discover-login-identity.js +0 -77
  184. package/dist/discover-login-identity.js.map +0 -1
  185. package/dist/discover-org.js +0 -62
  186. package/dist/discover-org.js.map +0 -1
  187. package/dist/git-credential.js +0 -147
  188. package/dist/git-credential.js.map +0 -1
  189. package/dist/help.js +0 -333
  190. package/dist/help.js.map +0 -1
  191. package/dist/host-catalog.js +0 -427
  192. package/dist/host-catalog.js.map +0 -1
  193. package/dist/host-config.js +0 -80
  194. package/dist/host-config.js.map +0 -1
  195. package/dist/http-error-body.js +0 -35
  196. package/dist/http-error-body.js.map +0 -1
  197. package/dist/install-hosts.js +0 -328
  198. package/dist/install-hosts.js.map +0 -1
  199. package/dist/install.js +0 -120
  200. package/dist/install.js.map +0 -1
  201. package/dist/invoke-passthrough.js +0 -60
  202. package/dist/invoke-passthrough.js.map +0 -1
  203. package/dist/local-bundle.js +0 -200
  204. package/dist/local-bundle.js.map +0 -1
  205. package/dist/local-execute-auth.js +0 -53
  206. package/dist/local-execute-auth.js.map +0 -1
  207. package/dist/local-execute.js +0 -338
  208. package/dist/local-execute.js.map +0 -1
  209. package/dist/local-gateway-fetch-forward.js +0 -135
  210. package/dist/local-gateway-fetch-forward.js.map +0 -1
  211. package/dist/local-host-runtime-surface.js +0 -75
  212. package/dist/local-host-runtime-surface.js.map +0 -1
  213. package/dist/local-package-graph.js +0 -405
  214. package/dist/local-package-graph.js.map +0 -1
  215. package/dist/local-package-run.js +0 -307
  216. package/dist/local-package-run.js.map +0 -1
  217. package/dist/local-runtime-bridge.js +0 -132
  218. package/dist/local-runtime-bridge.js.map +0 -1
  219. package/dist/local-runtime-source.js +0 -541
  220. package/dist/local-runtime-source.js.map +0 -1
  221. package/dist/login-callback-assets.js +0 -10
  222. package/dist/login-callback-assets.js.map +0 -1
  223. package/dist/login-callback-page.js +0 -362
  224. package/dist/login-callback-page.js.map +0 -1
  225. package/dist/mcp.d.ts +0 -34
  226. package/dist/mcp.js +0 -134
  227. package/dist/mcp.js.map +0 -1
  228. package/dist/mock/ensure-msw.js +0 -215
  229. package/dist/mock/ensure-msw.js.map +0 -1
  230. package/dist/mock/install-mock-fetch-shim.js +0 -36
  231. package/dist/mock/install-mock-fetch-shim.js.map +0 -1
  232. package/dist/mock/load-package-mocks.js +0 -136
  233. package/dist/mock/load-package-mocks.js.map +0 -1
  234. package/dist/mock/mock-fetch-gateway.js +0 -343
  235. package/dist/mock/mock-fetch-gateway.js.map +0 -1
  236. package/dist/mock/mock-gateway-fetch-shim.js +0 -104
  237. package/dist/mock/mock-gateway-fetch-shim.js.map +0 -1
  238. package/dist/mock/mock-server.js +0 -499
  239. package/dist/mock/mock-server.js.map +0 -1
  240. package/dist/mock/mock-storage.js +0 -186
  241. package/dist/mock/mock-storage.js.map +0 -1
  242. package/dist/mock/mock-supported.js +0 -63
  243. package/dist/mock/mock-supported.js.map +0 -1
  244. package/dist/mock-dep-resolve.js +0 -47
  245. package/dist/mock-dep-resolve.js.map +0 -1
  246. package/dist/mock-local-deps.js +0 -207
  247. package/dist/mock-local-deps.js.map +0 -1
  248. package/dist/network-error.js +0 -11
  249. package/dist/network-error.js.map +0 -1
  250. package/dist/node-engine.js +0 -21
  251. package/dist/node-engine.js.map +0 -1
  252. package/dist/oauth-provider.js +0 -107
  253. package/dist/oauth-provider.js.map +0 -1
  254. package/dist/onboarding-prompt.js +0 -15
  255. package/dist/onboarding-prompt.js.map +0 -1
  256. package/dist/open-api-client.js +0 -432
  257. package/dist/open-api-client.js.map +0 -1
  258. package/dist/open-url.js +0 -21
  259. package/dist/open-url.js.map +0 -1
  260. package/dist/org-resolve.js +0 -16
  261. package/dist/org-resolve.js.map +0 -1
  262. package/dist/org-slug.js +0 -11
  263. package/dist/org-slug.js.map +0 -1
  264. package/dist/org.js +0 -100
  265. package/dist/org.js.map +0 -1
  266. package/dist/package-app-dev.js +0 -922
  267. package/dist/package-app-dev.js.map +0 -1
  268. package/dist/package-collaborators.js +0 -179
  269. package/dist/package-collaborators.js.map +0 -1
  270. package/dist/package-info.js +0 -19
  271. package/dist/package-info.js.map +0 -1
  272. package/dist/package-local-runtime-source.js.map +0 -1
  273. package/dist/package-manifest.js +0 -364
  274. package/dist/package-manifest.js.map +0 -1
  275. package/dist/process-info.js +0 -14
  276. package/dist/process-info.js.map +0 -1
  277. package/dist/redact.js +0 -16
  278. package/dist/redact.js.map +0 -1
  279. package/dist/remote-execute.js +0 -108
  280. package/dist/remote-execute.js.map +0 -1
  281. package/dist/setup-git.js +0 -676
  282. package/dist/setup-git.js.map +0 -1
  283. package/dist/skill.js +0 -35
  284. package/dist/skill.js.map +0 -1
  285. package/dist/store.js +0 -597
  286. package/dist/store.js.map +0 -1
  287. package/dist/structured-error.js +0 -57
  288. package/dist/structured-error.js.map +0 -1
  289. package/dist/target.js +0 -52
  290. package/dist/target.js.map +0 -1
  291. package/dist/tool-result.js +0 -19
  292. package/dist/tool-result.js.map +0 -1
  293. package/dist/which.js +0 -22
  294. package/dist/which.js.map +0 -1
  295. package/dist/workerd-binary.js +0 -98
  296. package/dist/workerd-binary.js.map +0 -1
@@ -1,151 +0,0 @@
1
- /**
2
- * Live reload for `kody dev`: an SSE stream at {@link liveReloadEventsPath}, a
3
- * tiny client injected into HTML responses that reloads after each swap, and
4
- * an error overlay for build and runtime errors. No HMR: a reload re-renders
5
- * the page from the new build.
6
- */
7
- export const devRoutePrefix = '/__kody/dev/';
8
- export const liveReloadEventsPath = '/__kody/dev/events';
9
- export const liveReloadClientPath = '/__kody/dev/client.js';
10
- export const liveReloadScriptTag = `<script type="module" src="${liveReloadClientPath}"></script>`;
11
- const keepAliveMs = 15_000;
12
- export function createLiveReloadHub(input) {
13
- const clients = new Set();
14
- const send = (res, event, data) => {
15
- res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
16
- };
17
- const keepAlive = setInterval(() => {
18
- for (const res of clients)
19
- res.write(': keep-alive\n\n');
20
- }, keepAliveMs);
21
- keepAlive.unref();
22
- return {
23
- handleEvents: (req, res) => {
24
- res.writeHead(200, {
25
- 'content-type': 'text/event-stream; charset=utf-8',
26
- 'cache-control': 'no-store',
27
- connection: 'keep-alive',
28
- });
29
- res.write('retry: 500\n\n');
30
- send(res, 'hello', input.state());
31
- clients.add(res);
32
- req.on('close', () => clients.delete(res));
33
- },
34
- broadcast: (message) => {
35
- for (const res of clients)
36
- send(res, message.event, message.data);
37
- },
38
- clientCount: () => clients.size,
39
- close: () => {
40
- clearInterval(keepAlive);
41
- for (const res of clients)
42
- res.end();
43
- clients.clear();
44
- },
45
- };
46
- }
47
- /** Insert the client tag before `</head>`, else `</body>`, else at the end. */
48
- export function injectLiveReloadScript(html) {
49
- if (html.includes(liveReloadClientPath))
50
- return html;
51
- for (const pattern of [/<\/head\s*>/i, /<\/body\s*>/i]) {
52
- const match = pattern.exec(html);
53
- if (match) {
54
- return `${html.slice(0, match.index)}${liveReloadScriptTag}${html.slice(match.index)}`;
55
- }
56
- }
57
- return `${html}${liveReloadScriptTag}`;
58
- }
59
- /**
60
- * Only page loads that ask for HTML (browsers send `Accept: text/html`); agent
61
- * and `kody dev fetch` requests get the app's bytes untouched.
62
- */
63
- export function shouldInjectLiveReload(input) {
64
- if (input.method === 'HEAD')
65
- return false;
66
- if (!/\btext\/html\b/i.test(input.accept ?? ''))
67
- return false;
68
- if (input.status === 204 || input.status === 304 || input.status < 200)
69
- return false;
70
- const contentType = String(input.headers['content-type'] ?? '');
71
- if (!/^\s*text\/html\b/i.test(contentType))
72
- return false;
73
- const encoding = String(input.headers['content-encoding'] ?? 'identity').trim().toLowerCase();
74
- return encoding === '' || encoding === 'identity';
75
- }
76
- export const liveReloadClientSource = `
77
- const eventsUrl = ${JSON.stringify(liveReloadEventsPath)};
78
- let buildId = null;
79
- let overlay = null;
80
-
81
- function hideOverlay() {
82
- overlay?.remove();
83
- overlay = null;
84
- }
85
-
86
- function showOverlay(view) {
87
- if (globalThis.__kodyDevErrorPage) return;
88
- hideOverlay();
89
- const host = document.createElement('kody-dev-overlay');
90
- const root = host.attachShadow({ mode: 'open' });
91
- const label = view.kind === 'build' ? 'Build error' : 'Runtime error';
92
- // Keep CSS out of the text tree (page-text readers / textContent walkers).
93
- const sheet = new CSSStyleSheet();
94
- sheet.replaceSync(\`
95
- .backdrop { position: fixed; inset: 0; z-index: 2147483647; background: rgba(10, 4, 7, .82); display: flex; align-items: flex-start; justify-content: center; overflow: auto; font: 14px/1.5 ui-sans-serif, system-ui, sans-serif; }
96
- .panel { margin: 48px 16px; max-width: 960px; width: 100%; background: #1a1015; color: #f5e9ee; border: 1px solid #3a2530; border-radius: 10px; padding: 20px 24px; box-shadow: 0 20px 60px rgba(0,0,0,.5); }
97
- .top { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
98
- .label { font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: #ff8fab; }
99
- button { all: unset; cursor: pointer; color: #bfa9b3; font-size: 20px; line-height: 1; padding: 4px 8px; border-radius: 6px; }
100
- button:hover, button:focus-visible { background: #2a1a22; color: #fff; }
101
- h1 { font-size: 18px; margin: 8px 0 4px; word-break: break-word; }
102
- .request { color: #bfa9b3; font-size: 13px; margin: 0 0 12px; }
103
- pre { margin: 12px 0 0; padding: 14px; overflow: auto; background: #0e080b; border: 1px solid #3a2530; border-radius: 8px; font: 13px/1.55 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre; }
104
- .hint { color: #bfa9b3; font-size: 12px; margin-top: 12px; }
105
- \`);
106
- root.adoptedStyleSheets = [sheet];
107
- root.innerHTML = \`
108
- <div class="backdrop" role="alertdialog" aria-modal="true" aria-labelledby="kody-dev-title">
109
- <div class="panel">
110
- <div class="top"><span class="label"></span><button type="button" aria-label="Dismiss">×</button></div>
111
- <h1 id="kody-dev-title"></h1>
112
- <p class="request"></p>
113
- <pre></pre>
114
- <p class="hint">Fix it and save. The page reloads on the next good build. Esc dismisses.</p>
115
- </div>
116
- </div>\`;
117
- root.querySelector('.label').textContent = label;
118
- root.querySelector('h1').textContent = view.title;
119
- const request = root.querySelector('.request');
120
- if (view.request) request.textContent = view.request;
121
- else request.remove();
122
- root.querySelector('pre').textContent = view.detail;
123
- root.querySelector('button').addEventListener('click', hideOverlay);
124
- document.documentElement.appendChild(host);
125
- overlay = host;
126
- root.querySelector('button').focus();
127
- }
128
-
129
- addEventListener('keydown', (event) => {
130
- if (event.key === 'Escape') hideOverlay();
131
- });
132
-
133
- function connect() {
134
- const source = new EventSource(eventsUrl);
135
- source.addEventListener('hello', (event) => {
136
- const state = JSON.parse(event.data);
137
- if (buildId !== null && state.buildId !== null && state.buildId !== buildId) {
138
- location.reload();
139
- return;
140
- }
141
- buildId = state.buildId;
142
- if (state.error) showOverlay(state.error);
143
- });
144
- source.addEventListener('reload', () => location.reload());
145
- source.addEventListener('build_error', (event) => showOverlay(JSON.parse(event.data)));
146
- source.addEventListener('runtime_error', (event) => showOverlay(JSON.parse(event.data)));
147
- }
148
-
149
- connect();
150
- `.trimStart();
151
- //# sourceMappingURL=live-reload.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"live-reload.js","sourceRoot":"","sources":["../../src/dev/live-reload.ts"],"names":[],"mappings":"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"}
@@ -1,102 +0,0 @@
1
- /**
2
- * `kody.dev.prebuild`: a shell command `kody dev` runs from the package root
3
- * before every build, so generated assets (CSS, icons, data files) stay in
4
- * sync with the source without a second watcher process.
5
- */
6
- import { spawn } from 'node:child_process';
7
- import { apiTokenEnvVar } from '../defaults.js';
8
- const outputTailLines = 20;
9
- export class PrebuildError extends Error {
10
- constructor(message) {
11
- super(message);
12
- this.name = 'PrebuildError';
13
- }
14
- }
15
- export async function runPrebuild(input) {
16
- if (input.signal?.aborted) {
17
- throw new PrebuildError('kody.dev.prebuild aborted before start');
18
- }
19
- const env = { ...process.env, KODY_DEV: '1' };
20
- delete env[apiTokenEnvVar];
21
- // New process group so abort can SIGKILL the whole tree (sh + npm/node/…).
22
- const child = spawn('sh', ['-c', input.command], {
23
- cwd: input.cwd,
24
- env,
25
- stdio: ['ignore', 'pipe', 'pipe'],
26
- detached: true,
27
- });
28
- if (child.pid)
29
- input.onSpawn?.(child.pid);
30
- const tail = [];
31
- const collect = (stream) => (line) => {
32
- tail.push(line);
33
- if (tail.length > outputTailLines)
34
- tail.shift();
35
- input.onLine?.(line, stream);
36
- };
37
- forEachLine(child.stdout, collect('stdout'));
38
- forEachLine(child.stderr, collect('stderr'));
39
- const killChild = () => {
40
- if (child.exitCode !== null || child.signalCode !== null)
41
- return;
42
- const pid = child.pid;
43
- if (pid === undefined)
44
- return;
45
- try {
46
- process.kill(-pid, 'SIGKILL');
47
- }
48
- catch {
49
- try {
50
- child.kill('SIGKILL');
51
- }
52
- catch {
53
- // already gone
54
- }
55
- }
56
- };
57
- if (input.signal) {
58
- if (input.signal.aborted)
59
- killChild();
60
- else
61
- input.signal.addEventListener('abort', killChild, { once: true });
62
- }
63
- try {
64
- const result = await new Promise((resolve, reject) => {
65
- child.once('error', reject);
66
- child.once('close', (code, signal) => resolve({ code, signal }));
67
- });
68
- if (input.signal?.aborted) {
69
- throw new PrebuildError('kody.dev.prebuild aborted');
70
- }
71
- if (result.code === 0)
72
- return;
73
- const how = result.signal ? `signal ${result.signal}` : `exit ${result.code}`;
74
- throw new PrebuildError([`kody.dev.prebuild failed (${how}): ${input.command}`, ...tail.map((line) => ` ${line}`)].join('\n'));
75
- }
76
- finally {
77
- input.signal?.removeEventListener('abort', killChild);
78
- if (child.pid)
79
- input.onExit?.(child.pid);
80
- }
81
- }
82
- /** Split stream chunks into lines, including a final incomplete line on end. */
83
- function forEachLine(stream, onLine) {
84
- if (!stream)
85
- return;
86
- let buffered = '';
87
- stream.on('data', (chunk) => {
88
- buffered += typeof chunk === 'string' ? chunk : chunk.toString('utf8');
89
- const lines = buffered.split('\n');
90
- buffered = lines.pop() ?? '';
91
- for (const line of lines) {
92
- if (line.length > 0)
93
- onLine(line);
94
- }
95
- });
96
- stream.on('end', () => {
97
- if (buffered.length > 0)
98
- onLine(buffered);
99
- buffered = '';
100
- });
101
- }
102
- //# sourceMappingURL=prebuild.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prebuild.js","sourceRoot":"","sources":["../../src/dev/prebuild.ts"],"names":[],"mappings":"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"}
@@ -1,151 +0,0 @@
1
- /**
2
- * Keeps `kody dev` from leaking workerd processes and `/tmp/kody-dev-*` dirs.
3
- *
4
- * - A tiny detached `sh` reaper holds a pipe from this process. It learns
5
- * workerd pids over that pipe and, when the pipe closes for any reason
6
- * (including SIGKILL of the CLI), kills those pids and removes the work dir.
7
- * - On startup, {@link sweepStaleDevDirs} removes dirs and workerd processes
8
- * left behind by dead CLI processes (including CLIs that predate the reaper).
9
- */
10
- import { spawn } from 'node:child_process';
11
- import { readdir, readFile, rm, stat, writeFile } from 'node:fs/promises';
12
- import { tmpdir } from 'node:os';
13
- import { join } from 'node:path';
14
- import psList from 'ps-list';
15
- export const devWorkDirPrefix = 'kody-dev-';
16
- const ownerFileName = 'owner.json';
17
- /** Legacy dirs without an owner file are only removed once this old. */
18
- const legacyDirMinAgeMs = 10 * 60_000;
19
- const reaperScript = `
20
- pids=" "
21
- while IFS= read -r line; do
22
- case "$line" in
23
- +*) pids="$pids\${line#+} " ;;
24
- -*) pids="$(printf '%s' "$pids" | sed "s/ \${line#-} / /g")" ;;
25
- esac
26
- done
27
- for entry in $pids; do
28
- case "$entry" in
29
- g*) /bin/kill -s KILL -- -\${entry#g} 2>/dev/null ;;
30
- *) /bin/kill -s KILL -- \$entry 2>/dev/null ;;
31
- esac
32
- done
33
- rm -rf "$1"
34
- `;
35
- export async function startProcessReaper(input) {
36
- await writeFile(join(input.workDir, ownerFileName), JSON.stringify({ pid: process.pid, startedAt: new Date().toISOString() }));
37
- let reaper;
38
- try {
39
- reaper = spawn('/bin/sh', ['-c', reaperScript, 'kody-dev-reaper', input.workDir], {
40
- stdio: ['pipe', 'ignore', 'ignore'],
41
- detached: true,
42
- });
43
- reaper.on('error', () => {
44
- reaper = undefined;
45
- });
46
- reaper.stdin?.on('error', () => { });
47
- reaper.unref();
48
- reaper.stdin?.unref?.();
49
- }
50
- catch {
51
- reaper = undefined;
52
- }
53
- const send = (line) => {
54
- if (reaper?.stdin?.writable)
55
- reaper.stdin.write(`${line}\n`);
56
- };
57
- return {
58
- track: (pid) => send(`+${pid}`),
59
- untrack: (pid) => send(`-${pid}`),
60
- trackGroup: (pid) => send(`+g${pid}`),
61
- untrackGroup: (pid) => send(`-g${pid}`),
62
- close: () => {
63
- reaper?.stdin?.end();
64
- reaper = undefined;
65
- },
66
- };
67
- }
68
- /**
69
- * Remove `kody-dev-*` work dirs whose owner is gone and kill workerd processes
70
- * still serving from them. Best effort; never throws.
71
- */
72
- export async function sweepStaleDevDirs(input = {}) {
73
- const tmp = input.tmp ?? tmpdir();
74
- const now = input.now ?? Date.now();
75
- const isAlive = input.isAlive ?? isProcessAlive;
76
- const kill = input.kill ?? ((pid) => process.kill(pid, 'SIGKILL'));
77
- const removed = [];
78
- const killed = [];
79
- let entries;
80
- try {
81
- entries = (await readdir(tmp)).filter((name) => name.startsWith(devWorkDirPrefix));
82
- }
83
- catch {
84
- return { removed, killed };
85
- }
86
- if (entries.length === 0)
87
- return { removed, killed };
88
- let processes = [];
89
- try {
90
- processes = await (input.listProcesses ?? psList)();
91
- }
92
- catch {
93
- processes = [];
94
- }
95
- const byPid = new Map(processes.map((item) => [item.pid, item]));
96
- for (const name of entries) {
97
- const dir = join(tmp, name);
98
- try {
99
- const owner = await readOwnerPid(dir);
100
- if (owner !== null && isAlive(owner))
101
- continue;
102
- const workerds = processes.filter((item) => /workerd/.test(item.name) && (item.cmd ?? '').includes(`${dir}/`));
103
- if (owner === null) {
104
- const info = await stat(dir);
105
- if (now - info.mtimeMs < legacyDirMinAgeMs)
106
- continue;
107
- // Legacy CLI without an owner file: only reap workerds whose parent died.
108
- if (workerds.some((item) => !isOrphaned(item, byPid, isAlive)))
109
- continue;
110
- }
111
- for (const item of workerds) {
112
- try {
113
- kill(item.pid);
114
- killed.push(item.pid);
115
- }
116
- catch { }
117
- }
118
- await rm(dir, { recursive: true, force: true });
119
- removed.push(dir);
120
- }
121
- catch { }
122
- }
123
- return { removed, killed };
124
- }
125
- function isOrphaned(item, byPid, isAlive) {
126
- if (item.ppid === undefined)
127
- return false;
128
- if (item.ppid <= 1 || !isAlive(item.ppid))
129
- return true;
130
- const parent = byPid.get(item.ppid);
131
- return parent !== undefined && !/node|kody/i.test(`${parent.name} ${parent.cmd ?? ''}`);
132
- }
133
- async function readOwnerPid(dir) {
134
- try {
135
- const parsed = JSON.parse(await readFile(join(dir, ownerFileName), 'utf8'));
136
- return typeof parsed.pid === 'number' ? parsed.pid : null;
137
- }
138
- catch {
139
- return null;
140
- }
141
- }
142
- export function isProcessAlive(pid) {
143
- try {
144
- process.kill(pid, 0);
145
- return true;
146
- }
147
- catch (error) {
148
- return error.code === 'EPERM';
149
- }
150
- }
151
- //# sourceMappingURL=process-reaper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process-reaper.js","sourceRoot":"","sources":["../../src/dev/process-reaper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,MAAM,MAAM,SAAS,CAAA;AAE5B,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAA;AAC3C,MAAM,aAAa,GAAG,YAAY,CAAA;AAClC,wEAAwE;AACxE,MAAM,iBAAiB,GAAG,EAAE,GAAG,MAAM,CAAA;AAErC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;CAepB,CAAA;AAWD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAA0B;IAClE,MAAM,SAAS,CACd,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,EAClC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CACzE,CAAA;IACD,IAAI,MAAgC,CAAA;IACpC,IAAI,CAAC;QACJ,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;YACjF,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;YACnC,QAAQ,EAAE,IAAI;SACd,CAAC,CAAA;QACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,MAAM,GAAG,SAAS,CAAA;QACnB,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACnC,MAAM,CAAC,KAAK,EAAE,CACb;QAAC,MAAM,CAAC,KAAkD,EAAE,KAAK,EAAE,EAAE,CAAA;IACvE,CAAC;IAAC,MAAM,CAAC;QACR,MAAM,GAAG,SAAS,CAAA;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,IAAI,MAAM,EAAE,KAAK,EAAE,QAAQ;YAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;IAC7D,CAAC,CAAA;IACD,OAAO;QACN,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACjC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QACrC,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QACvC,KAAK,EAAE,GAAG,EAAE;YACX,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;YACpB,MAAM,GAAG,SAAS,CAAA;QACnB,CAAC;KACD,CAAA;AACF,CAAC;AAID;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,QAMI,EAAE;IAEN,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,MAAM,EAAE,CAAA;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,cAAc,CAAA;IAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAA;IAC1E,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,MAAM,MAAM,GAAkB,EAAE,CAAA;IAChC,IAAI,OAAsB,CAAA;IAC1B,IAAI,CAAC;QACJ,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACnF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IAC3B,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IACpD,IAAI,SAAS,GAAyB,EAAE,CAAA;IACxC,IAAI,CAAC;QACJ,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,MAAM,CAAC,EAAE,CAAA;IACpD,CAAC;IAAC,MAAM,CAAC;QACR,SAAS,GAAG,EAAE,CAAA;IACf,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IAChE,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC3B,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAA;YACrC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;gBAAE,SAAQ;YAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,CAC3E,CAAA;YACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,iBAAiB;oBAAE,SAAQ;gBACpD,0EAA0E;gBAC1E,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;oBAAE,SAAQ;YACzE,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACJ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBACd,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACtB,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACX,CAAC;YACD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AAC3B,CAAC;AAED,SAAS,UAAU,CAClB,IAAmB,EACnB,KAAiC,EACjC,OAAiC;IAEjC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACzC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnC,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAA;AACxF,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,CAEzE,CAAA;QACD,OAAO,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;IAC1D,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,IAAI,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACpB,OAAO,IAAI,CAAA;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAQ,KAA+B,CAAC,IAAI,KAAK,OAAO,CAAA;IACzD,CAAC;AACF,CAAC"}
@@ -1,56 +0,0 @@
1
- /**
2
- * Turn a workerd V8 stack (frames point into the bundled `main.js`) into one
3
- * that points at the author's `.ts` sources, without runtime wrapper frames.
4
- */
5
- import { originalPositionFor, TraceMap } from '@jridgewell/trace-mapping';
6
- const internalModules = new Set([
7
- '__kody_local_entry.js',
8
- 'kody:runtime',
9
- '.__kody_runtime__.js',
10
- 'runtime.js',
11
- 'entry.js',
12
- ]);
13
- const framePattern = /^(\s*at\s+)(?:(.*?)\s+\()?([^()\s]+?):(\d+):(\d+)\)?\s*$/;
14
- export function createStackMapper(input) {
15
- let map = null;
16
- if (input.sourceMap) {
17
- try {
18
- map = new TraceMap(input.sourceMap);
19
- }
20
- catch {
21
- map = null;
22
- }
23
- }
24
- return (stack) => {
25
- const out = [];
26
- for (const line of stack.split('\n')) {
27
- if (!/^\s*at\s/.test(line)) {
28
- out.push(line);
29
- continue;
30
- }
31
- const match = framePattern.exec(line);
32
- if (!match)
33
- continue;
34
- const [, lead, fn, file, lineText, colText] = match;
35
- const module = file.replace(/^file:\/\/\//, '').replace(/^\//, '');
36
- if (internalModules.has(module))
37
- continue;
38
- const fnPart = fn ? `${fn} (` : '';
39
- const close = fn ? ')' : '';
40
- if (map && module === input.userModule) {
41
- const original = originalPositionFor(map, {
42
- line: Number(lineText),
43
- column: Number(colText) - 1,
44
- });
45
- if (original.source && original.line !== null) {
46
- const name = fn ?? original.name;
47
- out.push(`${lead}${name ? `${name} (` : ''}${original.source}:${original.line}:${(original.column ?? 0) + 1}${name ? ')' : ''}`);
48
- continue;
49
- }
50
- }
51
- out.push(`${lead}${fnPart}${file}:${lineText}:${colText}${close}`);
52
- }
53
- return out.join('\n');
54
- };
55
- }
56
- //# sourceMappingURL=stack-trace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stack-trace.js","sourceRoot":"","sources":["../../src/dev/stack-trace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEzE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC/B,uBAAuB;IACvB,cAAc;IACd,sBAAsB;IACtB,YAAY;IACZ,UAAU;CACV,CAAC,CAAA;AAEF,MAAM,YAAY,GAAG,0DAA0D,CAAA;AAI/E,MAAM,UAAU,iBAAiB,CAAC,KAKjC;IACA,IAAI,GAAG,GAAoB,IAAI,CAAA;IAC/B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,IAAI,CAAC;YACJ,GAAG,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACpC,CAAC;QAAC,MAAM,CAAC;YACR,GAAG,GAAG,IAAI,CAAA;QACX,CAAC;IACF,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,EAAE;QAChB,MAAM,GAAG,GAAkB,EAAE,CAAA;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACd,SAAQ;YACT,CAAC;YACD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC,KAAK;gBAAE,SAAQ;YACpB,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,KAAK,CAAA;YACnD,MAAM,MAAM,GAAG,IAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YACnE,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAQ;YACzC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;YAClC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;YAC3B,IAAI,GAAG,IAAI,MAAM,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,EAAE;oBACzC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;oBACtB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;iBAC3B,CAAC,CAAA;gBACF,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBAC/C,MAAM,IAAI,GAAG,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAA;oBAChC,GAAG,CAAC,IAAI,CACP,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACtH,CAAA;oBACD,SAAQ;gBACT,CAAC;YACF,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,IAAI,QAAQ,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC,CAAA;AACF,CAAC"}
@@ -1,118 +0,0 @@
1
- /**
2
- * One workerd `serve` process for `kody dev`: spawn, wait for the control-fd
3
- * `listen` event, stream stdout/stderr line by line, and stop it.
4
- */
5
- import { spawn } from 'node:child_process';
6
- import { createInterface } from 'node:readline';
7
- import { redact } from '../redact.js';
8
- const workerdStartTimeoutMs = 30_000;
9
- export async function startWorkerd(input) {
10
- const child = spawn(input.workerdPath, ['serve', input.configPath, '--control-fd=3'], {
11
- cwd: input.cwd,
12
- env: input.env,
13
- stdio: ['ignore', 'pipe', 'pipe', 'pipe'],
14
- });
15
- if (child.pid !== undefined)
16
- input.onSpawn?.(child.pid);
17
- let startupStderr = '';
18
- let listening = false;
19
- forEachLine(child.stdout, input.onStdoutLine);
20
- forEachLine(child.stderr, (line) => {
21
- if (!listening)
22
- startupStderr += `${line}\n`;
23
- input.onStderrLine(line);
24
- });
25
- const exited = new Promise((resolve) => {
26
- child.once('exit', (code, signal) => resolve(`workerd exit ${signal ?? code}`));
27
- child.once('error', (error) => resolve(`workerd error: ${error.message}`));
28
- });
29
- const port = await waitForListen(child, exited, () => {
30
- const trimmed = redact(startupStderr.trim());
31
- return trimmed ? `\n${trimmed}` : '';
32
- });
33
- listening = true;
34
- return {
35
- pid: child.pid ?? -1,
36
- port,
37
- exited,
38
- kill: async () => {
39
- if (child.exitCode !== null || child.signalCode !== null)
40
- return;
41
- child.kill('SIGKILL');
42
- await Promise.race([exited, new Promise((resolve) => setTimeout(resolve, 1000))]);
43
- },
44
- };
45
- }
46
- function forEachLine(stream, onLine) {
47
- if (!stream)
48
- return;
49
- const lines = createInterface({ input: stream, crlfDelay: Infinity });
50
- lines.on('line', (line) => {
51
- if (line.length > 0)
52
- onLine(line);
53
- });
54
- }
55
- function waitForListen(child, exited, stderr) {
56
- return new Promise((resolve, reject) => {
57
- const control = child.stdio[3];
58
- let buffered = '';
59
- let settled = false;
60
- const settle = (fn) => {
61
- if (settled)
62
- return;
63
- settled = true;
64
- clearTimeout(timer);
65
- fn();
66
- };
67
- const timer = setTimeout(() => {
68
- settle(() => {
69
- child.kill('SIGKILL');
70
- reject(new Error(`workerd did not start within ${workerdStartTimeoutMs / 1000}s.${stderr()}`));
71
- });
72
- }, workerdStartTimeoutMs);
73
- control?.on('data', (chunk) => {
74
- buffered += chunk.toString('utf8');
75
- const lines = buffered.split('\n');
76
- buffered = lines.pop() ?? '';
77
- for (const line of lines) {
78
- const port = parseListenPort(line);
79
- if (port !== null)
80
- settle(() => resolve(port));
81
- }
82
- });
83
- void exited.then((detail) => {
84
- settle(() => reject(new Error(`workerd failed to start (${detail})${stderr()}`)));
85
- });
86
- });
87
- }
88
- export function parseListenPort(line) {
89
- if (!line.trim())
90
- return null;
91
- try {
92
- const event = JSON.parse(line);
93
- return event.event === 'listen' && event.socket === 'http' && typeof event.port === 'number'
94
- ? event.port
95
- : null;
96
- }
97
- catch {
98
- return null;
99
- }
100
- }
101
- /**
102
- * Make workerd stderr readable: drop native `stack: …workerd@0x…` address
103
- * lines and the C++ source prefix on uncaught-exception lines. Returns null
104
- * for lines that carry nothing for a JS developer.
105
- */
106
- export function cleanWorkerdStderrLine(line) {
107
- const trimmed = line.trim();
108
- if (!trimmed)
109
- return null;
110
- if (/^stack:(\s+\S+@[0-9a-fx]+)+\s*$/i.test(trimmed))
111
- return null;
112
- const prefixed = /^workerd\/\S+:\d+: (?:error|warning|info|debug): (.*)$/.exec(trimmed);
113
- const body = prefixed ? prefixed[1] : trimmed;
114
- return body
115
- .replace(/\S+\.(?:c\+\+|h):\d+: failed: /g, '')
116
- .replace(/(?:remote\.)?jsg\.(\w*Error)(?=:)/g, '$1');
117
- }
118
- //# sourceMappingURL=workerd-process.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workerd-process.js","sourceRoot":"","sources":["../../src/dev/workerd-process.ts"],"names":[],"mappings":"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"}