uomtiles 0.1.2 → 0.1.3

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 (303) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/7KYNy7kZ.js +1 -0
  3. package/.output/public/_nuxt/7Rgc2iDI2.js +1 -0
  4. package/.output/public/_nuxt/BA52uD81.js +1 -0
  5. package/.output/public/_nuxt/{CU486JdV2.js → BHSn2vP72.js} +2 -2
  6. package/.output/public/_nuxt/BRsHq3Fz2.js +1 -0
  7. package/.output/public/_nuxt/Bh2Uv1S7.js +1 -0
  8. package/.output/public/_nuxt/BiRI-vq-.js +1 -0
  9. package/.output/public/_nuxt/Bpc1HTfh.js +1 -0
  10. package/.output/public/_nuxt/C-b4mqsD.js +1 -0
  11. package/.output/public/_nuxt/C5Y76DD6.js +1 -0
  12. package/.output/public/_nuxt/CD84FXNW.js +1 -0
  13. package/.output/public/_nuxt/CGkIG2vL2.js +1 -0
  14. package/.output/public/_nuxt/CM9IbYJz.js +1 -0
  15. package/.output/public/_nuxt/CUJ4QmLF.js +1 -0
  16. package/.output/public/_nuxt/CUQ3MZqI.js +1 -0
  17. package/.output/public/_nuxt/CVwoxklV.js +1 -0
  18. package/.output/public/_nuxt/CeHZqNQ0.js +1 -0
  19. package/.output/public/_nuxt/CkfS_Wbu.js +3 -0
  20. package/.output/public/_nuxt/CoPjdBwX.js +1 -0
  21. package/.output/public/_nuxt/CxkDmpVY.js +1 -0
  22. package/.output/public/_nuxt/CzRdWh7s2.js +1 -0
  23. package/.output/public/_nuxt/D-IOtyQX.js +1 -0
  24. package/.output/public/_nuxt/D3Us7gX72.js +1 -0
  25. package/.output/public/_nuxt/{DaQqwE3R.js → D8GHPYwQ.js} +44 -44
  26. package/.output/public/_nuxt/DLIy3f3M.js +1 -0
  27. package/.output/public/_nuxt/{CovBj6WN.js → DQ8r1OSk.js} +1 -1
  28. package/.output/public/_nuxt/D_9SjQFe.js +1 -0
  29. package/.output/public/_nuxt/D_Ggu6R_2.js +1 -0
  30. package/.output/public/_nuxt/{Q79ec-Ro.js → DnVJUY7B.js} +1 -1
  31. package/.output/public/_nuxt/{Bd1EvHmY.js → DuGgjt-h2.js} +1 -1
  32. package/.output/public/_nuxt/GEOST6As.js +1 -0
  33. package/.output/public/_nuxt/{DpIPeY5m.js → GqgcWtrL.js} +1 -1
  34. package/.output/public/_nuxt/{0hm88Oke.js → Hbp_Okvs.js} +1 -1
  35. package/.output/public/_nuxt/JdUwgqKv.js +1 -0
  36. package/.output/public/_nuxt/KttxEAyP2.js +1 -0
  37. package/.output/public/_nuxt/L0GXeO1Y2.js +1 -0
  38. package/.output/public/_nuxt/builds/latest.json +1 -1
  39. package/.output/public/_nuxt/builds/meta/ad8f3148-5aa4-4a0f-8e7a-e55147c5de1a.json +1 -0
  40. package/.output/public/_nuxt/entry.U-KS0GEu.css +1 -0
  41. package/.output/public/_nuxt/sMWyPZfC2.js +1 -0
  42. package/.output/public/_nuxt/zUWhKXtw2.js +1 -0
  43. package/.output/server/chunks/_/antigravity-nfz.mjs +629 -0
  44. package/.output/server/chunks/_/antigravity-nfz.mjs.map +1 -0
  45. package/.output/server/chunks/_/config.mjs +1 -1
  46. package/.output/server/chunks/_/file-workspace.mjs +1 -1
  47. package/.output/server/chunks/_/map-layer-update-manager.mjs +770 -0
  48. package/.output/server/chunks/_/map-layer-update-manager.mjs.map +1 -0
  49. package/.output/server/chunks/_/map-service.mjs +1 -1
  50. package/.output/server/chunks/_/uom-auth.mjs +1 -1
  51. package/.output/server/chunks/build/{CompletedTaskSelect-CKTpyHS3.mjs → CompletedTaskSelect-Ba03kTs9.mjs} +6 -7
  52. package/.output/server/chunks/build/{CompletedTaskSelect-CKTpyHS3.mjs.map → CompletedTaskSelect-Ba03kTs9.mjs.map} +1 -1
  53. package/.output/server/chunks/build/{Empty-BGIn09cL.mjs → Empty-CKvANuoV.mjs} +4 -103
  54. package/.output/server/chunks/build/Empty-CKvANuoV.mjs.map +1 -0
  55. package/.output/server/chunks/build/{FormField-DnJWfrKE.mjs → FormField-BJHVyy1m.mjs} +4 -35
  56. package/.output/server/chunks/build/FormField-BJHVyy1m.mjs.map +1 -0
  57. package/.output/server/chunks/build/{Input-AdlINKtJ.mjs → Input-DnAric-z.mjs} +1 -1
  58. package/.output/server/chunks/build/{Input-AdlINKtJ.mjs.map → Input-DnAric-z.mjs.map} +1 -1
  59. package/.output/server/chunks/build/MapLayerControl-DpNmYvcU.mjs +5720 -0
  60. package/.output/server/chunks/build/MapLayerControl-DpNmYvcU.mjs.map +1 -0
  61. package/.output/server/chunks/build/{Modal-CozaqIp1.mjs → Modal-BLhN9Eg2.mjs} +4 -18
  62. package/.output/server/chunks/build/{Modal-CozaqIp1.mjs.map → Modal-BLhN9Eg2.mjs.map} +1 -1
  63. package/.output/server/chunks/build/{OnlineMap-cFSicmkV.mjs → OnlineMap-B-sCfHkC.mjs} +6 -3
  64. package/.output/server/chunks/build/OnlineMap-B-sCfHkC.mjs.map +1 -0
  65. package/.output/server/chunks/build/{Pagination-GvNCxmOW.mjs → Pagination-CUzoLc_-.mjs} +1 -1
  66. package/.output/server/chunks/build/{Pagination-GvNCxmOW.mjs.map → Pagination-CUzoLc_-.mjs.map} +1 -1
  67. package/.output/server/chunks/build/Skeleton-CHp-GjOx.mjs +59 -0
  68. package/.output/server/chunks/build/Skeleton-CHp-GjOx.mjs.map +1 -0
  69. package/.output/server/chunks/build/{Slider-zQx1c7hB.mjs → Slider-CrIUK3pl.mjs} +5 -5
  70. package/.output/server/chunks/build/{Slider-zQx1c7hB.mjs.map → Slider-CrIUK3pl.mjs.map} +1 -1
  71. package/.output/server/chunks/build/{MapBaseLayerTabs-CRl5Zwlr.mjs → Tabs-cdLsZZoL.mjs} +429 -931
  72. package/.output/server/chunks/build/Tabs-cdLsZZoL.mjs.map +1 -0
  73. package/.output/server/chunks/build/{Tooltip-DNUdH4oF.mjs → Tooltip-DExIlyhu.mjs} +4 -195
  74. package/.output/server/chunks/build/Tooltip-DExIlyhu.mjs.map +1 -0
  75. package/.output/server/chunks/build/{advanced-5ZGMUBqC.mjs → advanced-DaSpS8Px.mjs} +31 -34
  76. package/.output/server/chunks/build/advanced-DaSpS8Px.mjs.map +1 -0
  77. package/.output/server/chunks/build/{compare-CtgF4Anj.mjs → compare-DaE10Dhp.mjs} +56 -37
  78. package/.output/server/chunks/build/compare-DaE10Dhp.mjs.map +1 -0
  79. package/.output/server/chunks/build/cookie-CziAmOf1.mjs +175 -0
  80. package/.output/server/chunks/build/cookie-CziAmOf1.mjs.map +1 -0
  81. package/.output/server/chunks/build/{dashboard-GneN-WPG.mjs → dashboard-Dq8mphss.mjs} +12 -6
  82. package/.output/server/chunks/build/{dashboard-GneN-WPG.mjs.map → dashboard-Dq8mphss.mjs.map} +1 -1
  83. package/.output/server/chunks/build/{details-CgufnL1d.mjs → details-DCNvSBgn.mjs} +5 -4
  84. package/.output/server/chunks/build/{details-CgufnL1d.mjs.map → details-DCNvSBgn.mjs.map} +1 -1
  85. package/.output/server/chunks/build/error-404-D9aQjJRn.mjs +1 -1
  86. package/.output/server/chunks/build/error-500-BNyA3wrb.mjs +1 -1
  87. package/.output/server/chunks/build/file-workspace-DMzPuPyG.mjs +104 -0
  88. package/.output/server/chunks/build/file-workspace-DMzPuPyG.mjs.map +1 -0
  89. package/.output/server/chunks/build/{interval-9B2MrM2e.mjs → interval-i5OZnTaK.mjs} +2 -2
  90. package/.output/server/chunks/build/{interval-9B2MrM2e.mjs.map → interval-i5OZnTaK.mjs.map} +1 -1
  91. package/.output/server/chunks/build/layers-50nqoWES.mjs +553 -0
  92. package/.output/server/chunks/build/layers-50nqoWES.mjs.map +1 -0
  93. package/.output/server/chunks/build/{login-Cf5EiCE4.mjs → login-BHSHtO-R.mjs} +6 -5
  94. package/.output/server/chunks/build/{login-Cf5EiCE4.mjs.map → login-BHSHtO-R.mjs.map} +1 -1
  95. package/.output/server/chunks/build/map-layers-C3HJoCLw.mjs +86 -0
  96. package/.output/server/chunks/build/map-layers-C3HJoCLw.mjs.map +1 -0
  97. package/.output/server/chunks/build/{DashboardSidebarToggle-CUI9NSow.mjs → overlay-BS4_B29H.mjs} +411 -4
  98. package/.output/server/chunks/build/overlay-BS4_B29H.mjs.map +1 -0
  99. package/.output/server/chunks/build/pages-5yYRS5nX.mjs +37 -0
  100. package/.output/server/chunks/build/pages-5yYRS5nX.mjs.map +1 -0
  101. package/.output/server/chunks/build/{pages-0c5sp_lv.mjs → pages-DfOPr0fC.mjs} +21 -21
  102. package/.output/server/chunks/build/pages-DfOPr0fC.mjs.map +1 -0
  103. package/.output/server/chunks/build/{services-BB49kSpd.mjs → services-DWlDpsbi.mjs} +45 -41
  104. package/.output/server/chunks/build/{services-BB49kSpd.mjs.map → services-DWlDpsbi.mjs.map} +1 -1
  105. package/.output/server/chunks/build/{tasks-BRcMLuRW.mjs → tasks-4b6D39Uy.mjs} +44 -100
  106. package/.output/server/chunks/build/{tasks-BRcMLuRW.mjs.map → tasks-4b6D39Uy.mjs.map} +1 -1
  107. package/.output/server/chunks/build/{tasks-Aa8PwjVL.mjs → tasks-BPPx2UMG.mjs} +10 -6
  108. package/.output/server/chunks/build/tasks-BPPx2UMG.mjs.map +1 -0
  109. package/.output/server/chunks/nitro/nitro.mjs +303 -244
  110. package/.output/server/chunks/routes/api/map/layers/_overlayLayer/update.get.mjs +29 -0
  111. package/.output/server/chunks/routes/api/map/layers/_overlayLayer/update.get.mjs.map +1 -0
  112. package/.output/server/chunks/routes/api/map/layers/_overlayLayer/update.post.mjs +31 -0
  113. package/.output/server/chunks/routes/api/map/layers/_overlayLayer/update.post.mjs.map +1 -0
  114. package/.output/server/chunks/routes/api/map/layers/_overlayLayer_.get.mjs +39 -0
  115. package/.output/server/chunks/routes/api/map/layers/_overlayLayer_.get.mjs.map +1 -0
  116. package/.output/server/chunks/routes/api/map/layers/status.get.mjs +60 -0
  117. package/.output/server/chunks/routes/api/map/layers/status.get.mjs.map +1 -0
  118. package/.output/server/chunks/routes/api/map/live/status.get.mjs +1 -1
  119. package/.output/server/chunks/routes/api/map/online/_layerGroup/_zoom/_tileX/_tileY_.get.mjs +1 -1
  120. package/.output/server/chunks/routes/api/map/online-root/_layerGroup/_rootX/_rootY_.get.mjs +1 -1
  121. package/.output/server/chunks/routes/api/workspace/_filename/analysis.get.mjs +1 -1
  122. package/.output/server/chunks/routes/api/workspace/_filename/download.get.mjs +1 -1
  123. package/.output/server/chunks/routes/api/workspace/_filename/export/_format_.get.mjs +1 -1
  124. package/.output/server/chunks/routes/api/workspace/_filename/export-estimate.get.mjs +1 -1
  125. package/.output/server/chunks/routes/api/workspace/_filename/tile.get.mjs +1 -1
  126. package/.output/server/chunks/routes/api/workspace/_filename/tiles.get.mjs +1 -1
  127. package/.output/server/chunks/routes/api/workspace/_filename_.delete.mjs +1 -1
  128. package/.output/server/chunks/routes/api/workspace/compare/batch.get.mjs +1 -1
  129. package/.output/server/chunks/routes/api/workspace/files.post.mjs +1 -1
  130. package/.output/server/chunks/routes/api/workspace/stop.post.mjs +1 -1
  131. package/.output/server/chunks/routes/api/workspace/tasks.post.mjs +2 -2
  132. package/.output/server/chunks/routes/renderer.mjs +3 -3
  133. package/.output/server/chunks/routes/services/wms.get.mjs +1 -1
  134. package/.output/server/chunks/routes/services/wmts.get.mjs +1 -1
  135. package/.output/server/chunks/virtual/entry.mjs +320 -443
  136. package/.output/server/chunks/virtual/entry.mjs.map +1 -1
  137. package/.output/server/chunks/virtual/precomputed.mjs +1 -1
  138. package/.output/server/chunks/virtual/styles.mjs +1 -1
  139. package/.output/server/node_modules/undici/index.js +234 -0
  140. package/.output/server/node_modules/undici/lib/api/abort-signal.js +59 -0
  141. package/.output/server/node_modules/undici/lib/api/api-connect.js +110 -0
  142. package/.output/server/node_modules/undici/lib/api/api-pipeline.js +252 -0
  143. package/.output/server/node_modules/undici/lib/api/api-request.js +214 -0
  144. package/.output/server/node_modules/undici/lib/api/api-stream.js +209 -0
  145. package/.output/server/node_modules/undici/lib/api/api-upgrade.js +111 -0
  146. package/.output/server/node_modules/undici/lib/api/index.js +7 -0
  147. package/.output/server/node_modules/undici/lib/api/readable.js +580 -0
  148. package/.output/server/node_modules/undici/lib/cache/memory-cache-store.js +279 -0
  149. package/.output/server/node_modules/undici/lib/cache/sqlite-cache-store.js +467 -0
  150. package/.output/server/node_modules/undici/lib/core/connect.js +153 -0
  151. package/.output/server/node_modules/undici/lib/core/constants.js +143 -0
  152. package/.output/server/node_modules/undici/lib/core/diagnostics.js +227 -0
  153. package/.output/server/node_modules/undici/lib/core/errors.js +477 -0
  154. package/.output/server/node_modules/undici/lib/core/request.js +464 -0
  155. package/.output/server/node_modules/undici/lib/core/socks5-client.js +422 -0
  156. package/.output/server/node_modules/undici/lib/core/socks5-utils.js +212 -0
  157. package/.output/server/node_modules/undici/lib/core/symbols.js +75 -0
  158. package/.output/server/node_modules/undici/lib/core/tree.js +160 -0
  159. package/.output/server/node_modules/undici/lib/core/util.js +992 -0
  160. package/.output/server/node_modules/undici/lib/dispatcher/agent.js +158 -0
  161. package/.output/server/node_modules/undici/lib/dispatcher/balanced-pool.js +219 -0
  162. package/.output/server/node_modules/undici/lib/dispatcher/client-h1.js +1731 -0
  163. package/.output/server/node_modules/undici/lib/dispatcher/client-h2.js +995 -0
  164. package/.output/server/node_modules/undici/lib/dispatcher/client.js +664 -0
  165. package/.output/server/node_modules/undici/lib/dispatcher/dispatcher-base.js +184 -0
  166. package/.output/server/node_modules/undici/lib/dispatcher/dispatcher.js +48 -0
  167. package/.output/server/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +146 -0
  168. package/.output/server/node_modules/undici/lib/dispatcher/fixed-queue.js +135 -0
  169. package/.output/server/node_modules/undici/lib/dispatcher/h2c-client.js +51 -0
  170. package/.output/server/node_modules/undici/lib/dispatcher/pool-base.js +214 -0
  171. package/.output/server/node_modules/undici/lib/dispatcher/pool.js +118 -0
  172. package/.output/server/node_modules/undici/lib/dispatcher/proxy-agent.js +319 -0
  173. package/.output/server/node_modules/undici/lib/dispatcher/retry-agent.js +35 -0
  174. package/.output/server/node_modules/undici/lib/dispatcher/round-robin-pool.js +137 -0
  175. package/.output/server/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +260 -0
  176. package/.output/server/node_modules/undici/lib/encoding/index.js +33 -0
  177. package/.output/server/node_modules/undici/lib/global.js +59 -0
  178. package/.output/server/node_modules/undici/lib/handler/cache-handler.js +760 -0
  179. package/.output/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +124 -0
  180. package/.output/server/node_modules/undici/lib/handler/decorator-handler.js +67 -0
  181. package/.output/server/node_modules/undici/lib/handler/deduplication-handler.js +460 -0
  182. package/.output/server/node_modules/undici/lib/handler/redirect-handler.js +238 -0
  183. package/.output/server/node_modules/undici/lib/handler/retry-handler.js +418 -0
  184. package/.output/server/node_modules/undici/lib/handler/unwrap-handler.js +106 -0
  185. package/.output/server/node_modules/undici/lib/handler/wrap-handler.js +105 -0
  186. package/.output/server/node_modules/undici/lib/interceptor/cache.js +602 -0
  187. package/.output/server/node_modules/undici/lib/interceptor/decompress.js +259 -0
  188. package/.output/server/node_modules/undici/lib/interceptor/deduplicate.js +117 -0
  189. package/.output/server/node_modules/undici/lib/interceptor/dns.js +571 -0
  190. package/.output/server/node_modules/undici/lib/interceptor/dump.js +112 -0
  191. package/.output/server/node_modules/undici/lib/interceptor/redirect.js +21 -0
  192. package/.output/server/node_modules/undici/lib/interceptor/response-error.js +95 -0
  193. package/.output/server/node_modules/undici/lib/interceptor/retry.js +19 -0
  194. package/.output/server/node_modules/undici/lib/llhttp/constants.js +531 -0
  195. package/.output/server/node_modules/undici/lib/llhttp/llhttp-wasm.js +15 -0
  196. package/.output/server/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +15 -0
  197. package/.output/server/node_modules/undici/lib/llhttp/utils.js +12 -0
  198. package/.output/server/node_modules/undici/lib/mock/mock-agent.js +232 -0
  199. package/.output/server/node_modules/undici/lib/mock/mock-call-history.js +248 -0
  200. package/.output/server/node_modules/undici/lib/mock/mock-client.js +68 -0
  201. package/.output/server/node_modules/undici/lib/mock/mock-errors.js +29 -0
  202. package/.output/server/node_modules/undici/lib/mock/mock-interceptor.js +209 -0
  203. package/.output/server/node_modules/undici/lib/mock/mock-pool.js +68 -0
  204. package/.output/server/node_modules/undici/lib/mock/mock-symbols.js +32 -0
  205. package/.output/server/node_modules/undici/lib/mock/mock-utils.js +486 -0
  206. package/.output/server/node_modules/undici/lib/mock/pending-interceptors-formatter.js +43 -0
  207. package/.output/server/node_modules/undici/lib/mock/snapshot-agent.js +353 -0
  208. package/.output/server/node_modules/undici/lib/mock/snapshot-recorder.js +588 -0
  209. package/.output/server/node_modules/undici/lib/mock/snapshot-utils.js +158 -0
  210. package/.output/server/node_modules/undici/lib/util/cache.js +676 -0
  211. package/.output/server/node_modules/undici/lib/util/date.js +670 -0
  212. package/.output/server/node_modules/undici/lib/util/promise.js +28 -0
  213. package/.output/server/node_modules/undici/lib/util/runtime-features.js +124 -0
  214. package/.output/server/node_modules/undici/lib/util/stats.js +32 -0
  215. package/.output/server/node_modules/undici/lib/util/timers.js +425 -0
  216. package/.output/server/node_modules/undici/lib/web/cache/cache.js +864 -0
  217. package/.output/server/node_modules/undici/lib/web/cache/cachestorage.js +152 -0
  218. package/.output/server/node_modules/undici/lib/web/cache/util.js +45 -0
  219. package/.output/server/node_modules/undici/lib/web/cookies/constants.js +12 -0
  220. package/.output/server/node_modules/undici/lib/web/cookies/index.js +199 -0
  221. package/.output/server/node_modules/undici/lib/web/cookies/parse.js +314 -0
  222. package/.output/server/node_modules/undici/lib/web/cookies/util.js +352 -0
  223. package/.output/server/node_modules/undici/lib/web/eventsource/eventsource-stream.js +399 -0
  224. package/.output/server/node_modules/undici/lib/web/eventsource/eventsource.js +501 -0
  225. package/.output/server/node_modules/undici/lib/web/eventsource/util.js +29 -0
  226. package/.output/server/node_modules/undici/lib/web/fetch/body.js +509 -0
  227. package/.output/server/node_modules/undici/lib/web/fetch/constants.js +131 -0
  228. package/.output/server/node_modules/undici/lib/web/fetch/data-url.js +596 -0
  229. package/.output/server/node_modules/undici/lib/web/fetch/formdata-parser.js +586 -0
  230. package/.output/server/node_modules/undici/lib/web/fetch/formdata.js +259 -0
  231. package/.output/server/node_modules/undici/lib/web/fetch/global.js +40 -0
  232. package/.output/server/node_modules/undici/lib/web/fetch/headers.js +719 -0
  233. package/.output/server/node_modules/undici/lib/web/fetch/index.js +2413 -0
  234. package/.output/server/node_modules/undici/lib/web/fetch/request.js +1115 -0
  235. package/.output/server/node_modules/undici/lib/web/fetch/response.js +641 -0
  236. package/.output/server/node_modules/undici/lib/web/fetch/util.js +1522 -0
  237. package/.output/server/node_modules/undici/lib/web/infra/index.js +229 -0
  238. package/.output/server/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js +307 -0
  239. package/.output/server/node_modules/undici/lib/web/webidl/index.js +1006 -0
  240. package/.output/server/node_modules/undici/lib/web/websocket/connection.js +329 -0
  241. package/.output/server/node_modules/undici/lib/web/websocket/constants.js +126 -0
  242. package/.output/server/node_modules/undici/lib/web/websocket/events.js +331 -0
  243. package/.output/server/node_modules/undici/lib/web/websocket/frame.js +133 -0
  244. package/.output/server/node_modules/undici/lib/web/websocket/permessage-deflate.js +100 -0
  245. package/.output/server/node_modules/undici/lib/web/websocket/receiver.js +507 -0
  246. package/.output/server/node_modules/undici/lib/web/websocket/sender.js +109 -0
  247. package/.output/server/node_modules/undici/lib/web/websocket/stream/websocketerror.js +104 -0
  248. package/.output/server/node_modules/undici/lib/web/websocket/stream/websocketstream.js +498 -0
  249. package/.output/server/node_modules/undici/lib/web/websocket/util.js +347 -0
  250. package/.output/server/node_modules/undici/lib/web/websocket/websocket.js +758 -0
  251. package/.output/server/node_modules/undici/package.json +152 -0
  252. package/.output/server/package.json +2 -1
  253. package/LICENSE +201 -2
  254. package/README.md +17 -4
  255. package/dist/package.json +3 -2
  256. package/dist/shared/antigravity-schema.js +45 -0
  257. package/dist/shared/dji-grid.js +62 -0
  258. package/dist/shared/types/map-layers.js +2 -0
  259. package/dist/src/cli.js +63 -5
  260. package/dist/src/core/dji-snapshot.js +135 -0
  261. package/dist/src/core/map-layer-paths.js +11 -0
  262. package/dist/src/map-layer-update.js +646 -0
  263. package/package.json +3 -2
  264. package/.output/public/_nuxt/BNfSclJ4.js +0 -1
  265. package/.output/public/_nuxt/BYzlinOr2.js +0 -1
  266. package/.output/public/_nuxt/Be4dNlar.js +0 -1
  267. package/.output/public/_nuxt/C7fHMLd7.js +0 -1
  268. package/.output/public/_nuxt/CNs_Ozdc.js +0 -1
  269. package/.output/public/_nuxt/CQ8inUdm.js +0 -1
  270. package/.output/public/_nuxt/Cc_JfSB1.js +0 -1
  271. package/.output/public/_nuxt/CyZDc0eO2.js +0 -1
  272. package/.output/public/_nuxt/CzFefJH0.js +0 -1
  273. package/.output/public/_nuxt/D-t0hXHB.js +0 -1
  274. package/.output/public/_nuxt/D3Pl7yw22.js +0 -1
  275. package/.output/public/_nuxt/D4gbGuiW.js +0 -1
  276. package/.output/public/_nuxt/DDp9lK3g.js +0 -1
  277. package/.output/public/_nuxt/DIIXHC50.js +0 -1
  278. package/.output/public/_nuxt/DWFUvzz0.js +0 -1
  279. package/.output/public/_nuxt/D_VoD6-f.js +0 -1
  280. package/.output/public/_nuxt/DfXX-x_z.js +0 -1
  281. package/.output/public/_nuxt/Dgyf2aNY.js +0 -1
  282. package/.output/public/_nuxt/GM5myUL22.js +0 -1
  283. package/.output/public/_nuxt/IC4wc76W.js +0 -1
  284. package/.output/public/_nuxt/IfL46N3Z.js +0 -1
  285. package/.output/public/_nuxt/KEU2l6zJ.js +0 -3
  286. package/.output/public/_nuxt/SEETjfdJ.js +0 -1
  287. package/.output/public/_nuxt/builds/meta/2c4adba2-91b5-44e4-91d3-50a61695207b.json +0 -1
  288. package/.output/public/_nuxt/entry.CZ_dkjcs.css +0 -1
  289. package/.output/public/_nuxt/nGp0t_eD.js +0 -1
  290. package/.output/server/chunks/build/Alert-DHVVSgdD.mjs +0 -1074
  291. package/.output/server/chunks/build/Alert-DHVVSgdD.mjs.map +0 -1
  292. package/.output/server/chunks/build/DashboardSidebarToggle-CUI9NSow.mjs.map +0 -1
  293. package/.output/server/chunks/build/Empty-BGIn09cL.mjs.map +0 -1
  294. package/.output/server/chunks/build/FocusScope-DNZVMnza.mjs +0 -207
  295. package/.output/server/chunks/build/FocusScope-DNZVMnza.mjs.map +0 -1
  296. package/.output/server/chunks/build/FormField-DnJWfrKE.mjs.map +0 -1
  297. package/.output/server/chunks/build/MapBaseLayerTabs-CRl5Zwlr.mjs.map +0 -1
  298. package/.output/server/chunks/build/OnlineMap-cFSicmkV.mjs.map +0 -1
  299. package/.output/server/chunks/build/Tooltip-DNUdH4oF.mjs.map +0 -1
  300. package/.output/server/chunks/build/advanced-5ZGMUBqC.mjs.map +0 -1
  301. package/.output/server/chunks/build/compare-CtgF4Anj.mjs.map +0 -1
  302. package/.output/server/chunks/build/pages-0c5sp_lv.mjs.map +0 -1
  303. package/.output/server/chunks/build/tasks-Aa8PwjVL.mjs.map +0 -1
@@ -0,0 +1,760 @@
1
+ 'use strict'
2
+
3
+ const util = require('../core/util')
4
+ const {
5
+ parseCacheControlHeader,
6
+ hasInvalidCacheControlDirective,
7
+ parseVaryHeader,
8
+ hasVaryStar,
9
+ isInvalidOrWildcardVaryHeader,
10
+ isEtagUsable
11
+ } = require('../util/cache')
12
+ const { parseHttpDate } = require('../util/date.js')
13
+
14
+ function noop () {}
15
+
16
+ // Status codes that we can use some heuristics on to cache
17
+ const HEURISTICALLY_CACHEABLE_STATUS_CODES = [
18
+ 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, 501
19
+ ]
20
+
21
+ // Status codes which semantic is not handled by the cache
22
+ // https://datatracker.ietf.org/doc/html/rfc9111#section-3
23
+ // This list should not grow beyond 206 unless the RFC is updated
24
+ // by a newer one including more. Please introduce another list if
25
+ // implementing caching of responses with the 'must-understand' directive.
26
+ const NOT_UNDERSTOOD_STATUS_CODES = [
27
+ 206
28
+ ]
29
+
30
+ const MAX_RESPONSE_AGE = 2147483647000
31
+
32
+ function trimOWS (value) {
33
+ return value.replace(/^[\t ]+|[\t ]+$/g, '')
34
+ }
35
+
36
+ function arrayIncludes (array, value) {
37
+ for (let i = 0; i < array.length; i++) {
38
+ if (array[i] === value) {
39
+ return true
40
+ }
41
+ }
42
+
43
+ return false
44
+ }
45
+
46
+ function appendConnectionHeaderTokens (headersToRemove, connectionHeader) {
47
+ const values = Array.isArray(connectionHeader) ? connectionHeader : [connectionHeader]
48
+
49
+ for (let i = 0; i < values.length; i++) {
50
+ const tokens = values[i].split(',')
51
+ for (let j = 0; j < tokens.length; j++) {
52
+ headersToRemove.push(trimOWS(tokens[j]).toLowerCase())
53
+ }
54
+ }
55
+ }
56
+
57
+ function getSameOriginPath (cacheKey, location) {
58
+ if (typeof location !== 'string') {
59
+ return undefined
60
+ }
61
+
62
+ let originUrl
63
+ let requestUrl
64
+ let locationUrl
65
+ try {
66
+ originUrl = new URL(cacheKey.origin)
67
+ requestUrl = new URL(cacheKey.path, originUrl)
68
+ locationUrl = new URL(location, requestUrl)
69
+ } catch {
70
+ return undefined
71
+ }
72
+
73
+ if (locationUrl.origin !== originUrl.origin) {
74
+ return undefined
75
+ }
76
+
77
+ return locationUrl.pathname + locationUrl.search
78
+ }
79
+
80
+ function deleteCachedUri (store, cacheKey, path) {
81
+ deleteCachedValue(store, {
82
+ ...cacheKey,
83
+ path
84
+ })
85
+
86
+ for (let i = 0; i < util.safeHTTPMethods.length; i++) {
87
+ const method = util.safeHTTPMethods[i]
88
+ if (method !== cacheKey.method) {
89
+ deleteCachedValue(store, {
90
+ ...cacheKey,
91
+ method,
92
+ path
93
+ })
94
+ }
95
+ }
96
+ }
97
+
98
+ function deleteLocationTargets (store, cacheKey, headerValue) {
99
+ if (headerValue === undefined) {
100
+ return
101
+ }
102
+
103
+ const values = Array.isArray(headerValue) ? headerValue : [headerValue]
104
+ for (let i = 0; i < values.length; i++) {
105
+ const path = getSameOriginPath(cacheKey, values[i])
106
+ if (path !== undefined) {
107
+ deleteCachedUri(store, cacheKey, path)
108
+ }
109
+ }
110
+ }
111
+
112
+ function invalidateUnsafeRequest (store, cacheKey, resHeaders) {
113
+ deleteCachedUri(store, cacheKey, cacheKey.path)
114
+ deleteLocationTargets(store, cacheKey, resHeaders.location)
115
+ deleteLocationTargets(store, cacheKey, resHeaders['content-location'])
116
+ }
117
+
118
+ /**
119
+ * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler
120
+ *
121
+ * @implements {DispatchHandler}
122
+ */
123
+ class CacheHandler {
124
+ /**
125
+ * @type {import('../../types/cache-interceptor.d.ts').default.CacheKey}
126
+ */
127
+ #cacheKey
128
+
129
+ /**
130
+ * @type {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions['type']}
131
+ */
132
+ #cacheType
133
+
134
+ /**
135
+ * @type {number | undefined}
136
+ */
137
+ #cacheByDefault
138
+
139
+ /**
140
+ * @type {import('../../types/cache-interceptor.d.ts').default.CacheStore}
141
+ */
142
+ #store
143
+
144
+ /**
145
+ * @type {import('../../types/dispatcher.d.ts').default.DispatchHandler}
146
+ */
147
+ #handler
148
+
149
+ /**
150
+ * @type {import('node:stream').Writable | undefined}
151
+ */
152
+ #writeStream
153
+
154
+ /**
155
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheHandlerOptions} opts
156
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey
157
+ * @param {import('../../types/dispatcher.d.ts').default.DispatchHandler} handler
158
+ */
159
+ constructor ({ store, type, cacheByDefault }, cacheKey, handler) {
160
+ this.#store = store
161
+ this.#cacheType = type
162
+ this.#cacheByDefault = cacheByDefault
163
+ this.#cacheKey = cacheKey
164
+ this.#handler = handler
165
+ }
166
+
167
+ onRequestStart (controller, context) {
168
+ this.#writeStream?.destroy()
169
+ this.#writeStream = undefined
170
+ this.#handler.onRequestStart?.(controller, context)
171
+ }
172
+
173
+ onRequestUpgrade (controller, statusCode, headers, socket) {
174
+ this.#handler.onRequestUpgrade?.(controller, statusCode, headers, socket)
175
+ }
176
+
177
+ /**
178
+ * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller
179
+ * @param {number} statusCode
180
+ * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders
181
+ * @param {string} statusMessage
182
+ */
183
+ onResponseStart (
184
+ controller,
185
+ statusCode,
186
+ resHeaders,
187
+ statusMessage
188
+ ) {
189
+ const downstreamOnHeaders = () =>
190
+ this.#handler.onResponseStart?.(
191
+ controller,
192
+ statusCode,
193
+ resHeaders,
194
+ statusMessage
195
+ )
196
+ const handler = this
197
+
198
+ if (
199
+ !arrayIncludes(util.safeHTTPMethods, this.#cacheKey.method) &&
200
+ statusCode >= 200 &&
201
+ statusCode <= 399
202
+ ) {
203
+ // Successful response to an unsafe method, delete it from cache
204
+ // https://www.rfc-editor.org/rfc/rfc9111.html#name-invalidating-stored-response
205
+ invalidateUnsafeRequest(this.#store, this.#cacheKey, resHeaders)
206
+ return downstreamOnHeaders()
207
+ }
208
+
209
+ const cacheControlHeader = resHeaders['cache-control']
210
+ const heuristicallyCacheable = resHeaders['last-modified'] && arrayIncludes(HEURISTICALLY_CACHEABLE_STATUS_CODES, statusCode)
211
+ if (
212
+ !cacheControlHeader &&
213
+ !resHeaders['expires'] &&
214
+ !heuristicallyCacheable &&
215
+ !this.#cacheByDefault
216
+ ) {
217
+ if (statusCode === 304 && resHeaders.vary && isInvalidOrWildcardVaryHeader(resHeaders.vary)) {
218
+ deleteCachedValue(this.#store, this.#cacheKey)
219
+ }
220
+
221
+ // Don't have anything to tell us this response is cachable and we're not
222
+ // caching by default
223
+ return downstreamOnHeaders()
224
+ }
225
+
226
+ const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {}
227
+ if (!canCacheResponse(this.#cacheType, statusCode, resHeaders, cacheControlDirectives, this.#cacheKey.headers)) {
228
+ if (statusCode === 304 && (cacheControlHeader || revalidationResponseDisallowsCachedReuse(this.#cacheType, resHeaders, cacheControlDirectives))) {
229
+ deleteCachedValue(this.#store, this.#cacheKey)
230
+ }
231
+
232
+ return downstreamOnHeaders()
233
+ }
234
+
235
+ const now = Date.now()
236
+ const resAge = Object.hasOwn(resHeaders, 'age') ? getAge(resHeaders.age) : undefined
237
+ if (resAge !== undefined && resAge >= MAX_RESPONSE_AGE) {
238
+ // Response considered stale
239
+ deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey)
240
+ return downstreamOnHeaders()
241
+ }
242
+
243
+ const resDate = Object.hasOwn(resHeaders, 'date') ? getDate(resHeaders.date) : undefined
244
+ if (resDate === null) {
245
+ deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey)
246
+ return downstreamOnHeaders()
247
+ }
248
+
249
+ const apparentAge = resDate ? Math.max(0, now - resDate.getTime()) : 0
250
+ const currentAge = Math.max(apparentAge, resAge ?? 0)
251
+
252
+ const staleAt =
253
+ determineStaleAt(this.#cacheType, now, resAge, resHeaders, resDate, cacheControlDirectives) ??
254
+ this.#cacheByDefault
255
+ if (staleAt === undefined || currentAge >= staleAt) {
256
+ if (cacheControlHeader || staleAt !== undefined) {
257
+ deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey)
258
+ }
259
+
260
+ return downstreamOnHeaders()
261
+ }
262
+
263
+ const baseTime = now - currentAge
264
+ const absoluteStaleAt = staleAt + baseTime
265
+ if (now >= absoluteStaleAt) {
266
+ // Response is already stale
267
+ deleteCachedValueIfNotModified(statusCode, this.#store, this.#cacheKey)
268
+ return downstreamOnHeaders()
269
+ }
270
+
271
+ let varyDirectives
272
+ if (this.#cacheKey.headers && resHeaders.vary) {
273
+ varyDirectives = parseVaryHeader(resHeaders.vary, this.#cacheKey.headers)
274
+ if (!varyDirectives) {
275
+ // Parse error
276
+ return downstreamOnHeaders()
277
+ }
278
+ }
279
+
280
+ const cachedAt = baseTime
281
+ const deleteAt = determineDeleteAt(baseTime, now, cacheControlDirectives, absoluteStaleAt)
282
+ const strippedHeaders = stripNecessaryHeaders(resHeaders, cacheControlDirectives)
283
+
284
+ /**
285
+ * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}
286
+ */
287
+ const value = {
288
+ statusCode,
289
+ statusMessage,
290
+ headers: strippedHeaders,
291
+ vary: varyDirectives,
292
+ cacheControlDirectives,
293
+ cachedAt,
294
+ staleAt: absoluteStaleAt,
295
+ deleteAt
296
+ }
297
+
298
+ // Not modified, re-use the cached value
299
+ // https://www.rfc-editor.org/rfc/rfc9111.html#name-handling-304-not-modified
300
+ if (statusCode === 304) {
301
+ const handle304 = (cachedValue) => {
302
+ if (!cachedValue) {
303
+ // Do not create a new cache entry, as a 304 won't have a body - so cannot be cached.
304
+ return downstreamOnHeaders()
305
+ }
306
+
307
+ // Re-use the cached value: statuscode, statusmessage, headers and body
308
+ value.statusCode = cachedValue.statusCode
309
+ value.statusMessage = cachedValue.statusMessage
310
+ value.etag = cachedValue.etag
311
+ value.vary = varyDirectives ?? cachedValue.vary
312
+ value.headers = { ...cachedValue.headers, ...strippedHeaders }
313
+
314
+ downstreamOnHeaders()
315
+
316
+ this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)
317
+
318
+ if (!this.#writeStream || !cachedValue?.body) {
319
+ return
320
+ }
321
+
322
+ if (typeof cachedValue.body.values === 'function') {
323
+ const bodyIterator = cachedValue.body.values()
324
+
325
+ const streamCachedBody = () => {
326
+ for (const chunk of bodyIterator) {
327
+ const full = this.#writeStream.write(chunk) === false
328
+ this.#handler.onResponseData?.(controller, chunk)
329
+ // when stream is full stop writing until we get a 'drain' event
330
+ if (full) {
331
+ break
332
+ }
333
+ }
334
+ }
335
+
336
+ this.#writeStream
337
+ .on('error', function () {
338
+ handler.#writeStream = undefined
339
+ handler.#store.delete(handler.#cacheKey)
340
+ })
341
+ .on('drain', () => {
342
+ streamCachedBody()
343
+ })
344
+ .on('close', function () {
345
+ if (handler.#writeStream === this) {
346
+ handler.#writeStream = undefined
347
+ }
348
+ })
349
+
350
+ streamCachedBody()
351
+ } else if (typeof cachedValue.body.on === 'function') {
352
+ // Readable stream body (e.g. from async/remote cache stores)
353
+ cachedValue.body
354
+ .on('data', (chunk) => {
355
+ this.#writeStream.write(chunk)
356
+ this.#handler.onResponseData?.(controller, chunk)
357
+ })
358
+ .on('end', () => {
359
+ this.#writeStream.end()
360
+ })
361
+ .on('error', () => {
362
+ this.#writeStream = undefined
363
+ this.#store.delete(this.#cacheKey)
364
+ })
365
+
366
+ this.#writeStream
367
+ .on('error', function () {
368
+ handler.#writeStream = undefined
369
+ handler.#store.delete(handler.#cacheKey)
370
+ })
371
+ .on('close', function () {
372
+ if (handler.#writeStream === this) {
373
+ handler.#writeStream = undefined
374
+ }
375
+ })
376
+ }
377
+ }
378
+
379
+ /**
380
+ * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue}
381
+ */
382
+ const result = this.#store.get(this.#cacheKey)
383
+ if (result && typeof result.then === 'function') {
384
+ result.then(handle304)
385
+ } else {
386
+ handle304(result)
387
+ }
388
+ } else {
389
+ if (typeof resHeaders.etag === 'string' && isEtagUsable(resHeaders.etag)) {
390
+ value.etag = resHeaders.etag
391
+ }
392
+
393
+ this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value)
394
+
395
+ if (!this.#writeStream) {
396
+ return downstreamOnHeaders()
397
+ }
398
+
399
+ this.#writeStream
400
+ .on('drain', () => controller.resume())
401
+ .on('error', function () {
402
+ // TODO (fix): Make error somehow observable?
403
+ handler.#writeStream = undefined
404
+
405
+ // Delete the value in case the cache store is holding onto state from
406
+ // the call to createWriteStream
407
+ handler.#store.delete(handler.#cacheKey)
408
+ })
409
+ .on('close', function () {
410
+ if (handler.#writeStream === this) {
411
+ handler.#writeStream = undefined
412
+ }
413
+
414
+ // TODO (fix): Should we resume even if was paused downstream?
415
+ controller.resume()
416
+ })
417
+
418
+ downstreamOnHeaders()
419
+ }
420
+ }
421
+
422
+ onResponseData (controller, chunk) {
423
+ if (this.#writeStream?.write(chunk) === false) {
424
+ controller.pause()
425
+ }
426
+
427
+ this.#handler.onResponseData?.(controller, chunk)
428
+ }
429
+
430
+ onResponseEnd (controller, trailers) {
431
+ this.#writeStream?.end()
432
+ this.#handler.onResponseEnd?.(controller, trailers)
433
+ }
434
+
435
+ onResponseError (controller, err) {
436
+ this.#writeStream?.destroy(err)
437
+ this.#writeStream = undefined
438
+ this.#handler.onResponseError?.(controller, err)
439
+ }
440
+ }
441
+
442
+ /**
443
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheStore} store
444
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheKey} cacheKey
445
+ */
446
+ function deleteCachedValue (store, cacheKey) {
447
+ try {
448
+ store.delete(cacheKey)?.catch?.(noop)
449
+ } catch {
450
+ // Fail silently
451
+ }
452
+ }
453
+
454
+ function deleteCachedValueIfNotModified (statusCode, store, cacheKey) {
455
+ if (statusCode === 304) {
456
+ deleteCachedValue(store, cacheKey)
457
+ }
458
+ }
459
+
460
+ /**
461
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType
462
+ * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders
463
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives
464
+ * @returns {boolean}
465
+ */
466
+ function revalidationResponseDisallowsCachedReuse (cacheType, resHeaders, cacheControlDirectives) {
467
+ return cacheControlDirectives['no-store'] === true ||
468
+ (cacheType === 'shared' && cacheControlDirectives.private === true) ||
469
+ (resHeaders.vary ? isInvalidOrWildcardVaryHeader(resHeaders.vary) : false)
470
+ }
471
+
472
+ /**
473
+ * @see https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen
474
+ *
475
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType
476
+ * @param {number} statusCode
477
+ * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders
478
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives
479
+ * @param {import('../../types/header.d.ts').IncomingHttpHeaders} [reqHeaders]
480
+ */
481
+ function canCacheResponse (cacheType, statusCode, resHeaders, cacheControlDirectives, reqHeaders) {
482
+ // Status code must be final and understood.
483
+ if (statusCode < 200 || arrayIncludes(NOT_UNDERSTOOD_STATUS_CODES, statusCode)) {
484
+ return false
485
+ }
486
+ // Responses with neither status codes that are heuristically cacheable, nor "explicit enough" caching
487
+ // directives, are not cacheable. "Explicit enough": see https://www.rfc-editor.org/rfc/rfc9111.html#section-3
488
+ if (!arrayIncludes(HEURISTICALLY_CACHEABLE_STATUS_CODES, statusCode) && !resHeaders['expires'] &&
489
+ !cacheControlDirectives.public &&
490
+ cacheControlDirectives['max-age'] === undefined &&
491
+ // RFC 9111: a private response directive, if the cache is not shared
492
+ !(cacheControlDirectives.private && cacheType === 'private') &&
493
+ !(cacheControlDirectives['s-maxage'] !== undefined && cacheType === 'shared')
494
+ ) {
495
+ return false
496
+ }
497
+
498
+ if (cacheControlDirectives['no-store']) {
499
+ return false
500
+ }
501
+
502
+ if (cacheType === 'shared' && cacheControlDirectives.private === true) {
503
+ return false
504
+ }
505
+
506
+ // https://www.rfc-editor.org/rfc/rfc9111.html#section-4.1-5
507
+ if (resHeaders.vary && hasVaryStar(resHeaders.vary)) {
508
+ return false
509
+ }
510
+
511
+ // https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen
512
+ if (reqHeaders != null && Object.hasOwn(reqHeaders, 'authorization')) {
513
+ if (
514
+ !cacheControlDirectives.public &&
515
+ !cacheControlDirectives['s-maxage'] &&
516
+ !cacheControlDirectives['must-revalidate']
517
+ ) {
518
+ return false
519
+ }
520
+
521
+ if (typeof reqHeaders.authorization !== 'string') {
522
+ return false
523
+ }
524
+
525
+ if (
526
+ Array.isArray(cacheControlDirectives['no-cache']) &&
527
+ arrayIncludes(cacheControlDirectives['no-cache'], 'authorization')
528
+ ) {
529
+ return false
530
+ }
531
+
532
+ if (
533
+ Array.isArray(cacheControlDirectives['private']) &&
534
+ arrayIncludes(cacheControlDirectives['private'], 'authorization')
535
+ ) {
536
+ return false
537
+ }
538
+ }
539
+
540
+ return true
541
+ }
542
+
543
+ /**
544
+ * @param {string | string[]} dateHeader
545
+ * @returns {Date | null | undefined}
546
+ */
547
+ function getDate (dateHeader) {
548
+ let dateValue = dateHeader
549
+ if (Array.isArray(dateValue)) {
550
+ if (dateValue.length !== 1) {
551
+ return null
552
+ }
553
+
554
+ dateValue = dateValue[0]
555
+ }
556
+
557
+ if (typeof dateValue !== 'string') {
558
+ return null
559
+ }
560
+
561
+ return parseHttpDate(dateValue)
562
+ }
563
+
564
+ /**
565
+ * @param {string | string[]} ageHeader
566
+ * @returns {number | undefined}
567
+ */
568
+ function getAge (ageHeader) {
569
+ let ageValue = ageHeader
570
+ if (Array.isArray(ageValue)) {
571
+ if (ageValue.length !== 1) {
572
+ return MAX_RESPONSE_AGE
573
+ }
574
+
575
+ ageValue = ageValue[0]
576
+ }
577
+
578
+ if (typeof ageValue !== 'string' || !/^[\t ]*[0-9]+[\t ]*$/.test(ageValue)) {
579
+ return MAX_RESPONSE_AGE
580
+ }
581
+
582
+ const age = BigInt(ageValue.replace(/^[\t ]+|[\t ]+$/g, ''))
583
+ if (age >= BigInt(MAX_RESPONSE_AGE / 1000)) {
584
+ return MAX_RESPONSE_AGE
585
+ }
586
+
587
+ return Number(age) * 1000
588
+ }
589
+
590
+ /**
591
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheOptions['type']} cacheType
592
+ * @param {number} now
593
+ * @param {number | undefined} age
594
+ * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders
595
+ * @param {Date | undefined} responseDate
596
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives
597
+ *
598
+ * @returns {number | undefined} time that the value is stale at in seconds or undefined if it shouldn't be cached
599
+ */
600
+ function determineStaleAt (cacheType, now, age, resHeaders, responseDate, cacheControlDirectives) {
601
+ if (cacheType === 'shared') {
602
+ // Prioritize s-maxage since we're a shared cache
603
+ // s-maxage > max-age > Expire
604
+ // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.2.10-3
605
+ if (hasInvalidCacheControlDirective(cacheControlDirectives, 's-maxage')) {
606
+ return 0
607
+ }
608
+
609
+ const sMaxAge = cacheControlDirectives['s-maxage']
610
+ if (sMaxAge !== undefined) {
611
+ return sMaxAge * 1000
612
+ }
613
+ }
614
+
615
+ if (hasInvalidCacheControlDirective(cacheControlDirectives, 'max-age')) {
616
+ return 0
617
+ }
618
+
619
+ const maxAge = cacheControlDirectives['max-age']
620
+ if (maxAge !== undefined) {
621
+ return maxAge * 1000
622
+ }
623
+
624
+ if (Object.hasOwn(resHeaders, 'expires')) {
625
+ // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.3
626
+ if (typeof resHeaders.expires !== 'string') {
627
+ return 0
628
+ }
629
+
630
+ const expiresDate = parseHttpDate(resHeaders.expires)
631
+ if (!expiresDate) {
632
+ return 0
633
+ }
634
+
635
+ if (now >= expiresDate.getTime()) {
636
+ return 0
637
+ }
638
+
639
+ if (responseDate) {
640
+ if (responseDate >= expiresDate) {
641
+ return 0
642
+ }
643
+
644
+ const freshnessLifetime = expiresDate.getTime() - responseDate.getTime()
645
+ if (age !== undefined && age >= freshnessLifetime) {
646
+ return 0
647
+ }
648
+
649
+ return freshnessLifetime
650
+ }
651
+
652
+ return expiresDate.getTime() - now
653
+ }
654
+
655
+ if (typeof resHeaders['last-modified'] === 'string') {
656
+ // https://www.rfc-editor.org/rfc/rfc9111.html#name-calculating-heuristic-fresh
657
+ const lastModified = parseHttpDate(resHeaders['last-modified'])
658
+ if (lastModified) {
659
+ if (lastModified.getTime() >= now) {
660
+ return undefined
661
+ }
662
+
663
+ const responseAge = now - lastModified.getTime()
664
+
665
+ return responseAge * 0.1
666
+ }
667
+ }
668
+
669
+ if (cacheControlDirectives.immutable) {
670
+ // https://www.rfc-editor.org/rfc/rfc8246.html#section-2.2
671
+ return 31536000000
672
+ }
673
+
674
+ return undefined
675
+ }
676
+
677
+ /**
678
+ * @param {number} baseTime
679
+ * @param {number} cachedAt
680
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives
681
+ * @param {number} staleAt
682
+ */
683
+ function determineDeleteAt (baseTime, cachedAt, cacheControlDirectives, staleAt) {
684
+ let staleWhileRevalidate = -Infinity
685
+ let staleIfError = -Infinity
686
+ let immutable = -Infinity
687
+
688
+ if (cacheControlDirectives['stale-while-revalidate']) {
689
+ staleWhileRevalidate = staleAt + (cacheControlDirectives['stale-while-revalidate'] * 1000)
690
+ }
691
+
692
+ if (cacheControlDirectives['stale-if-error']) {
693
+ staleIfError = staleAt + (cacheControlDirectives['stale-if-error'] * 1000)
694
+ }
695
+
696
+ if (cacheControlDirectives.immutable && staleWhileRevalidate === -Infinity && staleIfError === -Infinity) {
697
+ immutable = cachedAt + 31536000000
698
+ }
699
+
700
+ // When no stale directives or immutable flag, add a revalidation buffer
701
+ // equal to the freshness lifetime so the entry survives past staleAt long
702
+ // enough to be revalidated instead of silently disappearing.
703
+ //
704
+ // Response Date headers only have second precision, so baseTime can trail the
705
+ // actual cache insertion time by up to ~1s. Pad the buffer by that bounded
706
+ // skew so short-lived entries do not disappear exactly when they should be
707
+ // revalidated.
708
+ if (staleWhileRevalidate === -Infinity && staleIfError === -Infinity && immutable === -Infinity) {
709
+ const freshnessLifetime = staleAt - baseTime
710
+ const datePrecisionPadding = Math.min(Math.max(cachedAt - baseTime, 0), 1000)
711
+ return staleAt + freshnessLifetime + datePrecisionPadding
712
+ }
713
+
714
+ return Math.max(staleAt, staleWhileRevalidate, staleIfError, immutable)
715
+ }
716
+
717
+ /**
718
+ * Strips headers required to be removed in cached responses
719
+ * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders
720
+ * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives
721
+ * @returns {Record<string, string | string []>}
722
+ */
723
+ function stripNecessaryHeaders (resHeaders, cacheControlDirectives) {
724
+ const headersToRemove = [
725
+ 'connection',
726
+ 'proxy-authenticate',
727
+ 'proxy-authentication-info',
728
+ 'proxy-authorization',
729
+ 'proxy-connection',
730
+ 'te',
731
+ 'transfer-encoding',
732
+ 'upgrade',
733
+ // We'll add age back when serving it
734
+ 'age'
735
+ ]
736
+
737
+ if (resHeaders['connection']) {
738
+ appendConnectionHeaderTokens(headersToRemove, resHeaders['connection'])
739
+ }
740
+
741
+ if (Array.isArray(cacheControlDirectives['no-cache'])) {
742
+ headersToRemove.push(...cacheControlDirectives['no-cache'])
743
+ }
744
+
745
+ if (Array.isArray(cacheControlDirectives['private'])) {
746
+ headersToRemove.push(...cacheControlDirectives['private'])
747
+ }
748
+
749
+ let strippedHeaders
750
+ for (const headerName of headersToRemove) {
751
+ if (Object.hasOwn(resHeaders, headerName)) {
752
+ strippedHeaders ??= { ...resHeaders }
753
+ delete strippedHeaders[headerName]
754
+ }
755
+ }
756
+
757
+ return strippedHeaders ?? resHeaders
758
+ }
759
+
760
+ module.exports = CacheHandler