@zuplo/cli 7.10.0 → 7.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/dist/common/worker-output.d.ts +7 -0
  2. package/dist/common/worker-output.d.ts.map +1 -1
  3. package/dist/common/worker-output.js +39 -0
  4. package/dist/common/worker-output.js.map +1 -1
  5. package/dist/tsconfig.tsbuildinfo +1 -1
  6. package/node_modules/@hono/node-server/README.md +2 -0
  7. package/node_modules/@hono/node-server/dist/index.cjs +1 -1
  8. package/node_modules/@hono/node-server/dist/index.mjs +1 -1
  9. package/node_modules/@hono/node-server/dist/serve-static.cjs +2 -1
  10. package/node_modules/@hono/node-server/dist/serve-static.mjs +2 -1
  11. package/node_modules/@hono/node-server/package.json +1 -1
  12. package/node_modules/@posthog/core/dist/metrics/index.d.ts +9 -0
  13. package/node_modules/@posthog/core/dist/metrics/index.d.ts.map +1 -1
  14. package/node_modules/@posthog/core/dist/metrics/index.js +38 -3
  15. package/node_modules/@posthog/core/dist/metrics/index.mjs +38 -3
  16. package/node_modules/@posthog/core/dist/metrics/types.d.ts +7 -2
  17. package/node_modules/@posthog/core/dist/metrics/types.d.ts.map +1 -1
  18. package/node_modules/@posthog/core/dist/traces/ids.d.ts.map +1 -1
  19. package/node_modules/@posthog/core/dist/traces/ids.js +2 -2
  20. package/node_modules/@posthog/core/dist/traces/ids.mjs +2 -2
  21. package/node_modules/@posthog/core/dist/types.d.ts +1 -1
  22. package/node_modules/@posthog/core/dist/types.d.ts.map +1 -1
  23. package/node_modules/@posthog/core/package.json +4 -3
  24. package/node_modules/@posthog/core/src/metrics/index.spec.ts +75 -0
  25. package/node_modules/@posthog/core/src/metrics/index.ts +60 -0
  26. package/node_modules/@posthog/core/src/metrics/types.ts +7 -1
  27. package/node_modules/@posthog/core/src/traces/ids.ts +4 -2
  28. package/node_modules/@posthog/core/src/types.ts +1 -1
  29. package/node_modules/@posthog/types/dist/capture-metric.d.ts +10 -0
  30. package/node_modules/@posthog/types/dist/capture-metric.d.ts.map +1 -1
  31. package/node_modules/@posthog/types/dist/capture.d.ts +1 -1
  32. package/node_modules/@posthog/types/dist/capture.d.ts.map +1 -1
  33. package/node_modules/@posthog/types/dist/index.d.ts +1 -1
  34. package/node_modules/@posthog/types/dist/index.d.ts.map +1 -1
  35. package/node_modules/@posthog/types/package.json +1 -1
  36. package/node_modules/@posthog/types/src/capture-metric.ts +11 -0
  37. package/node_modules/@posthog/types/src/capture.ts +1 -1
  38. package/node_modules/@posthog/types/src/index.ts +1 -0
  39. package/node_modules/@zuplo/core/customer.cli.minified.js +272 -261
  40. package/node_modules/@zuplo/core/index.minified.js +276 -265
  41. package/node_modules/@zuplo/core/package.json +1 -1
  42. package/node_modules/@zuplo/graphql/package.json +1 -1
  43. package/node_modules/@zuplo/openapi-tools/package.json +5 -2
  44. package/node_modules/@zuplo/otel/package.json +1 -1
  45. package/node_modules/@zuplo/runtime/out/esm/{chunk-YJ2BHVUH.js → chunk-CDEAY3VY.js} +2 -2
  46. package/node_modules/@zuplo/runtime/out/esm/chunk-LVSZ3WTO.js +37 -0
  47. package/node_modules/@zuplo/runtime/out/esm/chunk-LVSZ3WTO.js.map +1 -0
  48. package/node_modules/@zuplo/runtime/out/esm/{chunk-VTO3F6DK.js → chunk-NUVXDVLJ.js} +2 -2
  49. package/node_modules/@zuplo/runtime/out/esm/{chunk-6YPRGG62.js → chunk-RHU3Z7DA.js} +108 -108
  50. package/node_modules/@zuplo/runtime/out/esm/chunk-RHU3Z7DA.js.map +1 -0
  51. package/node_modules/@zuplo/runtime/out/esm/index.js +1 -1
  52. package/node_modules/@zuplo/runtime/out/esm/internal/index.js +1 -1
  53. package/node_modules/@zuplo/runtime/out/esm/mcp-gateway/index.js +1 -1
  54. package/node_modules/@zuplo/runtime/out/esm/mocks/index.js +1 -1
  55. package/node_modules/@zuplo/runtime/out/esm/sdks/aws/index.js +1 -1
  56. package/node_modules/@zuplo/runtime/out/types/index.d.ts +15 -24
  57. package/node_modules/@zuplo/runtime/out/types/internal/index.d.ts +14 -0
  58. package/node_modules/@zuplo/runtime/package.json +1 -1
  59. package/package.json +15 -12
  60. package/dist/__tests__/archive-utils.test.d.ts +0 -2
  61. package/dist/__tests__/archive-utils.test.d.ts.map +0 -1
  62. package/dist/__tests__/archive-utils.test.js +0 -50
  63. package/dist/__tests__/archive-utils.test.js.map +0 -1
  64. package/dist/__tests__/import-openapi.test.d.ts +0 -2
  65. package/dist/__tests__/import-openapi.test.d.ts.map +0 -1
  66. package/dist/__tests__/import-openapi.test.js +0 -251
  67. package/dist/__tests__/import-openapi.test.js.map +0 -1
  68. package/dist/__tests__/integration/confirm-linked-config.integration.test.d.ts +0 -2
  69. package/dist/__tests__/integration/confirm-linked-config.integration.test.d.ts.map +0 -1
  70. package/dist/__tests__/integration/confirm-linked-config.integration.test.js +0 -202
  71. package/dist/__tests__/integration/confirm-linked-config.integration.test.js.map +0 -1
  72. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts +0 -2
  73. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts.map +0 -1
  74. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js +0 -184
  75. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js.map +0 -1
  76. package/dist/__tests__/integration/custom-domain.integration.test.d.ts +0 -2
  77. package/dist/__tests__/integration/custom-domain.integration.test.d.ts.map +0 -1
  78. package/dist/__tests__/integration/custom-domain.integration.test.js +0 -563
  79. package/dist/__tests__/integration/custom-domain.integration.test.js.map +0 -1
  80. package/dist/__tests__/integration/delete.integration.test.d.ts +0 -2
  81. package/dist/__tests__/integration/delete.integration.test.d.ts.map +0 -1
  82. package/dist/__tests__/integration/delete.integration.test.js +0 -262
  83. package/dist/__tests__/integration/delete.integration.test.js.map +0 -1
  84. package/dist/__tests__/integration/deploy.integration.test.d.ts +0 -2
  85. package/dist/__tests__/integration/deploy.integration.test.d.ts.map +0 -1
  86. package/dist/__tests__/integration/deploy.integration.test.js +0 -519
  87. package/dist/__tests__/integration/deploy.integration.test.js.map +0 -1
  88. package/dist/__tests__/integration/get-project-param.integration.test.d.ts +0 -2
  89. package/dist/__tests__/integration/get-project-param.integration.test.d.ts.map +0 -1
  90. package/dist/__tests__/integration/get-project-param.integration.test.js +0 -305
  91. package/dist/__tests__/integration/get-project-param.integration.test.js.map +0 -1
  92. package/dist/__tests__/integration/info.integration.test.d.ts +0 -2
  93. package/dist/__tests__/integration/info.integration.test.d.ts.map +0 -1
  94. package/dist/__tests__/integration/info.integration.test.js +0 -293
  95. package/dist/__tests__/integration/info.integration.test.js.map +0 -1
  96. package/dist/__tests__/integration/jest-mocks-setup.d.ts +0 -2
  97. package/dist/__tests__/integration/jest-mocks-setup.d.ts.map +0 -1
  98. package/dist/__tests__/integration/jest-mocks-setup.js +0 -104
  99. package/dist/__tests__/integration/jest-mocks-setup.js.map +0 -1
  100. package/dist/__tests__/integration/jest-setup.d.ts +0 -2
  101. package/dist/__tests__/integration/jest-setup.d.ts.map +0 -1
  102. package/dist/__tests__/integration/jest-setup.js +0 -12
  103. package/dist/__tests__/integration/jest-setup.js.map +0 -1
  104. package/dist/__tests__/integration/link.integration.test.d.ts +0 -2
  105. package/dist/__tests__/integration/link.integration.test.d.ts.map +0 -1
  106. package/dist/__tests__/integration/link.integration.test.js +0 -395
  107. package/dist/__tests__/integration/link.integration.test.js.map +0 -1
  108. package/dist/__tests__/integration/linked-config-cascade.integration.test.d.ts +0 -2
  109. package/dist/__tests__/integration/linked-config-cascade.integration.test.d.ts.map +0 -1
  110. package/dist/__tests__/integration/linked-config-cascade.integration.test.js +0 -179
  111. package/dist/__tests__/integration/linked-config-cascade.integration.test.js.map +0 -1
  112. package/dist/__tests__/integration/list.integration.test.d.ts +0 -2
  113. package/dist/__tests__/integration/list.integration.test.d.ts.map +0 -1
  114. package/dist/__tests__/integration/list.integration.test.js +0 -300
  115. package/dist/__tests__/integration/list.integration.test.js.map +0 -1
  116. package/dist/__tests__/integration/source-upgrade.integration.test.d.ts +0 -2
  117. package/dist/__tests__/integration/source-upgrade.integration.test.d.ts.map +0 -1
  118. package/dist/__tests__/integration/source-upgrade.integration.test.js +0 -100
  119. package/dist/__tests__/integration/source-upgrade.integration.test.js.map +0 -1
  120. package/dist/__tests__/integration/test-utils.d.ts +0 -30
  121. package/dist/__tests__/integration/test-utils.d.ts.map +0 -1
  122. package/dist/__tests__/integration/test-utils.js +0 -82
  123. package/dist/__tests__/integration/test-utils.js.map +0 -1
  124. package/dist/__tests__/integration/tunnel.integration.test.d.ts +0 -2
  125. package/dist/__tests__/integration/tunnel.integration.test.d.ts.map +0 -1
  126. package/dist/__tests__/integration/tunnel.integration.test.js +0 -486
  127. package/dist/__tests__/integration/tunnel.integration.test.js.map +0 -1
  128. package/dist/__tests__/integration/variable.integration.test.d.ts +0 -2
  129. package/dist/__tests__/integration/variable.integration.test.d.ts.map +0 -1
  130. package/dist/__tests__/integration/variable.integration.test.js +0 -258
  131. package/dist/__tests__/integration/variable.integration.test.js.map +0 -1
  132. package/dist/__tests__/integration/whoami.integration.test.d.ts +0 -2
  133. package/dist/__tests__/integration/whoami.integration.test.d.ts.map +0 -1
  134. package/dist/__tests__/integration/whoami.integration.test.js +0 -116
  135. package/dist/__tests__/integration/whoami.integration.test.js.map +0 -1
  136. package/dist/__tests__/outdated.test.d.ts +0 -2
  137. package/dist/__tests__/outdated.test.d.ts.map +0 -1
  138. package/dist/__tests__/outdated.test.js +0 -67
  139. package/dist/__tests__/outdated.test.js.map +0 -1
  140. package/dist/__tests__/populate.test.d.ts +0 -2
  141. package/dist/__tests__/populate.test.d.ts.map +0 -1
  142. package/dist/__tests__/populate.test.js +0 -445
  143. package/dist/__tests__/populate.test.js.map +0 -1
  144. package/dist/__tests__/tsconfig-upgrader.test.d.ts +0 -2
  145. package/dist/__tests__/tsconfig-upgrader.test.d.ts.map +0 -1
  146. package/dist/__tests__/tsconfig-upgrader.test.js +0 -31
  147. package/dist/__tests__/tsconfig-upgrader.test.js.map +0 -1
  148. package/dist/ca-certificate/validation.test.d.ts +0 -2
  149. package/dist/ca-certificate/validation.test.d.ts.map +0 -1
  150. package/dist/ca-certificate/validation.test.js +0 -131
  151. package/dist/ca-certificate/validation.test.js.map +0 -1
  152. package/dist/common/analytics/cli-invocation.test.d.ts +0 -2
  153. package/dist/common/analytics/cli-invocation.test.d.ts.map +0 -1
  154. package/dist/common/analytics/cli-invocation.test.js +0 -51
  155. package/dist/common/analytics/cli-invocation.test.js.map +0 -1
  156. package/dist/common/analytics/package-manager.test.d.ts +0 -2
  157. package/dist/common/analytics/package-manager.test.d.ts.map +0 -1
  158. package/dist/common/analytics/package-manager.test.js +0 -163
  159. package/dist/common/analytics/package-manager.test.js.map +0 -1
  160. package/dist/common/cli-dispatcher.test.d.ts +0 -2
  161. package/dist/common/cli-dispatcher.test.d.ts.map +0 -1
  162. package/dist/common/cli-dispatcher.test.js +0 -80
  163. package/dist/common/cli-dispatcher.test.js.map +0 -1
  164. package/dist/common/middleware/check-pnpm-lifecycle.test.d.ts +0 -2
  165. package/dist/common/middleware/check-pnpm-lifecycle.test.d.ts.map +0 -1
  166. package/dist/common/middleware/check-pnpm-lifecycle.test.js +0 -125
  167. package/dist/common/middleware/check-pnpm-lifecycle.test.js.map +0 -1
  168. package/dist/common/middleware/get-environment-param.test.d.ts +0 -2
  169. package/dist/common/middleware/get-environment-param.test.d.ts.map +0 -1
  170. package/dist/common/middleware/get-environment-param.test.js +0 -57
  171. package/dist/common/middleware/get-environment-param.test.js.map +0 -1
  172. package/dist/common/read-linked-config.test.d.ts +0 -2
  173. package/dist/common/read-linked-config.test.d.ts.map +0 -1
  174. package/dist/common/read-linked-config.test.js +0 -363
  175. package/dist/common/read-linked-config.test.js.map +0 -1
  176. package/dist/common/terminal.test.d.ts +0 -2
  177. package/dist/common/terminal.test.d.ts.map +0 -1
  178. package/dist/common/terminal.test.js +0 -101
  179. package/dist/common/terminal.test.js.map +0 -1
  180. package/dist/common/utils/build-environment-prompt-choices.test.d.ts +0 -2
  181. package/dist/common/utils/build-environment-prompt-choices.test.d.ts.map +0 -1
  182. package/dist/common/utils/build-environment-prompt-choices.test.js +0 -97
  183. package/dist/common/utils/build-environment-prompt-choices.test.js.map +0 -1
  184. package/dist/common/utils/format-environment-type.test.d.ts +0 -2
  185. package/dist/common/utils/format-environment-type.test.d.ts.map +0 -1
  186. package/dist/common/utils/format-environment-type.test.js +0 -32
  187. package/dist/common/utils/format-environment-type.test.js.map +0 -1
  188. package/dist/common/utils/pnpm-lifecycle.test.d.ts +0 -2
  189. package/dist/common/utils/pnpm-lifecycle.test.d.ts.map +0 -1
  190. package/dist/common/utils/pnpm-lifecycle.test.js +0 -196
  191. package/dist/common/utils/pnpm-lifecycle.test.js.map +0 -1
  192. package/dist/common/utils/pretty-print-environment-prompt.test.d.ts +0 -2
  193. package/dist/common/utils/pretty-print-environment-prompt.test.d.ts.map +0 -1
  194. package/dist/common/utils/pretty-print-environment-prompt.test.js +0 -42
  195. package/dist/common/utils/pretty-print-environment-prompt.test.js.map +0 -1
  196. package/dist/common/utils/sort-environments-for-prompt.test.d.ts +0 -2
  197. package/dist/common/utils/sort-environments-for-prompt.test.d.ts.map +0 -1
  198. package/dist/common/utils/sort-environments-for-prompt.test.js +0 -82
  199. package/dist/common/utils/sort-environments-for-prompt.test.js.map +0 -1
  200. package/dist/common/utils/stringify-config.test.d.ts +0 -2
  201. package/dist/common/utils/stringify-config.test.d.ts.map +0 -1
  202. package/dist/common/utils/stringify-config.test.js +0 -80
  203. package/dist/common/utils/stringify-config.test.js.map +0 -1
  204. package/dist/common/validators/argument-validators.spec.d.ts +0 -2
  205. package/dist/common/validators/argument-validators.spec.d.ts.map +0 -1
  206. package/dist/common/validators/argument-validators.spec.js +0 -181
  207. package/dist/common/validators/argument-validators.spec.js.map +0 -1
  208. package/dist/deploy/archive.local-registry.test.d.ts +0 -2
  209. package/dist/deploy/archive.local-registry.test.d.ts.map +0 -1
  210. package/dist/deploy/archive.local-registry.test.js +0 -100
  211. package/dist/deploy/archive.local-registry.test.js.map +0 -1
  212. package/dist/deploy/archive.test.d.ts +0 -2
  213. package/dist/deploy/archive.test.d.ts.map +0 -1
  214. package/dist/deploy/archive.test.js +0 -248
  215. package/dist/deploy/archive.test.js.map +0 -1
  216. package/dist/deploy/classify-build-probe.test.d.ts +0 -2
  217. package/dist/deploy/classify-build-probe.test.d.ts.map +0 -1
  218. package/dist/deploy/classify-build-probe.test.js +0 -51
  219. package/dist/deploy/classify-build-probe.test.js.map +0 -1
  220. package/dist/deploy/poll-deployment.test.d.ts +0 -2
  221. package/dist/deploy/poll-deployment.test.d.ts.map +0 -1
  222. package/dist/deploy/poll-deployment.test.js +0 -158
  223. package/dist/deploy/poll-deployment.test.js.map +0 -1
  224. package/dist/dev/zuplo-local-gitignore.test.d.ts +0 -2
  225. package/dist/dev/zuplo-local-gitignore.test.d.ts.map +0 -1
  226. package/dist/dev/zuplo-local-gitignore.test.js +0 -58
  227. package/dist/dev/zuplo-local-gitignore.test.js.map +0 -1
  228. package/dist/editor/e2e/editor.spec.d.ts +0 -2
  229. package/dist/editor/e2e/editor.spec.d.ts.map +0 -1
  230. package/dist/editor/e2e/editor.spec.js +0 -44
  231. package/dist/editor/e2e/editor.spec.js.map +0 -1
  232. package/dist/link/project-type.test.d.ts +0 -2
  233. package/dist/link/project-type.test.d.ts.map +0 -1
  234. package/dist/link/project-type.test.js +0 -225
  235. package/dist/link/project-type.test.js.map +0 -1
  236. package/dist/lint/resolve-binary.test.d.ts +0 -2
  237. package/dist/lint/resolve-binary.test.d.ts.map +0 -1
  238. package/dist/lint/resolve-binary.test.js +0 -155
  239. package/dist/lint/resolve-binary.test.js.map +0 -1
  240. package/dist/open-api/convert/handler.spec.d.ts +0 -2
  241. package/dist/open-api/convert/handler.spec.d.ts.map +0 -1
  242. package/dist/open-api/convert/handler.spec.js +0 -301
  243. package/dist/open-api/convert/handler.spec.js.map +0 -1
  244. package/dist/open-api/merge/handler.spec.d.ts +0 -2
  245. package/dist/open-api/merge/handler.spec.d.ts.map +0 -1
  246. package/dist/open-api/merge/handler.spec.js +0 -673
  247. package/dist/open-api/merge/handler.spec.js.map +0 -1
  248. package/dist/open-api/overlay/handler.spec.d.ts +0 -2
  249. package/dist/open-api/overlay/handler.spec.d.ts.map +0 -1
  250. package/dist/open-api/overlay/handler.spec.js +0 -346
  251. package/dist/open-api/overlay/handler.spec.js.map +0 -1
  252. package/dist/source/ai-gateway/files.test.d.ts +0 -2
  253. package/dist/source/ai-gateway/files.test.d.ts.map +0 -1
  254. package/dist/source/ai-gateway/files.test.js +0 -135
  255. package/dist/source/ai-gateway/files.test.js.map +0 -1
  256. package/dist/source/ai-gateway/handler.test.d.ts +0 -2
  257. package/dist/source/ai-gateway/handler.test.d.ts.map +0 -1
  258. package/dist/source/ai-gateway/handler.test.js +0 -113
  259. package/dist/source/ai-gateway/handler.test.js.map +0 -1
  260. package/dist/source/ai-gateway/package.test.d.ts +0 -2
  261. package/dist/source/ai-gateway/package.test.d.ts.map +0 -1
  262. package/dist/source/ai-gateway/package.test.js +0 -30
  263. package/dist/source/ai-gateway/package.test.js.map +0 -1
  264. package/dist/source/ai-gateway/planner.test.d.ts +0 -2
  265. package/dist/source/ai-gateway/planner.test.d.ts.map +0 -1
  266. package/dist/source/ai-gateway/planner.test.js +0 -330
  267. package/dist/source/ai-gateway/planner.test.js.map +0 -1
  268. package/dist/source/ai-gateway/release.test.d.ts +0 -2
  269. package/dist/source/ai-gateway/release.test.d.ts.map +0 -1
  270. package/dist/source/ai-gateway/release.test.js +0 -62
  271. package/dist/source/ai-gateway/release.test.js.map +0 -1
  272. package/dist/test/invoke-test.test.d.ts +0 -2
  273. package/dist/test/invoke-test.test.d.ts.map +0 -1
  274. package/dist/test/invoke-test.test.js +0 -150
  275. package/dist/test/invoke-test.test.js.map +0 -1
  276. package/dist/test/test-files.test.d.ts +0 -2
  277. package/dist/test/test-files.test.d.ts.map +0 -1
  278. package/dist/test/test-files.test.js +0 -57
  279. package/dist/test/test-files.test.js.map +0 -1
  280. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.d.ts +0 -2
  281. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.d.ts.map +0 -1
  282. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.js +0 -289
  283. package/node_modules/@zuplo/openapi-tools/dist/file-format.spec.js.map +0 -1
  284. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.d.ts +0 -2
  285. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.d.ts.map +0 -1
  286. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.js +0 -181
  287. package/node_modules/@zuplo/openapi-tools/dist/merge-fixtures.spec.js.map +0 -1
  288. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.d.ts +0 -2
  289. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.d.ts.map +0 -1
  290. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.js +0 -399
  291. package/node_modules/@zuplo/openapi-tools/dist/merge.spec.js.map +0 -1
  292. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.d.ts +0 -2
  293. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.d.ts.map +0 -1
  294. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.js +0 -779
  295. package/node_modules/@zuplo/openapi-tools/dist/overlay.spec.js.map +0 -1
  296. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.d.ts +0 -2
  297. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.d.ts.map +0 -1
  298. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.js +0 -269
  299. package/node_modules/@zuplo/openapi-tools/dist/path-transform.spec.js.map +0 -1
  300. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.d.ts +0 -2
  301. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.d.ts.map +0 -1
  302. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.js +0 -93
  303. package/node_modules/@zuplo/openapi-tools/dist/url-utils.spec.js.map +0 -1
  304. package/node_modules/@zuplo/runtime/out/esm/chunk-6YPRGG62.js.map +0 -1
  305. package/node_modules/@zuplo/runtime/out/esm/chunk-PBDT4FDO.js +0 -37
  306. package/node_modules/@zuplo/runtime/out/esm/chunk-PBDT4FDO.js.map +0 -1
  307. /package/node_modules/@zuplo/runtime/out/esm/{chunk-YJ2BHVUH.js.map → chunk-CDEAY3VY.js.map} +0 -0
  308. /package/node_modules/@zuplo/runtime/out/esm/{chunk-PBDT4FDO.js.LEGAL.txt → chunk-LVSZ3WTO.js.LEGAL.txt} +0 -0
  309. /package/node_modules/@zuplo/runtime/out/esm/{chunk-VTO3F6DK.js.map → chunk-NUVXDVLJ.js.map} +0 -0
  310. /package/node_modules/@zuplo/runtime/out/esm/{chunk-6YPRGG62.js.LEGAL.txt → chunk-RHU3Z7DA.js.LEGAL.txt} +0 -0
@@ -1,5 +1,12 @@
1
1
  import { Readable } from "node:stream";
2
+ import { LogLevel } from "@zuplo/core/cli";
2
3
  import { ChalkInstance } from "chalk";
4
+ export declare function classifyGatewayLine(line: string):
5
+ | {
6
+ level: LogLevel;
7
+ message: string;
8
+ }
9
+ | undefined;
3
10
  export declare function createRuntimeStdioHandler(options?: {
4
11
  prefix?: string;
5
12
  prefixColor?: ChalkInstance;
@@ -1 +1 @@
1
- {"version":3,"file":"worker-output.d.ts","sourceRoot":"","sources":["../../src/common/worker-output.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM7C,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B,IACoC,QAAQ,QAAQ,EAAE,QAAQ,QAAQ,UAwMtE"}
1
+ {"version":3,"file":"worker-output.d.ts","sourceRoot":"","sources":["../../src/common/worker-output.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAiC,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAgC7C,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAqBlD;AAED,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,aAAa,CAAC;CAC7B,IACoC,QAAQ,QAAQ,EAAE,QAAQ,QAAQ,UAoNtE"}
@@ -4,6 +4,37 @@ import chalk from "chalk";
4
4
  const logFormatter = new LogFormatter(async (path) => {
5
5
  return readFile(path, { encoding: "utf8" });
6
6
  });
7
+ const ANSI_ESCAPE = /\u001b\[[0-9;]*m/g;
8
+ const GATEWAY_TRACING_LINE = /^\d{4}-\d{2}-\d{2}T[\d:.]+Z\s+(TRACE|DEBUG|INFO|WARN|ERROR)\s+[\w:]+:\s?(.*)$/;
9
+ const GATEWAY_PLAIN_LINES = [
10
+ [/^error: /, "error"],
11
+ [/^warning: /, "warn"],
12
+ [/^(note|hint): /, "info"],
13
+ [/^rebuild failed; still serving the previous build$/, "warn"],
14
+ [/^watching .+ for changes$/, "info"],
15
+ [/^.+ changed; rebuilding$/, "info"],
16
+ [/^rebuilt in \d+ ms$/, "info"],
17
+ ];
18
+ export function classifyGatewayLine(line) {
19
+ const plain = line.replace(ANSI_ESCAPE, "");
20
+ const tracing = GATEWAY_TRACING_LINE.exec(plain);
21
+ if (tracing) {
22
+ const levels = {
23
+ TRACE: "debug",
24
+ DEBUG: "debug",
25
+ INFO: "info",
26
+ WARN: "warn",
27
+ ERROR: "error",
28
+ };
29
+ return { level: levels[tracing[1]], message: tracing[2] };
30
+ }
31
+ for (const [pattern, level] of GATEWAY_PLAIN_LINES) {
32
+ if (pattern.test(plain)) {
33
+ return { level, message: plain };
34
+ }
35
+ }
36
+ return undefined;
37
+ }
7
38
  export function createRuntimeStdioHandler(options) {
8
39
  return function handleRuntimeStdio(stdout, stderr) {
9
40
  const { prefix, prefixColor } = options ?? {};
@@ -51,6 +82,7 @@ export function createRuntimeStdioHandler(options) {
51
82
  line = line.trim();
52
83
  if (!line)
53
84
  continue;
85
+ const gateway = classifyGatewayLine(line);
54
86
  if (classifiers.isBarf(line)) {
55
87
  logConsole("debug", line, prefix, prefixColor);
56
88
  }
@@ -69,6 +101,9 @@ export function createRuntimeStdioHandler(options) {
69
101
  logConsole("info", line, prefix, prefixColor);
70
102
  }
71
103
  }
104
+ else if (gateway) {
105
+ logConsole(gateway.level, gateway.message, prefix, prefixColor);
106
+ }
72
107
  else {
73
108
  logConsole("error", line, prefix, prefixColor);
74
109
  }
@@ -91,6 +126,7 @@ export function createRuntimeStdioHandler(options) {
91
126
  line = line.trim();
92
127
  if (!line)
93
128
  continue;
129
+ const gateway = classifyGatewayLine(line);
94
130
  if (classifiers.isBarf(line)) {
95
131
  if (classifiers.isAddressInUse(line)) {
96
132
  const address = line.match(/Address already in use; toString\(\) = (.+)\n/)?.[1];
@@ -122,6 +158,9 @@ export function createRuntimeStdioHandler(options) {
122
158
  line = line.substring("[ERROR]".length);
123
159
  logConsole("error", line, prefix, prefixColor);
124
160
  }
161
+ else if (gateway) {
162
+ logConsole(gateway.level, gateway.message, prefix, prefixColor);
163
+ }
125
164
  else {
126
165
  logConsole("error", line, prefix, prefixColor);
127
166
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worker-output.js","sourceRoot":"","sources":["../../src/common/worker-output.ts"],"names":[],"mappings":"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","sourcesContent":["/** biome-ignore-all lint/suspicious/noConsole: Output */\n\nimport { readFile } from \"node:fs/promises\";\nimport { Readable } from \"node:stream\";\nimport { ConsoleLogEntry, LogFormatter, LogLevel } from \"@zuplo/core/cli\";\nimport chalk, { ChalkInstance } from \"chalk\";\n\nconst logFormatter = new LogFormatter(async (path: string) => {\n return readFile(path, { encoding: \"utf8\" });\n});\n\nexport function createRuntimeStdioHandler(options?: {\n prefix?: string;\n prefixColor?: ChalkInstance;\n}) {\n return function handleRuntimeStdio(stdout: Readable, stderr: Readable) {\n const { prefix, prefixColor } = options ?? {};\n let stdoutAccumulator = \"\";\n let stderrAccumulator = \"\";\n\n const classifiers = {\n // Is this chunk a big chonky barf from workerd that we want to hijack to cleanup/ignore?\n isBarf(chunk: string) {\n const containsLlvmSymbolizerWarning = chunk.includes(\n \"Not symbolizing stack traces because $LLVM_SYMBOLIZER is not set\"\n );\n const containsRecursiveIsolateLockWarning = chunk.includes(\n \"took recursive isolate lock\"\n );\n // Matches stack traces from workerd\n // - on unix: groups of 9 hex digits separated by spaces\n // - on windows: groups of 12 hex digits, or a single digit 0, separated by spaces\n const containsHexStack = /stack:( (0|[a-f\\d]{4,})){3,}/.test(chunk);\n\n return (\n containsLlvmSymbolizerWarning ||\n containsRecursiveIsolateLockWarning ||\n containsHexStack\n );\n },\n // Is this chunk an Address In Use error?\n isAddressInUse(chunk: string) {\n return chunk.includes(\"Address already in use; toString() = \");\n },\n isWarning(chunk: string) {\n return /\\.c\\+\\+:\\d+: warning:/.test(chunk);\n },\n isCodeMovedWarning(chunk: string) {\n return /CODE_MOVED for unknown code block/.test(chunk);\n },\n isAccessViolation(chunk: string) {\n return chunk.includes(\"access violation;\");\n },\n isZenoLog(chunk: string) {\n return chunk.startsWith(\"[ZENO]:\");\n },\n };\n\n stdout.on(\"data\", (chunk: Buffer | string) => {\n const fullStreamOutput = `${stdoutAccumulator}${chunk}`;\n\n let currentLogsStr = \"\";\n const lastNewlineIdx = fullStreamOutput.lastIndexOf(\"\\n\");\n\n if (lastNewlineIdx > 0) {\n // Extract complete logs up to the last newline\n currentLogsStr = fullStreamOutput.slice(0, lastNewlineIdx);\n // Save the partial/incomplete log for next iteration\n stdoutAccumulator = fullStreamOutput.slice(lastNewlineIdx + 1);\n } else {\n // No complete log found, accumulate entire output\n stdoutAccumulator = fullStreamOutput;\n return;\n }\n\n const lines = currentLogsStr.split(\"\\n\");\n\n for (let line of lines) {\n line = line.trim();\n if (!line) continue;\n\n if (classifiers.isBarf(line)) {\n // this is a big chonky barf from workerd that we want to hijack to cleanup/ignore\n\n // CLEANABLE:\n // there are no known cases to cleanup yet\n // but, as they are identified, we will do that here\n\n // IGNORABLE:\n // anything else not handled above is considered ignorable\n // so send it to the debug logs which are discarded unless\n // the user explicitly sets a logLevel indicating they care\n logConsole(\"debug\", line, prefix, prefixColor);\n }\n\n // known case: warnings are not info, log them as such\n else if (classifiers.isWarning(line)) {\n logConsole(\"warn\", line, prefix, prefixColor);\n } else if (classifiers.isZenoLog(line)) {\n // Route to the specified logging level\n const levels = [\"debug\", \"info\", \"warn\", \"error\"];\n const level = levels.find((level) =>\n line.includes(`[${level.toUpperCase()}]`)\n );\n // Strip the prefixes for zeno and the zeno logging level\n line = line.substring(\"[ZENO]:\".length);\n line = line.substring(`[${level?.toUpperCase()}]`.length);\n if (level) {\n logConsole(level as LogLevel, line, prefix, prefixColor);\n } else {\n logConsole(\"info\", line, prefix, prefixColor);\n }\n }\n\n // anything not explicitly handled above should be logged as info (via stdout)\n else {\n logConsole(\"error\", line, prefix, prefixColor);\n }\n }\n });\n\n stderr.on(\"data\", (chunk: Buffer | string) => {\n const fullStreamOutput = `${stderrAccumulator}${chunk}`;\n\n let currentLogsStr = \"\";\n const lastNewlineIdx = fullStreamOutput.lastIndexOf(\"\\n\");\n\n if (lastNewlineIdx > 0) {\n // Extract complete logs up to the last newline\n currentLogsStr = fullStreamOutput.slice(0, lastNewlineIdx);\n // Save the partial/incomplete log for next iteration\n stderrAccumulator = fullStreamOutput.slice(lastNewlineIdx + 1);\n } else {\n // No complete log found, accumulate entire output\n stderrAccumulator = fullStreamOutput;\n return;\n }\n\n const lines = currentLogsStr.split(\"\\n\");\n\n for (let line of lines) {\n line = line.trim();\n if (!line) continue;\n\n if (classifiers.isBarf(line)) {\n // this is a big chonky barf from workerd that we want to hijack to cleanup/ignore\n\n // CLEANABLE:\n // known case to cleanup: Address in use errors\n if (classifiers.isAddressInUse(line)) {\n const address = line.match(\n /Address already in use; toString\\(\\) = (.+)\\n/\n )?.[1];\n\n logConsole(\n \"error\",\n `Address already in use (${address}). Please check that you are not already running a server on this address or specify a different port with --port.`,\n prefix,\n prefixColor\n );\n\n // Log the original error to the debug logs.\n logConsole(\"debug\", line, prefix, prefixColor);\n }\n // In the past we have seen Access Violation errors on Windows, which may be caused by an outdated\n // version of the Windows OS or the Microsoft Visual C++ Redistributable.\n // See https://github.com/cloudflare/workers-sdk/issues/6170#issuecomment-2245209918\n else if (classifiers.isAccessViolation(line)) {\n let error = \"There was an access violation in the runtime.\";\n if (process.platform === \"win32\") {\n error +=\n \"\\nOn Windows, this may be caused by an outdated Microsoft Visual C++ Redistributable library.\\n\" +\n \"Check that you have the latest version installed.\\n\" +\n \"See https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist.\";\n }\n logConsole(\"error\", error, prefix, prefixColor);\n\n // Log the original error to the debug logs.\n logConsole(\"debug\", line, prefix, prefixColor);\n }\n\n // IGNORABLE:\n // anything else not handled above is considered ignorable\n // so send it to the debug logs which are discarded unless\n // the user explicitly sets a logLevel indicating they care\n else {\n logConsole(\"debug\", line, prefix, prefixColor);\n }\n }\n\n // known case: warnings are not errors, log them as such\n else if (classifiers.isWarning(line)) {\n logConsole(\"warn\", line, prefix, prefixColor);\n }\n\n // known case: \"error: CODE_MOVED for unknown code block?\", warning for workerd devs, not application devs\n else if (classifiers.isCodeMovedWarning(line)) {\n // ignore entirely, don't even send it to the debug log file\n }\n\n // Handle Zeno error logs\n else if (classifiers.isZenoLog(line)) {\n // Strip the prefixes\n line = line.substring(\"[ZENO]:\".length);\n line = line.substring(\"[ERROR]\".length);\n logConsole(\"error\", line, prefix, prefixColor);\n }\n\n // anything not explicitly handled above should be logged as an error (via stderr)\n else {\n logConsole(\"error\", line, prefix, prefixColor);\n }\n }\n });\n };\n}\n\nfunction logConsole(\n level: LogLevel,\n data: string,\n prefix?: string,\n prefixColor?: ChalkInstance\n) {\n void logConsoleAsync(level, data, prefix, prefixColor);\n}\n\n/**\n * This is what is logged when the runtime calls console.log, etc.\n */\nasync function logConsoleAsync(\n level: LogLevel,\n data: string,\n prefix?: string,\n prefixColor?: ChalkInstance\n) {\n let outputPrefix = \"\";\n if (prefix && prefixColor) {\n const paddedName = prefix.padEnd(10);\n outputPrefix = prefixColor(paddedName) + chalk.gray(\" | \");\n }\n\n try {\n if (!data) {\n return;\n }\n\n // This shouldn't happen, but just in case\n if (typeof data !== \"string\") {\n console[level](outputPrefix + data);\n return;\n }\n\n let message = data?.trim();\n if (!message || message?.length === 0) {\n return;\n }\n\n // Probably a JSON object\n if (message.startsWith(`{`) && message.endsWith(`}`)) {\n let logEntry: ConsoleLogEntry;\n try {\n logEntry = JSON.parse(message);\n } catch {\n console[level](outputPrefix + data);\n return;\n }\n await Promise.all(\n logEntry.messages.map(async (msg) => {\n const line = await logFormatter.formatStructured(logEntry, msg);\n console[level](outputPrefix + line);\n })\n );\n } else {\n message = await logFormatter.formatMessage(message);\n\n const line = logFormatter.formatLine(level, message);\n console[level](outputPrefix + line);\n }\n } catch {\n const line = logFormatter.formatLine(level, data);\n\n console[level](outputPrefix + line);\n }\n}\n"]}
1
+ {"version":3,"file":"worker-output.js","sourceRoot":"","sources":["../../src/common/worker-output.ts"],"names":[],"mappings":"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","sourcesContent":["/** biome-ignore-all lint/suspicious/noConsole: Output */\n\nimport { readFile } from \"node:fs/promises\";\nimport { Readable } from \"node:stream\";\nimport { ConsoleLogEntry, LogFormatter, LogLevel } from \"@zuplo/core/cli\";\nimport chalk, { ChalkInstance } from \"chalk\";\n\nconst logFormatter = new LogFormatter(async (path: string) => {\n return readFile(path, { encoding: \"utf8\" });\n});\n\n// biome-ignore lint/suspicious/noControlCharactersInRegex: matches ANSI escapes\nconst ANSI_ESCAPE = /\\u001b\\[[0-9;]*m/g;\n\n/** `2026-10-11T01:42:43.470549Z INFO zuplo_gateway: listening addr=...` */\nconst GATEWAY_TRACING_LINE =\n /^\\d{4}-\\d{2}-\\d{2}T[\\d:.]+Z\\s+(TRACE|DEBUG|INFO|WARN|ERROR)\\s+[\\w:]+:\\s?(.*)$/;\n\n/** Diagnostics and lifecycle lines `zuplo-gateway dev --watch` prints. */\nconst GATEWAY_PLAIN_LINES: [RegExp, LogLevel][] = [\n [/^error: /, \"error\"],\n [/^warning: /, \"warn\"],\n [/^(note|hint): /, \"info\"],\n [/^rebuild failed; still serving the previous build$/, \"warn\"],\n [/^watching .+ for changes$/, \"info\"],\n [/^.+ changed; rebuilding$/, \"info\"],\n [/^rebuilt in \\d+ ms$/, \"info\"],\n];\n\n/**\n * The level and message of a line the Rust gateway (`zuplo-gateway`, the\n * opt-in managed-dedicated runtime) writes, or undefined for any other line.\n * The gateway logs through `tracing` (with its own timestamp, which is\n * dropped: the formatted line gets ours) and prints build diagnostics as\n * `error:` / `warning:` / `note:` / `hint:` lines. Without this every one of\n * them would be shown as an error.\n */\nexport function classifyGatewayLine(\n line: string\n): { level: LogLevel; message: string } | undefined {\n const plain = line.replace(ANSI_ESCAPE, \"\");\n const tracing = GATEWAY_TRACING_LINE.exec(plain);\n if (tracing) {\n const levels: Record<string, LogLevel> = {\n // biome-ignore-start lint/style/useNamingConvention: tracing level names\n TRACE: \"debug\",\n DEBUG: \"debug\",\n INFO: \"info\",\n WARN: \"warn\",\n ERROR: \"error\",\n // biome-ignore-end lint/style/useNamingConvention: tracing level names\n };\n return { level: levels[tracing[1]], message: tracing[2] };\n }\n for (const [pattern, level] of GATEWAY_PLAIN_LINES) {\n if (pattern.test(plain)) {\n return { level, message: plain };\n }\n }\n return undefined;\n}\n\nexport function createRuntimeStdioHandler(options?: {\n prefix?: string;\n prefixColor?: ChalkInstance;\n}) {\n return function handleRuntimeStdio(stdout: Readable, stderr: Readable) {\n const { prefix, prefixColor } = options ?? {};\n let stdoutAccumulator = \"\";\n let stderrAccumulator = \"\";\n\n const classifiers = {\n // Is this chunk a big chonky barf from workerd that we want to hijack to cleanup/ignore?\n isBarf(chunk: string) {\n const containsLlvmSymbolizerWarning = chunk.includes(\n \"Not symbolizing stack traces because $LLVM_SYMBOLIZER is not set\"\n );\n const containsRecursiveIsolateLockWarning = chunk.includes(\n \"took recursive isolate lock\"\n );\n // Matches stack traces from workerd\n // - on unix: groups of 9 hex digits separated by spaces\n // - on windows: groups of 12 hex digits, or a single digit 0, separated by spaces\n const containsHexStack = /stack:( (0|[a-f\\d]{4,})){3,}/.test(chunk);\n\n return (\n containsLlvmSymbolizerWarning ||\n containsRecursiveIsolateLockWarning ||\n containsHexStack\n );\n },\n // Is this chunk an Address In Use error?\n isAddressInUse(chunk: string) {\n return chunk.includes(\"Address already in use; toString() = \");\n },\n isWarning(chunk: string) {\n return /\\.c\\+\\+:\\d+: warning:/.test(chunk);\n },\n isCodeMovedWarning(chunk: string) {\n return /CODE_MOVED for unknown code block/.test(chunk);\n },\n isAccessViolation(chunk: string) {\n return chunk.includes(\"access violation;\");\n },\n isZenoLog(chunk: string) {\n return chunk.startsWith(\"[ZENO]:\");\n },\n };\n\n stdout.on(\"data\", (chunk: Buffer | string) => {\n const fullStreamOutput = `${stdoutAccumulator}${chunk}`;\n\n let currentLogsStr = \"\";\n const lastNewlineIdx = fullStreamOutput.lastIndexOf(\"\\n\");\n\n if (lastNewlineIdx > 0) {\n // Extract complete logs up to the last newline\n currentLogsStr = fullStreamOutput.slice(0, lastNewlineIdx);\n // Save the partial/incomplete log for next iteration\n stdoutAccumulator = fullStreamOutput.slice(lastNewlineIdx + 1);\n } else {\n // No complete log found, accumulate entire output\n stdoutAccumulator = fullStreamOutput;\n return;\n }\n\n const lines = currentLogsStr.split(\"\\n\");\n\n for (let line of lines) {\n line = line.trim();\n if (!line) continue;\n const gateway = classifyGatewayLine(line);\n\n if (classifiers.isBarf(line)) {\n // this is a big chonky barf from workerd that we want to hijack to cleanup/ignore\n\n // CLEANABLE:\n // there are no known cases to cleanup yet\n // but, as they are identified, we will do that here\n\n // IGNORABLE:\n // anything else not handled above is considered ignorable\n // so send it to the debug logs which are discarded unless\n // the user explicitly sets a logLevel indicating they care\n logConsole(\"debug\", line, prefix, prefixColor);\n }\n\n // known case: warnings are not info, log them as such\n else if (classifiers.isWarning(line)) {\n logConsole(\"warn\", line, prefix, prefixColor);\n } else if (classifiers.isZenoLog(line)) {\n // Route to the specified logging level\n const levels = [\"debug\", \"info\", \"warn\", \"error\"];\n const level = levels.find((level) =>\n line.includes(`[${level.toUpperCase()}]`)\n );\n // Strip the prefixes for zeno and the zeno logging level\n line = line.substring(\"[ZENO]:\".length);\n line = line.substring(`[${level?.toUpperCase()}]`.length);\n if (level) {\n logConsole(level as LogLevel, line, prefix, prefixColor);\n } else {\n logConsole(\"info\", line, prefix, prefixColor);\n }\n }\n\n // the Rust gateway's own log and diagnostic lines\n else if (gateway) {\n logConsole(gateway.level, gateway.message, prefix, prefixColor);\n }\n\n // anything not explicitly handled above should be logged as info (via stdout)\n else {\n logConsole(\"error\", line, prefix, prefixColor);\n }\n }\n });\n\n stderr.on(\"data\", (chunk: Buffer | string) => {\n const fullStreamOutput = `${stderrAccumulator}${chunk}`;\n\n let currentLogsStr = \"\";\n const lastNewlineIdx = fullStreamOutput.lastIndexOf(\"\\n\");\n\n if (lastNewlineIdx > 0) {\n // Extract complete logs up to the last newline\n currentLogsStr = fullStreamOutput.slice(0, lastNewlineIdx);\n // Save the partial/incomplete log for next iteration\n stderrAccumulator = fullStreamOutput.slice(lastNewlineIdx + 1);\n } else {\n // No complete log found, accumulate entire output\n stderrAccumulator = fullStreamOutput;\n return;\n }\n\n const lines = currentLogsStr.split(\"\\n\");\n\n for (let line of lines) {\n line = line.trim();\n if (!line) continue;\n const gateway = classifyGatewayLine(line);\n\n if (classifiers.isBarf(line)) {\n // this is a big chonky barf from workerd that we want to hijack to cleanup/ignore\n\n // CLEANABLE:\n // known case to cleanup: Address in use errors\n if (classifiers.isAddressInUse(line)) {\n const address = line.match(\n /Address already in use; toString\\(\\) = (.+)\\n/\n )?.[1];\n\n logConsole(\n \"error\",\n `Address already in use (${address}). Please check that you are not already running a server on this address or specify a different port with --port.`,\n prefix,\n prefixColor\n );\n\n // Log the original error to the debug logs.\n logConsole(\"debug\", line, prefix, prefixColor);\n }\n // In the past we have seen Access Violation errors on Windows, which may be caused by an outdated\n // version of the Windows OS or the Microsoft Visual C++ Redistributable.\n // See https://github.com/cloudflare/workers-sdk/issues/6170#issuecomment-2245209918\n else if (classifiers.isAccessViolation(line)) {\n let error = \"There was an access violation in the runtime.\";\n if (process.platform === \"win32\") {\n error +=\n \"\\nOn Windows, this may be caused by an outdated Microsoft Visual C++ Redistributable library.\\n\" +\n \"Check that you have the latest version installed.\\n\" +\n \"See https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist.\";\n }\n logConsole(\"error\", error, prefix, prefixColor);\n\n // Log the original error to the debug logs.\n logConsole(\"debug\", line, prefix, prefixColor);\n }\n\n // IGNORABLE:\n // anything else not handled above is considered ignorable\n // so send it to the debug logs which are discarded unless\n // the user explicitly sets a logLevel indicating they care\n else {\n logConsole(\"debug\", line, prefix, prefixColor);\n }\n }\n\n // known case: warnings are not errors, log them as such\n else if (classifiers.isWarning(line)) {\n logConsole(\"warn\", line, prefix, prefixColor);\n }\n\n // known case: \"error: CODE_MOVED for unknown code block?\", warning for workerd devs, not application devs\n else if (classifiers.isCodeMovedWarning(line)) {\n // ignore entirely, don't even send it to the debug log file\n }\n\n // Handle Zeno error logs\n else if (classifiers.isZenoLog(line)) {\n // Strip the prefixes\n line = line.substring(\"[ZENO]:\".length);\n line = line.substring(\"[ERROR]\".length);\n logConsole(\"error\", line, prefix, prefixColor);\n }\n\n // the Rust gateway's own log and diagnostic lines\n else if (gateway) {\n logConsole(gateway.level, gateway.message, prefix, prefixColor);\n }\n\n // anything not explicitly handled above should be logged as an error (via stderr)\n else {\n logConsole(\"error\", line, prefix, prefixColor);\n }\n }\n });\n };\n}\n\nfunction logConsole(\n level: LogLevel,\n data: string,\n prefix?: string,\n prefixColor?: ChalkInstance\n) {\n void logConsoleAsync(level, data, prefix, prefixColor);\n}\n\n/**\n * This is what is logged when the runtime calls console.log, etc.\n */\nasync function logConsoleAsync(\n level: LogLevel,\n data: string,\n prefix?: string,\n prefixColor?: ChalkInstance\n) {\n let outputPrefix = \"\";\n if (prefix && prefixColor) {\n const paddedName = prefix.padEnd(10);\n outputPrefix = prefixColor(paddedName) + chalk.gray(\" | \");\n }\n\n try {\n if (!data) {\n return;\n }\n\n // This shouldn't happen, but just in case\n if (typeof data !== \"string\") {\n console[level](outputPrefix + data);\n return;\n }\n\n let message = data?.trim();\n if (!message || message?.length === 0) {\n return;\n }\n\n // Probably a JSON object\n if (message.startsWith(`{`) && message.endsWith(`}`)) {\n let logEntry: ConsoleLogEntry;\n try {\n logEntry = JSON.parse(message);\n } catch {\n console[level](outputPrefix + data);\n return;\n }\n await Promise.all(\n logEntry.messages.map(async (msg) => {\n const line = await logFormatter.formatStructured(logEntry, msg);\n console[level](outputPrefix + line);\n })\n );\n } else {\n message = await logFormatter.formatMessage(message);\n\n const line = logFormatter.formatLine(level, message);\n console[level](outputPrefix + line);\n }\n } catch {\n const line = logFormatter.formatLine(level, data);\n\n console[level](outputPrefix + line);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"root":["../src/cli.ts","../src/internal.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/outdated.test.ts","../src/__tests__/populate.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/confirm-linked-config.integration.test.ts","../src/__tests__/integration/confirm-production-deploy.integration.test.ts","../src/__tests__/integration/custom-domain.integration.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/get-project-param.integration.test.ts","../src/__tests__/integration/info.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/linked-config-cascade.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/source-upgrade.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/__tests__/integration/whoami.integration.test.ts","../src/bucket/models.ts","../src/bucket/list/handler.ts","../src/build/handler.ts","../src/ca-certificate/models.ts","../src/ca-certificate/validation.test.ts","../src/ca-certificate/validation.ts","../src/ca-certificate/create/handler.ts","../src/ca-certificate/delete/handler.ts","../src/ca-certificate/describe/handler.ts","../src/ca-certificate/list/handler.ts","../src/ca-certificate/update/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/docs.ts","../src/cmds/editor.ts","../src/cmds/info.ts","../src/cmds/init.ts","../src/cmds/link.ts","../src/cmds/lint.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/logout.ts","../src/cmds/test.ts","../src/cmds/whoami.ts","../src/cmds/bucket/index.ts","../src/cmds/bucket/list.ts","../src/cmds/ca-certificate/create.ts","../src/cmds/ca-certificate/delete.ts","../src/cmds/ca-certificate/describe.ts","../src/cmds/ca-certificate/index.ts","../src/cmds/ca-certificate/list.ts","../src/cmds/ca-certificate/update.ts","../src/cmds/custom-domain/create.ts","../src/cmds/custom-domain/delete.ts","../src/cmds/custom-domain/index.ts","../src/cmds/custom-domain/list.ts","../src/cmds/custom-domain/update.ts","../src/cmds/mtls-certificates/create.ts","../src/cmds/mtls-certificates/delete.ts","../src/cmds/mtls-certificates/describe.ts","../src/cmds/mtls-certificates/disable.ts","../src/cmds/mtls-certificates/index.ts","../src/cmds/mtls-certificates/list.ts","../src/cmds/mtls-certificates/update.ts","../src/cmds/open-api/convert.ts","../src/cmds/open-api/index.ts","../src/cmds/open-api/merge.ts","../src/cmds/open-api/overlay.ts","../src/cmds/project/create.ts","../src/cmds/project/index.ts","../src/cmds/project/info.ts","../src/cmds/project/list.ts","../src/cmds/proxies/create.ts","../src/cmds/proxies/delete.ts","../src/cmds/proxies/describe.ts","../src/cmds/proxies/index.ts","../src/cmds/proxies/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/migrate.ts","../src/cmds/source/upgrade.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/cli-dispatcher.test.ts","../src/common/cli-dispatcher.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/populate.ts","../src/common/read-linked-config.test.ts","../src/common/read-linked-config.ts","../src/common/runner.ts","../src/common/settings.ts","../src/common/terminal.test.ts","../src/common/terminal.ts","../src/common/worker-output.ts","../src/common/analytics/cli-invocation.test.ts","../src/common/analytics/cli-invocation.ts","../src/common/analytics/lib.ts","../src/common/analytics/package-manager.test.ts","../src/common/analytics/package-manager.ts","../src/common/api/client.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/check-pnpm-lifecycle.test.ts","../src/common/middleware/check-pnpm-lifecycle.ts","../src/common/middleware/confirm-linked-config.ts","../src/common/middleware/confirm-production-deploy.ts","../src/common/middleware/get-account-param.ts","../src/common/middleware/get-environment-param.test.ts","../src/common/middleware/get-environment-param.ts","../src/common/middleware/get-project-param.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/middleware/validate-fleet.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/branch.ts","../src/common/utils/build-environment-prompt-choices.test.ts","../src/common/utils/build-environment-prompt-choices.ts","../src/common/utils/format-environment-type.test.ts","../src/common/utils/format-environment-type.ts","../src/common/utils/pnpm-lifecycle.test.ts","../src/common/utils/pnpm-lifecycle.ts","../src/common/utils/ports.ts","../src/common/utils/prefixed-output.ts","../src/common/utils/pretty-print-environment-prompt.test.ts","../src/common/utils/pretty-print-environment-prompt.ts","../src/common/utils/sort-environments-for-prompt.test.ts","../src/common/utils/sort-environments-for-prompt.ts","../src/common/utils/stringify-config.test.ts","../src/common/utils/stringify-config.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/argument-validators.spec.ts","../src/common/validators/argument-validators.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/custom-domain/models.ts","../src/custom-domain/create/handler.ts","../src/custom-domain/delete/handler.ts","../src/custom-domain/list/handler.ts","../src/custom-domain/update/handler.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.local-registry.test.ts","../src/deploy/archive.test.ts","../src/deploy/archive.ts","../src/deploy/classify-build-probe.test.ts","../src/deploy/classify-build-probe.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.test.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/dev/zuplo-local-gitignore.test.ts","../src/dev/zuplo-local-gitignore.ts","../src/docs/handler.ts","../src/editor/handler.ts","../src/editor/e2e/editor.spec.ts","../src/init/handler.ts","../src/link/handler.ts","../src/link/project-type.test.ts","../src/link/project-type.ts","../src/lint/handler.ts","../src/lint/resolve-binary.test.ts","../src/lint/resolve-binary.ts","../src/list/handler.ts","../src/login/login.ts","../src/login/logout.ts","../src/login/tokens.ts","../src/mtls-certificates/models.ts","../src/mtls-certificates/create/handler.ts","../src/mtls-certificates/delete/handler.ts","../src/mtls-certificates/describe/handler.ts","../src/mtls-certificates/disable/handler.ts","../src/mtls-certificates/list/handler.ts","../src/mtls-certificates/update/handler.ts","../src/open-api/convert/handler.spec.ts","../src/open-api/convert/handler.ts","../src/open-api/merge/handler.spec.ts","../src/open-api/merge/handler.ts","../src/open-api/overlay/handler.spec.ts","../src/open-api/overlay/handler.ts","../src/project/create/handler.ts","../src/project/info/handler.ts","../src/project/list/handler.ts","../src/proxies/models.ts","../src/proxies/create/handler.ts","../src/proxies/delete/handler.ts","../src/proxies/describe/handler.ts","../src/proxies/update/handler.ts","../src/source/ai-gateway/files.test.ts","../src/source/ai-gateway/files.ts","../src/source/ai-gateway/handler.test.ts","../src/source/ai-gateway/handler.ts","../src/source/ai-gateway/package.test.ts","../src/source/ai-gateway/planner.test.ts","../src/source/ai-gateway/planner.ts","../src/source/ai-gateway/release.test.ts","../src/source/ai-gateway/release.ts","../src/source/migrate/dev-portal/handler.ts","../src/source/migrate/dev-portal/types.ts","../src/source/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.test.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts","../src/whoami/handler.ts"],"version":"5.8.3"}
1
+ {"root":["../src/cli.ts","../src/internal.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/outdated.test.ts","../src/__tests__/populate.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/confirm-linked-config.integration.test.ts","../src/__tests__/integration/confirm-production-deploy.integration.test.ts","../src/__tests__/integration/custom-domain.integration.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/get-project-param.integration.test.ts","../src/__tests__/integration/info.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/linked-config-cascade.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/source-upgrade.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/__tests__/integration/whoami.integration.test.ts","../src/bucket/models.ts","../src/bucket/list/handler.ts","../src/build/handler.ts","../src/ca-certificate/models.ts","../src/ca-certificate/validation.test.ts","../src/ca-certificate/validation.ts","../src/ca-certificate/create/handler.ts","../src/ca-certificate/delete/handler.ts","../src/ca-certificate/describe/handler.ts","../src/ca-certificate/list/handler.ts","../src/ca-certificate/update/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/docs.ts","../src/cmds/editor.ts","../src/cmds/info.ts","../src/cmds/init.ts","../src/cmds/link.ts","../src/cmds/lint.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/logout.ts","../src/cmds/test.ts","../src/cmds/whoami.ts","../src/cmds/bucket/index.ts","../src/cmds/bucket/list.ts","../src/cmds/ca-certificate/create.ts","../src/cmds/ca-certificate/delete.ts","../src/cmds/ca-certificate/describe.ts","../src/cmds/ca-certificate/index.ts","../src/cmds/ca-certificate/list.ts","../src/cmds/ca-certificate/update.ts","../src/cmds/custom-domain/create.ts","../src/cmds/custom-domain/delete.ts","../src/cmds/custom-domain/index.ts","../src/cmds/custom-domain/list.ts","../src/cmds/custom-domain/update.ts","../src/cmds/mtls-certificates/create.ts","../src/cmds/mtls-certificates/delete.ts","../src/cmds/mtls-certificates/describe.ts","../src/cmds/mtls-certificates/disable.ts","../src/cmds/mtls-certificates/index.ts","../src/cmds/mtls-certificates/list.ts","../src/cmds/mtls-certificates/update.ts","../src/cmds/open-api/convert.ts","../src/cmds/open-api/index.ts","../src/cmds/open-api/merge.ts","../src/cmds/open-api/overlay.ts","../src/cmds/project/create.ts","../src/cmds/project/index.ts","../src/cmds/project/info.ts","../src/cmds/project/list.ts","../src/cmds/proxies/create.ts","../src/cmds/proxies/delete.ts","../src/cmds/proxies/describe.ts","../src/cmds/proxies/index.ts","../src/cmds/proxies/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/migrate.ts","../src/cmds/source/upgrade.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/cli-dispatcher.test.ts","../src/common/cli-dispatcher.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/populate.ts","../src/common/read-linked-config.test.ts","../src/common/read-linked-config.ts","../src/common/runner.ts","../src/common/settings.ts","../src/common/terminal.test.ts","../src/common/terminal.ts","../src/common/worker-output.test.ts","../src/common/worker-output.ts","../src/common/analytics/cli-invocation.test.ts","../src/common/analytics/cli-invocation.ts","../src/common/analytics/lib.ts","../src/common/analytics/package-manager.test.ts","../src/common/analytics/package-manager.ts","../src/common/api/client.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/check-pnpm-lifecycle.test.ts","../src/common/middleware/check-pnpm-lifecycle.ts","../src/common/middleware/confirm-linked-config.ts","../src/common/middleware/confirm-production-deploy.ts","../src/common/middleware/get-account-param.ts","../src/common/middleware/get-environment-param.test.ts","../src/common/middleware/get-environment-param.ts","../src/common/middleware/get-project-param.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/middleware/validate-fleet.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/branch.ts","../src/common/utils/build-environment-prompt-choices.test.ts","../src/common/utils/build-environment-prompt-choices.ts","../src/common/utils/format-environment-type.test.ts","../src/common/utils/format-environment-type.ts","../src/common/utils/pnpm-lifecycle.test.ts","../src/common/utils/pnpm-lifecycle.ts","../src/common/utils/ports.ts","../src/common/utils/prefixed-output.ts","../src/common/utils/pretty-print-environment-prompt.test.ts","../src/common/utils/pretty-print-environment-prompt.ts","../src/common/utils/sort-environments-for-prompt.test.ts","../src/common/utils/sort-environments-for-prompt.ts","../src/common/utils/stringify-config.test.ts","../src/common/utils/stringify-config.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/argument-validators.spec.ts","../src/common/validators/argument-validators.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/custom-domain/models.ts","../src/custom-domain/create/handler.ts","../src/custom-domain/delete/handler.ts","../src/custom-domain/list/handler.ts","../src/custom-domain/update/handler.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.local-registry.test.ts","../src/deploy/archive.test.ts","../src/deploy/archive.ts","../src/deploy/classify-build-probe.test.ts","../src/deploy/classify-build-probe.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.test.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/dev/zuplo-local-gitignore.test.ts","../src/dev/zuplo-local-gitignore.ts","../src/docs/handler.ts","../src/editor/handler.ts","../src/editor/e2e/editor.spec.ts","../src/init/handler.ts","../src/link/handler.ts","../src/link/project-type.test.ts","../src/link/project-type.ts","../src/lint/handler.ts","../src/lint/resolve-binary.test.ts","../src/lint/resolve-binary.ts","../src/list/handler.ts","../src/login/login.ts","../src/login/logout.ts","../src/login/tokens.ts","../src/mtls-certificates/models.ts","../src/mtls-certificates/create/handler.ts","../src/mtls-certificates/delete/handler.ts","../src/mtls-certificates/describe/handler.ts","../src/mtls-certificates/disable/handler.ts","../src/mtls-certificates/list/handler.ts","../src/mtls-certificates/update/handler.ts","../src/open-api/convert/handler.spec.ts","../src/open-api/convert/handler.ts","../src/open-api/merge/handler.spec.ts","../src/open-api/merge/handler.ts","../src/open-api/overlay/handler.spec.ts","../src/open-api/overlay/handler.ts","../src/project/create/handler.ts","../src/project/info/handler.ts","../src/project/list/handler.ts","../src/proxies/models.ts","../src/proxies/create/handler.ts","../src/proxies/delete/handler.ts","../src/proxies/describe/handler.ts","../src/proxies/update/handler.ts","../src/source/ai-gateway/files.test.ts","../src/source/ai-gateway/files.ts","../src/source/ai-gateway/handler.test.ts","../src/source/ai-gateway/handler.ts","../src/source/ai-gateway/package.test.ts","../src/source/ai-gateway/planner.test.ts","../src/source/ai-gateway/planner.ts","../src/source/ai-gateway/release.test.ts","../src/source/ai-gateway/release.ts","../src/source/migrate/dev-portal/handler.ts","../src/source/migrate/dev-portal/types.ts","../src/source/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.test.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts","../src/whoami/handler.ts"],"version":"5.8.3"}
@@ -224,6 +224,8 @@ app.use('/static/*', serveStatic({ root: './static' }))
224
224
 
225
225
  Notice that `root` here is not relative to `src/index.ts`, rather to `my-hono-project`.
226
226
 
227
+ Only `GET` and `HEAD` requests are served. Requests with other methods are passed to the next middleware.
228
+
227
229
  ### Options
228
230
 
229
231
  #### `allowPercentInPath`
@@ -846,7 +846,7 @@ const makeCloseHandler = (req, incoming, outgoing, needsBodyCleanup) => () => {
846
846
  if (incoming.errored) {
847
847
  recordBodyBufferedBeforeDisconnect(incoming);
848
848
  req[abortRequest](incoming.errored.toString());
849
- } else if (!outgoing.writableFinished) {
849
+ } else if (!outgoing.writableFinished || incoming instanceof node_http2.Http2ServerRequest && incoming.aborted) {
850
850
  recordBodyBufferedBeforeDisconnect(incoming);
851
851
  req[abortRequest]("Client connection prematurely closed.");
852
852
  }
@@ -845,7 +845,7 @@ const makeCloseHandler = (req, incoming, outgoing, needsBodyCleanup) => () => {
845
845
  if (incoming.errored) {
846
846
  recordBodyBufferedBeforeDisconnect(incoming);
847
847
  req[abortRequest](incoming.errored.toString());
848
- } else if (!outgoing.writableFinished) {
848
+ } else if (!outgoing.writableFinished || incoming instanceof Http2ServerRequest && incoming.aborted) {
849
849
  recordBodyBufferedBeforeDisconnect(incoming);
850
850
  req[abortRequest]("Client connection prematurely closed.");
851
851
  }
@@ -74,6 +74,7 @@ const serveStatic = (options = { root: "" }) => {
74
74
  if (root !== "" && !(0, node_fs.existsSync)(root)) console.error(`serveStatic: root path '${root}' is not found, are you sure it's correct?`);
75
75
  return async (c, next) => {
76
76
  if (c.finalized) return next();
77
+ if (c.req.method !== "GET" && c.req.method !== "HEAD") return next();
77
78
  let filename;
78
79
  if (optionPath) filename = optionPath;
79
80
  else try {
@@ -115,7 +116,7 @@ const serveStatic = (options = { root: "" }) => {
115
116
  const size = stats.size;
116
117
  const range = c.req.header("range") || "";
117
118
  c.header("Last-Modified", stats.mtime.toUTCString());
118
- if (c.req.method == "HEAD" || c.req.method == "OPTIONS") {
119
+ if (c.req.method === "HEAD") {
119
120
  c.header("Content-Length", size.toString());
120
121
  c.status(200);
121
122
  result = c.body(null);
@@ -73,6 +73,7 @@ const serveStatic = (options = { root: "" }) => {
73
73
  if (root !== "" && !existsSync(root)) console.error(`serveStatic: root path '${root}' is not found, are you sure it's correct?`);
74
74
  return async (c, next) => {
75
75
  if (c.finalized) return next();
76
+ if (c.req.method !== "GET" && c.req.method !== "HEAD") return next();
76
77
  let filename;
77
78
  if (optionPath) filename = optionPath;
78
79
  else try {
@@ -114,7 +115,7 @@ const serveStatic = (options = { root: "" }) => {
114
115
  const size = stats.size;
115
116
  const range = c.req.header("range") || "";
116
117
  c.header("Last-Modified", stats.mtime.toUTCString());
117
- if (c.req.method == "HEAD" || c.req.method == "OPTIONS") {
118
+ if (c.req.method === "HEAD") {
118
119
  c.header("Content-Length", size.toString());
119
120
  c.status(200);
120
121
  result = c.body(null);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hono/node-server",
3
- "version": "2.1.4",
3
+ "version": "2.1.5",
4
4
  "description": "Node.js Adapter for Hono",
5
5
  "main": "dist/index.mjs",
6
6
  "type": "module",
@@ -14,6 +14,10 @@ import type { MetricsHost, ResolvedPostHogMetricsConfig } from './types';
14
14
  * Deliberately unlike logs, no per-user context (distinct ID, session ID) is
15
15
  * attached: every attribute value creates a new series, and per-user series
16
16
  * are the canonical metrics-cardinality explosion.
17
+ *
18
+ * A sample recorded inside a sampled span stamps its series with an exemplar
19
+ * (trace ID, span ID, value). One per series per window, last sample wins, so a
20
+ * metric point links to one representative trace at no cardinality cost.
17
21
  */
18
22
  export declare class PostHogMetrics {
19
23
  private readonly _instance;
@@ -46,6 +50,11 @@ export declare class PostHogMetrics {
46
50
  /** Clears the flush timer, drops the current window, and invalidates in-flight flushes. */
47
51
  reset(): void;
48
52
  private _capture;
53
+ /**
54
+ * The sampled span a sample is recorded in. An unsampled span is never
55
+ * exported, so an exemplar pointing at it would link to a missing trace.
56
+ */
57
+ private _activeTraceContext;
49
58
  /**
50
59
  * Cardinality gate for adding a series to the live window — warns once per
51
60
  * window when the cap is hit. Applied on capture and on merge-back alike.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAMpB,kBAAkB,EAEnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AActC,OAAO,KAAK,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AA2BxE;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAc;IA0BvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IA3B1B,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAI3B;IAGD,OAAO,CAAC,aAAa,CAA6B;IAElD,OAAO,CAAC,gBAAgB,CAAQ;IAIhC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,oBAAoB,CAAoB;IAChD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,yBAAyB,CAAI;IACrC,OAAO,CAAC,YAAY,CAAY;IAIhC,OAAO,CAAC,WAAW,CAAI;IAEvB,YACmB,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,4BAA4B,EACrC,OAAO,EAAE,MAAM,EAC9B;IAEJ,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAE3E;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAEvE;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAE3E;IAED,iFAAiF;IACjF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAerB;IAED;;;;;;OAMG;IACH,WAAW,IAAI,kBAAkB,GAAG,IAAI,CAUvC;IAED,2FAA2F;IAC3F,KAAK,IAAI,IAAI,CAWZ;IAED,OAAO,CAAC,QAAQ;IAsEhB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,KAAK;IA6Bb,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,eAAe;YAYT,QAAQ;IAyDtB,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAwDrB,oFAAoF;IACpF,OAAO,CAAC,gBAAgB;CAqCzB;AAED,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAOpB,kBAAkB,EAEnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAetC,OAAO,KAAK,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AAoCxE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,cAAc;IA0BvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IA3B1B,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAI3B;IAGD,OAAO,CAAC,aAAa,CAA6B;IAElD,OAAO,CAAC,gBAAgB,CAAQ;IAIhC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,oBAAoB,CAAoB;IAChD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,yBAAyB,CAAI;IACrC,OAAO,CAAC,YAAY,CAAY;IAIhC,OAAO,CAAC,WAAW,CAAI;IAEvB,YACmB,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,4BAA4B,EACrC,OAAO,EAAE,MAAM,EAC9B;IAEJ,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAE3E;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAEvE;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAE3E;IAED,iFAAiF;IACjF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAerB;IAED;;;;;;OAMG;IACH,WAAW,IAAI,kBAAkB,GAAG,IAAI,CAUvC;IAED,2FAA2F;IAC3F,KAAK,IAAI,IAAI,CAWZ;IAED,OAAO,CAAC,QAAQ;IA0EhB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,KAAK;IA6Bb,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,eAAe;YAYT,QAAQ;IAyDtB,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA4DrB,oFAAoF;IACpF,OAAO,CAAC,gBAAgB;CAuCzB;AAqBD,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA"}
@@ -39,6 +39,7 @@ const flush_timer_js_namespaceObject = require("../utils/flush-timer.js");
39
39
  const retry_after_js_namespaceObject = require("../utils/retry-after.js");
40
40
  const backoff_js_namespaceObject = require("../utils/backoff.js");
41
41
  const otlp_any_value_js_namespaceObject = require("../utils/otlp-any-value.js");
42
+ const traceparent_js_namespaceObject = require("../traces/traceparent.js");
42
43
  const external_metrics_utils_js_namespaceObject = require("./metrics-utils.js");
43
44
  const external_config_js_namespaceObject = require("./config.js");
44
45
  const OTLP_TEMPORALITY_DELTA = 1;
@@ -157,8 +158,23 @@ class PostHogMetrics {
157
158
  this._logger.warn(`Metric name '${filtered.name}' is already used as a ${seenType}; recording it as a ${filtered.type} too will blend both series in charts. Use a distinct name.`);
158
159
  }
159
160
  this._fold(state, filtered.value);
161
+ const traceContext = this._activeTraceContext();
162
+ if (traceContext) state.exemplar = {
163
+ ...traceContext,
164
+ value: filtered.value,
165
+ timeMs: Date.now()
166
+ };
160
167
  this._armFlushTimer();
161
168
  }
169
+ _activeTraceContext() {
170
+ try {
171
+ const parsed = (0, traceparent_js_namespaceObject.parseTraceparent)(this._instance.getActiveSpan?.()?.traceparent());
172
+ if (parsed && parsed.flags === traceparent_js_namespaceObject.TRACE_FLAGS_SAMPLED) return {
173
+ traceId: parsed.traceId,
174
+ spanId: parsed.spanId
175
+ };
176
+ } catch {}
177
+ }
162
178
  _admitNewSeries() {
163
179
  if (this._series.size < this._config.maxSeriesPerFlush) return true;
164
180
  if (!this._seriesCapWarned) {
@@ -288,19 +304,22 @@ class PostHogMetrics {
288
304
  }
289
305
  const attributes = (0, otlp_any_value_js_namespaceObject.toOtlpKeyValueList)(state.attributes ?? {}, this._logger);
290
306
  const startNano = (0, external_metrics_utils_js_namespaceObject.msToUnixNano)(state.windowStartMs);
307
+ const exemplars = toOtlpExemplars(state.exemplar);
291
308
  if ('count' === state.type) {
292
309
  const dp = {
293
310
  attributes,
294
311
  startTimeUnixNano: startNano,
295
312
  timeUnixNano: nowNano,
296
- asDouble: state.total ?? 0
313
+ asDouble: state.total ?? 0,
314
+ ...exemplars
297
315
  };
298
316
  metric.sum.dataPoints.push(dp);
299
317
  } else if ('gauge' === state.type) {
300
318
  const dp = {
301
319
  attributes,
302
320
  timeUnixNano: nowNano,
303
- asDouble: state.last ?? 0
321
+ asDouble: state.last ?? 0,
322
+ ...exemplars
304
323
  };
305
324
  metric.gauge.dataPoints.push(dp);
306
325
  } else if (state.hist) {
@@ -313,7 +332,8 @@ class PostHogMetrics {
313
332
  min: state.hist.min,
314
333
  max: state.hist.max,
315
334
  bucketCounts: state.hist.bucketCounts,
316
- explicitBounds: external_metrics_utils_js_namespaceObject.DEFAULT_HISTOGRAM_BOUNDS
335
+ explicitBounds: external_metrics_utils_js_namespaceObject.DEFAULT_HISTOGRAM_BOUNDS,
336
+ ...exemplars
317
337
  };
318
338
  metric.histogram.dataPoints.push(dp);
319
339
  }
@@ -328,6 +348,7 @@ class PostHogMetrics {
328
348
  continue;
329
349
  }
330
350
  current.windowStartMs = Math.min(current.windowStartMs, old.windowStartMs);
351
+ current.exemplar = current.exemplar ?? old.exemplar;
331
352
  switch(current.type){
332
353
  case 'count':
333
354
  current.total = (current.total ?? 0) + (old.total ?? 0);
@@ -347,6 +368,20 @@ class PostHogMetrics {
347
368
  }
348
369
  }
349
370
  }
371
+ function toOtlpExemplars(exemplar) {
372
+ if (!exemplar) return {};
373
+ return {
374
+ exemplars: [
375
+ {
376
+ filteredAttributes: [],
377
+ timeUnixNano: (0, external_metrics_utils_js_namespaceObject.msToUnixNano)(exemplar.timeMs),
378
+ asDouble: exemplar.value,
379
+ traceId: exemplar.traceId,
380
+ spanId: exemplar.spanId
381
+ }
382
+ ]
383
+ };
384
+ }
350
385
  exports.DEFAULT_HISTOGRAM_BOUNDS = __webpack_exports__.DEFAULT_HISTOGRAM_BOUNDS;
351
386
  exports.PostHogMetrics = __webpack_exports__.PostHogMetrics;
352
387
  exports.buildMetricsResourceAttributes = __webpack_exports__.buildMetricsResourceAttributes;
@@ -3,6 +3,7 @@ import { FlushTimer } from "../utils/flush-timer.mjs";
3
3
  import { RetryAfterWindow } from "../utils/retry-after.mjs";
4
4
  import { MAX_FLUSH_BACKOFF_MS, NO_JITTER, backoffDelayMs, drawJitter } from "../utils/backoff.mjs";
5
5
  import { toOtlpKeyValueList } from "../utils/otlp-any-value.mjs";
6
+ import { TRACE_FLAGS_SAMPLED, parseTraceparent } from "../traces/traceparent.mjs";
6
7
  import { DEFAULT_HISTOGRAM_BOUNDS, bucketIndexFor, buildMetricsResourceAttributes, buildOtlpMetricsPayload, msToUnixNano, seriesKey } from "./metrics-utils.mjs";
7
8
  const OTLP_TEMPORALITY_DELTA = 1;
8
9
  class PostHogMetrics {
@@ -120,8 +121,23 @@ class PostHogMetrics {
120
121
  this._logger.warn(`Metric name '${filtered.name}' is already used as a ${seenType}; recording it as a ${filtered.type} too will blend both series in charts. Use a distinct name.`);
121
122
  }
122
123
  this._fold(state, filtered.value);
124
+ const traceContext = this._activeTraceContext();
125
+ if (traceContext) state.exemplar = {
126
+ ...traceContext,
127
+ value: filtered.value,
128
+ timeMs: Date.now()
129
+ };
123
130
  this._armFlushTimer();
124
131
  }
132
+ _activeTraceContext() {
133
+ try {
134
+ const parsed = parseTraceparent(this._instance.getActiveSpan?.()?.traceparent());
135
+ if (parsed && parsed.flags === TRACE_FLAGS_SAMPLED) return {
136
+ traceId: parsed.traceId,
137
+ spanId: parsed.spanId
138
+ };
139
+ } catch {}
140
+ }
125
141
  _admitNewSeries() {
126
142
  if (this._series.size < this._config.maxSeriesPerFlush) return true;
127
143
  if (!this._seriesCapWarned) {
@@ -251,19 +267,22 @@ class PostHogMetrics {
251
267
  }
252
268
  const attributes = toOtlpKeyValueList(state.attributes ?? {}, this._logger);
253
269
  const startNano = msToUnixNano(state.windowStartMs);
270
+ const exemplars = toOtlpExemplars(state.exemplar);
254
271
  if ('count' === state.type) {
255
272
  const dp = {
256
273
  attributes,
257
274
  startTimeUnixNano: startNano,
258
275
  timeUnixNano: nowNano,
259
- asDouble: state.total ?? 0
276
+ asDouble: state.total ?? 0,
277
+ ...exemplars
260
278
  };
261
279
  metric.sum.dataPoints.push(dp);
262
280
  } else if ('gauge' === state.type) {
263
281
  const dp = {
264
282
  attributes,
265
283
  timeUnixNano: nowNano,
266
- asDouble: state.last ?? 0
284
+ asDouble: state.last ?? 0,
285
+ ...exemplars
267
286
  };
268
287
  metric.gauge.dataPoints.push(dp);
269
288
  } else if (state.hist) {
@@ -276,7 +295,8 @@ class PostHogMetrics {
276
295
  min: state.hist.min,
277
296
  max: state.hist.max,
278
297
  bucketCounts: state.hist.bucketCounts,
279
- explicitBounds: DEFAULT_HISTOGRAM_BOUNDS
298
+ explicitBounds: DEFAULT_HISTOGRAM_BOUNDS,
299
+ ...exemplars
280
300
  };
281
301
  metric.histogram.dataPoints.push(dp);
282
302
  }
@@ -291,6 +311,7 @@ class PostHogMetrics {
291
311
  continue;
292
312
  }
293
313
  current.windowStartMs = Math.min(current.windowStartMs, old.windowStartMs);
314
+ current.exemplar = current.exemplar ?? old.exemplar;
294
315
  switch(current.type){
295
316
  case 'count':
296
317
  current.total = (current.total ?? 0) + (old.total ?? 0);
@@ -310,5 +331,19 @@ class PostHogMetrics {
310
331
  }
311
332
  }
312
333
  }
334
+ function toOtlpExemplars(exemplar) {
335
+ if (!exemplar) return {};
336
+ return {
337
+ exemplars: [
338
+ {
339
+ filteredAttributes: [],
340
+ timeUnixNano: msToUnixNano(exemplar.timeMs),
341
+ asDouble: exemplar.value,
342
+ traceId: exemplar.traceId,
343
+ spanId: exemplar.spanId
344
+ }
345
+ ]
346
+ };
347
+ }
313
348
  export { resolveMetricsConfig } from "./config.mjs";
314
349
  export { DEFAULT_HISTOGRAM_BOUNDS, PostHogMetrics, buildMetricsResourceAttributes, buildOtlpMetricsPayload };
@@ -1,5 +1,5 @@
1
- export type { MetricAttributeValue, MetricAttributes, MetricType, MetricsConfig, CaptureMetricOptions, MetricSample, BeforeSendMetricFn, Metrics, OtlpNumberDataPoint, OtlpHistogramDataPoint, OtlpMetric, OtlpMetricsPayload, } from '@posthog/types';
2
- import type { BeforeSendMetricFn, MetricAttributeValue, OtlpMetricsPayload } from '@posthog/types';
1
+ export type { MetricAttributeValue, MetricAttributes, MetricType, MetricsConfig, CaptureMetricOptions, MetricSample, BeforeSendMetricFn, Metrics, OtlpNumberDataPoint, OtlpHistogramDataPoint, OtlpMetric, OtlpMetricsPayload, OtlpExemplar, } from '@posthog/types';
2
+ import type { BeforeSendMetricFn, MetricAttributeValue, OtlpMetricsPayload, Span } from '@posthog/types';
3
3
  /** Same tagged outcome shape as `SendLogsBatchOutcome` — one policy for both signals. */
4
4
  export type SendMetricsBatchOutcome = {
5
5
  kind: 'ok';
@@ -30,6 +30,11 @@ export interface MetricsHost {
30
30
  _sendMetricsBatch(payload: OtlpMetricsPayload): Promise<SendMetricsBatchOutcome>;
31
31
  getLibraryId(): string;
32
32
  getLibraryVersion(): string;
33
+ /**
34
+ * The span active where a sample is recorded. A sampled one stamps the
35
+ * sample's series with an exemplar. Hosts without tracing leave it out.
36
+ */
37
+ getActiveSpan?(): Span | null;
33
38
  }
34
39
  /**
35
40
  * Configuration for the metrics feature on `new PostHog(key, { metrics: ... })`.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/metrics/types.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAElG,yFAAyF;AACzF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GACd;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D;IACE,IAAI,EAAE,WAAW,CAAA;IACjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAErC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAChF,YAAY,IAAI,MAAM,CAAA;IACtB,iBAAiB,IAAI,MAAM,CAAA;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IAEzD;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,CAAA;CACvD;AAID,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/metrics/types.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,kBAAkB,EAClB,YAAY,GACb,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAExG,yFAAyF;AACzF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GACd;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D;IACE,IAAI,EAAE,WAAW,CAAA;IACjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAErC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAChF,YAAY,IAAI,MAAM,CAAA;IACtB,iBAAiB,IAAI,MAAM,CAAA;IAC3B;;;OAGG;IACH,aAAa,CAAC,IAAI,IAAI,GAAG,IAAI,CAAA;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IAEzD;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,EAAE,CAAA;CACvD;AAID,MAAM,WAAW,4BAA6B,SAAQ,oBAAoB;IACxE,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;CAC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/traces/ids.ts"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAe7D;AAiBD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAMD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE7D"}
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/traces/ids.ts"],"names":[],"mappings":"AAoBA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAe7D;AAiBD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAMD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE7D"}
@@ -31,8 +31,8 @@ const TRACE_ID_BYTES = 16;
31
31
  const SPAN_ID_BYTES = 8;
32
32
  const TRACE_ID_HEX = 2 * TRACE_ID_BYTES;
33
33
  const SPAN_ID_HEX = 2 * SPAN_ID_BYTES;
34
- const INVALID_TRACE_ID = '0'.repeat(TRACE_ID_HEX);
35
- const INVALID_SPAN_ID = '0'.repeat(SPAN_ID_HEX);
34
+ const INVALID_SPAN_ID = '0000000000000000';
35
+ const INVALID_TRACE_ID = INVALID_SPAN_ID + INVALID_SPAN_ID;
36
36
  const HEX_RE = /^[0-9a-f]+$/;
37
37
  function getRandomBytes(byteLength) {
38
38
  const bytes = new Uint8Array(byteLength);
@@ -2,8 +2,8 @@ const TRACE_ID_BYTES = 16;
2
2
  const SPAN_ID_BYTES = 8;
3
3
  const TRACE_ID_HEX = 2 * TRACE_ID_BYTES;
4
4
  const SPAN_ID_HEX = 2 * SPAN_ID_BYTES;
5
- const INVALID_TRACE_ID = '0'.repeat(TRACE_ID_HEX);
6
- const INVALID_SPAN_ID = '0'.repeat(SPAN_ID_HEX);
5
+ const INVALID_SPAN_ID = '0000000000000000';
6
+ const INVALID_TRACE_ID = INVALID_SPAN_ID + INVALID_SPAN_ID;
7
7
  const HEX_RE = /^[0-9a-f]+$/;
8
8
  function getRandomBytes(byteLength) {
9
9
  const bytes = new Uint8Array(byteLength);