watch-tail 0.3.1 → 0.4.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 (96) hide show
  1. package/README.md +27 -3
  2. package/build/client/_app/immutable/assets/0.BPmQoXaO.css +2 -0
  3. package/build/client/_app/immutable/assets/0.BPmQoXaO.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.BPmQoXaO.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{DyIYFD7i.js → Bw_9uNRP.js} +1 -1
  6. package/build/client/_app/immutable/chunks/Bw_9uNRP.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/Bw_9uNRP.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/De_x7GQi.js +1 -0
  9. package/build/client/_app/immutable/chunks/De_x7GQi.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/De_x7GQi.js.gz +0 -0
  11. package/build/client/_app/immutable/entry/{app.D0_YFW4X.js → app.Be166AxG.js} +2 -2
  12. package/build/client/_app/immutable/entry/app.Be166AxG.js.br +0 -0
  13. package/build/client/_app/immutable/entry/app.Be166AxG.js.gz +0 -0
  14. package/build/client/_app/immutable/entry/start.clEDpQL9.js +1 -0
  15. package/build/client/_app/immutable/entry/start.clEDpQL9.js.br +0 -0
  16. package/build/client/_app/immutable/entry/start.clEDpQL9.js.gz +0 -0
  17. package/build/client/_app/immutable/nodes/0.BJ6Zdc8H.js +1 -0
  18. package/build/client/_app/immutable/nodes/0.BJ6Zdc8H.js.br +4 -0
  19. package/build/client/_app/immutable/nodes/0.BJ6Zdc8H.js.gz +0 -0
  20. package/build/client/_app/immutable/nodes/{1.D1vhnOgO.js → 1.xMNWuLLz.js} +1 -1
  21. package/build/client/_app/immutable/nodes/1.xMNWuLLz.js.br +0 -0
  22. package/build/client/_app/immutable/nodes/1.xMNWuLLz.js.gz +0 -0
  23. package/build/client/_app/immutable/nodes/2.CaxDXwmh.js +5 -0
  24. package/build/client/_app/immutable/nodes/2.CaxDXwmh.js.br +0 -0
  25. package/build/client/_app/immutable/nodes/2.CaxDXwmh.js.gz +0 -0
  26. package/build/client/_app/version.json +1 -1
  27. package/build/client/_app/version.json.br +0 -0
  28. package/build/client/_app/version.json.gz +0 -0
  29. package/build/handler.js +4 -4
  30. package/build/index.js +4 -4
  31. package/build/server/chunks/chunks/{env2.js-D7xrfc37.js → env2.js-DXveJt1Y.js} +18 -12
  32. package/build/server/chunks/chunks/env2.js-DXveJt1Y.js.map +1 -0
  33. package/build/server/chunks/chunks/{internal.js-B-DZpK-L.js → internal.js-Cc3oBhL-.js} +3 -3
  34. package/build/server/chunks/chunks/{internal.js-B-DZpK-L.js.map → internal.js-Cc3oBhL-.js.map} +1 -1
  35. package/build/server/chunks/chunks/{state.js-V2NYGhy_.js → state.js-9DxsWxU-.js} +2 -2
  36. package/build/server/chunks/chunks/{state.js-V2NYGhy_.js.map → state.js-9DxsWxU-.js.map} +1 -1
  37. package/build/server/chunks/entries/endpoints/api/health/{_server.ts.js-aiNZfkco.js → _server.ts.js-BOjix7GN.js} +3 -2
  38. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-BOjix7GN.js.map +1 -0
  39. package/build/server/chunks/entries/endpoints/api/identity/_server.ts.js-g13uvmrX.js +72 -0
  40. package/build/server/chunks/entries/endpoints/api/identity/_server.ts.js-g13uvmrX.js.map +1 -0
  41. package/build/server/chunks/entries/endpoints/api/log-groups/{_server.ts.js-D143-vRl.js → _server.ts.js-CmHRxdZK.js} +3 -2
  42. package/build/server/chunks/entries/endpoints/api/log-groups/{_server.ts.js-D143-vRl.js.map → _server.ts.js-CmHRxdZK.js.map} +1 -1
  43. package/build/server/chunks/entries/endpoints/api/regions/{_server.ts.js-CDNL7msU.js → _server.ts.js-BgUwioxp.js} +3 -2
  44. package/build/server/chunks/entries/endpoints/api/regions/{_server.ts.js-CDNL7msU.js.map → _server.ts.js-BgUwioxp.js.map} +1 -1
  45. package/build/server/chunks/entries/endpoints/api/stream/{_server.ts.js-D_i-xW6_.js → _server.ts.js-CIYo4C-0.js} +3 -2
  46. package/build/server/chunks/entries/endpoints/api/stream/{_server.ts.js-D_i-xW6_.js.map → _server.ts.js-CIYo4C-0.js.map} +1 -1
  47. package/build/server/chunks/entries/fallbacks/{error.svelte.js-CAasf3PF.js → error.svelte.js-CFonuZkV.js} +3 -3
  48. package/build/server/chunks/entries/fallbacks/{error.svelte.js-CAasf3PF.js.map → error.svelte.js-CFonuZkV.js.map} +1 -1
  49. package/build/server/chunks/entries/pages/_layout.svelte.js-Dzluuq12.js +22 -0
  50. package/build/server/chunks/entries/pages/_layout.svelte.js-Dzluuq12.js.map +1 -0
  51. package/build/server/chunks/entries/pages/{_page.svelte.js-DzAAqWz2.js → _page.svelte.js-CpwYbxbM.js} +36 -9
  52. package/build/server/chunks/entries/pages/_page.svelte.js-CpwYbxbM.js.map +1 -0
  53. package/build/server/chunks/{handler-CuWqZDuC.js → handler-DS32NMsJ.js} +3 -3
  54. package/build/server/chunks/{handler-CuWqZDuC.js.map → handler-DS32NMsJ.js.map} +1 -1
  55. package/build/server/chunks/{index.js-NHTL74z2.js → index.js-HHu-yOEK.js} +2 -2
  56. package/build/server/chunks/{index.js-NHTL74z2.js.map → index.js-HHu-yOEK.js.map} +1 -1
  57. package/build/server/chunks/{manifest.js-8g4gjxwf.js → manifest.js-BUrA7Zyr.js} +16 -9
  58. package/build/server/chunks/manifest.js-BUrA7Zyr.js.map +1 -0
  59. package/build/server/chunks/nodes/{0.js-Bg4_hDjk.js → 0.js-gSRmrAt_.js} +4 -4
  60. package/build/server/chunks/nodes/{0.js-Bg4_hDjk.js.map → 0.js-gSRmrAt_.js.map} +1 -1
  61. package/build/server/chunks/nodes/{1.js-CDSk3TvW.js → 1.js-D68K7Ad_.js} +3 -3
  62. package/build/server/chunks/nodes/{1.js-CDSk3TvW.js.map → 1.js-D68K7Ad_.js.map} +1 -1
  63. package/build/server/chunks/nodes/2.js-ChYsaaoC.js +9 -0
  64. package/build/server/chunks/nodes/{2.js-BVhBcWrN.js.map → 2.js-ChYsaaoC.js.map} +1 -1
  65. package/dist/cli/index.js +129 -30
  66. package/dist/cli/preflight.js +42 -0
  67. package/dist/cli/ui.js +7 -3
  68. package/package.json +2 -1
  69. package/build/client/_app/immutable/assets/0.CocWI5K4.css +0 -2
  70. package/build/client/_app/immutable/assets/0.CocWI5K4.css.br +0 -0
  71. package/build/client/_app/immutable/assets/0.CocWI5K4.css.gz +0 -0
  72. package/build/client/_app/immutable/chunks/05WsiB4A.js +0 -1
  73. package/build/client/_app/immutable/chunks/05WsiB4A.js.br +0 -0
  74. package/build/client/_app/immutable/chunks/05WsiB4A.js.gz +0 -0
  75. package/build/client/_app/immutable/chunks/DyIYFD7i.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/DyIYFD7i.js.gz +0 -0
  77. package/build/client/_app/immutable/entry/app.D0_YFW4X.js.br +0 -0
  78. package/build/client/_app/immutable/entry/app.D0_YFW4X.js.gz +0 -0
  79. package/build/client/_app/immutable/entry/start.D1rrHrg2.js +0 -1
  80. package/build/client/_app/immutable/entry/start.D1rrHrg2.js.br +0 -0
  81. package/build/client/_app/immutable/entry/start.D1rrHrg2.js.gz +0 -0
  82. package/build/client/_app/immutable/nodes/0.DHBUWbOo.js +0 -1
  83. package/build/client/_app/immutable/nodes/0.DHBUWbOo.js.br +0 -0
  84. package/build/client/_app/immutable/nodes/0.DHBUWbOo.js.gz +0 -0
  85. package/build/client/_app/immutable/nodes/1.D1vhnOgO.js.br +0 -0
  86. package/build/client/_app/immutable/nodes/1.D1vhnOgO.js.gz +0 -0
  87. package/build/client/_app/immutable/nodes/2.BPdL6B7F.js +0 -5
  88. package/build/client/_app/immutable/nodes/2.BPdL6B7F.js.br +0 -0
  89. package/build/client/_app/immutable/nodes/2.BPdL6B7F.js.gz +0 -0
  90. package/build/server/chunks/chunks/env2.js-D7xrfc37.js.map +0 -1
  91. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-aiNZfkco.js.map +0 -1
  92. package/build/server/chunks/entries/pages/_layout.svelte.js-Bx7lXkAi.js +0 -22
  93. package/build/server/chunks/entries/pages/_layout.svelte.js-Bx7lXkAi.js.map +0 -1
  94. package/build/server/chunks/entries/pages/_page.svelte.js-DzAAqWz2.js.map +0 -1
  95. package/build/server/chunks/manifest.js-8g4gjxwf.js.map +0 -1
  96. package/build/server/chunks/nodes/2.js-BVhBcWrN.js +0 -9
@@ -1,8 +1,9 @@
1
- import { p as parseRegionParam, a as apiError, b as readEnv, r as resolveAwsConfig, c as createLogsClient, d as resolveEffectiveRegion, e as describeAwsError, R as REGION_PARAM_HINT } from '../../../../chunks/env2.js-D7xrfc37.js';
1
+ import { p as parseRegionParam, a as apiError, b as readEnv, r as resolveAwsConfig, c as createLogsClient, d as resolveEffectiveRegion, e as describeAwsError, R as REGION_PARAM_HINT } from '../../../../chunks/env2.js-DXveJt1Y.js';
2
2
  import { R as REGION_CODES } from '../../../../chunks/regions.js-IQPMyP5C.js';
3
3
  import { j as json } from '../../../../chunks/utils.js-BIlHjgGW.js';
4
4
  import '../../../../chunks/shared-server.js-Dn5XheXH.js';
5
5
  import '@aws-sdk/client-cloudwatch-logs';
6
+ import '@aws-sdk/client-sts';
6
7
  import 'node:fs';
7
8
  import 'node:path';
8
9
  import '../../../../chunks/shared.js-CgjUIvRK.js';
@@ -85,4 +86,4 @@ var GET = async ({ url }) => {
85
86
  };
86
87
 
87
88
  export { GET };
88
- //# sourceMappingURL=_server.ts.js-CDNL7msU.js.map
89
+ //# sourceMappingURL=_server.ts.js-BgUwioxp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts.js-CDNL7msU.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/regions/_server.ts.js"],"sourcesContent":["import { a as describeAwsError, c as resolveEffectiveRegion, i as createLogsClient, l as apiError, o as parseRegionParam, r as REGION_PARAM_HINT, s as resolveAwsConfig, t as readEnv } from \"../../../../chunks/env2.js\";\nimport { t as REGION_CODES } from \"../../../../chunks/regions.js\";\nimport { json } from \"@sveltejs/kit\";\n//#region src/lib/server/regions.ts\n/**\n* Region list used when `WATCH_STREAM_REGIONS` is unset.\n*\n* Every AWS region that publishes CloudWatch Logs endpoints, including\n* `af-south-1`; see `$lib/regions`.\n*/\nvar FALLBACK_REGIONS = [...REGION_CODES];\n/** Splits a comma-separated region list, trimming and dropping blanks. */\nfunction parseRegionList(value) {\n\tif (typeof value !== \"string\") return [];\n\tconst regions = [];\n\tfor (const part of value.split(\",\")) {\n\t\tconst region = part.trim();\n\t\tif (region.length > 0 && !regions.includes(region)) regions.push(region);\n\t}\n\treturn regions;\n}\n/** Trims a value and treats blank strings as absent. */\nfunction normalize(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : null;\n}\n/**\n* Resolves the region list for the picker plus the default region.\n*\n* `defaultRegion` is the explicit environment region when set, otherwise\n* `effectiveRegion` (usually the region the SDK resolved from the ambient AWS\n* configuration), otherwise `us-east-1`. The list comes from\n* `WATCH_STREAM_REGIONS` when set, otherwise from {@link FALLBACK_REGIONS}, and\n* the default region is always present: it is prepended when missing, keeping\n* the remaining order de-duplicated.\n*/\nfunction resolveRegions(env, effectiveRegion) {\n\tconst { region: envRegion } = resolveAwsConfig(env);\n\tconst defaultRegion = envRegion ?? normalize(effectiveRegion) ?? \"us-east-1\";\n\tconst configured = parseRegionList(env.WATCH_STREAM_REGIONS);\n\tconst regions = configured.length > 0 ? configured : [...FALLBACK_REGIONS];\n\tif (!regions.includes(defaultRegion)) regions.unshift(defaultRegion);\n\treturn {\n\t\tregions,\n\t\tdefaultRegion\n\t};\n}\n//#endregion\n//#region src/routes/api/regions/+server.ts\n/**\n* `GET /api/regions?region=` - region list for the picker plus the effective region.\n*\n* The effective region becomes `defaultRegion`, so a region resolved from the\n* ambient AWS configuration is selected by default.\n*/\nvar GET = async ({ url }) => {\n\tconst parsed = parseRegionParam(url.searchParams.get(\"region\"));\n\tif (!parsed.ok) return apiError(400, REGION_PARAM_HINT, \"invalid-region\");\n\tconst env = readEnv();\n\tconst config = resolveAwsConfig(env, parsed.region);\n\tlet client;\n\ttry {\n\t\tclient = createLogsClient(config);\n\t\tconst { regions, defaultRegion } = resolveRegions(env, await resolveEffectiveRegion(client, config));\n\t\tconst body = {\n\t\t\tregions,\n\t\t\tdefaultRegion,\n\t\t\tendpoint: config.endpoint\n\t\t};\n\t\treturn json(body);\n\t} catch (error) {\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t} finally {\n\t\tclient?.destroy();\n\t}\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_server.ts.js-BgUwioxp.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/regions/_server.ts.js"],"sourcesContent":["import { c as resolveAwsConfig, i as createLogsClient, l as resolveEffectiveRegion, o as describeAwsError, r as REGION_PARAM_HINT, s as parseRegionParam, t as readEnv, u as apiError } from \"../../../../chunks/env2.js\";\nimport { t as REGION_CODES } from \"../../../../chunks/regions.js\";\nimport { json } from \"@sveltejs/kit\";\n//#region src/lib/server/regions.ts\n/**\n* Region list used when `WATCH_STREAM_REGIONS` is unset.\n*\n* Every AWS region that publishes CloudWatch Logs endpoints, including\n* `af-south-1`; see `$lib/regions`.\n*/\nvar FALLBACK_REGIONS = [...REGION_CODES];\n/** Splits a comma-separated region list, trimming and dropping blanks. */\nfunction parseRegionList(value) {\n\tif (typeof value !== \"string\") return [];\n\tconst regions = [];\n\tfor (const part of value.split(\",\")) {\n\t\tconst region = part.trim();\n\t\tif (region.length > 0 && !regions.includes(region)) regions.push(region);\n\t}\n\treturn regions;\n}\n/** Trims a value and treats blank strings as absent. */\nfunction normalize(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim();\n\treturn trimmed.length > 0 ? trimmed : null;\n}\n/**\n* Resolves the region list for the picker plus the default region.\n*\n* `defaultRegion` is the explicit environment region when set, otherwise\n* `effectiveRegion` (usually the region the SDK resolved from the ambient AWS\n* configuration), otherwise `us-east-1`. The list comes from\n* `WATCH_STREAM_REGIONS` when set, otherwise from {@link FALLBACK_REGIONS}, and\n* the default region is always present: it is prepended when missing, keeping\n* the remaining order de-duplicated.\n*/\nfunction resolveRegions(env, effectiveRegion) {\n\tconst { region: envRegion } = resolveAwsConfig(env);\n\tconst defaultRegion = envRegion ?? normalize(effectiveRegion) ?? \"us-east-1\";\n\tconst configured = parseRegionList(env.WATCH_STREAM_REGIONS);\n\tconst regions = configured.length > 0 ? configured : [...FALLBACK_REGIONS];\n\tif (!regions.includes(defaultRegion)) regions.unshift(defaultRegion);\n\treturn {\n\t\tregions,\n\t\tdefaultRegion\n\t};\n}\n//#endregion\n//#region src/routes/api/regions/+server.ts\n/**\n* `GET /api/regions?region=` - region list for the picker plus the effective region.\n*\n* The effective region becomes `defaultRegion`, so a region resolved from the\n* ambient AWS configuration is selected by default.\n*/\nvar GET = async ({ url }) => {\n\tconst parsed = parseRegionParam(url.searchParams.get(\"region\"));\n\tif (!parsed.ok) return apiError(400, REGION_PARAM_HINT, \"invalid-region\");\n\tconst env = readEnv();\n\tconst config = resolveAwsConfig(env, parsed.region);\n\tlet client;\n\ttry {\n\t\tclient = createLogsClient(config);\n\t\tconst { regions, defaultRegion } = resolveRegions(env, await resolveEffectiveRegion(client, config));\n\t\tconst body = {\n\t\t\tregions,\n\t\t\tdefaultRegion,\n\t\t\tendpoint: config.endpoint\n\t\t};\n\t\treturn json(body);\n\t} catch (error) {\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t} finally {\n\t\tclient?.destroy();\n\t}\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import { a as apiError, p as parseRegionParam, b as readEnv, r as resolveAwsConfig, c as createLogsClient, d as resolveEffectiveRegion, e as describeAwsError, R as REGION_PARAM_HINT } from '../../../../chunks/env2.js-D7xrfc37.js';
1
+ import { a as apiError, p as parseRegionParam, b as readEnv, r as resolveAwsConfig, c as createLogsClient, d as resolveEffectiveRegion, e as describeAwsError, R as REGION_PARAM_HINT } from '../../../../chunks/env2.js-DXveJt1Y.js';
2
2
  import { H as HISTORIC_PRESETS, p as presetDurationMs, i as isHistoricPreset } from '../../../../chunks/time-range.js-BLMT8aU3.js';
3
3
  import '../../../../chunks/utils.js-BIlHjgGW.js';
4
4
  import { FilterLogEventsCommand } from '@aws-sdk/client-cloudwatch-logs';
5
5
  import '../../../../chunks/shared-server.js-Dn5XheXH.js';
6
+ import '@aws-sdk/client-sts';
6
7
  import 'node:fs';
7
8
  import 'node:path';
8
9
  import '../../../../chunks/shared.js-CgjUIvRK.js';
@@ -607,4 +608,4 @@ var GET = async ({ url, request }) => {
607
608
  };
608
609
 
609
610
  export { GET };
610
- //# sourceMappingURL=_server.ts.js-D_i-xW6_.js.map
611
+ //# sourceMappingURL=_server.ts.js-CIYo4C-0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts.js-D_i-xW6_.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/stream/_server.ts.js"],"sourcesContent":["import { a as describeAwsError, c as resolveEffectiveRegion, i as createLogsClient, l as apiError, o as parseRegionParam, r as REGION_PARAM_HINT, s as resolveAwsConfig, t as readEnv } from \"../../../../chunks/env2.js\";\nimport { a as presetDurationMs, i as isHistoricPreset, t as HISTORIC_PRESETS } from \"../../../../chunks/time-range.js\";\nimport \"@sveltejs/kit\";\nimport { FilterLogEventsCommand } from \"@aws-sdk/client-cloudwatch-logs\";\n//#region src/lib/server/filter.ts\n/** Default lookback window when neither `startTime` nor `lookback` is usable. */\nvar DEFAULT_LOOKBACK_MS = 3e5;\n/** CloudWatch Logs rejects `startTime` older than 14 days. */\nvar MAX_LOOKBACK_MS = 12096e5;\nvar DEFAULT_POLL_MS$1 = 1e3;\nvar MIN_POLL_MS = 250;\nvar MAX_POLL_MS = 15e3;\nvar DURATION_UNITS = {\n\tms: 1,\n\ts: 1e3,\n\tm: 6e4,\n\th: 36e5,\n\td: 864e5,\n\tw: 6048e5\n};\nvar DURATION_PATTERN = /^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h|d|w)$/i;\nvar EPOCH_PATTERN = /^\\d+$/;\n/**\n* Parses a single-unit duration such as `500ms`, `30s`, `15m`, `2h`, `3d` or\n* `1w`. Returns `null` for anything invalid, negative or zero.\n*/\nfunction parseDurationMs(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst match = DURATION_PATTERN.exec(value.trim());\n\tif (match === null) return null;\n\tconst amount = Number(match[1]);\n\tconst unit = DURATION_UNITS[match[2].toLowerCase()];\n\tif (unit === void 0 || !Number.isFinite(amount)) return null;\n\tconst ms = amount * unit;\n\tif (!Number.isFinite(ms) || ms <= 0) return null;\n\treturn Math.round(ms);\n}\n/**\n* Parses a start point into epoch milliseconds.\n*\n* Accepts epoch milliseconds (`1700000000000`), a duration relative to `now`\n* (`15m`) and ISO 8601 timestamps. Returns `null` when the value is missing or\n* cannot be understood.\n*/\nfunction parseStartTime(value, now) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return null;\n\tif (EPOCH_PATTERN.test(trimmed)) return Number(trimmed);\n\tconst duration = parseDurationMs(trimmed);\n\tif (duration !== null) return now - duration;\n\tconst parsed = Date.parse(trimmed);\n\treturn Number.isNaN(parsed) ? null : parsed;\n}\n/** Resolves the effective start time, clamped to the last 14 days and to `now`. */\nfunction resolveStartTime(input) {\n\tconst { now } = input;\n\tlet start = parseStartTime(input.startTime, now);\n\tif (start === null) start = now - (parseDurationMs(input.lookback ?? \"\") ?? DEFAULT_LOOKBACK_MS);\n\tconst oldestAllowed = now - MAX_LOOKBACK_MS;\n\tif (start > now) start = now;\n\tif (start < oldestAllowed) start = oldestAllowed;\n\treturn Math.round(start);\n}\n/** Parses a poll interval in milliseconds, defaulting to 1000 and clamped to 250..15000. */\nfunction clampPollMs(value) {\n\tif (typeof value !== \"string\") return DEFAULT_POLL_MS$1;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return DEFAULT_POLL_MS$1;\n\tconst parsed = Number(trimmed);\n\tif (!Number.isFinite(parsed)) return DEFAULT_POLL_MS$1;\n\treturn Math.min(Math.max(Math.round(parsed), MIN_POLL_MS), MAX_POLL_MS);\n}\n/** Default historic window when neither `range` nor `from`/`to` is given. */\nvar DEFAULT_HISTORIC_PRESET = \"15m\";\n/** Parses the `mode` parameter; `null` for an unrecognised value. */\nfunction parseMode(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim().toLowerCase();\n\tif (trimmed === \"live\" || trimmed === \"historic\") return trimmed;\n\treturn null;\n}\n/**\n* Parses an absolute instant: epoch milliseconds or an ISO 8601 timestamp.\n*\n* Relative durations are deliberately rejected here so an end bound can never\n* move with the clock.\n*/\nfunction parseInstant(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return null;\n\tif (EPOCH_PATTERN.test(trimmed)) return Number(trimmed);\n\tconst parsed = Date.parse(trimmed);\n\treturn Number.isNaN(parsed) ? null : parsed;\n}\n/**\n* Clamps a window to what CloudWatch Logs can return: 14 days back, ending now.\n*\n* Returns `null` when the requested window ends before the retention floor, so\n* a request for month-old data fails loudly instead of returning a stub window.\n*/\nfunction clampWindow(start, end, now) {\n\tconst oldest = now - MAX_LOOKBACK_MS;\n\tif (end <= oldest) return null;\n\tconst clampedStart = Math.min(Math.max(start, oldest), now);\n\tconst clampedEnd = Math.min(Math.max(end, clampedStart + 1), now);\n\treturn {\n\t\tstart: Math.round(clampedStart),\n\t\tend: Math.round(clampedEnd),\n\t\tclamped: clampedStart !== Math.round(start) || clampedEnd !== Math.round(end)\n\t};\n}\n/**\n* Resolves the request window into a start time plus, for historic mode, an end\n* time.\n*\n* Historic windows come from a preset (`range=24h`), from explicit bounds\n* (`from`/`to`, epoch ms or ISO 8601) or, when neither is given, from the\n* smallest preset. Windows are clamped to the last 14 days and to `now` so the\n* request can never ask CloudWatch for data it will not return.\n*/\nfunction resolveWindow(input) {\n\tconst { now } = input;\n\tconst requestedMode = input.mode === null || input.mode === void 0 ? \"live\" : input.mode.trim();\n\tconst mode = requestedMode === \"\" ? \"live\" : parseMode(requestedMode);\n\tif (mode === null) return {\n\t\tok: false,\n\t\tcode: \"invalid-mode\",\n\t\tmessage: \"Invalid mode: expected \\\"live\\\" or \\\"historic\\\"\"\n\t};\n\tif (mode === \"live\") return {\n\t\tok: true,\n\t\tmode,\n\t\tstartTime: resolveStartTime({\n\t\t\tstartTime: input.startTime,\n\t\t\tlookback: input.lookback,\n\t\t\tnow\n\t\t}),\n\t\tendTime: null,\n\t\tpreset: null,\n\t\tclamped: false\n\t};\n\tconst from = input.from?.trim() ?? \"\";\n\tconst to = input.to?.trim() ?? \"\";\n\tif (from.length > 0 || to.length > 0) {\n\t\tif (from.length === 0 || to.length === 0) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-window\",\n\t\t\tmessage: \"A custom window needs both \\\"from\\\" and \\\"to\\\"\"\n\t\t};\n\t\tconst parsedFrom = parseStartTime(from, now);\n\t\tconst parsedTo = parseInstant(to);\n\t\tif (parsedFrom === null) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-time\",\n\t\t\tmessage: `Invalid \"from\": expected epoch milliseconds, a duration such as 3h, or an ISO 8601 timestamp`\n\t\t};\n\t\tif (parsedTo === null) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-time\",\n\t\t\tmessage: \"Invalid \\\"to\\\": expected epoch milliseconds or an ISO 8601 timestamp\"\n\t\t};\n\t\tif (parsedTo <= parsedFrom) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-window\",\n\t\t\tmessage: \"The end of the window must be after its start\"\n\t\t};\n\t\tconst clamped = clampWindow(parsedFrom, parsedTo, now);\n\t\tif (clamped === null || clamped.end <= clamped.start) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-window\",\n\t\t\tmessage: \"The requested window is outside the 14 days CloudWatch Logs keeps\"\n\t\t};\n\t\treturn {\n\t\t\tok: true,\n\t\t\tmode,\n\t\t\tstartTime: clamped.start,\n\t\t\tendTime: clamped.end,\n\t\t\tpreset: null,\n\t\t\tclamped: clamped.clamped\n\t\t};\n\t}\n\tconst requestedRange = input.range?.trim() ?? \"\";\n\tconst preset = requestedRange === \"\" ? DEFAULT_HISTORIC_PRESET : isHistoricPreset(requestedRange) ? requestedRange : null;\n\tif (preset === null) return {\n\t\tok: false,\n\t\tcode: \"invalid-range\",\n\t\tmessage: `Invalid range: expected one of ${HISTORIC_PRESETS.join(\", \")} or an explicit from/to window`\n\t};\n\tconst end = Math.round(now);\n\treturn {\n\t\tok: true,\n\t\tmode,\n\t\tstartTime: Math.round(now - presetDurationMs(preset)),\n\t\tendTime: end,\n\t\tpreset,\n\t\tclamped: false\n\t};\n}\n//#endregion\n//#region src/lib/server/sse.ts\nvar NEWLINE_PATTERN = /\\r?\\n/g;\n/**\n* Encodes a single server-sent event frame.\n*\n* The JSON payload is always kept on one line, so the frame is\n* `event: <name>\\ndata: <json>\\n\\n`.\n*/\nfunction sseFrame(event, data) {\n\treturn `event: ${event.replace(NEWLINE_PATTERN, \" \").trim()}\\ndata: ${(JSON.stringify(data) ?? \"null\").replace(NEWLINE_PATTERN, \" \")}\\n\\n`;\n}\n//#endregion\n//#region src/lib/server/tail.ts\nvar DEFAULT_SEEN_CAPACITY = 5e3;\nvar DEFAULT_POLL_MS = 1e3;\nvar DEFAULT_LIMIT = 1e3;\nvar DEFAULT_MAX_CONSECUTIVE_ERRORS = 8;\nvar MAX_BACKOFF_MS = 15e3;\n/** Empty polls that end a historic window: CloudWatch can lag behind ingestion. */\nvar DEFAULT_IDLE_POLLS = 2;\n/** Upper bound on events yielded for one historic window. */\nvar DEFAULT_MAX_EVENTS = 1e4;\n/** Returns true when the value is an abort error raised by the fetch/SDK layer. */\nfunction isAbortError(error) {\n\tif (error instanceof Error) return error.name === \"AbortError\" || error.code === \"ABORT_ERR\";\n\treturn false;\n}\n/**\n* Abort-aware sleep used by default.\n*\n* Resolves after `ms`, resolves immediately when the signal aborts and always\n* clears its timer. An injected sleep may instead reject on abort, which\n* {@link tailLogEvents} handles by re-checking the signal.\n*/\nvar defaultSleep = (ms, signal) => new Promise((resolve) => {\n\tif (signal?.aborted === true || !Number.isFinite(ms) || ms <= 0) {\n\t\tresolve();\n\t\treturn;\n\t}\n\tconst onAbort = () => {\n\t\tclearTimeout(timer);\n\t\tresolve();\n\t};\n\tconst timer = setTimeout(() => {\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\tresolve();\n\t}, ms);\n\ttimer.unref?.();\n\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n});\n/**\n* Bounded first-in-first-out set of event ids.\n*\n* Keeps at most `capacity` ids (default 5000) so memory stays flat on long\n* streams. The oldest id is evicted first.\n*/\nvar SeenEventIds = class {\n\tids = /* @__PURE__ */ new Set();\n\tcapacity;\n\tconstructor(capacity = DEFAULT_SEEN_CAPACITY) {\n\t\tconst parsed = Number.isFinite(capacity) ? Math.floor(capacity) : DEFAULT_SEEN_CAPACITY;\n\t\tthis.capacity = parsed > 0 ? parsed : DEFAULT_SEEN_CAPACITY;\n\t}\n\t/** True when the id was recorded before. Null and empty ids are never recorded. */\n\thas(id) {\n\t\treturn id !== null && id.length > 0 && this.ids.has(id);\n\t}\n\t/** Records an id, evicting the oldest entry when the capacity is reached. */\n\tadd(id) {\n\t\tif (id === null || id.length === 0 || this.ids.has(id)) return;\n\t\tif (this.ids.size >= this.capacity) {\n\t\t\tconst oldest = this.ids.values().next();\n\t\t\tif (!oldest.done) this.ids.delete(oldest.value);\n\t\t}\n\t\tthis.ids.add(id);\n\t}\n\t/** Number of ids currently remembered. */\n\tget size() {\n\t\treturn this.ids.size;\n\t}\n};\n/**\n* Converts a poll result into the events worth sending downstream.\n*\n* Drops ids seen in earlier polls and duplicates inside the same batch, then\n* records the ids of the accepted events. Events without an id are always kept\n* and never recorded.\n*/\nfunction selectNewEvents(events, seen) {\n\tconst selected = [];\n\tif (events === void 0 || events.length === 0) return selected;\n\tconst freshIds = /* @__PURE__ */ new Set();\n\tfor (const event of events) {\n\t\tconst id = event.eventId !== void 0 && event.eventId.length > 0 ? event.eventId : null;\n\t\tif (id !== null) {\n\t\t\tif (seen.has(id) || freshIds.has(id)) continue;\n\t\t\tfreshIds.add(id);\n\t\t}\n\t\tconst dto = {\n\t\t\tid,\n\t\t\ttimestamp: typeof event.timestamp === \"number\" ? event.timestamp : 0,\n\t\t\tmessage: event.message ?? \"\"\n\t\t};\n\t\tif (event.logStreamName !== void 0) dto.streamName = event.logStreamName;\n\t\tif (typeof event.ingestionTime === \"number\") dto.ingestionTime = event.ingestionTime;\n\t\tselected.push(dto);\n\t}\n\tfor (const id of freshIds) seen.add(id);\n\treturn selected;\n}\n/** Highest timestamp in `events`, never lower than `previous`. */\nfunction nextCursor(previous, events) {\n\tlet cursor = Number.isFinite(previous) ? previous : 0;\n\tfor (const event of events) if (Number.isFinite(event.timestamp) && event.timestamp > cursor) cursor = event.timestamp;\n\treturn cursor;\n}\n/**\n* Polls `FilterLogEvents` and yields batches as they arrive.\n*\n* `startTime` is inclusive upstream, so the cursor advances to the newest\n* timestamp seen and repeated events are removed by {@link SeenEventIds}.\n* Nothing is new in a poll => sleep `pollIntervalMs`. Errors are yielded as\n* `error` batches and retried with exponential backoff\n* (`pollIntervalMs * 2^consecutiveErrors`, capped at 15000 ms) until\n* `maxConsecutiveErrors` (default 8) failures in a row, then the generator\n* returns. An aborted signal ends the generator without throwing.\n*/\nasync function* tailLogEvents(options) {\n\tconst { client, logGroupName, startTime, pollIntervalMs = DEFAULT_POLL_MS, limit = DEFAULT_LIMIT, filterPattern, signal, sleep = defaultSleep, maxConsecutiveErrors = DEFAULT_MAX_CONSECUTIVE_ERRORS, logStreamNamePrefix, endTime = null, idlePolls = DEFAULT_IDLE_POLLS, maxEvents = DEFAULT_MAX_EVENTS } = options;\n\tconst historic = typeof endTime === \"number\" && Number.isFinite(endTime);\n\tconst windowEnd = historic ? endTime : null;\n\tconst idlePollsAllowed = Number.isFinite(idlePolls) && idlePolls > 0 ? Math.floor(idlePolls) : DEFAULT_IDLE_POLLS;\n\tconst eventCap = Number.isFinite(maxEvents) && maxEvents > 0 ? Math.floor(maxEvents) : DEFAULT_MAX_EVENTS;\n\tconst pollMs = Number.isFinite(pollIntervalMs) && pollIntervalMs > 0 ? Math.min(Math.round(pollIntervalMs), MAX_BACKOFF_MS) : DEFAULT_POLL_MS;\n\tconst pageLimit = Number.isFinite(limit) && limit > 0 ? Math.floor(limit) : DEFAULT_LIMIT;\n\tconst maxErrors = Number.isFinite(maxConsecutiveErrors) && maxConsecutiveErrors > 0 ? Math.floor(maxConsecutiveErrors) : DEFAULT_MAX_CONSECUTIVE_ERRORS;\n\tconst baseInput = {\n\t\tlogGroupName,\n\t\tstartTime,\n\t\tlimit: pageLimit\n\t};\n\tif (windowEnd !== null) baseInput.endTime = windowEnd;\n\tif (filterPattern !== void 0 && filterPattern.length > 0) baseInput.filterPattern = filterPattern;\n\tif (logStreamNamePrefix !== void 0 && logStreamNamePrefix.length > 0) baseInput.logStreamNamePrefix = logStreamNamePrefix;\n\tconst isAborted = () => signal?.aborted === true;\n\tconst wait = async (ms) => {\n\t\tif (isAborted()) return true;\n\t\ttry {\n\t\t\tawait sleep(ms, signal);\n\t\t} catch {}\n\t\treturn isAborted();\n\t};\n\tconst seen = new SeenEventIds();\n\tlet cursor = Number.isFinite(startTime) ? startTime : 0;\n\tlet consecutiveErrors = 0;\n\tlet emitted = 0;\n\tlet emptyPolls = 0;\n\tfor (;;) {\n\t\tif (isAborted()) return;\n\t\ttry {\n\t\t\tconst input = {\n\t\t\t\t...baseInput,\n\t\t\t\tstartTime: cursor\n\t\t\t};\n\t\t\tconst response = await client.send(new FilterLogEventsCommand(input), { abortSignal: signal });\n\t\t\tconsecutiveErrors = 0;\n\t\t\tconst events = selectNewEvents(response.events, seen);\n\t\t\tif (events.length > 0) {\n\t\t\t\temptyPolls = 0;\n\t\t\t\tcursor = nextCursor(cursor, events);\n\t\t\t\temitted += events.length;\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"events\",\n\t\t\t\t\tevents\n\t\t\t\t};\n\t\t\t\tif (historic && emitted >= eventCap) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"end\",\n\t\t\t\t\t\treason: \"event-limit\"\n\t\t\t\t\t};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (windowEnd !== null && cursor >= windowEnd) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"end\",\n\t\t\t\t\t\treason: \"window-complete\"\n\t\t\t\t\t};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (historic) {\n\t\t\t\temptyPolls += 1;\n\t\t\t\tif (emptyPolls >= idlePollsAllowed) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"end\",\n\t\t\t\t\t\treason: \"window-complete\"\n\t\t\t\t\t};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (isAborted() || isAbortError(error)) return;\n\t\t\tconsecutiveErrors += 1;\n\t\t\tconst described = describeAwsError(error);\n\t\t\tyield {\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: described.message,\n\t\t\t\tcode: described.code\n\t\t\t};\n\t\t\tif (consecutiveErrors >= maxErrors) {\n\t\t\t\tif (historic) yield {\n\t\t\t\t\ttype: \"end\",\n\t\t\t\t\treason: \"repeated-errors\"\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (await wait(Math.min(pollMs * 2 ** consecutiveErrors, MAX_BACKOFF_MS))) return;\n\t\t\tcontinue;\n\t\t}\n\t\tif (await wait(pollMs)) return;\n\t}\n}\n//#endregion\n//#region src/routes/api/stream/+server.ts\n/** Send a `ping` after this much silence. */\nvar PING_INTERVAL_MS = 15e3;\n/** Stop the stream after this many consecutive failed polls. */\nvar MAX_CONSECUTIVE_ERRORS = 8;\nvar SSE_HEADERS = {\n\t\"content-type\": \"text/event-stream; charset=utf-8\",\n\t\"cache-control\": \"no-cache, no-transform\",\n\tconnection: \"keep-alive\",\n\t\"x-accel-buffering\": \"no\"\n};\n/**\n* `GET /api/stream` - server-sent events for one log group.\n*\n* Emits `ready` first, then `log` per batch, `ping` after 15 s of silence and\n* a final `end`. The region is optional: without it the tailer uses a client\n* that resolves the region from the ambient AWS configuration. The tailer is\n* cancelled through `request.signal`, and every timer and listener is removed\n* so the dev server can exit.\n*/\nvar GET = async ({ url, request }) => {\n\tconst logGroupName = url.searchParams.get(\"group\")?.trim() ?? \"\";\n\tif (logGroupName.length === 0) return apiError(400, \"Query parameter \\\"group\\\" is required\", \"missing-group\");\n\tconst parsedRegion = parseRegionParam(url.searchParams.get(\"region\"));\n\tif (!parsedRegion.ok) return apiError(400, REGION_PARAM_HINT, \"invalid-region\");\n\tconst env = readEnv();\n\tconst config = resolveAwsConfig(env, parsedRegion.region);\n\tconst filterPattern = url.searchParams.get(\"filterPattern\")?.trim();\n\tconst streamWindow = resolveWindow({\n\t\tmode: url.searchParams.get(\"mode\"),\n\t\trange: url.searchParams.get(\"range\"),\n\t\tfrom: url.searchParams.get(\"from\"),\n\t\tto: url.searchParams.get(\"to\"),\n\t\tstartTime: url.searchParams.get(\"startTime\"),\n\t\tlookback: url.searchParams.get(\"lookback\"),\n\t\tnow: Date.now()\n\t});\n\tif (!streamWindow.ok) return apiError(400, streamWindow.message, streamWindow.code);\n\tconst pollIntervalMs = clampPollMs(url.searchParams.get(\"poll\"));\n\tlet client;\n\tlet region;\n\ttry {\n\t\tclient = createLogsClient(config);\n\t\tregion = await resolveEffectiveRegion(client, config);\n\t} catch (error) {\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t}\n\tconst encoder = new TextEncoder();\n\tconst bodyAbort = new AbortController();\n\tlet streamController;\n\tlet closed = false;\n\tlet pingTimer;\n\tlet cleanedUp = false;\n\tconst clearPing = () => {\n\t\tif (pingTimer !== void 0) {\n\t\t\tclearTimeout(pingTimer);\n\t\t\tpingTimer = void 0;\n\t\t}\n\t};\n\tconst armPing = () => {\n\t\tif (closed) return;\n\t\tclearPing();\n\t\tpingTimer = setTimeout(() => {\n\t\t\tpingTimer = void 0;\n\t\t\tif (closed) return;\n\t\t\tenqueue(sseFrame(\"ping\", { at: Date.now() }), false);\n\t\t\tarmPing();\n\t\t}, PING_INTERVAL_MS);\n\t\tpingTimer.unref?.();\n\t};\n\tconst enqueue = (chunk, rearm = true) => {\n\t\tif (closed || streamController === void 0) return;\n\t\ttry {\n\t\t\tstreamController.enqueue(encoder.encode(chunk));\n\t\t} catch {\n\t\t\tclosed = true;\n\t\t\treturn;\n\t\t}\n\t\tif (rearm) armPing();\n\t};\n\tconst closeStream = () => {\n\t\tclosed = true;\n\t\ttry {\n\t\t\tstreamController?.close();\n\t\t} catch {}\n\t};\n\tconst writeEnd = (reason) => {\n\t\tclearPing();\n\t\tconst payload = { reason };\n\t\ttry {\n\t\t\tstreamController?.enqueue(encoder.encode(sseFrame(\"end\", payload)));\n\t\t} catch {}\n\t\tcloseStream();\n\t};\n\tconst onAbort = () => {\n\t\tbodyAbort.abort();\n\t};\n\tconst cleanup = () => {\n\t\tif (cleanedUp) return;\n\t\tcleanedUp = true;\n\t\tclearPing();\n\t\trequest.signal.removeEventListener(\"abort\", onAbort);\n\t\tclient.destroy();\n\t};\n\tconst pump = async () => {\n\t\tlet consecutiveErrors = 0;\n\t\tlet reason = \"completed\";\n\t\ttry {\n\t\t\tfor await (const batch of tailLogEvents({\n\t\t\t\tclient,\n\t\t\t\tlogGroupName,\n\t\t\t\tstartTime: streamWindow.startTime,\n\t\t\t\tendTime: streamWindow.endTime,\n\t\t\t\tpollIntervalMs,\n\t\t\t\tfilterPattern,\n\t\t\t\tsignal: bodyAbort.signal,\n\t\t\t\tmaxConsecutiveErrors: MAX_CONSECUTIVE_ERRORS\n\t\t\t})) {\n\t\t\t\tif (closed || bodyAbort.signal.aborted) break;\n\t\t\t\tif (batch.type === \"events\") {\n\t\t\t\t\tconst payload = { events: batch.events };\n\t\t\t\t\tconsecutiveErrors = 0;\n\t\t\t\t\tenqueue(sseFrame(\"log\", payload));\n\t\t\t\t} else if (batch.type === \"end\") {\n\t\t\t\t\treason = batch.reason;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tconst payload = { message: batch.message };\n\t\t\t\t\tif (batch.code !== void 0) payload.code = batch.code;\n\t\t\t\t\tconsecutiveErrors += 1;\n\t\t\t\t\tenqueue(sseFrame(\"error\", payload));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (reason === \"completed\") {\n\t\t\t\tif (bodyAbort.signal.aborted) reason = \"client-disconnected\";\n\t\t\t\telse if (consecutiveErrors >= MAX_CONSECUTIVE_ERRORS) reason = \"repeated-errors\";\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst described = describeAwsError(error);\n\t\t\tconst payload = { message: described.message };\n\t\t\tif (described.code !== void 0) payload.code = described.code;\n\t\t\tenqueue(sseFrame(\"error\", payload));\n\t\t\treason = \"failed\";\n\t\t} finally {\n\t\t\tcleanup();\n\t\t}\n\t\twriteEnd(reason);\n\t};\n\trequest.signal.addEventListener(\"abort\", onAbort, { once: true });\n\tconst stream = new ReadableStream({\n\t\tstart(controller) {\n\t\t\tstreamController = controller;\n\t\t\tconst payload = {\n\t\t\t\tregion,\n\t\t\t\tlogGroupName,\n\t\t\t\tendpoint: config.endpoint,\n\t\t\t\tstartTime: streamWindow.startTime,\n\t\t\t\tendTime: streamWindow.endTime,\n\t\t\t\tmode: streamWindow.mode,\n\t\t\t\tpreset: streamWindow.preset,\n\t\t\t\tclamped: streamWindow.clamped\n\t\t\t};\n\t\t\tenqueue(sseFrame(\"ready\", payload));\n\t\t\tarmPing();\n\t\t\tpump();\n\t\t},\n\t\tcancel() {\n\t\t\tbodyAbort.abort();\n\t\t\tclearPing();\n\t\t\tcloseStream();\n\t\t\tcleanup();\n\t\t}\n\t});\n\treturn new Response(stream, { headers: SSE_HEADERS });\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_server.ts.js-CIYo4C-0.js","sources":["../../../../../../../.svelte-kit/output/server/entries/endpoints/api/stream/_server.ts.js"],"sourcesContent":["import { c as resolveAwsConfig, i as createLogsClient, l as resolveEffectiveRegion, o as describeAwsError, r as REGION_PARAM_HINT, s as parseRegionParam, t as readEnv, u as apiError } from \"../../../../chunks/env2.js\";\nimport { a as presetDurationMs, i as isHistoricPreset, t as HISTORIC_PRESETS } from \"../../../../chunks/time-range.js\";\nimport \"@sveltejs/kit\";\nimport { FilterLogEventsCommand } from \"@aws-sdk/client-cloudwatch-logs\";\n//#region src/lib/server/filter.ts\n/** Default lookback window when neither `startTime` nor `lookback` is usable. */\nvar DEFAULT_LOOKBACK_MS = 3e5;\n/** CloudWatch Logs rejects `startTime` older than 14 days. */\nvar MAX_LOOKBACK_MS = 12096e5;\nvar DEFAULT_POLL_MS$1 = 1e3;\nvar MIN_POLL_MS = 250;\nvar MAX_POLL_MS = 15e3;\nvar DURATION_UNITS = {\n\tms: 1,\n\ts: 1e3,\n\tm: 6e4,\n\th: 36e5,\n\td: 864e5,\n\tw: 6048e5\n};\nvar DURATION_PATTERN = /^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h|d|w)$/i;\nvar EPOCH_PATTERN = /^\\d+$/;\n/**\n* Parses a single-unit duration such as `500ms`, `30s`, `15m`, `2h`, `3d` or\n* `1w`. Returns `null` for anything invalid, negative or zero.\n*/\nfunction parseDurationMs(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst match = DURATION_PATTERN.exec(value.trim());\n\tif (match === null) return null;\n\tconst amount = Number(match[1]);\n\tconst unit = DURATION_UNITS[match[2].toLowerCase()];\n\tif (unit === void 0 || !Number.isFinite(amount)) return null;\n\tconst ms = amount * unit;\n\tif (!Number.isFinite(ms) || ms <= 0) return null;\n\treturn Math.round(ms);\n}\n/**\n* Parses a start point into epoch milliseconds.\n*\n* Accepts epoch milliseconds (`1700000000000`), a duration relative to `now`\n* (`15m`) and ISO 8601 timestamps. Returns `null` when the value is missing or\n* cannot be understood.\n*/\nfunction parseStartTime(value, now) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return null;\n\tif (EPOCH_PATTERN.test(trimmed)) return Number(trimmed);\n\tconst duration = parseDurationMs(trimmed);\n\tif (duration !== null) return now - duration;\n\tconst parsed = Date.parse(trimmed);\n\treturn Number.isNaN(parsed) ? null : parsed;\n}\n/** Resolves the effective start time, clamped to the last 14 days and to `now`. */\nfunction resolveStartTime(input) {\n\tconst { now } = input;\n\tlet start = parseStartTime(input.startTime, now);\n\tif (start === null) start = now - (parseDurationMs(input.lookback ?? \"\") ?? DEFAULT_LOOKBACK_MS);\n\tconst oldestAllowed = now - MAX_LOOKBACK_MS;\n\tif (start > now) start = now;\n\tif (start < oldestAllowed) start = oldestAllowed;\n\treturn Math.round(start);\n}\n/** Parses a poll interval in milliseconds, defaulting to 1000 and clamped to 250..15000. */\nfunction clampPollMs(value) {\n\tif (typeof value !== \"string\") return DEFAULT_POLL_MS$1;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return DEFAULT_POLL_MS$1;\n\tconst parsed = Number(trimmed);\n\tif (!Number.isFinite(parsed)) return DEFAULT_POLL_MS$1;\n\treturn Math.min(Math.max(Math.round(parsed), MIN_POLL_MS), MAX_POLL_MS);\n}\n/** Default historic window when neither `range` nor `from`/`to` is given. */\nvar DEFAULT_HISTORIC_PRESET = \"15m\";\n/** Parses the `mode` parameter; `null` for an unrecognised value. */\nfunction parseMode(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim().toLowerCase();\n\tif (trimmed === \"live\" || trimmed === \"historic\") return trimmed;\n\treturn null;\n}\n/**\n* Parses an absolute instant: epoch milliseconds or an ISO 8601 timestamp.\n*\n* Relative durations are deliberately rejected here so an end bound can never\n* move with the clock.\n*/\nfunction parseInstant(value) {\n\tif (typeof value !== \"string\") return null;\n\tconst trimmed = value.trim();\n\tif (trimmed.length === 0) return null;\n\tif (EPOCH_PATTERN.test(trimmed)) return Number(trimmed);\n\tconst parsed = Date.parse(trimmed);\n\treturn Number.isNaN(parsed) ? null : parsed;\n}\n/**\n* Clamps a window to what CloudWatch Logs can return: 14 days back, ending now.\n*\n* Returns `null` when the requested window ends before the retention floor, so\n* a request for month-old data fails loudly instead of returning a stub window.\n*/\nfunction clampWindow(start, end, now) {\n\tconst oldest = now - MAX_LOOKBACK_MS;\n\tif (end <= oldest) return null;\n\tconst clampedStart = Math.min(Math.max(start, oldest), now);\n\tconst clampedEnd = Math.min(Math.max(end, clampedStart + 1), now);\n\treturn {\n\t\tstart: Math.round(clampedStart),\n\t\tend: Math.round(clampedEnd),\n\t\tclamped: clampedStart !== Math.round(start) || clampedEnd !== Math.round(end)\n\t};\n}\n/**\n* Resolves the request window into a start time plus, for historic mode, an end\n* time.\n*\n* Historic windows come from a preset (`range=24h`), from explicit bounds\n* (`from`/`to`, epoch ms or ISO 8601) or, when neither is given, from the\n* smallest preset. Windows are clamped to the last 14 days and to `now` so the\n* request can never ask CloudWatch for data it will not return.\n*/\nfunction resolveWindow(input) {\n\tconst { now } = input;\n\tconst requestedMode = input.mode === null || input.mode === void 0 ? \"live\" : input.mode.trim();\n\tconst mode = requestedMode === \"\" ? \"live\" : parseMode(requestedMode);\n\tif (mode === null) return {\n\t\tok: false,\n\t\tcode: \"invalid-mode\",\n\t\tmessage: \"Invalid mode: expected \\\"live\\\" or \\\"historic\\\"\"\n\t};\n\tif (mode === \"live\") return {\n\t\tok: true,\n\t\tmode,\n\t\tstartTime: resolveStartTime({\n\t\t\tstartTime: input.startTime,\n\t\t\tlookback: input.lookback,\n\t\t\tnow\n\t\t}),\n\t\tendTime: null,\n\t\tpreset: null,\n\t\tclamped: false\n\t};\n\tconst from = input.from?.trim() ?? \"\";\n\tconst to = input.to?.trim() ?? \"\";\n\tif (from.length > 0 || to.length > 0) {\n\t\tif (from.length === 0 || to.length === 0) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-window\",\n\t\t\tmessage: \"A custom window needs both \\\"from\\\" and \\\"to\\\"\"\n\t\t};\n\t\tconst parsedFrom = parseStartTime(from, now);\n\t\tconst parsedTo = parseInstant(to);\n\t\tif (parsedFrom === null) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-time\",\n\t\t\tmessage: `Invalid \"from\": expected epoch milliseconds, a duration such as 3h, or an ISO 8601 timestamp`\n\t\t};\n\t\tif (parsedTo === null) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-time\",\n\t\t\tmessage: \"Invalid \\\"to\\\": expected epoch milliseconds or an ISO 8601 timestamp\"\n\t\t};\n\t\tif (parsedTo <= parsedFrom) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-window\",\n\t\t\tmessage: \"The end of the window must be after its start\"\n\t\t};\n\t\tconst clamped = clampWindow(parsedFrom, parsedTo, now);\n\t\tif (clamped === null || clamped.end <= clamped.start) return {\n\t\t\tok: false,\n\t\t\tcode: \"invalid-window\",\n\t\t\tmessage: \"The requested window is outside the 14 days CloudWatch Logs keeps\"\n\t\t};\n\t\treturn {\n\t\t\tok: true,\n\t\t\tmode,\n\t\t\tstartTime: clamped.start,\n\t\t\tendTime: clamped.end,\n\t\t\tpreset: null,\n\t\t\tclamped: clamped.clamped\n\t\t};\n\t}\n\tconst requestedRange = input.range?.trim() ?? \"\";\n\tconst preset = requestedRange === \"\" ? DEFAULT_HISTORIC_PRESET : isHistoricPreset(requestedRange) ? requestedRange : null;\n\tif (preset === null) return {\n\t\tok: false,\n\t\tcode: \"invalid-range\",\n\t\tmessage: `Invalid range: expected one of ${HISTORIC_PRESETS.join(\", \")} or an explicit from/to window`\n\t};\n\tconst end = Math.round(now);\n\treturn {\n\t\tok: true,\n\t\tmode,\n\t\tstartTime: Math.round(now - presetDurationMs(preset)),\n\t\tendTime: end,\n\t\tpreset,\n\t\tclamped: false\n\t};\n}\n//#endregion\n//#region src/lib/server/sse.ts\nvar NEWLINE_PATTERN = /\\r?\\n/g;\n/**\n* Encodes a single server-sent event frame.\n*\n* The JSON payload is always kept on one line, so the frame is\n* `event: <name>\\ndata: <json>\\n\\n`.\n*/\nfunction sseFrame(event, data) {\n\treturn `event: ${event.replace(NEWLINE_PATTERN, \" \").trim()}\\ndata: ${(JSON.stringify(data) ?? \"null\").replace(NEWLINE_PATTERN, \" \")}\\n\\n`;\n}\n//#endregion\n//#region src/lib/server/tail.ts\nvar DEFAULT_SEEN_CAPACITY = 5e3;\nvar DEFAULT_POLL_MS = 1e3;\nvar DEFAULT_LIMIT = 1e3;\nvar DEFAULT_MAX_CONSECUTIVE_ERRORS = 8;\nvar MAX_BACKOFF_MS = 15e3;\n/** Empty polls that end a historic window: CloudWatch can lag behind ingestion. */\nvar DEFAULT_IDLE_POLLS = 2;\n/** Upper bound on events yielded for one historic window. */\nvar DEFAULT_MAX_EVENTS = 1e4;\n/** Returns true when the value is an abort error raised by the fetch/SDK layer. */\nfunction isAbortError(error) {\n\tif (error instanceof Error) return error.name === \"AbortError\" || error.code === \"ABORT_ERR\";\n\treturn false;\n}\n/**\n* Abort-aware sleep used by default.\n*\n* Resolves after `ms`, resolves immediately when the signal aborts and always\n* clears its timer. An injected sleep may instead reject on abort, which\n* {@link tailLogEvents} handles by re-checking the signal.\n*/\nvar defaultSleep = (ms, signal) => new Promise((resolve) => {\n\tif (signal?.aborted === true || !Number.isFinite(ms) || ms <= 0) {\n\t\tresolve();\n\t\treturn;\n\t}\n\tconst onAbort = () => {\n\t\tclearTimeout(timer);\n\t\tresolve();\n\t};\n\tconst timer = setTimeout(() => {\n\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\tresolve();\n\t}, ms);\n\ttimer.unref?.();\n\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n});\n/**\n* Bounded first-in-first-out set of event ids.\n*\n* Keeps at most `capacity` ids (default 5000) so memory stays flat on long\n* streams. The oldest id is evicted first.\n*/\nvar SeenEventIds = class {\n\tids = /* @__PURE__ */ new Set();\n\tcapacity;\n\tconstructor(capacity = DEFAULT_SEEN_CAPACITY) {\n\t\tconst parsed = Number.isFinite(capacity) ? Math.floor(capacity) : DEFAULT_SEEN_CAPACITY;\n\t\tthis.capacity = parsed > 0 ? parsed : DEFAULT_SEEN_CAPACITY;\n\t}\n\t/** True when the id was recorded before. Null and empty ids are never recorded. */\n\thas(id) {\n\t\treturn id !== null && id.length > 0 && this.ids.has(id);\n\t}\n\t/** Records an id, evicting the oldest entry when the capacity is reached. */\n\tadd(id) {\n\t\tif (id === null || id.length === 0 || this.ids.has(id)) return;\n\t\tif (this.ids.size >= this.capacity) {\n\t\t\tconst oldest = this.ids.values().next();\n\t\t\tif (!oldest.done) this.ids.delete(oldest.value);\n\t\t}\n\t\tthis.ids.add(id);\n\t}\n\t/** Number of ids currently remembered. */\n\tget size() {\n\t\treturn this.ids.size;\n\t}\n};\n/**\n* Converts a poll result into the events worth sending downstream.\n*\n* Drops ids seen in earlier polls and duplicates inside the same batch, then\n* records the ids of the accepted events. Events without an id are always kept\n* and never recorded.\n*/\nfunction selectNewEvents(events, seen) {\n\tconst selected = [];\n\tif (events === void 0 || events.length === 0) return selected;\n\tconst freshIds = /* @__PURE__ */ new Set();\n\tfor (const event of events) {\n\t\tconst id = event.eventId !== void 0 && event.eventId.length > 0 ? event.eventId : null;\n\t\tif (id !== null) {\n\t\t\tif (seen.has(id) || freshIds.has(id)) continue;\n\t\t\tfreshIds.add(id);\n\t\t}\n\t\tconst dto = {\n\t\t\tid,\n\t\t\ttimestamp: typeof event.timestamp === \"number\" ? event.timestamp : 0,\n\t\t\tmessage: event.message ?? \"\"\n\t\t};\n\t\tif (event.logStreamName !== void 0) dto.streamName = event.logStreamName;\n\t\tif (typeof event.ingestionTime === \"number\") dto.ingestionTime = event.ingestionTime;\n\t\tselected.push(dto);\n\t}\n\tfor (const id of freshIds) seen.add(id);\n\treturn selected;\n}\n/** Highest timestamp in `events`, never lower than `previous`. */\nfunction nextCursor(previous, events) {\n\tlet cursor = Number.isFinite(previous) ? previous : 0;\n\tfor (const event of events) if (Number.isFinite(event.timestamp) && event.timestamp > cursor) cursor = event.timestamp;\n\treturn cursor;\n}\n/**\n* Polls `FilterLogEvents` and yields batches as they arrive.\n*\n* `startTime` is inclusive upstream, so the cursor advances to the newest\n* timestamp seen and repeated events are removed by {@link SeenEventIds}.\n* Nothing is new in a poll => sleep `pollIntervalMs`. Errors are yielded as\n* `error` batches and retried with exponential backoff\n* (`pollIntervalMs * 2^consecutiveErrors`, capped at 15000 ms) until\n* `maxConsecutiveErrors` (default 8) failures in a row, then the generator\n* returns. An aborted signal ends the generator without throwing.\n*/\nasync function* tailLogEvents(options) {\n\tconst { client, logGroupName, startTime, pollIntervalMs = DEFAULT_POLL_MS, limit = DEFAULT_LIMIT, filterPattern, signal, sleep = defaultSleep, maxConsecutiveErrors = DEFAULT_MAX_CONSECUTIVE_ERRORS, logStreamNamePrefix, endTime = null, idlePolls = DEFAULT_IDLE_POLLS, maxEvents = DEFAULT_MAX_EVENTS } = options;\n\tconst historic = typeof endTime === \"number\" && Number.isFinite(endTime);\n\tconst windowEnd = historic ? endTime : null;\n\tconst idlePollsAllowed = Number.isFinite(idlePolls) && idlePolls > 0 ? Math.floor(idlePolls) : DEFAULT_IDLE_POLLS;\n\tconst eventCap = Number.isFinite(maxEvents) && maxEvents > 0 ? Math.floor(maxEvents) : DEFAULT_MAX_EVENTS;\n\tconst pollMs = Number.isFinite(pollIntervalMs) && pollIntervalMs > 0 ? Math.min(Math.round(pollIntervalMs), MAX_BACKOFF_MS) : DEFAULT_POLL_MS;\n\tconst pageLimit = Number.isFinite(limit) && limit > 0 ? Math.floor(limit) : DEFAULT_LIMIT;\n\tconst maxErrors = Number.isFinite(maxConsecutiveErrors) && maxConsecutiveErrors > 0 ? Math.floor(maxConsecutiveErrors) : DEFAULT_MAX_CONSECUTIVE_ERRORS;\n\tconst baseInput = {\n\t\tlogGroupName,\n\t\tstartTime,\n\t\tlimit: pageLimit\n\t};\n\tif (windowEnd !== null) baseInput.endTime = windowEnd;\n\tif (filterPattern !== void 0 && filterPattern.length > 0) baseInput.filterPattern = filterPattern;\n\tif (logStreamNamePrefix !== void 0 && logStreamNamePrefix.length > 0) baseInput.logStreamNamePrefix = logStreamNamePrefix;\n\tconst isAborted = () => signal?.aborted === true;\n\tconst wait = async (ms) => {\n\t\tif (isAborted()) return true;\n\t\ttry {\n\t\t\tawait sleep(ms, signal);\n\t\t} catch {}\n\t\treturn isAborted();\n\t};\n\tconst seen = new SeenEventIds();\n\tlet cursor = Number.isFinite(startTime) ? startTime : 0;\n\tlet consecutiveErrors = 0;\n\tlet emitted = 0;\n\tlet emptyPolls = 0;\n\tfor (;;) {\n\t\tif (isAborted()) return;\n\t\ttry {\n\t\t\tconst input = {\n\t\t\t\t...baseInput,\n\t\t\t\tstartTime: cursor\n\t\t\t};\n\t\t\tconst response = await client.send(new FilterLogEventsCommand(input), { abortSignal: signal });\n\t\t\tconsecutiveErrors = 0;\n\t\t\tconst events = selectNewEvents(response.events, seen);\n\t\t\tif (events.length > 0) {\n\t\t\t\temptyPolls = 0;\n\t\t\t\tcursor = nextCursor(cursor, events);\n\t\t\t\temitted += events.length;\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"events\",\n\t\t\t\t\tevents\n\t\t\t\t};\n\t\t\t\tif (historic && emitted >= eventCap) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"end\",\n\t\t\t\t\t\treason: \"event-limit\"\n\t\t\t\t\t};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (windowEnd !== null && cursor >= windowEnd) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"end\",\n\t\t\t\t\t\treason: \"window-complete\"\n\t\t\t\t\t};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (historic) {\n\t\t\t\temptyPolls += 1;\n\t\t\t\tif (emptyPolls >= idlePollsAllowed) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"end\",\n\t\t\t\t\t\treason: \"window-complete\"\n\t\t\t\t\t};\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (isAborted() || isAbortError(error)) return;\n\t\t\tconsecutiveErrors += 1;\n\t\t\tconst described = describeAwsError(error);\n\t\t\tyield {\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: described.message,\n\t\t\t\tcode: described.code\n\t\t\t};\n\t\t\tif (consecutiveErrors >= maxErrors) {\n\t\t\t\tif (historic) yield {\n\t\t\t\t\ttype: \"end\",\n\t\t\t\t\treason: \"repeated-errors\"\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (await wait(Math.min(pollMs * 2 ** consecutiveErrors, MAX_BACKOFF_MS))) return;\n\t\t\tcontinue;\n\t\t}\n\t\tif (await wait(pollMs)) return;\n\t}\n}\n//#endregion\n//#region src/routes/api/stream/+server.ts\n/** Send a `ping` after this much silence. */\nvar PING_INTERVAL_MS = 15e3;\n/** Stop the stream after this many consecutive failed polls. */\nvar MAX_CONSECUTIVE_ERRORS = 8;\nvar SSE_HEADERS = {\n\t\"content-type\": \"text/event-stream; charset=utf-8\",\n\t\"cache-control\": \"no-cache, no-transform\",\n\tconnection: \"keep-alive\",\n\t\"x-accel-buffering\": \"no\"\n};\n/**\n* `GET /api/stream` - server-sent events for one log group.\n*\n* Emits `ready` first, then `log` per batch, `ping` after 15 s of silence and\n* a final `end`. The region is optional: without it the tailer uses a client\n* that resolves the region from the ambient AWS configuration. The tailer is\n* cancelled through `request.signal`, and every timer and listener is removed\n* so the dev server can exit.\n*/\nvar GET = async ({ url, request }) => {\n\tconst logGroupName = url.searchParams.get(\"group\")?.trim() ?? \"\";\n\tif (logGroupName.length === 0) return apiError(400, \"Query parameter \\\"group\\\" is required\", \"missing-group\");\n\tconst parsedRegion = parseRegionParam(url.searchParams.get(\"region\"));\n\tif (!parsedRegion.ok) return apiError(400, REGION_PARAM_HINT, \"invalid-region\");\n\tconst env = readEnv();\n\tconst config = resolveAwsConfig(env, parsedRegion.region);\n\tconst filterPattern = url.searchParams.get(\"filterPattern\")?.trim();\n\tconst streamWindow = resolveWindow({\n\t\tmode: url.searchParams.get(\"mode\"),\n\t\trange: url.searchParams.get(\"range\"),\n\t\tfrom: url.searchParams.get(\"from\"),\n\t\tto: url.searchParams.get(\"to\"),\n\t\tstartTime: url.searchParams.get(\"startTime\"),\n\t\tlookback: url.searchParams.get(\"lookback\"),\n\t\tnow: Date.now()\n\t});\n\tif (!streamWindow.ok) return apiError(400, streamWindow.message, streamWindow.code);\n\tconst pollIntervalMs = clampPollMs(url.searchParams.get(\"poll\"));\n\tlet client;\n\tlet region;\n\ttry {\n\t\tclient = createLogsClient(config);\n\t\tregion = await resolveEffectiveRegion(client, config);\n\t} catch (error) {\n\t\tconst described = describeAwsError(error);\n\t\treturn apiError(502, described.message, described.code);\n\t}\n\tconst encoder = new TextEncoder();\n\tconst bodyAbort = new AbortController();\n\tlet streamController;\n\tlet closed = false;\n\tlet pingTimer;\n\tlet cleanedUp = false;\n\tconst clearPing = () => {\n\t\tif (pingTimer !== void 0) {\n\t\t\tclearTimeout(pingTimer);\n\t\t\tpingTimer = void 0;\n\t\t}\n\t};\n\tconst armPing = () => {\n\t\tif (closed) return;\n\t\tclearPing();\n\t\tpingTimer = setTimeout(() => {\n\t\t\tpingTimer = void 0;\n\t\t\tif (closed) return;\n\t\t\tenqueue(sseFrame(\"ping\", { at: Date.now() }), false);\n\t\t\tarmPing();\n\t\t}, PING_INTERVAL_MS);\n\t\tpingTimer.unref?.();\n\t};\n\tconst enqueue = (chunk, rearm = true) => {\n\t\tif (closed || streamController === void 0) return;\n\t\ttry {\n\t\t\tstreamController.enqueue(encoder.encode(chunk));\n\t\t} catch {\n\t\t\tclosed = true;\n\t\t\treturn;\n\t\t}\n\t\tif (rearm) armPing();\n\t};\n\tconst closeStream = () => {\n\t\tclosed = true;\n\t\ttry {\n\t\t\tstreamController?.close();\n\t\t} catch {}\n\t};\n\tconst writeEnd = (reason) => {\n\t\tclearPing();\n\t\tconst payload = { reason };\n\t\ttry {\n\t\t\tstreamController?.enqueue(encoder.encode(sseFrame(\"end\", payload)));\n\t\t} catch {}\n\t\tcloseStream();\n\t};\n\tconst onAbort = () => {\n\t\tbodyAbort.abort();\n\t};\n\tconst cleanup = () => {\n\t\tif (cleanedUp) return;\n\t\tcleanedUp = true;\n\t\tclearPing();\n\t\trequest.signal.removeEventListener(\"abort\", onAbort);\n\t\tclient.destroy();\n\t};\n\tconst pump = async () => {\n\t\tlet consecutiveErrors = 0;\n\t\tlet reason = \"completed\";\n\t\ttry {\n\t\t\tfor await (const batch of tailLogEvents({\n\t\t\t\tclient,\n\t\t\t\tlogGroupName,\n\t\t\t\tstartTime: streamWindow.startTime,\n\t\t\t\tendTime: streamWindow.endTime,\n\t\t\t\tpollIntervalMs,\n\t\t\t\tfilterPattern,\n\t\t\t\tsignal: bodyAbort.signal,\n\t\t\t\tmaxConsecutiveErrors: MAX_CONSECUTIVE_ERRORS\n\t\t\t})) {\n\t\t\t\tif (closed || bodyAbort.signal.aborted) break;\n\t\t\t\tif (batch.type === \"events\") {\n\t\t\t\t\tconst payload = { events: batch.events };\n\t\t\t\t\tconsecutiveErrors = 0;\n\t\t\t\t\tenqueue(sseFrame(\"log\", payload));\n\t\t\t\t} else if (batch.type === \"end\") {\n\t\t\t\t\treason = batch.reason;\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tconst payload = { message: batch.message };\n\t\t\t\t\tif (batch.code !== void 0) payload.code = batch.code;\n\t\t\t\t\tconsecutiveErrors += 1;\n\t\t\t\t\tenqueue(sseFrame(\"error\", payload));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (reason === \"completed\") {\n\t\t\t\tif (bodyAbort.signal.aborted) reason = \"client-disconnected\";\n\t\t\t\telse if (consecutiveErrors >= MAX_CONSECUTIVE_ERRORS) reason = \"repeated-errors\";\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst described = describeAwsError(error);\n\t\t\tconst payload = { message: described.message };\n\t\t\tif (described.code !== void 0) payload.code = described.code;\n\t\t\tenqueue(sseFrame(\"error\", payload));\n\t\t\treason = \"failed\";\n\t\t} finally {\n\t\t\tcleanup();\n\t\t}\n\t\twriteEnd(reason);\n\t};\n\trequest.signal.addEventListener(\"abort\", onAbort, { once: true });\n\tconst stream = new ReadableStream({\n\t\tstart(controller) {\n\t\t\tstreamController = controller;\n\t\t\tconst payload = {\n\t\t\t\tregion,\n\t\t\t\tlogGroupName,\n\t\t\t\tendpoint: config.endpoint,\n\t\t\t\tstartTime: streamWindow.startTime,\n\t\t\t\tendTime: streamWindow.endTime,\n\t\t\t\tmode: streamWindow.mode,\n\t\t\t\tpreset: streamWindow.preset,\n\t\t\t\tclamped: streamWindow.clamped\n\t\t\t};\n\t\t\tenqueue(sseFrame(\"ready\", payload));\n\t\t\tarmPing();\n\t\t\tpump();\n\t\t},\n\t\tcancel() {\n\t\t\tbodyAbort.abort();\n\t\t\tclearPing();\n\t\t\tcloseStream();\n\t\t\tcleanup();\n\t\t}\n\t});\n\treturn new Response(stream, { headers: SSE_HEADERS });\n};\n//#endregion\nexport { GET };\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { ah as escape_html } from '../../chunks/server.js-ByNB8uti.js';
2
- import { p as page } from '../../chunks/state.js-V2NYGhy_.js';
2
+ import { p as page } from '../../chunks/state.js-9DxsWxU-.js';
3
3
  import '../../chunks/uneval.js-DaakSYFQ.js';
4
- import '../../chunks/internal.js-B-DZpK-L.js';
4
+ import '../../chunks/internal.js-Cc3oBhL-.js';
5
5
  import '../../chunks/shared.js-CgjUIvRK.js';
6
6
  import '../../chunks/exports.js-CvFPPbaH.js';
7
7
  import '../../chunks/utils.js-BIlHjgGW.js';
@@ -14,4 +14,4 @@ function Error($$renderer, $$props) {
14
14
  }
15
15
 
16
16
  export { Error as default };
17
- //# sourceMappingURL=error.svelte.js-CAasf3PF.js.map
17
+ //# sourceMappingURL=error.svelte.js-CFonuZkV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.svelte.js-CAasf3PF.js","sources":["../../../../../.svelte-kit/output/server/entries/fallbacks/error.svelte.js"],"sourcesContent":["import { x as escape_html } from \"../../chunks/server.js\";\nimport { t as page } from \"../../chunks/state.js\";\n//#region node_modules/.pnpm/@sveltejs+kit@2.70.3_@sveltejs+vite-plugin-svelte@7.3.0_svelte@5.57.0_vite@8.2.2_@types_ab6e39593f61aae0ad0b9a1bac6935c7/node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte\nfunction Error($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t$$renderer.push(`<h1>${escape_html(page.status)}</h1> <p>${escape_html(page.error?.message)}</p>`);\n\t});\n}\n//#endregion\nexport { Error as default };\n"],"names":[],"mappings":";;;;;;;;AAEA;AACA,SAAS,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE;AACpC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,KAAK;AACtC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;AACpG,CAAC,CAAC,CAAC;AACH;;"}
1
+ {"version":3,"file":"error.svelte.js-CFonuZkV.js","sources":["../../../../../.svelte-kit/output/server/entries/fallbacks/error.svelte.js"],"sourcesContent":["import { x as escape_html } from \"../../chunks/server.js\";\nimport { t as page } from \"../../chunks/state.js\";\n//#region node_modules/.pnpm/@sveltejs+kit@2.70.3_@sveltejs+vite-plugin-svelte@7.3.0_svelte@5.57.0_vite@8.2.2_@types_ab6e39593f61aae0ad0b9a1bac6935c7/node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte\nfunction Error($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t$$renderer.push(`<h1>${escape_html(page.status)}</h1> <p>${escape_html(page.error?.message)}</p>`);\n\t});\n}\n//#endregion\nexport { Error as default };\n"],"names":[],"mappings":";;;;;;;;AAEA;AACA,SAAS,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE;AACpC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,KAAK;AACtC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;AACpG,CAAC,CAAC,CAAC;AACH;;"}
@@ -0,0 +1,22 @@
1
+ import { af as head, ag as attr } from '../../chunks/server.js-ByNB8uti.js';
2
+ import '../../chunks/uneval.js-DaakSYFQ.js';
3
+
4
+ //#region src/lib/assets/favicon.svg
5
+ var favicon_default = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%20role='img'%20aria-label='watch-tail'%3e%3ctitle%3ewatch-tail%3c/title%3e%3c!--%20A%20log%20window:%20three%20lines,%20the%20newest%20highlighted,%20with%20the%20tail%20still%20running.%20--%3e%3crect%20width='32'%20height='32'%20rx='7'%20fill='%230a0a0a'%20/%3e%3crect%20x='5'%20y='6.6'%20width='14'%20height='4'%20rx='2'%20fill='%2338bdf8'%20/%3e%3crect%20x='5'%20y='14'%20width='22'%20height='4'%20rx='2'%20fill='%23525252'%20/%3e%3crect%20x='5'%20y='21.4'%20width='17'%20height='4'%20rx='2'%20fill='%23404040'%20/%3e%3ccircle%20cx='25.6'%20cy='8.6'%20r='2.8'%20fill='%2338bdf8'%20/%3e%3c/svg%3e";
6
+ //#endregion
7
+ //#region src/routes/+layout.svelte
8
+ function _layout($$renderer, $$props) {
9
+ let { children } = $$props;
10
+ head("12qhfyh", $$renderer, ($$renderer) => {
11
+ $$renderer.title(($$renderer) => {
12
+ $$renderer.push(`<title>watch-stream</title>`);
13
+ });
14
+ $$renderer.push(`<link rel="icon"${attr("href", favicon_default)}/>`);
15
+ });
16
+ $$renderer.push(`<div class="flex h-dvh min-h-[30rem] flex-col overflow-hidden bg-neutral-950 font-sans text-neutral-100 antialiased selection:bg-sky-900/60"><header class="flex-none border-b border-neutral-900 bg-neutral-950/90"><div class="flex w-full items-baseline gap-3 px-3 py-2 sm:px-4"><span class="text-sm font-semibold tracking-tight">watch<span class="text-sky-400">-stream</span></span> <span class="hidden text-xs text-neutral-500 sm:inline">Tail CloudWatch Logs in the browser</span></div></header> <main class="flex min-h-0 w-full flex-1 flex-col gap-3 px-3 py-3 sm:px-4">`);
17
+ children($$renderer);
18
+ $$renderer.push(`<!----></main></div>`);
19
+ }
20
+
21
+ export { _layout as default };
22
+ //# sourceMappingURL=_layout.svelte.js-Dzluuq12.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_layout.svelte.js-Dzluuq12.js","sources":["../../../../../.svelte-kit/output/server/entries/pages/_layout.svelte.js"],"sourcesContent":["import { a as head, y as attr } from \"../../chunks/server.js\";\n//#region src/lib/assets/favicon.svg\nvar favicon_default = \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%20role='img'%20aria-label='watch-tail'%3e%3ctitle%3ewatch-tail%3c/title%3e%3c!--%20A%20log%20window:%20three%20lines,%20the%20newest%20highlighted,%20with%20the%20tail%20still%20running.%20--%3e%3crect%20width='32'%20height='32'%20rx='7'%20fill='%230a0a0a'%20/%3e%3crect%20x='5'%20y='6.6'%20width='14'%20height='4'%20rx='2'%20fill='%2338bdf8'%20/%3e%3crect%20x='5'%20y='14'%20width='22'%20height='4'%20rx='2'%20fill='%23525252'%20/%3e%3crect%20x='5'%20y='21.4'%20width='17'%20height='4'%20rx='2'%20fill='%23404040'%20/%3e%3ccircle%20cx='25.6'%20cy='8.6'%20r='2.8'%20fill='%2338bdf8'%20/%3e%3c/svg%3e\";\n//#endregion\n//#region src/routes/+layout.svelte\nfunction _layout($$renderer, $$props) {\n\tlet { children } = $$props;\n\thead(\"12qhfyh\", $$renderer, ($$renderer) => {\n\t\t$$renderer.title(($$renderer) => {\n\t\t\t$$renderer.push(`<title>watch-stream</title>`);\n\t\t});\n\t\t$$renderer.push(`<link rel=\"icon\"${attr(\"href\", favicon_default)}/>`);\n\t});\n\t$$renderer.push(`<div class=\"flex h-dvh min-h-[30rem] flex-col overflow-hidden bg-neutral-950 font-sans text-neutral-100 antialiased selection:bg-sky-900/60\"><header class=\"flex-none border-b border-neutral-900 bg-neutral-950/90\"><div class=\"flex w-full items-baseline gap-3 px-3 py-2 sm:px-4\"><span class=\"text-sm font-semibold tracking-tight\">watch<span class=\"text-sky-400\">-stream</span></span> <span class=\"hidden text-xs text-neutral-500 sm:inline\">Tail CloudWatch Logs in the browser</span></div></header> <main class=\"flex min-h-0 w-full flex-1 flex-col gap-3 px-3 py-3 sm:px-4\">`);\n\tchildren($$renderer);\n\t$$renderer.push(`<!----></main></div>`);\n}\n//#endregion\nexport { _layout as default };\n"],"names":[],"mappings":";;;AACA;AACA,IAAI,eAAe,GAAG,orBAAorB;AAC1sB;AACA;AACA,SAAS,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE;AACtC,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO;AAC3B,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,UAAU,KAAK;AAC7C,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK;AACnC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC,CAAC;AACjD,EAAE,CAAC,CAAC;AACJ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AACH,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,0jBAA0jB,CAAC,CAAC;AAC9kB,CAAC,QAAQ,CAAC,UAAU,CAAC;AACrB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC;AACxC;;"}
@@ -1,8 +1,8 @@
1
- import '../../chunks/internal.js-B-DZpK-L.js';
1
+ import '../../chunks/internal.js-Cc3oBhL-.js';
2
2
  import { ah as escape_html, ai as attr_style, P as derived, ag as attr, aj as attr_class, ak as ensure_array_like, al as stringify, am as clsx } from '../../chunks/server.js-ByNB8uti.js';
3
3
  import { R as REGION_CODES } from '../../chunks/regions.js-IQPMyP5C.js';
4
4
  import { P as PRESET_LABELS, a as presetLabel, H as HISTORIC_PRESETS, t as toDateTimeLocal, d as describeWindow } from '../../chunks/time-range.js-BLMT8aU3.js';
5
- import { p as page, r as replaceState } from '../../chunks/state.js-V2NYGhy_.js';
5
+ import { p as page, r as replaceState } from '../../chunks/state.js-9DxsWxU-.js';
6
6
  import '../../chunks/uneval.js-DaakSYFQ.js';
7
7
  import '../../chunks/shared.js-CgjUIvRK.js';
8
8
  import '../../chunks/exports.js-CvFPPbaH.js';
@@ -729,12 +729,17 @@ function LogViewer($$renderer, $$props) {
729
729
  let jsonView = true;
730
730
  let prefixPx = PREFIX_DEFAULT_PX;
731
731
  /** One rendered row, pre-formatted so the template stays declarative. */
732
+ /**
733
+ * Payload found inside the raw line, used when pretty-printing is off and
734
+ * the row is expanded. `null` when the line carries no JSON.
735
+ */
732
736
  /** Lines matching the client-side filter. */
733
737
  let visible = derived(() => filterEvents(lines, filter));
734
738
  /** Presentation rows for the visible lines. */
735
739
  let rows = derived(() => visible().map((event, index) => {
736
740
  const level = detectLevel(event.message);
737
741
  const formatted = formatLogMessage(event.message, { prettyJson: jsonView });
742
+ const levelClass = levelColorClass(level);
738
743
  return {
739
744
  key: eventKey(event, index),
740
745
  time: formatTime(event.timestamp),
@@ -742,8 +747,9 @@ function LogViewer($$renderer, $$props) {
742
747
  streamName: event.streamName,
743
748
  message: formatted.text,
744
749
  tokens: formatted.isJson ? tokenizeJson(formatted.text) : null,
750
+ expandable: null,
745
751
  level,
746
- levelClass: levelColorClass(level)
752
+ levelClass
747
753
  };
748
754
  }));
749
755
  /** Keeps the newest line in view while auto-scroll is on (vertical only). */
@@ -769,6 +775,12 @@ function LogViewer($$renderer, $$props) {
769
775
  let handleLeft = derived(() => ROW_PADDING_PX + TIMESTAMP_COLUMN_PX + ROW_GAP_PX + prefixPx);
770
776
  /** Prefix column width as a CSS length. */
771
777
  let prefixStyle = derived(() => `max-width: ${pxToRem(prefixPx)}`);
778
+ /** Rows the user has opened, keyed by row key. */
779
+ let expandedRows = {};
780
+ /** True when a row is open. */
781
+ function isExpanded(key) {
782
+ return expandedRows[key] === true;
783
+ }
772
784
  /** Colour for a JSON token, keeping punctuation and whitespace quiet. */
773
785
  function tokenClass(type) {
774
786
  switch (type) {
@@ -799,7 +811,7 @@ function LogViewer($$renderer, $$props) {
799
811
  $$renderer.push(`<!--]--> `);
800
812
  if (windowComplete()) $$renderer.push(`<!--[0--><span class="text-[0.6875rem] text-emerald-400/80" data-testid="window-complete">window complete</span>`);
801
813
  else $$renderer.push("<!--[-1-->");
802
- $$renderer.push(`<!--]--> <div class="ml-auto flex flex-wrap items-center gap-2"><input type="search" aria-label="Filter log lines" placeholder="Filter lines"${attr("value", filter)} class="w-40 rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs text-neutral-100 outline-none transition-colors placeholder:text-neutral-600 hover:border-neutral-700 focus:border-sky-600"/> <button type="button"${attr("aria-pressed", wrapLines)} title="Wrap long lines instead of scrolling sideways" data-testid="wrap-toggle"${attr_class(`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${wrapTone()}`)}>Wrap</button> <button type="button"${attr("aria-pressed", jsonView)} title="Pretty-print JSON log entries" data-testid="json-toggle"${attr_class(`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${jsonTone()}`)}>JSON</button> <button type="button"${attr("aria-pressed", paused)} class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100">${escape_html(paused ? "Resume" : "Pause")}</button> <button type="button" class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100">Clear</button> <button type="button"${attr("aria-pressed", autoScroll)}${attr_class(`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${autoScrollTone()}`)}>Auto-scroll</button></div></div> `);
814
+ $$renderer.push(`<!--]--> <div class="ml-auto flex flex-wrap items-center gap-2"><input type="search" aria-label="Filter log lines" placeholder="Filter lines"${attr("value", filter)} class="w-40 rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs text-neutral-100 outline-none transition-colors placeholder:text-neutral-600 hover:border-neutral-700 focus:border-sky-600"/> <button type="button"${attr("aria-pressed", wrapLines)} title="Wrap long lines instead of scrolling sideways" data-testid="wrap-toggle"${attr_class(`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${wrapTone()}`)}>Wrap</button> <button type="button"${attr("aria-pressed", jsonView)} title="Pretty-print JSON log entries (off: click a line to open its JSON)" data-testid="json-toggle"${attr_class(`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${jsonTone()}`)}>JSON</button> <button type="button"${attr("aria-pressed", paused)} class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100">${escape_html(paused ? "Resume" : "Pause")}</button> <button type="button" class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100">Clear</button> <button type="button"${attr("aria-pressed", autoScroll)}${attr_class(`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${autoScrollTone()}`)}>Auto-scroll</button></div></div> `);
803
815
  if (errorText() !== null) $$renderer.push(`<!--[0--><p role="alert" data-testid="stream-error" class="border-b border-red-900 bg-red-950/50 px-3 py-2 text-xs leading-5 text-red-300">${escape_html(errorText())}</p>`);
804
816
  else $$renderer.push("<!--[-1-->");
805
817
  $$renderer.push(`<!--]--> <div class="min-h-0 min-w-0 flex-1 overflow-auto bg-neutral-950" data-testid="log-scroller">`);
@@ -808,9 +820,14 @@ function LogViewer($$renderer, $$props) {
808
820
  else {
809
821
  $$renderer.push(`<!--[-1--><div${attr_class(`relative min-h-full ${listClass()}`)} data-testid="log-canvas"><ol class="font-mono text-xs leading-5" data-testid="log-lines"><!--[-->`);
810
822
  const each_array = ensure_array_like(rows());
811
- for (let $$index_1 = 0, $$length = each_array.length; $$index_1 < $$length; $$index_1++) {
812
- let row = each_array[$$index_1];
813
- $$renderer.push(`<li${attr_class(`flex items-baseline gap-2 px-3 py-0.5 hover:bg-neutral-900/60 ${listClass()}`)} data-testid="log-line"${attr("data-level", row.level)}><span class="w-[7.5rem] shrink-0 text-neutral-500"${attr("title", row.timestamp)}>${escape_html(row.time)}</span> <span class="shrink-0 truncate text-sky-400/80"${attr_style(prefixStyle())}${attr("title", row.streamName ?? "")} data-testid="log-stream">${escape_html(row.streamName ?? "")}</span> <span${attr_class(`${messageClass()} ${stringify(row.levelClass)}`)} data-testid="log-message">`);
823
+ for (let $$index_2 = 0, $$length = each_array.length; $$index_2 < $$length; $$index_2++) {
824
+ let row = each_array[$$index_2];
825
+ const expandable = row.expandable !== null;
826
+ const open = expandable && isExpanded(row.key);
827
+ $$renderer.push(`<li${attr_class(`flex flex-wrap items-baseline gap-2 px-3 py-0.5 hover:bg-neutral-900/60 ${listClass()} ${expandable ? "cursor-pointer" : ""}`)} data-testid="log-line"${attr("data-level", row.level)}${attr("data-expandable", expandable ? "true" : void 0)}${attr("data-expanded", open ? "true" : void 0)}${attr("role", expandable ? "button" : void 0)}${attr("tabindex", expandable ? 0 : void 0)}${attr("aria-expanded", expandable ? open : void 0)}${attr("title", expandable ? open ? "Hide the JSON in this line" : "Show this line as JSON" : void 0)}><span class="w-[7.5rem] shrink-0 text-neutral-500"${attr("title", row.timestamp)}>${escape_html(row.time)}</span> <span class="shrink-0 truncate text-sky-400/80"${attr_style(prefixStyle())}${attr("title", row.streamName ?? "")} data-testid="log-stream">${escape_html(row.streamName ?? "")}</span> `);
828
+ if (expandable) $$renderer.push(`<!--[0--><span class="shrink-0 text-neutral-600" aria-hidden="true">${escape_html(open ? "▾" : "▸")}</span>`);
829
+ else $$renderer.push("<!--[-1-->");
830
+ $$renderer.push(`<!--]--> <span${attr_class(`${messageClass()} ${stringify(row.levelClass)}`)} data-testid="log-message">`);
814
831
  if (row.tokens !== null) {
815
832
  $$renderer.push(`<!--[0--><!--[-->`);
816
833
  const each_array_1 = ensure_array_like(row.tokens);
@@ -820,7 +837,17 @@ function LogViewer($$renderer, $$props) {
820
837
  }
821
838
  $$renderer.push(`<!--]-->`);
822
839
  } else $$renderer.push(`<!--[-1-->${escape_html(row.message)}`);
823
- $$renderer.push(`<!--]--></span></li>`);
840
+ $$renderer.push(`<!--]--></span> `);
841
+ if (open && row.expandable !== null) {
842
+ $$renderer.push(`<!--[0--><span class="w-full whitespace-pre text-xs text-neutral-300" data-testid="log-json-expanded"><!--[-->`);
843
+ const each_array_2 = ensure_array_like(tokenizeJson(row.expandable));
844
+ for (let tokenIndex = 0, $$length = each_array_2.length; tokenIndex < $$length; tokenIndex++) {
845
+ let token = each_array_2[tokenIndex];
846
+ $$renderer.push(`<span${attr_class(clsx(tokenClass(token.type)))}>${escape_html(token.text)}</span>`);
847
+ }
848
+ $$renderer.push(`<!--]--></span>`);
849
+ } else $$renderer.push("<!--[-1-->");
850
+ $$renderer.push(`<!--]--></li>`);
824
851
  }
825
852
  $$renderer.push(`<!--]--></ol> `);
826
853
  ColumnResizer($$renderer, {
@@ -1261,4 +1288,4 @@ function _page($$renderer, $$props) {
1261
1288
  }
1262
1289
 
1263
1290
  export { _page as default };
1264
- //# sourceMappingURL=_page.svelte.js-DzAAqWz2.js.map
1291
+ //# sourceMappingURL=_page.svelte.js-CpwYbxbM.js.map