uomtiles 0.1.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.
- package/.output/nitro.json +15 -0
- package/.output/public/_nuxt/1d1PDhA4.js +1 -0
- package/.output/public/_nuxt/3B2XYGg4.js +1 -0
- package/.output/public/_nuxt/981KwFWf.js +1 -0
- package/.output/public/_nuxt/B30dSvM4.js +1 -0
- package/.output/public/_nuxt/BN1Gp4Dm.js +1 -0
- package/.output/public/_nuxt/BQlj8Xoe.js +6 -0
- package/.output/public/_nuxt/BRkljK8J.js +1 -0
- package/.output/public/_nuxt/BSdHYVlE2.js +1 -0
- package/.output/public/_nuxt/B_MqTg2k2.js +1 -0
- package/.output/public/_nuxt/BiWblTbb2.js +64 -0
- package/.output/public/_nuxt/BrPwntMr.js +1 -0
- package/.output/public/_nuxt/BskybydR.js +1 -0
- package/.output/public/_nuxt/ByRlKR9F.js +1 -0
- package/.output/public/_nuxt/C0Zdl2EE2.js +1 -0
- package/.output/public/_nuxt/C4qlzA4o.js +1 -0
- package/.output/public/_nuxt/C7HxHbxA.js +1 -0
- package/.output/public/_nuxt/C97TfNgP.js +3 -0
- package/.output/public/_nuxt/CNs_Ozdc.js +1 -0
- package/.output/public/_nuxt/CPuhwLY1.js +1 -0
- package/.output/public/_nuxt/CVE291Pi.js +1 -0
- package/.output/public/_nuxt/C_0VY3Cv2.js +4 -0
- package/.output/public/_nuxt/Ce26t8_Y.js +1 -0
- package/.output/public/_nuxt/CfW544W5.js +1 -0
- package/.output/public/_nuxt/CgMd2Y5s.js +2 -0
- package/.output/public/_nuxt/CgdzV712.js +1 -0
- package/.output/public/_nuxt/D1wVNWS0.js +1 -0
- package/.output/public/_nuxt/DC3bhq63.js +1 -0
- package/.output/public/_nuxt/DK3Fl9T5.js +1 -0
- package/.output/public/_nuxt/DL1MZZLI.js +1 -0
- package/.output/public/_nuxt/DXm-42Fi.js +1 -0
- package/.output/public/_nuxt/Djg3Kzfv.js +1 -0
- package/.output/public/_nuxt/DkcySee1.js +1 -0
- package/.output/public/_nuxt/DmN-PKW1.js +1 -0
- package/.output/public/_nuxt/DtFVCXI9.js +1 -0
- package/.output/public/_nuxt/Dz7VMlHR.js +1 -0
- package/.output/public/_nuxt/NL65vbjG2.js +1 -0
- package/.output/public/_nuxt/Oxy7pKSk.js +3 -0
- package/.output/public/_nuxt/Pik8or8N2.js +1 -0
- package/.output/public/_nuxt/XZ59tThl.js +1 -0
- package/.output/public/_nuxt/ZpWjFsgV.js +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -0
- package/.output/public/_nuxt/builds/meta/9f85104e-738d-4a74-8daa-40b136ce17d5.json +1 -0
- package/.output/public/_nuxt/dXz6dFgW2.js +1 -0
- package/.output/public/_nuxt/entry.P6tFNE31.css +1 -0
- package/.output/public/_nuxt/error-404.Biv0P6cJ.css +1 -0
- package/.output/public/_nuxt/error-500.8ok468rV.css +1 -0
- package/.output/public/_nuxt/j0MRD-c3.js +1 -0
- package/.output/public/_nuxt/local-pixel-diff.worker-C6RdZoCq.js +2 -0
- package/.output/public/_nuxt/maplibre-gl-worker.nfnkSQvL.mjs +6 -0
- package/.output/public/_nuxt/nearest-area.worker-iSLH0Y_s.js +2 -0
- package/.output/public/_nuxt/q7DkoVkj.js +828 -0
- package/.output/public/_nuxt/raster-tile.worker-BFlOgJig.js +2 -0
- package/.output/public/_nuxt/services._3nQizF8.css +1 -0
- package/.output/public/_nuxt/sql-wasm.DfANybxk.wasm +0 -0
- package/.output/public/_nuxt/tile-diff.worker-CvWWI_eu.js +1 -0
- package/.output/public/_nuxt/zZ1EGR7Y.js +1 -0
- package/.output/public/apple-touch-icon.png +0 -0
- package/.output/public/favicon.ico +0 -0
- package/.output/public/favicon.svg +8 -0
- package/.output/public/icon-192.png +0 -0
- package/.output/public/icon-512.png +0 -0
- package/.output/public/site.webmanifest +11 -0
- package/.output/server/chunks/_/config.mjs +208 -0
- package/.output/server/chunks/_/config.mjs.map +1 -0
- package/.output/server/chunks/_/data-directory.mjs +24 -0
- package/.output/server/chunks/_/data-directory.mjs.map +1 -0
- package/.output/server/chunks/_/error-500.mjs +20 -0
- package/.output/server/chunks/_/error-500.mjs.map +1 -0
- package/.output/server/chunks/_/file-workspace.mjs +910 -0
- package/.output/server/chunks/_/file-workspace.mjs.map +1 -0
- package/.output/server/chunks/_/icons.mjs +6269 -0
- package/.output/server/chunks/_/icons.mjs.map +1 -0
- package/.output/server/chunks/_/map-service.mjs +233 -0
- package/.output/server/chunks/_/map-service.mjs.map +1 -0
- package/.output/server/chunks/_/missing-tile.mjs +104 -0
- package/.output/server/chunks/_/missing-tile.mjs.map +1 -0
- package/.output/server/chunks/_/pixel-diff.mjs +78 -0
- package/.output/server/chunks/_/pixel-diff.mjs.map +1 -0
- package/.output/server/chunks/_/uom-auth.mjs +334 -0
- package/.output/server/chunks/_/uom-auth.mjs.map +1 -0
- package/.output/server/chunks/_/uom-map.mjs +265 -0
- package/.output/server/chunks/_/uom-map.mjs.map +1 -0
- package/.output/server/chunks/build/Alert-0ngTJXxP.mjs +5076 -0
- package/.output/server/chunks/build/Alert-0ngTJXxP.mjs.map +1 -0
- package/.output/server/chunks/build/DashboardSidebarToggle-pncTaIJq.mjs +569 -0
- package/.output/server/chunks/build/DashboardSidebarToggle-pncTaIJq.mjs.map +1 -0
- package/.output/server/chunks/build/Empty-CkW3mADt.mjs +359 -0
- package/.output/server/chunks/build/Empty-CkW3mADt.mjs.map +1 -0
- package/.output/server/chunks/build/FocusScope-Cf0lg0zt.mjs +207 -0
- package/.output/server/chunks/build/FocusScope-Cf0lg0zt.mjs.map +1 -0
- package/.output/server/chunks/build/FormField-CEUZHcv7.mjs +278 -0
- package/.output/server/chunks/build/FormField-CEUZHcv7.mjs.map +1 -0
- package/.output/server/chunks/build/Input-BeNavYXb.mjs +592 -0
- package/.output/server/chunks/build/Input-BeNavYXb.mjs.map +1 -0
- package/.output/server/chunks/build/MapBaseLayerTabs-4445J6yh.mjs +2003 -0
- package/.output/server/chunks/build/MapBaseLayerTabs-4445J6yh.mjs.map +1 -0
- package/.output/server/chunks/build/Modal-DNZtVxca.mjs +1326 -0
- package/.output/server/chunks/build/Modal-DNZtVxca.mjs.map +1 -0
- package/.output/server/chunks/build/OnlineMap-CKwiuqUY.mjs +146 -0
- package/.output/server/chunks/build/OnlineMap-CKwiuqUY.mjs.map +1 -0
- package/.output/server/chunks/build/Pagination-CDHx4HTZ.mjs +1025 -0
- package/.output/server/chunks/build/Pagination-CDHx4HTZ.mjs.map +1 -0
- package/.output/server/chunks/build/PopperArrow-Bqfdf2Et.mjs +2066 -0
- package/.output/server/chunks/build/PopperArrow-Bqfdf2Et.mjs.map +1 -0
- package/.output/server/chunks/build/ScrollArea-BQK3em8b.mjs +379 -0
- package/.output/server/chunks/build/ScrollArea-BQK3em8b.mjs.map +1 -0
- package/.output/server/chunks/build/Slider-D-n8Y0CX.mjs +1087 -0
- package/.output/server/chunks/build/Slider-D-n8Y0CX.mjs.map +1 -0
- package/.output/server/chunks/build/Tooltip-CkpSktvJ.mjs +1345 -0
- package/.output/server/chunks/build/Tooltip-CkpSktvJ.mjs.map +1 -0
- package/.output/server/chunks/build/_virtual_public-CeOptKUP.mjs +7 -0
- package/.output/server/chunks/build/_virtual_public-CeOptKUP.mjs.map +1 -0
- package/.output/server/chunks/build/advanced-D1onodoF.mjs +1430 -0
- package/.output/server/chunks/build/advanced-D1onodoF.mjs.map +1 -0
- package/.output/server/chunks/build/compare-DmSAW8oA.mjs +1093 -0
- package/.output/server/chunks/build/compare-DmSAW8oA.mjs.map +1 -0
- package/.output/server/chunks/build/dashboard-BJxrZ19n.mjs +3217 -0
- package/.output/server/chunks/build/dashboard-BJxrZ19n.mjs.map +1 -0
- package/.output/server/chunks/build/details-CBMqXYyo.mjs +3714 -0
- package/.output/server/chunks/build/details-CBMqXYyo.mjs.map +1 -0
- package/.output/server/chunks/build/error-404-D9aQjJRn.mjs +86 -0
- package/.output/server/chunks/build/error-404-D9aQjJRn.mjs.map +1 -0
- package/.output/server/chunks/build/error-404-styles.DciiguV6.mjs +9 -0
- package/.output/server/chunks/build/error-404-styles.DciiguV6.mjs.map +1 -0
- package/.output/server/chunks/build/error-500-BNyA3wrb.mjs +74 -0
- package/.output/server/chunks/build/error-500-BNyA3wrb.mjs.map +1 -0
- package/.output/server/chunks/build/error-500-styles.C562DYMR.mjs +9 -0
- package/.output/server/chunks/build/error-500-styles.C562DYMR.mjs.map +1 -0
- package/.output/server/chunks/build/esm-Dp2lJXbp.mjs +1121 -0
- package/.output/server/chunks/build/esm-Dp2lJXbp.mjs.map +1 -0
- package/.output/server/chunks/build/interval-BxUMpo78.mjs +411 -0
- package/.output/server/chunks/build/interval-BxUMpo78.mjs.map +1 -0
- package/.output/server/chunks/build/login-lbtjN0MV.mjs +642 -0
- package/.output/server/chunks/build/login-lbtjN0MV.mjs.map +1 -0
- package/.output/server/chunks/build/pages-Ba0Eixbd.mjs +220 -0
- package/.output/server/chunks/build/pages-Ba0Eixbd.mjs.map +1 -0
- package/.output/server/chunks/build/services-DuJwjAB8.mjs +3005 -0
- package/.output/server/chunks/build/services-DuJwjAB8.mjs.map +1 -0
- package/.output/server/chunks/build/services-styles.eoO16BY9.mjs +9 -0
- package/.output/server/chunks/build/services-styles.eoO16BY9.mjs.map +1 -0
- package/.output/server/chunks/build/tasks-CyN9x492.mjs +915 -0
- package/.output/server/chunks/build/tasks-CyN9x492.mjs.map +1 -0
- package/.output/server/chunks/build/tasks-D_Q5EDnn.mjs +87 -0
- package/.output/server/chunks/build/tasks-D_Q5EDnn.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +6215 -0
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -0
- package/.output/server/chunks/routes/api/auth/captcha.post.mjs +21 -0
- package/.output/server/chunks/routes/api/auth/captcha.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/auth/login.post.mjs +27 -0
- package/.output/server/chunks/routes/api/auth/login.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/auth/logout.post.mjs +22 -0
- package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/auth/map-token.post.mjs +22 -0
- package/.output/server/chunks/routes/api/auth/map-token.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/auth/send-sms.post.mjs +31 -0
- package/.output/server/chunks/routes/api/auth/send-sms.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/auth/status.get.mjs +21 -0
- package/.output/server/chunks/routes/api/auth/status.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/map/base/_baseLayer/_zoom/_tileX/_tileY_.get.mjs +44 -0
- package/.output/server/chunks/routes/api/map/base/_baseLayer/_zoom/_tileX/_tileY_.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/map/live/status.get.mjs +32 -0
- package/.output/server/chunks/routes/api/map/live/status.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/map/online/_layerGroup/_zoom/_tileX/_tileY_.get.mjs +48 -0
- package/.output/server/chunks/routes/api/map/online/_layerGroup/_zoom/_tileX/_tileY_.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/map/online-root/_layerGroup/_rootX/_rootY_.get.mjs +46 -0
- package/.output/server/chunks/routes/api/map/online-root/_layerGroup/_rootX/_rootY_.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/map-service/config.post.mjs +38 -0
- package/.output/server/chunks/routes/api/map-service/config.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/map-service/file.post.mjs +41 -0
- package/.output/server/chunks/routes/api/map-service/file.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/map-service/source.post.mjs +35 -0
- package/.output/server/chunks/routes/api/map-service/source.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/map-service/status.get.mjs +32 -0
- package/.output/server/chunks/routes/api/map-service/status.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/_filename/analysis.get.mjs +47 -0
- package/.output/server/chunks/routes/api/workspace/_filename/analysis.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/_filename/download.get.mjs +38 -0
- package/.output/server/chunks/routes/api/workspace/_filename/download.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/_filename/export/_format_.get.mjs +42 -0
- package/.output/server/chunks/routes/api/workspace/_filename/export/_format_.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/_filename/tile.get.mjs +48 -0
- package/.output/server/chunks/routes/api/workspace/_filename/tile.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/_filename/tiles.get.mjs +45 -0
- package/.output/server/chunks/routes/api/workspace/_filename/tiles.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/_filename_.delete.mjs +32 -0
- package/.output/server/chunks/routes/api/workspace/_filename_.delete.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/compare/batch.get.mjs +38 -0
- package/.output/server/chunks/routes/api/workspace/compare/batch.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/compare.post.mjs +33 -0
- package/.output/server/chunks/routes/api/workspace/compare.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/fetch.post.mjs +33 -0
- package/.output/server/chunks/routes/api/workspace/fetch.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/files.get.mjs +27 -0
- package/.output/server/chunks/routes/api/workspace/files.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/files.post.mjs +38 -0
- package/.output/server/chunks/routes/api/workspace/files.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/stop.post.mjs +32 -0
- package/.output/server/chunks/routes/api/workspace/stop.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/workspace/tasks.post.mjs +36 -0
- package/.output/server/chunks/routes/api/workspace/tasks.post.mjs.map +1 -0
- package/.output/server/chunks/routes/renderer.mjs +422 -0
- package/.output/server/chunks/routes/renderer.mjs.map +1 -0
- package/.output/server/chunks/routes/services/wms.get.mjs +54 -0
- package/.output/server/chunks/routes/services/wms.get.mjs.map +1 -0
- package/.output/server/chunks/routes/services/wmts.get.mjs +54 -0
- package/.output/server/chunks/routes/services/wmts.get.mjs.map +1 -0
- package/.output/server/chunks/virtual/_virtual_spa-template.mjs +4 -0
- package/.output/server/chunks/virtual/_virtual_spa-template.mjs.map +1 -0
- package/.output/server/chunks/virtual/entry.mjs +18545 -0
- package/.output/server/chunks/virtual/entry.mjs.map +1 -0
- package/.output/server/chunks/virtual/precomputed.mjs +4 -0
- package/.output/server/chunks/virtual/precomputed.mjs.map +1 -0
- package/.output/server/chunks/virtual/styles.mjs +10 -0
- package/.output/server/chunks/virtual/styles.mjs.map +1 -0
- package/.output/server/index.mjs +12 -0
- package/.output/server/index.mjs.map +1 -0
- package/.output/server/node_modules/@babel/parser/lib/index.js +14611 -0
- package/.output/server/node_modules/@babel/parser/package.json +50 -0
- package/.output/server/node_modules/@iconify/utils/lib/colors/index.js +295 -0
- package/.output/server/node_modules/@iconify/utils/lib/colors/keywords.js +701 -0
- package/.output/server/node_modules/@iconify/utils/lib/css/common.js +75 -0
- package/.output/server/node_modules/@iconify/utils/lib/css/format.js +39 -0
- package/.output/server/node_modules/@iconify/utils/lib/css/icon.js +47 -0
- package/.output/server/node_modules/@iconify/utils/lib/css/icons.js +128 -0
- package/.output/server/node_modules/@iconify/utils/lib/customisations/bool.js +19 -0
- package/.output/server/node_modules/@iconify/utils/lib/customisations/defaults.js +13 -0
- package/.output/server/node_modules/@iconify/utils/lib/customisations/flip.js +17 -0
- package/.output/server/node_modules/@iconify/utils/lib/customisations/merge.js +16 -0
- package/.output/server/node_modules/@iconify/utils/lib/customisations/rotate.js +30 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/cleanup.js +78 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/convert.js +100 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/data.js +28 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/format.js +58 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/parse.js +48 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/base.js +203 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/create.js +33 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/numbers.js +132 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/similar.js +165 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/tree.js +79 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/replace/find.js +92 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/replace/replace.js +26 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/test/components.js +76 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/test/missing.js +66 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/test/name.js +45 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/test/parse.js +103 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/test/similar.js +36 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/test/tree.js +92 -0
- package/.output/server/node_modules/@iconify/utils/lib/emoji/test/variations.js +62 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon/defaults.js +25 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon/merge.js +16 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon/name.js +57 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon/square.js +33 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon/transformations.js +12 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon-set/convert-info.js +125 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon-set/expand.js +19 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon-set/get-icon.js +25 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon-set/get-icons.js +36 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon-set/minify.js +91 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon-set/parse.js +46 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon-set/tree.js +23 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon-set/validate-basic.js +42 -0
- package/.output/server/node_modules/@iconify/utils/lib/icon-set/validate.js +123 -0
- package/.output/server/node_modules/@iconify/utils/lib/index.js +52 -0
- package/.output/server/node_modules/@iconify/utils/lib/loader/custom.js +30 -0
- package/.output/server/node_modules/@iconify/utils/lib/loader/loader.js +26 -0
- package/.output/server/node_modules/@iconify/utils/lib/loader/modern.js +27 -0
- package/.output/server/node_modules/@iconify/utils/lib/loader/utils.js +105 -0
- package/.output/server/node_modules/@iconify/utils/lib/misc/objects.js +26 -0
- package/.output/server/node_modules/@iconify/utils/lib/misc/strings.js +26 -0
- package/.output/server/node_modules/@iconify/utils/lib/misc/title.js +9 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/build.js +113 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/defs.js +31 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/encode-svg-for-css.js +13 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/html.js +9 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/id.js +41 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/inner-html.js +22 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/parse.js +67 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/pretty.js +54 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/size.js +27 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/trim.js +7 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/url.js +22 -0
- package/.output/server/node_modules/@iconify/utils/lib/svg/viewbox.js +8 -0
- package/.output/server/node_modules/@iconify/utils/package.json +119 -0
- package/.output/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +6801 -0
- package/.output/server/node_modules/@vue/compiler-core/package.json +58 -0
- package/.output/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +692 -0
- package/.output/server/node_modules/@vue/compiler-dom/package.json +57 -0
- package/.output/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1420 -0
- package/.output/server/node_modules/@vue/compiler-ssr/package.json +34 -0
- package/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1903 -0
- package/.output/server/node_modules/@vue/reactivity/package.json +55 -0
- package/.output/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +6976 -0
- package/.output/server/node_modules/@vue/runtime-core/package.json +52 -0
- package/.output/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +1841 -0
- package/.output/server/node_modules/@vue/runtime-dom/package.json +60 -0
- package/.output/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +904 -0
- package/.output/server/node_modules/@vue/server-renderer/package.json +53 -0
- package/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +609 -0
- package/.output/server/node_modules/@vue/shared/package.json +47 -0
- package/.output/server/node_modules/consola/dist/chunks/prompt.mjs +280 -0
- package/.output/server/node_modules/consola/dist/core.mjs +512 -0
- package/.output/server/node_modules/consola/dist/index.mjs +651 -0
- package/.output/server/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs +72 -0
- package/.output/server/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs +288 -0
- package/.output/server/node_modules/consola/package.json +136 -0
- package/.output/server/node_modules/devalue/index.js +17 -0
- package/.output/server/node_modules/devalue/package.json +39 -0
- package/.output/server/node_modules/devalue/src/base64.js +60 -0
- package/.output/server/node_modules/devalue/src/constants.js +12 -0
- package/.output/server/node_modules/devalue/src/operations.js +193 -0
- package/.output/server/node_modules/devalue/src/parse.js +270 -0
- package/.output/server/node_modules/devalue/src/stringify.js +428 -0
- package/.output/server/node_modules/devalue/src/uneval.js +582 -0
- package/.output/server/node_modules/devalue/src/utils.js +185 -0
- package/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
- package/.output/server/node_modules/entities/dist/commonjs/decode.js +568 -0
- package/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.js +7 -0
- package/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +7 -0
- package/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.js +21 -0
- package/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.js +31 -0
- package/.output/server/node_modules/entities/dist/commonjs/package.json +3 -0
- package/.output/server/node_modules/entities/package.json +120 -0
- package/.output/server/node_modules/estree-walker/dist/umd/estree-walker.js +344 -0
- package/.output/server/node_modules/estree-walker/package.json +37 -0
- package/.output/server/node_modules/fflate/esm/index.mjs +2710 -0
- package/.output/server/node_modules/fflate/package.json +128 -0
- package/.output/server/node_modules/fnv1a-64/dist/index.mjs +95 -0
- package/.output/server/node_modules/fnv1a-64/package.json +75 -0
- package/.output/server/node_modules/hookable/dist/index.mjs +257 -0
- package/.output/server/node_modules/hookable/package.json +53 -0
- package/.output/server/node_modules/nostics/dist/formatters/ansi.mjs +19 -0
- package/.output/server/node_modules/nostics/dist/index.mjs +187 -0
- package/.output/server/node_modules/nostics/package.json +125 -0
- package/.output/server/node_modules/object-identity/index.js +60 -0
- package/.output/server/node_modules/object-identity/package.json +40 -0
- package/.output/server/node_modules/p-limit/index.js +104 -0
- package/.output/server/node_modules/p-limit/package.json +58 -0
- package/.output/server/node_modules/pmtiles/dist/esm/index.js +2 -0
- package/.output/server/node_modules/pmtiles/package.json +50 -0
- package/.output/server/node_modules/source-map-js/lib/array-set.js +121 -0
- package/.output/server/node_modules/source-map-js/lib/base64-vlq.js +140 -0
- package/.output/server/node_modules/source-map-js/lib/base64.js +67 -0
- package/.output/server/node_modules/source-map-js/lib/binary-search.js +111 -0
- package/.output/server/node_modules/source-map-js/lib/mapping-list.js +79 -0
- package/.output/server/node_modules/source-map-js/lib/quick-sort.js +132 -0
- package/.output/server/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
- package/.output/server/node_modules/source-map-js/lib/source-map-generator.js +444 -0
- package/.output/server/node_modules/source-map-js/lib/source-node.js +413 -0
- package/.output/server/node_modules/source-map-js/lib/util.js +594 -0
- package/.output/server/node_modules/source-map-js/package.json +71 -0
- package/.output/server/node_modules/source-map-js/source-map.js +8 -0
- package/.output/server/node_modules/tailwindcss/dist/chunk-DCG7AFIE.mjs +1 -0
- package/.output/server/node_modules/tailwindcss/dist/colors.mjs +1 -0
- package/.output/server/node_modules/tailwindcss/package.json +89 -0
- package/.output/server/node_modules/ufo/dist/index.mjs +645 -0
- package/.output/server/node_modules/ufo/package.json +48 -0
- package/.output/server/node_modules/unhead/dist/client.mjs +22 -0
- package/.output/server/node_modules/unhead/dist/index.mjs +52 -0
- package/.output/server/node_modules/unhead/dist/legacy.mjs +33 -0
- package/.output/server/node_modules/unhead/dist/minify.mjs +183 -0
- package/.output/server/node_modules/unhead/dist/parser.mjs +518 -0
- package/.output/server/node_modules/unhead/dist/plugins.mjs +631 -0
- package/.output/server/node_modules/unhead/dist/scripts.node.mjs +6 -0
- package/.output/server/node_modules/unhead/dist/server.mjs +99 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.BEmVMkeA.mjs +673 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.BGFxPGPQ.mjs +47 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.BQWSw36o.mjs +192 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.Bb4d5b9h.mjs +67 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.BdK3SLPN.mjs +585 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.Bf_fPVYA.mjs +6 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.Bm4Y6XQI.mjs +17 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.C3b2Ipoj.mjs +223 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.CGPOfp5O.mjs +32 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.CHEy9ana.mjs +7 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.CTjuIdzk.mjs +27 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.CfKy3Kuq.mjs +196 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.D7HkBzZn.mjs +59 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.DNKiVLV7.mjs +400 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.MC5RsXLj.mjs +19 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.jEy9BmRq.mjs +264 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.tQnRaXfX.mjs +240 -0
- package/.output/server/node_modules/unhead/dist/stream/client.mjs +28 -0
- package/.output/server/node_modules/unhead/dist/stream/iife.mjs +2 -0
- package/.output/server/node_modules/unhead/dist/stream/server.mjs +264 -0
- package/.output/server/node_modules/unhead/dist/utils.mjs +7 -0
- package/.output/server/node_modules/unhead/package.json +179 -0
- package/.output/server/node_modules/vue/dist/vue.cjs.js +80 -0
- package/.output/server/node_modules/vue/dist/vue.cjs.prod.js +66 -0
- package/.output/server/node_modules/vue/index.js +7 -0
- package/.output/server/node_modules/vue/index.mjs +1 -0
- package/.output/server/node_modules/vue/package.json +112 -0
- package/.output/server/node_modules/vue/server-renderer/index.mjs +1 -0
- package/.output/server/node_modules/vue-bundle-renderer/dist/runtime.mjs +278 -0
- package/.output/server/node_modules/vue-bundle-renderer/package.json +54 -0
- package/.output/server/node_modules/yocto-queue/index.js +90 -0
- package/.output/server/node_modules/yocto-queue/package.json +48 -0
- package/.output/server/node_modules/zod/index.js +4 -0
- package/.output/server/node_modules/zod/package.json +135 -0
- package/.output/server/node_modules/zod/v4/classic/checks.js +1 -0
- package/.output/server/node_modules/zod/v4/classic/coerce.js +17 -0
- package/.output/server/node_modules/zod/v4/classic/compat.js +31 -0
- package/.output/server/node_modules/zod/v4/classic/errors.js +48 -0
- package/.output/server/node_modules/zod/v4/classic/external.js +20 -0
- package/.output/server/node_modules/zod/v4/classic/from-json-schema.js +599 -0
- package/.output/server/node_modules/zod/v4/classic/iso.js +30 -0
- package/.output/server/node_modules/zod/v4/classic/package.json +7 -0
- package/.output/server/node_modules/zod/v4/classic/parse.js +15 -0
- package/.output/server/node_modules/zod/v4/classic/schemas.js +1395 -0
- package/.output/server/node_modules/zod/v4/core/api.js +1087 -0
- package/.output/server/node_modules/zod/v4/core/checks.js +575 -0
- package/.output/server/node_modules/zod/v4/core/core.js +78 -0
- package/.output/server/node_modules/zod/v4/core/doc.js +35 -0
- package/.output/server/node_modules/zod/v4/core/errors.js +185 -0
- package/.output/server/node_modules/zod/v4/core/index.js +16 -0
- package/.output/server/node_modules/zod/v4/core/json-schema-generator.js +95 -0
- package/.output/server/node_modules/zod/v4/core/json-schema-processors.js +601 -0
- package/.output/server/node_modules/zod/v4/core/json-schema.js +1 -0
- package/.output/server/node_modules/zod/v4/core/package.json +7 -0
- package/.output/server/node_modules/zod/v4/core/parse.js +93 -0
- package/.output/server/node_modules/zod/v4/core/regexes.js +139 -0
- package/.output/server/node_modules/zod/v4/core/registries.js +51 -0
- package/.output/server/node_modules/zod/v4/core/schemas.js +2239 -0
- package/.output/server/node_modules/zod/v4/core/to-json-schema.js +448 -0
- package/.output/server/node_modules/zod/v4/core/util.js +674 -0
- package/.output/server/node_modules/zod/v4/core/versions.js +5 -0
- package/.output/server/node_modules/zod/v4/locales/ar.js +106 -0
- package/.output/server/node_modules/zod/v4/locales/az.js +105 -0
- package/.output/server/node_modules/zod/v4/locales/be.js +156 -0
- package/.output/server/node_modules/zod/v4/locales/bg.js +120 -0
- package/.output/server/node_modules/zod/v4/locales/ca.js +107 -0
- package/.output/server/node_modules/zod/v4/locales/cs.js +111 -0
- package/.output/server/node_modules/zod/v4/locales/da.js +115 -0
- package/.output/server/node_modules/zod/v4/locales/de.js +108 -0
- package/.output/server/node_modules/zod/v4/locales/el.js +109 -0
- package/.output/server/node_modules/zod/v4/locales/en.js +113 -0
- package/.output/server/node_modules/zod/v4/locales/eo.js +109 -0
- package/.output/server/node_modules/zod/v4/locales/es.js +132 -0
- package/.output/server/node_modules/zod/v4/locales/fa.js +114 -0
- package/.output/server/node_modules/zod/v4/locales/fi.js +112 -0
- package/.output/server/node_modules/zod/v4/locales/fr-CA.js +107 -0
- package/.output/server/node_modules/zod/v4/locales/fr.js +125 -0
- package/.output/server/node_modules/zod/v4/locales/he.js +214 -0
- package/.output/server/node_modules/zod/v4/locales/hr.js +122 -0
- package/.output/server/node_modules/zod/v4/locales/hu.js +108 -0
- package/.output/server/node_modules/zod/v4/locales/hy.js +147 -0
- package/.output/server/node_modules/zod/v4/locales/id.js +106 -0
- package/.output/server/node_modules/zod/v4/locales/index.js +52 -0
- package/.output/server/node_modules/zod/v4/locales/is.js +109 -0
- package/.output/server/node_modules/zod/v4/locales/it.js +108 -0
- package/.output/server/node_modules/zod/v4/locales/ja.js +107 -0
- package/.output/server/node_modules/zod/v4/locales/ka.js +112 -0
- package/.output/server/node_modules/zod/v4/locales/kh.js +5 -0
- package/.output/server/node_modules/zod/v4/locales/km.js +110 -0
- package/.output/server/node_modules/zod/v4/locales/ko.js +111 -0
- package/.output/server/node_modules/zod/v4/locales/lt.js +203 -0
- package/.output/server/node_modules/zod/v4/locales/mk.js +109 -0
- package/.output/server/node_modules/zod/v4/locales/ms.js +107 -0
- package/.output/server/node_modules/zod/v4/locales/nl.js +110 -0
- package/.output/server/node_modules/zod/v4/locales/no.js +108 -0
- package/.output/server/node_modules/zod/v4/locales/ota.js +109 -0
- package/.output/server/node_modules/zod/v4/locales/package.json +7 -0
- package/.output/server/node_modules/zod/v4/locales/pl.js +109 -0
- package/.output/server/node_modules/zod/v4/locales/ps.js +114 -0
- package/.output/server/node_modules/zod/v4/locales/pt.js +108 -0
- package/.output/server/node_modules/zod/v4/locales/ro.js +119 -0
- package/.output/server/node_modules/zod/v4/locales/ru.js +156 -0
- package/.output/server/node_modules/zod/v4/locales/sl.js +109 -0
- package/.output/server/node_modules/zod/v4/locales/sv.js +110 -0
- package/.output/server/node_modules/zod/v4/locales/ta.js +110 -0
- package/.output/server/node_modules/zod/v4/locales/th.js +110 -0
- package/.output/server/node_modules/zod/v4/locales/tr.js +105 -0
- package/.output/server/node_modules/zod/v4/locales/ua.js +5 -0
- package/.output/server/node_modules/zod/v4/locales/uk.js +108 -0
- package/.output/server/node_modules/zod/v4/locales/ur.js +110 -0
- package/.output/server/node_modules/zod/v4/locales/uz.js +110 -0
- package/.output/server/node_modules/zod/v4/locales/vi.js +108 -0
- package/.output/server/node_modules/zod/v4/locales/yo.js +107 -0
- package/.output/server/node_modules/zod/v4/locales/zh-CN.js +109 -0
- package/.output/server/node_modules/zod/v4/locales/zh-TW.js +107 -0
- package/.output/server/package.json +37 -0
- package/LICENSE +3 -0
- package/README.md +125 -0
- package/dist/src/bbox.js +55 -0
- package/dist/src/cli.js +255 -0
- package/dist/src/config.js +56 -0
- package/dist/src/core/fetch-process.js +19 -0
- package/dist/src/core/grid-renderer.js +149 -0
- package/dist/src/core/lease.js +103 -0
- package/dist/src/core/paths.js +13 -0
- package/dist/src/core/png.js +192 -0
- package/dist/src/core/raster-style.js +33 -0
- package/dist/src/core/uomtiles.js +307 -0
- package/dist/src/fetcher.js +208 -0
- package/dist/src/geographic-grid.js +162 -0
- package/dist/src/grid-crawl.js +478 -0
- package/dist/src/mask-image.js +16 -0
- package/dist/src/official-grid.js +51 -0
- package/dist/src/quality.js +30 -0
- package/dist/src/token.js +206 -0
- package/package.json +68 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/favicon.svg +8 -0
- package/public/icon-192.png +0 -0
- package/public/icon-512.png +0 -0
- package/public/site.webmanifest +11 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { Pool } from 'undici';
|
|
2
|
+
import { DEFAULTS, UOM_BASE } from "./config.js";
|
|
3
|
+
export class AdaptiveController {
|
|
4
|
+
qps;
|
|
5
|
+
inflightCap;
|
|
6
|
+
inflightNow = 0;
|
|
7
|
+
waiters = [];
|
|
8
|
+
lastTokenAt = Date.now();
|
|
9
|
+
tokens;
|
|
10
|
+
rateLimitedUntil = 0;
|
|
11
|
+
lastEvalAt = 0;
|
|
12
|
+
samples = [];
|
|
13
|
+
log = [];
|
|
14
|
+
constructor(initialQps) {
|
|
15
|
+
this.qps = Math.max(DEFAULTS.qpsMin, Math.min(DEFAULTS.qpsMax, initialQps));
|
|
16
|
+
this.tokens = this.qps;
|
|
17
|
+
this.inflightCap = Math.max(DEFAULTS.ctlInflightMin, Math.min(DEFAULTS.ctlInflightMax, this.qps));
|
|
18
|
+
}
|
|
19
|
+
get currentQps() { return this.qps; }
|
|
20
|
+
get currentInflightCap() { return this.inflightCap; }
|
|
21
|
+
get currentInflight() { return this.inflightNow; }
|
|
22
|
+
/** Refill token bucket based on elapsed time. */
|
|
23
|
+
refill() {
|
|
24
|
+
const now = Date.now();
|
|
25
|
+
const dt = (now - this.lastTokenAt) / 1000;
|
|
26
|
+
this.lastTokenAt = now;
|
|
27
|
+
this.tokens = Math.min(this.qps, this.tokens + dt * this.qps);
|
|
28
|
+
}
|
|
29
|
+
/** Try to wake waiters. */
|
|
30
|
+
pump() {
|
|
31
|
+
this.refill();
|
|
32
|
+
const now = Date.now();
|
|
33
|
+
while (this.waiters.length > 0 && now >= this.rateLimitedUntil && this.tokens >= 1 && this.inflightNow < this.inflightCap) {
|
|
34
|
+
const waiter = this.waiters.shift();
|
|
35
|
+
if (waiter.signal?.aborted)
|
|
36
|
+
continue;
|
|
37
|
+
this.tokens -= 1;
|
|
38
|
+
this.inflightNow += 1;
|
|
39
|
+
if (waiter.onAbort)
|
|
40
|
+
waiter.signal?.removeEventListener('abort', waiter.onAbort);
|
|
41
|
+
waiter.resolve();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** Block until one token + inflight slot is available. */
|
|
45
|
+
async acquire(signal) {
|
|
46
|
+
if (signal?.aborted)
|
|
47
|
+
throw signal.reason instanceof Error ? signal.reason : new Error('request aborted');
|
|
48
|
+
return new Promise((resolve, reject) => {
|
|
49
|
+
const waiter = { resolve, reject, signal };
|
|
50
|
+
waiter.onAbort = () => {
|
|
51
|
+
const index = this.waiters.indexOf(waiter);
|
|
52
|
+
if (index >= 0)
|
|
53
|
+
this.waiters.splice(index, 1);
|
|
54
|
+
reject(signal?.reason instanceof Error ? signal.reason : new Error('request aborted'));
|
|
55
|
+
};
|
|
56
|
+
signal?.addEventListener('abort', waiter.onAbort, { once: true });
|
|
57
|
+
this.waiters.push(waiter);
|
|
58
|
+
this.pump();
|
|
59
|
+
if (!this.waiters.includes(waiter))
|
|
60
|
+
return;
|
|
61
|
+
const tick = () => {
|
|
62
|
+
if (!this.waiters.includes(waiter))
|
|
63
|
+
return;
|
|
64
|
+
this.pump();
|
|
65
|
+
if (!this.waiters.includes(waiter))
|
|
66
|
+
return;
|
|
67
|
+
setTimeout(tick, 25);
|
|
68
|
+
};
|
|
69
|
+
setTimeout(tick, 25);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/** Must be called for every acquired slot (in finally). */
|
|
73
|
+
release() {
|
|
74
|
+
this.inflightNow = Math.max(0, this.inflightNow - 1);
|
|
75
|
+
this.pump();
|
|
76
|
+
}
|
|
77
|
+
record(outcome, latencyMs) {
|
|
78
|
+
const now = Date.now();
|
|
79
|
+
this.samples.push({ at: now, outcome, latencyMs });
|
|
80
|
+
if (this.samples.length > DEFAULTS.ctlWindowSize)
|
|
81
|
+
this.samples.shift();
|
|
82
|
+
this.maybeEvaluate(now);
|
|
83
|
+
}
|
|
84
|
+
maybeEvaluate(now) {
|
|
85
|
+
if (now - this.lastEvalAt < DEFAULTS.ctlMinIntervalMs)
|
|
86
|
+
return;
|
|
87
|
+
if (this.samples.length < Math.min(50, DEFAULTS.ctlWindowSize / 4))
|
|
88
|
+
return;
|
|
89
|
+
this.lastEvalAt = now;
|
|
90
|
+
const total = this.samples.length;
|
|
91
|
+
let ok = 0, rl = 0, sf = 0;
|
|
92
|
+
const lats = [];
|
|
93
|
+
for (const s of this.samples) {
|
|
94
|
+
if (s.outcome === 'ok') {
|
|
95
|
+
ok++;
|
|
96
|
+
lats.push(s.latencyMs);
|
|
97
|
+
}
|
|
98
|
+
else if (s.outcome === 'rate_limit')
|
|
99
|
+
rl++;
|
|
100
|
+
else
|
|
101
|
+
sf++;
|
|
102
|
+
}
|
|
103
|
+
const okRate = ok / total;
|
|
104
|
+
const sfRate = sf / total;
|
|
105
|
+
lats.sort((a, b) => a - b);
|
|
106
|
+
const p95 = lats.length ? lats[Math.min(lats.length - 1, Math.floor(lats.length * 0.95))] : 0;
|
|
107
|
+
const oldQps = this.qps;
|
|
108
|
+
const oldInflight = this.inflightCap;
|
|
109
|
+
let verdict = 'hold';
|
|
110
|
+
let reason = `ok=${(okRate * 100).toFixed(1)}% sf=${(sfRate * 100).toFixed(1)}% rl=${rl} p95=${p95.toFixed(0)}ms`;
|
|
111
|
+
if (rl > 0) {
|
|
112
|
+
this.qps = Math.max(DEFAULTS.qpsMin, Math.floor(this.qps * DEFAULTS.ctlRateLimitFactor));
|
|
113
|
+
this.inflightCap = Math.max(DEFAULTS.ctlInflightMin, Math.floor(this.inflightCap * DEFAULTS.ctlRateLimitFactor));
|
|
114
|
+
this.rateLimitedUntil = now + 5_000;
|
|
115
|
+
verdict = 'decrease(rate_limit)';
|
|
116
|
+
}
|
|
117
|
+
else if (sfRate > 0.10) {
|
|
118
|
+
// 10% soft-fail tolerance — saturated connection pool flakes briefly
|
|
119
|
+
// when we hit the real ceiling; 5% was too jumpy and caused oscillation.
|
|
120
|
+
this.qps = Math.max(DEFAULTS.qpsMin, Math.floor(this.qps * DEFAULTS.ctlSoftBackoffFactor));
|
|
121
|
+
this.inflightCap = Math.max(DEFAULTS.ctlInflightMin, Math.floor(this.inflightCap * DEFAULTS.ctlSoftBackoffFactor));
|
|
122
|
+
verdict = 'decrease(soft_fail)';
|
|
123
|
+
}
|
|
124
|
+
else if (p95 > DEFAULTS.ctlTargetP95Ms * DEFAULTS.ctlP95Tolerance) {
|
|
125
|
+
this.qps = Math.max(DEFAULTS.qpsMin, Math.floor(this.qps * DEFAULTS.ctlSoftBackoffFactor));
|
|
126
|
+
this.inflightCap = Math.max(DEFAULTS.ctlInflightMin, Math.floor(this.inflightCap * DEFAULTS.ctlSoftBackoffFactor));
|
|
127
|
+
verdict = 'decrease(p95)';
|
|
128
|
+
}
|
|
129
|
+
else if (okRate >= 0.98 && p95 < DEFAULTS.ctlTargetP95Ms) {
|
|
130
|
+
this.qps = Math.min(DEFAULTS.qpsMax, Math.max(this.qps + 1, Math.round(this.qps * DEFAULTS.ctlIncFactor)));
|
|
131
|
+
this.inflightCap = Math.min(DEFAULTS.ctlInflightMax, Math.max(this.inflightCap + 1, Math.round(this.inflightCap * DEFAULTS.ctlIncFactor)));
|
|
132
|
+
verdict = 'increase';
|
|
133
|
+
}
|
|
134
|
+
if (this.qps !== oldQps || this.inflightCap !== oldInflight) {
|
|
135
|
+
this.tokens = Math.min(this.tokens, this.qps);
|
|
136
|
+
this.log.push({ at: now, qps: this.qps, inflightCap: this.inflightCap, verdict, reason });
|
|
137
|
+
const keep = Math.floor(this.samples.length / 2);
|
|
138
|
+
this.samples.splice(0, this.samples.length - keep);
|
|
139
|
+
console.log(`[ctl] ${verdict} qps ${oldQps}->${this.qps} inflight ${oldInflight}->${this.inflightCap} ${reason}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export class UomFetcher {
|
|
144
|
+
pool;
|
|
145
|
+
ctl;
|
|
146
|
+
total = 0;
|
|
147
|
+
ok = 0;
|
|
148
|
+
rateLimited = 0;
|
|
149
|
+
netErr = 0;
|
|
150
|
+
constructor(qpsStart = DEFAULTS.qpsStart) {
|
|
151
|
+
this.pool = new Pool(UOM_BASE, {
|
|
152
|
+
connections: DEFAULTS.ctlConnectionsMax,
|
|
153
|
+
pipelining: 1,
|
|
154
|
+
keepAliveTimeout: 30_000,
|
|
155
|
+
keepAliveMaxTimeout: 60_000,
|
|
156
|
+
});
|
|
157
|
+
this.ctl = new AdaptiveController(qpsStart);
|
|
158
|
+
}
|
|
159
|
+
async get(pathWithQuery, opts = {}) {
|
|
160
|
+
await this.ctl.acquire(opts.signal);
|
|
161
|
+
const start = Date.now();
|
|
162
|
+
this.total++;
|
|
163
|
+
let status = 0;
|
|
164
|
+
let contentType = null;
|
|
165
|
+
let body = Buffer.alloc(0);
|
|
166
|
+
let errMessage;
|
|
167
|
+
let outcome = 'soft_fail';
|
|
168
|
+
try {
|
|
169
|
+
const timeout = AbortSignal.timeout(opts.timeoutMs ?? DEFAULTS.perLayerTimeoutMs);
|
|
170
|
+
const signal = opts.signal ? AbortSignal.any([timeout, opts.signal]) : timeout;
|
|
171
|
+
const r = await this.pool.request({
|
|
172
|
+
path: pathWithQuery,
|
|
173
|
+
method: 'GET',
|
|
174
|
+
signal,
|
|
175
|
+
headers: opts.headers,
|
|
176
|
+
});
|
|
177
|
+
const chunks = [];
|
|
178
|
+
for await (const c of r.body)
|
|
179
|
+
chunks.push(c);
|
|
180
|
+
body = Buffer.concat(chunks);
|
|
181
|
+
status = r.statusCode;
|
|
182
|
+
contentType = r.headers['content-type'] ?? null;
|
|
183
|
+
if (status === 429 || status === 503) {
|
|
184
|
+
this.rateLimited++;
|
|
185
|
+
outcome = 'rate_limit';
|
|
186
|
+
}
|
|
187
|
+
else if (status >= 200 && status < 400 && body.length > 0) {
|
|
188
|
+
this.ok++;
|
|
189
|
+
outcome = 'ok';
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
outcome = 'soft_fail';
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (e) {
|
|
196
|
+
this.netErr++;
|
|
197
|
+
errMessage = e?.message ?? String(e);
|
|
198
|
+
outcome = 'soft_fail';
|
|
199
|
+
}
|
|
200
|
+
const latencyMs = Date.now() - start;
|
|
201
|
+
this.ctl.record(outcome, latencyMs);
|
|
202
|
+
this.ctl.release();
|
|
203
|
+
return { status, contentType, body, errMessage, latencyMs };
|
|
204
|
+
}
|
|
205
|
+
async close() {
|
|
206
|
+
await this.pool.close();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
export const GEOGRAPHIC_GRID_LEVEL = 18;
|
|
2
|
+
export const GEOGRAPHIC_GRID_STEP = 360 / 2 ** GEOGRAPHIC_GRID_LEVEL;
|
|
3
|
+
export function mercatorLatitude(globalY, worldSize) {
|
|
4
|
+
return 180 / Math.PI * Math.atan(Math.sinh(Math.PI - 2 * Math.PI * globalY / worldSize));
|
|
5
|
+
}
|
|
6
|
+
export function mercatorY(latitude, worldSize) {
|
|
7
|
+
const radians = latitude * Math.PI / 180;
|
|
8
|
+
return worldSize * (1 - Math.log(Math.tan(radians) + 1 / Math.cos(radians)) / Math.PI) / 2;
|
|
9
|
+
}
|
|
10
|
+
export function geographicGridLines(extent) {
|
|
11
|
+
const childrenPerSide = 2 ** (extent.sourceZ - extent.parentZ);
|
|
12
|
+
const worldSize = 256 * 2 ** extent.sourceZ;
|
|
13
|
+
const globalX0 = extent.parentX * childrenPerSide * 256;
|
|
14
|
+
const globalY0 = extent.parentY * childrenPerSide * 256;
|
|
15
|
+
const xPitch = worldSize / 2 ** GEOGRAPHIC_GRID_LEVEL;
|
|
16
|
+
const xLines = [];
|
|
17
|
+
for (let x = Math.floor(globalX0 / xPitch) * xPitch; x <= globalX0 + extent.width; x += xPitch) {
|
|
18
|
+
xLines.push(x - globalX0);
|
|
19
|
+
}
|
|
20
|
+
const latitudeTop = mercatorLatitude(globalY0, worldSize);
|
|
21
|
+
const latitudeBottom = mercatorLatitude(globalY0 + extent.width, worldSize);
|
|
22
|
+
const yLines = [];
|
|
23
|
+
for (let k = Math.ceil(latitudeTop / GEOGRAPHIC_GRID_STEP); k >= Math.floor(latitudeBottom / GEOGRAPHIC_GRID_STEP); k--) {
|
|
24
|
+
const y = mercatorY(k * GEOGRAPHIC_GRID_STEP, worldSize) - globalY0;
|
|
25
|
+
if (y >= -8 && y <= extent.width + 8)
|
|
26
|
+
yLines.push(y);
|
|
27
|
+
}
|
|
28
|
+
yLines.sort((a, b) => a - b);
|
|
29
|
+
return { xLines, yLines };
|
|
30
|
+
}
|
|
31
|
+
export function vectorizeGeographicGrid(mask, extent) {
|
|
32
|
+
if (mask.length !== extent.width * extent.width) {
|
|
33
|
+
throw new RangeError(`mask length ${mask.length} does not match ${extent.width}x${extent.width}`);
|
|
34
|
+
}
|
|
35
|
+
const { xLines, yLines } = geographicGridLines(extent);
|
|
36
|
+
const rows = yLines.length - 1;
|
|
37
|
+
const columns = xLines.length - 1;
|
|
38
|
+
const cells = new Uint8Array(rows * columns);
|
|
39
|
+
for (let row = 0; row < rows; row++)
|
|
40
|
+
for (let column = 0; column < columns; column++) {
|
|
41
|
+
const clippedX0 = Math.max(0, xLines[column]);
|
|
42
|
+
const clippedX1 = Math.min(extent.width, xLines[column + 1]);
|
|
43
|
+
const clippedY0 = Math.max(0, yLines[row]);
|
|
44
|
+
const clippedY1 = Math.min(extent.width, yLines[row + 1]);
|
|
45
|
+
if (clippedX0 >= clippedX1 || clippedY0 >= clippedY1)
|
|
46
|
+
continue;
|
|
47
|
+
const x = Math.min(extent.width - 1, Math.floor((clippedX0 + clippedX1) / 2));
|
|
48
|
+
const y = Math.min(extent.width - 1, Math.floor((clippedY0 + clippedY1) / 2));
|
|
49
|
+
if (mask[y * extent.width + x]) {
|
|
50
|
+
cells[row * columns + column] = 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const active = new Map();
|
|
54
|
+
const rects = [];
|
|
55
|
+
for (let row = 0; row < rows; row++) {
|
|
56
|
+
const runs = [];
|
|
57
|
+
let column = 0;
|
|
58
|
+
while (column < columns) {
|
|
59
|
+
if (!cells[row * columns + column]) {
|
|
60
|
+
column++;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const column0 = column;
|
|
64
|
+
while (column < columns && cells[row * columns + column])
|
|
65
|
+
column++;
|
|
66
|
+
runs.push([column0, column]);
|
|
67
|
+
}
|
|
68
|
+
const next = new Map();
|
|
69
|
+
for (const [col0, col1] of runs) {
|
|
70
|
+
const key = `${col0}:${col1}`;
|
|
71
|
+
const previous = active.get(key);
|
|
72
|
+
if (previous && previous.row1 === row) {
|
|
73
|
+
previous.row1 = row + 1;
|
|
74
|
+
next.set(key, previous);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
next.set(key, { col0, row0: row, col1, row1: row + 1 });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
for (const [key, rect] of active)
|
|
81
|
+
if (!next.has(key))
|
|
82
|
+
rects.push(rect);
|
|
83
|
+
active.clear();
|
|
84
|
+
for (const [key, rect] of next)
|
|
85
|
+
active.set(key, rect);
|
|
86
|
+
}
|
|
87
|
+
for (const rect of active.values())
|
|
88
|
+
rects.push(rect);
|
|
89
|
+
return { rects, xLines, yLines };
|
|
90
|
+
}
|
|
91
|
+
export function renderGeographicGrid(model, sourceWidth, targetWidth) {
|
|
92
|
+
const scale = targetWidth / sourceWidth;
|
|
93
|
+
const output = new Uint8Array(targetWidth * targetWidth);
|
|
94
|
+
for (const rect of model.rects) {
|
|
95
|
+
const x0 = Math.max(0, Math.round(model.xLines[rect.col0] * scale));
|
|
96
|
+
const y0 = Math.max(0, Math.round(model.yLines[rect.row0] * scale));
|
|
97
|
+
const x1 = Math.min(targetWidth, Math.round(model.xLines[rect.col1] * scale));
|
|
98
|
+
const y1 = Math.min(targetWidth, Math.round(model.yLines[rect.row1] * scale));
|
|
99
|
+
for (let y = y0; y < y1; y++)
|
|
100
|
+
output.fill(1, y * targetWidth + x0, y * targetWidth + x1);
|
|
101
|
+
}
|
|
102
|
+
return output;
|
|
103
|
+
}
|
|
104
|
+
export function renderGeographicGridTile(model, extent, targetZ, tileX, tileY) {
|
|
105
|
+
if (targetZ < extent.parentZ)
|
|
106
|
+
throw new RangeError('target tile must not be below the grid root zoom');
|
|
107
|
+
const rootScale = 2 ** (targetZ - extent.parentZ);
|
|
108
|
+
if (Math.floor(tileX / rootScale) !== extent.parentX || Math.floor(tileY / rootScale) !== extent.parentY) {
|
|
109
|
+
return new Uint8Array(256 * 256);
|
|
110
|
+
}
|
|
111
|
+
const scale = 2 ** (targetZ - extent.sourceZ);
|
|
112
|
+
const sourceRootSize = 256 * 2 ** (extent.sourceZ - extent.parentZ);
|
|
113
|
+
const sourceX0 = extent.parentX * sourceRootSize;
|
|
114
|
+
const sourceY0 = extent.parentY * sourceRootSize;
|
|
115
|
+
const tileX0 = tileX * 256;
|
|
116
|
+
const tileY0 = tileY * 256;
|
|
117
|
+
const output = new Uint8Array(256 * 256);
|
|
118
|
+
for (const rect of model.rects) {
|
|
119
|
+
const x0 = Math.max(0, Math.round((sourceX0 + model.xLines[rect.col0]) * scale) - tileX0);
|
|
120
|
+
const y0 = Math.max(0, Math.round((sourceY0 + model.yLines[rect.row0]) * scale) - tileY0);
|
|
121
|
+
const x1 = Math.min(256, Math.round((sourceX0 + model.xLines[rect.col1]) * scale) - tileX0);
|
|
122
|
+
const y1 = Math.min(256, Math.round((sourceY0 + model.yLines[rect.row1]) * scale) - tileY0);
|
|
123
|
+
if (x0 >= x1 || y0 >= y1)
|
|
124
|
+
continue;
|
|
125
|
+
for (let y = y0; y < y1; y++)
|
|
126
|
+
output.fill(1, y * 256 + x0, y * 256 + x1);
|
|
127
|
+
}
|
|
128
|
+
return output;
|
|
129
|
+
}
|
|
130
|
+
export function differenceStats(generated, official) {
|
|
131
|
+
if (generated.length !== official.length)
|
|
132
|
+
throw new RangeError('masks must have equal lengths');
|
|
133
|
+
let diff = 0;
|
|
134
|
+
let generatedOnly = 0;
|
|
135
|
+
let officialOnly = 0;
|
|
136
|
+
for (let i = 0; i < generated.length; i++)
|
|
137
|
+
if (generated[i] !== official[i]) {
|
|
138
|
+
diff++;
|
|
139
|
+
if (generated[i])
|
|
140
|
+
generatedOnly++;
|
|
141
|
+
else
|
|
142
|
+
officialOnly++;
|
|
143
|
+
}
|
|
144
|
+
return { diff, generatedOnly, officialOnly, rate: diff / generated.length };
|
|
145
|
+
}
|
|
146
|
+
export function auditGridAlignedEdges(mask, width, height, xLines, yLines) {
|
|
147
|
+
if (mask.length !== width * height)
|
|
148
|
+
throw new RangeError(`mask length ${mask.length} does not match ${width}x${height}`);
|
|
149
|
+
const allowedX = new Set(xLines);
|
|
150
|
+
const allowedY = new Set(yLines);
|
|
151
|
+
let offGridVerticalTransitions = 0;
|
|
152
|
+
let offGridHorizontalTransitions = 0;
|
|
153
|
+
for (let y = 0; y < height; y++)
|
|
154
|
+
for (let x = 0; x < width; x++) {
|
|
155
|
+
const index = y * width + x;
|
|
156
|
+
if (x > 0 && mask[index] !== mask[index - 1] && !allowedX.has(x))
|
|
157
|
+
offGridVerticalTransitions++;
|
|
158
|
+
if (y > 0 && mask[index] !== mask[index - width] && !allowedY.has(y))
|
|
159
|
+
offGridHorizontalTransitions++;
|
|
160
|
+
}
|
|
161
|
+
return { offGridVerticalTransitions, offGridHorizontalTransitions };
|
|
162
|
+
}
|