@interfere/next 0.1.0-alpha.9 → 0.2.0-alpha.4

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 (242) hide show
  1. package/README.md +70 -277
  2. package/dist/_virtual/_rolldown/runtime.mjs +13 -0
  3. package/dist/config.d.mts +11 -0
  4. package/dist/config.d.mts.map +1 -0
  5. package/dist/config.mjs +107 -0
  6. package/dist/config.mjs.map +1 -0
  7. package/dist/instrument-client.d.mts +2 -0
  8. package/dist/instrument-client.mjs +2 -0
  9. package/dist/internal/build/configure-build.d.mts +22 -0
  10. package/dist/internal/build/configure-build.d.mts.map +1 -0
  11. package/dist/internal/build/configure-build.mjs +87 -0
  12. package/dist/internal/build/configure-build.mjs.map +1 -0
  13. package/dist/internal/build/injected.d.mts +12 -0
  14. package/dist/internal/build/injected.d.mts.map +1 -0
  15. package/dist/internal/build/injected.mjs +9 -0
  16. package/dist/internal/build/injected.mjs.map +1 -0
  17. package/dist/internal/build/release/destinations/vercel.d.mts +6 -0
  18. package/dist/internal/build/release/destinations/vercel.d.mts.map +1 -0
  19. package/dist/internal/build/release/destinations/vercel.mjs +25 -0
  20. package/dist/internal/build/release/destinations/vercel.mjs.map +1 -0
  21. package/dist/internal/build/release/git.d.mts +4 -0
  22. package/dist/internal/build/release/git.d.mts.map +1 -0
  23. package/dist/internal/build/release/git.mjs +21 -0
  24. package/dist/internal/build/release/git.mjs.map +1 -0
  25. package/dist/internal/build/release/index.d.mts +7 -0
  26. package/dist/internal/build/release/index.d.mts.map +1 -0
  27. package/dist/internal/build/release/index.mjs +24 -0
  28. package/dist/internal/build/release/index.mjs.map +1 -0
  29. package/dist/internal/build/release/sources/github.d.mts +6 -0
  30. package/dist/internal/build/release/sources/github.d.mts.map +1 -0
  31. package/dist/internal/build/release/sources/github.mjs +15 -0
  32. package/dist/internal/build/release/sources/github.mjs.map +1 -0
  33. package/dist/internal/build/release/types.d.mts +11 -0
  34. package/dist/internal/build/release/types.d.mts.map +1 -0
  35. package/dist/internal/build/release/types.mjs +1 -0
  36. package/dist/internal/build/source-maps/discover.d.mts +14 -0
  37. package/dist/internal/build/source-maps/discover.d.mts.map +1 -0
  38. package/dist/internal/build/source-maps/discover.mjs +61 -0
  39. package/dist/internal/build/source-maps/discover.mjs.map +1 -0
  40. package/dist/internal/build/source-maps/index.d.mts +23 -0
  41. package/dist/internal/build/source-maps/index.d.mts.map +1 -0
  42. package/dist/internal/build/source-maps/index.mjs +33 -0
  43. package/dist/internal/build/source-maps/index.mjs.map +1 -0
  44. package/dist/internal/build/value-injection-loader.d.mts +10 -0
  45. package/dist/internal/build/value-injection-loader.d.mts.map +1 -0
  46. package/dist/internal/build/value-injection-loader.mjs +24 -0
  47. package/dist/internal/build/value-injection-loader.mjs.map +1 -0
  48. package/dist/internal/env.d.mts +16 -0
  49. package/dist/internal/env.d.mts.map +1 -0
  50. package/dist/internal/env.mjs +19 -0
  51. package/dist/internal/env.mjs.map +1 -0
  52. package/dist/internal/logger.d.mts +8 -0
  53. package/dist/internal/logger.d.mts.map +1 -0
  54. package/dist/internal/logger.mjs +44 -0
  55. package/dist/internal/logger.mjs.map +1 -0
  56. package/dist/internal/route/cors.d.mts +4 -0
  57. package/dist/internal/route/cors.d.mts.map +1 -0
  58. package/dist/internal/route/cors.mjs +15 -0
  59. package/dist/internal/route/cors.mjs.map +1 -0
  60. package/dist/internal/route/handle-get.d.mts +4 -0
  61. package/dist/internal/route/handle-get.d.mts.map +1 -0
  62. package/dist/internal/route/handle-get.mjs +15 -0
  63. package/dist/internal/route/handle-get.mjs.map +1 -0
  64. package/dist/internal/route/handle-post.d.mts +4 -0
  65. package/dist/internal/route/handle-post.d.mts.map +1 -0
  66. package/dist/internal/route/handle-post.mjs +105 -0
  67. package/dist/internal/route/handle-post.mjs.map +1 -0
  68. package/dist/internal/route/sw-script.d.mts +4 -0
  69. package/dist/internal/route/sw-script.d.mts.map +1 -0
  70. package/dist/internal/route/sw-script.mjs +32 -0
  71. package/dist/internal/route/sw-script.mjs.map +1 -0
  72. package/dist/internal/server/capture.d.mts +9 -0
  73. package/dist/internal/server/capture.d.mts.map +1 -0
  74. package/dist/internal/server/capture.mjs +46 -0
  75. package/dist/internal/server/capture.mjs.map +1 -0
  76. package/dist/internal/server/dedupe.d.mts +5 -0
  77. package/dist/internal/server/dedupe.d.mts.map +1 -0
  78. package/dist/internal/server/dedupe.mjs +11 -0
  79. package/dist/internal/server/dedupe.mjs.map +1 -0
  80. package/dist/internal/server/envelope.d.mts +14 -0
  81. package/dist/internal/server/envelope.d.mts.map +1 -0
  82. package/dist/internal/server/envelope.mjs +41 -0
  83. package/dist/internal/server/envelope.mjs.map +1 -0
  84. package/dist/internal/server/mechanisms.d.mts +7 -0
  85. package/dist/internal/server/mechanisms.d.mts.map +1 -0
  86. package/dist/internal/server/mechanisms.mjs +12 -0
  87. package/dist/internal/server/mechanisms.mjs.map +1 -0
  88. package/dist/internal/server/normalize-request.d.mts +7 -0
  89. package/dist/internal/server/normalize-request.d.mts.map +1 -0
  90. package/dist/internal/server/normalize-request.mjs +50 -0
  91. package/dist/internal/server/normalize-request.mjs.map +1 -0
  92. package/dist/internal/server/runtime.d.mts +14 -0
  93. package/dist/internal/server/runtime.d.mts.map +1 -0
  94. package/dist/internal/server/runtime.mjs +18 -0
  95. package/dist/internal/server/runtime.mjs.map +1 -0
  96. package/dist/internal/server/session.d.mts +11 -0
  97. package/dist/internal/server/session.d.mts.map +1 -0
  98. package/dist/internal/server/session.mjs +15 -0
  99. package/dist/internal/server/session.mjs.map +1 -0
  100. package/dist/internal/server/transport.d.mts +12 -0
  101. package/dist/internal/server/transport.d.mts.map +1 -0
  102. package/dist/internal/server/transport.mjs +17 -0
  103. package/dist/internal/server/transport.mjs.map +1 -0
  104. package/dist/internal/server/types.d.mts +17 -0
  105. package/dist/internal/server/types.d.mts.map +1 -0
  106. package/dist/internal/server/types.mjs +1 -0
  107. package/dist/provider.d.mts +2 -0
  108. package/dist/provider.mjs +3 -0
  109. package/dist/route-handler.d.mts +7 -0
  110. package/dist/route-handler.d.mts.map +1 -0
  111. package/dist/route-handler.mjs +18 -0
  112. package/dist/route-handler.mjs.map +1 -0
  113. package/dist/server.d.mts +8 -0
  114. package/dist/server.d.mts.map +1 -0
  115. package/dist/server.mjs +6 -0
  116. package/dist/server.mjs.map +1 -0
  117. package/package.json +60 -73
  118. package/LICENSE +0 -21
  119. package/dist/build/env-config.d.mts +0 -7
  120. package/dist/build/env-config.d.mts.map +0 -1
  121. package/dist/build/env-config.mjs +0 -17
  122. package/dist/build/env-config.mjs.map +0 -1
  123. package/dist/build/loaders/value-injection-loader.d.mts +0 -28
  124. package/dist/build/loaders/value-injection-loader.d.mts.map +0 -1
  125. package/dist/build/loaders/value-injection-loader.mjs +0 -44
  126. package/dist/build/loaders/value-injection-loader.mjs.map +0 -1
  127. package/dist/build/logger.d.mts +0 -11
  128. package/dist/build/logger.d.mts.map +0 -1
  129. package/dist/build/logger.mjs +0 -155
  130. package/dist/build/logger.mjs.map +0 -1
  131. package/dist/build/release-program.d.mts +0 -19
  132. package/dist/build/release-program.d.mts.map +0 -1
  133. package/dist/build/release-program.mjs +0 -92
  134. package/dist/build/release-program.mjs.map +0 -1
  135. package/dist/build/secret-key.d.mts +0 -10
  136. package/dist/build/secret-key.d.mts.map +0 -1
  137. package/dist/build/secret-key.mjs +0 -16
  138. package/dist/build/secret-key.mjs.map +0 -1
  139. package/dist/build/services/config.service.d.mts +0 -9
  140. package/dist/build/services/config.service.d.mts.map +0 -1
  141. package/dist/build/services/config.service.mjs +0 -8
  142. package/dist/build/services/config.service.mjs.map +0 -1
  143. package/dist/build/services/instrumentation-detection.service.d.mts +0 -22
  144. package/dist/build/services/instrumentation-detection.service.d.mts.map +0 -1
  145. package/dist/build/services/instrumentation-detection.service.mjs +0 -60
  146. package/dist/build/services/instrumentation-detection.service.mjs.map +0 -1
  147. package/dist/build/services/preflight.service.d.mts +0 -19
  148. package/dist/build/services/preflight.service.d.mts.map +0 -1
  149. package/dist/build/services/preflight.service.mjs +0 -76
  150. package/dist/build/services/preflight.service.mjs.map +0 -1
  151. package/dist/build/services/release-identity.service.d.mts +0 -22
  152. package/dist/build/services/release-identity.service.d.mts.map +0 -1
  153. package/dist/build/services/release-identity.service.mjs +0 -48
  154. package/dist/build/services/release-identity.service.mjs.map +0 -1
  155. package/dist/build/services/source-map.service.d.mts +0 -24
  156. package/dist/build/services/source-map.service.d.mts.map +0 -1
  157. package/dist/build/services/source-map.service.mjs +0 -58
  158. package/dist/build/services/source-map.service.mjs.map +0 -1
  159. package/dist/build/source-maps/api.d.mts +0 -35
  160. package/dist/build/source-maps/api.d.mts.map +0 -1
  161. package/dist/build/source-maps/api.mjs +0 -61
  162. package/dist/build/source-maps/api.mjs.map +0 -1
  163. package/dist/build/source-maps/client.d.mts +0 -73
  164. package/dist/build/source-maps/client.d.mts.map +0 -1
  165. package/dist/build/source-maps/client.mjs +0 -228
  166. package/dist/build/source-maps/client.mjs.map +0 -1
  167. package/dist/build/source-maps/errors.d.mts +0 -109
  168. package/dist/build/source-maps/errors.d.mts.map +0 -1
  169. package/dist/build/source-maps/errors.mjs +0 -22
  170. package/dist/build/source-maps/errors.mjs.map +0 -1
  171. package/dist/build/source-maps/files.d.mts +0 -35
  172. package/dist/build/source-maps/files.d.mts.map +0 -1
  173. package/dist/build/source-maps/files.mjs +0 -222
  174. package/dist/build/source-maps/files.mjs.map +0 -1
  175. package/dist/build/source-maps/providers/deployment/detector.d.mts +0 -26
  176. package/dist/build/source-maps/providers/deployment/detector.d.mts.map +0 -1
  177. package/dist/build/source-maps/providers/deployment/detector.mjs +0 -22
  178. package/dist/build/source-maps/providers/deployment/detector.mjs.map +0 -1
  179. package/dist/build/source-maps/providers/deployment/types.d.mts +0 -12
  180. package/dist/build/source-maps/providers/deployment/types.d.mts.map +0 -1
  181. package/dist/build/source-maps/providers/deployment/types.mjs +0 -3
  182. package/dist/build/source-maps/providers/deployment/vercel.d.mts +0 -6
  183. package/dist/build/source-maps/providers/deployment/vercel.d.mts.map +0 -1
  184. package/dist/build/source-maps/providers/deployment/vercel.mjs +0 -44
  185. package/dist/build/source-maps/providers/deployment/vercel.mjs.map +0 -1
  186. package/dist/build/source-maps/providers/source-control/detector.d.mts +0 -15
  187. package/dist/build/source-maps/providers/source-control/detector.d.mts.map +0 -1
  188. package/dist/build/source-maps/providers/source-control/detector.mjs +0 -22
  189. package/dist/build/source-maps/providers/source-control/detector.mjs.map +0 -1
  190. package/dist/build/source-maps/providers/source-control/git.d.mts +0 -6
  191. package/dist/build/source-maps/providers/source-control/git.d.mts.map +0 -1
  192. package/dist/build/source-maps/providers/source-control/git.mjs +0 -50
  193. package/dist/build/source-maps/providers/source-control/git.mjs.map +0 -1
  194. package/dist/build/source-maps/providers/source-control/types.d.mts +0 -12
  195. package/dist/build/source-maps/providers/source-control/types.d.mts.map +0 -1
  196. package/dist/build/source-maps/providers/source-control/types.mjs +0 -3
  197. package/dist/build/with-interfere.d.mts +0 -70
  198. package/dist/build/with-interfere.d.mts.map +0 -1
  199. package/dist/build/with-interfere.mjs +0 -154
  200. package/dist/build/with-interfere.mjs.map +0 -1
  201. package/dist/client/auto-init.d.mts +0 -92
  202. package/dist/client/auto-init.d.mts.map +0 -1
  203. package/dist/client/auto-init.mjs +0 -121
  204. package/dist/client/auto-init.mjs.map +0 -1
  205. package/dist/client/client.d.mts +0 -3
  206. package/dist/client/client.mjs +0 -5
  207. package/dist/client/provider.d.mts +0 -22
  208. package/dist/client/provider.d.mts.map +0 -1
  209. package/dist/client/provider.mjs +0 -50
  210. package/dist/client/provider.mjs.map +0 -1
  211. package/dist/lib/env.d.mts +0 -12
  212. package/dist/lib/env.d.mts.map +0 -1
  213. package/dist/lib/env.mjs +0 -17
  214. package/dist/lib/env.mjs.map +0 -1
  215. package/dist/lib/test-utils/make-next-request.d.mts +0 -6
  216. package/dist/lib/test-utils/make-next-request.d.mts.map +0 -1
  217. package/dist/lib/test-utils/make-next-request.mjs +0 -12
  218. package/dist/lib/test-utils/make-next-request.mjs.map +0 -1
  219. package/dist/lib/types.d.mts +0 -22
  220. package/dist/lib/types.d.mts.map +0 -1
  221. package/dist/lib/types.mjs +0 -7
  222. package/dist/lib/types.mjs.map +0 -1
  223. package/dist/server/middleware.d.mts +0 -11
  224. package/dist/server/middleware.d.mts.map +0 -1
  225. package/dist/server/middleware.mjs +0 -85
  226. package/dist/server/middleware.mjs.map +0 -1
  227. package/dist/server/proxy.d.mts +0 -6
  228. package/dist/server/proxy.d.mts.map +0 -1
  229. package/dist/server/proxy.mjs +0 -30
  230. package/dist/server/proxy.mjs.map +0 -1
  231. package/dist/server/route-handler.d.mts +0 -9
  232. package/dist/server/route-handler.d.mts.map +0 -1
  233. package/dist/server/route-handler.mjs +0 -172
  234. package/dist/server/route-handler.mjs.map +0 -1
  235. package/dist/server/services/config.service.d.mts +0 -21
  236. package/dist/server/services/config.service.d.mts.map +0 -1
  237. package/dist/server/services/config.service.mjs +0 -43
  238. package/dist/server/services/config.service.mjs.map +0 -1
  239. package/dist/server/services/error-tracking.service.d.mts +0 -19
  240. package/dist/server/services/error-tracking.service.d.mts.map +0 -1
  241. package/dist/server/services/error-tracking.service.mjs +0 -31
  242. package/dist/server/services/error-tracking.service.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-handler.d.mts","names":[],"sources":["../src/route-handler.ts"],"mappings":";iBAIgB,GAAA,CAAI,OAAA,EAAS,OAAA,GAAU,QAAA;AAAA,iBAIvB,IAAA,CAAK,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,QAAA;AAAA,iBAIhC,GAAA,CAAI,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,QAAA;AAAA,iBAI/B,OAAA,CAAA,GAAW,QAAA"}
@@ -0,0 +1,18 @@
1
+ import { handleOptions } from "./internal/route/cors.mjs";
2
+ import { handleGet } from "./internal/route/handle-get.mjs";
3
+ import { handlePost } from "./internal/route/handle-post.mjs";
4
+ //#region src/route-handler.ts
5
+ function GET(request) {
6
+ return handleGet(request);
7
+ }
8
+ function POST(request) {
9
+ return handlePost(request);
10
+ }
11
+ function PUT(request) {
12
+ return handlePost(request);
13
+ }
14
+ function OPTIONS() {
15
+ return handleOptions();
16
+ }
17
+ //#endregion
18
+ export { GET, OPTIONS, POST, PUT };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-handler.mjs","names":[],"sources":["../src/route-handler.ts"],"sourcesContent":["import { handleOptions } from \"./internal/route/cors.js\";\nimport { handleGet } from \"./internal/route/handle-get.js\";\nimport { handlePost } from \"./internal/route/handle-post.js\";\n\nexport function GET(request: Request): Response {\n return handleGet(request);\n}\n\nexport function POST(request: Request): Promise<Response> {\n return handlePost(request);\n}\n\nexport function PUT(request: Request): Promise<Response> {\n return handlePost(request);\n}\n\nexport function OPTIONS(): Response {\n return handleOptions();\n}\n"],"mappings":";;;;AAIA,SAAgB,IAAI,SAA4B;AAC9C,QAAO,UAAU,QAAQ;;AAG3B,SAAgB,KAAK,SAAqC;AACxD,QAAO,WAAW,QAAQ;;AAG5B,SAAgB,IAAI,SAAqC;AACvD,QAAO,WAAW,QAAQ;;AAG5B,SAAgB,UAAoB;AAClC,QAAO,eAAe"}
@@ -0,0 +1,8 @@
1
+ import { CaptureErrorContext, OnRequestErrorContext } from "./internal/server/types.mjs";
2
+ import { captureOnRequestError, captureServerError } from "./internal/server/capture.mjs";
3
+
4
+ //#region src/server.d.ts
5
+ declare const captureError: typeof captureServerError;
6
+ declare const onRequestError: typeof captureOnRequestError;
7
+ //#endregion
8
+ export { type CaptureErrorContext, type OnRequestErrorContext, captureError, onRequestError };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.mts","names":[],"sources":["../src/server.ts"],"mappings":";;;;cAUa,YAAA,SAAY,kBAAA;AAAA,cACZ,cAAA,SAAc,qBAAA"}
@@ -0,0 +1,6 @@
1
+ import { captureOnRequestError, captureServerError } from "./internal/server/capture.mjs";
2
+ //#region src/server.ts
3
+ const captureError = captureServerError;
4
+ const onRequestError = captureOnRequestError;
5
+ //#endregion
6
+ export { captureError, onRequestError };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.mjs","names":[],"sources":["../src/server.ts"],"sourcesContent":["import {\n captureOnRequestError,\n captureServerError,\n} from \"./internal/server/capture.js\";\n\nexport type {\n CaptureErrorContext,\n OnRequestErrorContext,\n} from \"./internal/server/types.js\";\n\nexport const captureError = captureServerError;\nexport const onRequestError = captureOnRequestError;\n"],"mappings":";;AAUA,MAAa,eAAe;AAC5B,MAAa,iBAAiB"}
package/package.json CHANGED
@@ -1,115 +1,102 @@
1
1
  {
2
2
  "name": "@interfere/next",
3
- "version": "0.1.0-alpha.9",
3
+ "version": "0.2.0-alpha.4",
4
4
  "license": "MIT",
5
- "description": "Build apps that never break.",
5
+ "description": "Next.js SDK v2 for Interfere.",
6
6
  "keywords": [
7
7
  "observability",
8
8
  "typescript",
9
9
  "react",
10
- "logging",
11
- "error-tracking",
12
- "session-replay"
10
+ "nextjs",
11
+ "error-tracking"
13
12
  ],
14
13
  "homepage": "https://interfere.com",
15
14
  "bugs": {
16
15
  "url": "mailto:support@interfere.com"
17
16
  },
18
17
  "author": "Interfere <support@interfere.com> (https://interfere.com)",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/interfere-inc/interfere.git",
21
+ "directory": "src/packages/public/next"
22
+ },
19
23
  "files": [
20
24
  "dist"
21
25
  ],
22
26
  "type": "module",
23
27
  "exports": {
24
28
  "./config": {
25
- "@source": "./src/build/with-interfere.ts",
26
- "types": "./dist/build/with-interfere.d.mts",
27
- "default": "./dist/build/with-interfere.mjs"
29
+ "@source": "./src/config.ts",
30
+ "types": "./dist/config.d.mts",
31
+ "default": "./dist/config.mjs"
28
32
  },
29
- "./build": {
30
- "@source": "./src/build/with-interfere.ts",
31
- "types": "./dist/build/with-interfere.d.mts",
32
- "default": "./dist/build/with-interfere.mjs"
33
+ "./instrument-client": {
34
+ "@source": "./src/instrument-client.ts",
35
+ "types": "./dist/instrument-client.d.mts",
36
+ "default": "./dist/instrument-client.mjs"
33
37
  },
34
38
  "./provider": {
35
- "@source": "./src/client/provider.tsx",
36
- "types": "./dist/client/provider.d.mts",
37
- "default": "./dist/client/provider.mjs"
38
- },
39
- "./client": {
40
- "@source": "./src/client/client.ts",
41
- "types": "./dist/client/client.d.mts",
42
- "default": "./dist/client/client.mjs"
43
- },
44
- "./auto-init": {
45
- "@source": "./src/client/auto-init.ts",
46
- "types": "./dist/client/auto-init.d.mts",
47
- "default": "./dist/client/auto-init.mjs"
39
+ "@source": "./src/provider.tsx",
40
+ "types": "./dist/provider.d.mts",
41
+ "default": "./dist/provider.mjs"
48
42
  },
49
43
  "./route-handler": {
50
- "@source": "./src/server/route-handler.ts",
51
- "types": "./dist/server/route-handler.d.mts",
52
- "default": "./dist/server/route-handler.mjs"
53
- },
54
- "./server/route-handler": {
55
- "@source": "./src/server/route-handler.ts",
56
- "types": "./dist/server/route-handler.d.mts",
57
- "default": "./dist/server/route-handler.mjs"
44
+ "@source": "./src/route-handler.ts",
45
+ "types": "./dist/route-handler.d.mts",
46
+ "default": "./dist/route-handler.mjs"
58
47
  },
59
- "./middleware": {
60
- "@source": "./src/server/middleware.ts",
61
- "types": "./dist/server/middleware.d.mts",
62
- "default": "./dist/server/middleware.mjs"
63
- },
64
- "./proxy": {
65
- "@source": "./src/server/proxy.ts",
66
- "types": "./dist/server/proxy.d.mts",
67
- "default": "./dist/server/proxy.mjs"
48
+ "./server": {
49
+ "@source": "./src/server.ts",
50
+ "types": "./dist/server.d.mts",
51
+ "default": "./dist/server.mjs"
68
52
  }
69
53
  },
54
+ "sideEffects": false,
70
55
  "publishConfig": {
71
56
  "access": "public"
72
57
  },
58
+ "scripts": {
59
+ "build": "tsdown",
60
+ "dev": "tsdown --watch",
61
+ "test:browser": "vitest run --project browser",
62
+ "test:unit": "vitest run --project unit --coverage",
63
+ "typecheck": "tsc --noEmit --incremental",
64
+ "test": "bun run test:unit && bun run test:browser"
65
+ },
73
66
  "dependencies": {
74
- "@effect/platform": "^0.94.1",
67
+ "@interfere/constants": "0.2.0-alpha.2",
68
+ "@interfere/react": "0.2.0-alpha.2",
69
+ "@interfere/sdk": "0.2.0-alpha.2",
70
+ "@interfere/types": "0.2.0-alpha.2",
75
71
  "chalk": "^5.6.2",
76
- "effect": "^3.19.14",
77
- "glob": "^13.0.0",
78
- "uuid": "^13.0.0",
79
- "zod": "^4.3.5",
80
- "@interfere/constants": "0.0.2-alpha.0",
81
- "@interfere/effect-utils": "0.0.2-alpha.2",
82
- "@interfere/react": "0.1.0-alpha.5",
83
- "@interfere/types": "0.1.0-alpha.1"
72
+ "glob": "^13.0.6",
73
+ "uuid": "^13.0.0"
84
74
  },
85
75
  "peerDependencies": {
86
76
  "@vercel/blob": "^2",
87
- "next": ">=15 || >=16",
77
+ "next": ">=16",
88
78
  "react": ">=19",
89
79
  "react-dom": ">=19"
90
80
  },
91
81
  "devDependencies": {
92
- "@types/node": "^22.19.3",
93
- "@types/react": "19.2.7",
82
+ "@interfere/typescript-config": "1.1.0-alpha.4",
83
+ "@interfere/vitest-config": "1.1.0-alpha.4",
84
+ "@testing-library/react": "^16.3.2",
85
+ "@types/node": "^24.12.0",
86
+ "@types/react": "19.2.14",
94
87
  "@types/react-dom": "19.2.3",
95
- "@vitest/coverage-v8": "^4.0.16",
96
- "jsdom": "^27.4.0",
97
- "msw": "^2.12.7",
98
- "next": "^16.1.1",
99
- "react": "^19.2.3",
100
- "react-dom": "^19.2.3",
101
- "tsdown": "^0.18.4",
88
+ "@vitejs/plugin-react": "^5.1.4",
89
+ "@vitest/browser": "4.0.18",
90
+ "@vitest/browser-playwright": "4.0.18",
91
+ "@vitest/coverage-v8": "^4.0.18",
92
+ "jsdom": "^28.0.0",
93
+ "next": "^16.1.6",
94
+ "playwright": "^1.56.1",
95
+ "react": "^19.2.4",
96
+ "react-dom": "^19.2.4",
97
+ "tsdown": "0.21.2",
102
98
  "typescript": "5.9.3",
103
- "vitest": "^4.0.16",
104
- "webpack": "^5.104.1",
105
- "@interfere/test-utils": "0.0.0",
106
- "@interfere/typescript-config": "1.0.3-alpha.0",
107
- "@interfere/vitest-config": "1.0.1-alpha.0"
108
- },
109
- "scripts": {
110
- "build": "tsdown",
111
- "dev": "tsdown --watch",
112
- "typecheck": "tsc --noEmit --incremental",
113
- "test": "vitest run --coverage"
99
+ "vitest": "^4.0.18",
100
+ "webpack": "^5.105.1"
114
101
  }
115
- }
102
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Interfere, Inc.
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,7 +0,0 @@
1
- import { NonEmptyString } from "../lib/types.mjs";
2
-
3
- //#region src/build/env-config.d.ts
4
- declare function resolveApiUrl(): string;
5
- declare function normalizeSecretKey(raw: string | undefined): NonEmptyString | null;
6
- //#endregion
7
- export { normalizeSecretKey, resolveApiUrl };
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-config.d.mts","names":[],"sources":["../../src/build/env-config.ts"],"sourcesContent":[],"mappings":";;;iBAGgB,aAAA,CAAA;iBAWA,kBAAA,2BAEb"}
@@ -1,17 +0,0 @@
1
- import { toNonEmptyString } from "../lib/types.mjs";
2
- import { API_URL } from "@interfere/constants/api";
3
-
4
- //#region src/build/env-config.ts
5
- function resolveApiUrl() {
6
- const raw = process.env.INTERFERE_API_URL;
7
- const trimmed = typeof raw === "string" ? raw.trim() : "";
8
- if (trimmed.length > 0) return trimmed;
9
- return API_URL;
10
- }
11
- function normalizeSecretKey(raw) {
12
- if (typeof raw !== "string") return null;
13
- return toNonEmptyString(raw.trim().replace(/^['"]|['"]$/g, ""));
14
- }
15
-
16
- //#endregion
17
- export { normalizeSecretKey, resolveApiUrl };
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-config.mjs","names":[],"sources":["../../src/build/env-config.ts"],"sourcesContent":["import { API_URL } from \"@interfere/constants/api\";\nimport { type NonEmptyString, toNonEmptyString } from \"../lib/types.js\";\n\nexport function resolveApiUrl(): string {\n const raw = process.env.INTERFERE_API_URL;\n const trimmed = typeof raw === \"string\" ? raw.trim() : \"\";\n\n if (trimmed.length > 0) {\n return trimmed;\n }\n\n return API_URL;\n}\n\nexport function normalizeSecretKey(\n raw: string | undefined\n): NonEmptyString | null {\n if (typeof raw !== \"string\") {\n return null;\n }\n\n const trimmed = raw.trim();\n const cleaned = trimmed.replace(/^['\"]|['\"]$/g, \"\");\n\n return toNonEmptyString(cleaned);\n}\n\n\n"],"mappings":";;;;AAGA,SAAgB,gBAAwB;CACtC,MAAM,MAAM,QAAQ,IAAI;CACxB,MAAM,UAAU,OAAO,QAAQ,WAAW,IAAI,MAAM,GAAG;AAEvD,KAAI,QAAQ,SAAS,EACnB,QAAO;AAGT,QAAO;;AAGT,SAAgB,mBACd,KACuB;AACvB,KAAI,OAAO,QAAQ,SACjB,QAAO;AAMT,QAAO,iBAHS,IAAI,MAAM,CACF,QAAQ,gBAAgB,GAAG,CAEnB"}
@@ -1,28 +0,0 @@
1
- import { LoaderContext } from "webpack";
2
-
3
- //#region src/build/loaders/value-injection-loader.d.ts
4
- interface ValueInjectionLoaderOptions {
5
- /** Key-value pairs to inject into globalThis (used by webpack) */
6
- values?: Record<string, unknown>;
7
- /** Serialized JSON string of values (used by turbopack to preserve null values) */
8
- serializedValues?: string;
9
- }
10
- /**
11
- * Webpack/Turbopack loader that injects build-time values into globalThis.
12
- *
13
- * This loader prepends code that sets values on globalThis, making them
14
- * available at runtime without requiring environment variables.
15
- *
16
- * Supports two input formats:
17
- * - `values`: Direct object with key-value pairs (webpack)
18
- * - `serializedValues`: JSON-serialized string of values (turbopack)
19
- *
20
- * @example
21
- * // With options: { values: { __BUILD_ID__: "abc123" } }
22
- * // Input: console.log("hello");
23
- * // Output: globalThis["__BUILD_ID__"] = "abc123";
24
- * // console.log("hello");
25
- */
26
- declare function valueInjectionLoader(this: LoaderContext<ValueInjectionLoaderOptions>, userCode: string): string;
27
- //#endregion
28
- export { ValueInjectionLoaderOptions, valueInjectionLoader as default };
@@ -1 +0,0 @@
1
- {"version":3,"file":"value-injection-loader.d.mts","names":[],"sources":["../../../src/build/loaders/value-injection-loader.ts"],"sourcesContent":[],"mappings":";;;UAEiB,2BAAA;;EAAA,MAAA,CAAA,EAEN,MAFM,CAAA,MAAA,EAAA,OAA2B,CAAA;EAuBpB;;;;;;;;;;;;;;;;;;;iBAAA,oBAAA,OAChB,cAAc"}
@@ -1,44 +0,0 @@
1
- //#region src/build/loaders/value-injection-loader.ts
2
- /**
3
- * Webpack/Turbopack loader that injects build-time values into globalThis.
4
- *
5
- * This loader prepends code that sets values on globalThis, making them
6
- * available at runtime without requiring environment variables.
7
- *
8
- * Supports two input formats:
9
- * - `values`: Direct object with key-value pairs (webpack)
10
- * - `serializedValues`: JSON-serialized string of values (turbopack)
11
- *
12
- * @example
13
- * // With options: { values: { __BUILD_ID__: "abc123" } }
14
- * // Input: console.log("hello");
15
- * // Output: globalThis["__BUILD_ID__"] = "abc123";
16
- * // console.log("hello");
17
- */
18
- function valueInjectionLoader(userCode) {
19
- const options = this.getOptions();
20
- let values = {};
21
- if (options.serializedValues) try {
22
- values = JSON.parse(options.serializedValues);
23
- } catch {
24
- values = {};
25
- }
26
- else if (options.values) values = options.values;
27
- const injectionLines = [];
28
- for (const [key, value] of Object.entries(values)) {
29
- if (value === void 0) continue;
30
- const serialized = JSON.stringify(value);
31
- injectionLines.push(`globalThis["${escapeKey(key)}"] = ${serialized};`);
32
- }
33
- if (injectionLines.length === 0) return userCode;
34
- return `${injectionLines.join("\n")}\n${userCode}`;
35
- }
36
- /**
37
- * Escape special characters in object keys for safe string embedding.
38
- */
39
- function escapeKey(key) {
40
- return key.replace(/\\/g, "\\\\").replace(/"/g, "\\\"");
41
- }
42
-
43
- //#endregion
44
- export { valueInjectionLoader as default };
@@ -1 +0,0 @@
1
- {"version":3,"file":"value-injection-loader.mjs","names":["values: Record<string, unknown>","injectionLines: string[]"],"sources":["../../../src/build/loaders/value-injection-loader.ts"],"sourcesContent":["import type { LoaderContext } from \"webpack\";\n\nexport interface ValueInjectionLoaderOptions {\n /** Key-value pairs to inject into globalThis (used by webpack) */\n values?: Record<string, unknown>;\n /** Serialized JSON string of values (used by turbopack to preserve null values) */\n serializedValues?: string;\n}\n\n/**\n * Webpack/Turbopack loader that injects build-time values into globalThis.\n * \n * This loader prepends code that sets values on globalThis, making them\n * available at runtime without requiring environment variables.\n * \n * Supports two input formats:\n * - `values`: Direct object with key-value pairs (webpack)\n * - `serializedValues`: JSON-serialized string of values (turbopack)\n * \n * @example\n * // With options: { values: { __BUILD_ID__: \"abc123\" } }\n * // Input: console.log(\"hello\");\n * // Output: globalThis[\"__BUILD_ID__\"] = \"abc123\";\n * // console.log(\"hello\");\n */\nexport default function valueInjectionLoader(\n this: LoaderContext<ValueInjectionLoaderOptions>,\n userCode: string\n): string {\n const options = this.getOptions();\n \n // Determine the values to inject: either from direct object or parsed from JSON string\n let values: Record<string, unknown> = {};\n if (options.serializedValues) {\n // Turbopack passes values as a serialized JSON string to preserve null semantics\n try {\n values = JSON.parse(options.serializedValues);\n } catch {\n // If parsing fails, fall back to empty values\n values = {};\n }\n } else if (options.values) {\n // Webpack passes values directly\n values = options.values;\n }\n\n // Generate injection code for each value\n const injectionLines: string[] = [];\n\n for (const [key, value] of Object.entries(values)) {\n // Skip undefined values entirely\n if (value === undefined) {\n continue;\n }\n\n // Serialize value safely - handles null, strings, numbers, booleans, arrays, objects\n const serialized = JSON.stringify(value);\n injectionLines.push(`globalThis[\"${escapeKey(key)}\"] = ${serialized};`);\n }\n\n // If no values to inject, return original code unchanged\n if (injectionLines.length === 0) {\n return userCode;\n }\n\n // Prepend injection code to user's code\n const injectionCode = injectionLines.join(\"\\n\");\n return `${injectionCode}\\n${userCode}`;\n}\n\n/**\n * Escape special characters in object keys for safe string embedding.\n */\nfunction escapeKey(key: string): string {\n return key.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;;AAyBA,SAAwB,qBAEtB,UACQ;CACR,MAAM,UAAU,KAAK,YAAY;CAGjC,IAAIA,SAAkC,EAAE;AACxC,KAAI,QAAQ,iBAEV,KAAI;AACF,WAAS,KAAK,MAAM,QAAQ,iBAAiB;SACvC;AAEN,WAAS,EAAE;;UAEJ,QAAQ,OAEjB,UAAS,QAAQ;CAInB,MAAMC,iBAA2B,EAAE;AAEnC,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;AAEjD,MAAI,UAAU,OACZ;EAIF,MAAM,aAAa,KAAK,UAAU,MAAM;AACxC,iBAAe,KAAK,eAAe,UAAU,IAAI,CAAC,OAAO,WAAW,GAAG;;AAIzE,KAAI,eAAe,WAAW,EAC5B,QAAO;AAKT,QAAO,GADe,eAAe,KAAK,KAAK,CACvB,IAAI;;;;;AAM9B,SAAS,UAAU,KAAqB;AACtC,QAAO,IAAI,QAAQ,OAAO,OAAO,CAAC,QAAQ,MAAM,OAAM"}
@@ -1,11 +0,0 @@
1
- import { Effect, LogLevel, Logger } from "effect";
2
-
3
- //#region src/build/logger.d.ts
4
- declare const nextBuildLogger: Logger.Logger<unknown, void>;
5
- declare function logBuildResult(level: LogLevel.Literal, title: string, lines: string[]): Effect.Effect<void, never, never>;
6
- declare function setBuildLogTitle(level: LogLevel.Literal, title: string): Effect.Effect<void, never, never>;
7
- declare function appendBuildLogLine(line: string): Effect.Effect<void, never, never>;
8
- declare function flushBuildLog(): Effect.Effect<void, never, never>;
9
- declare function withBufferedBuildLog(level: LogLevel.Literal, title: string, use: (log: (line: string) => ReturnType<typeof appendBuildLogLine>) => Effect.Effect<unknown, unknown, unknown>): Effect.Effect<unknown, unknown, unknown>;
10
- //#endregion
11
- export { appendBuildLogLine, flushBuildLog, logBuildResult, nextBuildLogger, setBuildLogTitle, withBufferedBuildLog };
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.mts","names":[],"sources":["../../src/build/logger.ts"],"sourcesContent":[],"mappings":";;;cA+CM,iBAAe,MAAA,CAAA;AAAf,iBA0HU,cAAA,CA1HK,KAAA,EA0HiB,QAAA,CAAS,OA1H1B,EAAA,KAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,CAAA,EA0HiE,MAAA,CAAA,MA1HjE,CAAA,IAAA,EAAA,KAAA,EAAA,KAAA,CAAA;AA0HL,iBAyCA,gBAAA,CAzCsB,KAAS,EA0CtC,QAAA,CAAS,OA1CoE,EAAA,KAAA,EAAA,MAAA,CAAA,EA2CvE,MAAA,CAAA,MA3CuE,CAAA,IAAA,EAAA,KAAA,EAAA,KAAA,CAAA;AAyCtE,iBAUA,kBAAA,CATP,IAAS,EAAA,MACH,CAAA,EAQgC,MAAA,CAAA,MARhC,CAAA,IAAA,EAAA,KAAA,EAAA,KAAA,CAAA;AAQC,iBAWA,aAAA,CAAA,CAX+B,EAWlB,MAAA,CAAA,MAXkB,CAAA,IAAA,EAAA,KAAA,EAAA,KAAA,CAAA;AAW/B,iBAmBA,oBAAA,CAnBa,KAAA,EAoBpB,QAAA,CAAS,OApBW,EAAA,KAAA,EAAA,MAAA,EAAA,GAAA,EAAA,CAAA,GAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GAuBF,UAvBE,CAAA,OAuBgB,kBAvBhB,CAAA,EAAA,GAwBtB,MAAA,CAAO,MAxBe,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA,CAAA,EAwBkB,MAAA,CAAA,MAxBlB,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA"}
@@ -1,155 +0,0 @@
1
- import { InterfereLogger } from "@interfere/effect-utils/observability";
2
- import chalk from "chalk";
3
- import { Cause, Effect, LogLevel, Logger } from "effect";
4
-
5
- //#region src/build/logger.ts
6
- const buildConsole = globalThis.console;
7
- const prefixes = {
8
- Info: chalk.cyan.bold(" "),
9
- Debug: chalk.gray.bold(" "),
10
- All: chalk.gray.bold(" "),
11
- Trace: chalk.magenta.bold(" "),
12
- Warning: chalk.yellow.bold("⚠"),
13
- Error: chalk.red.bold("⨯"),
14
- Fatal: chalk.red.bold("⨯"),
15
- None: chalk.white.bold(" ")
16
- };
17
- const textStyles = {
18
- Info: chalk.cyan.bold,
19
- Debug: chalk.gray.bold,
20
- All: chalk.gray.bold,
21
- Trace: chalk.magenta.bold,
22
- Warning: chalk.yellow.bold,
23
- Error: chalk.red.bold,
24
- Fatal: chalk.red.bold,
25
- None: chalk.white.bold
26
- };
27
- const logMethods = {
28
- Warning: "warn",
29
- Error: "error"
30
- };
31
- function tagForLevel(level) {
32
- switch (level) {
33
- case "Error":
34
- case "Fatal": return "[error]";
35
- case "Warning": return "[warn]";
36
- case "Debug": return "[debug]";
37
- default: return "";
38
- }
39
- }
40
- const nextBuildLogger = Logger.make(({ logLevel, message, cause }) => {
41
- if (!shouldLog(logLevel._tag)) return;
42
- const renderedMessage = coerceToArray(message).map(formatValue).filter(Boolean).join(" ").trim();
43
- if (renderedMessage.length > 0) levelLog(logLevel._tag, renderedMessage);
44
- else levelLog(logLevel._tag);
45
- if (!Cause.isEmpty(cause)) levelLog(logLevel._tag, `${chalk.dim("details")} ${Cause.pretty(cause, { renderErrorCause: true })}`);
46
- });
47
- function systemLog(level, ...message) {
48
- if (!shouldLog(level)) return;
49
- const consoleFn = buildConsole[logMethods[level] ?? "log"];
50
- if (typeof consoleFn !== "function") return;
51
- const invoke = (...args) => Reflect.apply(consoleFn, buildConsole, args);
52
- if (message.length === 0) {
53
- invoke("");
54
- return;
55
- }
56
- if (message.length === 1) {
57
- invoke(` ${message[0]}`);
58
- return;
59
- }
60
- invoke(` `, ...message);
61
- }
62
- function coerceToArray(value) {
63
- if (Array.isArray(value)) return value.map(formatValue);
64
- return [formatValue(value)];
65
- }
66
- function formatValue(value) {
67
- if (typeof value === "string") return value;
68
- if (value instanceof Error) return value.stack ?? value.message;
69
- if (value === null || value === void 0) return "";
70
- try {
71
- return JSON.stringify(value);
72
- } catch {
73
- return String(value);
74
- }
75
- }
76
- function levelLog(level, ...message) {
77
- if (!shouldLog(level)) return;
78
- const consoleMethod = logMethods[level] ?? "log";
79
- const prefix = prefixes[level] ?? prefixes.Info;
80
- const tag = tagForLevel(level);
81
- const consoleFn = buildConsole[consoleMethod];
82
- if (typeof consoleFn !== "function") return;
83
- const invoke = (...args) => Reflect.apply(consoleFn, buildConsole, args);
84
- if (message.length === 0) {
85
- invoke("");
86
- return;
87
- }
88
- const tagPart = tag ? ` ${tag}` : "";
89
- if (message.length === 1) {
90
- invoke(` ${prefix}${tagPart} ${message[0]}`);
91
- return;
92
- }
93
- invoke(` ${prefix}${tagPart}`, ...message);
94
- }
95
- function logBuildResult(level, title, lines) {
96
- if (!shouldLog(level)) return Effect.void;
97
- return Effect.sync(() => {
98
- systemLog(level, `❖ ${chalk.white("Interfere →")} ${textStyles[level](title)}`);
99
- if (lines.length === 0) return;
100
- const prefix = prefixes[level] ?? prefixes.Info;
101
- const tag = tagForLevel(level);
102
- const tagPart = tag ? `${tag} ` : "";
103
- const consoleFn = buildConsole[logMethods[level] ?? "log"];
104
- if (typeof consoleFn !== "function") return;
105
- const invoke = (...args) => Reflect.apply(consoleFn, buildConsole, args);
106
- if (lines.length === 1) {
107
- invoke(` ${prefix} └ ${tagPart}${lines[0]}`);
108
- return;
109
- }
110
- lines.forEach((line, index) => {
111
- invoke(` ${prefix} ${index === lines.length - 1 ? "└" : "├"} ${tagPart}${line}`);
112
- });
113
- });
114
- }
115
- function setBuildLogTitle(level, title) {
116
- return Effect.sync(() => {
117
- buildLogState.level = level;
118
- buildLogState.title = title;
119
- });
120
- }
121
- function appendBuildLogLine(line) {
122
- return Effect.sync(() => {
123
- const trimmed = line.trim();
124
- if (trimmed.length === 0) return;
125
- buildLogState.lines.push(trimmed);
126
- });
127
- }
128
- function flushBuildLog() {
129
- return Effect.gen(function* () {
130
- if (!buildLogState.title || buildLogState.lines.length === 0) return;
131
- const level = buildLogState.level;
132
- const title = buildLogState.title;
133
- const lines = [...buildLogState.lines];
134
- buildLogState.level = "Info";
135
- buildLogState.title = null;
136
- buildLogState.lines = [];
137
- yield* logBuildResult(level, title, lines);
138
- });
139
- }
140
- function withBufferedBuildLog(level, title, use) {
141
- return Effect.acquireUseRelease(setBuildLogTitle(level, title), () => use((line) => appendBuildLogLine(line)), (_, _exit) => flushBuildLog());
142
- }
143
- const buildLogState = {
144
- level: "Info",
145
- title: null,
146
- lines: []
147
- };
148
- function shouldLog(level) {
149
- const minLevel = process.env.INTERFERE_PLUGIN_DEBUG === "1" ? LogLevel.Debug : InterfereLogger.minimumLevel();
150
- const currentLevel = LogLevel.fromLiteral(level);
151
- return LogLevel.greaterThanEqual(currentLevel, minLevel);
152
- }
153
-
154
- //#endregion
155
- export { appendBuildLogLine, flushBuildLog, logBuildResult, nextBuildLogger, setBuildLogTitle, withBufferedBuildLog };
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.mjs","names":["prefixes: Record<LogLevel.Literal, string>","textStyles: Record<LogLevel.Literal, ChalkInstance>","logMethods: Partial<Record<LogLevel.Literal, keyof Console>>","buildLogState: BuildLogState"],"sources":["../../src/build/logger.ts"],"sourcesContent":["import { InterfereLogger } from \"@interfere/effect-utils/observability\";\nimport chalk, { type ChalkInstance } from \"chalk\";\nimport { Cause, Effect, Logger, LogLevel } from \"effect\";\n\nconst buildConsole = globalThis.console;\n\nconst prefixes: Record<LogLevel.Literal, string> = {\n Info: chalk.cyan.bold(\" \"),\n Debug: chalk.gray.bold(\" \"),\n All: chalk.gray.bold(\" \"),\n Trace: chalk.magenta.bold(\" \"),\n Warning: chalk.yellow.bold(\"⚠\"),\n Error: chalk.red.bold(\"⨯\"),\n Fatal: chalk.red.bold(\"⨯\"),\n None: chalk.white.bold(\" \"),\n} as const;\n\nconst textStyles: Record<LogLevel.Literal, ChalkInstance> = {\n Info: chalk.cyan.bold,\n Debug: chalk.gray.bold,\n All: chalk.gray.bold,\n Trace: chalk.magenta.bold,\n Warning: chalk.yellow.bold,\n Error: chalk.red.bold,\n Fatal: chalk.red.bold,\n None: chalk.white.bold,\n}\n\nconst logMethods: Partial<Record<LogLevel.Literal, keyof Console>> = {\n Warning: \"warn\",\n Error: \"error\",\n};\n\nfunction tagForLevel(level: LogLevel.Literal) {\n switch (level) {\n case \"Error\":\n case \"Fatal\":\n return \"[error]\";\n case \"Warning\":\n return \"[warn]\";\n case \"Debug\":\n return \"[debug]\";\n default:\n return \"\";\n }\n}\n\nconst nextBuildLogger = Logger.make<unknown, void>(\n ({ logLevel, message, cause }) => {\n if (!shouldLog(logLevel._tag)) {\n return;\n }\n\n const renderedMessage = coerceToArray(message)\n .map(formatValue)\n .filter(Boolean)\n .join(\" \")\n .trim();\n\n if (renderedMessage.length > 0) {\n levelLog(logLevel._tag, renderedMessage);\n } else {\n levelLog(logLevel._tag);\n }\n\n if (!Cause.isEmpty(cause)) {\n levelLog(\n logLevel._tag,\n `${chalk.dim(\"details\")} ${Cause.pretty(cause, {\n renderErrorCause: true,\n })}`\n );\n }\n }\n);\n\n\n\nfunction systemLog(level: LogLevel.Literal, ...message: string[]) {\n if (!shouldLog(level)) {\n return;\n }\n\n const consoleMethod = logMethods[level] ?? \"log\";\n\n const consoleFn = buildConsole[consoleMethod];\n if (typeof consoleFn !== \"function\") {\n return;\n }\n\n const invoke = (...args: unknown[]) =>\n Reflect.apply(consoleFn, buildConsole, args);\n\n if (message.length === 0) {\n invoke(\"\");\n return;\n }\n\n if (message.length === 1) {\n invoke(` ${message[0]}`);\n return;\n }\n\n invoke(` `, ...message);\n}\n\nfunction coerceToArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.map(formatValue);\n }\n\n return [formatValue(value)];\n}\n\nfunction formatValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value instanceof Error) {\n return value.stack ?? value.message;\n }\n\n if (value === null || value === undefined) {\n return \"\";\n }\n\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport { nextBuildLogger };\n\nfunction levelLog(level: LogLevel.Literal, ...message: string[]) {\n if (!shouldLog(level)) {\n return;\n }\n\n const consoleMethod = logMethods[level] ?? \"log\";\n const prefix = prefixes[level] ?? prefixes.Info;\n const tag = tagForLevel(level);\n\n const consoleFn = buildConsole[consoleMethod];\n\n if (typeof consoleFn !== \"function\") {\n return;\n }\n\n const invoke = (...args: unknown[]) =>\n Reflect.apply(consoleFn, buildConsole, args);\n\n if (message.length === 0) {\n invoke(\"\");\n return;\n }\n\n const tagPart = tag ? ` ${tag}` : \"\";\n\n if (message.length === 1) {\n invoke(` ${prefix}${tagPart} ${message[0]}`);\n return;\n }\n\n invoke(` ${prefix}${tagPart}`, ...message);\n}\n\nexport function logBuildResult(level: LogLevel.Literal, title: string, lines: string[]) {\n if (!shouldLog(level)) {\n return Effect.void;\n }\n\n return Effect.sync(() => {\n systemLog(level, `❖ ${chalk.white(\"Interfere →\")} ${textStyles[level](title)}`);\n\n if (lines.length === 0) {\n return;\n }\n\n const prefix = prefixes[level] ?? prefixes.Info;\n const tag = tagForLevel(level);\n const tagPart = tag ? `${tag} ` : \"\";\n const consoleMethod = logMethods[level] ?? \"log\";\n const consoleFn = buildConsole[consoleMethod];\n\n if (typeof consoleFn !== \"function\") {\n return;\n }\n\n const invoke = (...args: unknown[]) =>\n Reflect.apply(consoleFn, buildConsole, args);\n\n if (lines.length === 1) {\n // Single line - connector plus tag after the connector\n const connector = \"└\";\n invoke(` ${prefix} ${connector} ${tagPart}${lines[0]}`);\n return;\n }\n\n // Multi-line - tree structure with connectors and tag after connector\n lines.forEach((line, index) => {\n const isLast = index === lines.length - 1;\n const connector = isLast ? \"└\" : \"├\";\n invoke(` ${prefix} ${connector} ${tagPart}${line}`);\n });\n });\n}\n\nexport function setBuildLogTitle(\n level: LogLevel.Literal,\n title: string\n) {\n return Effect.sync(() => {\n buildLogState.level = level;\n buildLogState.title = title;\n });\n}\n\nexport function appendBuildLogLine(line: string) {\n return Effect.sync(() => {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n return;\n }\n\n buildLogState.lines.push(trimmed);\n });\n}\n\nexport function flushBuildLog() {\n return Effect.gen(function* () {\n if (!buildLogState.title || buildLogState.lines.length === 0) {\n return;\n }\n\n const level = buildLogState.level;\n const title = buildLogState.title;\n const lines = [...buildLogState.lines];\n\n // Reset state before logging in case logging itself fails\n buildLogState.level = \"Info\";\n buildLogState.title = null;\n buildLogState.lines = [];\n\n yield* logBuildResult(level, title, lines);\n });\n}\n\nexport function withBufferedBuildLog(\n level: LogLevel.Literal,\n title: string,\n use: (\n log: (line: string) => ReturnType<typeof appendBuildLogLine>\n ) => Effect.Effect<unknown, unknown, unknown>\n) {\n return Effect.acquireUseRelease(\n setBuildLogTitle(level, title),\n () => use((line) => appendBuildLogLine(line)),\n (_, _exit) => flushBuildLog()\n );\n}\n\ntype BuildLogState = {\n level: LogLevel.Literal;\n title: string | null;\n lines: string[];\n};\n\nconst buildLogState: BuildLogState = {\n level: \"Info\",\n title: null,\n lines: [],\n};\n\nfunction shouldLog(level: LogLevel.Literal) {\n const debugEnabled = process.env.INTERFERE_PLUGIN_DEBUG === \"1\";\n const minLevel = debugEnabled ? LogLevel.Debug : InterfereLogger.minimumLevel();\n const currentLevel = LogLevel.fromLiteral(level);\n return LogLevel.greaterThanEqual(currentLevel, minLevel);\n}\n\n"],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { PreflightConfig } from "../lib/types.mjs";
2
- import { ConfigService } from "./services/config.service.mjs";
3
- import { ReleaseIdentityService } from "./services/release-identity.service.mjs";
4
- import { SourceMapService } from "./services/source-map.service.mjs";
5
- import { Effect, Layer } from "effect";
6
-
7
- //#region src/build/release-program.d.ts
8
-
9
- /**
10
- * The main release upload program.
11
- * This is a single Effect that orchestrates the entire release process.
12
- */
13
- declare const releaseProgram: Effect.Effect<unknown, unknown, unknown>;
14
- /**
15
- * Create the layer stack for the release program
16
- */
17
- declare const createReleaseLayers: (config: PreflightConfig) => Layer.Layer<ConfigService | SourceMapService | ReleaseIdentityService, never, never>;
18
- //#endregion
19
- export { createReleaseLayers, releaseProgram };
@@ -1 +0,0 @@
1
- {"version":3,"file":"release-program.d.mts","names":[],"sources":["../../src/build/release-program.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AAuBA;AA6IA;AAA4C,cA7I/B,cA6I+B,EA7IjB,MAAA,CAAA,MA6IiB,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,CAAA;;;;AAAe,cAA9C,mBAA8C,EAAA,CAAA,MAAA,EAAf,eAAe,EAAA,GAAA,KAAA,CAAA,KAAA,CAAA,aAAA,GAAA,gBAAA,GAAA,sBAAA,EAAA,KAAA,EAAA,KAAA,CAAA"}