businesslens 0.2.2
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/ANTr5GBv.js +1 -0
- package/.output/public/_nuxt/B3Z-Zt7l.js +37 -0
- package/.output/public/_nuxt/Bd76-HGM.js +1 -0
- package/.output/public/_nuxt/Bf4VrETn.js +1 -0
- package/.output/public/_nuxt/CR3jGlpM.js +1 -0
- package/.output/public/_nuxt/CntoM1kL.js +1 -0
- package/.output/public/_nuxt/DogqooqX.js +1 -0
- package/.output/public/_nuxt/Zsu92SSr.js +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -0
- package/.output/public/_nuxt/builds/meta/e74555da-0c18-4e95-b959-2bdcc538677b.json +1 -0
- package/.output/public/_nuxt/default.CRZmPCG_.css +1 -0
- package/.output/public/_nuxt/e3lOfLH3.js +1 -0
- package/.output/public/_nuxt/entry.SgkJh-3P.css +1 -0
- package/.output/public/_nuxt/error-404.CTIGkQtd.css +1 -0
- package/.output/public/_nuxt/error-500.CKBWIF4V.css +1 -0
- package/.output/public/_nuxt/fCd72uLR.js +1 -0
- package/.output/public/_nuxt/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2 +0 -0
- package/.output/public/_nuxt/inter-cyrillic-wght-normal.DqGufNeO.woff2 +0 -0
- package/.output/public/_nuxt/inter-greek-ext-wght-normal.DlzME5K_.woff2 +0 -0
- package/.output/public/_nuxt/inter-greek-wght-normal.CkhJZR-_.woff2 +0 -0
- package/.output/public/_nuxt/inter-latin-ext-wght-normal.DO1Apj_S.woff2 +0 -0
- package/.output/public/_nuxt/inter-latin-wght-normal.Dx4kXJAl.woff2 +0 -0
- package/.output/public/_nuxt/inter-vietnamese-wght-normal.CBcvBZtf.woff2 +0 -0
- package/.output/public/_nuxt/vk0fkBN0.js +1 -0
- package/.output/public/_nuxt/zg6VsE4d.js +39 -0
- package/.output/public/brand/logo/businesslens-mark.svg +20 -0
- package/.output/public/favicon.svg +13 -0
- package/.output/server/chunks/_/error-500.mjs +19 -0
- package/.output/server/chunks/_/error-500.mjs.map +1 -0
- package/.output/server/chunks/_/icons.mjs +6150 -0
- package/.output/server/chunks/_/icons.mjs.map +1 -0
- package/.output/server/chunks/build/Card-DJ5Lo0Cn.mjs +161 -0
- package/.output/server/chunks/build/Card-DJ5Lo0Cn.mjs.map +1 -0
- package/.output/server/chunks/build/EntityInspector-fTjbuYoq.mjs +4412 -0
- package/.output/server/chunks/build/EntityInspector-fTjbuYoq.mjs.map +1 -0
- package/.output/server/chunks/build/Slideover-KOfskX1l.mjs +4226 -0
- package/.output/server/chunks/build/Slideover-KOfskX1l.mjs.map +1 -0
- package/.output/server/chunks/build/Tooltip-DkxwLaX6.mjs +1338 -0
- package/.output/server/chunks/build/Tooltip-DkxwLaX6.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +4 -0
- package/.output/server/chunks/build/client.precomputed.mjs.map +1 -0
- package/.output/server/chunks/build/default-BJSthw3t.mjs +8999 -0
- package/.output/server/chunks/build/default-BJSthw3t.mjs.map +1 -0
- package/.output/server/chunks/build/default-styles.BYgqaNao.mjs +8 -0
- package/.output/server/chunks/build/default-styles.BYgqaNao.mjs.map +1 -0
- package/.output/server/chunks/build/error-404-BOiGLcfP.mjs +96 -0
- package/.output/server/chunks/build/error-404-BOiGLcfP.mjs.map +1 -0
- package/.output/server/chunks/build/error-404-styles.DA-UkGXW.mjs +8 -0
- package/.output/server/chunks/build/error-404-styles.DA-UkGXW.mjs.map +1 -0
- package/.output/server/chunks/build/error-500-Bwyw373t.mjs +79 -0
- package/.output/server/chunks/build/error-500-Bwyw373t.mjs.map +1 -0
- package/.output/server/chunks/build/error-500-styles.De7qbKJ2.mjs +8 -0
- package/.output/server/chunks/build/error-500-styles.De7qbKJ2.mjs.map +1 -0
- package/.output/server/chunks/build/index-BuhKSZfH.mjs +313 -0
- package/.output/server/chunks/build/index-BuhKSZfH.mjs.map +1 -0
- package/.output/server/chunks/build/journeys-DHHOyxCM.mjs +244 -0
- package/.output/server/chunks/build/journeys-DHHOyxCM.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +14099 -0
- package/.output/server/chunks/build/server.mjs.map +1 -0
- package/.output/server/chunks/build/styles.mjs +9 -0
- package/.output/server/chunks/build/styles.mjs.map +1 -0
- package/.output/server/chunks/build/topology-BJfDB_jA.mjs +295 -0
- package/.output/server/chunks/build/topology-BJfDB_jA.mjs.map +1 -0
- package/.output/server/chunks/build/useReport-pDAk-ETG.mjs +406 -0
- package/.output/server/chunks/build/useReport-pDAk-ETG.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +5770 -0
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -0
- package/.output/server/chunks/routes/api/report.get.mjs +617 -0
- package/.output/server/chunks/routes/api/report.get.mjs.map +1 -0
- package/.output/server/chunks/routes/renderer.mjs +451 -0
- package/.output/server/chunks/routes/renderer.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/index.mjs +12 -0
- package/.output/server/index.mjs.map +1 -0
- package/.output/server/node_modules/.nitro/hookable@5.5.3/dist/index.mjs +290 -0
- package/.output/server/node_modules/.nitro/hookable@5.5.3/package.json +49 -0
- package/.output/server/node_modules/.nitro/hookable@6.1.1/dist/index.mjs +257 -0
- package/.output/server/node_modules/.nitro/hookable@6.1.1/package.json +53 -0
- package/.output/server/node_modules/@babel/parser/lib/index.js +14599 -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 +6759 -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 +689 -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 +1413 -0
- package/.output/server/node_modules/@vue/compiler-ssr/package.json +34 -0
- package/.output/server/node_modules/@vue/devtools-api/dist/index.js +2 -0
- package/.output/server/node_modules/@vue/devtools-api/package.json +34 -0
- package/.output/server/node_modules/@vue/devtools-kit/dist/index.js +5670 -0
- package/.output/server/node_modules/@vue/devtools-kit/package.json +44 -0
- package/.output/server/node_modules/@vue/devtools-shared/dist/index.js +239 -0
- package/.output/server/node_modules/@vue/devtools-shared/package.json +33 -0
- package/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1899 -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 +6940 -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 +1822 -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 +896 -0
- package/.output/server/node_modules/@vue/server-renderer/package.json +55 -0
- package/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +604 -0
- package/.output/server/node_modules/@vue/shared/package.json +47 -0
- package/.output/server/node_modules/@vue-flow/core/dist/vue-flow-core.mjs +10186 -0
- package/.output/server/node_modules/@vue-flow/core/package.json +95 -0
- package/.output/server/node_modules/ajv/dist/2020.js +55 -0
- package/.output/server/node_modules/ajv/dist/ajv.js +50 -0
- package/.output/server/node_modules/ajv/dist/compile/codegen/code.js +156 -0
- package/.output/server/node_modules/ajv/dist/compile/codegen/index.js +697 -0
- package/.output/server/node_modules/ajv/dist/compile/codegen/scope.js +143 -0
- package/.output/server/node_modules/ajv/dist/compile/errors.js +123 -0
- package/.output/server/node_modules/ajv/dist/compile/index.js +242 -0
- package/.output/server/node_modules/ajv/dist/compile/names.js +28 -0
- package/.output/server/node_modules/ajv/dist/compile/ref_error.js +12 -0
- package/.output/server/node_modules/ajv/dist/compile/resolve.js +155 -0
- package/.output/server/node_modules/ajv/dist/compile/rules.js +26 -0
- package/.output/server/node_modules/ajv/dist/compile/util.js +178 -0
- package/.output/server/node_modules/ajv/dist/compile/validate/applicability.js +19 -0
- package/.output/server/node_modules/ajv/dist/compile/validate/boolSchema.js +50 -0
- package/.output/server/node_modules/ajv/dist/compile/validate/dataType.js +203 -0
- package/.output/server/node_modules/ajv/dist/compile/validate/defaults.js +35 -0
- package/.output/server/node_modules/ajv/dist/compile/validate/index.js +520 -0
- package/.output/server/node_modules/ajv/dist/compile/validate/keyword.js +124 -0
- package/.output/server/node_modules/ajv/dist/compile/validate/subschema.js +81 -0
- package/.output/server/node_modules/ajv/dist/core.js +618 -0
- package/.output/server/node_modules/ajv/dist/refs/data.json +13 -0
- package/.output/server/node_modules/ajv/dist/refs/json-schema-2020-12/index.js +30 -0
- package/.output/server/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json +48 -0
- package/.output/server/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json +17 -0
- package/.output/server/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json +51 -0
- package/.output/server/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
- package/.output/server/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json +37 -0
- package/.output/server/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
- package/.output/server/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json +90 -0
- package/.output/server/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json +55 -0
- package/.output/server/node_modules/ajv/dist/refs/json-schema-draft-07.json +151 -0
- package/.output/server/node_modules/ajv/dist/runtime/equal.js +7 -0
- package/.output/server/node_modules/ajv/dist/runtime/ucs2length.js +24 -0
- package/.output/server/node_modules/ajv/dist/runtime/uri.js +6 -0
- package/.output/server/node_modules/ajv/dist/runtime/validation_error.js +11 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +49 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +106 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/allOf.js +23 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +12 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/contains.js +95 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +85 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js +11 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/if.js +66 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/index.js +44 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/items.js +52 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/items2020.js +30 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/not.js +26 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +60 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +75 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +12 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/properties.js +54 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +38 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +13 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/code.js +131 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/core/id.js +10 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/core/index.js +16 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/core/ref.js +122 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/discriminator/index.js +104 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/discriminator/types.js +9 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/draft2020.js +23 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/draft7.js +17 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js +30 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js +51 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/dynamic/index.js +9 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js +16 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js +10 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/format/format.js +92 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/format/index.js +6 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/metadata.js +18 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/next.js +8 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/unevaluated/index.js +7 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js +40 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js +65 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/const.js +25 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js +12 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/enum.js +48 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/index.js +33 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitContains.js +15 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitItems.js +24 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitLength.js +27 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +27 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +24 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +26 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/pattern.js +24 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/required.js +79 -0
- package/.output/server/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +64 -0
- package/.output/server/node_modules/ajv/package.json +126 -0
- package/.output/server/node_modules/ajv-formats/dist/formats.js +208 -0
- package/.output/server/node_modules/ajv-formats/dist/index.js +37 -0
- package/.output/server/node_modules/ajv-formats/dist/limit.js +69 -0
- package/.output/server/node_modules/ajv-formats/package.json +74 -0
- package/.output/server/node_modules/birpc/dist/index.mjs +291 -0
- package/.output/server/node_modules/birpc/package.json +57 -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 +4 -0
- package/.output/server/node_modules/devalue/package.json +40 -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/parse.js +283 -0
- package/.output/server/node_modules/devalue/src/stringify.js +401 -0
- package/.output/server/node_modules/devalue/src/uneval.js +552 -0
- package/.output/server/node_modules/devalue/src/utils.js +160 -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/fast-deep-equal/index.js +46 -0
- package/.output/server/node_modules/fast-deep-equal/package.json +61 -0
- package/.output/server/node_modules/fast-uri/index.js +406 -0
- package/.output/server/node_modules/fast-uri/lib/schemes.js +267 -0
- package/.output/server/node_modules/fast-uri/lib/utils.js +443 -0
- package/.output/server/node_modules/fast-uri/package.json +68 -0
- package/.output/server/node_modules/json-schema-traverse/index.js +93 -0
- package/.output/server/node_modules/json-schema-traverse/package.json +43 -0
- package/.output/server/node_modules/perfect-debounce/dist/index.mjs +89 -0
- package/.output/server/node_modules/perfect-debounce/package.json +41 -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-X4GG3EDV.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/index.mjs +9 -0
- package/.output/server/node_modules/unhead/dist/parser.mjs +508 -0
- package/.output/server/node_modules/unhead/dist/plugins.mjs +101 -0
- package/.output/server/node_modules/unhead/dist/scripts.mjs +30 -0
- package/.output/server/node_modules/unhead/dist/server.mjs +180 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.B3VbJo7Y.mjs +207 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.BYvz9V1x.mjs +43 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.BnoAbrHA.mjs +269 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.CaI5ZD4O.mjs +182 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.CbpEuj3y.mjs +71 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.D4vSFytZ.mjs +236 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.DQc16pHI.mjs +196 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.Dh1cQCTe.mjs +44 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.TxTMM7cM.mjs +166 -0
- package/.output/server/node_modules/unhead/dist/shared/unhead.yem5I2v_.mjs +38 -0
- package/.output/server/node_modules/unhead/dist/utils.mjs +5 -0
- package/.output/server/node_modules/unhead/package.json +105 -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 +249 -0
- package/.output/server/node_modules/vue-bundle-renderer/package.json +57 -0
- package/.output/server/node_modules/vue-router/dist/devtools-DCoWQoU_.js +1034 -0
- package/.output/server/node_modules/vue-router/dist/useApi-s_02lHjl.js +181 -0
- package/.output/server/node_modules/vue-router/dist/vue-router.js +1499 -0
- package/.output/server/node_modules/vue-router/package.json +226 -0
- package/.output/server/node_modules/vue-router/vue-router.node.mjs +2 -0
- package/.output/server/package.json +41 -0
- package/README.md +114 -0
- package/THIRD_PARTY_NOTICES.md +28 -0
- package/bin/businesslens.mjs +181 -0
- package/package.json +68 -0
- package/packages/report-schema/schemas/report.schema.json +235 -0
- package/packages/report-schema/types/index.ts +1 -0
- package/packages/report-schema/types/report.ts +101 -0
- package/packages/report-schema/validate.mjs +111 -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 };
|