@shware/http 2.11.4 → 2.12.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 (236) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +13 -0
  2. package/dist/_virtual/_rolldown/runtime.mjs +13 -0
  3. package/dist/cache/index.cjs +5 -30
  4. package/dist/cache/index.cjs.map +1 -1
  5. package/dist/cache/index.d.cts +7 -5
  6. package/dist/cache/index.d.cts.map +1 -0
  7. package/dist/cache/index.d.mts +11 -0
  8. package/dist/cache/index.d.mts.map +1 -0
  9. package/dist/cache/index.mjs +5 -6
  10. package/dist/cache/index.mjs.map +1 -1
  11. package/dist/error/detail.cjs +100 -90
  12. package/dist/error/detail.cjs.map +1 -1
  13. package/dist/error/detail.d.cts +77 -78
  14. package/dist/error/detail.d.cts.map +1 -0
  15. package/dist/error/detail.d.mts +108 -0
  16. package/dist/error/detail.d.mts.map +1 -0
  17. package/dist/error/detail.mjs +99 -65
  18. package/dist/error/detail.mjs.map +1 -1
  19. package/dist/error/i18n/en-us.cjs +5 -29
  20. package/dist/error/i18n/en-us.cjs.map +1 -1
  21. package/dist/error/i18n/en-us.d.cts +3 -1
  22. package/dist/error/i18n/en-us.d.cts.map +1 -0
  23. package/dist/error/i18n/en-us.d.mts +5 -0
  24. package/dist/error/i18n/en-us.d.mts.map +1 -0
  25. package/dist/error/i18n/en-us.mjs +5 -5
  26. package/dist/error/i18n/en-us.mjs.map +1 -1
  27. package/dist/error/index.cjs +29 -56
  28. package/dist/error/index.cjs.map +1 -1
  29. package/dist/error/index.d.cts +12 -10
  30. package/dist/error/index.d.cts.map +1 -0
  31. package/dist/error/index.d.mts +21 -0
  32. package/dist/error/index.d.mts.map +1 -0
  33. package/dist/error/index.mjs +25 -28
  34. package/dist/error/index.mjs.map +1 -1
  35. package/dist/error/parse.cjs +63 -61
  36. package/dist/error/parse.cjs.map +1 -1
  37. package/dist/error/parse.d.cts +8 -7
  38. package/dist/error/parse.d.cts.map +1 -0
  39. package/dist/error/{parse.d.ts → parse.d.mts} +8 -7
  40. package/dist/error/parse.d.mts.map +1 -0
  41. package/dist/error/parse.mjs +59 -33
  42. package/dist/error/parse.mjs.map +1 -1
  43. package/dist/error/reason.cjs +0 -19
  44. package/dist/error/reason.d.cts +5 -4
  45. package/dist/error/reason.d.cts.map +1 -0
  46. package/dist/error/reason.d.mts +6 -0
  47. package/dist/error/reason.d.mts.map +1 -0
  48. package/dist/error/reason.mjs +1 -1
  49. package/dist/error/status.cjs +103 -256
  50. package/dist/error/status.cjs.map +1 -1
  51. package/dist/error/status.d.cts +58 -58
  52. package/dist/error/status.d.cts.map +1 -0
  53. package/dist/error/status.d.mts +69 -0
  54. package/dist/error/status.d.mts.map +1 -0
  55. package/dist/error/status.mjs +98 -227
  56. package/dist/error/status.mjs.map +1 -1
  57. package/dist/google-one-tap/index.cjs +135 -138
  58. package/dist/google-one-tap/index.cjs.map +1 -1
  59. package/dist/google-one-tap/index.d.cts +49 -48
  60. package/dist/google-one-tap/index.d.cts.map +1 -0
  61. package/dist/google-one-tap/index.d.mts +82 -0
  62. package/dist/google-one-tap/index.d.mts.map +1 -0
  63. package/dist/google-one-tap/index.mjs +133 -112
  64. package/dist/google-one-tap/index.mjs.map +1 -1
  65. package/dist/google-one-tap/types.cjs +0 -19
  66. package/dist/google-one-tap/types.d.cts +124 -122
  67. package/dist/google-one-tap/types.d.cts.map +1 -0
  68. package/dist/google-one-tap/types.d.mts +157 -0
  69. package/dist/google-one-tap/types.d.mts.map +1 -0
  70. package/dist/google-one-tap/types.mjs +1 -1
  71. package/dist/hono/authorizer.cjs +28 -65
  72. package/dist/hono/authorizer.cjs.map +1 -1
  73. package/dist/hono/authorizer.d.cts +12 -11
  74. package/dist/hono/authorizer.d.cts.map +1 -0
  75. package/dist/hono/authorizer.d.mts +19 -0
  76. package/dist/hono/authorizer.d.mts.map +1 -0
  77. package/dist/hono/authorizer.mjs +23 -36
  78. package/dist/hono/authorizer.mjs.map +1 -1
  79. package/dist/hono/csrf.cjs +81 -92
  80. package/dist/hono/csrf.cjs.map +1 -1
  81. package/dist/hono/csrf.d.cts +46 -45
  82. package/dist/hono/csrf.d.cts.map +1 -0
  83. package/dist/hono/csrf.d.mts +76 -0
  84. package/dist/hono/csrf.d.mts.map +1 -0
  85. package/dist/hono/csrf.mjs +76 -63
  86. package/dist/hono/csrf.mjs.map +1 -1
  87. package/dist/hono/geolocation.cjs +10 -34
  88. package/dist/hono/geolocation.cjs.map +1 -1
  89. package/dist/hono/geolocation.d.cts +5 -4
  90. package/dist/hono/geolocation.d.cts.map +1 -0
  91. package/dist/hono/geolocation.d.mts +7 -0
  92. package/dist/hono/geolocation.d.mts.map +1 -0
  93. package/dist/hono/geolocation.mjs +8 -12
  94. package/dist/hono/geolocation.mjs.map +1 -1
  95. package/dist/hono/handler.cjs +37 -61
  96. package/dist/hono/handler.cjs.map +1 -1
  97. package/dist/hono/handler.d.cts +26 -25
  98. package/dist/hono/handler.d.cts.map +1 -0
  99. package/dist/hono/handler.d.mts +32 -0
  100. package/dist/hono/handler.d.mts.map +1 -0
  101. package/dist/hono/handler.mjs +34 -34
  102. package/dist/hono/handler.mjs.map +1 -1
  103. package/dist/hono/index.cjs +14 -48
  104. package/dist/hono/index.d.cts +7 -15
  105. package/dist/hono/index.d.mts +7 -0
  106. package/dist/hono/index.mjs +4 -14
  107. package/dist/hono/rate-limit.cjs +65 -110
  108. package/dist/hono/rate-limit.cjs.map +1 -1
  109. package/dist/hono/rate-limit.d.cts +27 -26
  110. package/dist/hono/rate-limit.d.cts.map +1 -0
  111. package/dist/hono/rate-limit.d.mts +36 -0
  112. package/dist/hono/rate-limit.d.mts.map +1 -0
  113. package/dist/hono/rate-limit.mjs +60 -81
  114. package/dist/hono/rate-limit.mjs.map +1 -1
  115. package/dist/hono/validator.cjs +47 -66
  116. package/dist/hono/validator.cjs.map +1 -1
  117. package/dist/hono/validator.d.cts +25 -30
  118. package/dist/hono/validator.d.cts.map +1 -0
  119. package/dist/hono/validator.d.mts +26 -0
  120. package/dist/hono/validator.d.mts.map +1 -0
  121. package/dist/hono/validator.mjs +43 -43
  122. package/dist/hono/validator.mjs.map +1 -1
  123. package/dist/index.cjs +39 -95
  124. package/dist/index.d.cts +12 -14
  125. package/dist/index.d.mts +12 -0
  126. package/dist/index.mjs +5 -48
  127. package/dist/iso/iso_3601_1.cjs +1512 -290
  128. package/dist/iso/iso_3601_1.cjs.map +1 -1
  129. package/dist/iso/iso_3601_1.d.cts +8 -6
  130. package/dist/iso/iso_3601_1.d.cts.map +1 -0
  131. package/dist/iso/iso_3601_1.d.mts +11 -0
  132. package/dist/iso/iso_3601_1.d.mts.map +1 -0
  133. package/dist/iso/iso_3601_1.mjs +1511 -265
  134. package/dist/iso/iso_3601_1.mjs.map +1 -1
  135. package/dist/max-length/index.cjs +158 -91
  136. package/dist/max-length/index.cjs.map +1 -1
  137. package/dist/max-length/index.d.cts +110 -1
  138. package/dist/max-length/index.d.cts.map +1 -0
  139. package/dist/{index-BhgdyigB.d.ts → max-length/index.d.mts} +9 -28
  140. package/dist/max-length/index.d.mts.map +1 -0
  141. package/dist/max-length/index.mjs +133 -47
  142. package/dist/max-length/index.mjs.map +1 -1
  143. package/dist/message.cjs +5 -30
  144. package/dist/message.cjs.map +1 -1
  145. package/dist/message.d.cts +3 -1
  146. package/dist/message.d.cts.map +1 -0
  147. package/dist/{message.d.ts → message.d.mts} +3 -1
  148. package/dist/message.d.mts.map +1 -0
  149. package/dist/message.mjs +5 -6
  150. package/dist/message.mjs.map +1 -1
  151. package/dist/polyfills/index.cjs +4 -4
  152. package/dist/polyfills/index.cjs.map +1 -1
  153. package/dist/polyfills/index.d.cts +1 -2
  154. package/dist/polyfills/index.d.mts +1 -0
  155. package/dist/polyfills/index.mjs +5 -2
  156. package/dist/polyfills/index.mjs.map +1 -1
  157. package/dist/response.cjs +191 -208
  158. package/dist/response.cjs.map +1 -1
  159. package/dist/response.d.cts +53 -54
  160. package/dist/response.d.cts.map +1 -0
  161. package/dist/response.d.mts +82 -0
  162. package/dist/response.d.mts.map +1 -0
  163. package/dist/response.mjs +182 -175
  164. package/dist/response.mjs.map +1 -1
  165. package/dist/snowflake.cjs +48 -70
  166. package/dist/snowflake.cjs.map +1 -1
  167. package/dist/snowflake.d.cts +16 -14
  168. package/dist/snowflake.d.cts.map +1 -0
  169. package/dist/snowflake.d.mts +31 -0
  170. package/dist/snowflake.d.mts.map +1 -0
  171. package/dist/snowflake.mjs +46 -44
  172. package/dist/snowflake.mjs.map +1 -1
  173. package/dist/utils/geolocation.cjs +51 -75
  174. package/dist/utils/geolocation.cjs.map +1 -1
  175. package/dist/utils/geolocation.d.cts +14 -12
  176. package/dist/utils/geolocation.d.cts.map +1 -0
  177. package/dist/utils/{geolocation.d.ts → geolocation.d.mts} +14 -12
  178. package/dist/utils/geolocation.d.mts.map +1 -0
  179. package/dist/utils/geolocation.mjs +47 -47
  180. package/dist/utils/geolocation.mjs.map +1 -1
  181. package/dist/utils/google-tag-gateway.cjs +35 -56
  182. package/dist/utils/google-tag-gateway.cjs.map +1 -1
  183. package/dist/utils/google-tag-gateway.d.cts +3 -1
  184. package/dist/utils/google-tag-gateway.d.cts.map +1 -0
  185. package/dist/utils/{google-tag-gateway.d.ts → google-tag-gateway.d.mts} +3 -1
  186. package/dist/utils/google-tag-gateway.d.mts.map +1 -0
  187. package/dist/utils/google-tag-gateway.mjs +33 -30
  188. package/dist/utils/google-tag-gateway.mjs.map +1 -1
  189. package/dist/utils/timing.cjs +50 -71
  190. package/dist/utils/timing.cjs.map +1 -1
  191. package/dist/utils/timing.d.cts +11 -9
  192. package/dist/utils/timing.d.cts.map +1 -0
  193. package/dist/utils/timing.d.mts +15 -0
  194. package/dist/utils/timing.d.mts.map +1 -0
  195. package/dist/utils/timing.mjs +49 -46
  196. package/dist/utils/timing.mjs.map +1 -1
  197. package/dist/webhook/index.cjs +43 -72
  198. package/dist/webhook/index.cjs.map +1 -1
  199. package/dist/webhook/index.d.cts +3 -1
  200. package/dist/webhook/index.d.cts.map +1 -0
  201. package/dist/webhook/{index.d.ts → index.d.mts} +3 -1
  202. package/dist/webhook/index.d.mts.map +1 -0
  203. package/dist/webhook/index.mjs +41 -46
  204. package/dist/webhook/index.mjs.map +1 -1
  205. package/package.json +49 -24
  206. package/dist/cache/index.d.ts +0 -9
  207. package/dist/error/detail.d.ts +0 -109
  208. package/dist/error/i18n/en-us.d.ts +0 -3
  209. package/dist/error/index.d.ts +0 -19
  210. package/dist/error/reason.cjs.map +0 -1
  211. package/dist/error/reason.d.ts +0 -5
  212. package/dist/error/reason.mjs.map +0 -1
  213. package/dist/error/status.d.ts +0 -69
  214. package/dist/google-one-tap/index.d.ts +0 -81
  215. package/dist/google-one-tap/types.cjs.map +0 -1
  216. package/dist/google-one-tap/types.d.ts +0 -155
  217. package/dist/google-one-tap/types.mjs.map +0 -1
  218. package/dist/hono/authorizer.d.ts +0 -18
  219. package/dist/hono/csrf.d.ts +0 -75
  220. package/dist/hono/geolocation.d.ts +0 -6
  221. package/dist/hono/handler.d.ts +0 -31
  222. package/dist/hono/index.cjs.map +0 -1
  223. package/dist/hono/index.d.ts +0 -15
  224. package/dist/hono/index.mjs.map +0 -1
  225. package/dist/hono/rate-limit.d.ts +0 -35
  226. package/dist/hono/validator.d.ts +0 -31
  227. package/dist/index-BhgdyigB.d.cts +0 -129
  228. package/dist/index.cjs.map +0 -1
  229. package/dist/index.d.ts +0 -14
  230. package/dist/index.mjs.map +0 -1
  231. package/dist/iso/iso_3601_1.d.ts +0 -9
  232. package/dist/max-length/index.d.ts +0 -1
  233. package/dist/polyfills/index.d.ts +0 -2
  234. package/dist/response.d.ts +0 -83
  235. package/dist/snowflake.d.ts +0 -29
  236. package/dist/utils/timing.d.ts +0 -13
@@ -1,59 +1,38 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/utils/google-tag-gateway.ts
21
- var google_tag_gateway_exports = {};
22
- __export(google_tag_gateway_exports, {
23
- forwardToGoogleTagGateway: () => forwardToGoogleTagGateway
24
- });
25
- module.exports = __toCommonJS(google_tag_gateway_exports);
26
- var import_geolocation = require("./geolocation.cjs");
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_utils_geolocation = require("./geolocation.cjs");
3
+ //#region src/utils/google-tag-gateway.ts
4
+ /**
5
+ * In a browser, verify the setup by navigating to: https://example.com/metrics/healthy. The page
6
+ * should read ok. Verify that geographical information is being included by navigating to:
7
+ * https://example.com/metrics/?validate_geo=healthy. The page should read ok.
8
+ */
27
9
  async function forwardToGoogleTagGateway(request, gaId) {
28
- const GATEWAY_HOST = `${gaId}.fps.goog`;
29
- const { pathname, search } = new URL(request.url);
30
- const target = `https://${GATEWAY_HOST}${pathname}${search}`;
31
- const headers = new Headers();
32
- headers.set("host", GATEWAY_HOST);
33
- const cookie = request.headers.get("cookie");
34
- if (cookie) headers.set("cookie", cookie);
35
- const { country, region } = (0, import_geolocation.getGeolocation)(request);
36
- if (country && region) {
37
- headers.set("x-forwarded-countryregion", `${country}-${region}`);
38
- } else if (country) {
39
- headers.set("x-forwarded-country", country);
40
- } else if (region) {
41
- headers.set("x-forwarded-region", region);
42
- }
43
- const hasBody = request.method !== "GET" && request.method !== "HEAD";
44
- const body = hasBody ? await request.arrayBuffer() : void 0;
45
- const response = await fetch(target, {
46
- method: request.method,
47
- headers,
48
- body
49
- });
50
- const responseHeaders = new Headers(response.headers);
51
- responseHeaders.delete("content-encoding");
52
- responseHeaders.delete("content-length");
53
- return new Response(response.body, { status: response.status, headers: responseHeaders });
10
+ const GATEWAY_HOST = `${gaId}.fps.goog`;
11
+ const { pathname, search } = new URL(request.url);
12
+ const target = `https://${GATEWAY_HOST}${pathname}${search}`;
13
+ const headers = new Headers();
14
+ headers.set("host", GATEWAY_HOST);
15
+ const cookie = request.headers.get("cookie");
16
+ if (cookie) headers.set("cookie", cookie);
17
+ const { country, region } = require_utils_geolocation.getGeolocation(request);
18
+ if (country && region) headers.set("x-forwarded-countryregion", `${country}-${region}`);
19
+ else if (country) headers.set("x-forwarded-country", country);
20
+ else if (region) headers.set("x-forwarded-region", region);
21
+ const body = request.method !== "GET" && request.method !== "HEAD" ? await request.arrayBuffer() : void 0;
22
+ const response = await fetch(target, {
23
+ method: request.method,
24
+ headers,
25
+ body
26
+ });
27
+ const responseHeaders = new Headers(response.headers);
28
+ responseHeaders.delete("content-encoding");
29
+ responseHeaders.delete("content-length");
30
+ return new Response(response.body, {
31
+ status: response.status,
32
+ headers: responseHeaders
33
+ });
54
34
  }
55
- // Annotate the CommonJS export names for ESM import in node:
56
- 0 && (module.exports = {
57
- forwardToGoogleTagGateway
58
- });
35
+ //#endregion
36
+ exports.forwardToGoogleTagGateway = forwardToGoogleTagGateway;
37
+
59
38
  //# sourceMappingURL=google-tag-gateway.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/google-tag-gateway.ts"],"sourcesContent":["import { getGeolocation } from './geolocation';\n\n/**\n * In a browser, verify the setup by navigating to: https://example.com/metrics/healthy. The page\n * should read ok. Verify that geographical information is being included by navigating to:\n * https://example.com/metrics/?validate_geo=healthy. The page should read ok.\n */\nexport async function forwardToGoogleTagGateway(request: Request, gaId: string) {\n const GATEWAY_HOST = `${gaId}.fps.goog`;\n const { pathname, search } = new URL(request.url);\n\n const target = `https://${GATEWAY_HOST}${pathname}${search}`;\n\n const headers = new Headers();\n headers.set('host', GATEWAY_HOST);\n\n // Forward cookies\n const cookie = request.headers.get('cookie');\n if (cookie) headers.set('cookie', cookie);\n\n // Convert Vercel geo headers to Google Tag Gateway format\n // https://developers.google.com/tag-platform/tag-manager/gateway/setup-guide\n const { country, region } = getGeolocation(request);\n\n if (country && region) {\n headers.set('x-forwarded-countryregion', `${country}-${region}`);\n } else if (country) {\n headers.set('x-forwarded-country', country);\n } else if (region) {\n headers.set('x-forwarded-region', region);\n }\n\n const hasBody = request.method !== 'GET' && request.method !== 'HEAD';\n\n // Buffer the body instead of streaming it. The conversion endpoint\n // (g/measurement/conversion) answers POSTs with a 302 to www.google.com, and we want\n // to follow that hop on the server so the browser never sees a Google domain (the whole\n // point of the first-party gateway). Following a redirect requires re-issuing the\n // request, which undici cannot do with a one-shot `request.body` stream — it throws\n // \"fetch failed\", surfacing as a 500. A buffered body is replayable, so the redirect\n // is followed transparently here.\n const body = hasBody ? await request.arrayBuffer() : undefined;\n\n const response = await fetch(target, {\n method: request.method,\n headers,\n body,\n });\n\n // Strip content-encoding/content-length because fetch() auto-decompresses\n // but keeps the original headers, causing ERR_CONTENT_DECODING_FAILED\n const responseHeaders = new Headers(response.headers);\n responseHeaders.delete('content-encoding');\n responseHeaders.delete('content-length');\n\n return new Response(response.body, { status: response.status, headers: responseHeaders });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA+B;AAO/B,eAAsB,0BAA0B,SAAkB,MAAc;AAC9E,QAAM,eAAe,GAAG,IAAI;AAC5B,QAAM,EAAE,UAAU,OAAO,IAAI,IAAI,IAAI,QAAQ,GAAG;AAEhD,QAAM,SAAS,WAAW,YAAY,GAAG,QAAQ,GAAG,MAAM;AAE1D,QAAM,UAAU,IAAI,QAAQ;AAC5B,UAAQ,IAAI,QAAQ,YAAY;AAGhC,QAAM,SAAS,QAAQ,QAAQ,IAAI,QAAQ;AAC3C,MAAI,OAAQ,SAAQ,IAAI,UAAU,MAAM;AAIxC,QAAM,EAAE,SAAS,OAAO,QAAI,mCAAe,OAAO;AAElD,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAI,6BAA6B,GAAG,OAAO,IAAI,MAAM,EAAE;AAAA,EACjE,WAAW,SAAS;AAClB,YAAQ,IAAI,uBAAuB,OAAO;AAAA,EAC5C,WAAW,QAAQ;AACjB,YAAQ,IAAI,sBAAsB,MAAM;AAAA,EAC1C;AAEA,QAAM,UAAU,QAAQ,WAAW,SAAS,QAAQ,WAAW;AAS/D,QAAM,OAAO,UAAU,MAAM,QAAQ,YAAY,IAAI;AAErD,QAAM,WAAW,MAAM,MAAM,QAAQ;AAAA,IACnC,QAAQ,QAAQ;AAAA,IAChB;AAAA,IACA;AAAA,EACF,CAAC;AAID,QAAM,kBAAkB,IAAI,QAAQ,SAAS,OAAO;AACpD,kBAAgB,OAAO,kBAAkB;AACzC,kBAAgB,OAAO,gBAAgB;AAEvC,SAAO,IAAI,SAAS,SAAS,MAAM,EAAE,QAAQ,SAAS,QAAQ,SAAS,gBAAgB,CAAC;AAC1F;","names":[]}
1
+ {"version":3,"file":"google-tag-gateway.cjs","names":["getGeolocation"],"sources":["../../src/utils/google-tag-gateway.ts"],"sourcesContent":["import { getGeolocation } from './geolocation';\n\n/**\n * In a browser, verify the setup by navigating to: https://example.com/metrics/healthy. The page\n * should read ok. Verify that geographical information is being included by navigating to:\n * https://example.com/metrics/?validate_geo=healthy. The page should read ok.\n */\nexport async function forwardToGoogleTagGateway(request: Request, gaId: string) {\n const GATEWAY_HOST = `${gaId}.fps.goog`;\n const { pathname, search } = new URL(request.url);\n\n const target = `https://${GATEWAY_HOST}${pathname}${search}`;\n\n const headers = new Headers();\n headers.set('host', GATEWAY_HOST);\n\n // Forward cookies\n const cookie = request.headers.get('cookie');\n if (cookie) headers.set('cookie', cookie);\n\n // Convert Vercel geo headers to Google Tag Gateway format\n // https://developers.google.com/tag-platform/tag-manager/gateway/setup-guide\n const { country, region } = getGeolocation(request);\n\n if (country && region) {\n headers.set('x-forwarded-countryregion', `${country}-${region}`);\n } else if (country) {\n headers.set('x-forwarded-country', country);\n } else if (region) {\n headers.set('x-forwarded-region', region);\n }\n\n const hasBody = request.method !== 'GET' && request.method !== 'HEAD';\n\n // Buffer the body instead of streaming it. The conversion endpoint\n // (g/measurement/conversion) answers POSTs with a 302 to www.google.com, and we want\n // to follow that hop on the server so the browser never sees a Google domain (the whole\n // point of the first-party gateway). Following a redirect requires re-issuing the\n // request, which undici cannot do with a one-shot `request.body` stream — it throws\n // \"fetch failed\", surfacing as a 500. A buffered body is replayable, so the redirect\n // is followed transparently here.\n const body = hasBody ? await request.arrayBuffer() : undefined;\n\n const response = await fetch(target, {\n method: request.method,\n headers,\n body,\n });\n\n // Strip content-encoding/content-length because fetch() auto-decompresses\n // but keeps the original headers, causing ERR_CONTENT_DECODING_FAILED\n const responseHeaders = new Headers(response.headers);\n responseHeaders.delete('content-encoding');\n responseHeaders.delete('content-length');\n\n return new Response(response.body, { status: response.status, headers: responseHeaders });\n}\n"],"mappings":";;;;;;;;AAOA,eAAsB,0BAA0B,SAAkB,MAAc;CAC9E,MAAM,eAAe,GAAG,KAAK;CAC7B,MAAM,EAAE,UAAU,WAAW,IAAI,IAAI,QAAQ,GAAG;CAEhD,MAAM,SAAS,WAAW,eAAe,WAAW;CAEpD,MAAM,UAAU,IAAI,QAAQ;CAC5B,QAAQ,IAAI,QAAQ,YAAY;CAGhC,MAAM,SAAS,QAAQ,QAAQ,IAAI,QAAQ;CAC3C,IAAI,QAAQ,QAAQ,IAAI,UAAU,MAAM;CAIxC,MAAM,EAAE,SAAS,WAAWA,0BAAAA,eAAe,OAAO;CAElD,IAAI,WAAW,QACb,QAAQ,IAAI,6BAA6B,GAAG,QAAQ,GAAG,QAAQ;MAC1D,IAAI,SACT,QAAQ,IAAI,uBAAuB,OAAO;MACrC,IAAI,QACT,QAAQ,IAAI,sBAAsB,MAAM;CAY1C,MAAM,OATU,QAAQ,WAAW,SAAS,QAAQ,WAAW,SASxC,MAAM,QAAQ,YAAY,IAAI,KAAA;CAErD,MAAM,WAAW,MAAM,MAAM,QAAQ;EACnC,QAAQ,QAAQ;EAChB;EACA;CACF,CAAC;CAID,MAAM,kBAAkB,IAAI,QAAQ,SAAS,OAAO;CACpD,gBAAgB,OAAO,kBAAkB;CACzC,gBAAgB,OAAO,gBAAgB;CAEvC,OAAO,IAAI,SAAS,SAAS,MAAM;EAAE,QAAQ,SAAS;EAAQ,SAAS;CAAgB,CAAC;AAC1F"}
@@ -1,8 +1,10 @@
1
+ //#region src/utils/google-tag-gateway.d.ts
1
2
  /**
2
3
  * In a browser, verify the setup by navigating to: https://example.com/metrics/healthy. The page
3
4
  * should read ok. Verify that geographical information is being included by navigating to:
4
5
  * https://example.com/metrics/?validate_geo=healthy. The page should read ok.
5
6
  */
6
7
  declare function forwardToGoogleTagGateway(request: Request, gaId: string): Promise<Response>;
7
-
8
+ //#endregion
8
9
  export { forwardToGoogleTagGateway };
10
+ //# sourceMappingURL=google-tag-gateway.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-tag-gateway.d.cts","names":[],"sources":["../../src/utils/google-tag-gateway.ts"],"mappings":";;;;;;iBAOsB,0BAA0B,SAAS,SAAS,eAAY,QAAA"}
@@ -1,8 +1,10 @@
1
+ //#region src/utils/google-tag-gateway.d.ts
1
2
  /**
2
3
  * In a browser, verify the setup by navigating to: https://example.com/metrics/healthy. The page
3
4
  * should read ok. Verify that geographical information is being included by navigating to:
4
5
  * https://example.com/metrics/?validate_geo=healthy. The page should read ok.
5
6
  */
6
7
  declare function forwardToGoogleTagGateway(request: Request, gaId: string): Promise<Response>;
7
-
8
+ //#endregion
8
9
  export { forwardToGoogleTagGateway };
10
+ //# sourceMappingURL=google-tag-gateway.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-tag-gateway.d.mts","names":[],"sources":["../../src/utils/google-tag-gateway.ts"],"mappings":";;;;;;iBAOsB,0BAA0B,SAAS,SAAS,eAAY,QAAA"}
@@ -1,34 +1,37 @@
1
- // src/utils/google-tag-gateway.ts
2
1
  import { getGeolocation } from "./geolocation.mjs";
2
+ //#region src/utils/google-tag-gateway.ts
3
+ /**
4
+ * In a browser, verify the setup by navigating to: https://example.com/metrics/healthy. The page
5
+ * should read ok. Verify that geographical information is being included by navigating to:
6
+ * https://example.com/metrics/?validate_geo=healthy. The page should read ok.
7
+ */
3
8
  async function forwardToGoogleTagGateway(request, gaId) {
4
- const GATEWAY_HOST = `${gaId}.fps.goog`;
5
- const { pathname, search } = new URL(request.url);
6
- const target = `https://${GATEWAY_HOST}${pathname}${search}`;
7
- const headers = new Headers();
8
- headers.set("host", GATEWAY_HOST);
9
- const cookie = request.headers.get("cookie");
10
- if (cookie) headers.set("cookie", cookie);
11
- const { country, region } = getGeolocation(request);
12
- if (country && region) {
13
- headers.set("x-forwarded-countryregion", `${country}-${region}`);
14
- } else if (country) {
15
- headers.set("x-forwarded-country", country);
16
- } else if (region) {
17
- headers.set("x-forwarded-region", region);
18
- }
19
- const hasBody = request.method !== "GET" && request.method !== "HEAD";
20
- const body = hasBody ? await request.arrayBuffer() : void 0;
21
- const response = await fetch(target, {
22
- method: request.method,
23
- headers,
24
- body
25
- });
26
- const responseHeaders = new Headers(response.headers);
27
- responseHeaders.delete("content-encoding");
28
- responseHeaders.delete("content-length");
29
- return new Response(response.body, { status: response.status, headers: responseHeaders });
9
+ const GATEWAY_HOST = `${gaId}.fps.goog`;
10
+ const { pathname, search } = new URL(request.url);
11
+ const target = `https://${GATEWAY_HOST}${pathname}${search}`;
12
+ const headers = new Headers();
13
+ headers.set("host", GATEWAY_HOST);
14
+ const cookie = request.headers.get("cookie");
15
+ if (cookie) headers.set("cookie", cookie);
16
+ const { country, region } = getGeolocation(request);
17
+ if (country && region) headers.set("x-forwarded-countryregion", `${country}-${region}`);
18
+ else if (country) headers.set("x-forwarded-country", country);
19
+ else if (region) headers.set("x-forwarded-region", region);
20
+ const body = request.method !== "GET" && request.method !== "HEAD" ? await request.arrayBuffer() : void 0;
21
+ const response = await fetch(target, {
22
+ method: request.method,
23
+ headers,
24
+ body
25
+ });
26
+ const responseHeaders = new Headers(response.headers);
27
+ responseHeaders.delete("content-encoding");
28
+ responseHeaders.delete("content-length");
29
+ return new Response(response.body, {
30
+ status: response.status,
31
+ headers: responseHeaders
32
+ });
30
33
  }
31
- export {
32
- forwardToGoogleTagGateway
33
- };
34
+ //#endregion
35
+ export { forwardToGoogleTagGateway };
36
+
34
37
  //# sourceMappingURL=google-tag-gateway.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/google-tag-gateway.ts"],"sourcesContent":["import { getGeolocation } from './geolocation';\n\n/**\n * In a browser, verify the setup by navigating to: https://example.com/metrics/healthy. The page\n * should read ok. Verify that geographical information is being included by navigating to:\n * https://example.com/metrics/?validate_geo=healthy. The page should read ok.\n */\nexport async function forwardToGoogleTagGateway(request: Request, gaId: string) {\n const GATEWAY_HOST = `${gaId}.fps.goog`;\n const { pathname, search } = new URL(request.url);\n\n const target = `https://${GATEWAY_HOST}${pathname}${search}`;\n\n const headers = new Headers();\n headers.set('host', GATEWAY_HOST);\n\n // Forward cookies\n const cookie = request.headers.get('cookie');\n if (cookie) headers.set('cookie', cookie);\n\n // Convert Vercel geo headers to Google Tag Gateway format\n // https://developers.google.com/tag-platform/tag-manager/gateway/setup-guide\n const { country, region } = getGeolocation(request);\n\n if (country && region) {\n headers.set('x-forwarded-countryregion', `${country}-${region}`);\n } else if (country) {\n headers.set('x-forwarded-country', country);\n } else if (region) {\n headers.set('x-forwarded-region', region);\n }\n\n const hasBody = request.method !== 'GET' && request.method !== 'HEAD';\n\n // Buffer the body instead of streaming it. The conversion endpoint\n // (g/measurement/conversion) answers POSTs with a 302 to www.google.com, and we want\n // to follow that hop on the server so the browser never sees a Google domain (the whole\n // point of the first-party gateway). Following a redirect requires re-issuing the\n // request, which undici cannot do with a one-shot `request.body` stream — it throws\n // \"fetch failed\", surfacing as a 500. A buffered body is replayable, so the redirect\n // is followed transparently here.\n const body = hasBody ? await request.arrayBuffer() : undefined;\n\n const response = await fetch(target, {\n method: request.method,\n headers,\n body,\n });\n\n // Strip content-encoding/content-length because fetch() auto-decompresses\n // but keeps the original headers, causing ERR_CONTENT_DECODING_FAILED\n const responseHeaders = new Headers(response.headers);\n responseHeaders.delete('content-encoding');\n responseHeaders.delete('content-length');\n\n return new Response(response.body, { status: response.status, headers: responseHeaders });\n}\n"],"mappings":";AAAA,SAAS,sBAAsB;AAO/B,eAAsB,0BAA0B,SAAkB,MAAc;AAC9E,QAAM,eAAe,GAAG,IAAI;AAC5B,QAAM,EAAE,UAAU,OAAO,IAAI,IAAI,IAAI,QAAQ,GAAG;AAEhD,QAAM,SAAS,WAAW,YAAY,GAAG,QAAQ,GAAG,MAAM;AAE1D,QAAM,UAAU,IAAI,QAAQ;AAC5B,UAAQ,IAAI,QAAQ,YAAY;AAGhC,QAAM,SAAS,QAAQ,QAAQ,IAAI,QAAQ;AAC3C,MAAI,OAAQ,SAAQ,IAAI,UAAU,MAAM;AAIxC,QAAM,EAAE,SAAS,OAAO,IAAI,eAAe,OAAO;AAElD,MAAI,WAAW,QAAQ;AACrB,YAAQ,IAAI,6BAA6B,GAAG,OAAO,IAAI,MAAM,EAAE;AAAA,EACjE,WAAW,SAAS;AAClB,YAAQ,IAAI,uBAAuB,OAAO;AAAA,EAC5C,WAAW,QAAQ;AACjB,YAAQ,IAAI,sBAAsB,MAAM;AAAA,EAC1C;AAEA,QAAM,UAAU,QAAQ,WAAW,SAAS,QAAQ,WAAW;AAS/D,QAAM,OAAO,UAAU,MAAM,QAAQ,YAAY,IAAI;AAErD,QAAM,WAAW,MAAM,MAAM,QAAQ;AAAA,IACnC,QAAQ,QAAQ;AAAA,IAChB;AAAA,IACA;AAAA,EACF,CAAC;AAID,QAAM,kBAAkB,IAAI,QAAQ,SAAS,OAAO;AACpD,kBAAgB,OAAO,kBAAkB;AACzC,kBAAgB,OAAO,gBAAgB;AAEvC,SAAO,IAAI,SAAS,SAAS,MAAM,EAAE,QAAQ,SAAS,QAAQ,SAAS,gBAAgB,CAAC;AAC1F;","names":[]}
1
+ {"version":3,"file":"google-tag-gateway.mjs","names":[],"sources":["../../src/utils/google-tag-gateway.ts"],"sourcesContent":["import { getGeolocation } from './geolocation';\n\n/**\n * In a browser, verify the setup by navigating to: https://example.com/metrics/healthy. The page\n * should read ok. Verify that geographical information is being included by navigating to:\n * https://example.com/metrics/?validate_geo=healthy. The page should read ok.\n */\nexport async function forwardToGoogleTagGateway(request: Request, gaId: string) {\n const GATEWAY_HOST = `${gaId}.fps.goog`;\n const { pathname, search } = new URL(request.url);\n\n const target = `https://${GATEWAY_HOST}${pathname}${search}`;\n\n const headers = new Headers();\n headers.set('host', GATEWAY_HOST);\n\n // Forward cookies\n const cookie = request.headers.get('cookie');\n if (cookie) headers.set('cookie', cookie);\n\n // Convert Vercel geo headers to Google Tag Gateway format\n // https://developers.google.com/tag-platform/tag-manager/gateway/setup-guide\n const { country, region } = getGeolocation(request);\n\n if (country && region) {\n headers.set('x-forwarded-countryregion', `${country}-${region}`);\n } else if (country) {\n headers.set('x-forwarded-country', country);\n } else if (region) {\n headers.set('x-forwarded-region', region);\n }\n\n const hasBody = request.method !== 'GET' && request.method !== 'HEAD';\n\n // Buffer the body instead of streaming it. The conversion endpoint\n // (g/measurement/conversion) answers POSTs with a 302 to www.google.com, and we want\n // to follow that hop on the server so the browser never sees a Google domain (the whole\n // point of the first-party gateway). Following a redirect requires re-issuing the\n // request, which undici cannot do with a one-shot `request.body` stream — it throws\n // \"fetch failed\", surfacing as a 500. A buffered body is replayable, so the redirect\n // is followed transparently here.\n const body = hasBody ? await request.arrayBuffer() : undefined;\n\n const response = await fetch(target, {\n method: request.method,\n headers,\n body,\n });\n\n // Strip content-encoding/content-length because fetch() auto-decompresses\n // but keeps the original headers, causing ERR_CONTENT_DECODING_FAILED\n const responseHeaders = new Headers(response.headers);\n responseHeaders.delete('content-encoding');\n responseHeaders.delete('content-length');\n\n return new Response(response.body, { status: response.status, headers: responseHeaders });\n}\n"],"mappings":";;;;;;;AAOA,eAAsB,0BAA0B,SAAkB,MAAc;CAC9E,MAAM,eAAe,GAAG,KAAK;CAC7B,MAAM,EAAE,UAAU,WAAW,IAAI,IAAI,QAAQ,GAAG;CAEhD,MAAM,SAAS,WAAW,eAAe,WAAW;CAEpD,MAAM,UAAU,IAAI,QAAQ;CAC5B,QAAQ,IAAI,QAAQ,YAAY;CAGhC,MAAM,SAAS,QAAQ,QAAQ,IAAI,QAAQ;CAC3C,IAAI,QAAQ,QAAQ,IAAI,UAAU,MAAM;CAIxC,MAAM,EAAE,SAAS,WAAW,eAAe,OAAO;CAElD,IAAI,WAAW,QACb,QAAQ,IAAI,6BAA6B,GAAG,QAAQ,GAAG,QAAQ;MAC1D,IAAI,SACT,QAAQ,IAAI,uBAAuB,OAAO;MACrC,IAAI,QACT,QAAQ,IAAI,sBAAsB,MAAM;CAY1C,MAAM,OATU,QAAQ,WAAW,SAAS,QAAQ,WAAW,SASxC,MAAM,QAAQ,YAAY,IAAI,KAAA;CAErD,MAAM,WAAW,MAAM,MAAM,QAAQ;EACnC,QAAQ,QAAQ;EAChB;EACA;CACF,CAAC;CAID,MAAM,kBAAkB,IAAI,QAAQ,SAAS,OAAO;CACpD,gBAAgB,OAAO,kBAAkB;CACzC,gBAAgB,OAAO,gBAAgB;CAEvC,OAAO,IAAI,SAAS,SAAS,MAAM;EAAE,QAAQ,SAAS;EAAQ,SAAS;CAAgB,CAAC;AAC1F"}
@@ -1,74 +1,53 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/utils/timing.ts
21
- var timing_exports = {};
22
- __export(timing_exports, {
23
- timing: () => timing
24
- });
25
- module.exports = __toCommonJS(timing_exports);
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/utils/timing.ts
26
3
  function timing(options = { enabled: true }) {
27
- const { enabled, crossOrigin } = options;
28
- let start = performance.now();
29
- const headers = [];
30
- const timers = /* @__PURE__ */ new Map();
31
- return {
32
- startTime: (name, description) => {
33
- timers.set(name, { description, start: performance.now() });
34
- },
35
- endTime: (name, precision) => {
36
- const timer = timers.get(name);
37
- if (!timer) {
38
- console.warn(`timing: ${name} not found`);
39
- return;
40
- }
41
- const { start: start2, description } = timer;
42
- const dur = (performance.now() - start2).toFixed(precision ?? 1);
43
- timers.delete(name);
44
- const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
45
- headers.push(metric);
46
- },
47
- mark: (name, description, precision) => {
48
- const dur = (performance.now() - start).toFixed(precision ?? 1);
49
- const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
50
- headers.push(metric);
51
- start = performance.now();
52
- },
53
- setMetric: (name, value, description, precision) => {
54
- if (typeof value === "number") {
55
- const dur = value.toFixed(precision ?? 1);
56
- const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
57
- headers.push(metric);
58
- } else {
59
- const metric = value ? `${name};desc="${value}"` : `${name}`;
60
- headers.push(metric);
61
- }
62
- },
63
- setTiming: (response) => {
64
- if (!enabled) return;
65
- response.headers.append("Server-Timing", headers.join(","));
66
- response.headers.append("Timing-Allow-Origin", crossOrigin ?? "*");
67
- }
68
- };
4
+ const { enabled, crossOrigin } = options;
5
+ let start = performance.now();
6
+ const headers = [];
7
+ const timers = /* @__PURE__ */ new Map();
8
+ return {
9
+ startTime: (name, description) => {
10
+ timers.set(name, {
11
+ description,
12
+ start: performance.now()
13
+ });
14
+ },
15
+ endTime: (name, precision) => {
16
+ const timer = timers.get(name);
17
+ if (!timer) {
18
+ console.warn(`timing: ${name} not found`);
19
+ return;
20
+ }
21
+ const { start, description } = timer;
22
+ const dur = (performance.now() - start).toFixed(precision ?? 1);
23
+ timers.delete(name);
24
+ const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
25
+ headers.push(metric);
26
+ },
27
+ mark: (name, description, precision) => {
28
+ const dur = (performance.now() - start).toFixed(precision ?? 1);
29
+ const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
30
+ headers.push(metric);
31
+ start = performance.now();
32
+ },
33
+ setMetric: (name, value, description, precision) => {
34
+ if (typeof value === "number") {
35
+ const dur = value.toFixed(precision ?? 1);
36
+ const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
37
+ headers.push(metric);
38
+ } else {
39
+ const metric = value ? `${name};desc="${value}"` : `${name}`;
40
+ headers.push(metric);
41
+ }
42
+ },
43
+ setTiming: (response) => {
44
+ if (!enabled) return;
45
+ response.headers.append("Server-Timing", headers.join(","));
46
+ response.headers.append("Timing-Allow-Origin", crossOrigin ?? "*");
47
+ }
48
+ };
69
49
  }
70
- // Annotate the CommonJS export names for ESM import in node:
71
- 0 && (module.exports = {
72
- timing
73
- });
50
+ //#endregion
51
+ exports.timing = timing;
52
+
74
53
  //# sourceMappingURL=timing.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/timing.ts"],"sourcesContent":["interface Timer {\n description?: string;\n start: number;\n}\n\nexport interface Options {\n enabled: boolean;\n crossOrigin?: string;\n}\n\nexport function timing(options: Options = { enabled: true }) {\n const { enabled, crossOrigin } = options;\n let start = performance.now();\n const headers: string[] = [];\n const timers = new Map<string, Timer>();\n\n return {\n startTime: (name: Lowercase<string>, description?: string) => {\n timers.set(name, { description, start: performance.now() });\n },\n endTime: (name: Lowercase<string>, precision?: number) => {\n const timer = timers.get(name);\n if (!timer) {\n console.warn(`timing: ${name} not found`);\n return;\n }\n const { start, description } = timer;\n const dur = (performance.now() - start).toFixed(precision ?? 1);\n timers.delete(name);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n },\n mark: (name: Lowercase<string>, description?: string, precision?: number) => {\n const dur = (performance.now() - start).toFixed(precision ?? 1);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n start = performance.now();\n },\n setMetric: (\n name: Lowercase<string>,\n value: number | string | undefined,\n description?: string,\n precision?: number\n ) => {\n if (typeof value === 'number') {\n const dur = value.toFixed(precision ?? 1);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n } else {\n const metric = value ? `${name};desc=\"${value}\"` : `${name}`;\n headers.push(metric);\n }\n },\n setTiming: (response: Response) => {\n if (!enabled) return;\n response.headers.append('Server-Timing', headers.join(','));\n response.headers.append('Timing-Allow-Origin', crossOrigin ?? '*');\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,SAAS,OAAO,UAAmB,EAAE,SAAS,KAAK,GAAG;AAC3D,QAAM,EAAE,SAAS,YAAY,IAAI;AACjC,MAAI,QAAQ,YAAY,IAAI;AAC5B,QAAM,UAAoB,CAAC;AAC3B,QAAM,SAAS,oBAAI,IAAmB;AAEtC,SAAO;AAAA,IACL,WAAW,CAAC,MAAyB,gBAAyB;AAC5D,aAAO,IAAI,MAAM,EAAE,aAAa,OAAO,YAAY,IAAI,EAAE,CAAC;AAAA,IAC5D;AAAA,IACA,SAAS,CAAC,MAAyB,cAAuB;AACxD,YAAM,QAAQ,OAAO,IAAI,IAAI;AAC7B,UAAI,CAAC,OAAO;AACV,gBAAQ,KAAK,WAAW,IAAI,YAAY;AACxC;AAAA,MACF;AACA,YAAM,EAAE,OAAAA,QAAO,YAAY,IAAI;AAC/B,YAAM,OAAO,YAAY,IAAI,IAAIA,QAAO,QAAQ,aAAa,CAAC;AAC9D,aAAO,OAAO,IAAI;AAClB,YAAM,SAAS,cACX,GAAG,IAAI,QAAQ,GAAG,UAAU,WAAW,MACvC,GAAG,IAAI,QAAQ,GAAG;AACtB,cAAQ,KAAK,MAAM;AAAA,IACrB;AAAA,IACA,MAAM,CAAC,MAAyB,aAAsB,cAAuB;AAC3E,YAAM,OAAO,YAAY,IAAI,IAAI,OAAO,QAAQ,aAAa,CAAC;AAC9D,YAAM,SAAS,cACX,GAAG,IAAI,QAAQ,GAAG,UAAU,WAAW,MACvC,GAAG,IAAI,QAAQ,GAAG;AACtB,cAAQ,KAAK,MAAM;AACnB,cAAQ,YAAY,IAAI;AAAA,IAC1B;AAAA,IACA,WAAW,CACT,MACA,OACA,aACA,cACG;AACH,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,MAAM,MAAM,QAAQ,aAAa,CAAC;AACxC,cAAM,SAAS,cACX,GAAG,IAAI,QAAQ,GAAG,UAAU,WAAW,MACvC,GAAG,IAAI,QAAQ,GAAG;AACtB,gBAAQ,KAAK,MAAM;AAAA,MACrB,OAAO;AACL,cAAM,SAAS,QAAQ,GAAG,IAAI,UAAU,KAAK,MAAM,GAAG,IAAI;AAC1D,gBAAQ,KAAK,MAAM;AAAA,MACrB;AAAA,IACF;AAAA,IACA,WAAW,CAAC,aAAuB;AACjC,UAAI,CAAC,QAAS;AACd,eAAS,QAAQ,OAAO,iBAAiB,QAAQ,KAAK,GAAG,CAAC;AAC1D,eAAS,QAAQ,OAAO,uBAAuB,eAAe,GAAG;AAAA,IACnE;AAAA,EACF;AACF;","names":["start"]}
1
+ {"version":3,"file":"timing.cjs","names":[],"sources":["../../src/utils/timing.ts"],"sourcesContent":["interface Timer {\n description?: string;\n start: number;\n}\n\nexport interface Options {\n enabled: boolean;\n crossOrigin?: string;\n}\n\nexport function timing(options: Options = { enabled: true }) {\n const { enabled, crossOrigin } = options;\n let start = performance.now();\n const headers: string[] = [];\n const timers = new Map<string, Timer>();\n\n return {\n startTime: (name: Lowercase<string>, description?: string) => {\n timers.set(name, { description, start: performance.now() });\n },\n endTime: (name: Lowercase<string>, precision?: number) => {\n const timer = timers.get(name);\n if (!timer) {\n console.warn(`timing: ${name} not found`);\n return;\n }\n const { start, description } = timer;\n const dur = (performance.now() - start).toFixed(precision ?? 1);\n timers.delete(name);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n },\n mark: (name: Lowercase<string>, description?: string, precision?: number) => {\n const dur = (performance.now() - start).toFixed(precision ?? 1);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n start = performance.now();\n },\n setMetric: (\n name: Lowercase<string>,\n value: number | string | undefined,\n description?: string,\n precision?: number\n ) => {\n if (typeof value === 'number') {\n const dur = value.toFixed(precision ?? 1);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n } else {\n const metric = value ? `${name};desc=\"${value}\"` : `${name}`;\n headers.push(metric);\n }\n },\n setTiming: (response: Response) => {\n if (!enabled) return;\n response.headers.append('Server-Timing', headers.join(','));\n response.headers.append('Timing-Allow-Origin', crossOrigin ?? '*');\n },\n };\n}\n"],"mappings":";;AAUA,SAAgB,OAAO,UAAmB,EAAE,SAAS,KAAK,GAAG;CAC3D,MAAM,EAAE,SAAS,gBAAgB;CACjC,IAAI,QAAQ,YAAY,IAAI;CAC5B,MAAM,UAAoB,CAAC;CAC3B,MAAM,yBAAS,IAAI,IAAmB;CAEtC,OAAO;EACL,YAAY,MAAyB,gBAAyB;GAC5D,OAAO,IAAI,MAAM;IAAE;IAAa,OAAO,YAAY,IAAI;GAAE,CAAC;EAC5D;EACA,UAAU,MAAyB,cAAuB;GACxD,MAAM,QAAQ,OAAO,IAAI,IAAI;GAC7B,IAAI,CAAC,OAAO;IACV,QAAQ,KAAK,WAAW,KAAK,WAAW;IACxC;GACF;GACA,MAAM,EAAE,OAAO,gBAAgB;GAC/B,MAAM,OAAO,YAAY,IAAI,IAAI,MAAA,CAAO,QAAQ,aAAa,CAAC;GAC9D,OAAO,OAAO,IAAI;GAClB,MAAM,SAAS,cACX,GAAG,KAAK,OAAO,IAAI,SAAS,YAAY,KACxC,GAAG,KAAK,OAAO;GACnB,QAAQ,KAAK,MAAM;EACrB;EACA,OAAO,MAAyB,aAAsB,cAAuB;GAC3E,MAAM,OAAO,YAAY,IAAI,IAAI,MAAA,CAAO,QAAQ,aAAa,CAAC;GAC9D,MAAM,SAAS,cACX,GAAG,KAAK,OAAO,IAAI,SAAS,YAAY,KACxC,GAAG,KAAK,OAAO;GACnB,QAAQ,KAAK,MAAM;GACnB,QAAQ,YAAY,IAAI;EAC1B;EACA,YACE,MACA,OACA,aACA,cACG;GACH,IAAI,OAAO,UAAU,UAAU;IAC7B,MAAM,MAAM,MAAM,QAAQ,aAAa,CAAC;IACxC,MAAM,SAAS,cACX,GAAG,KAAK,OAAO,IAAI,SAAS,YAAY,KACxC,GAAG,KAAK,OAAO;IACnB,QAAQ,KAAK,MAAM;GACrB,OAAO;IACL,MAAM,SAAS,QAAQ,GAAG,KAAK,SAAS,MAAM,KAAK,GAAG;IACtD,QAAQ,KAAK,MAAM;GACrB;EACF;EACA,YAAY,aAAuB;GACjC,IAAI,CAAC,SAAS;GACd,SAAS,QAAQ,OAAO,iBAAiB,QAAQ,KAAK,GAAG,CAAC;GAC1D,SAAS,QAAQ,OAAO,uBAAuB,eAAe,GAAG;EACnE;CACF;AACF"}
@@ -1,13 +1,15 @@
1
+ //#region src/utils/timing.d.ts
1
2
  interface Options {
2
- enabled: boolean;
3
- crossOrigin?: string;
3
+ enabled: boolean;
4
+ crossOrigin?: string;
4
5
  }
5
6
  declare function timing(options?: Options): {
6
- startTime: (name: Lowercase<string>, description?: string) => void;
7
- endTime: (name: Lowercase<string>, precision?: number) => void;
8
- mark: (name: Lowercase<string>, description?: string, precision?: number) => void;
9
- setMetric: (name: Lowercase<string>, value: number | string | undefined, description?: string, precision?: number) => void;
10
- setTiming: (response: Response) => void;
7
+ startTime: (name: Lowercase<string>, description?: string) => void;
8
+ endTime: (name: Lowercase<string>, precision?: number) => void;
9
+ mark: (name: Lowercase<string>, description?: string, precision?: number) => void;
10
+ setMetric: (name: Lowercase<string>, value: number | string | undefined, description?: string, precision?: number) => void;
11
+ setTiming: (response: Response) => void;
11
12
  };
12
-
13
- export { type Options, timing };
13
+ //#endregion
14
+ export { Options, timing };
15
+ //# sourceMappingURL=timing.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.d.cts","names":[],"sources":["../../src/utils/timing.ts"],"mappings":";UAKiB;EACf;EACA;;iBAGc,OAAO,UAAS;EAO5B,YAAS,MAAS,mBAAiB;EAGnC,UAAO,MAAS,mBAAiB;EAcjC,OAAI,MAAS,mBAAiB,sBAAsB;EAQpD,YAAS,MACD,mBAAiB,oCACW,sBACd;EActB,YAAS,UAAa"}
@@ -0,0 +1,15 @@
1
+ //#region src/utils/timing.d.ts
2
+ interface Options {
3
+ enabled: boolean;
4
+ crossOrigin?: string;
5
+ }
6
+ declare function timing(options?: Options): {
7
+ startTime: (name: Lowercase<string>, description?: string) => void;
8
+ endTime: (name: Lowercase<string>, precision?: number) => void;
9
+ mark: (name: Lowercase<string>, description?: string, precision?: number) => void;
10
+ setMetric: (name: Lowercase<string>, value: number | string | undefined, description?: string, precision?: number) => void;
11
+ setTiming: (response: Response) => void;
12
+ };
13
+ //#endregion
14
+ export { Options, timing };
15
+ //# sourceMappingURL=timing.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.d.mts","names":[],"sources":["../../src/utils/timing.ts"],"mappings":";UAKiB;EACf;EACA;;iBAGc,OAAO,UAAS;EAO5B,YAAS,MAAS,mBAAiB;EAGnC,UAAO,MAAS,mBAAiB;EAcjC,OAAI,MAAS,mBAAiB,sBAAsB;EAQpD,YAAS,MACD,mBAAiB,oCACW,sBACd;EActB,YAAS,UAAa"}
@@ -1,49 +1,52 @@
1
- // src/utils/timing.ts
1
+ //#region src/utils/timing.ts
2
2
  function timing(options = { enabled: true }) {
3
- const { enabled, crossOrigin } = options;
4
- let start = performance.now();
5
- const headers = [];
6
- const timers = /* @__PURE__ */ new Map();
7
- return {
8
- startTime: (name, description) => {
9
- timers.set(name, { description, start: performance.now() });
10
- },
11
- endTime: (name, precision) => {
12
- const timer = timers.get(name);
13
- if (!timer) {
14
- console.warn(`timing: ${name} not found`);
15
- return;
16
- }
17
- const { start: start2, description } = timer;
18
- const dur = (performance.now() - start2).toFixed(precision ?? 1);
19
- timers.delete(name);
20
- const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
21
- headers.push(metric);
22
- },
23
- mark: (name, description, precision) => {
24
- const dur = (performance.now() - start).toFixed(precision ?? 1);
25
- const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
26
- headers.push(metric);
27
- start = performance.now();
28
- },
29
- setMetric: (name, value, description, precision) => {
30
- if (typeof value === "number") {
31
- const dur = value.toFixed(precision ?? 1);
32
- const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
33
- headers.push(metric);
34
- } else {
35
- const metric = value ? `${name};desc="${value}"` : `${name}`;
36
- headers.push(metric);
37
- }
38
- },
39
- setTiming: (response) => {
40
- if (!enabled) return;
41
- response.headers.append("Server-Timing", headers.join(","));
42
- response.headers.append("Timing-Allow-Origin", crossOrigin ?? "*");
43
- }
44
- };
3
+ const { enabled, crossOrigin } = options;
4
+ let start = performance.now();
5
+ const headers = [];
6
+ const timers = /* @__PURE__ */ new Map();
7
+ return {
8
+ startTime: (name, description) => {
9
+ timers.set(name, {
10
+ description,
11
+ start: performance.now()
12
+ });
13
+ },
14
+ endTime: (name, precision) => {
15
+ const timer = timers.get(name);
16
+ if (!timer) {
17
+ console.warn(`timing: ${name} not found`);
18
+ return;
19
+ }
20
+ const { start, description } = timer;
21
+ const dur = (performance.now() - start).toFixed(precision ?? 1);
22
+ timers.delete(name);
23
+ const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
24
+ headers.push(metric);
25
+ },
26
+ mark: (name, description, precision) => {
27
+ const dur = (performance.now() - start).toFixed(precision ?? 1);
28
+ const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
29
+ headers.push(metric);
30
+ start = performance.now();
31
+ },
32
+ setMetric: (name, value, description, precision) => {
33
+ if (typeof value === "number") {
34
+ const dur = value.toFixed(precision ?? 1);
35
+ const metric = description ? `${name};dur=${dur};desc="${description}"` : `${name};dur=${dur}`;
36
+ headers.push(metric);
37
+ } else {
38
+ const metric = value ? `${name};desc="${value}"` : `${name}`;
39
+ headers.push(metric);
40
+ }
41
+ },
42
+ setTiming: (response) => {
43
+ if (!enabled) return;
44
+ response.headers.append("Server-Timing", headers.join(","));
45
+ response.headers.append("Timing-Allow-Origin", crossOrigin ?? "*");
46
+ }
47
+ };
45
48
  }
46
- export {
47
- timing
48
- };
49
+ //#endregion
50
+ export { timing };
51
+
49
52
  //# sourceMappingURL=timing.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/timing.ts"],"sourcesContent":["interface Timer {\n description?: string;\n start: number;\n}\n\nexport interface Options {\n enabled: boolean;\n crossOrigin?: string;\n}\n\nexport function timing(options: Options = { enabled: true }) {\n const { enabled, crossOrigin } = options;\n let start = performance.now();\n const headers: string[] = [];\n const timers = new Map<string, Timer>();\n\n return {\n startTime: (name: Lowercase<string>, description?: string) => {\n timers.set(name, { description, start: performance.now() });\n },\n endTime: (name: Lowercase<string>, precision?: number) => {\n const timer = timers.get(name);\n if (!timer) {\n console.warn(`timing: ${name} not found`);\n return;\n }\n const { start, description } = timer;\n const dur = (performance.now() - start).toFixed(precision ?? 1);\n timers.delete(name);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n },\n mark: (name: Lowercase<string>, description?: string, precision?: number) => {\n const dur = (performance.now() - start).toFixed(precision ?? 1);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n start = performance.now();\n },\n setMetric: (\n name: Lowercase<string>,\n value: number | string | undefined,\n description?: string,\n precision?: number\n ) => {\n if (typeof value === 'number') {\n const dur = value.toFixed(precision ?? 1);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n } else {\n const metric = value ? `${name};desc=\"${value}\"` : `${name}`;\n headers.push(metric);\n }\n },\n setTiming: (response: Response) => {\n if (!enabled) return;\n response.headers.append('Server-Timing', headers.join(','));\n response.headers.append('Timing-Allow-Origin', crossOrigin ?? '*');\n },\n };\n}\n"],"mappings":";AAUO,SAAS,OAAO,UAAmB,EAAE,SAAS,KAAK,GAAG;AAC3D,QAAM,EAAE,SAAS,YAAY,IAAI;AACjC,MAAI,QAAQ,YAAY,IAAI;AAC5B,QAAM,UAAoB,CAAC;AAC3B,QAAM,SAAS,oBAAI,IAAmB;AAEtC,SAAO;AAAA,IACL,WAAW,CAAC,MAAyB,gBAAyB;AAC5D,aAAO,IAAI,MAAM,EAAE,aAAa,OAAO,YAAY,IAAI,EAAE,CAAC;AAAA,IAC5D;AAAA,IACA,SAAS,CAAC,MAAyB,cAAuB;AACxD,YAAM,QAAQ,OAAO,IAAI,IAAI;AAC7B,UAAI,CAAC,OAAO;AACV,gBAAQ,KAAK,WAAW,IAAI,YAAY;AACxC;AAAA,MACF;AACA,YAAM,EAAE,OAAAA,QAAO,YAAY,IAAI;AAC/B,YAAM,OAAO,YAAY,IAAI,IAAIA,QAAO,QAAQ,aAAa,CAAC;AAC9D,aAAO,OAAO,IAAI;AAClB,YAAM,SAAS,cACX,GAAG,IAAI,QAAQ,GAAG,UAAU,WAAW,MACvC,GAAG,IAAI,QAAQ,GAAG;AACtB,cAAQ,KAAK,MAAM;AAAA,IACrB;AAAA,IACA,MAAM,CAAC,MAAyB,aAAsB,cAAuB;AAC3E,YAAM,OAAO,YAAY,IAAI,IAAI,OAAO,QAAQ,aAAa,CAAC;AAC9D,YAAM,SAAS,cACX,GAAG,IAAI,QAAQ,GAAG,UAAU,WAAW,MACvC,GAAG,IAAI,QAAQ,GAAG;AACtB,cAAQ,KAAK,MAAM;AACnB,cAAQ,YAAY,IAAI;AAAA,IAC1B;AAAA,IACA,WAAW,CACT,MACA,OACA,aACA,cACG;AACH,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,MAAM,MAAM,QAAQ,aAAa,CAAC;AACxC,cAAM,SAAS,cACX,GAAG,IAAI,QAAQ,GAAG,UAAU,WAAW,MACvC,GAAG,IAAI,QAAQ,GAAG;AACtB,gBAAQ,KAAK,MAAM;AAAA,MACrB,OAAO;AACL,cAAM,SAAS,QAAQ,GAAG,IAAI,UAAU,KAAK,MAAM,GAAG,IAAI;AAC1D,gBAAQ,KAAK,MAAM;AAAA,MACrB;AAAA,IACF;AAAA,IACA,WAAW,CAAC,aAAuB;AACjC,UAAI,CAAC,QAAS;AACd,eAAS,QAAQ,OAAO,iBAAiB,QAAQ,KAAK,GAAG,CAAC;AAC1D,eAAS,QAAQ,OAAO,uBAAuB,eAAe,GAAG;AAAA,IACnE;AAAA,EACF;AACF;","names":["start"]}
1
+ {"version":3,"file":"timing.mjs","names":[],"sources":["../../src/utils/timing.ts"],"sourcesContent":["interface Timer {\n description?: string;\n start: number;\n}\n\nexport interface Options {\n enabled: boolean;\n crossOrigin?: string;\n}\n\nexport function timing(options: Options = { enabled: true }) {\n const { enabled, crossOrigin } = options;\n let start = performance.now();\n const headers: string[] = [];\n const timers = new Map<string, Timer>();\n\n return {\n startTime: (name: Lowercase<string>, description?: string) => {\n timers.set(name, { description, start: performance.now() });\n },\n endTime: (name: Lowercase<string>, precision?: number) => {\n const timer = timers.get(name);\n if (!timer) {\n console.warn(`timing: ${name} not found`);\n return;\n }\n const { start, description } = timer;\n const dur = (performance.now() - start).toFixed(precision ?? 1);\n timers.delete(name);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n },\n mark: (name: Lowercase<string>, description?: string, precision?: number) => {\n const dur = (performance.now() - start).toFixed(precision ?? 1);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n start = performance.now();\n },\n setMetric: (\n name: Lowercase<string>,\n value: number | string | undefined,\n description?: string,\n precision?: number\n ) => {\n if (typeof value === 'number') {\n const dur = value.toFixed(precision ?? 1);\n const metric = description\n ? `${name};dur=${dur};desc=\"${description}\"`\n : `${name};dur=${dur}`;\n headers.push(metric);\n } else {\n const metric = value ? `${name};desc=\"${value}\"` : `${name}`;\n headers.push(metric);\n }\n },\n setTiming: (response: Response) => {\n if (!enabled) return;\n response.headers.append('Server-Timing', headers.join(','));\n response.headers.append('Timing-Allow-Origin', crossOrigin ?? '*');\n },\n };\n}\n"],"mappings":";AAUA,SAAgB,OAAO,UAAmB,EAAE,SAAS,KAAK,GAAG;CAC3D,MAAM,EAAE,SAAS,gBAAgB;CACjC,IAAI,QAAQ,YAAY,IAAI;CAC5B,MAAM,UAAoB,CAAC;CAC3B,MAAM,yBAAS,IAAI,IAAmB;CAEtC,OAAO;EACL,YAAY,MAAyB,gBAAyB;GAC5D,OAAO,IAAI,MAAM;IAAE;IAAa,OAAO,YAAY,IAAI;GAAE,CAAC;EAC5D;EACA,UAAU,MAAyB,cAAuB;GACxD,MAAM,QAAQ,OAAO,IAAI,IAAI;GAC7B,IAAI,CAAC,OAAO;IACV,QAAQ,KAAK,WAAW,KAAK,WAAW;IACxC;GACF;GACA,MAAM,EAAE,OAAO,gBAAgB;GAC/B,MAAM,OAAO,YAAY,IAAI,IAAI,MAAA,CAAO,QAAQ,aAAa,CAAC;GAC9D,OAAO,OAAO,IAAI;GAClB,MAAM,SAAS,cACX,GAAG,KAAK,OAAO,IAAI,SAAS,YAAY,KACxC,GAAG,KAAK,OAAO;GACnB,QAAQ,KAAK,MAAM;EACrB;EACA,OAAO,MAAyB,aAAsB,cAAuB;GAC3E,MAAM,OAAO,YAAY,IAAI,IAAI,MAAA,CAAO,QAAQ,aAAa,CAAC;GAC9D,MAAM,SAAS,cACX,GAAG,KAAK,OAAO,IAAI,SAAS,YAAY,KACxC,GAAG,KAAK,OAAO;GACnB,QAAQ,KAAK,MAAM;GACnB,QAAQ,YAAY,IAAI;EAC1B;EACA,YACE,MACA,OACA,aACA,cACG;GACH,IAAI,OAAO,UAAU,UAAU;IAC7B,MAAM,MAAM,MAAM,QAAQ,aAAa,CAAC;IACxC,MAAM,SAAS,cACX,GAAG,KAAK,OAAO,IAAI,SAAS,YAAY,KACxC,GAAG,KAAK,OAAO;IACnB,QAAQ,KAAK,MAAM;GACrB,OAAO;IACL,MAAM,SAAS,QAAQ,GAAG,KAAK,SAAS,MAAM,KAAK,GAAG;IACtD,QAAQ,KAAK,MAAM;GACrB;EACF;EACA,YAAY,aAAuB;GACjC,IAAI,CAAC,SAAS;GACd,SAAS,QAAQ,OAAO,iBAAiB,QAAQ,KAAK,GAAG,CAAC;GAC1D,SAAS,QAAQ,OAAO,uBAAuB,eAAe,GAAG;EACnE;CACF;AACF"}