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,48 @@
|
|
|
1
|
+
import { getEmojiSequenceFromString, getUnqualifiedEmojiSequence } from "./cleanup.js";
|
|
2
|
+
import { getEmojiSequenceKeyword } from "./format.js";
|
|
3
|
+
import { parseEmojiTestFile } from "./test/parse.js";
|
|
4
|
+
import { getQualifiedEmojiVariations } from "./test/variations.js";
|
|
5
|
+
import { findMissingEmojis } from "./test/missing.js";
|
|
6
|
+
import { createOptimisedRegexForEmojiSequences } from "./regex/create.js";
|
|
7
|
+
import { combineSimilarEmojiTestData } from "./test/similar.js";
|
|
8
|
+
import { getEmojiTestDataTree } from "./test/tree.js";
|
|
9
|
+
/**
|
|
10
|
+
* Prepare emoji for icons list
|
|
11
|
+
*
|
|
12
|
+
* Test data should be fetched from 'https://unicode.org/Public/emoji/17.0/emoji-test.txt'
|
|
13
|
+
* It is used to detect missing emojis and optimise regular expression
|
|
14
|
+
*/
|
|
15
|
+
function prepareEmojiForIconsList(icons, rawTestData) {
|
|
16
|
+
const testData = rawTestData ? parseEmojiTestFile(rawTestData) : void 0;
|
|
17
|
+
let iconsList = [];
|
|
18
|
+
for (const char in icons) {
|
|
19
|
+
const sequence = getEmojiSequenceFromString(char);
|
|
20
|
+
iconsList.push({
|
|
21
|
+
icon: icons[char],
|
|
22
|
+
sequence
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
iconsList = getQualifiedEmojiVariations(iconsList);
|
|
26
|
+
if (testData) iconsList = iconsList.concat(findMissingEmojis(iconsList, getEmojiTestDataTree(combineSimilarEmojiTestData(testData))));
|
|
27
|
+
const preparedIcons = iconsList.map((item) => {
|
|
28
|
+
const sequence = getEmojiSequenceKeyword(getUnqualifiedEmojiSequence(item.sequence));
|
|
29
|
+
return {
|
|
30
|
+
icon: item.icon,
|
|
31
|
+
sequence
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
regex: createOptimisedRegexForEmojiSequences(iconsList.map((item) => item.sequence)),
|
|
36
|
+
icons: preparedIcons
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Prepare emoji for an icon set
|
|
41
|
+
*
|
|
42
|
+
* Test data should be fetched from 'https://unicode.org/Public/emoji/15.1/emoji-test.txt'
|
|
43
|
+
* It is used to detect missing emojis and optimise regular expression
|
|
44
|
+
*/
|
|
45
|
+
function prepareEmojiForIconSet(iconSet, rawTestData) {
|
|
46
|
+
return prepareEmojiForIconsList(iconSet.chars || {}, rawTestData);
|
|
47
|
+
}
|
|
48
|
+
export { prepareEmojiForIconSet, prepareEmojiForIconsList };
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert number to string
|
|
3
|
+
*/
|
|
4
|
+
function toString(number) {
|
|
5
|
+
if (number < 255) {
|
|
6
|
+
if (number > 32 && number < 127) {
|
|
7
|
+
const char = String.fromCharCode(number);
|
|
8
|
+
if (number > 47 && number < 58 || number > 64 && number < 91 || number > 94 && number < 123) return char;
|
|
9
|
+
return "\\" + char;
|
|
10
|
+
}
|
|
11
|
+
return "\\x" + (number < 16 ? "0" : "") + number.toString(16).toUpperCase();
|
|
12
|
+
}
|
|
13
|
+
return "\\u" + number.toString(16).toUpperCase();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Typescript stuff
|
|
17
|
+
*/
|
|
18
|
+
function assertNever(v) {}
|
|
19
|
+
/**
|
|
20
|
+
* Wrap regex in group
|
|
21
|
+
*/
|
|
22
|
+
function wrapRegexInGroup(regex) {
|
|
23
|
+
return "(?:" + regex + ")";
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Update UTF16 item, return regex
|
|
27
|
+
*/
|
|
28
|
+
function updateUTF16EmojiRegexItem(item) {
|
|
29
|
+
const numbers = item.numbers;
|
|
30
|
+
if (numbers.length === 1) {
|
|
31
|
+
const num = numbers[0];
|
|
32
|
+
return item.regex = toString(num);
|
|
33
|
+
}
|
|
34
|
+
numbers.sort((a, b) => a - b);
|
|
35
|
+
const chars = [];
|
|
36
|
+
let range = null;
|
|
37
|
+
const addRange = () => {
|
|
38
|
+
if (range) {
|
|
39
|
+
const { start, last, numbers } = range;
|
|
40
|
+
range = null;
|
|
41
|
+
if (last > start + 1) chars.push(toString(start) + "-" + toString(last));
|
|
42
|
+
else for (let i = 0; i < numbers.length; i++) chars.push(toString(numbers[i]));
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
for (let i = 0; i < numbers.length; i++) {
|
|
46
|
+
const num = numbers[i];
|
|
47
|
+
if (range) {
|
|
48
|
+
if (range.last === num) continue;
|
|
49
|
+
if (range.last === num - 1) {
|
|
50
|
+
range.numbers.push(num);
|
|
51
|
+
range.last = num;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
addRange();
|
|
56
|
+
range = {
|
|
57
|
+
start: num,
|
|
58
|
+
last: num,
|
|
59
|
+
numbers: [num]
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
addRange();
|
|
63
|
+
if (!chars.length) throw new Error("Unexpected empty range");
|
|
64
|
+
return item.regex = "[" + chars.join("") + "]";
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create UTF-16 regex
|
|
68
|
+
*/
|
|
69
|
+
function createUTF16EmojiRegexItem(numbers) {
|
|
70
|
+
const result = {
|
|
71
|
+
type: "utf16",
|
|
72
|
+
regex: "",
|
|
73
|
+
numbers,
|
|
74
|
+
length: 1,
|
|
75
|
+
group: true
|
|
76
|
+
};
|
|
77
|
+
updateUTF16EmojiRegexItem(result);
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Update sequence regex. Does not update group
|
|
82
|
+
*/
|
|
83
|
+
function updateSequenceEmojiRegexItem(item) {
|
|
84
|
+
return item.regex = item.items.map((childItem) => {
|
|
85
|
+
if (!childItem.group && childItem.type === "set") return wrapRegexInGroup(childItem.regex);
|
|
86
|
+
return childItem.regex;
|
|
87
|
+
}).join("");
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create sequence regex
|
|
91
|
+
*/
|
|
92
|
+
function createSequenceEmojiRegexItem(sequence, numbers) {
|
|
93
|
+
let items = [];
|
|
94
|
+
sequence.forEach((item) => {
|
|
95
|
+
if (item.type === "sequence") items = items.concat(item.items);
|
|
96
|
+
else items.push(item);
|
|
97
|
+
});
|
|
98
|
+
if (!items.length) throw new Error("Empty sequence");
|
|
99
|
+
const result = {
|
|
100
|
+
type: "sequence",
|
|
101
|
+
items,
|
|
102
|
+
regex: "",
|
|
103
|
+
length: items.reduce((length, item) => item.length + length, 0),
|
|
104
|
+
group: false
|
|
105
|
+
};
|
|
106
|
+
if (sequence.length === 1) {
|
|
107
|
+
const firstItem = sequence[0];
|
|
108
|
+
result.group = firstItem.group;
|
|
109
|
+
if (firstItem.type !== "optional") {
|
|
110
|
+
const numbers = firstItem.numbers;
|
|
111
|
+
if (numbers) result.numbers = numbers;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (numbers) result.numbers = numbers;
|
|
115
|
+
updateSequenceEmojiRegexItem(result);
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Update set regex and group
|
|
120
|
+
*/
|
|
121
|
+
function updateSetEmojiRegexItem(item) {
|
|
122
|
+
if (item.sets.length === 1) {
|
|
123
|
+
const firstItem = item.sets[0];
|
|
124
|
+
item.group = firstItem.group;
|
|
125
|
+
return item.regex = firstItem.regex;
|
|
126
|
+
}
|
|
127
|
+
item.group = false;
|
|
128
|
+
return item.regex = item.sets.map((childItem) => childItem.regex).join("|");
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create set regex
|
|
132
|
+
*/
|
|
133
|
+
function createSetEmojiRegexItem(set) {
|
|
134
|
+
let sets = [];
|
|
135
|
+
let numbers = [];
|
|
136
|
+
set.forEach((item) => {
|
|
137
|
+
if (item.type === "set") sets = sets.concat(item.sets);
|
|
138
|
+
else sets.push(item);
|
|
139
|
+
if (numbers) if (item.type === "optional" || !item.numbers) numbers = null;
|
|
140
|
+
else numbers = [...numbers, ...item.numbers];
|
|
141
|
+
});
|
|
142
|
+
sets.sort((a, b) => {
|
|
143
|
+
if (a.length === b.length) return a.regex.localeCompare(b.regex);
|
|
144
|
+
return b.length - a.length;
|
|
145
|
+
});
|
|
146
|
+
const result = {
|
|
147
|
+
type: "set",
|
|
148
|
+
sets,
|
|
149
|
+
regex: "",
|
|
150
|
+
length: sets.reduce((length, item) => length ? Math.min(length, item.length) : item.length, 0),
|
|
151
|
+
group: false
|
|
152
|
+
};
|
|
153
|
+
if (numbers) result.numbers = numbers;
|
|
154
|
+
if (set.length === 1) result.group = set[0].group;
|
|
155
|
+
updateSetEmojiRegexItem(result);
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Update optional regex
|
|
160
|
+
*/
|
|
161
|
+
function updateOptionalEmojiRegexItem(item) {
|
|
162
|
+
const childItem = item.item;
|
|
163
|
+
return item.regex = (childItem.group ? childItem.regex : wrapRegexInGroup(childItem.regex)) + "?";
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Create optional item
|
|
167
|
+
*/
|
|
168
|
+
function createOptionalEmojiRegexItem(item) {
|
|
169
|
+
if (item.type === "optional") return item;
|
|
170
|
+
const result = {
|
|
171
|
+
type: "optional",
|
|
172
|
+
item,
|
|
173
|
+
regex: "",
|
|
174
|
+
length: item.length,
|
|
175
|
+
group: true
|
|
176
|
+
};
|
|
177
|
+
updateOptionalEmojiRegexItem(result);
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Clone item
|
|
182
|
+
*/
|
|
183
|
+
function cloneEmojiRegexItem(item, shallow = false) {
|
|
184
|
+
const result = { ...item };
|
|
185
|
+
if (result.type !== "optional" && result.numbers) result.numbers = [...result.numbers];
|
|
186
|
+
switch (result.type) {
|
|
187
|
+
case "utf16": break;
|
|
188
|
+
case "sequence":
|
|
189
|
+
if (shallow) result.items = [...result.items];
|
|
190
|
+
else result.items = result.items.map((item) => cloneEmojiRegexItem(item, false));
|
|
191
|
+
break;
|
|
192
|
+
case "set":
|
|
193
|
+
if (shallow) result.sets = [...result.sets];
|
|
194
|
+
else result.sets = result.sets.map((item) => cloneEmojiRegexItem(item, false));
|
|
195
|
+
break;
|
|
196
|
+
case "optional":
|
|
197
|
+
if (!shallow) result.item = cloneEmojiRegexItem(result.item, false);
|
|
198
|
+
break;
|
|
199
|
+
default: assertNever(result);
|
|
200
|
+
}
|
|
201
|
+
return result;
|
|
202
|
+
}
|
|
203
|
+
export { cloneEmojiRegexItem, createOptionalEmojiRegexItem, createSequenceEmojiRegexItem, createSetEmojiRegexItem, createUTF16EmojiRegexItem, updateOptionalEmojiRegexItem, updateSequenceEmojiRegexItem, updateSetEmojiRegexItem, updateUTF16EmojiRegexItem, wrapRegexInGroup };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { convertEmojiSequenceToUTF32 } from "../convert.js";
|
|
2
|
+
import { getSequenceFromEmojiStringOrKeyword } from "../cleanup.js";
|
|
3
|
+
import { getQualifiedEmojiVariations } from "../test/variations.js";
|
|
4
|
+
import { createEmojisTree, parseEmojiTree } from "./tree.js";
|
|
5
|
+
/**
|
|
6
|
+
* Create optimised regex
|
|
7
|
+
*/
|
|
8
|
+
function createOptimisedRegexForEmojiSequences(sequences) {
|
|
9
|
+
sequences = sequences.map((item) => convertEmojiSequenceToUTF32(item));
|
|
10
|
+
return parseEmojiTree(createEmojisTree(sequences)).regex;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create optimised regex for emojis
|
|
14
|
+
*
|
|
15
|
+
* First parameter is array of emojis, entry can be either list of
|
|
16
|
+
* code points or emoji sequence as a string
|
|
17
|
+
*
|
|
18
|
+
* Examples of acceptable strings (case insensitive):
|
|
19
|
+
* '1F636 200D 1F32B FE0F' - space separated UTF32 sequence
|
|
20
|
+
* '1f636-200d-1f32b-fe0f' - dash separated UTF32 sequence
|
|
21
|
+
* 'd83d-de36-200d-d83c-df2b-fe0f' - dash separated UTF16 sequence
|
|
22
|
+
* '\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B\\uFE0F' - UTF16 sequence escaped with '\\u'
|
|
23
|
+
*
|
|
24
|
+
* All examples above refer to the same emoji and will generate the same regex result
|
|
25
|
+
*/
|
|
26
|
+
function createOptimisedRegex(emojis) {
|
|
27
|
+
let sequences = emojis.map((item) => typeof item === "string" ? getSequenceFromEmojiStringOrKeyword(item) : item);
|
|
28
|
+
sequences = getQualifiedEmojiVariations(sequences.map((sequence) => {
|
|
29
|
+
return { sequence };
|
|
30
|
+
})).map((item) => item.sequence);
|
|
31
|
+
return createOptimisedRegexForEmojiSequences(sequences);
|
|
32
|
+
}
|
|
33
|
+
export { createOptimisedRegex, createOptimisedRegexForEmojiSequences };
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import "../data.js";
|
|
2
|
+
import { splitUTF32Number } from "../convert.js";
|
|
3
|
+
import { createOptionalEmojiRegexItem, createSequenceEmojiRegexItem, createSetEmojiRegexItem, createUTF16EmojiRegexItem } from "./base.js";
|
|
4
|
+
/**
|
|
5
|
+
* Create regex item for set of numbers
|
|
6
|
+
*/
|
|
7
|
+
function createEmojiRegexItemForNumbers(numbers) {
|
|
8
|
+
const utf32 = [];
|
|
9
|
+
const utf16 = [];
|
|
10
|
+
numbers.sort((a, b) => a - b);
|
|
11
|
+
let lastNumber;
|
|
12
|
+
for (let i = 0; i < numbers.length; i++) {
|
|
13
|
+
const number = numbers[i];
|
|
14
|
+
if (number === lastNumber) continue;
|
|
15
|
+
lastNumber = number;
|
|
16
|
+
const split = splitUTF32Number(number);
|
|
17
|
+
if (!split) {
|
|
18
|
+
utf16.push(number);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const [first, second] = split;
|
|
22
|
+
const item = utf32.find((item) => item.first === first);
|
|
23
|
+
if (item) {
|
|
24
|
+
item.second.push(second);
|
|
25
|
+
item.numbers.push(number);
|
|
26
|
+
} else utf32.push({
|
|
27
|
+
first,
|
|
28
|
+
second: [second],
|
|
29
|
+
numbers: [number]
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const results = [];
|
|
33
|
+
if (utf16.length) results.push(createUTF16EmojiRegexItem(utf16));
|
|
34
|
+
if (utf32.length) {
|
|
35
|
+
const utf32Set = [];
|
|
36
|
+
for (let i = 0; i < utf32.length; i++) {
|
|
37
|
+
const item = utf32[i];
|
|
38
|
+
const secondRegex = createUTF16EmojiRegexItem(item.second);
|
|
39
|
+
const listItem = utf32Set.find((item) => item.second.regex === secondRegex.regex);
|
|
40
|
+
if (listItem) {
|
|
41
|
+
listItem.first.push(item.first);
|
|
42
|
+
listItem.numbers = [...listItem.numbers, ...item.numbers];
|
|
43
|
+
} else utf32Set.push({
|
|
44
|
+
second: secondRegex,
|
|
45
|
+
first: [item.first],
|
|
46
|
+
numbers: [...item.numbers]
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
for (let i = 0; i < utf32Set.length; i++) {
|
|
50
|
+
const item = utf32Set[i];
|
|
51
|
+
const firstRegex = createUTF16EmojiRegexItem(item.first);
|
|
52
|
+
const secondRegex = item.second;
|
|
53
|
+
results.push(createSequenceEmojiRegexItem([firstRegex, secondRegex], item.numbers));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return results.length === 1 ? results[0] : createSetEmojiRegexItem(results);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create sequence of numbers
|
|
60
|
+
*/
|
|
61
|
+
function createRegexForNumbersSequence(numbers, optionalVariations = true) {
|
|
62
|
+
const items = [];
|
|
63
|
+
for (let i = 0; i < numbers.length; i++) {
|
|
64
|
+
const num = numbers[i];
|
|
65
|
+
const split = splitUTF32Number(num);
|
|
66
|
+
if (!split) {
|
|
67
|
+
const item = createUTF16EmojiRegexItem([num]);
|
|
68
|
+
if (optionalVariations && num === 65039) items.push(createOptionalEmojiRegexItem(item));
|
|
69
|
+
else items.push(item);
|
|
70
|
+
} else {
|
|
71
|
+
items.push(createUTF16EmojiRegexItem([split[0]]));
|
|
72
|
+
items.push(createUTF16EmojiRegexItem([split[1]]));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (items.length === 1) return items[0];
|
|
76
|
+
const result = createSequenceEmojiRegexItem(items);
|
|
77
|
+
if (numbers.length === 1 && items[0].type === "utf16") result.numbers = [...numbers];
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Attempt to optimise numbers in a set
|
|
82
|
+
*/
|
|
83
|
+
function optimiseNumbersSet(set) {
|
|
84
|
+
const mandatoryMatches = {
|
|
85
|
+
numbers: [],
|
|
86
|
+
items: []
|
|
87
|
+
};
|
|
88
|
+
const optionalMatches = {
|
|
89
|
+
numbers: [],
|
|
90
|
+
items: []
|
|
91
|
+
};
|
|
92
|
+
const filteredItems = set.sets.filter((item) => {
|
|
93
|
+
if (item.type === "optional") {
|
|
94
|
+
const parentItem = item.item;
|
|
95
|
+
if (parentItem.numbers) {
|
|
96
|
+
optionalMatches.items.push(item);
|
|
97
|
+
optionalMatches.numbers = optionalMatches.numbers.concat(parentItem.numbers);
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
if (item.numbers) {
|
|
103
|
+
mandatoryMatches.items.push(item);
|
|
104
|
+
mandatoryMatches.numbers = mandatoryMatches.numbers.concat(item.numbers);
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
});
|
|
109
|
+
if (mandatoryMatches.items.length + optionalMatches.items.length < 2) return set;
|
|
110
|
+
const optionalNumbers = new Set(optionalMatches.numbers);
|
|
111
|
+
let foundMatches = false;
|
|
112
|
+
mandatoryMatches.numbers = mandatoryMatches.numbers.filter((number) => {
|
|
113
|
+
if (optionalNumbers.has(number)) {
|
|
114
|
+
foundMatches = true;
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
});
|
|
119
|
+
if (mandatoryMatches.items.length) {
|
|
120
|
+
if (!foundMatches && mandatoryMatches.items.length === 1) filteredItems.push(mandatoryMatches.items[0]);
|
|
121
|
+
else if (mandatoryMatches.numbers.length) filteredItems.push(createEmojiRegexItemForNumbers(mandatoryMatches.numbers));
|
|
122
|
+
}
|
|
123
|
+
switch (optionalMatches.items.length) {
|
|
124
|
+
case 0: break;
|
|
125
|
+
case 1:
|
|
126
|
+
filteredItems.push(optionalMatches.items[0]);
|
|
127
|
+
break;
|
|
128
|
+
default: filteredItems.push(createOptionalEmojiRegexItem(createEmojiRegexItemForNumbers(optionalMatches.numbers)));
|
|
129
|
+
}
|
|
130
|
+
return filteredItems.length === 1 ? filteredItems[0] : createSetEmojiRegexItem(filteredItems);
|
|
131
|
+
}
|
|
132
|
+
export { createEmojiRegexItemForNumbers, createRegexForNumbersSequence, optimiseNumbersSet };
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { cloneEmojiRegexItem, createOptionalEmojiRegexItem, createSequenceEmojiRegexItem, createSetEmojiRegexItem } from "./base.js";
|
|
2
|
+
import { optimiseNumbersSet } from "./numbers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Typescript stuff
|
|
5
|
+
*/
|
|
6
|
+
function assertNever(v) {}
|
|
7
|
+
/**
|
|
8
|
+
* Find similar item sequences
|
|
9
|
+
*
|
|
10
|
+
* Returns sequence(s) with highest score. Only one of results should be
|
|
11
|
+
* applied to items. If there are multiple sequences, clone items list,
|
|
12
|
+
* attempt to apply each sequence, run further optimisations on each fork
|
|
13
|
+
* and see which one returns better result.
|
|
14
|
+
*
|
|
15
|
+
* Returns undefined if no common sequences found
|
|
16
|
+
*/
|
|
17
|
+
function findSimilarRegexItemSequences(items) {
|
|
18
|
+
const startRegex = Object.create(null);
|
|
19
|
+
const endRegex = Object.create(null);
|
|
20
|
+
const addMapItem = (target, index, regex, slice) => {
|
|
21
|
+
if (!target[regex]) {
|
|
22
|
+
target[regex] = {
|
|
23
|
+
score: 0,
|
|
24
|
+
slices: [{
|
|
25
|
+
index,
|
|
26
|
+
slice
|
|
27
|
+
}]
|
|
28
|
+
};
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const item = target[regex];
|
|
32
|
+
item.score += regex.length;
|
|
33
|
+
item.slices.push({
|
|
34
|
+
index,
|
|
35
|
+
slice
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
for (let index = 0; index < items.length; index++) {
|
|
39
|
+
const baseItem = items[index];
|
|
40
|
+
switch (baseItem.type) {
|
|
41
|
+
case "optional":
|
|
42
|
+
case "utf16":
|
|
43
|
+
addMapItem(startRegex, index, baseItem.regex, "full");
|
|
44
|
+
addMapItem(endRegex, index, baseItem.regex, "full");
|
|
45
|
+
break;
|
|
46
|
+
case "sequence": {
|
|
47
|
+
addMapItem(startRegex, index, baseItem.regex, "full");
|
|
48
|
+
addMapItem(endRegex, index, baseItem.regex, "full");
|
|
49
|
+
const sequence = baseItem.items;
|
|
50
|
+
for (let i = 1; i < sequence.length; i++) {
|
|
51
|
+
const startSequence = createSequenceEmojiRegexItem(sequence.slice(0, i));
|
|
52
|
+
addMapItem(startRegex, index, startSequence.regex, i);
|
|
53
|
+
const endSequence = createSequenceEmojiRegexItem(sequence.slice(i));
|
|
54
|
+
addMapItem(endRegex, index, endSequence.regex, i);
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case "set": throw new Error("Unexpected set within a set");
|
|
59
|
+
default: assertNever(baseItem);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
let result;
|
|
63
|
+
const checkResults = (target, type) => {
|
|
64
|
+
for (const regex in target) {
|
|
65
|
+
const item = target[regex];
|
|
66
|
+
if (!item.score) continue;
|
|
67
|
+
if (!result || result.score < item.score) {
|
|
68
|
+
result = {
|
|
69
|
+
score: item.score,
|
|
70
|
+
sequences: [{
|
|
71
|
+
type,
|
|
72
|
+
slices: item.slices
|
|
73
|
+
}]
|
|
74
|
+
};
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (result.score === item.score) result.sequences.push({
|
|
78
|
+
type,
|
|
79
|
+
slices: item.slices
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
checkResults(startRegex, "start");
|
|
84
|
+
checkResults(endRegex, "end");
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Merge similar sequences
|
|
89
|
+
*
|
|
90
|
+
* Accepts callback to run optimisation on created subset
|
|
91
|
+
*/
|
|
92
|
+
function mergeSimilarRegexItemSequences(items, merge, optimise) {
|
|
93
|
+
const { type, slices } = merge;
|
|
94
|
+
const indexes = /* @__PURE__ */ new Set();
|
|
95
|
+
let hasFullSequence = false;
|
|
96
|
+
let longestMatch = 0;
|
|
97
|
+
let longestMatchIndex = -1;
|
|
98
|
+
const differentSequences = [];
|
|
99
|
+
for (let i = 0; i < slices.length; i++) {
|
|
100
|
+
const { index, slice } = slices[i];
|
|
101
|
+
const item = items[index];
|
|
102
|
+
let length;
|
|
103
|
+
if (slice === "full") {
|
|
104
|
+
hasFullSequence = true;
|
|
105
|
+
if (item.type === "sequence") length = item.items.length;
|
|
106
|
+
else length = 1;
|
|
107
|
+
} else {
|
|
108
|
+
if (item.type !== "sequence") throw new Error(`Unexpected partial match for type "${item.type}"`);
|
|
109
|
+
length = type === "start" ? slice : item.items.length - slice;
|
|
110
|
+
differentSequences.push(type === "start" ? item.items.slice(slice) : item.items.slice(0, slice));
|
|
111
|
+
}
|
|
112
|
+
if (length > longestMatch) {
|
|
113
|
+
longestMatchIndex = index;
|
|
114
|
+
longestMatch = length;
|
|
115
|
+
}
|
|
116
|
+
indexes.add(index);
|
|
117
|
+
}
|
|
118
|
+
if (longestMatch < 1 || longestMatchIndex < 0) throw new Error("Cannot find common sequence");
|
|
119
|
+
const commonItem = items[longestMatchIndex];
|
|
120
|
+
let sequence;
|
|
121
|
+
if (commonItem.type !== "sequence") {
|
|
122
|
+
if (longestMatch !== 1) throw new Error("Something went wrong. Cannot have long match in non-sequence");
|
|
123
|
+
sequence = [commonItem];
|
|
124
|
+
} else sequence = type === "start" ? commonItem.items.slice(0, longestMatch) : commonItem.items.slice(commonItem.items.length - longestMatch);
|
|
125
|
+
const setItems = [];
|
|
126
|
+
for (let i = 0; i < differentSequences.length; i++) {
|
|
127
|
+
const list = differentSequences[i];
|
|
128
|
+
if (list.length === 1) setItems.push(list[0]);
|
|
129
|
+
else setItems.push(createSequenceEmojiRegexItem(list));
|
|
130
|
+
}
|
|
131
|
+
const set = createSetEmojiRegexItem(setItems);
|
|
132
|
+
let mergedChunk = set.sets.length === 1 ? set.sets[0] : optimise ? optimise(set) : set;
|
|
133
|
+
if (hasFullSequence) mergedChunk = createOptionalEmojiRegexItem(mergedChunk);
|
|
134
|
+
sequence[type === "start" ? "push" : "unshift"](mergedChunk);
|
|
135
|
+
return [createSequenceEmojiRegexItem(sequence), ...items.filter((item, index) => !indexes.has(index))];
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Merge similar items
|
|
139
|
+
*/
|
|
140
|
+
function mergeSimilarItemsInSet(set) {
|
|
141
|
+
const updatedSet = optimiseNumbersSet(set);
|
|
142
|
+
if (updatedSet.type !== "set") return updatedSet;
|
|
143
|
+
set = updatedSet;
|
|
144
|
+
let merges;
|
|
145
|
+
while (merges = findSimilarRegexItemSequences(set.sets)) {
|
|
146
|
+
const sequences = merges.sequences;
|
|
147
|
+
if (sequences.length === 1) {
|
|
148
|
+
const merged = mergeSimilarRegexItemSequences(set.sets.map((item) => cloneEmojiRegexItem(item, true)), sequences[0], mergeSimilarItemsInSet);
|
|
149
|
+
if (merged.length === 1) return merged[0];
|
|
150
|
+
set = createSetEmojiRegexItem(merged);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
let newItem;
|
|
154
|
+
for (let i = 0; i < sequences.length; i++) {
|
|
155
|
+
const merged = mergeSimilarRegexItemSequences(set.sets.map((item) => cloneEmojiRegexItem(item, true)), sequences[i], mergeSimilarItemsInSet);
|
|
156
|
+
const mergedItem = merged.length === 1 ? merged[0] : createSetEmojiRegexItem(merged);
|
|
157
|
+
if (!newItem || mergedItem.regex.length < newItem.regex.length) newItem = mergedItem;
|
|
158
|
+
}
|
|
159
|
+
if (!newItem) throw new Error("Empty sequences list");
|
|
160
|
+
if (newItem.type !== "set") return newItem;
|
|
161
|
+
set = newItem;
|
|
162
|
+
}
|
|
163
|
+
return set;
|
|
164
|
+
}
|
|
165
|
+
export { findSimilarRegexItemSequences, mergeSimilarItemsInSet, mergeSimilarRegexItemSequences };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { joinerEmoji } from "../data.js";
|
|
2
|
+
import { convertEmojiSequenceToUTF32 } from "../convert.js";
|
|
3
|
+
import { splitEmojiSequences } from "../cleanup.js";
|
|
4
|
+
import { createOptionalEmojiRegexItem, createSequenceEmojiRegexItem, createSetEmojiRegexItem, createUTF16EmojiRegexItem } from "./base.js";
|
|
5
|
+
import { createRegexForNumbersSequence } from "./numbers.js";
|
|
6
|
+
import { mergeSimilarItemsInSet } from "./similar.js";
|
|
7
|
+
/**
|
|
8
|
+
* Create tree
|
|
9
|
+
*/
|
|
10
|
+
function createEmojisTree(sequences) {
|
|
11
|
+
const root = [];
|
|
12
|
+
for (let i = 0; i < sequences.length; i++) {
|
|
13
|
+
const split = splitEmojiSequences(convertEmojiSequenceToUTF32(sequences[i]));
|
|
14
|
+
let parent = root;
|
|
15
|
+
for (let j = 0; j < split.length; j++) {
|
|
16
|
+
const regex = createRegexForNumbersSequence(split[j]);
|
|
17
|
+
let item;
|
|
18
|
+
const match = parent.find((item) => item.regex.regex === regex.regex);
|
|
19
|
+
if (!match) {
|
|
20
|
+
item = { regex };
|
|
21
|
+
parent.push(item);
|
|
22
|
+
} else item = match;
|
|
23
|
+
if (j === split.length - 1) {
|
|
24
|
+
item.end = true;
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
parent = item.children || (item.children = []);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return root;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Parse tree
|
|
34
|
+
*/
|
|
35
|
+
function parseEmojiTree(items) {
|
|
36
|
+
function mergeParsedChildren(items) {
|
|
37
|
+
const parsedItems = [];
|
|
38
|
+
const mapWithoutEnd = Object.create(null);
|
|
39
|
+
const mapWithEnd = Object.create(null);
|
|
40
|
+
for (let i = 0; i < items.length; i++) {
|
|
41
|
+
const item = items[i];
|
|
42
|
+
const children = item.children;
|
|
43
|
+
if (children) {
|
|
44
|
+
const fullItem = item;
|
|
45
|
+
const target = item.end ? mapWithEnd : mapWithoutEnd;
|
|
46
|
+
const regex = children.regex;
|
|
47
|
+
if (!target[regex]) target[regex] = [fullItem];
|
|
48
|
+
else target[regex].push(fullItem);
|
|
49
|
+
} else parsedItems.push(item.regex);
|
|
50
|
+
}
|
|
51
|
+
[mapWithEnd, mapWithoutEnd].forEach((source) => {
|
|
52
|
+
for (const regex in source) {
|
|
53
|
+
const items = source[regex];
|
|
54
|
+
const firstItem = items[0];
|
|
55
|
+
let childSequence = [createUTF16EmojiRegexItem([joinerEmoji]), firstItem.children];
|
|
56
|
+
if (firstItem.end) childSequence = [createOptionalEmojiRegexItem(createSequenceEmojiRegexItem(childSequence))];
|
|
57
|
+
let mergedRegex;
|
|
58
|
+
if (items.length === 1) mergedRegex = firstItem.regex;
|
|
59
|
+
else mergedRegex = mergeSimilarItemsInSet(createSetEmojiRegexItem(items.map((item) => item.regex)));
|
|
60
|
+
const sequence = createSequenceEmojiRegexItem([mergedRegex, ...childSequence]);
|
|
61
|
+
parsedItems.push(sequence);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
if (parsedItems.length === 1) return parsedItems[0];
|
|
65
|
+
return mergeSimilarItemsInSet(createSetEmojiRegexItem(parsedItems));
|
|
66
|
+
}
|
|
67
|
+
function parseItemChildren(item) {
|
|
68
|
+
const result = {
|
|
69
|
+
regex: item.regex,
|
|
70
|
+
end: !!item.end
|
|
71
|
+
};
|
|
72
|
+
const children = item.children;
|
|
73
|
+
if (!children) return result;
|
|
74
|
+
result.children = mergeParsedChildren(children.map(parseItemChildren));
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
return mergeParsedChildren(items.map(parseItemChildren));
|
|
78
|
+
}
|
|
79
|
+
export { createEmojisTree, parseEmojiTree };
|