@interfere/next 0.0.14 → 0.0.15-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +1 -6
  2. package/dist/build/env-config.d.mts +7 -0
  3. package/dist/build/env-config.d.mts.map +1 -0
  4. package/dist/build/env-config.mjs +17 -0
  5. package/dist/build/env-config.mjs.map +1 -0
  6. package/dist/build/logger.d.mts +11 -0
  7. package/dist/build/logger.d.mts.map +1 -0
  8. package/dist/build/logger.mjs +155 -0
  9. package/dist/build/logger.mjs.map +1 -0
  10. package/dist/build/release-program.d.mts +19 -0
  11. package/dist/build/release-program.d.mts.map +1 -0
  12. package/dist/build/release-program.mjs +92 -0
  13. package/dist/build/release-program.mjs.map +1 -0
  14. package/dist/build/secret-key.d.mts +10 -0
  15. package/dist/build/secret-key.d.mts.map +1 -0
  16. package/dist/build/secret-key.mjs +16 -0
  17. package/dist/build/secret-key.mjs.map +1 -0
  18. package/dist/build/services/config.service.d.mts +9 -0
  19. package/dist/build/services/config.service.d.mts.map +1 -0
  20. package/dist/build/services/config.service.mjs +8 -0
  21. package/dist/build/services/config.service.mjs.map +1 -0
  22. package/dist/build/services/preflight.service.d.mts +19 -0
  23. package/dist/build/services/preflight.service.d.mts.map +1 -0
  24. package/dist/build/services/preflight.service.mjs +76 -0
  25. package/dist/build/services/preflight.service.mjs.map +1 -0
  26. package/dist/build/services/release-identity.service.d.mts +22 -0
  27. package/dist/build/services/release-identity.service.d.mts.map +1 -0
  28. package/dist/build/services/release-identity.service.mjs +48 -0
  29. package/dist/build/services/release-identity.service.mjs.map +1 -0
  30. package/dist/build/services/source-map.service.d.mts +24 -0
  31. package/dist/build/services/source-map.service.d.mts.map +1 -0
  32. package/dist/build/services/source-map.service.mjs +58 -0
  33. package/dist/build/services/source-map.service.mjs.map +1 -0
  34. package/dist/build/source-maps/api.d.mts +35 -0
  35. package/dist/build/source-maps/api.d.mts.map +1 -0
  36. package/dist/build/source-maps/api.mjs +61 -0
  37. package/dist/build/source-maps/api.mjs.map +1 -0
  38. package/dist/build/source-maps/client.d.mts +73 -0
  39. package/dist/build/source-maps/client.d.mts.map +1 -0
  40. package/dist/build/source-maps/client.mjs +228 -0
  41. package/dist/build/source-maps/client.mjs.map +1 -0
  42. package/dist/build/source-maps/errors.d.mts +109 -0
  43. package/dist/build/source-maps/errors.d.mts.map +1 -0
  44. package/dist/build/source-maps/errors.mjs +22 -0
  45. package/dist/build/source-maps/errors.mjs.map +1 -0
  46. package/dist/build/source-maps/files.d.mts +35 -0
  47. package/dist/build/source-maps/files.d.mts.map +1 -0
  48. package/dist/build/source-maps/files.mjs +222 -0
  49. package/dist/build/source-maps/files.mjs.map +1 -0
  50. package/dist/build/source-maps/providers/deployment/detector.d.mts +26 -0
  51. package/dist/build/source-maps/providers/deployment/detector.d.mts.map +1 -0
  52. package/dist/build/source-maps/providers/deployment/detector.mjs +22 -0
  53. package/dist/build/source-maps/providers/deployment/detector.mjs.map +1 -0
  54. package/dist/build/source-maps/providers/deployment/types.d.mts +12 -0
  55. package/dist/build/source-maps/providers/deployment/types.d.mts.map +1 -0
  56. package/dist/build/source-maps/providers/deployment/types.mjs +3 -0
  57. package/dist/build/source-maps/providers/deployment/vercel.d.mts +6 -0
  58. package/dist/build/source-maps/providers/deployment/vercel.d.mts.map +1 -0
  59. package/dist/build/source-maps/providers/deployment/vercel.mjs +44 -0
  60. package/dist/build/source-maps/providers/deployment/vercel.mjs.map +1 -0
  61. package/dist/build/source-maps/providers/source-control/detector.d.mts +15 -0
  62. package/dist/build/source-maps/providers/source-control/detector.d.mts.map +1 -0
  63. package/dist/build/source-maps/providers/source-control/detector.mjs +22 -0
  64. package/dist/build/source-maps/providers/source-control/detector.mjs.map +1 -0
  65. package/dist/build/source-maps/providers/source-control/git.d.mts +6 -0
  66. package/dist/build/source-maps/providers/source-control/git.d.mts.map +1 -0
  67. package/dist/build/source-maps/providers/source-control/git.mjs +50 -0
  68. package/dist/build/source-maps/providers/source-control/git.mjs.map +1 -0
  69. package/dist/build/source-maps/providers/source-control/types.d.mts +12 -0
  70. package/dist/build/source-maps/providers/source-control/types.d.mts.map +1 -0
  71. package/dist/build/source-maps/providers/source-control/types.mjs +3 -0
  72. package/dist/build/with-interfere.d.mts +49 -0
  73. package/dist/build/with-interfere.d.mts.map +1 -0
  74. package/dist/build/with-interfere.mjs +75 -0
  75. package/dist/build/with-interfere.mjs.map +1 -0
  76. package/dist/client/client.d.mts +3 -0
  77. package/dist/client/client.mjs +5 -0
  78. package/dist/client/provider.d.mts +22 -0
  79. package/dist/client/provider.d.mts.map +1 -0
  80. package/dist/client/provider.mjs +33 -0
  81. package/dist/client/provider.mjs.map +1 -0
  82. package/dist/lib/env.d.mts +12 -0
  83. package/dist/lib/env.d.mts.map +1 -0
  84. package/dist/lib/env.mjs +17 -0
  85. package/dist/lib/env.mjs.map +1 -0
  86. package/dist/lib/test-utils/make-next-request.d.mts +6 -0
  87. package/dist/lib/test-utils/make-next-request.d.mts.map +1 -0
  88. package/dist/lib/test-utils/make-next-request.mjs +12 -0
  89. package/dist/lib/test-utils/make-next-request.mjs.map +1 -0
  90. package/dist/lib/types.d.mts +22 -0
  91. package/dist/lib/types.d.mts.map +1 -0
  92. package/dist/lib/types.mjs +7 -0
  93. package/dist/lib/types.mjs.map +1 -0
  94. package/dist/server/middleware.d.mts +11 -0
  95. package/dist/server/middleware.d.mts.map +1 -0
  96. package/dist/server/middleware.mjs +84 -0
  97. package/dist/server/middleware.mjs.map +1 -0
  98. package/dist/server/proxy.d.mts +6 -0
  99. package/dist/server/proxy.d.mts.map +1 -0
  100. package/dist/server/proxy.mjs +29 -0
  101. package/dist/server/proxy.mjs.map +1 -0
  102. package/dist/server/route-handler.d.mts +9 -0
  103. package/dist/server/route-handler.d.mts.map +1 -0
  104. package/dist/server/route-handler.mjs +172 -0
  105. package/dist/server/route-handler.mjs.map +1 -0
  106. package/dist/server/services/config.service.d.mts +21 -0
  107. package/dist/server/services/config.service.d.mts.map +1 -0
  108. package/dist/server/services/config.service.mjs +43 -0
  109. package/dist/server/services/config.service.mjs.map +1 -0
  110. package/dist/server/services/error-tracking.service.d.mts +19 -0
  111. package/dist/server/services/error-tracking.service.d.mts.map +1 -0
  112. package/dist/server/services/error-tracking.service.mjs +31 -0
  113. package/dist/server/services/error-tracking.service.mjs.map +1 -0
  114. package/package.json +67 -36
  115. package/dist/__tests__/build/with-interfere-coverage.test.d.ts +0 -2
  116. package/dist/__tests__/build/with-interfere-coverage.test.d.ts.map +0 -1
  117. package/dist/__tests__/build/with-interfere-coverage.test.js +0 -295
  118. package/dist/__tests__/build/with-interfere-coverage.test.js.map +0 -1
  119. package/dist/__tests__/build/with-interfere.test.d.ts +0 -2
  120. package/dist/__tests__/build/with-interfere.test.d.ts.map +0 -1
  121. package/dist/__tests__/build/with-interfere.test.js +0 -363
  122. package/dist/__tests__/build/with-interfere.test.js.map +0 -1
  123. package/dist/__tests__/core/client.test.d.ts +0 -2
  124. package/dist/__tests__/core/client.test.d.ts.map +0 -1
  125. package/dist/__tests__/core/client.test.js +0 -373
  126. package/dist/__tests__/core/client.test.js.map +0 -1
  127. package/dist/__tests__/core/encoders.test.d.ts +0 -2
  128. package/dist/__tests__/core/encoders.test.d.ts.map +0 -1
  129. package/dist/__tests__/core/encoders.test.js +0 -56
  130. package/dist/__tests__/core/encoders.test.js.map +0 -1
  131. package/dist/__tests__/core/rage-click.test.d.ts +0 -2
  132. package/dist/__tests__/core/rage-click.test.d.ts.map +0 -1
  133. package/dist/__tests__/core/rage-click.test.js +0 -121
  134. package/dist/__tests__/core/rage-click.test.js.map +0 -1
  135. package/dist/__tests__/core/session-manager.test.d.ts +0 -2
  136. package/dist/__tests__/core/session-manager.test.d.ts.map +0 -1
  137. package/dist/__tests__/core/session-manager.test.js +0 -1168
  138. package/dist/__tests__/core/session-manager.test.js.map +0 -1
  139. package/dist/__tests__/integration/release-upload.test.d.ts +0 -2
  140. package/dist/__tests__/integration/release-upload.test.d.ts.map +0 -1
  141. package/dist/__tests__/integration/release-upload.test.js +0 -153
  142. package/dist/__tests__/integration/release-upload.test.js.map +0 -1
  143. package/dist/__tests__/provider.test.d.ts +0 -2
  144. package/dist/__tests__/provider.test.d.ts.map +0 -1
  145. package/dist/__tests__/provider.test.js +0 -84
  146. package/dist/__tests__/provider.test.js.map +0 -1
  147. package/dist/__tests__/session/persistence.test.d.ts +0 -2
  148. package/dist/__tests__/session/persistence.test.d.ts.map +0 -1
  149. package/dist/__tests__/session/persistence.test.js +0 -129
  150. package/dist/__tests__/session/persistence.test.js.map +0 -1
  151. package/dist/__tests__/session/session-summary.test.d.ts +0 -2
  152. package/dist/__tests__/session/session-summary.test.d.ts.map +0 -1
  153. package/dist/__tests__/session/session-summary.test.js +0 -763
  154. package/dist/__tests__/session/session-summary.test.js.map +0 -1
  155. package/dist/client.d.ts +0 -75
  156. package/dist/client.d.ts.map +0 -1
  157. package/dist/client.js +0 -123
  158. package/dist/client.js.map +0 -1
  159. package/dist/config.d.ts +0 -40
  160. package/dist/config.d.ts.map +0 -1
  161. package/dist/config.js +0 -340
  162. package/dist/config.js.map +0 -1
  163. package/dist/index.d.ts +0 -37
  164. package/dist/index.d.ts.map +0 -1
  165. package/dist/index.js +0 -49
  166. package/dist/index.js.map +0 -1
  167. package/dist/index.jsx +0 -87
  168. package/dist/index.jsx.map +0 -1
  169. package/dist/lib/core/client-core.d.ts +0 -27
  170. package/dist/lib/core/client-core.d.ts.map +0 -1
  171. package/dist/lib/core/client-core.js +0 -152
  172. package/dist/lib/core/client-core.js.map +0 -1
  173. package/dist/lib/core/constants.d.ts +0 -12
  174. package/dist/lib/core/constants.d.ts.map +0 -1
  175. package/dist/lib/core/constants.js +0 -17
  176. package/dist/lib/core/constants.js.map +0 -1
  177. package/dist/lib/core/debug.d.ts +0 -47
  178. package/dist/lib/core/debug.d.ts.map +0 -1
  179. package/dist/lib/core/debug.js +0 -79
  180. package/dist/lib/core/debug.js.map +0 -1
  181. package/dist/lib/core/encoders.d.ts +0 -3
  182. package/dist/lib/core/encoders.d.ts.map +0 -1
  183. package/dist/lib/core/encoders.js +0 -5
  184. package/dist/lib/core/encoders.js.map +0 -1
  185. package/dist/lib/core/error-handlers.d.ts +0 -14
  186. package/dist/lib/core/error-handlers.d.ts.map +0 -1
  187. package/dist/lib/core/error-handlers.js +0 -191
  188. package/dist/lib/core/error-handlers.js.map +0 -1
  189. package/dist/lib/core/runtime.d.ts +0 -7
  190. package/dist/lib/core/runtime.d.ts.map +0 -1
  191. package/dist/lib/core/runtime.js +0 -16
  192. package/dist/lib/core/runtime.js.map +0 -1
  193. package/dist/lib/persistence/storage.d.ts +0 -5
  194. package/dist/lib/persistence/storage.d.ts.map +0 -1
  195. package/dist/lib/persistence/storage.js +0 -67
  196. package/dist/lib/persistence/storage.js.map +0 -1
  197. package/dist/lib/session/constants.d.ts +0 -19
  198. package/dist/lib/session/constants.d.ts.map +0 -1
  199. package/dist/lib/session/constants.js +0 -34
  200. package/dist/lib/session/constants.js.map +0 -1
  201. package/dist/lib/session/persistence.d.ts +0 -58
  202. package/dist/lib/session/persistence.d.ts.map +0 -1
  203. package/dist/lib/session/persistence.js +0 -179
  204. package/dist/lib/session/persistence.js.map +0 -1
  205. package/dist/lib/session/rage-click.d.ts +0 -17
  206. package/dist/lib/session/rage-click.d.ts.map +0 -1
  207. package/dist/lib/session/rage-click.js +0 -104
  208. package/dist/lib/session/rage-click.js.map +0 -1
  209. package/dist/lib/session/replay.d.ts +0 -3
  210. package/dist/lib/session/replay.d.ts.map +0 -1
  211. package/dist/lib/session/replay.js +0 -109
  212. package/dist/lib/session/replay.js.map +0 -1
  213. package/dist/lib/session/session-manager.d.ts +0 -126
  214. package/dist/lib/session/session-manager.d.ts.map +0 -1
  215. package/dist/lib/session/session-manager.js +0 -635
  216. package/dist/lib/session/session-manager.js.map +0 -1
  217. package/dist/lib/session/session-summary.d.ts +0 -3
  218. package/dist/lib/session/session-summary.d.ts.map +0 -1
  219. package/dist/lib/session/session-summary.js +0 -214
  220. package/dist/lib/session/session-summary.js.map +0 -1
  221. package/dist/middleware.d.ts +0 -8
  222. package/dist/middleware.d.ts.map +0 -1
  223. package/dist/middleware.js +0 -139
  224. package/dist/middleware.js.map +0 -1
  225. package/dist/types/storage.d.ts +0 -7
  226. package/dist/types/storage.d.ts.map +0 -1
  227. package/dist/types/storage.js +0 -2
  228. package/dist/types/storage.js.map +0 -1
  229. package/dist/types.d.ts +0 -6
  230. package/dist/types.d.ts.map +0 -1
  231. package/dist/types.js +0 -4
  232. package/dist/types.js.map +0 -1
@@ -0,0 +1,109 @@
1
+ import * as effect_Types0 from "effect/Types";
2
+ import * as effect_Cause0 from "effect/Cause";
3
+
4
+ //#region src/build/source-maps/errors.d.ts
5
+ declare const InvalidApiUrlError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
6
+ readonly _tag: "InvalidApiUrlError";
7
+ } & Readonly<A>;
8
+ declare class InvalidApiUrlError extends InvalidApiUrlError_base<{
9
+ readonly message: string;
10
+ }> {}
11
+ declare const InvalidSecretKeyError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
12
+ readonly _tag: "InvalidSecretKeyError";
13
+ } & Readonly<A>;
14
+ declare class InvalidSecretKeyError extends InvalidSecretKeyError_base<{
15
+ readonly message: string;
16
+ }> {}
17
+ declare const UploadError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
18
+ readonly _tag: "UploadError";
19
+ } & Readonly<A>;
20
+ declare class UploadError extends UploadError_base<{
21
+ readonly file?: string;
22
+ readonly message: string;
23
+ readonly cause?: unknown;
24
+ }> {}
25
+ declare const TokenRequestError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
26
+ readonly _tag: "TokenRequestError";
27
+ } & Readonly<A>;
28
+ declare class TokenRequestError extends TokenRequestError_base<{
29
+ readonly message: string;
30
+ }> {}
31
+ declare const NotificationError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
32
+ readonly _tag: "NotificationError";
33
+ } & Readonly<A>;
34
+ declare class NotificationError extends NotificationError_base<{
35
+ readonly status?: number;
36
+ readonly message: string;
37
+ }> {}
38
+ declare const PayloadTooLargeError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
39
+ readonly _tag: "PayloadTooLargeError";
40
+ } & Readonly<A>;
41
+ declare class PayloadTooLargeError extends PayloadTooLargeError_base<{
42
+ readonly message: string;
43
+ }> {}
44
+ declare const NoDeploymentError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
45
+ readonly _tag: "NoDeploymentError";
46
+ } & Readonly<A>;
47
+ declare class NoDeploymentError extends NoDeploymentError_base<{
48
+ readonly message: string;
49
+ }> {}
50
+ declare const NoBuildIdError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
51
+ readonly _tag: "NoBuildIdError";
52
+ } & Readonly<A>;
53
+ declare class NoBuildIdError extends NoBuildIdError_base<{
54
+ readonly message: string;
55
+ }> {}
56
+ declare const WithInterfereUsageError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
57
+ readonly _tag: "WithInterfereUsageError";
58
+ } & Readonly<A>;
59
+ declare class WithInterfereUsageError extends WithInterfereUsageError_base<{
60
+ readonly message: string;
61
+ }> {}
62
+ declare const MissingBuildIdError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
63
+ readonly _tag: "MissingBuildIdError";
64
+ } & Readonly<A>;
65
+ declare class MissingBuildIdError extends MissingBuildIdError_base<{
66
+ readonly message: string;
67
+ }> {}
68
+ declare const MissingReleaseIdError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
69
+ readonly _tag: "MissingReleaseIdError";
70
+ } & Readonly<A>;
71
+ declare class MissingReleaseIdError extends MissingReleaseIdError_base<{
72
+ readonly message: string;
73
+ }> {}
74
+ declare const FileReadError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
75
+ readonly _tag: "FileReadError";
76
+ } & Readonly<A>;
77
+ declare class FileReadError extends FileReadError_base<{
78
+ readonly message: string;
79
+ readonly path: string;
80
+ }> {}
81
+ declare const FileGlobError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
82
+ readonly _tag: "FileGlobError";
83
+ } & Readonly<A>;
84
+ declare class FileGlobError extends FileGlobError_base<{
85
+ readonly message: string;
86
+ readonly pattern: string;
87
+ }> {}
88
+ declare const FileDeleteError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
89
+ readonly _tag: "FileDeleteError";
90
+ } & Readonly<A>;
91
+ declare class FileDeleteError extends FileDeleteError_base<{
92
+ readonly message: string;
93
+ readonly path: string;
94
+ }> {}
95
+ declare const FileHashError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
96
+ readonly _tag: "FileHashError";
97
+ } & Readonly<A>;
98
+ declare class FileHashError extends FileHashError_base<{
99
+ readonly message: string;
100
+ readonly path: string;
101
+ }> {}
102
+ declare const SourceControlDetectionError_base: new <A extends Record<string, any> = {}>(args: effect_Types0.Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }) => effect_Cause0.YieldableError & {
103
+ readonly _tag: "SourceControlDetectionError";
104
+ } & Readonly<A>;
105
+ declare class SourceControlDetectionError extends SourceControlDetectionError_base<{
106
+ readonly message: string;
107
+ }> {}
108
+ //#endregion
109
+ export { FileDeleteError, FileGlobError, FileHashError, FileReadError, InvalidApiUrlError, InvalidSecretKeyError, MissingBuildIdError, MissingReleaseIdError, NoBuildIdError, NoDeploymentError, NotificationError, PayloadTooLargeError, SourceControlDetectionError, TokenRequestError, UploadError, WithInterfereUsageError };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.mts","names":[],"sources":["../../../src/build/source-maps/errors.ts"],"sourcesContent":[],"mappings":";;;;;;;cAGa,kBAAA,SAA2B;;;cAEnC;;;cAEQ,qBAAA,SAA8B;;;cAEtC;;;AANQ,cAQA,WAAA,SAAoB,gBARO,CAAA;EAEnC,SAAA,IAAA,CAAA,EAAA,MAAA;;;;cAUA;;;cAEQ,iBAAA,SAA0B;;;cAGtC;EAbY,SAAA,IAAA,EAAA,mBAAsB;AAE9B,CAAA,WAAA,EAAA,CAAA;cAaQ,iBAAA,SAA0B;;;;cAItC;;;cAEY,oBAAA,SAA6B;;;AAjB1C,cAmBK,sBAnB4B,EAAA,IAAA,CAAA,gBAAA,CAAA,MAAA,EAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,IAAA,sBAAA,EAAA,EAAA,CAAA,CAAA,CAAA,SAAA,IAAA,GAAA,IAAA,GAAA,iBAAA,OAAA,KAAA,SAAA,MAAA,GAAA,KAAA,IAAA,IAAA,EAAA,CAAA,EAAA,EAAA,kCAAA;EAI5B,SAAA,IAAA,EAAA,mBAAA;;cAkBQ,iBAAA,SAA0B;;;cAElC;;;cAEQ,cAAA,SAAuB;;;AApBpC,cAsBK,4BAtBkC,EAAA,IAAA,CAAA,gBAAA,CAAA,MAAA,EAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,IAAA,sBAAA,EAAA,EAAA,CAAA,CAAA,CAAA,SAAA,IAAA,GAAA,IAAA,GAAA,iBAAA,OAAA,KAAA,SAAA,MAAA,GAAA,KAAA,IAAA,IAAA,EAAA,CAAA,EAAA,EAAA,kCAAA;EAGtC,SAAA,IAAA,EAAA,yBAAA;;cAsBY,uBAAA,SAAgC;;;cAExC;;;cAEQ,mBAAA,SAA4B;;;AAxBzC,cA0BK,0BA1BkC,EAAA,IAAA,CAAA,gBAAA,CAAA,MAAA,EAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,IAAA,sBAAA,EAAA,EAAA,CAAA,CAAA,CAAA,SAAA,IAAA,GAAA,IAAA,GAAA,iBAAA,OAAA,KAAA,SAAA,MAAA,GAAA,KAAA,IAAA,IAAA,EAAA,CAAA,EAAA,EAAA,kCAAA;EAItC,SAAA,IAAA,EAAA,uBAAA;;cAwBY,qBAAA,SAA8B;;;cAEtC;;;cAGQ,aAAA,SAAsB;;;;AAzB9B,cA4BA,kBA5BA,EAAA,IAAA,CAAA,gBAAA,CAAA,MAAA,EAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,IAAA,sBAAA,EAAA,EAAA,CAAA,CAAA,CAAA,SAAA,IAAA,GAAA,IAAA,GAAA,iBAAA,OAAA,KAAA,SAAA,MAAA,GAAA,KAAA,IAAA,IAAA,EAAA,CAAA,EAAA,EAAA,kCAAA;;;cA8BQ,aAAA,SAAsB;;;;cAG9B;;;cAEQ,eAAA,SAAwB;;EAhCxB,SAAA,IAAA,EAAA,MAAkB;AAE1B,CAAA,CAAA,CAAA;cAiCA;;;cAEQ,aAAA,SAAsB;;;;cAG9B;;;AApCQ,cAsCA,2BAAA,SAAoC,gCAtCb,CAAA;EAE/B,SAAA,OAAA,EAAA,MAAA"}
@@ -0,0 +1,22 @@
1
+ import { Data } from "effect";
2
+
3
+ //#region src/build/source-maps/errors.ts
4
+ var InvalidApiUrlError = class extends Data.TaggedError("InvalidApiUrlError") {};
5
+ var InvalidSecretKeyError = class extends Data.TaggedError("InvalidSecretKeyError") {};
6
+ var UploadError = class extends Data.TaggedError("UploadError") {};
7
+ var TokenRequestError = class extends Data.TaggedError("TokenRequestError") {};
8
+ var NotificationError = class extends Data.TaggedError("NotificationError") {};
9
+ var PayloadTooLargeError = class extends Data.TaggedError("PayloadTooLargeError") {};
10
+ var NoDeploymentError = class extends Data.TaggedError("NoDeploymentError") {};
11
+ var NoBuildIdError = class extends Data.TaggedError("NoBuildIdError") {};
12
+ var WithInterfereUsageError = class extends Data.TaggedError("WithInterfereUsageError") {};
13
+ var MissingBuildIdError = class extends Data.TaggedError("MissingBuildIdError") {};
14
+ var MissingReleaseIdError = class extends Data.TaggedError("MissingReleaseIdError") {};
15
+ var FileReadError = class extends Data.TaggedError("FileReadError") {};
16
+ var FileGlobError = class extends Data.TaggedError("FileGlobError") {};
17
+ var FileDeleteError = class extends Data.TaggedError("FileDeleteError") {};
18
+ var FileHashError = class extends Data.TaggedError("FileHashError") {};
19
+ var SourceControlDetectionError = class extends Data.TaggedError("SourceControlDetectionError") {};
20
+
21
+ //#endregion
22
+ export { FileDeleteError, FileGlobError, FileHashError, FileReadError, InvalidApiUrlError, InvalidSecretKeyError, MissingBuildIdError, MissingReleaseIdError, NoBuildIdError, NoDeploymentError, NotificationError, PayloadTooLargeError, SourceControlDetectionError, TokenRequestError, UploadError, WithInterfereUsageError };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.mjs","names":[],"sources":["../../../src/build/source-maps/errors.ts"],"sourcesContent":["import { Data } from \"effect\";\n\n// API-related errors\nexport class InvalidApiUrlError extends Data.TaggedError(\"InvalidApiUrlError\")<{\n readonly message: string;\n}> {}\n\nexport class InvalidSecretKeyError extends Data.TaggedError(\"InvalidSecretKeyError\")<{\n readonly message: string;\n}> {}\n\nexport class UploadError extends Data.TaggedError(\"UploadError\")<{\n readonly file?: string;\n readonly message: string;\n readonly cause?: unknown;\n}> {}\n\nexport class TokenRequestError extends Data.TaggedError(\"TokenRequestError\")<{\n readonly message: string;\n}> {\n}\n\nexport class NotificationError extends Data.TaggedError(\"NotificationError\")<{\n readonly status?: number;\n readonly message: string;\n}> {\n}\n\nexport class PayloadTooLargeError extends Data.TaggedError(\"PayloadTooLargeError\")<{\n readonly message: string;\n}> {}\n\n// Deployment and build errors\nexport class NoDeploymentError extends Data.TaggedError(\"NoDeploymentError\")<{\n readonly message: string;\n}> {}\n\nexport class NoBuildIdError extends Data.TaggedError(\"NoBuildIdError\")<{\n readonly message: string;\n}> {}\n\n// Configuration errors\nexport class WithInterfereUsageError extends Data.TaggedError(\"WithInterfereUsageError\")<{\n readonly message: string;\n}> {}\n\nexport class MissingBuildIdError extends Data.TaggedError(\"MissingBuildIdError\")<{\n readonly message: string;\n}> {}\n\nexport class MissingReleaseIdError extends Data.TaggedError(\"MissingReleaseIdError\")<{\n readonly message: string;\n}> {}\n\n// File system operation errors\nexport class FileReadError extends Data.TaggedError(\"FileReadError\")<{\n readonly message: string;\n readonly path: string;\n}> {}\n\nexport class FileGlobError extends Data.TaggedError(\"FileGlobError\")<{\n readonly message: string;\n readonly pattern: string;\n}> {}\n\nexport class FileDeleteError extends Data.TaggedError(\"FileDeleteError\")<{\n readonly message: string;\n readonly path: string;\n}> {}\n\nexport class FileHashError extends Data.TaggedError(\"FileHashError\")<{\n readonly message: string;\n readonly path: string;\n}> {}\n\nexport class SourceControlDetectionError extends Data.TaggedError(\"SourceControlDetectionError\")<{\n readonly message: string;\n}> {}\n"],"mappings":";;;AAGA,IAAa,qBAAb,cAAwC,KAAK,YAAY,qBAAqB,CAE3E;AAEH,IAAa,wBAAb,cAA2C,KAAK,YAAY,wBAAwB,CAEjF;AAEH,IAAa,cAAb,cAAiC,KAAK,YAAY,cAAc,CAI7D;AAEH,IAAa,oBAAb,cAAuC,KAAK,YAAY,oBAAoB,CAEzE;AAGH,IAAa,oBAAb,cAAuC,KAAK,YAAY,oBAAoB,CAGzE;AAGH,IAAa,uBAAb,cAA0C,KAAK,YAAY,uBAAuB,CAE/E;AAGH,IAAa,oBAAb,cAAuC,KAAK,YAAY,oBAAoB,CAEzE;AAEH,IAAa,iBAAb,cAAoC,KAAK,YAAY,iBAAiB,CAEnE;AAGH,IAAa,0BAAb,cAA6C,KAAK,YAAY,0BAA0B,CAErF;AAEH,IAAa,sBAAb,cAAyC,KAAK,YAAY,sBAAsB,CAE7E;AAEH,IAAa,wBAAb,cAA2C,KAAK,YAAY,wBAAwB,CAEjF;AAGH,IAAa,gBAAb,cAAmC,KAAK,YAAY,gBAAgB,CAGjE;AAEH,IAAa,gBAAb,cAAmC,KAAK,YAAY,gBAAgB,CAGjE;AAEH,IAAa,kBAAb,cAAqC,KAAK,YAAY,kBAAkB,CAGrE;AAEH,IAAa,gBAAb,cAAmC,KAAK,YAAY,gBAAgB,CAGjE;AAEH,IAAa,8BAAb,cAAiD,KAAK,YAAY,8BAA8B,CAE7F"}
@@ -0,0 +1,35 @@
1
+ import { FileDeleteError, FileGlobError, FileHashError, FileReadError } from "./errors.mjs";
2
+ import { Effect } from "effect";
3
+
4
+ //#region src/build/source-maps/files.d.ts
5
+ declare function findSourceMapFiles(): Effect.Effect<string[], FileGlobError, never>;
6
+ declare function readSourceMapsFromFiles(paths: string[]): Effect.Effect<{
7
+ relativePath: string;
8
+ content: string;
9
+ hash: string;
10
+ }[], FileReadError | FileHashError, never>;
11
+ declare function cleanupSourceMaps(paths: string[], debug: boolean): Effect.Effect<void, never, never> | Effect.Effect<undefined, FileDeleteError, never>;
12
+ declare function maybeCleanupAfterFailure(debug: boolean): Effect.Effect<void, FileGlobError | FileDeleteError, never>;
13
+ /**
14
+ * Find all generated JavaScript files (excluding source maps)
15
+ */
16
+ declare function findGeneratedJsFiles(): Effect.Effect<string[], FileGlobError, never>;
17
+ /**
18
+ * Read generated JS files and extract sourceMappingURL to build a mapping.
19
+ * Returns a map: sourceMapFilename -> generatedJsFilePath
20
+ *
21
+ * Both keys and values are in public URL format (_next/...) to match
22
+ * what appears in error stack traces, making the backend framework-agnostic.
23
+ */
24
+ declare function buildSourceMapToGeneratedMapping(paths: string[]): Effect.Effect<Record<string, string>, FileReadError, never>;
25
+ /**
26
+ * Read generated JS files from disk
27
+ * @deprecated Use buildSourceMapToGeneratedMapping instead - we no longer upload JS files
28
+ */
29
+ declare function readGeneratedJsFiles(paths: string[]): Effect.Effect<{
30
+ relativePath: string;
31
+ content: string;
32
+ hash: string;
33
+ }[], FileReadError | FileHashError, never>;
34
+ //#endregion
35
+ export { buildSourceMapToGeneratedMapping, cleanupSourceMaps, findGeneratedJsFiles, findSourceMapFiles, maybeCleanupAfterFailure, readGeneratedJsFiles, readSourceMapsFromFiles };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.mts","names":[],"sources":["../../../src/build/source-maps/files.ts"],"sourcesContent":[],"mappings":";;;;iBAqBgB,kBAAA,CAAA,GAAkB,MAAA,CAAA,iBAAA;iBAclB,uBAAA,mBAAuC,MAAA,CAAA;EAdvC,YAAA,EAAA,MAAA;EAcA,OAAA,EAAA,MAAA;;;AAAuC,iBAoCvC,iBAAA,CApCuC,KAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,CAAA,EAoCU,MAAA,CAAA,MApCV,CAAA,IAAA,EAAA,KAAA,EAAA,KAAA,CAAA,GAoCU,MAAA,CAAA,MApCV,CAAA,SAAA,EAoCU,eApCV,EAAA,KAAA,CAAA;AAAA,iBAyFvC,wBAAA,CAzFuC,KAAA,EAAA,OAAA,CAAA,EAyFA,MAAA,CAAA,MAzFA,CAAA,IAAA,EAyFA,aAzFA,GAyFA,eAzFA,EAAA,KAAA,CAAA;AAoCvD;;;AAAiE,iBAoEjD,oBAAA,CAAA,CApEiD,EAoE7B,MAAA,CAAA,MApE6B,CAAA,MAAA,EAAA,EAoE7B,aApE6B,EAAA,KAAA,CAAA;;AAqDjE;;;;;AAeA;AA2HgB,iBAAA,gCAAA,CAAgC,KAAA,EAAA,MAAA,EAAA,CAAA,EAAgB,MAAA,CAAA,MAAhB,CAAgB,MAAhB,CAAA,MAAA,EAAA,MAAA,CAAA,EAAgB,aAAhB,EAAA,KAAA,CAAA;;;;;AA+ChC,iBAAA,oBAAA,CAAoB,KAAA,EAAA,MAAA,EAAA,CAAA,EAAgB,MAAA,CAAA,MAAhB,CAAA;;;EAAgB,IAAA,EAAA,MAAA;CAAA,EAAA,eAAA,gBAAA,EAAA,KAAA,CAAA"}
@@ -0,0 +1,222 @@
1
+ import { appendBuildLogLine } from "../logger.mjs";
2
+ import { FileDeleteError, FileGlobError, FileHashError, FileReadError } from "./errors.mjs";
3
+ import { Effect } from "effect";
4
+ import { readFile, unlink } from "node:fs/promises";
5
+ import path from "node:path";
6
+ import { glob } from "glob";
7
+
8
+ //#region src/build/source-maps/files.ts
9
+ const SOURCE_MAP_GLOB = ".next/**/*.js.map";
10
+ const JS_GLOB = ".next/**/*.js";
11
+ async function hashString(content) {
12
+ return (await import("crypto")).createHash("sha256").update(content).digest("hex");
13
+ }
14
+ function findSourceMapFiles() {
15
+ return Effect.tryPromise({
16
+ try: () => glob(SOURCE_MAP_GLOB, {
17
+ cwd: process.cwd(),
18
+ absolute: true
19
+ }),
20
+ catch: (error) => new FileGlobError({
21
+ message: `Failed to find source map files: ${String(error)}`,
22
+ pattern: SOURCE_MAP_GLOB
23
+ })
24
+ });
25
+ }
26
+ function readSourceMapsFromFiles(paths) {
27
+ return Effect.forEach(paths, (filePath) => Effect.gen(function* () {
28
+ const content = yield* Effect.tryPromise({
29
+ try: () => readFile(filePath, "utf8"),
30
+ catch: (error) => new FileReadError({
31
+ message: `Failed to read file: ${String(error)}`,
32
+ path: filePath
33
+ })
34
+ });
35
+ const hash = yield* Effect.tryPromise({
36
+ try: () => hashString(content),
37
+ catch: (error) => new FileHashError({
38
+ message: `Failed to hash file: ${String(error)}`,
39
+ path: filePath
40
+ })
41
+ });
42
+ return {
43
+ relativePath: toPublicUrlPath(path.relative(process.cwd(), filePath).replace(/\\/g, "/")),
44
+ content,
45
+ hash
46
+ };
47
+ }), { concurrency: "unbounded" });
48
+ }
49
+ function cleanupSourceMaps(paths, debug) {
50
+ if (paths.length === 0) return Effect.void;
51
+ return Effect.gen(function* () {
52
+ const results = yield* Effect.forEach(paths, (filePath) => Effect.tryPromise({
53
+ try: () => unlink(filePath),
54
+ catch: (error) => new FileDeleteError({
55
+ message: `Failed to delete file: ${String(error)}`,
56
+ path: filePath
57
+ })
58
+ }).pipe(Effect.map(() => ({
59
+ file: filePath,
60
+ success: true
61
+ })), Effect.catchAll((error) => debug ? Effect.gen(function* () {
62
+ yield* appendBuildLogLine(`Failed to delete source map file ${JSON.stringify({
63
+ file: filePath,
64
+ error: error.message
65
+ })}`);
66
+ return {
67
+ file: filePath,
68
+ success: false
69
+ };
70
+ }) : Effect.succeed({
71
+ file: filePath,
72
+ success: false
73
+ }))), { concurrency: "unbounded" });
74
+ const successful = results.filter((result) => result.success).length;
75
+ const failed = results.length - successful;
76
+ if (successful > 0) yield* appendBuildLogLine(`Cleaned ${successful}/${paths.length} source map files`);
77
+ if (failed > 0 && debug) return yield* Effect.fail(new FileDeleteError({
78
+ message: `Failed to clean up ${failed} source map files - Failing the build to avoid leaking source maps to the public`,
79
+ path: "multiple files"
80
+ }));
81
+ });
82
+ }
83
+ function maybeCleanupAfterFailure(debug) {
84
+ return Effect.gen(function* () {
85
+ const files = yield* findSourceMapFiles();
86
+ if (files.length === 0) return;
87
+ yield* cleanupSourceMaps(files, debug);
88
+ });
89
+ }
90
+ /**
91
+ * Find all generated JavaScript files (excluding source maps)
92
+ */
93
+ function findGeneratedJsFiles() {
94
+ return Effect.tryPromise({
95
+ try: () => glob(JS_GLOB, {
96
+ cwd: process.cwd(),
97
+ absolute: true,
98
+ ignore: ["**/*.map"]
99
+ }),
100
+ catch: (error) => new FileGlobError({
101
+ message: `Failed to find generated JS files: ${String(error)}`,
102
+ pattern: JS_GLOB
103
+ })
104
+ });
105
+ }
106
+ /**
107
+ * Regex to extract sourceMappingURL from JS files
108
+ * Matches: //# sourceMappingURL=filename.js.map or //@ sourceMappingURL=filename.js.map
109
+ */
110
+ const SOURCE_MAPPING_URL_REGEX = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/gm;
111
+ const HTTP_PREFIX_REGEX = /^https?:\/\//i;
112
+ function removeQueryString(value) {
113
+ const queryIndex = value.indexOf("?");
114
+ return queryIndex === -1 ? value : value.slice(0, queryIndex);
115
+ }
116
+ function normalizeReferenceSlashes(value) {
117
+ return value.replace(/\\/g, "/");
118
+ }
119
+ /**
120
+ * Normalize an absolute reference to the public URL path format.
121
+ * Next.js serves .next/ directory as _next/ in URLs, so we store paths
122
+ * in the _next/ format to match what appears in error stack traces.
123
+ */
124
+ function normalizeAbsoluteReference(value) {
125
+ const trimmed = normalizeReferenceSlashes(value).replace(/^\/+/, "");
126
+ const publicIndex = trimmed.indexOf("_next/");
127
+ if (publicIndex !== -1) return trimmed.slice(publicIndex);
128
+ const buildIndex = trimmed.indexOf(".next/");
129
+ if (buildIndex !== -1) return `_next/${trimmed.slice(buildIndex + 6)}`;
130
+ return trimmed;
131
+ }
132
+ /**
133
+ * Extract sourceMappingURL reference from JS file content
134
+ */
135
+ function extractSourceMappingReference(content) {
136
+ SOURCE_MAPPING_URL_REGEX.lastIndex = 0;
137
+ const match = SOURCE_MAPPING_URL_REGEX.exec(content);
138
+ if (match && match[1]) return match[1].trim();
139
+ return null;
140
+ }
141
+ function resolveSourceMapRelativePath(jsRelativePath, reference) {
142
+ if (!reference) return null;
143
+ const withoutQuery = removeQueryString(reference);
144
+ if (!withoutQuery) return null;
145
+ const normalizedReference = normalizeReferenceSlashes(withoutQuery);
146
+ if (HTTP_PREFIX_REGEX.test(normalizedReference)) try {
147
+ return normalizeAbsoluteReference(new URL(normalizedReference).pathname);
148
+ } catch {
149
+ return normalizeAbsoluteReference(normalizedReference);
150
+ }
151
+ if (normalizedReference.startsWith("/")) return normalizeAbsoluteReference(normalizedReference);
152
+ const jsDirectory = path.posix.dirname(jsRelativePath);
153
+ return toPublicUrlPath(normalizeReferenceSlashes(path.posix.normalize(path.posix.join(jsDirectory, normalizedReference))));
154
+ }
155
+ const NEXT_BUILD_TO_PUBLIC_REGEX = /^\.next\//;
156
+ /**
157
+ * Convert a build path to a public URL path.
158
+ * Next.js serves .next/ directory as _next/ in URLs.
159
+ * So on our backend we store it as the public URL path since that's what appears in error stack traces.
160
+ */
161
+ function toPublicUrlPath(buildPath) {
162
+ return buildPath.replace(NEXT_BUILD_TO_PUBLIC_REGEX, "_next/");
163
+ }
164
+ /**
165
+ * Read generated JS files and extract sourceMappingURL to build a mapping.
166
+ * Returns a map: sourceMapFilename -> generatedJsFilePath
167
+ *
168
+ * Both keys and values are in public URL format (_next/...) to match
169
+ * what appears in error stack traces, making the backend framework-agnostic.
170
+ */
171
+ function buildSourceMapToGeneratedMapping(paths) {
172
+ return Effect.forEach(paths, (filePath) => Effect.gen(function* () {
173
+ const content = yield* Effect.tryPromise({
174
+ try: () => readFile(filePath, "utf8"),
175
+ catch: (error) => new FileReadError({
176
+ message: `Failed to read file: ${String(error)}`,
177
+ path: filePath
178
+ })
179
+ });
180
+ const relativePath = path.relative(process.cwd(), filePath).replace(/\\/g, "/");
181
+ const sourceMapReference = extractSourceMappingReference(content);
182
+ const sourceMapRelativePath = sourceMapReference ? resolveSourceMapRelativePath(relativePath, sourceMapReference) : null;
183
+ return {
184
+ generatedFilePath: toPublicUrlPath(relativePath),
185
+ sourceMapRelativePath
186
+ };
187
+ }), { concurrency: "unbounded" }).pipe(Effect.map((results) => {
188
+ const mapping = {};
189
+ for (const result of results) if (result.sourceMapRelativePath) mapping[result.sourceMapRelativePath] = result.generatedFilePath;
190
+ return mapping;
191
+ }));
192
+ }
193
+ /**
194
+ * Read generated JS files from disk
195
+ * @deprecated Use buildSourceMapToGeneratedMapping instead - we no longer upload JS files
196
+ */
197
+ function readGeneratedJsFiles(paths) {
198
+ return Effect.forEach(paths, (filePath) => Effect.gen(function* () {
199
+ const content = yield* Effect.tryPromise({
200
+ try: () => readFile(filePath, "utf8"),
201
+ catch: (error) => new FileReadError({
202
+ message: `Failed to read file: ${String(error)}`,
203
+ path: filePath
204
+ })
205
+ });
206
+ const hash = yield* Effect.tryPromise({
207
+ try: () => hashString(content),
208
+ catch: (error) => new FileHashError({
209
+ message: `Failed to hash file: ${String(error)}`,
210
+ path: filePath
211
+ })
212
+ });
213
+ return {
214
+ relativePath: path.relative(process.cwd(), filePath).replace(/\\/g, "/"),
215
+ content,
216
+ hash
217
+ };
218
+ }), { concurrency: "unbounded" });
219
+ }
220
+
221
+ //#endregion
222
+ export { buildSourceMapToGeneratedMapping, cleanupSourceMaps, findGeneratedJsFiles, findSourceMapFiles, maybeCleanupAfterFailure, readGeneratedJsFiles, readSourceMapsFromFiles };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.mjs","names":["mapping: Record<string, string>"],"sources":["../../../src/build/source-maps/files.ts"],"sourcesContent":["import { readFile, unlink } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Effect } from \"effect\";\nimport { glob } from \"glob\";\nimport { appendBuildLogLine } from \"../logger.js\";\nimport {\n FileDeleteError,\n FileGlobError,\n FileHashError,\n FileReadError,\n} from \"./errors.js\";\n\nconst SOURCE_MAP_GLOB = \".next/**/*.js.map\";\nconst JS_GLOB = \".next/**/*.js\";\n\nasync function hashString(content: string) {\n const crypto = await import(\"crypto\");\n\n return crypto.createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nexport function findSourceMapFiles() {\n return Effect.tryPromise({\n try: () =>\n glob(SOURCE_MAP_GLOB, {\n cwd: process.cwd(),\n absolute: true,\n }),\n catch: (error) => new FileGlobError({\n message: `Failed to find source map files: ${String(error)}`,\n pattern: SOURCE_MAP_GLOB,\n }),\n });\n}\n\nexport function readSourceMapsFromFiles(paths: string[]) {\n return Effect.forEach(\n paths,\n (filePath) =>\n Effect.gen(function* () {\n const content = yield* Effect.tryPromise({\n try: () => readFile(filePath, \"utf8\"),\n catch: (error) => new FileReadError({\n message: `Failed to read file: ${String(error)}`,\n path: filePath,\n }),\n });\n\n const hash = yield* Effect.tryPromise({\n try: () => hashString(content),\n catch: (error) => new FileHashError({\n message: `Failed to hash file: ${String(error)}`,\n path: filePath,\n }),\n });\n\n const relativePath = path.relative(process.cwd(), filePath).replace(\n /\\\\/g,\n \"/\"\n );\n\n return {\n relativePath: toPublicUrlPath(relativePath),\n content,\n hash,\n };\n }),\n { concurrency: \"unbounded\" }\n );\n}\n\nexport function cleanupSourceMaps(paths: string[], debug: boolean) {\n if (paths.length === 0) {\n return Effect.void;\n }\n\n return Effect.gen(function* () {\n const results = yield* Effect.forEach(\n paths,\n (filePath) =>\n Effect.tryPromise({\n try: () => unlink(filePath),\n catch: (error) => new FileDeleteError({\n message: `Failed to delete file: ${String(error)}`,\n path: filePath,\n }),\n }).pipe(\n Effect.map(() => ({ file: filePath, success: true })),\n Effect.catchAll((error) =>\n debug\n ? Effect.gen(function* () {\n yield* appendBuildLogLine(\n `Failed to delete source map file ${JSON.stringify({\n file: filePath,\n error: error.message,\n })}`\n );\n\n return { file: filePath, success: false };\n })\n : Effect.succeed({ file: filePath, success: false })\n )\n ),\n { concurrency: \"unbounded\" }\n );\n\n const successful = results.filter((result) => result.success).length;\n const failed = results.length - successful;\n\n if (successful > 0) {\n yield* appendBuildLogLine(\n `Cleaned ${successful}/${paths.length} source map files`\n );\n }\n\n if (failed > 0 && debug) {\n return yield* Effect.fail(new FileDeleteError({\n message: `Failed to clean up ${failed} source map files - Failing the build to avoid leaking source maps to the public`,\n path: \"multiple files\",\n }));\n }\n });\n}\n\nexport function maybeCleanupAfterFailure(debug: boolean) {\n return Effect.gen(function* () {\n const files = yield* findSourceMapFiles();\n\n if (files.length === 0) {\n return;\n }\n\n yield* cleanupSourceMaps(files, debug);\n });\n}\n\n/**\n * Find all generated JavaScript files (excluding source maps)\n */\nexport function findGeneratedJsFiles() {\n return Effect.tryPromise({\n try: () =>\n glob(JS_GLOB, {\n cwd: process.cwd(),\n absolute: true,\n ignore: [\"**/*.map\"], // Exclude source map files\n }),\n catch: (error) => new FileGlobError({\n message: `Failed to find generated JS files: ${String(error)}`,\n pattern: JS_GLOB,\n }),\n });\n}\n\n/**\n * Regex to extract sourceMappingURL from JS files\n * Matches: //# sourceMappingURL=filename.js.map or //@ sourceMappingURL=filename.js.map\n */\nconst SOURCE_MAPPING_URL_REGEX = /\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/gm;\n\nconst HTTP_PREFIX_REGEX = /^https?:\\/\\//i;\n\nfunction removeQueryString(value: string): string {\n const queryIndex = value.indexOf(\"?\");\n return queryIndex === -1 ? value : value.slice(0, queryIndex);\n}\n\nfunction normalizeReferenceSlashes(value: string): string {\n return value.replace(/\\\\/g, \"/\");\n}\n\n/**\n * Normalize an absolute reference to the public URL path format.\n * Next.js serves .next/ directory as _next/ in URLs, so we store paths\n * in the _next/ format to match what appears in error stack traces.\n */\nfunction normalizeAbsoluteReference(value: string): string {\n const normalized = normalizeReferenceSlashes(value);\n const trimmed = normalized.replace(/^\\/+/, \"\");\n\n // If it already has _next/, extract from there (handles CDN prefixes like /prod/_next/)\n const publicIndex = trimmed.indexOf(\"_next/\");\n if (publicIndex !== -1) {\n return trimmed.slice(publicIndex);\n }\n\n // Convert .next/ build path to _next/ public URL path\n const buildIndex = trimmed.indexOf(\".next/\");\n if (buildIndex !== -1) {\n return `_next/${trimmed.slice(buildIndex + \".next/\".length)}`;\n }\n\n return trimmed;\n}\n\n/**\n * Extract sourceMappingURL reference from JS file content\n */\nfunction extractSourceMappingReference(content: string): string | null {\n SOURCE_MAPPING_URL_REGEX.lastIndex = 0;\n const match = SOURCE_MAPPING_URL_REGEX.exec(content);\n if (match && match[1]) {\n return match[1].trim();\n }\n return null;\n}\n\nfunction resolveSourceMapRelativePath(\n jsRelativePath: string,\n reference: string\n): string | null {\n if (!reference) {\n return null;\n }\n\n const withoutQuery = removeQueryString(reference);\n if (!withoutQuery) {\n return null;\n }\n\n const normalizedReference = normalizeReferenceSlashes(withoutQuery);\n\n if (HTTP_PREFIX_REGEX.test(normalizedReference)) {\n try {\n const url = new URL(normalizedReference);\n return normalizeAbsoluteReference(url.pathname);\n } catch {\n return normalizeAbsoluteReference(normalizedReference);\n }\n }\n\n if (normalizedReference.startsWith(\"/\")) {\n return normalizeAbsoluteReference(normalizedReference);\n }\n\n const jsDirectory = path.posix.dirname(jsRelativePath);\n const resolved = path.posix.normalize(\n path.posix.join(jsDirectory, normalizedReference)\n );\n\n return toPublicUrlPath(normalizeReferenceSlashes(resolved));\n}\n\n// Regex to convert .next/ build paths to _next/ public URL paths\nconst NEXT_BUILD_TO_PUBLIC_REGEX = /^\\.next\\//;\n\n/**\n * Convert a build path to a public URL path.\n * Next.js serves .next/ directory as _next/ in URLs.\n * So on our backend we store it as the public URL path since that's what appears in error stack traces.\n */\nfunction toPublicUrlPath(buildPath: string): string {\n return buildPath.replace(NEXT_BUILD_TO_PUBLIC_REGEX, \"_next/\");\n}\n\n/**\n * Read generated JS files and extract sourceMappingURL to build a mapping.\n * Returns a map: sourceMapFilename -> generatedJsFilePath\n * \n * Both keys and values are in public URL format (_next/...) to match\n * what appears in error stack traces, making the backend framework-agnostic.\n */\nexport function buildSourceMapToGeneratedMapping(paths: string[]) {\n return Effect.forEach(\n paths,\n (filePath) =>\n Effect.gen(function* () {\n const content = yield* Effect.tryPromise({\n try: () => readFile(filePath, \"utf8\"),\n catch: (error) => new FileReadError({\n message: `Failed to read file: ${String(error)}`,\n path: filePath,\n }),\n });\n\n const relativePath = path\n .relative(process.cwd(), filePath)\n .replace(/\\\\/g, \"/\");\n\n const sourceMapReference = extractSourceMappingReference(content);\n const sourceMapRelativePath = sourceMapReference\n ? resolveSourceMapRelativePath(relativePath, sourceMapReference)\n : null;\n\n return {\n // Convert .next/ to _next/ for public URL format\n generatedFilePath: toPublicUrlPath(relativePath),\n sourceMapRelativePath,\n };\n }),\n { concurrency: \"unbounded\" }\n ).pipe(\n Effect.map((results) => {\n // Build reverse mapping: sourceMapRelativePath -> generatedFilePath\n const mapping: Record<string, string> = {};\n for (const result of results) {\n if (result.sourceMapRelativePath) {\n mapping[result.sourceMapRelativePath] = result.generatedFilePath;\n }\n }\n return mapping;\n })\n );\n}\n\n/**\n * Read generated JS files from disk\n * @deprecated Use buildSourceMapToGeneratedMapping instead - we no longer upload JS files\n */\nexport function readGeneratedJsFiles(paths: string[]) {\n return Effect.forEach(\n paths,\n (filePath) =>\n Effect.gen(function* () {\n const content = yield* Effect.tryPromise({\n try: () => readFile(filePath, \"utf8\"),\n catch: (error) => new FileReadError({\n message: `Failed to read file: ${String(error)}`,\n path: filePath,\n }),\n });\n\n const hash = yield* Effect.tryPromise({\n try: () => hashString(content),\n catch: (error) => new FileHashError({\n message: `Failed to hash file: ${String(error)}`,\n path: filePath,\n }),\n });\n\n const relativePath = path\n .relative(process.cwd(), filePath)\n .replace(/\\\\/g, \"/\");\n\n return {\n relativePath,\n content,\n hash,\n };\n }),\n { concurrency: \"unbounded\" }\n );\n}\n\n\n\n\n"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { NoDeploymentError } from "../../errors.mjs";
2
+ import { Effect } from "effect";
3
+
4
+ //#region src/build/source-maps/providers/deployment/detector.d.ts
5
+ declare function detectDeployment(): Effect.Effect<{
6
+ type: "vercel";
7
+ metadata: {
8
+ type: "vercel";
9
+ deployment: {
10
+ id: string | null;
11
+ url: string | null;
12
+ };
13
+ env: {
14
+ name: string | null;
15
+ target: string | null;
16
+ };
17
+ project: {
18
+ id: string | null;
19
+ productionUrl: string | null;
20
+ };
21
+ region: string | null;
22
+ skewProtectionEnabled: boolean | null;
23
+ };
24
+ }, NoDeploymentError, never>;
25
+ //#endregion
26
+ export { detectDeployment };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.mts","names":[],"sources":["../../../../../src/build/source-maps/providers/deployment/detector.ts"],"sourcesContent":[],"mappings":";;;;iBAQgB,gBAAA,CAAA,GAAgB,MAAA,CAAA;;EAAhB,QAAA,EAAA;;;;;;;;;;;;;;;;;GAAgB"}
@@ -0,0 +1,22 @@
1
+ import { NoDeploymentError } from "../../errors.mjs";
2
+ import { vercelProvider } from "./vercel.mjs";
3
+ import { Effect } from "effect";
4
+
5
+ //#region src/build/source-maps/providers/deployment/detector.ts
6
+ const providers = [vercelProvider];
7
+ function detectDeployment() {
8
+ return Effect.gen(function* () {
9
+ for (const provider of providers) {
10
+ if (!(yield* provider.detect)) continue;
11
+ const metadata = yield* provider.getMetadata;
12
+ return {
13
+ type: provider.type,
14
+ metadata
15
+ };
16
+ }
17
+ return yield* Effect.fail(new NoDeploymentError({ message: `No source map deployment provider detected, supported providers: ${providers.map((p) => p.type).join(", ")}` }));
18
+ });
19
+ }
20
+
21
+ //#endregion
22
+ export { detectDeployment };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.mjs","names":["providers: DeploymentProvider[]"],"sources":["../../../../../src/build/source-maps/providers/deployment/detector.ts"],"sourcesContent":["import { Effect } from \"effect\";\n\nimport { NoDeploymentError } from \"../../errors.js\";\nimport type { DeploymentProvider } from \"./types.js\";\nimport { vercelProvider } from \"./vercel.js\";\n\nconst providers: DeploymentProvider[] = [vercelProvider];\n\nexport function detectDeployment() {\n return Effect.gen(function* () {\n for (const provider of providers) {\n const supported = yield* provider.detect;\n\n if (!supported) {\n continue;\n }\n\n const metadata = yield* provider.getMetadata;\n\n return {\n type: provider.type,\n metadata: metadata,\n };\n }\n\n return yield* Effect.fail(\n new NoDeploymentError({ message: `No source map deployment provider detected, supported providers: ${providers.map((p) => p.type).join(\", \")}` })\n );\n });\n}\n\n\n"],"mappings":";;;;;AAMA,MAAMA,YAAkC,CAAC,eAAe;AAExD,SAAgB,mBAAmB;AACjC,QAAO,OAAO,IAAI,aAAa;AAC7B,OAAK,MAAM,YAAY,WAAW;AAGhC,OAAI,EAFc,OAAO,SAAS,QAGhC;GAGF,MAAM,WAAW,OAAO,SAAS;AAEjC,UAAO;IACL,MAAM,SAAS;IACL;IACX;;AAGH,SAAO,OAAO,OAAO,KACnB,IAAI,kBAAkB,EAAE,SAAS,oEAAoE,UAAU,KAAK,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAClJ;GACD"}
@@ -0,0 +1,12 @@
1
+ import { NoDeploymentError } from "../../errors.mjs";
2
+ import { Effect } from "effect";
3
+ import { ReleaseDestinationMetadata, ReleaseDestinationType } from "@interfere/types/releases/definition";
4
+
5
+ //#region src/build/source-maps/providers/deployment/types.d.ts
6
+ type DeploymentProvider = {
7
+ type: ReleaseDestinationType;
8
+ detect: Effect.Effect<boolean>;
9
+ getMetadata: Effect.Effect<ReleaseDestinationMetadata, NoDeploymentError>;
10
+ };
11
+ //#endregion
12
+ export { DeploymentProvider };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../../../src/build/source-maps/providers/deployment/types.ts"],"sourcesContent":[],"mappings":";;;;;KASY,kBAAA;QACJ;EADI,MAAA,EAEF,MAAA,CAAO,MAFa,CAAA,OAAA,CAAA;EACtB,WAAA,EAEO,MAAA,CAAO,MAFd,CAGJ,0BAHI,EAIJ,iBAJI,CAAA;CACE"}
@@ -0,0 +1,3 @@
1
+ import { Effect } from "effect";
2
+
3
+ export { };
@@ -0,0 +1,6 @@
1
+ import { DeploymentProvider } from "./types.mjs";
2
+
3
+ //#region src/build/source-maps/providers/deployment/vercel.d.ts
4
+ declare const vercelProvider: DeploymentProvider;
5
+ //#endregion
6
+ export { vercelProvider };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.d.mts","names":[],"sources":["../../../../../src/build/source-maps/providers/deployment/vercel.ts"],"sourcesContent":[],"mappings":";;;cA+Ca,gBAAgB"}
@@ -0,0 +1,44 @@
1
+ import { appendBuildLogLine } from "../../../logger.mjs";
2
+ import { NoDeploymentError } from "../../errors.mjs";
3
+ import { Effect } from "effect";
4
+ import { cloudPlatformTypeSchema } from "@interfere/types/releases/targets/cloud-platform";
5
+
6
+ //#region src/build/source-maps/providers/deployment/vercel.ts
7
+ const providerType = cloudPlatformTypeSchema.enum.vercel;
8
+ function resolveReleaseId() {
9
+ return process.env.VERCEL_DEPLOYMENT_ID ?? null;
10
+ }
11
+ function buildMetadata() {
12
+ return {
13
+ type: cloudPlatformTypeSchema.enum.vercel,
14
+ deployment: {
15
+ id: process.env.VERCEL_DEPLOYMENT_ID ?? null,
16
+ url: process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : null
17
+ },
18
+ env: {
19
+ name: process.env.VERCEL_ENV ?? null,
20
+ target: process.env.VERCEL_TARGET_ENV ?? null
21
+ },
22
+ project: {
23
+ id: process.env.VERCEL_PROJECT_ID ?? null,
24
+ productionUrl: process.env.VERCEL_PROJECT_PRODUCTION_URL ? `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL}` : null
25
+ },
26
+ region: process.env.VERCEL_REGION ?? null,
27
+ skewProtectionEnabled: process.env.VERCEL_SKEW_PROTECTION_ENABLED === "1" ? true : null
28
+ };
29
+ }
30
+ const vercelProvider = {
31
+ type: providerType,
32
+ detect: Effect.sync(() => process.env.VERCEL === "1"),
33
+ getMetadata: Effect.gen(function* () {
34
+ if (!resolveReleaseId()) {
35
+ yield* appendBuildLogLine("Vercel system environment variables not available for deployment metadata");
36
+ yield* appendBuildLogLine("Enable 'Automatically expose System Environment Variables' in your Vercel project settings.");
37
+ return yield* Effect.fail(new NoDeploymentError({ message: "Could not determine Vercel deployment id from system environment variables" }));
38
+ }
39
+ return buildMetadata();
40
+ })
41
+ };
42
+
43
+ //#endregion
44
+ export { vercelProvider };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.mjs","names":["providerType: ReleaseDestinationType","vercelProvider: DeploymentProvider"],"sources":["../../../../../src/build/source-maps/providers/deployment/vercel.ts"],"sourcesContent":["import type {\n ReleaseDestinationMetadata,\n ReleaseDestinationType,\n} from \"@interfere/types/releases/definition\";\nimport {\n type CloudPlatformMetadata,\n cloudPlatformTypeSchema,\n} from \"@interfere/types/releases/targets/cloud-platform\";\nimport { Effect } from \"effect\";\nimport { appendBuildLogLine } from \"../../../logger.js\";\nimport { NoDeploymentError } from \"../../errors.js\";\nimport type { DeploymentProvider } from \"./types.js\";\n\nconst providerType: ReleaseDestinationType =\n cloudPlatformTypeSchema.enum.vercel;\n\nfunction resolveReleaseId(): string | null {\n return process.env.VERCEL_DEPLOYMENT_ID ?? null;\n}\n\nfunction buildMetadata(): ReleaseDestinationMetadata {\n const metadata: CloudPlatformMetadata = {\n type: cloudPlatformTypeSchema.enum.vercel,\n deployment: {\n id: process.env.VERCEL_DEPLOYMENT_ID ?? null,\n url: process.env.VERCEL_URL\n ? `https://${process.env.VERCEL_URL}`\n : null,\n },\n env: {\n name: process.env.VERCEL_ENV ?? null,\n target: process.env.VERCEL_TARGET_ENV ?? null,\n },\n project: {\n id: process.env.VERCEL_PROJECT_ID ?? null,\n productionUrl: process.env.VERCEL_PROJECT_PRODUCTION_URL\n ? `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL}`\n : null,\n },\n region: process.env.VERCEL_REGION ?? null,\n skewProtectionEnabled:\n process.env.VERCEL_SKEW_PROTECTION_ENABLED === \"1\" ? true : null,\n };\n\n return metadata;\n}\n\nexport const vercelProvider: DeploymentProvider = {\n type: providerType,\n // Detect Vercel by its ambient env var; this tells us we're running on Vercel\n // even if system env vars are not exposed yet.\n detect: Effect.sync(() => process.env.VERCEL === \"1\"),\n getMetadata: Effect.gen(function* () {\n const releaseId = resolveReleaseId();\n\n if (!releaseId) {\n // We're on Vercel, but the relevant system env vars are missing.\n // This usually means \"Automatically expose System Environment Variables\"\n // is disabled in the project settings.\n yield* appendBuildLogLine(\n \"Vercel system environment variables not available for deployment metadata\"\n );\n\n yield* appendBuildLogLine(\n \"Enable 'Automatically expose System Environment Variables' in your Vercel project settings.\"\n );\n\n return yield* Effect.fail(\n new NoDeploymentError({\n message: \"Could not determine Vercel deployment id from system environment variables\"\n })\n );\n }\n\n return buildMetadata();\n }),\n};\n"],"mappings":";;;;;;AAaA,MAAMA,eACJ,wBAAwB,KAAK;AAE/B,SAAS,mBAAkC;AACzC,QAAO,QAAQ,IAAI,wBAAwB;;AAG7C,SAAS,gBAA4C;AAwBnD,QAvBwC;EACtC,MAAM,wBAAwB,KAAK;EACnC,YAAY;GACV,IAAI,QAAQ,IAAI,wBAAwB;GACxC,KAAK,QAAQ,IAAI,aACb,WAAW,QAAQ,IAAI,eACvB;GACL;EACD,KAAK;GACH,MAAM,QAAQ,IAAI,cAAc;GAChC,QAAQ,QAAQ,IAAI,qBAAqB;GAC1C;EACD,SAAS;GACP,IAAI,QAAQ,IAAI,qBAAqB;GACrC,eAAe,QAAQ,IAAI,gCACvB,WAAW,QAAQ,IAAI,kCACvB;GACL;EACD,QAAQ,QAAQ,IAAI,iBAAiB;EACrC,uBACE,QAAQ,IAAI,mCAAmC,MAAM,OAAO;EAC/D;;AAKH,MAAaC,iBAAqC;CAChD,MAAM;CAGN,QAAQ,OAAO,WAAW,QAAQ,IAAI,WAAW,IAAI;CACrD,aAAa,OAAO,IAAI,aAAa;AAGnC,MAAI,CAFc,kBAAkB,EAEpB;AAId,UAAO,mBACL,4EACD;AAED,UAAO,mBACL,8FACD;AAED,UAAO,OAAO,OAAO,KACnB,IAAI,kBAAkB,EACpB,SAAS,8EACV,CAAC,CACH;;AAGH,SAAO,eAAe;GACtB;CACH"}
@@ -0,0 +1,15 @@
1
+ import { SourceControlDetectionError } from "../../errors.mjs";
2
+ import { Effect } from "effect";
3
+
4
+ //#region src/build/source-maps/providers/source-control/detector.d.ts
5
+ declare function detectSourceControl(): Effect.Effect<{
6
+ type: "git";
7
+ metadata: {
8
+ type: "git";
9
+ gitCommitMessage: string;
10
+ gitBranch: string;
11
+ gitCommitSha: string;
12
+ };
13
+ }, SourceControlDetectionError, never>;
14
+ //#endregion
15
+ export { detectSourceControl };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.mts","names":[],"sources":["../../../../../src/build/source-maps/providers/source-control/detector.ts"],"sourcesContent":[],"mappings":";;;;iBAQgB,mBAAA,CAAA,GAAmB,MAAA,CAAA;;EAAnB,QAAA,EAAA;;;;;;GAAmB"}
@@ -0,0 +1,22 @@
1
+ import { SourceControlDetectionError } from "../../errors.mjs";
2
+ import { gitProvider } from "./git.mjs";
3
+ import { Effect } from "effect";
4
+
5
+ //#region src/build/source-maps/providers/source-control/detector.ts
6
+ const providers = [gitProvider];
7
+ function detectSourceControl() {
8
+ return Effect.gen(function* () {
9
+ for (const provider of providers) {
10
+ if (!(yield* provider.detect)) continue;
11
+ const metadata = yield* provider.getMetadata;
12
+ return {
13
+ type: provider.type,
14
+ metadata
15
+ };
16
+ }
17
+ return yield* Effect.fail(new SourceControlDetectionError({ message: "No source control provider detected" }));
18
+ });
19
+ }
20
+
21
+ //#endregion
22
+ export { detectSourceControl };