@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":"configure-build.mjs","names":[],"sources":["../../../src/internal/build/configure-build.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { basename, dirname, join, normalize, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { NextConfig } from \"next\";\n\nimport type { InterfereInjectedValues } from \"./injected.js\";\n\nconst INSTRUMENTATION_CLIENT_FILES = [\n \"instrumentation-client.ts\",\n \"instrumentation-client.tsx\",\n \"instrumentation-client.js\",\n \"instrumentation-client.jsx\",\n \"src/instrumentation-client.ts\",\n \"src/instrumentation-client.tsx\",\n \"src/instrumentation-client.js\",\n \"src/instrumentation-client.jsx\",\n] as const;\n\nconst LOADER_FILE_CANDIDATES = [\n \"value-injection-loader.ts\",\n \"value-injection-loader.js\",\n \"value-injection-loader.mjs\",\n \"value-injection-loader.cjs\",\n] as const;\n\ninterface ConfigureBuildInput {\n readonly existingWebpack: NextConfig[\"webpack\"] | undefined;\n readonly existingTurbopack: NextConfig[\"turbopack\"] | undefined;\n readonly projectDir: string;\n readonly values: InterfereInjectedValues;\n}\n\ninterface ConfigureBuildOutput {\n readonly webpack: NextConfig[\"webpack\"] | undefined;\n readonly turbopack: NextConfig[\"turbopack\"] | undefined;\n}\n\nexport function configureBuild({\n existingWebpack,\n existingTurbopack,\n projectDir,\n values,\n}: ConfigureBuildInput): ConfigureBuildOutput {\n const instrumentationClientPath = resolveInstrumentationClientPath(projectDir);\n\n return {\n webpack: buildWebpackHook(existingWebpack, instrumentationClientPath, values),\n turbopack: buildTurbopackConfig(\n existingTurbopack,\n instrumentationClientPath,\n values\n ),\n };\n}\n\nfunction hasInjectedMetadata(metadata: InterfereInjectedValues): boolean {\n return (\n metadata.__INTERFERE_BUILD_ID__ !== null ||\n metadata.__INTERFERE_RELEASE_ID__ !== null\n );\n}\n\nfunction buildWebpackHook(\n existingWebpack: NextConfig[\"webpack\"] | undefined,\n instrumentationClientPath: string | null,\n values: InterfereInjectedValues\n): NextConfig[\"webpack\"] | undefined {\n if (!(instrumentationClientPath && hasInjectedMetadata(values))) {\n return existingWebpack;\n }\n\n const normalizedPath = normalize(instrumentationClientPath);\n const loaderPath = resolveLoaderPath();\n\n return (webpackConfig, options) => {\n const outputConfig = existingWebpack\n ? existingWebpack(webpackConfig, options)\n : webpackConfig;\n const mutableConfig = outputConfig as {\n module?: { rules?: unknown[] };\n };\n\n const injectionRule = {\n test: (resource: string): boolean =>\n Boolean(resource) && normalize(resource) === normalizedPath,\n use: [\n {\n loader: loaderPath,\n options: { values },\n },\n ],\n };\n\n mutableConfig.module ??= {};\n mutableConfig.module.rules ??= [];\n mutableConfig.module.rules.push(injectionRule);\n\n return outputConfig;\n };\n}\n\nfunction buildTurbopackConfig(\n existingTurbopack: NextConfig[\"turbopack\"] | undefined,\n instrumentationClientPath: string | null,\n values: InterfereInjectedValues\n): NextConfig[\"turbopack\"] | undefined {\n if (!(instrumentationClientPath && hasInjectedMetadata(values))) {\n return existingTurbopack;\n }\n\n const baseConfig = (existingTurbopack ?? {}) as {\n rules?: Record<string, unknown>;\n };\n const ruleKey = `**/${basename(instrumentationClientPath)}`;\n const existingRule = (baseConfig.rules?.[ruleKey] ?? {}) as {\n loaders?: unknown[];\n };\n const existingLoaders = Array.isArray(existingRule.loaders)\n ? existingRule.loaders\n : [];\n\n return {\n ...baseConfig,\n rules: {\n ...baseConfig.rules,\n [ruleKey]: {\n ...existingRule,\n loaders: [\n ...existingLoaders,\n {\n loader: resolveLoaderPath(),\n options: {\n serializedValues: JSON.stringify(values),\n },\n },\n ],\n },\n },\n } as NextConfig[\"turbopack\"];\n}\n\nfunction resolveInstrumentationClientPath(projectDir: string): string | null {\n for (const candidate of INSTRUMENTATION_CLIENT_FILES) {\n const filePath = resolve(projectDir, candidate);\n if (existsSync(filePath)) {\n return filePath;\n }\n }\n\n return null;\n}\n\nfunction resolveLoaderPath(): string {\n const directory = resolve(dirname(fileURLToPath(import.meta.url)));\n\n for (const candidate of LOADER_FILE_CANDIDATES) {\n const filePath = join(directory, candidate);\n if (existsSync(filePath)) {\n return filePath;\n }\n }\n\n return join(directory, \"value-injection-loader.js\");\n}\n"],"mappings":";;;;AAOA,MAAM,+BAA+B;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,yBAAyB;CAC7B;CACA;CACA;CACA;CACD;AAcD,SAAgB,eAAe,EAC7B,iBACA,mBACA,YACA,UAC4C;CAC5C,MAAM,4BAA4B,iCAAiC,WAAW;AAE9E,QAAO;EACL,SAAS,iBAAiB,iBAAiB,2BAA2B,OAAO;EAC7E,WAAW,qBACT,mBACA,2BACA,OACD;EACF;;AAGH,SAAS,oBAAoB,UAA4C;AACvE,QACE,SAAS,2BAA2B,QACpC,SAAS,6BAA6B;;AAI1C,SAAS,iBACP,iBACA,2BACA,QACmC;AACnC,KAAI,EAAE,6BAA6B,oBAAoB,OAAO,EAC5D,QAAO;CAGT,MAAM,iBAAiB,UAAU,0BAA0B;CAC3D,MAAM,aAAa,mBAAmB;AAEtC,SAAQ,eAAe,YAAY;EACjC,MAAM,eAAe,kBACjB,gBAAgB,eAAe,QAAQ,GACvC;EACJ,MAAM,gBAAgB;EAItB,MAAM,gBAAgB;GACpB,OAAO,aACL,QAAQ,SAAS,IAAI,UAAU,SAAS,KAAK;GAC/C,KAAK,CACH;IACE,QAAQ;IACR,SAAS,EAAE,QAAQ;IACpB,CACF;GACF;AAED,gBAAc,WAAW,EAAE;AAC3B,gBAAc,OAAO,UAAU,EAAE;AACjC,gBAAc,OAAO,MAAM,KAAK,cAAc;AAE9C,SAAO;;;AAIX,SAAS,qBACP,mBACA,2BACA,QACqC;AACrC,KAAI,EAAE,6BAA6B,oBAAoB,OAAO,EAC5D,QAAO;CAGT,MAAM,aAAc,qBAAqB,EAAE;CAG3C,MAAM,UAAU,MAAM,SAAS,0BAA0B;CACzD,MAAM,eAAgB,WAAW,QAAQ,YAAY,EAAE;CAGvD,MAAM,kBAAkB,MAAM,QAAQ,aAAa,QAAQ,GACvD,aAAa,UACb,EAAE;AAEN,QAAO;EACL,GAAG;EACH,OAAO;GACL,GAAG,WAAW;IACb,UAAU;IACT,GAAG;IACH,SAAS,CACP,GAAG,iBACH;KACE,QAAQ,mBAAmB;KAC3B,SAAS,EACP,kBAAkB,KAAK,UAAU,OAAO,EACzC;KACF,CACF;IACF;GACF;EACF;;AAGH,SAAS,iCAAiC,YAAmC;AAC3E,MAAK,MAAM,aAAa,8BAA8B;EACpD,MAAM,WAAW,QAAQ,YAAY,UAAU;AAC/C,MAAI,WAAW,SAAS,CACtB,QAAO;;AAIX,QAAO;;AAGT,SAAS,oBAA4B;CACnC,MAAM,YAAY,QAAQ,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC,CAAC;AAElE,MAAK,MAAM,aAAa,wBAAwB;EAC9C,MAAM,WAAW,KAAK,WAAW,UAAU;AAC3C,MAAI,WAAW,SAAS,CACtB,QAAO;;AAIX,QAAO,KAAK,WAAW,4BAA4B"}
@@ -0,0 +1,12 @@
1
+ //#region src/internal/build/injected.d.ts
2
+ interface InterfereBuildMetadata {
3
+ readonly buildId: string | null;
4
+ readonly releaseId: string | null;
5
+ }
6
+ interface InterfereInjectedValues {
7
+ readonly __INTERFERE_BUILD_ID__: string | null;
8
+ readonly __INTERFERE_RELEASE_ID__: string | null;
9
+ }
10
+ declare function buildInjectedValues(metadata: InterfereBuildMetadata): InterfereInjectedValues;
11
+ //#endregion
12
+ export { InterfereBuildMetadata, InterfereInjectedValues, buildInjectedValues };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injected.d.mts","names":[],"sources":["../../../src/internal/build/injected.ts"],"mappings":";UAAiB,sBAAA;EAAA,SACN,OAAA;EAAA,SACA,SAAA;AAAA;AAAA,UAGM,uBAAA;EAAA,SACN,sBAAA;EAAA,SACA,wBAAA;AAAA;AAAA,iBAGK,mBAAA,CACd,QAAA,EAAU,sBAAA,GACT,uBAAA"}
@@ -0,0 +1,9 @@
1
+ //#region src/internal/build/injected.ts
2
+ function buildInjectedValues(metadata) {
3
+ return {
4
+ __INTERFERE_BUILD_ID__: metadata.buildId,
5
+ __INTERFERE_RELEASE_ID__: metadata.releaseId
6
+ };
7
+ }
8
+ //#endregion
9
+ export { buildInjectedValues };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injected.mjs","names":[],"sources":["../../../src/internal/build/injected.ts"],"sourcesContent":["export interface InterfereBuildMetadata {\n readonly buildId: string | null;\n readonly releaseId: string | null;\n}\n\nexport interface InterfereInjectedValues {\n readonly __INTERFERE_BUILD_ID__: string | null;\n readonly __INTERFERE_RELEASE_ID__: string | null;\n}\n\nexport function buildInjectedValues(\n metadata: InterfereBuildMetadata\n): InterfereInjectedValues {\n return {\n __INTERFERE_BUILD_ID__: metadata.buildId,\n __INTERFERE_RELEASE_ID__: metadata.releaseId,\n };\n}\n"],"mappings":";AAUA,SAAgB,oBACd,UACyB;AACzB,QAAO;EACL,wBAAwB,SAAS;EACjC,0BAA0B,SAAS;EACpC"}
@@ -0,0 +1,6 @@
1
+ import { ReleaseDestinationMetadata } from "@interfere/types/integrations";
2
+
3
+ //#region src/internal/build/release/destinations/vercel.d.ts
4
+ declare function resolve(): ReleaseDestinationMetadata | null;
5
+ //#endregion
6
+ export { resolve };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.d.mts","names":[],"sources":["../../../../../src/internal/build/release/destinations/vercel.ts"],"mappings":";;;iBAGgB,OAAA,CAAA,GAAW,0BAAA"}
@@ -0,0 +1,25 @@
1
+ import { __exportAll } from "../../../../_virtual/_rolldown/runtime.mjs";
2
+ import { parseEnvValue } from "@interfere/types/sdk/env";
3
+ //#region src/internal/build/release/destinations/vercel.ts
4
+ var vercel_exports = /* @__PURE__ */ __exportAll({ resolve: () => resolve });
5
+ function resolve() {
6
+ const deploymentId = parseEnvValue(process.env.VERCEL_DEPLOYMENT_ID);
7
+ const environment = parseEnvValue(process.env.VERCEL_ENV ?? process.env.VERCEL_TARGET_ENV);
8
+ if (!deploymentId && !environment) return null;
9
+ return {
10
+ provider: "vercel",
11
+ environment,
12
+ deploymentId,
13
+ deploymentUrl: resolveDeploymentUrl(),
14
+ environmentName: environment,
15
+ environmentTarget: environment
16
+ };
17
+ }
18
+ function resolveDeploymentUrl() {
19
+ const deploymentUrl = parseEnvValue(process.env.VERCEL_URL);
20
+ if (deploymentUrl === null) return null;
21
+ if (deploymentUrl.startsWith("https://") || deploymentUrl.startsWith("http://")) return deploymentUrl;
22
+ return `https://${deploymentUrl}`;
23
+ }
24
+ //#endregion
25
+ export { resolve, vercel_exports };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.mjs","names":[],"sources":["../../../../../src/internal/build/release/destinations/vercel.ts"],"sourcesContent":["import type { ReleaseDestinationMetadata } from \"@interfere/types/integrations\";\nimport { parseEnvValue } from \"@interfere/types/sdk/env\";\n\nexport function resolve(): ReleaseDestinationMetadata | null {\n const deploymentId = parseEnvValue(process.env.VERCEL_DEPLOYMENT_ID);\n const environment = parseEnvValue(\n process.env.VERCEL_ENV ?? process.env.VERCEL_TARGET_ENV,\n );\n\n if (!deploymentId && !environment) {\n return null;\n }\n\n return {\n provider: \"vercel\",\n environment,\n deploymentId,\n deploymentUrl: resolveDeploymentUrl(),\n environmentName: environment,\n environmentTarget: environment,\n };\n}\n\nfunction resolveDeploymentUrl(): string | null {\n const deploymentUrl = parseEnvValue(process.env.VERCEL_URL);\n\n if (deploymentUrl === null) {\n return null;\n }\n\n if (\n deploymentUrl.startsWith(\"https://\") ||\n deploymentUrl.startsWith(\"http://\")\n ) {\n return deploymentUrl;\n }\n\n return `https://${deploymentUrl}`;\n}\n"],"mappings":";;;;AAGA,SAAgB,UAA6C;CAC3D,MAAM,eAAe,cAAc,QAAQ,IAAI,qBAAqB;CACpE,MAAM,cAAc,cAClB,QAAQ,IAAI,cAAc,QAAQ,IAAI,kBACvC;AAED,KAAI,CAAC,gBAAgB,CAAC,YACpB,QAAO;AAGT,QAAO;EACL,UAAU;EACV;EACA;EACA,eAAe,sBAAsB;EACrC,iBAAiB;EACjB,mBAAmB;EACpB;;AAGH,SAAS,uBAAsC;CAC7C,MAAM,gBAAgB,cAAc,QAAQ,IAAI,WAAW;AAE3D,KAAI,kBAAkB,KACpB,QAAO;AAGT,KACE,cAAc,WAAW,WAAW,IACpC,cAAc,WAAW,UAAU,CAEnC,QAAO;AAGT,QAAO,WAAW"}
@@ -0,0 +1,4 @@
1
+ //#region src/internal/build/release/git.d.ts
2
+ declare function runGitCommand(command: string): string | null;
3
+ //#endregion
4
+ export { runGitCommand };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.mts","names":[],"sources":["../../../../src/internal/build/release/git.ts"],"mappings":";iBAIgB,aAAA,CAAc,OAAA"}
@@ -0,0 +1,21 @@
1
+ import { log } from "../../logger.mjs";
2
+ import { execSync } from "node:child_process";
3
+ //#region src/internal/build/release/git.ts
4
+ function runGitCommand(command) {
5
+ try {
6
+ const output = execSync(command, {
7
+ encoding: "utf8",
8
+ stdio: [
9
+ "ignore",
10
+ "pipe",
11
+ "ignore"
12
+ ]
13
+ }).trim();
14
+ return output.length > 0 ? output : null;
15
+ } catch {
16
+ log.warn("Git unavailable", [`Failed: ${command}`]);
17
+ return null;
18
+ }
19
+ }
20
+ //#endregion
21
+ export { runGitCommand };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.mjs","names":[],"sources":["../../../../src/internal/build/release/git.ts"],"sourcesContent":["import { execSync } from \"node:child_process\";\n\nimport { log } from \"../../logger.js\";\n\nexport function runGitCommand(command: string): string | null {\n try {\n const output = execSync(command, {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }).trim();\n\n return output.length > 0 ? output : null;\n } catch {\n log.warn(\"Git unavailable\", [`Failed: ${command}`]);\n return null;\n }\n}\n"],"mappings":";;;AAIA,SAAgB,cAAc,SAAgC;AAC5D,KAAI;EACF,MAAM,SAAS,SAAS,SAAS;GAC/B,UAAU;GACV,OAAO;IAAC;IAAU;IAAQ;IAAS;GACpC,CAAC,CAAC,MAAM;AAET,SAAO,OAAO,SAAS,IAAI,SAAS;SAC9B;AACN,MAAI,KAAK,mBAAmB,CAAC,WAAW,UAAU,CAAC;AACnD,SAAO"}
@@ -0,0 +1,7 @@
1
+ import { runGitCommand } from "./git.mjs";
2
+ import { CreateReleaseResponse } from "@interfere/types/releases/definition";
3
+
4
+ //#region src/internal/build/release/index.d.ts
5
+ declare function createRelease(apiKey: string, apiUrl: string, buildId: string): Promise<CreateReleaseResponse>;
6
+ //#endregion
7
+ export { createRelease, runGitCommand };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/internal/build/release/index.ts"],"mappings":";;;;iBAuBsB,aAAA,CACpB,MAAA,UACA,MAAA,UACA,OAAA,WACC,OAAA,CAAQ,qBAAA"}
@@ -0,0 +1,24 @@
1
+ import { runGitCommand } from "./git.mjs";
2
+ import { vercel_exports } from "./destinations/vercel.mjs";
3
+ import { github_exports } from "./sources/github.mjs";
4
+ import { Interfere } from "@interfere/sdk";
5
+ import { InterfereHTTPError } from "@interfere/sdk/models/errors/interfere-http-error.js";
6
+ //#region src/internal/build/release/index.ts
7
+ const sources = { github: github_exports };
8
+ const destinations = { vercel: vercel_exports };
9
+ async function createRelease(apiKey, apiUrl, buildId) {
10
+ const sdk = new Interfere({ serverURL: apiUrl });
11
+ const request = {
12
+ source: sources.github.resolve(),
13
+ destination: destinations.vercel.resolve(),
14
+ buildId
15
+ };
16
+ try {
17
+ return await sdk.releases.createRelease(request, { headers: { "x-api-key": apiKey } });
18
+ } catch (error) {
19
+ if (error instanceof InterfereHTTPError && error.statusCode === 404) throw new Error(`Interfere release API returned 404 at '${error.rawResponse.url}'. Is INTERFERE_API_URL incorrectly set?`);
20
+ throw error;
21
+ }
22
+ }
23
+ //#endregion
24
+ export { createRelease, runGitCommand };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/internal/build/release/index.ts"],"sourcesContent":["import type {\n DestinationProvider,\n SourceProvider,\n} from \"@interfere/types/integrations\";\nimport type { CreateReleaseResponse } from \"@interfere/types/releases/definition\";\n\nimport { Interfere } from \"@interfere/sdk\";\nimport { InterfereHTTPError } from \"@interfere/sdk/models/errors/interfere-http-error.js\";\n\nimport * as vercel from \"./destinations/vercel.js\";\nimport * as github from \"./sources/github.js\";\nimport type { DestinationResolver, SourceResolver } from \"./types.js\";\n\nexport { runGitCommand } from \"./git.js\";\n\nconst sources: Record<SourceProvider, SourceResolver> = {\n github,\n};\n\nconst destinations: Record<DestinationProvider, DestinationResolver> = {\n vercel,\n};\n\nexport async function createRelease(\n apiKey: string,\n apiUrl: string,\n buildId: string,\n): Promise<CreateReleaseResponse> {\n const sdk = new Interfere({ serverURL: apiUrl });\n\n const request = {\n source: sources.github.resolve(),\n destination: destinations.vercel.resolve(),\n buildId,\n };\n\n try {\n return await sdk.releases.createRelease(request, {\n headers: { \"x-api-key\": apiKey },\n });\n } catch (error) {\n if (error instanceof InterfereHTTPError && error.statusCode === 404) {\n throw new Error(\n `Interfere release API returned 404 at '${error.rawResponse.url}'. Is INTERFERE_API_URL incorrectly set?`,\n );\n }\n\n throw error;\n }\n}\n"],"mappings":";;;;;;AAeA,MAAM,UAAkD,EACtD,QAAA,gBACD;AAED,MAAM,eAAiE,EACrE,QAAA,gBACD;AAED,eAAsB,cACpB,QACA,QACA,SACgC;CAChC,MAAM,MAAM,IAAI,UAAU,EAAE,WAAW,QAAQ,CAAC;CAEhD,MAAM,UAAU;EACd,QAAQ,QAAQ,OAAO,SAAS;EAChC,aAAa,aAAa,OAAO,SAAS;EAC1C;EACD;AAED,KAAI;AACF,SAAO,MAAM,IAAI,SAAS,cAAc,SAAS,EAC/C,SAAS,EAAE,aAAa,QAAQ,EACjC,CAAC;UACK,OAAO;AACd,MAAI,iBAAiB,sBAAsB,MAAM,eAAe,IAC9D,OAAM,IAAI,MACR,0CAA0C,MAAM,YAAY,IAAI,0CACjE;AAGH,QAAM"}
@@ -0,0 +1,6 @@
1
+ import { ReleaseSourceMetadata } from "@interfere/types/integrations";
2
+
3
+ //#region src/internal/build/release/sources/github.d.ts
4
+ declare function resolve(): ReleaseSourceMetadata;
5
+ //#endregion
6
+ export { resolve };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.mts","names":[],"sources":["../../../../../src/internal/build/release/sources/github.ts"],"mappings":";;;iBAKgB,OAAA,CAAA,GAAW,qBAAA"}
@@ -0,0 +1,15 @@
1
+ import { __exportAll } from "../../../../_virtual/_rolldown/runtime.mjs";
2
+ import { runGitCommand } from "../git.mjs";
3
+ import { parseEnvValue } from "@interfere/types/sdk/env";
4
+ //#region src/internal/build/release/sources/github.ts
5
+ var github_exports = /* @__PURE__ */ __exportAll({ resolve: () => resolve });
6
+ function resolve() {
7
+ return {
8
+ provider: "github",
9
+ branch: parseEnvValue(process.env.VERCEL_GIT_COMMIT_REF) ?? parseEnvValue(process.env.GITHUB_REF_NAME) ?? parseEnvValue(process.env.GITHUB_HEAD_REF) ?? runGitCommand("git rev-parse --abbrev-ref HEAD") ?? "unknown",
10
+ commitMessage: parseEnvValue(process.env.VERCEL_GIT_COMMIT_MESSAGE) ?? runGitCommand("git log -1 --pretty=%B") ?? "",
11
+ commitSha: parseEnvValue(process.env.VERCEL_GIT_COMMIT_SHA) ?? parseEnvValue(process.env.GITHUB_SHA) ?? runGitCommand("git rev-parse HEAD")
12
+ };
13
+ }
14
+ //#endregion
15
+ export { github_exports, resolve };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.mjs","names":[],"sources":["../../../../../src/internal/build/release/sources/github.ts"],"sourcesContent":["import type { ReleaseSourceMetadata } from \"@interfere/types/integrations\";\nimport { parseEnvValue } from \"@interfere/types/sdk/env\";\n\nimport { runGitCommand } from \"../git.js\";\n\nexport function resolve(): ReleaseSourceMetadata {\n return {\n provider: \"github\",\n branch:\n parseEnvValue(process.env.VERCEL_GIT_COMMIT_REF) ??\n parseEnvValue(process.env.GITHUB_REF_NAME) ??\n parseEnvValue(process.env.GITHUB_HEAD_REF) ??\n runGitCommand(\"git rev-parse --abbrev-ref HEAD\") ??\n \"unknown\",\n commitMessage:\n parseEnvValue(process.env.VERCEL_GIT_COMMIT_MESSAGE) ??\n runGitCommand(\"git log -1 --pretty=%B\") ??\n \"\",\n commitSha:\n parseEnvValue(process.env.VERCEL_GIT_COMMIT_SHA) ??\n parseEnvValue(process.env.GITHUB_SHA) ??\n runGitCommand(\"git rev-parse HEAD\"),\n };\n}\n"],"mappings":";;;;;AAKA,SAAgB,UAAiC;AAC/C,QAAO;EACL,UAAU;EACV,QACE,cAAc,QAAQ,IAAI,sBAAsB,IAChD,cAAc,QAAQ,IAAI,gBAAgB,IAC1C,cAAc,QAAQ,IAAI,gBAAgB,IAC1C,cAAc,kCAAkC,IAChD;EACF,eACE,cAAc,QAAQ,IAAI,0BAA0B,IACpD,cAAc,yBAAyB,IACvC;EACF,WACE,cAAc,QAAQ,IAAI,sBAAsB,IAChD,cAAc,QAAQ,IAAI,WAAW,IACrC,cAAc,qBAAqB;EACtC"}
@@ -0,0 +1,11 @@
1
+ import { ReleaseDestinationMetadata, ReleaseSourceMetadata } from "@interfere/types/integrations";
2
+
3
+ //#region src/internal/build/release/types.d.ts
4
+ interface SourceResolver {
5
+ resolve(): ReleaseSourceMetadata;
6
+ }
7
+ interface DestinationResolver {
8
+ resolve(): ReleaseDestinationMetadata | null;
9
+ }
10
+ //#endregion
11
+ export { DestinationResolver, SourceResolver };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../../src/internal/build/release/types.ts"],"mappings":";;;UAKiB,cAAA;EACf,OAAA,IAAW,qBAAA;AAAA;AAAA,UAGI,mBAAA;EACf,OAAA,IAAW,0BAAA;AAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ //#region src/internal/build/source-maps/discover.d.ts
2
+ type SourceMapFile = {
3
+ readonly absolute: string;
4
+ readonly path: string;
5
+ readonly content: string;
6
+ readonly hash: string;
7
+ };
8
+ declare function discover(projectDir: string, distDir: string): Promise<{
9
+ files: SourceMapFile[];
10
+ mapping: Record<string, string>;
11
+ }>;
12
+ declare function normalizeDistDir(distDir?: string): string;
13
+ //#endregion
14
+ export { SourceMapFile, discover, normalizeDistDir };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.mts","names":[],"sources":["../../../../src/internal/build/source-maps/discover.ts"],"mappings":";KAMY,aAAA;EAAA,SACD,QAAA;EAAA,SACA,IAAA;EAAA,SACA,OAAA;EAAA,SACA,IAAA;AAAA;AAAA,iBAgBW,QAAA,CAAS,UAAA,UAAoB,OAAA,WAAe,OAAA;;;;iBAsDlD,gBAAA,CAAiB,OAAA"}
@@ -0,0 +1,61 @@
1
+ import { isAbsolute, join, relative, resolve } from "node:path";
2
+ import { createHash } from "node:crypto";
3
+ import { readFile, readdir } from "node:fs/promises";
4
+ //#region src/internal/build/source-maps/discover.ts
5
+ const SOURCEMAPPING_RE = /\/\/[#@]\s*sourceMappingURL=(\S+)\s*$/;
6
+ function resolveDistDir(projectDir, distDir) {
7
+ return isAbsolute(distDir) ? distDir : resolve(projectDir, distDir);
8
+ }
9
+ async function findJsFiles(dir) {
10
+ return (await readdir(dir, { recursive: true }).catch(() => [])).filter((entry) => entry.endsWith(".js")).map((entry) => join(dir, entry));
11
+ }
12
+ async function discover(projectDir, distDir) {
13
+ const absDistDir = resolveDistDir(projectDir, distDir);
14
+ const relDistDir = relative(projectDir, absDistDir);
15
+ const [staticFiles, serverFiles] = await Promise.all([findJsFiles(join(absDistDir, "static")), findJsFiles(join(absDistDir, "server"))]);
16
+ const jsPaths = [...staticFiles, ...serverFiles];
17
+ const mapping = {};
18
+ const mapAbsolutes = /* @__PURE__ */ new Map();
19
+ for (const jsAbs of jsPaths) {
20
+ const content = await readFile(jsAbs, "utf8");
21
+ const match = SOURCEMAPPING_RE.exec(content);
22
+ if (!match?.[1]) continue;
23
+ const mapAbs = `${jsAbs.slice(0, jsAbs.lastIndexOf("/") + 1)}${decodeURIComponent(match[1])}`;
24
+ const jsPublic = toPublicPath(relative(projectDir, jsAbs), relDistDir);
25
+ const mapPublic = toPublicPath(relative(projectDir, mapAbs), relDistDir);
26
+ mapping[mapPublic] = jsPublic;
27
+ mapAbsolutes.set(mapPublic, mapAbs);
28
+ }
29
+ const loaded = (await Promise.all([...mapAbsolutes.entries()].map(async ([mapPublic, mapAbs]) => {
30
+ const content = await readFile(mapAbs, "utf8").catch(() => null);
31
+ if (content === null) return null;
32
+ return {
33
+ absolute: mapAbs,
34
+ path: mapPublic,
35
+ content,
36
+ hash: createHash("sha256").update(content).digest("hex")
37
+ };
38
+ }))).filter((f) => f !== null);
39
+ const validMapping = {};
40
+ for (const file of loaded) {
41
+ const js = mapping[file.path];
42
+ if (js) validMapping[file.path] = js;
43
+ }
44
+ return {
45
+ files: loaded,
46
+ mapping: validMapping
47
+ };
48
+ }
49
+ function normalizeDistDir(distDir = ".next") {
50
+ let d = distDir.split("\\").join("/");
51
+ while (d.startsWith("./")) d = d.slice(2);
52
+ return d;
53
+ }
54
+ function toPublicPath(rel, distDir) {
55
+ const p = rel.split("\\").join("/");
56
+ if (p.startsWith(`${distDir}/`)) return `_next/${p.slice(distDir.length + 1)}`;
57
+ if (p.startsWith(".next/")) return `_next/${p.slice(6)}`;
58
+ return p;
59
+ }
60
+ //#endregion
61
+ export { discover, normalizeDistDir };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.mjs","names":[],"sources":["../../../../src/internal/build/source-maps/discover.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport { isAbsolute, join, relative, resolve } from \"node:path\";\n\nconst SOURCEMAPPING_RE = /\\/\\/[#@]\\s*sourceMappingURL=(\\S+)\\s*$/;\n\nexport type SourceMapFile = {\n readonly absolute: string;\n readonly path: string;\n readonly content: string;\n readonly hash: string;\n};\n\nfunction resolveDistDir(projectDir: string, distDir: string) {\n return isAbsolute(distDir) ? distDir : resolve(projectDir, distDir);\n}\n\nasync function findJsFiles(dir: string) {\n const entries = await readdir(dir, { recursive: true }).catch(\n () => [] as string[]\n );\n return entries\n .filter((entry) => entry.endsWith(\".js\"))\n .map((entry) => join(dir, entry));\n}\n\nexport async function discover(projectDir: string, distDir: string) {\n const absDistDir = resolveDistDir(projectDir, distDir);\n const relDistDir = relative(projectDir, absDistDir);\n\n const [staticFiles, serverFiles] = await Promise.all([\n findJsFiles(join(absDistDir, \"static\")),\n findJsFiles(join(absDistDir, \"server\")),\n ]);\n\n const jsPaths = [...staticFiles, ...serverFiles];\n\n const mapping: Record<string, string> = {};\n const mapAbsolutes = new Map<string, string>();\n\n for (const jsAbs of jsPaths) {\n const content = await readFile(jsAbs, \"utf8\");\n const match = SOURCEMAPPING_RE.exec(content);\n if (!match?.[1]) continue;\n\n const jsDir = jsAbs.slice(0, jsAbs.lastIndexOf(\"/\") + 1);\n const mapRef = decodeURIComponent(match[1]);\n const mapAbs = `${jsDir}${mapRef}`;\n const jsPublic = toPublicPath(relative(projectDir, jsAbs), relDistDir);\n const mapPublic = toPublicPath(relative(projectDir, mapAbs), relDistDir);\n\n mapping[mapPublic] = jsPublic;\n mapAbsolutes.set(mapPublic, mapAbs);\n }\n\n const files = await Promise.all(\n [...mapAbsolutes.entries()].map(async ([mapPublic, mapAbs]) => {\n const content = await readFile(mapAbs, \"utf8\").catch(() => null);\n if (content === null) return null;\n\n return {\n absolute: mapAbs,\n path: mapPublic,\n content,\n hash: createHash(\"sha256\").update(content).digest(\"hex\"),\n };\n }),\n );\n\n const loaded = files.filter((f): f is SourceMapFile => f !== null);\n\n const validMapping: Record<string, string> = {};\n for (const file of loaded) {\n const js = mapping[file.path];\n if (js) validMapping[file.path] = js;\n }\n\n return { files: loaded, mapping: validMapping };\n}\n\nexport function normalizeDistDir(distDir = \".next\") {\n let d = distDir.split(\"\\\\\").join(\"/\");\n while (d.startsWith(\"./\")) d = d.slice(2);\n return d;\n}\n\nfunction toPublicPath(rel: string, distDir: string) {\n const p = rel.split(\"\\\\\").join(\"/\");\n if (p.startsWith(`${distDir}/`)) return `_next/${p.slice(distDir.length + 1)}`;\n if (p.startsWith(\".next/\")) return `_next/${p.slice(6)}`;\n return p;\n}\n"],"mappings":";;;;AAIA,MAAM,mBAAmB;AASzB,SAAS,eAAe,YAAoB,SAAiB;AAC3D,QAAO,WAAW,QAAQ,GAAG,UAAU,QAAQ,YAAY,QAAQ;;AAGrE,eAAe,YAAY,KAAa;AAItC,SAHgB,MAAM,QAAQ,KAAK,EAAE,WAAW,MAAM,CAAC,CAAC,YAChD,EAAE,CACT,EAEE,QAAQ,UAAU,MAAM,SAAS,MAAM,CAAC,CACxC,KAAK,UAAU,KAAK,KAAK,MAAM,CAAC;;AAGrC,eAAsB,SAAS,YAAoB,SAAiB;CAClE,MAAM,aAAa,eAAe,YAAY,QAAQ;CACtD,MAAM,aAAa,SAAS,YAAY,WAAW;CAEnD,MAAM,CAAC,aAAa,eAAe,MAAM,QAAQ,IAAI,CACnD,YAAY,KAAK,YAAY,SAAS,CAAC,EACvC,YAAY,KAAK,YAAY,SAAS,CAAC,CACxC,CAAC;CAEF,MAAM,UAAU,CAAC,GAAG,aAAa,GAAG,YAAY;CAEhD,MAAM,UAAkC,EAAE;CAC1C,MAAM,+BAAe,IAAI,KAAqB;AAE9C,MAAK,MAAM,SAAS,SAAS;EAC3B,MAAM,UAAU,MAAM,SAAS,OAAO,OAAO;EAC7C,MAAM,QAAQ,iBAAiB,KAAK,QAAQ;AAC5C,MAAI,CAAC,QAAQ,GAAI;EAIjB,MAAM,SAAS,GAFD,MAAM,MAAM,GAAG,MAAM,YAAY,IAAI,GAAG,EAAE,GACzC,mBAAmB,MAAM,GAAG;EAE3C,MAAM,WAAW,aAAa,SAAS,YAAY,MAAM,EAAE,WAAW;EACtE,MAAM,YAAY,aAAa,SAAS,YAAY,OAAO,EAAE,WAAW;AAExE,UAAQ,aAAa;AACrB,eAAa,IAAI,WAAW,OAAO;;CAiBrC,MAAM,UAdQ,MAAM,QAAQ,IAC1B,CAAC,GAAG,aAAa,SAAS,CAAC,CAAC,IAAI,OAAO,CAAC,WAAW,YAAY;EAC7D,MAAM,UAAU,MAAM,SAAS,QAAQ,OAAO,CAAC,YAAY,KAAK;AAChE,MAAI,YAAY,KAAM,QAAO;AAE7B,SAAO;GACL,UAAU;GACV,MAAM;GACN;GACA,MAAM,WAAW,SAAS,CAAC,OAAO,QAAQ,CAAC,OAAO,MAAM;GACzD;GACD,CACH,EAEoB,QAAQ,MAA0B,MAAM,KAAK;CAElE,MAAM,eAAuC,EAAE;AAC/C,MAAK,MAAM,QAAQ,QAAQ;EACzB,MAAM,KAAK,QAAQ,KAAK;AACxB,MAAI,GAAI,cAAa,KAAK,QAAQ;;AAGpC,QAAO;EAAE,OAAO;EAAQ,SAAS;EAAc;;AAGjD,SAAgB,iBAAiB,UAAU,SAAS;CAClD,IAAI,IAAI,QAAQ,MAAM,KAAK,CAAC,KAAK,IAAI;AACrC,QAAO,EAAE,WAAW,KAAK,CAAE,KAAI,EAAE,MAAM,EAAE;AACzC,QAAO;;AAGT,SAAS,aAAa,KAAa,SAAiB;CAClD,MAAM,IAAI,IAAI,MAAM,KAAK,CAAC,KAAK,IAAI;AACnC,KAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,CAAE,QAAO,SAAS,EAAE,MAAM,QAAQ,SAAS,EAAE;AAC5E,KAAI,EAAE,WAAW,SAAS,CAAE,QAAO,SAAS,EAAE,MAAM,EAAE;AACtD,QAAO"}
@@ -0,0 +1,23 @@
1
+ //#region src/internal/build/source-maps/index.d.ts
2
+ interface BuildClient {
3
+ createRelease(): Promise<{
4
+ slug: string;
5
+ orgSlug: string;
6
+ buildId: string;
7
+ }>;
8
+ uploadSourceMaps(releaseSlug: string, body: FormData): Promise<void>;
9
+ }
10
+ type PipelineResult = {
11
+ ready: false;
12
+ reason: "no_source_maps";
13
+ fileCount: 0;
14
+ } | {
15
+ ready: true;
16
+ fileCount: number;
17
+ releaseSlug: string;
18
+ orgSlug: string;
19
+ buildId: string;
20
+ };
21
+ declare function runSourceMapPipeline(projectDir: string, distDir: string | undefined, client: BuildClient, cleanup?: boolean): Promise<PipelineResult>;
22
+ //#endregion
23
+ export { BuildClient, PipelineResult, runSourceMapPipeline };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/internal/build/source-maps/index.ts"],"mappings":";UAIiB,WAAA;EACf,aAAA,IAAiB,OAAA;IAAU,IAAA;IAAc,OAAA;IAAiB,OAAA;EAAA;EAC1D,gBAAA,CAAiB,WAAA,UAAqB,IAAA,EAAM,QAAA,GAAW,OAAA;AAAA;AAAA,KAG7C,cAAA;EACN,KAAA;EAAc,MAAA;EAA0B,SAAA;AAAA;EACxC,KAAA;EAAa,SAAA;EAAmB,WAAA;EAAqB,OAAA;EAAiB,OAAA;AAAA;AAAA,iBAEtD,oBAAA,CACpB,UAAA,UACA,OAAA,sBACA,MAAA,EAAQ,WAAA,EACR,OAAA,aACC,OAAA,CAAQ,cAAA"}
@@ -0,0 +1,33 @@
1
+ import { discover, normalizeDistDir } from "./discover.mjs";
2
+ import { unlink } from "node:fs/promises";
3
+ //#region src/internal/build/source-maps/index.ts
4
+ async function runSourceMapPipeline(projectDir, distDir, client, cleanup = true) {
5
+ const { files, mapping } = await discover(projectDir, normalizeDistDir(distDir));
6
+ if (files.length === 0) return {
7
+ ready: false,
8
+ reason: "no_source_maps",
9
+ fileCount: 0
10
+ };
11
+ const { slug, orgSlug, buildId } = await client.createRelease();
12
+ const body = new FormData();
13
+ const hashes = {};
14
+ for (const file of files) {
15
+ body.append("files", new Blob([file.content], { type: "application/json" }), file.path);
16
+ hashes[file.path] = file.hash;
17
+ }
18
+ body.append("metadata", JSON.stringify({
19
+ sourceMapToGenerated: mapping,
20
+ hashes
21
+ }));
22
+ await client.uploadSourceMaps(slug, body);
23
+ if (cleanup) await Promise.all(files.map((f) => unlink(f.absolute).catch(() => void 0)));
24
+ return {
25
+ ready: true,
26
+ fileCount: files.length,
27
+ releaseSlug: slug,
28
+ orgSlug,
29
+ buildId
30
+ };
31
+ }
32
+ //#endregion
33
+ export { runSourceMapPipeline };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/internal/build/source-maps/index.ts"],"sourcesContent":["import { unlink } from \"node:fs/promises\";\n\nimport { discover, normalizeDistDir } from \"./discover.js\";\n\nexport interface BuildClient {\n createRelease(): Promise<{ slug: string; orgSlug: string; buildId: string }>;\n uploadSourceMaps(releaseSlug: string, body: FormData): Promise<void>;\n}\n\nexport type PipelineResult =\n | { ready: false; reason: \"no_source_maps\"; fileCount: 0 }\n | { ready: true; fileCount: number; releaseSlug: string; orgSlug: string; buildId: string };\n\nexport async function runSourceMapPipeline(\n projectDir: string,\n distDir: string | undefined,\n client: BuildClient,\n cleanup = true,\n): Promise<PipelineResult> {\n const { files, mapping } = await discover(projectDir, normalizeDistDir(distDir));\n\n if (files.length === 0) {\n return { ready: false, reason: \"no_source_maps\", fileCount: 0 };\n }\n\n const { slug, orgSlug, buildId } = await client.createRelease();\n\n const body = new FormData();\n const hashes: Record<string, string> = {};\n\n for (const file of files) {\n body.append(\"files\", new Blob([file.content], { type: \"application/json\" }), file.path);\n hashes[file.path] = file.hash;\n }\n\n body.append(\"metadata\", JSON.stringify({ sourceMapToGenerated: mapping, hashes }));\n\n await client.uploadSourceMaps(slug, body);\n\n if (cleanup) {\n await Promise.all(files.map((f) => unlink(f.absolute).catch(() => undefined)));\n }\n\n return { ready: true, fileCount: files.length, releaseSlug: slug, orgSlug, buildId };\n}\n"],"mappings":";;;AAaA,eAAsB,qBACpB,YACA,SACA,QACA,UAAU,MACe;CACzB,MAAM,EAAE,OAAO,YAAY,MAAM,SAAS,YAAY,iBAAiB,QAAQ,CAAC;AAEhF,KAAI,MAAM,WAAW,EACnB,QAAO;EAAE,OAAO;EAAO,QAAQ;EAAkB,WAAW;EAAG;CAGjE,MAAM,EAAE,MAAM,SAAS,YAAY,MAAM,OAAO,eAAe;CAE/D,MAAM,OAAO,IAAI,UAAU;CAC3B,MAAM,SAAiC,EAAE;AAEzC,MAAK,MAAM,QAAQ,OAAO;AACxB,OAAK,OAAO,SAAS,IAAI,KAAK,CAAC,KAAK,QAAQ,EAAE,EAAE,MAAM,oBAAoB,CAAC,EAAE,KAAK,KAAK;AACvF,SAAO,KAAK,QAAQ,KAAK;;AAG3B,MAAK,OAAO,YAAY,KAAK,UAAU;EAAE,sBAAsB;EAAS;EAAQ,CAAC,CAAC;AAElF,OAAM,OAAO,iBAAiB,MAAM,KAAK;AAEzC,KAAI,QACF,OAAM,QAAQ,IAAI,MAAM,KAAK,MAAM,OAAO,EAAE,SAAS,CAAC,YAAY,KAAA,EAAU,CAAC,CAAC;AAGhF,QAAO;EAAE,OAAO;EAAM,WAAW,MAAM;EAAQ,aAAa;EAAM;EAAS;EAAS"}
@@ -0,0 +1,10 @@
1
+ import { InterfereInjectedValues } from "./injected.mjs";
2
+
3
+ //#region src/internal/build/value-injection-loader.d.ts
4
+ interface ValueInjectionLoaderOptions {
5
+ readonly values?: Partial<InterfereInjectedValues>;
6
+ readonly serializedValues?: string;
7
+ }
8
+ declare function valueInjectionLoader(this: LoaderContext<ValueInjectionLoaderOptions>, userCode: string): string;
9
+ //#endregion
10
+ export { ValueInjectionLoaderOptions, valueInjectionLoader as default };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-injection-loader.d.mts","names":[],"sources":["../../../src/internal/build/value-injection-loader.ts"],"mappings":";;;UAIiB,2BAAA;EAAA,SACN,MAAA,GAAS,OAAA,CAAQ,uBAAA;EAAA,SACjB,gBAAA;AAAA;AAAA,iBAGa,oBAAA,CACtB,IAAA,EAAM,aAAA,CAAc,2BAAA,GACpB,QAAA"}
@@ -0,0 +1,24 @@
1
+ //#region src/internal/build/value-injection-loader.ts
2
+ function valueInjectionLoader(userCode) {
3
+ const values = resolveValues(this.getOptions());
4
+ const lines = Object.entries(values).filter(([, value]) => value !== void 0).map(([key, value]) => {
5
+ return `globalThis["${key.replace(/\\/g, "\\\\").replace(/"/g, "\\\"")}"] = ${JSON.stringify(value)};`;
6
+ });
7
+ if (lines.length === 0) return userCode;
8
+ return `${lines.join("\n")}\n${userCode}`;
9
+ }
10
+ function resolveValues(options) {
11
+ if (typeof options.serializedValues === "string") try {
12
+ const parsed = JSON.parse(options.serializedValues);
13
+ if (isRecord(parsed)) return parsed;
14
+ return {};
15
+ } catch {
16
+ return {};
17
+ }
18
+ return options.values ?? {};
19
+ }
20
+ function isRecord(value) {
21
+ return typeof value === "object" && value !== null && !Array.isArray(value);
22
+ }
23
+ //#endregion
24
+ export { valueInjectionLoader as default };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-injection-loader.mjs","names":[],"sources":["../../../src/internal/build/value-injection-loader.ts"],"sourcesContent":["import type { LoaderContext } from \"webpack\";\n\nimport type { InterfereInjectedValues } from \"./injected.js\";\n\nexport interface ValueInjectionLoaderOptions {\n readonly values?: Partial<InterfereInjectedValues>;\n readonly serializedValues?: string;\n}\n\nexport default function valueInjectionLoader(\n this: LoaderContext<ValueInjectionLoaderOptions>,\n userCode: string\n): string {\n const values = resolveValues(this.getOptions());\n const lines = Object.entries(values)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => {\n const escapedKey = key.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n return `globalThis[\"${escapedKey}\"] = ${JSON.stringify(value)};`;\n });\n\n if (lines.length === 0) {\n return userCode;\n }\n\n return `${lines.join(\"\\n\")}\\n${userCode}`;\n}\n\nfunction resolveValues(options: ValueInjectionLoaderOptions): Record<string, unknown> {\n if (typeof options.serializedValues === \"string\") {\n try {\n const parsed = JSON.parse(options.serializedValues);\n if (isRecord(parsed)) {\n return parsed;\n }\n return {};\n } catch {\n return {};\n }\n }\n\n return options.values ?? {};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":";AASA,SAAwB,qBAEtB,UACQ;CACR,MAAM,SAAS,cAAc,KAAK,YAAY,CAAC;CAC/C,MAAM,QAAQ,OAAO,QAAQ,OAAO,CACjC,QAAQ,GAAG,WAAW,UAAU,KAAA,EAAU,CAC1C,KAAK,CAAC,KAAK,WAAW;AAErB,SAAO,eADY,IAAI,QAAQ,OAAO,OAAO,CAAC,QAAQ,MAAM,OAAM,CACjC,OAAO,KAAK,UAAU,MAAM,CAAC;GAC9D;AAEJ,KAAI,MAAM,WAAW,EACnB,QAAO;AAGT,QAAO,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI;;AAGjC,SAAS,cAAc,SAA+D;AACpF,KAAI,OAAO,QAAQ,qBAAqB,SACtC,KAAI;EACF,MAAM,SAAS,KAAK,MAAM,QAAQ,iBAAiB;AACnD,MAAI,SAAS,OAAO,CAClB,QAAO;AAET,SAAO,EAAE;SACH;AACN,SAAO,EAAE;;AAIb,QAAO,QAAQ,UAAU,EAAE;;AAG7B,SAAS,SAAS,OAAkD;AAClE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM"}
@@ -0,0 +1,16 @@
1
+ import { Env } from "@interfere/types/sdk/runtime";
2
+
3
+ //#region src/internal/env.d.ts
4
+ interface InterfereEnv {
5
+ readonly apiKey: string | null;
6
+ readonly apiUrl: string;
7
+ readonly nextRuntime: string | null;
8
+ readonly nodeEnvironment: Exclude<Env, null>;
9
+ readonly release: {
10
+ readonly sourceId: string | null;
11
+ readonly destinationId: string | null;
12
+ };
13
+ }
14
+ declare function readInterfereEnv(): InterfereEnv;
15
+ //#endregion
16
+ export { InterfereEnv, readInterfereEnv };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.mts","names":[],"sources":["../../src/internal/env.ts"],"mappings":";;;UAKiB,YAAA;EAAA,SACN,MAAA;EAAA,SACA,MAAA;EAAA,SACA,WAAA;EAAA,SACA,eAAA,EAAiB,OAAA,CAAQ,GAAA;EAAA,SACzB,OAAA;IAAA,SACE,QAAA;IAAA,SACA,aAAA;EAAA;AAAA;AAAA,iBAIG,gBAAA,CAAA,GAAoB,YAAA"}
@@ -0,0 +1,19 @@
1
+ import { parseEnvValue } from "@interfere/types/sdk/env";
2
+ import { API_URL } from "@interfere/constants/api";
3
+ import { normalizeEnv } from "@interfere/types/sdk/runtime";
4
+ //#region src/internal/env.ts
5
+ function readInterfereEnv() {
6
+ const nodeEnvironment = normalizeEnv(process.env.NODE_ENV) ?? "production";
7
+ return {
8
+ apiKey: parseEnvValue(process.env.INTERFERE_API_KEY),
9
+ apiUrl: parseEnvValue(process.env.INTERFERE_API_URL) ?? API_URL,
10
+ nextRuntime: parseEnvValue(process.env.NEXT_RUNTIME),
11
+ nodeEnvironment,
12
+ release: {
13
+ sourceId: parseEnvValue(process.env.NEXT_PUBLIC_INTERFERE_BUILD_ID),
14
+ destinationId: parseEnvValue(process.env.NEXT_PUBLIC_INTERFERE_RELEASE_ID)
15
+ }
16
+ };
17
+ }
18
+ //#endregion
19
+ export { readInterfereEnv };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.mjs","names":[],"sources":["../../src/internal/env.ts"],"sourcesContent":["import { API_URL } from \"@interfere/constants/api\";\nimport { parseEnvValue } from \"@interfere/types/sdk/env\";\nimport type { Env } from \"@interfere/types/sdk/runtime\";\nimport { normalizeEnv } from \"@interfere/types/sdk/runtime\";\n\nexport interface InterfereEnv {\n readonly apiKey: string | null;\n readonly apiUrl: string;\n readonly nextRuntime: string | null;\n readonly nodeEnvironment: Exclude<Env, null>;\n readonly release: {\n readonly sourceId: string | null;\n readonly destinationId: string | null;\n };\n}\n\nexport function readInterfereEnv(): InterfereEnv {\n const nodeEnvironment = normalizeEnv(process.env.NODE_ENV) ?? \"production\";\n return {\n apiKey: parseEnvValue(process.env.INTERFERE_API_KEY),\n apiUrl: parseEnvValue(process.env.INTERFERE_API_URL) ?? API_URL,\n nextRuntime: parseEnvValue(process.env.NEXT_RUNTIME),\n nodeEnvironment,\n release: {\n sourceId: parseEnvValue(process.env.NEXT_PUBLIC_INTERFERE_BUILD_ID),\n destinationId: parseEnvValue(\n process.env.NEXT_PUBLIC_INTERFERE_RELEASE_ID\n ),\n },\n };\n}\n"],"mappings":";;;;AAgBA,SAAgB,mBAAiC;CAC/C,MAAM,kBAAkB,aAAa,QAAQ,IAAI,SAAS,IAAI;AAC9D,QAAO;EACL,QAAQ,cAAc,QAAQ,IAAI,kBAAkB;EACpD,QAAQ,cAAc,QAAQ,IAAI,kBAAkB,IAAI;EACxD,aAAa,cAAc,QAAQ,IAAI,aAAa;EACpD;EACA,SAAS;GACP,UAAU,cAAc,QAAQ,IAAI,+BAA+B;GACnE,eAAe,cACb,QAAQ,IAAI,iCACb;GACF;EACF"}
@@ -0,0 +1,8 @@
1
+ //#region src/internal/logger.d.ts
2
+ declare const log: {
3
+ info: (title: string, lines: string[]) => void;
4
+ warn: (title: string, lines: string[]) => void;
5
+ error: (title: string, lines: string[]) => void;
6
+ };
7
+ //#endregion
8
+ export { log };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.mts","names":[],"sources":["../../src/internal/logger.ts"],"mappings":";cA0Da,GAAA;wBACS,KAAA;wBACA,KAAA;yBACC,KAAA;AAAA"}
@@ -0,0 +1,44 @@
1
+ import chalk from "chalk";
2
+ //#region src/internal/logger.ts
3
+ const styles = {
4
+ info: {
5
+ prefix: `${chalk.whiteBright.bold("❖")}`,
6
+ text: chalk.cyan.bold,
7
+ content: chalk.white
8
+ },
9
+ warn: {
10
+ prefix: `${chalk.yellow.bold("⚠")} `,
11
+ text: chalk.yellow.bold,
12
+ content: chalk.yellowBright
13
+ },
14
+ error: {
15
+ prefix: `${chalk.red.bold("⨯")} `,
16
+ text: chalk.red.bold,
17
+ content: chalk.redBright
18
+ }
19
+ };
20
+ const consoleMethods = {
21
+ info: "log",
22
+ warn: "warn",
23
+ error: "error"
24
+ };
25
+ function isTestEnv() {
26
+ return Boolean(process.env.VITEST || process.env.VITEST_WORKER_ID);
27
+ }
28
+ function emit(level, title, lines) {
29
+ if (isTestEnv()) return;
30
+ const style = styles[level];
31
+ const method = consoleMethods[level];
32
+ const fn = globalThis.console[method];
33
+ if (typeof fn !== "function") return;
34
+ const invoke = (...args) => Reflect.apply(fn, globalThis.console, args);
35
+ invoke(`${style.prefix} ${chalk.white("Interfere →")} ${style.text(title)}`);
36
+ for (const [i, line] of lines.entries()) invoke(`${i === lines.length - 1 ? "└" : "├"} ${style.content(line)}`);
37
+ }
38
+ const log = {
39
+ info: (title, lines) => emit("info", title, lines),
40
+ warn: (title, lines) => emit("warn", title, lines),
41
+ error: (title, lines) => emit("error", title, lines)
42
+ };
43
+ //#endregion
44
+ export { log };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.mjs","names":[],"sources":["../../src/internal/logger.ts"],"sourcesContent":["import chalk from \"chalk\";\n\ntype LogLevel = \"info\" | \"warn\" | \"error\";\n\nconst styles = {\n info: {\n prefix: `${chalk.whiteBright.bold(\"❖\")}`,\n text: chalk.cyan.bold,\n content: chalk.white,\n },\n warn: {\n prefix: `${chalk.yellow.bold(\"⚠\")} `,\n text: chalk.yellow.bold,\n content: chalk.yellowBright,\n },\n error: {\n prefix: `${chalk.red.bold(\"⨯\")} `,\n text: chalk.red.bold,\n content: chalk.redBright,\n },\n} satisfies Record<\n LogLevel,\n { prefix: string; text: typeof chalk.bold; content: typeof chalk }\n>;\n\nconst consoleMethods = {\n info: \"log\",\n warn: \"warn\",\n error: \"error\",\n} satisfies Record<LogLevel, string>;\n\nfunction isTestEnv() {\n return Boolean(process.env.VITEST || process.env.VITEST_WORKER_ID);\n}\n\nfunction emit(level: LogLevel, title: string, lines: string[]) {\n if (isTestEnv()) {\n return;\n }\n\n const style = styles[level];\n const method = consoleMethods[level] as keyof Console;\n const fn = globalThis.console[method];\n if (typeof fn !== \"function\") {\n return;\n }\n\n const invoke = (...args: unknown[]) =>\n Reflect.apply(fn, globalThis.console, args);\n\n invoke(`${style.prefix} ${chalk.white(\"Interfere →\")} ${style.text(title)}`);\n\n for (const [i, line] of lines.entries()) {\n const connector = i === lines.length - 1 ? \"└\" : \"├\";\n invoke(`${connector} ${style.content(line)}`);\n }\n}\n\nexport const log = {\n info: (title: string, lines: string[]) => emit(\"info\", title, lines),\n warn: (title: string, lines: string[]) => emit(\"warn\", title, lines),\n error: (title: string, lines: string[]) => emit(\"error\", title, lines),\n};\n"],"mappings":";;AAIA,MAAM,SAAS;CACb,MAAM;EACJ,QAAQ,GAAG,MAAM,YAAY,KAAK,IAAI;EACtC,MAAM,MAAM,KAAK;EACjB,SAAS,MAAM;EAChB;CACD,MAAM;EACJ,QAAQ,GAAG,MAAM,OAAO,KAAK,IAAI,CAAC;EAClC,MAAM,MAAM,OAAO;EACnB,SAAS,MAAM;EAChB;CACD,OAAO;EACL,QAAQ,GAAG,MAAM,IAAI,KAAK,IAAI,CAAC;EAC/B,MAAM,MAAM,IAAI;EAChB,SAAS,MAAM;EAChB;CACF;AAKD,MAAM,iBAAiB;CACrB,MAAM;CACN,MAAM;CACN,OAAO;CACR;AAED,SAAS,YAAY;AACnB,QAAO,QAAQ,QAAQ,IAAI,UAAU,QAAQ,IAAI,iBAAiB;;AAGpE,SAAS,KAAK,OAAiB,OAAe,OAAiB;AAC7D,KAAI,WAAW,CACb;CAGF,MAAM,QAAQ,OAAO;CACrB,MAAM,SAAS,eAAe;CAC9B,MAAM,KAAK,WAAW,QAAQ;AAC9B,KAAI,OAAO,OAAO,WAChB;CAGF,MAAM,UAAU,GAAG,SACjB,QAAQ,MAAM,IAAI,WAAW,SAAS,KAAK;AAE7C,QAAO,GAAG,MAAM,OAAO,GAAG,MAAM,MAAM,cAAc,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG;AAE5E,MAAK,MAAM,CAAC,GAAG,SAAS,MAAM,SAAS,CAErC,QAAO,GADW,MAAM,MAAM,SAAS,IAAI,MAAM,IAC7B,GAAG,MAAM,QAAQ,KAAK,GAAG;;AAIjD,MAAa,MAAM;CACjB,OAAO,OAAe,UAAoB,KAAK,QAAQ,OAAO,MAAM;CACpE,OAAO,OAAe,UAAoB,KAAK,QAAQ,OAAO,MAAM;CACpE,QAAQ,OAAe,UAAoB,KAAK,SAAS,OAAO,MAAM;CACvE"}
@@ -0,0 +1,4 @@
1
+ //#region src/internal/route/cors.d.ts
2
+ declare function handleOptions(): Response;
3
+ //#endregion
4
+ export { handleOptions };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.mts","names":[],"sources":["../../../src/internal/route/cors.ts"],"mappings":";iBAOgB,aAAA,CAAA,GAAiB,QAAA"}
@@ -0,0 +1,15 @@
1
+ //#region src/internal/route/cors.ts
2
+ const CORS_HEADERS = {
3
+ "Access-Control-Allow-Origin": "*",
4
+ "Access-Control-Allow-Methods": "GET, POST, PUT, OPTIONS",
5
+ "Access-Control-Allow-Headers": "Content-Type",
6
+ "Access-Control-Max-Age": "86400"
7
+ };
8
+ function handleOptions() {
9
+ return new Response(null, {
10
+ status: 200,
11
+ headers: CORS_HEADERS
12
+ });
13
+ }
14
+ //#endregion
15
+ export { handleOptions };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.mjs","names":[],"sources":["../../../src/internal/route/cors.ts"],"sourcesContent":["const CORS_HEADERS = {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"GET, POST, PUT, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type\",\n \"Access-Control-Max-Age\": \"86400\",\n};\n\nexport function handleOptions(): Response {\n return new Response(null, {\n status: 200,\n headers: CORS_HEADERS,\n });\n}\n"],"mappings":";AAAA,MAAM,eAAe;CACnB,+BAA+B;CAC/B,gCAAgC;CAChC,gCAAgC;CAChC,0BAA0B;CAC3B;AAED,SAAgB,gBAA0B;AACxC,QAAO,IAAI,SAAS,MAAM;EACxB,QAAQ;EACR,SAAS;EACV,CAAC"}
@@ -0,0 +1,4 @@
1
+ //#region src/internal/route/handle-get.d.ts
2
+ declare function handleGet(request: Request): Response;
3
+ //#endregion
4
+ export { handleGet };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-get.d.mts","names":[],"sources":["../../../src/internal/route/handle-get.ts"],"mappings":";iBAEgB,SAAA,CAAU,OAAA,EAAS,OAAA,GAAU,QAAA"}
@@ -0,0 +1,15 @@
1
+ import { SW_SCRIPT } from "./sw-script.mjs";
2
+ //#region src/internal/route/handle-get.ts
3
+ function handleGet(request) {
4
+ if (!new URL(request.url).pathname.endsWith("/sw")) return new Response("Not Found", { status: 404 });
5
+ return new Response(SW_SCRIPT, {
6
+ status: 200,
7
+ headers: {
8
+ "content-type": "application/javascript",
9
+ "service-worker-allowed": "/",
10
+ "cache-control": "public, max-age=3600"
11
+ }
12
+ });
13
+ }
14
+ //#endregion
15
+ export { handleGet };