From 9507b0549826561d76f07164ade0cb87e0d09aa5 Mon Sep 17 00:00:00 2001 From: jahorton Date: Thu, 1 Feb 2024 14:23:51 +0700 Subject: [PATCH 001/171] fix(ios): context-initial diacritic handling --- .../Classes/Extension/String+Helpers.swift | 28 ++++++++ .../Keyboard/InputViewController.swift | 71 +++++++++---------- .../Keyboard/KeymanWebViewController.swift | 23 +++--- 3 files changed, 72 insertions(+), 50 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Extension/String+Helpers.swift b/ios/engine/KMEI/KeymanEngine/Classes/Extension/String+Helpers.swift index 212c6dbdba9..441948ef4d6 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Extension/String+Helpers.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Extension/String+Helpers.swift @@ -40,3 +40,31 @@ extension String { return String(utf16CodeUnits: codeUnits, count: codeUnits.count) } } + +func trimDirectionalMarkPrefix(_ str: String?) -> String { + var text = str ?? "" + + let DIRECTIONAL_MARKS = [ + UnicodeScalar("\u{200e}"), + UnicodeScalar("\u{200f}"), + UnicodeScalar("\u{202e}") + ] + + // If the first intended char in context is a diacritic (such as U+0300), Swift's + // standard string-handling will treat it and a preceding directional character + // as a single unit. This code block exists to avoid the issue. + if text.utf16.count > 0 { + let head = UnicodeScalar(text.utf16[text.utf16.startIndex])!; + // "%02X" - to hex-format the integer for the string conversion. + let tail = text.utf16.count > 1 ? String(text.utf16[text.utf16.index(text.utf16.startIndex, offsetBy: 1).. 0 { textDocumentProxy.deleteBackward() @@ -338,7 +338,7 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate { textDocumentProxy.deleteBackward() return } - + for _ in 0.. Date: Thu, 1 Feb 2024 14:40:12 +0700 Subject: [PATCH 002/171] chore(ios): minor cleanup --- .../KeymanEngine/Classes/Extension/String+Helpers.swift | 9 +++++---- .../Classes/Keyboard/InputViewController.swift | 6 +----- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Extension/String+Helpers.swift b/ios/engine/KMEI/KeymanEngine/Classes/Extension/String+Helpers.swift index 441948ef4d6..c14b7a508c0 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Extension/String+Helpers.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Extension/String+Helpers.swift @@ -54,12 +54,13 @@ func trimDirectionalMarkPrefix(_ str: String?) -> String { // standard string-handling will treat it and a preceding directional character // as a single unit. This code block exists to avoid the issue. if text.utf16.count > 0 { - let head = UnicodeScalar(text.utf16[text.utf16.startIndex])!; - // "%02X" - to hex-format the integer for the string conversion. + let head = UnicodeScalar(text.utf16[text.utf16.startIndex])! let tail = text.utf16.count > 1 ? String(text.utf16[text.utf16.index(text.utf16.startIndex, offsetBy: 1).. Date: Thu, 8 Feb 2024 10:21:19 +0100 Subject: [PATCH 003/171] chore(linux): Ignore missing .symbols file in stable branch This fixes a bug in the API verification if the stable branch doesn't have the expected .symbols file. --- linux/scripts/deb-packaging.sh | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/linux/scripts/deb-packaging.sh b/linux/scripts/deb-packaging.sh index 1baf17ff854..eaadd2cadbf 100755 --- a/linux/scripts/deb-packaging.sh +++ b/linux/scripts/deb-packaging.sh @@ -150,6 +150,14 @@ get_api_version_in_symbols_file() { echo "${firstline}" } +# Check if the API version got updated +# Returns: +# 0 - if the API version got updated +# 1 - the .symbols file got changed but the API version didn't get updated +# 2 - if we're in the alpha tier and the API version got updated since +# the last stable version +# NOTE: it is up to the caller to check if this is a major version +# change that requires an API version update. is_api_version_updated() { local NEW_VERSION OLD_VERSION TIER git checkout "${GIT_BASE}" -- "debian/${PKG_NAME}.symbols" @@ -168,7 +176,12 @@ is_api_version_updated() { alpha) local STABLE_VERSION STABLE_VERSION=$((${VERSION%%.*} - 1)) - git checkout "stable-${STABLE_VERSION}.0" -- "debian/${PKG_NAME}.symbols" + if ! git cat-file -e "origin/stable-${STABLE_VERSION}.0" "debian/${PKG_NAME}.symbols" 2>/dev/null; then + # .symbols file doesn't exist in stable branch; that's ok + echo "2" + return + fi + git checkout "origin/stable-${STABLE_VERSION}.0" -- "debian/${PKG_NAME}.symbols" STABLE_API_VERSION=$(get_api_version_in_symbols_file) git checkout "${GIT_SHA}" -- "debian/${PKG_NAME}.symbols" if (( NEW_VERSION > STABLE_API_VERSION )); then From 3ad7710216d637e04c81467b9f9179055b30c13a Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Wed, 31 Jan 2024 12:15:45 +0100 Subject: [PATCH 004/171] chore(linux): Update symbols file with current version The new API methods landed in `master` with the merge of the epic branch. This change updates the version numbers to the current version. --- linux/debian/libkeymancore.symbols | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/linux/debian/libkeymancore.symbols b/linux/debian/libkeymancore.symbols index 37f3b7acd34..7c339866a90 100644 --- a/linux/debian/libkeymancore.symbols +++ b/linux/debian/libkeymancore.symbols @@ -8,7 +8,7 @@ libkeymancore.so.1 libkeymancore #MINVER# km_core_context_items_dispose@Base 17.0.195 km_core_context_length@Base 17.0.195 km_core_context_set@Base 17.0.195 - km_core_cp_dispose@Base 17.0.244 + km_core_cp_dispose@Base 17.0.263 km_core_event@Base 17.0.195 km_core_get_engine_attrs@Base 17.0.195 km_core_keyboard_dispose@Base 17.0.195 @@ -22,11 +22,11 @@ libkeymancore.so.1 libkeymancore #MINVER# km_core_process_event@Base 17.0.195 km_core_process_queued_actions@Base 17.0.195 km_core_state_action_items@Base 17.0.195 - km_core_state_app_context@Base 17.0.245 + km_core_state_app_context@Base 17.0.263 km_core_state_clone@Base 17.0.195 km_core_state_context@Base 17.0.195 km_core_state_context_clear@Base 17.0.197 - km_core_state_context_debug@Base 17.0.244 + km_core_state_context_debug@Base 17.0.263 km_core_state_context_set_if_needed@Base 17.0.197 km_core_state_create@Base 17.0.195 km_core_state_debug_get@Base 17.0.195 From 1348afbe07bfada9dc2b2aa1b62feb981d682b57 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Fri, 9 Feb 2024 12:11:26 +0100 Subject: [PATCH 005/171] chore(linux): Add tests for renamed .symbols file --- linux/scripts/test/deb-packaging.tests.sh | 157 +++++++++++++++++++--- 1 file changed, 138 insertions(+), 19 deletions(-) diff --git a/linux/scripts/test/deb-packaging.tests.sh b/linux/scripts/test/deb-packaging.tests.sh index 9fb1349886c..9de6b7de406 100755 --- a/linux/scripts/test/deb-packaging.tests.sh +++ b/linux/scripts/test/deb-packaging.tests.sh @@ -9,19 +9,24 @@ THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" mockDebPkgTools() { echo "#!/bin/bash - " > ${tmpDir}/dpkg - chmod +x ${tmpDir}/dpkg - cp ${tmpDir}/dpkg ${tmpDir}/dpkg-gensymbols + " > "${tmpDir}/dpkg" + chmod +x "${tmpDir}/dpkg" + cp "${tmpDir}/dpkg" "${tmpDir}/dpkg-gensymbols" PATH=${tmpDir}:${PATH} } createBase() { TIER=$1 + remoteDir=$(mktemp -d) + cd "${remoteDir}" + git init --bare --initial-branch=master . + workDir=$(mktemp -d) - cd ${workDir} - git init . + cd "${workDir}" + git init --initial-branch=master . + git remote add origin "${remoteDir}" mkdir -p linux/debian - echo "libkeymancore.so.1 libkeymancore #MINVER# + echo "libkeymancore.so.0 libkeymancore #MINVER# * Build-Depends-Package: libkeymancore-dev km_core_actions_dispose@Base 17.0.197 @@ -33,7 +38,9 @@ createBase() { git add linux/debian/libkeymancore.symbols mkdir -p core - echo "1.0.0" > core/CORE_API_VERSION.md + # We never had a version 0.0.0 in CORE_API_VERSION.md, but since 0 is + # the default this will work + echo "0.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md echo "16.0.145" > VERSION.md @@ -43,18 +50,21 @@ createBase() { git add TIER.md mkdir -p linux/scripts - cp -r ${REPO_ROOT}/linux/scripts/* linux/scripts + cp -r "${REPO_ROOT}"/linux/scripts/* linux/scripts git add linux/scripts mkdir -p resources/build - cp -r ${REPO_ROOT}/resources/build/* resources/build - cp ${REPO_ROOT}/resources/builder.inc.sh resources/ + cp -r "${REPO_ROOT}"/resources/build/* resources/build + cp "${REPO_ROOT}"/resources/builder.inc.sh resources/ git add resources git commit -m "Initial" + git push origin master git branch -c stable-16.0 + git push origin stable-16.0 git tag -m "16.0.145" release-16.0.145 + git push origin release-16.0.145 echo "${TIER}" > TIER.md git add TIER.md @@ -62,6 +72,7 @@ createBase() { echo "17.0.255" > VERSION.md git add VERSION.md git commit -m "Commit for Alpha" + git push origin master git checkout -b chore @@ -93,6 +104,7 @@ test_check_updated_version_number_NoChange_OK() { git add README.md git commit -m "Some change on the branch" + echo "## Calling API verification" pwd linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify } @@ -104,6 +116,7 @@ test_check_updated_version_number_LineAdded_OK() { git add linux/debian/libkeymancore.symbols git commit -m "API method added" + echo "## Calling API verification" pwd linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify } @@ -115,6 +128,7 @@ test_check_updated_version_number_LineAddedWithoutVerUpd_ERROR() { git add linux/debian/libkeymancore.symbols git commit -m "API method added" + echo "## Calling API verification" pwd output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify || true) echo "${output[*]}" # for logging @@ -125,22 +139,23 @@ test_check_updated_version_number_LineRemovedWithAPIUpd_OK() { createBase alpha echo "2.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md - sed -i 's/libkeymancore.so.1/libkeymancore.so.2/' linux/debian/libkeymancore.symbols + sed -i 's/libkeymancore.so.0/libkeymancore.so.2/' linux/debian/libkeymancore.symbols sed -i '6d' linux/debian/libkeymancore.symbols git add linux/debian/libkeymancore.symbols git commit -m "API method removed" + echo "## Calling API verification" pwd linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify } -test_check_updated_version_number_LineRemoved_InAlpha_OK() { +test_check_updated_version_number_LineRemoved_InAlpha_ChangedBefore_OK() { createBase alpha git checkout master # simulate a commit that already introduced an API version change echo "2.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md - sed -i 's/libkeymancore.so.1/libkeymancore.so.2/' linux/debian/libkeymancore.symbols + sed -i 's/libkeymancore.so.0/libkeymancore.so.2/' linux/debian/libkeymancore.symbols git add linux/debian/libkeymancore.symbols git commit -m "API version change" git checkout chore @@ -150,31 +165,81 @@ test_check_updated_version_number_LineRemoved_InAlpha_OK() { git add linux/debian/libkeymancore.symbols git commit -m "API method removed" + echo "## Calling API verification" pwd linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify } -test_check_updated_version_number_LineRemoved_ChangeFromStable_ERROR() { +test_check_updated_version_number_LineRemoved_InAlpha_FileMissingInStable_ApiVerChanged_OK() { + createBase alpha + git checkout master + # simulate a commit that renamed the .symbols file and updated the API version + git mv linux/debian/libkeymancore.symbols linux/debian/libfoo.symbols + sed -i 's/libkeymancore/libfoo/' linux/scripts/deb-packaging.sh + git add linux/scripts/deb-packaging.sh + echo "1.0.0" > core/CORE_API_VERSION.md + git add core/CORE_API_VERSION.md + sed -i 's/libkeymancore.so.0/libfoo.so.1/' linux/debian/libfoo.symbols + git add linux/debian/libfoo.symbols + git commit -m "renamed library" + git checkout chore + git rebase master + + sed -i '6d' linux/debian/libfoo.symbols + git add linux/debian/libfoo.symbols + git commit -m "API method removed" + + echo "## Calling API verification" + pwd + linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify +} + +test_check_updated_version_number_LineRemoved_InAlpha_FileMissingInStable_ApiVerUnchanged_ERROR() { + createBase alpha + git checkout master + # simulate a commit that renamed the .symbols file + git mv linux/debian/libkeymancore.symbols linux/debian/libfoo.symbols + sed -i 's/libkeymancore/libfoo/' linux/scripts/deb-packaging.sh + git add linux/scripts/deb-packaging.sh + sed -i 's/libkeymancore.so/libfoo.so/' linux/debian/libfoo.symbols + git add linux/debian/libfoo.symbols + git commit -m "renamed library" + git checkout chore + git rebase master + + sed -i '6d' linux/debian/libfoo.symbols + git add linux/debian/libfoo.symbols + git commit -m "API method removed" + + echo "## Calling API verification" + pwd + output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify || true) + echo "${output[*]}" # for logging + [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libfoo.symbols file"* ]] +} + +test_check_updated_version_number_LineRemoved_InAlpha_ChangeFromStable_ERROR() { createBase alpha sed -i '6d' linux/debian/libkeymancore.symbols git add linux/debian/libkeymancore.symbols git commit -m "API method removed" + echo "## Calling API verification" pwd output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify || true) echo "${output[*]}" # for logging [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libkeymancore.symbols file"* ]] } -test_check_updated_version_number_LineRemoved_ChangeInBeta_ERROR() { +test_check_updated_version_number_LineRemoved_InBeta_ApiVerUnchanged_ERROR() { createBase beta # simulate a commit that already introduced an API version change in Beta git checkout -b beta echo "2.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md - sed -i 's/libkeymancore.so.1/libkeymancore.so.2/' linux/debian/libkeymancore.symbols + sed -i 's/libkeymancore.so.0/libkeymancore.so.2/' linux/debian/libkeymancore.symbols git add linux/debian/libkeymancore.symbols git commit -m "API version change" git checkout chore @@ -184,19 +249,73 @@ test_check_updated_version_number_LineRemoved_ChangeInBeta_ERROR() { git add linux/debian/libkeymancore.symbols git commit -m "API method removed" + echo "## Calling API verification" pwd output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base beta verify || true) echo "${output[*]}" # for logging [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libkeymancore.symbols file"* ]] } +test_check_updated_version_number_LineRemoved_InBeta_ApiVerChanged_OK() { + createBase beta + + # simulate a commit that already introduced an API version change in Beta + git checkout -b beta + echo "2.0.0" > core/CORE_API_VERSION.md + git add core/CORE_API_VERSION.md + sed -i 's/libkeymancore.so.0/libkeymancore.so.2/' linux/debian/libkeymancore.symbols + git add linux/debian/libkeymancore.symbols + git commit -m "API version change" + git checkout chore + git rebase beta + + echo "3.0.0" > core/CORE_API_VERSION.md + git add core/CORE_API_VERSION.md + sed -i 's/libkeymancore.so.2/libkeymancore.so.3/' linux/debian/libkeymancore.symbols + sed -i '6d' linux/debian/libkeymancore.symbols + git add linux/debian/libkeymancore.symbols + git commit -m "API method removed" + + echo "## Calling API verification" + pwd + linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base beta verify +} + +test_check_updated_version_number_LineRemoved_InBeta_FileMissingInStable_ApiVerUnchanged_ERROR() { + createBase alpha + git checkout -b beta + # simulate a commit that renamed the .symbols file + git mv linux/debian/libkeymancore.symbols linux/debian/libfoo.symbols + sed -i 's/libkeymancore/libfoo/' linux/scripts/deb-packaging.sh + git add linux/scripts/deb-packaging.sh + sed -i 's/libkeymancore.so/libfoo.so/' linux/debian/libfoo.symbols + git add linux/debian/libfoo.symbols + git commit -m "renamed library" + git checkout chore + git rebase beta + + sed -i '6d' linux/debian/libfoo.symbols + git add linux/debian/libfoo.symbols + git commit -m "API method removed" + + echo "## Calling API verification" + pwd + output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base beta verify || true) + echo "${output[*]}" # for logging + [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libfoo.symbols file"* ]] +} + echo "(test logs are in /tmp/.log)" run_test test_check_updated_version_number_NoChange_OK run_test test_check_updated_version_number_LineAdded_OK run_test test_check_updated_version_number_LineAddedWithoutVerUpd_ERROR run_test test_check_updated_version_number_LineRemovedWithAPIUpd_OK -run_test test_check_updated_version_number_LineRemoved_InAlpha_OK -run_test test_check_updated_version_number_LineRemoved_ChangeFromStable_ERROR -run_test test_check_updated_version_number_LineRemoved_ChangeInBeta_ERROR +run_test test_check_updated_version_number_LineRemoved_InAlpha_ChangedBefore_OK +run_test test_check_updated_version_number_LineRemoved_InAlpha_FileMissingInStable_ApiVerChanged_OK +run_test test_check_updated_version_number_LineRemoved_InAlpha_FileMissingInStable_ApiVerUnchanged_ERROR +run_test test_check_updated_version_number_LineRemoved_InAlpha_ChangeFromStable_ERROR +run_test test_check_updated_version_number_LineRemoved_InBeta_ApiVerUnchanged_ERROR +run_test test_check_updated_version_number_LineRemoved_InBeta_ApiVerChanged_OK +run_test test_check_updated_version_number_LineRemoved_InBeta_FileMissingInStable_ApiVerUnchanged_ERROR # TODO: still some test cases missing for the different checks From b5c2edd52b7c0151d62ca054545e049ec4d34f78 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Fri, 9 Feb 2024 12:12:22 +0100 Subject: [PATCH 006/171] refactor(linux): Use `git cat-file` instead of checkout Addresses code review comments. --- linux/scripts/deb-packaging.sh | 64 +++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/linux/scripts/deb-packaging.sh b/linux/scripts/deb-packaging.sh index eaadd2cadbf..1bf518c50e9 100755 --- a/linux/scripts/deb-packaging.sh +++ b/linux/scripts/deb-packaging.sh @@ -144,12 +144,22 @@ check_updated_version_number() { get_api_version_in_symbols_file() { # Extract 1 from "libkeymancore.so.1 libkeymancore #MINVER#" local firstline - firstline="$(head -1 "debian/${PKG_NAME}.symbols")" + local file="$1" + firstline="$(head -1 "${file}")" firstline="${firstline#"${PKG_NAME}".so.}" firstline="${firstline%% *}" echo "${firstline}" } +get_api_version_from_core() { + local api_version file + file="$1" + api_version=$(cat "${file}") + # Extract major version number from "1.0.0" + api_version=${api_version%%.*} + echo "${api_version}" +} + # Check if the API version got updated # Returns: # 0 - if the API version got updated @@ -159,12 +169,14 @@ get_api_version_in_symbols_file() { # NOTE: it is up to the caller to check if this is a major version # change that requires an API version update. is_api_version_updated() { - local NEW_VERSION OLD_VERSION TIER - git checkout "${GIT_BASE}" -- "debian/${PKG_NAME}.symbols" - OLD_VERSION=$(get_api_version_in_symbols_file) - git checkout "${GIT_SHA}" -- "debian/${PKG_NAME}.symbols" - NEW_VERSION=$(get_api_version_in_symbols_file) - if (( NEW_VERSION > OLD_VERSION )); then + local OLD_API_VERSION NEW_API_VERSION TIER TMPFILE + TMPFILE=$(mktemp) + git cat-file blob "${GIT_BASE}:linux/debian/${PKG_NAME}.symbols" > "${TMPFILE}" + OLD_API_VERSION=$(get_api_version_in_symbols_file "${TMPFILE}") + git cat-file blob "${GIT_SHA}:linux/debian/${PKG_NAME}.symbols" > "${TMPFILE}" + NEW_API_VERSION=$(get_api_version_in_symbols_file "${TMPFILE}") + if (( NEW_API_VERSION > OLD_API_VERSION )); then + rm "${TMPFILE}" echo "0" return fi @@ -174,17 +186,30 @@ is_api_version_updated() { TIER=$(cat "${REPO_ROOT}/TIER.md") case ${TIER} in alpha) - local STABLE_VERSION + local STABLE_VERSION STABLE_API_VERSION + STABLE_API_VERSION=0 STABLE_VERSION=$((${VERSION%%.*} - 1)) - if ! git cat-file -e "origin/stable-${STABLE_VERSION}.0" "debian/${PKG_NAME}.symbols" 2>/dev/null; then - # .symbols file doesn't exist in stable branch; that's ok - echo "2" - return + if ! git cat-file blob "origin/stable-${STABLE_VERSION}.0:linux/debian/${PKG_NAME}.symbols" > "${TMPFILE}" 2>/dev/null; then + # .symbols file doesn't exist in stable branch, so let's check CORE_API_VERSION.md. That + # doesn't exist in 16.0 but appeared in 17.0. + if ! git cat-file blob "origin/stable-${STABLE_VERSION}.0:core/CORE_API_VERSION.md" > "${TMPFILE}" 2>/dev/null; then + # CORE_API_VERSION.md doesn't exist either + if (( NEW_API_VERSION > 0 )); then + # .symbols and CORE_API_VERSION.md file don't exist in stable branch; however, we + # incremented the version number compared to 16.0, so that's ok + rm "${TMPFILE}" + echo "2" + return + fi + else + # Get API version from CORE_API_VERSION.md + STABLE_API_VERSION=$(get_api_version_from_core "${TMPFILE}") + fi + else + STABLE_API_VERSION=$(get_api_version_in_symbols_file "${TMPFILE}") fi - git checkout "origin/stable-${STABLE_VERSION}.0" -- "debian/${PKG_NAME}.symbols" - STABLE_API_VERSION=$(get_api_version_in_symbols_file) - git checkout "${GIT_SHA}" -- "debian/${PKG_NAME}.symbols" - if (( NEW_VERSION > STABLE_API_VERSION )); then + if (( NEW_API_VERSION > STABLE_API_VERSION )); then + rm "${TMPFILE}" echo "2" return fi ;; @@ -192,6 +217,7 @@ is_api_version_updated() { ;; esac + rm "${TMPFILE}" echo "1" } @@ -233,10 +259,8 @@ check_for_api_version_consistency() { # Checks that the (major) API version number in the .symbols file and # in CORE_API_VERSION.md are the same local symbols_version api_version - symbols_version=$(get_api_version_in_symbols_file) - api_version=$(cat ../core/CORE_API_VERSION.md) - # Extract major version number from "1.0.0" - api_version=${api_version%%.*} + symbols_version=$(get_api_version_in_symbols_file "debian/${PKG_NAME}.symbols") + api_version=$(get_api_version_from_core ../core/CORE_API_VERSION.md) if (( symbols_version == api_version )); then output_ok "API version in .symbols file and in CORE_API_VERSION.md is the same" From 3f84d195028f752b9c7148c82cc5af17e6052ff2 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 14 Feb 2024 10:39:21 +0700 Subject: [PATCH 007/171] chore(windows): Update rest of PT strings --- windows/src/desktop/kmshell/locale/pt-PT/strings.xml | 2 +- windows/src/desktop/setup/locale/pt-PT/strings.xml | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/windows/src/desktop/kmshell/locale/pt-PT/strings.xml b/windows/src/desktop/kmshell/locale/pt-PT/strings.xml index 3ac6fe5801a..f8a48c9a5a4 100644 --- a/windows/src/desktop/kmshell/locale/pt-PT/strings.xml +++ b/windows/src/desktop/kmshell/locale/pt-PT/strings.xml @@ -341,7 +341,7 @@ - (nenhuma) + (nenhuma) diff --git a/windows/src/desktop/setup/locale/pt-PT/strings.xml b/windows/src/desktop/setup/locale/pt-PT/strings.xml index 3020d7a3fa5..40684d10d13 100644 --- a/windows/src/desktop/setup/locale/pt-PT/strings.xml +++ b/windows/src/desktop/setup/locale/pt-PT/strings.xml @@ -72,9 +72,7 @@ Reiniciar agora? Baixando %0:s Baixando %0:s - A configuração do $APPNAME não pôde se conectar a keyman.com para baixar recursos adicionais. - -Por favor, verifique se você está online e dê ao $APPNAME permissão de configuração para acessar a Internet nas suas configurações de firewall. - -Clique em Abortar para sair da instalação, tente tentar baixar os recursos novamente ou Ignorar para continuar offline. + A configuração do $APPNAME não pôde se conectar a keyman.com para baixar recursos adicionais. + Por favor, verifique se você está online e dê ao $APPNAME permissão de configuração para acessar a Internet nas suas configurações de firewall. + Clique em Abortar para sair da instalação, tente tentar baixar os recursos novamente ou Ignorar para continuar offline. From 9d7549cd910b7d14e9c5fa42f95478ee61ca8737 Mon Sep 17 00:00:00 2001 From: jahorton Date: Thu, 15 Feb 2024 10:27:42 +0700 Subject: [PATCH 008/171] fix(ios): context synchronization after new paragraph --- .../KMEI/KeymanEngine/Classes/TextField.swift | 22 ---------- .../KMEI/KeymanEngine/Classes/TextView.swift | 16 ------- web/src/app/webview/src/configuration.ts | 7 --- web/src/app/webview/src/contextManager.ts | 44 ++++++++++++++----- web/src/app/webview/src/keymanEngine.ts | 9 +++- 5 files changed, 39 insertions(+), 59 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/TextField.swift b/ios/engine/KMEI/KeymanEngine/Classes/TextField.swift index e1cf9f116c3..2073e221499 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/TextField.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/TextField.swift @@ -19,7 +19,6 @@ public class TextField: UITextField, KeymanResponder { public var isInputClickSoundEnabled = true private var delegateProxy: TextFieldDelegateProxy! - private var shouldUpdateKMText = false private var keyboardChangedObserver: NotificationObserver? @@ -52,8 +51,6 @@ public class TextField: UITextField, KeymanResponder { self.inputView = Manager.shared.inputViewController.view - NotificationCenter.default.addObserver(self, selector: #selector(self.textFieldTextDidChange), - name: UITextField.textDidChangeNotification, object: self) keyboardChangedObserver = NotificationCenter.default.addObserver(forName: Notifications.keyboardChanged, observer: self, function: TextField.keyboardChanged) @@ -155,19 +152,6 @@ public class TextField: UITextField, KeymanResponder { @objc func enableInputClickSound() { isInputClickSoundEnabled = true } - - @objc func textFieldTextDidChange(_ notification: Notification) { - if shouldUpdateKMText { - // Catches copy/paste operations - let textRange = selectedTextRange! - let newRange = NSRange(location: offset(from: beginningOfDocument, to: textRange.start), - length: offset(from: textRange.start, to: textRange.end)) - - Manager.shared.setContextState(text: text, range: newRange) - // This is called when editing in-app; do not reset context here. - shouldUpdateKMText = false - } - } } extension KeymanResponder where Self: TextField { @@ -196,12 +180,6 @@ extension KeymanResponder where Self: TextField { // MARK: - UITextFieldDelegate extension TextField: UITextFieldDelegate { - public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, - replacementString string: String) -> Bool { - shouldUpdateKMText = true // Enable text update to catch copy/paste operations - return true - } - public func textFieldShouldClear(_ textField: UITextField) -> Bool { if textField == self { Manager.shared.clearText() diff --git a/ios/engine/KMEI/KeymanEngine/Classes/TextView.swift b/ios/engine/KMEI/KeymanEngine/Classes/TextView.swift index 46673a4e17f..7d67d720373 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/TextView.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/TextView.swift @@ -262,22 +262,6 @@ extension TextView: UITextViewDelegate { os_log("%{public}s", log:KeymanEngineLogger.ui, type: .debug, messageTwo) } - public func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, - replacementText text: String) -> Bool { - // Enable text update to catch copy/paste operations - shouldUpdateKMText = true - return true - } - - public func textViewDidChange(_ textView: UITextView) { - if shouldUpdateKMText { - // Catches copy/paste operations - Manager.shared.setContextState(text: textView.text, range: textView.selectedRange) - // This is called when editing in-app; do not reset context here. - shouldUpdateKMText = false - } - } - public func textViewShouldEndEditing(_ textView: UITextView) -> Bool { if textView == self { resignFirstResponder() diff --git a/web/src/app/webview/src/configuration.ts b/web/src/app/webview/src/configuration.ts index bcb59c3e1a6..04d847b3ff1 100644 --- a/web/src/app/webview/src/configuration.ts +++ b/web/src/app/webview/src/configuration.ts @@ -58,13 +58,6 @@ export class WebviewConfiguration extends EngineConfiguration { return baseReport; } - - onRuleFinalization(ruleBehavior: RuleBehavior) { - if(!isEmptyTransform(ruleBehavior.transcription?.transform)) { - const transform = ruleBehavior.transcription.transform; - this.oninserttext(transform.deleteLeft, transform.insert, transform.deleteRight ?? 0); - } - } } export interface WebviewInitOptionSpec extends InitOptionSpec { diff --git a/web/src/app/webview/src/contextManager.ts b/web/src/app/webview/src/contextManager.ts index 4807e37756a..00242ce5d0f 100644 --- a/web/src/app/webview/src/contextManager.ts +++ b/web/src/app/webview/src/contextManager.ts @@ -1,12 +1,13 @@ -import { type Keyboard, Mock, OutputTarget } from '@keymanapp/keyboard-processor'; +import { type Keyboard, Mock, OutputTarget, Transcription } from '@keymanapp/keyboard-processor'; import { KeyboardStub } from 'keyman/engine/package-cache'; import { ContextManagerBase, ContextManagerConfiguration } from 'keyman/engine/main'; import { WebviewConfiguration } from './configuration.js'; export type OnInsertTextFunc = (deleteLeft: number, text: string, deleteRight: number) => void; -class ContextHost extends Mock { +export class ContextHost extends Mock { readonly oninserttext?: OnInsertTextFunc; + private savedState: Mock; constructor(oninserttext: OnInsertTextFunc) { super(); @@ -15,21 +16,39 @@ class ContextHost extends Mock { apply(transform: Transform): void { super.apply(transform); + this.updateHost(); + } + + updateHost(transcription?: Transcription): void { + const savedState = this.savedState; + + if(this.savedState) { + let transform = null; + + if(transcription) { + const preInput = transcription.preInput; + // If our saved state matches the `preInput` from the incoming transcription, just reuse its transform. + // Will generally not match during multitap operations, though. + if(preInput.text == savedState.text && preInput.selStart == savedState.selStart && preInput.selEnd == savedState.selEnd) { + transform = transcription.transform; + } + } + + transform ||= this.buildTransformFrom(this.savedState); - // Signal the necessary text changes to the embedding app, if it exists. - if(this.oninserttext) { - this.oninserttext(transform.deleteLeft, transform.insert, transform.deleteRight); + // Signal the necessary text changes to the embedding app, if it exists. + if(this.oninserttext) { + this.oninserttext(transform.deleteLeft, transform.insert, transform.deleteRight); + } } + + // Save the current context state for use in future diffs. + this.savedState = Mock.from(this); } restoreTo(original: OutputTarget): void { - const reversionTransform = original.buildTransformFrom(this); - + this.savedState = Mock.from(this); super.restoreTo(original); - - if(this.oninserttext) { - this.oninserttext(reversionTransform.deleteLeft, reversionTransform.insert, reversionTransform.deleteRight); - } } // In app/webview, apps are expected to immediately update the selection range AFTER @@ -40,7 +59,8 @@ class ContextHost extends Mock { // Our host app will not know whether or not the keyboard uses SMP chars, // and we want a consistent interface for context synchronization between // host app + app/webview KMW. - this.setSelection(this.text.kmwLength()); + this.setSelection(this.text._kmwLength()); + this.savedState = Mock.from(this); } } diff --git a/web/src/app/webview/src/keymanEngine.ts b/web/src/app/webview/src/keymanEngine.ts index 938aaf6c265..60259443afc 100644 --- a/web/src/app/webview/src/keymanEngine.ts +++ b/web/src/app/webview/src/keymanEngine.ts @@ -1,11 +1,11 @@ -import { DefaultRules, DeviceSpec } from '@keymanapp/keyboard-processor' +import { DefaultRules, DeviceSpec, RuleBehavior, isEmptyTransform } from '@keymanapp/keyboard-processor' import { KeymanEngine as KeymanEngineBase, KeyboardInterface } from 'keyman/engine/main'; import { AnchoredOSKView, ViewConfiguration, StaticActivator } from 'keyman/engine/osk'; import { getAbsoluteX, getAbsoluteY } from 'keyman/engine/dom-utils'; import { type KeyboardStub, toPrefixedKeyboardId, toUnprefixedKeyboardId } from 'keyman/engine/package-cache'; import { WebviewConfiguration, WebviewInitOptionDefaults, WebviewInitOptionSpec } from './configuration.js'; -import ContextManager from './contextManager.js'; +import ContextManager, { ContextHost } from './contextManager.js'; import PassthroughKeyboard from './passthroughKeyboard.js'; import { buildEmbeddedGestureConfig, setupEmbeddedListeners } from './oskConfiguration.js'; @@ -15,6 +15,11 @@ export default class KeymanEngine extends KeymanEngineBase { + (this.context as ContextHost).updateHost(ruleBehavior.transcription); + } + config.stubNamespacer = (stub) => { // If the package has not yet been applied as namespacing... if(stub.KP && stub.KI.indexOf(`${stub.KP}::`) == -1) { From 9bc01bee5f5796c8081570b41707539613a4c0c8 Mon Sep 17 00:00:00 2001 From: jahorton Date: Thu, 15 Feb 2024 13:54:16 +0700 Subject: [PATCH 009/171] fix(ios): multitaps following a context-window slide --- .../Keyboard/InputViewController.swift | 9 ++---- .../Keyboard/KeymanWebViewController.swift | 29 +++++++++-------- .../Contents/Resources/ios-host.js | 30 ++++++------------ web/src/app/webview/src/contextManager.ts | 31 ++++++++++++++++++- 4 files changed, 56 insertions(+), 43 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/InputViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/InputViewController.swift index 64a4a3d7548..4f4bc9e12e3 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/InputViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/InputViewController.swift @@ -317,7 +317,7 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate { let range = NSRange(location: before.unicodeScalars.count, length: 0) - self.setContextState(text: contextWindowText, range: range) + self.setContextState(text: contextWindowText, range: range, doSync: true) } updater(preCaretContext, postCaretContext) @@ -606,7 +606,7 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate { * will be expecting SMP-aware measurements. Swift's `.unicodeScalars` * property on `String`s lines up best with this. */ - func setContextState(text: String?, range: NSRange) { + func setContextState(text: String?, range: NSRange, doSync: Bool = false) { // Check for any LTR or RTL marks at the context's start; if they exist, we should // offset the selection range. let characterOrderingChecks = [ "\u{200e}" /*LTR*/, "\u{202e}" /*RTL 1*/, "\u{200f}" /*RTL 2*/ ] @@ -626,10 +626,7 @@ open class InputViewController: UIInputViewController, KeymanWebDelegate { selRange = NSRange(location: selRange.location - 1, length: selRange.length) } - keymanWeb.setText(context) - if range.location != NSNotFound { - keymanWeb.setCursorRange(selRange) - } + keymanWeb.setContext(text: context, range: selRange, doSync: doSync) } func resetKeyboardState() { diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift index af7d1950396..b568fb4baff 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift @@ -223,14 +223,7 @@ extension KeymanWebViewController { setSpacebarText(userData.optSpacebarText) } - func setCursorRange(_ range: NSRange) { - if range.location != NSNotFound { - webView!.evaluateJavaScript("setCursorRange(\(range.location),\(range.length));", completionHandler: nil) - self.currentCursorRange = range - } - } - - func setText(_ text: String?) { + func setContext(text: String?, range: NSRange?, doSync: Bool = false) { var text = text ?? "" // Remove any system-added LTR/RTL marks. @@ -246,7 +239,16 @@ extension KeymanWebViewController { let jsonText = jsonString[start.. => NaN. + end = isNaN(end) ? undefined : end; + + const shouldReset = keyman.context.updateContext(text, start, end); + if(!doSync || shouldReset) { keyman.resetContext(); } - - return keyman.context.getText(); } function executePopupKey(keyID, keyText) { diff --git a/web/src/app/webview/src/contextManager.ts b/web/src/app/webview/src/contextManager.ts index 00242ce5d0f..1f4f09935f2 100644 --- a/web/src/app/webview/src/contextManager.ts +++ b/web/src/app/webview/src/contextManager.ts @@ -1,4 +1,4 @@ -import { type Keyboard, Mock, OutputTarget, Transcription } from '@keymanapp/keyboard-processor'; +import { type Keyboard, Mock, OutputTarget, Transcription, findCommonSubstringEndIndex } from '@keymanapp/keyboard-processor'; import { KeyboardStub } from 'keyman/engine/package-cache'; import { ContextManagerBase, ContextManagerConfiguration } from 'keyman/engine/main'; import { WebviewConfiguration } from './configuration.js'; @@ -51,6 +51,35 @@ export class ContextHost extends Mock { super.restoreTo(original); } + updateContext(text: string, selStart: number, selEnd: number): boolean { + let shouldResetContext = false; + if(text != this.text) { + let tempMock = new Mock(text, selStart ?? text._kmwLength(), selEnd ?? text._kmwLength()); + + let newLeft = tempMock.getTextBeforeCaret(); + let oldLeft = this.getTextBeforeCaret(); + + let unexpectedBeforeCharCount = findCommonSubstringEndIndex(newLeft, oldLeft, true) + 1; + shouldResetContext = !!unexpectedBeforeCharCount; + } + + if(shouldResetContext) { + this.text = text; + } + + if(selStart === undefined || selEnd === undefined) { + // Regardless of keyboard, we should check the SMP-aware length of the string. + // Our host app will not know whether or not the keyboard uses SMP chars, + // and we want a consistent interface for context synchronization between + // host app + app/webview KMW. + this.setSelection(this.text._kmwLength()); + } + + this.savedState = Mock.from(this); + + return shouldResetContext; + } + // In app/webview, apps are expected to immediately update the selection range AFTER // changing the context's text. setText(text: string): void { From d2719f028efe36afd5ebe000ca011cd2792bbd4c Mon Sep 17 00:00:00 2001 From: jahorton Date: Thu, 15 Feb 2024 14:22:18 +0700 Subject: [PATCH 010/171] docs(web): a few comments --- web/src/app/webview/src/contextManager.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/src/app/webview/src/contextManager.ts b/web/src/app/webview/src/contextManager.ts index 1f4f09935f2..b887bac15c5 100644 --- a/web/src/app/webview/src/contextManager.ts +++ b/web/src/app/webview/src/contextManager.ts @@ -29,6 +29,8 @@ export class ContextHost extends Mock { const preInput = transcription.preInput; // If our saved state matches the `preInput` from the incoming transcription, just reuse its transform. // Will generally not match during multitap operations, though. + // + // Helps ensure backspaces pass through even if we don't currently have text available in context for them. if(preInput.text == savedState.text && preInput.selStart == savedState.selStart && preInput.selEnd == savedState.selEnd) { transform = transcription.transform; } From d7d648e12caa4d877c5f5121c4a1865dbe8b0017 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 15 Feb 2024 14:25:22 +0700 Subject: [PATCH 011/171] docs(android/app): Update tablet screenshots --- .../help/android_images/dist-install1-at.png | Bin 23163 -> 32321 bytes android/help/android_images/settings1-at.png | Bin 22610 -> 29317 bytes android/help/android_images/settings2-at.png | Bin 28426 -> 30480 bytes android/help/android_images/settings7-at.png | Bin 30424 -> 32541 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/android/help/android_images/dist-install1-at.png b/android/help/android_images/dist-install1-at.png index 3e4a1eca01a461fb1b4c494cc34f0ce695707043..11f565d897bb1cb0d8d94490d212cc72bf9adc45 100644 GIT binary patch literal 32321 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±)4^S#6djy|eCx+MJboh1W`nPh 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 diff --git a/android/help/android_images/settings1-at.png b/android/help/android_images/settings1-at.png index c0b0f1bdea4a9531958bd55db077ca682ad45120..37782df92af6b9b1ba8ed611b5ee5833544a6a18 100644 GIT binary patch literal 29317 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 ReD@MURY_CvlY&L)e*pwERzd&( literal 22610 zcmeFYWl$VZ*d{u-1`QS*f(HnY;O_1c96|`e-C=Ndf+WE$I75OngA?4{-F2|wa68|( z`|WP+-m3feR_zalnx^ULK6Bo49($wIRpnk_zQP27Kra;Jr8Pky1aS}u5rmEk9J!#W zGX#DixN6Etf~rO+_JKFZRuU=_AkeP_tOs)x;5~+uyuK?4gwy@+2O*UWha3db+f|U3 z(DpJp&O-Ae)@klp<%}EiJ(ckxl#oW&7T31RWy4}+i?*GwOJ8m|DLZUgxhk{ejET(s zP1796JcqweCx6O5HHLwXtht-LJLH+nNo^`g!2LD!;vt|-VJE|5!8iLNn}^2=al4gj zm!FP6J%;vyuTNXf+>i#Zm5C`{5N9`}#E-)F=V9t6WkDrJ%=3g_QS$W&BeknoBfM|K zCbhL^F-626wnQ?SN|-F)$p|Vn2?>damXi6B&IKDDA~8isL!ZOpmL=QTK0h*t+h(=vZX{t5xS6Du=k3m6F%k8g z#6S6z-xKQ2>z%XuF6+h415a40>5%(*bK1OB=Ljx}0B@T(TJogk>)R;|1yOG!_Je={ z1>;?M1j@H}ALUg=7%16vzq0;vHsFyQAJP5hv9~&R^5m4DQQovImrX^}jjMEUM!)f} zWBxs{QQtxTAxmDlB1KDS&pXmf(V**RE5zOILS6 z^;!Su?d=QtiKmC`LlhK@#TYM1+>eMF=cByKmR^slF%N3xSX(Is!zNYAnt~mE;-(#V{#~ z5UQerP;Oa_&pxu@iYfHYiUIl4Px982qLzE{V?+E!Q=W(0Qnfc(>Lk>Vd)MSxI)#RUaY`W8ups(s@l5q7d z^1BOJG#R(*PnCaloF!F}V7NZksF>f}%D68-Y2jB&s5c_HNzZHu2;8k_Yjfcp7=)ul0N(x zu5iq4Y3cZExHT5IuBi}Z-e_gbU#XQv&y&*J3Ueo#DeNpHDY{rH^?4*@aB^03e<9ec zXr4DjqFc(sS>L37V!tE{esPFMk6EXUn1BME9NTIcU=W2E$?X3ek!onl-O}|+>O1@f z_uu&;XfGi-i=}9CHgxJv|Az%~82n%&)RxI248a%;8M}G;u5x{M$AkT0BxdYFGOBi1 zsdF>i5Js0|xHMchB7Jjqrs#(H<{M)hYcF%A!$tA_=Gdmv@X**HC-ZQ70CqwcqFjIC zt0k+Ag`-}zPn8E*odWmOlSStPX+-C}@3FSMe40%T{4Rpt=ulbcOi#vc8Se8pmJ9R` zU=uYZy)fLLjz18aqQEX&=4azZK?pk5GqLpEPVVW5(`j38t}j#9XAqXezEJR5Cqnu8 zcDQcX=gXT5!p$)Yx<5PX||jEo^gOjO&Z}u-+36b4cAIM%&-m1Cft93bt2`>Vzim? zTQ%$QulGv1y{(w`_#1F}x_|G{SAIyMBrq)^lm7B*xoPLx$Mk2keC~U zs$&FI^PE9>XDoIf)^~|6eVVdN)#~nL^5OzMenwaeF)^m#O5;HV@cb2IPKRWc#BAdm1@) z7HI@Ss`D=-3$iFpdY(;vBj zWh{I0^0iS`L>8toq<63$L`g;~?70372HB>K`Z&A!Ar07+KS{dW z^z&+Kj{bDmz$n)p^yi1@r~WXM^Q z*yG{yo#onnI-L>VlZi9H(dM3eJ451PS3PkP|XhzF)dEV*knr zKB_SK)pgSshjVPP-eGq_FvXvzJSxnA5--ntuPrK59h!crl5jn*0ytg1h^kAw?XV7}7(K)_Iqd->m z@$M=_jwlm{Qjp(rAjSFByDw`~B^pw_$H1wWC&Sc=>X+VmO2Fr3U9Sd+c}aJ)-{K0x z18dw5b*<{lBKm5CPGLNae9y6@Ty$)r@>chMk88lI;QQl_g7eXaRdD%phAr&=1R77^ zD~D0B0%klXZoky-z1?bvuW^BWg$0!JSlA}>IBYvu{cR;wJ

b$!z5lnA{*2$auO{ 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 Q9$<z>% diff --git a/android/help/android_images/settings2-at.png b/android/help/android_images/settings2-at.png index 890ec39796966f624549be2b822a1ae74ac29fb8..ad4b7c83249bfab1383e960d8066f656e497ae3b 100644 GIT binary patch literal 30480 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 literal 28426 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 JN|en*{|CC(@HYSe literal 30424 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 From 64d8eaa7a72c55c1c0c1b9a4ab5afc3251f97a4a Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Thu, 15 Feb 2024 16:00:24 +0700 Subject: [PATCH 012/171] fix(web): frame key sticky highlighting --- web/src/engine/osk/src/visualKeyboard.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/engine/osk/src/visualKeyboard.ts b/web/src/engine/osk/src/visualKeyboard.ts index 56875b0b59d..dbdaaa33ad7 100644 --- a/web/src/engine/osk/src/visualKeyboard.ts +++ b/web/src/engine/osk/src/visualKeyboard.ts @@ -489,8 +489,8 @@ export default class VisualKeyboard extends EventEmitter implements Ke if(previewHost) { this.gesturePreviewHost = previewHost; trackingEntry.previewHost = previewHost; - sourceTrackingMap[source.identifier].key = key; } + sourceTrackingMap[source.identifier].key = key; } } From 4a102db939bfd4bdf6e51e742b323a845df5a52f Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Fri, 16 Feb 2024 08:09:57 +0700 Subject: [PATCH 013/171] docs(common): Update website README --- docs/websites/README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/websites/README.md b/docs/websites/README.md index 0aa999c0a69..e91332f1ac2 100644 --- a/docs/websites/README.md +++ b/docs/websites/README.md @@ -1,11 +1,8 @@ # How to Set Up a Local Web Server for the Keyman Web Pages -Currently, most of the Keyman websites are running via IIS. Refer to the Keyman [wiki](https://github.com/keymanapp/keyman/wiki/How-to-set-up-a-local-web-server-for-the-Keyman-web-pages) for setting that up on Windows 10. +Currently, most of the Keyman websites (*.keyman.com, *.keyman-staging.com) are running PHP 7.4 via Apache. -To make IIS redirects compatible with the Docker sites below, see -https://github.com/keymanapp/keyman.com/issues/337#issuecomment-1336339387 - -As the websites get migrated to Apache via Docker, follow the installation steps below: +For legacy configuration of IIS on Windows 10, refer to the deprecated Keyman [wiki](https://github.com/keymanapp/keyman/wiki/%5BDeprecated%5D-How-to-set-up-a-local-IIS-web-server-for-the-Keyman-web-pages). ## Pre-requisite Installs * [Docker Desktop](https://www.docker.com/products/docker-desktop/) @@ -19,7 +16,7 @@ https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-containers #### Other Docker Notes Docker tends to throttle Docker image downloads, so some developer offices may want to set up a proxy server. If the proxy server is set up, carefully edit the JSON file per in Docker Settings -> Docker Engine https://docs.docker.com/registry/recipes/mirror/#configure-the-docker-daemon and click 'Apply & Restart'. Note the example (lingnet) is for running inside the Linguistics Institute (Chiang Mai) -``` +```json "registry-mirrors": ["https://docker.io.registry.lingnet/"], "insecure-registries" : [ "docker.io.registry.lingnet", @@ -30,7 +27,7 @@ Docker tends to throttle Docker image downloads, so some developer offices may w ### Using Website-Local-Proxy Rather than remembering localhost port values below, you can clone and run [website-local-proxy](https://github.com/keymanapp/website-local-proxy). -Follow https://github.com/keymanapp/website-local-proxy?tab=readme-ov-file#using-website-local-proxy and you can access the local websites at +Refer to the [port lookup table](#port-lookup-table) to access the local websites at http://*keyman.com.localhost ## Builder BASH Script Actions @@ -58,6 +55,7 @@ This maps the local directory to the the Docker image. For sites that use Composer dependencies, this step also creates a link in the Docker image from /var/www/vendor/ to /var/www/html/vendor. The link file also appears locally. +##### Port lookup table After this, you can access the website at the following ports: | Website | URL | with website-local-proxy running | @@ -73,6 +71,10 @@ After this, you can access the website at the following ports: 1. Run `./build.sh clean`. #### Running tests +You might need to install the broken-link-checker first + +`npm install broken-link-checker` + Checks for broken links 1. Run `./build.sh test` From d7101b9e41d70127ed0959eca5971cbfa8c43e61 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Fri, 16 Feb 2024 08:26:46 +0700 Subject: [PATCH 014/171] docs(common): Remove reference to deprecated wiki --- docs/websites/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/websites/README.md b/docs/websites/README.md index e91332f1ac2..5fc84ffa596 100644 --- a/docs/websites/README.md +++ b/docs/websites/README.md @@ -2,8 +2,6 @@ Currently, most of the Keyman websites (*.keyman.com, *.keyman-staging.com) are running PHP 7.4 via Apache. -For legacy configuration of IIS on Windows 10, refer to the deprecated Keyman [wiki](https://github.com/keymanapp/keyman/wiki/%5BDeprecated%5D-How-to-set-up-a-local-IIS-web-server-for-the-Keyman-web-pages). - ## Pre-requisite Installs * [Docker Desktop](https://www.docker.com/products/docker-desktop/) From 4c71de850177f3e946ba4fb5b10700783c96df2d Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Fri, 16 Feb 2024 08:26:51 +0700 Subject: [PATCH 015/171] fix(web): missing null-guard for hardware keystrokes without active Keyman keyboard --- web/src/app/browser/src/hardwareEventKeyboard.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/app/browser/src/hardwareEventKeyboard.ts b/web/src/app/browser/src/hardwareEventKeyboard.ts index eea822d1cbc..506aa73df5f 100644 --- a/web/src/app/browser/src/hardwareEventKeyboard.ts +++ b/web/src/app/browser/src/hardwareEventKeyboard.ts @@ -257,7 +257,7 @@ export default class HardwareEventKeyboard extends HardKeyboard { } get activeKeyboard(): Keyboard { - return this.contextManager.activeKeyboard.keyboard; + return this.contextManager.activeKeyboard?.keyboard ?? null; } /** From 7151948c6d80c1dfffd615583583c3663dab7adc Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Fri, 16 Feb 2024 08:30:19 +0700 Subject: [PATCH 016/171] chore(web): clean redundancy --- web/src/app/browser/src/hardwareEventKeyboard.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/app/browser/src/hardwareEventKeyboard.ts b/web/src/app/browser/src/hardwareEventKeyboard.ts index 506aa73df5f..092ffeb0fcf 100644 --- a/web/src/app/browser/src/hardwareEventKeyboard.ts +++ b/web/src/app/browser/src/hardwareEventKeyboard.ts @@ -257,7 +257,7 @@ export default class HardwareEventKeyboard extends HardKeyboard { } get activeKeyboard(): Keyboard { - return this.contextManager.activeKeyboard?.keyboard ?? null; + return this.contextManager.activeKeyboard?.keyboard; } /** From 4171e41976cc607d3018c18345f72fe4737b76b6 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Fri, 16 Feb 2024 10:59:33 +0700 Subject: [PATCH 017/171] fix(web): keystrokes during keyboard activation should not throw errors --- web/src/engine/main/src/keymanEngine.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/web/src/engine/main/src/keymanEngine.ts b/web/src/engine/main/src/keymanEngine.ts index 4d158228d78..1400c82e9cd 100644 --- a/web/src/engine/main/src/keymanEngine.ts +++ b/web/src/engine/main/src/keymanEngine.ts @@ -52,6 +52,7 @@ export default class KeymanEngine< if(callback) { callback(null, null); } + return; } if(this.keyEventRefocus) { From 2311ada88852ead536880b27527081a7a49310c0 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Fri, 16 Feb 2024 11:00:09 +0700 Subject: [PATCH 018/171] fix(web): detection of element focused before engine init, related handling --- web/src/app/browser/src/contextManager.ts | 6 +- .../manual/web/init-race-10743/index.html | 112 ++++++++++++++++++ 2 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 web/src/test/manual/web/init-race-10743/index.html diff --git a/web/src/app/browser/src/contextManager.ts b/web/src/app/browser/src/contextManager.ts index 42b79109ef7..b095886edfd 100644 --- a/web/src/app/browser/src/contextManager.ts +++ b/web/src/app/browser/src/contextManager.ts @@ -1,7 +1,7 @@ import { type Keyboard, KeyboardScriptError } from '@keymanapp/keyboard-processor'; import { type KeyboardStub } from 'keyman/engine/package-cache'; import { CookieSerializer } from 'keyman/engine/dom-utils'; -import { eventOutputTarget, PageContextAttachment } from 'keyman/engine/attachment'; +import { eventOutputTarget, outputTargetForElement, PageContextAttachment } from 'keyman/engine/attachment'; import { DomEventTracker, LegacyEventEmitter } from 'keyman/engine/events'; import { DesignIFrame, OutputTarget, nestedInstanceOf } from 'keyman/engine/element-wrappers'; import { @@ -122,6 +122,10 @@ export default class ContextManager extends ContextManagerBase + + + + + + + + + + + + + + KeymanWeb Sample Page - Unminified Source + + + + + + + + + + + + + + + + + + + + +

KeymanWeb Sample Page - Page-init racing

+ +
KeymanWeb will not initialize for the first five seconds after loading. Start typing in + one of the elements indicated below before that in order to test engine-init / user-typing + race condition handling. +
+ +
+ +

Type in your language in this text area:

+ + +

or in this input field:

+ + + +

Add a keyboard by keyboard name:

+ + + +

Add a keyboard by BCP-47 language code:

+ + + +

Add a keyboard by language name(s):

+ + + +

Return to testing home page

+ + + +
+

--End of Document--

+ + + + + From cf1ea12181572e900daf01996f2a8e2bf15e0865 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Fri, 16 Feb 2024 11:03:41 +0700 Subject: [PATCH 019/171] feat(web): links new manual test page --- web/src/test/manual/web/index.html | 1 + web/src/test/manual/web/init-race-10743/index.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/web/src/test/manual/web/index.html b/web/src/test/manual/web/index.html index c53feb5e5a5..218eaa3a455 100644 --- a/web/src/test/manual/web/index.html +++ b/web/src/test/manual/web/index.html @@ -74,6 +74,7 @@

Tests handling of new default-subkey f

Test special characters rendering with keymanweb-osk.ttf (#9469)

Test text selection (#9073)

Test key-cap scaling / font load interactions (#10506)

+

Test page interaction + engine-initialization race condition handling (#10743)

Other

Keystroke processing regression test engine.


diff --git a/web/src/test/manual/web/init-race-10743/index.html b/web/src/test/manual/web/init-race-10743/index.html index cd250e4aede..971fd1f3a9a 100644 --- a/web/src/test/manual/web/init-race-10743/index.html +++ b/web/src/test/manual/web/init-race-10743/index.html @@ -53,7 +53,7 @@ -

KeymanWeb Sample Page - Page-init racing

+

KeymanWeb Sample Page - Page interaction / engine-init racing

KeymanWeb will not initialize for the first five seconds after loading. Start typing in one of the elements indicated below before that in order to test engine-init / user-typing From e338e259b518e6e4b42836736479e3a284d2c8ad Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Fri, 16 Feb 2024 11:50:40 +0700 Subject: [PATCH 020/171] fix(web): disables modipress for layer-switch keys with subkeys --- web/src/engine/osk/src/input/gestures/specsForLayout.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/web/src/engine/osk/src/input/gestures/specsForLayout.ts b/web/src/engine/osk/src/input/gestures/specsForLayout.ts index 551fa74165d..c5688e406f6 100644 --- a/web/src/engine/osk/src/input/gestures/specsForLayout.ts +++ b/web/src/engine/osk/src/input/gestures/specsForLayout.ts @@ -153,8 +153,16 @@ function buildDistFromKeyCentroidFunctor(key: KeyElement) { export function keySupportsModipress(key: KeyElement) { const keySpec = key.key.spec; + + // A key cannot reasonably support both longpresses and modipresses. + // It'd be quite ugly to overlay the subkey menu over the new layer during a modipress. + if(keySpec.sk) { + return false; + } + const modifierKeyIds = ['K_SHIFT', 'K_ALT', 'K_CTRL', 'K_NUMERALS', 'K_SYMBOLS', 'K_CURRENCIES']; for(const modKeyId of modifierKeyIds) { + if(keySpec.id == modKeyId) { return true; } From 1a477620ba869fb2706db705ede51923832eb05f Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Fri, 16 Feb 2024 14:55:25 +0700 Subject: [PATCH 021/171] docs(ios): what's new for 17.0 --- ios/help/about/whatsnew.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ios/help/about/whatsnew.md b/ios/help/about/whatsnew.md index ef14509db0a..0a762233595 100644 --- a/ios/help/about/whatsnew.md +++ b/ios/help/about/whatsnew.md @@ -1,6 +1,13 @@ --- title: What's New --- +Here are some of the new features we have added to Keyman 17.0 for Android: -Here are some of the new features we have added to Keyman for iPhone and iPad 17.0: +* New gesture support (#5029) +* Better use of space for predictions, better handling for long predictions (#7934) +* When suggestions aren't enabled, display a themed banner (#9696) +* Smoother keyboard initialization (#10022) +Additional changes: + +* Performance improvements From 63674cf717637912eacf1ce28c769e9af9f92b84 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Fri, 16 Feb 2024 14:55:44 +0700 Subject: [PATCH 022/171] docs(android): android what's new lacked banner improvement details --- android/help/about/whatsnew.md | 1 + 1 file changed, 1 insertion(+) diff --git a/android/help/about/whatsnew.md b/android/help/about/whatsnew.md index 9e9dc7e117f..37624e3f562 100644 --- a/android/help/about/whatsnew.md +++ b/android/help/about/whatsnew.md @@ -4,6 +4,7 @@ title: What's New Here are some of the new features we have added to Keyman 17.0 for Android: * New gesture support (#5029) +* Better use of space for predictions, better handling for long predictions (#7934) * When suggestions aren't enabled, display a themed banner (#9696) * Smoother keyboard initialization (#10022) From 653593a6f5b77392a5f5251bd8ad0525ad5d3331 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Fri, 16 Feb 2024 14:57:00 +0700 Subject: [PATCH 023/171] docs(ios): iOS is not Android --- ios/help/about/whatsnew.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/help/about/whatsnew.md b/ios/help/about/whatsnew.md index 0a762233595..b4747aa9acc 100644 --- a/ios/help/about/whatsnew.md +++ b/ios/help/about/whatsnew.md @@ -1,7 +1,7 @@ --- title: What's New --- -Here are some of the new features we have added to Keyman 17.0 for Android: +Here are some of the new features we have added to Keyman 17.0 for iPhone and iPad: * New gesture support (#5029) * Better use of space for predictions, better handling for long predictions (#7934) From 746af68afa5938ceb6f21578baf01a13ae816fed Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Fri, 16 Feb 2024 12:49:19 -0600 Subject: [PATCH 024/171] chore(core): shuffle transform matcher. re-enable failing case For #10736 --- core/src/ldml/ldml_transforms.cpp | 106 ++++++++++-------- core/src/ldml/ldml_transforms.hpp | 5 + .../unit/ldml/keyboards/ldml_test-test.xml | 3 +- 3 files changed, 67 insertions(+), 47 deletions(-) diff --git a/core/src/ldml/ldml_transforms.cpp b/core/src/ldml/ldml_transforms.cpp index f7f5202df98..6950f79e8b2 100644 --- a/core/src/ldml/ldml_transforms.cpp +++ b/core/src/ldml/ldml_transforms.cpp @@ -669,6 +669,62 @@ any_group::any_group(const transform_group &g) : type(any_group_type::transform) any_group::any_group(const reorder_group &g) : type(any_group_type::reorder), transform(), reorder(g) { } +size_t +any_group::apply(std::u32string &input, std::u32string &output, size_t matched) const { + if (type == any_group_type::transform) { + return apply_transform(input, output, matched); + } else if(type == any_group_type::reorder) { + return apply_reorder(input, output, matched); + } else { + assert(type != any_group_type::transform && type != any_group_type::reorder); + return matched; + } +} + +size_t +any_group::apply_transform(std::u32string &input, std::u32string &output, size_t matched) const { + std::u32string subOutput; + size_t subMatched = transform.apply(input, subOutput); + + if (subMatched != 0) { + // remove the matched part of the updatedInput + input.resize(input.length() - subMatched); // chop of the subMatched part at end + input.append(subOutput); // subOutput could be empty such as in backspace transform + + if (subMatched > output.size()) { + // including first time through + // expand match by amount subMatched prior to output + matched += (subMatched - output.size()); + } // else: didn't match prior to the existing output, so don't expand 'match' + + // now update 'output' + if (subOutput.length() >= output.length() || subMatched > output.length()) { + output = subOutput; // replace all output + } else { + // replace output with new output + output.resize(output.length() - subMatched); + output.append(subOutput); + } + } + return matched; +} + +size_t +any_group::apply_reorder(std::u32string &input, std::u32string &output, size_t matched) const { + // TODO-LDML: cheesy solution. We should be finding a smaller + // common match here. + std::u32string str2 = input; + if (reorder.apply(str2)) { + // pretend the whole thing matched + output.resize(0); + output.append(str2); + input.resize(0); + input.append(str2); + matched = output.length(); + } + return matched; +} + transforms::transforms(bool norm_disabled) : transform_groups(), normalization_disabled(norm_disabled) { } @@ -706,7 +762,7 @@ transform_group::apply(const std::u32string &input, std::u32string &output) cons * Apply this entire transform set to the input. * Example: input "abc" -> output="xyz", return=2: replace last two chars "bc" with "xyz", so final output = "abxyz"; * @param input input string, will match at end: unmodified - * @param output on output: if return>0, contains text to replace + * @param output cleared. on output: if return>0, contains text to replace * @return match length: number of chars at end of input string to modify. 0 if no match. */ size_t @@ -744,52 +800,12 @@ transforms::apply(const std::u32string &input, std::u32string &output) { * Matched can increment. */ size_t matched = 0; - /** modified copy of input */ + output.clear(); + /** modified copy of input, to pass to the next stage */ std::u32string updatedInput = input; + for (auto group = transform_groups.begin(); group < transform_groups.end(); group++) { - // for each transform group - // break out once there's a match - /** Length of match within this group*/ - - // find the first match in this group (if present) - if (group->type == any_group_type::transform) { - std::u32string subOutput; - size_t subMatched = group->transform.apply(updatedInput, subOutput); - - if (subMatched != 0) { - // remove the matched part of the updatedInput - updatedInput.resize(updatedInput.length() - subMatched); // chop of the subMatched part at end - updatedInput.append(subOutput); // subOutput could be empty such as in backspace transform - - if (subMatched > output.size()) { - // including first time through - // expand match by amount subMatched prior to output - matched += (subMatched - output.size()); - } // else: didn't match prior to the existing output, so don't expand 'match' - - // now update 'output' - if (subOutput.length() >= output.length() || subMatched > output.length()) { - output = subOutput; // replace all output - } else { - // replace output with new output - output.resize(output.length() - subMatched); - output.append(subOutput); - } - } - } else if (group->type == any_group_type::reorder) { - // TODO-LDML: cheesy solution. We should be finding a smaller - // common match here. - std::u32string str2 = updatedInput; - if (group->reorder.apply(str2)) { - // pretend the whole thing matched - output.resize(0); - output.append(str2); - updatedInput.resize(0); - updatedInput.append(str2); - matched = output.length(); - } - } - // else: continue to next group + matched = group->apply(updatedInput, output, matched); } /** * TODO-LDML: optimization to contract 'matched' if possible. diff --git a/core/src/ldml/ldml_transforms.hpp b/core/src/ldml/ldml_transforms.hpp index 14c228163db..1b56a762468 100644 --- a/core/src/ldml/ldml_transforms.hpp +++ b/core/src/ldml/ldml_transforms.hpp @@ -232,6 +232,11 @@ class any_group { any_group_type type; // transform or reorder transform_group transform; reorder_group reorder; + size_t apply(std::u32string &input, std::u32string &output, size_t matched) const; + +private: + size_t apply_transform(std::u32string &input, std::u32string &output, size_t matched) const; + size_t apply_reorder(std::u32string &input, std::u32string &output, size_t matched) const; }; /** diff --git a/core/tests/unit/ldml/keyboards/ldml_test-test.xml b/core/tests/unit/ldml/keyboards/ldml_test-test.xml index a1e75fa310c..ba9630e004d 100644 --- a/core/tests/unit/ldml/keyboards/ldml_test-test.xml +++ b/core/tests/unit/ldml/keyboards/ldml_test-test.xml @@ -26,8 +26,7 @@ - - + From ceb990e713eae554cc5ca898ef42e42138f928ab Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Fri, 16 Feb 2024 18:27:35 -0600 Subject: [PATCH 025/171] chore(core): more shuffling For #10736 --- core/src/ldml/ldml_transforms.cpp | 54 +++++++++++++++++-------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/core/src/ldml/ldml_transforms.cpp b/core/src/ldml/ldml_transforms.cpp index 6950f79e8b2..c7ecb56d0ee 100644 --- a/core/src/ldml/ldml_transforms.cpp +++ b/core/src/ldml/ldml_transforms.cpp @@ -686,40 +686,41 @@ any_group::apply_transform(std::u32string &input, std::u32string &output, size_t std::u32string subOutput; size_t subMatched = transform.apply(input, subOutput); - if (subMatched != 0) { - // remove the matched part of the updatedInput - input.resize(input.length() - subMatched); // chop of the subMatched part at end - input.append(subOutput); // subOutput could be empty such as in backspace transform - - if (subMatched > output.size()) { - // including first time through - // expand match by amount subMatched prior to output - matched += (subMatched - output.size()); - } // else: didn't match prior to the existing output, so don't expand 'match' - - // now update 'output' - if (subOutput.length() >= output.length() || subMatched > output.length()) { - output = subOutput; // replace all output - } else { - // replace output with new output - output.resize(output.length() - subMatched); - output.append(subOutput); - } + if (subMatched == 0) { + return matched; // no match, break out + } + + // remove the matched part of the updatedInput + input.resize(input.length() - subMatched); // chop of the subMatched part at end + input.append(subOutput); // subOutput could be empty such as in backspace transform + + if (subMatched > output.size()) { + // including first time through + // expand match by amount subMatched prior to output + matched += (subMatched - output.size()); + } // else: didn't match prior to the existing output, so don't expand 'match' + + // now update 'output' + if (subOutput.length() >= output.length() || subMatched > output.length()) { + output = subOutput; // replace all output + } else { + // replace output with new output + output.resize(output.length() - subMatched); + output.append(subOutput); } return matched; } size_t any_group::apply_reorder(std::u32string &input, std::u32string &output, size_t matched) const { - // TODO-LDML: cheesy solution. We should be finding a smaller - // common match here. std::u32string str2 = input; if (reorder.apply(str2)) { - // pretend the whole thing matched output.resize(0); output.append(str2); input.resize(0); input.append(str2); + // Consider the entire string as 'matched'. + // The calling chain will determine which characters actually changed. matched = output.length(); } return matched; @@ -801,14 +802,16 @@ transforms::apply(const std::u32string &input, std::u32string &output) { */ size_t matched = 0; output.clear(); - /** modified copy of input, to pass to the next stage */ + /** modified copy of input, to pass to each next step */ std::u32string updatedInput = input; + // loop over each group of transforms for (auto group = transform_groups.begin(); group < transform_groups.end(); group++) { matched = group->apply(updatedInput, output, matched); } + /** - * TODO-LDML: optimization to contract 'matched' if possible. + * Could optimize to contract 'matched' if possible. * We could decrement 'matched' for every char of output * which is already in input. Example (regex example): * - str = "xxyyzz"; @@ -819,6 +822,9 @@ transforms::apply(const std::u32string &input, std::u32string &output) { * (but could contract to match=1, output='w') * * could also handle from="x" to="x" as match=0 + * + * However, the calling code already checks for common prefixes, + * so this does not need to be optimized. */ return matched; } From 09739656ea8ac8592b89390257f69aa6ad51c7fd Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Wed, 25 Oct 2023 10:59:27 +0100 Subject: [PATCH 026/171] chore(developer): add ERROR_FileDoesNotExist test --- developer/src/kmc/test/test-infrastructureMessages.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 2b481fe6c93..696ae31eecc 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -36,13 +36,17 @@ describe('InfrastructureMessages', function () { assert.instanceOf(ncb.messages[0].exceptionVar, Error); }); -/* // ERROR_FileDoesNotExist it('should generate ERROR_FileDoesNotExist if a file does not exist', async function() { - await testForMessage(this, ['invalid-keyboards', 'error_file_does_not_exist.kmn'], CompilerMessages.ERROR_FileDoesNotExist); + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'Error_File_Does_Not_Exist.kmn'), ncb, {}); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileDoesNotExist), + `ERROR_FileDoesNotExist not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); +/* + // ERROR_FileTypeNotRecognized it('should generate ERROR_FileTypeNotRecognized if a file is not a recognized type', async function() { From 5301f7a176fdd2cb8ae062b51c6f256656860ec0 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Wed, 25 Oct 2023 11:19:27 +0100 Subject: [PATCH 027/171] chore(developer): add ERROR_FileTypeNotRecognized test --- .../invalid-keyboards/error_file_type_not_recognized.xxx | 1 + developer/src/kmc/test/test-infrastructureMessages.ts | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 developer/src/kmc/test/fixtures/invalid-keyboards/error_file_type_not_recognized.xxx diff --git a/developer/src/kmc/test/fixtures/invalid-keyboards/error_file_type_not_recognized.xxx b/developer/src/kmc/test/fixtures/invalid-keyboards/error_file_type_not_recognized.xxx new file mode 100644 index 00000000000..cc8f8ee6ce9 --- /dev/null +++ b/developer/src/kmc/test/fixtures/invalid-keyboards/error_file_type_not_recognized.xxx @@ -0,0 +1 @@ +This is a file used to test the unrecognised file type error (sse test-infrastructureMessages.ts) \ No newline at end of file diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 696ae31eecc..d7bb142e802 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -45,14 +45,17 @@ describe('InfrastructureMessages', function () { `ERROR_FileDoesNotExist not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); -/* - // ERROR_FileTypeNotRecognized it('should generate ERROR_FileTypeNotRecognized if a file is not a recognized type', async function() { - await testForMessage(this, ['invalid-keyboards', 'error_file_type_not_recognized.xxx'], CompilerMessages.ERROR_FileTypeNotRecognized); + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'error_file_type_not_recognized.xxx'), ncb, {}); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotRecognized), + `ERROR_FileTypeNotRecognized not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); +/* + // ERROR_OutFileNotValidForProjects it('should generate ERROR_OutFileNotValidForProjects if an output file is specified for a project build', async function() { From 3f383e64e3a9a08e882800ba01e108a635af3f6f Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 23 Nov 2023 10:22:21 +0000 Subject: [PATCH 028/171] chore(developer): correct typo in error_file_type_not_recognized.xxx --- .../invalid-keyboards/error_file_type_not_recognized.xxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developer/src/kmc/test/fixtures/invalid-keyboards/error_file_type_not_recognized.xxx b/developer/src/kmc/test/fixtures/invalid-keyboards/error_file_type_not_recognized.xxx index cc8f8ee6ce9..162d8d5f2ec 100644 --- a/developer/src/kmc/test/fixtures/invalid-keyboards/error_file_type_not_recognized.xxx +++ b/developer/src/kmc/test/fixtures/invalid-keyboards/error_file_type_not_recognized.xxx @@ -1 +1 @@ -This is a file used to test the unrecognised file type error (sse test-infrastructureMessages.ts) \ No newline at end of file +This is a file used to test the unrecognised file type error (see test-infrastructureMessages.ts) \ No newline at end of file From af6ccc4d83c2a699acad55495dd765b7c620eedd Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 23 Nov 2023 11:01:18 +0000 Subject: [PATCH 029/171] chore(developer): add ERROR_OutFileNotValidForProjects unit test --- .../kmc/test/test-infrastructureMessages.ts | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index d7bb142e802..53bf0818a60 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -9,6 +9,7 @@ import { unitTestEndpoints } from '../src/commands/build.js'; import { KmnCompilerMessages } from '@keymanapp/kmc-kmn'; import { clearOptions } from '@keymanapp/developer-utils'; import { loadProject } from '../src/util/projectLoader.js'; +import { defaultCompilerOptions, CompilerOptions} from '@keymanapp/common-types'; describe('InfrastructureMessages', function () { @@ -40,7 +41,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_FileDoesNotExist if a file does not exist', async function() { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'Error_File_Does_Not_Exist.kmn'), ncb, {}); + await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'Error_File_Does_Not_Exist.kmn'), '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileDoesNotExist), `ERROR_FileDoesNotExist not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); @@ -49,19 +50,24 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_FileTypeNotRecognized if a file is not a recognized type', async function() { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'error_file_type_not_recognized.xxx'), ncb, {}); + await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'error_file_type_not_recognized.xxx'), '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotRecognized), `ERROR_FileTypeNotRecognized not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); -/* - - // ERROR_OutFileNotValidForProjects +// ERROR_OutFileNotValidForProjects - it('should generate ERROR_OutFileNotValidForProjects if an output file is specified for a project build', async function() { - await testForMessage(this, ['invalid-keyboards', 'error_out_file_not_valid_for_projects.kpj'], CompilerMessages.ERROR_OutFileNotValidForProjects); - }); +it('should generate ERROR_OutFileNotValidForProjects if an output file is specified for a project build', async function() { + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + const projectPath = makePathToFixture('kpj-2.0/khmer_angkor', 'khmer_angkor.kpj'); + const outFilePath = makePathToFixture('kpj-2.0/khmer_angkor', 'khmer_angkor.kmx'); + const options: CompilerOptions = {...defaultCompilerOptions}; + await unitTestEndpoints.build(projectPath, outFilePath, ncb, options); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_OutFileNotValidForProjects), + `ERROR_OutFileNotValidForProjects not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); +}); +/* // ERROR_InvalidProjectFile it('should generate ERROR_InvalidProjectFile if a project file is invalid', async function() { @@ -70,7 +76,7 @@ describe('InfrastructureMessages', function () { */ // ERROR_InvalidProjectFolder (invalid source folder) - + it('should generate ERROR_InvalidProjectFolder if there are no valid file types in the source folder when generating a default project file', async function() { const projectPath = makePathToFixture('invalid-source-folder', 'error_invalid_project_folder.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); From 24e7105a9bf325d85ad278ad7540253b36ca8a48 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 30 Nov 2023 10:23:07 +0000 Subject: [PATCH 030/171] chore(developer): add ERROR_InvalidProjectFile unit test --- .../error_invalid_project_file.kpj | 1 + .../kmc/test/test-infrastructureMessages.ts | 29 ++++++++++--------- 2 files changed, 16 insertions(+), 14 deletions(-) create mode 100644 developer/src/kmc/test/fixtures/invalid-project/error_invalid_project_file.kpj diff --git a/developer/src/kmc/test/fixtures/invalid-project/error_invalid_project_file.kpj b/developer/src/kmc/test/fixtures/invalid-project/error_invalid_project_file.kpj new file mode 100644 index 00000000000..e01a746e66d --- /dev/null +++ b/developer/src/kmc/test/fixtures/invalid-project/error_invalid_project_file.kpj @@ -0,0 +1 @@ +This is a file used to test the invalid project file error (see test-infrastructureMessages.ts) \ No newline at end of file diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 53bf0818a60..c7a097db1d7 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -55,25 +55,26 @@ describe('InfrastructureMessages', function () { `ERROR_FileTypeNotRecognized not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); -// ERROR_OutFileNotValidForProjects - -it('should generate ERROR_OutFileNotValidForProjects if an output file is specified for a project build', async function() { - const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - const projectPath = makePathToFixture('kpj-2.0/khmer_angkor', 'khmer_angkor.kpj'); - const outFilePath = makePathToFixture('kpj-2.0/khmer_angkor', 'khmer_angkor.kmx'); - const options: CompilerOptions = {...defaultCompilerOptions}; - await unitTestEndpoints.build(projectPath, outFilePath, ncb, options); - assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_OutFileNotValidForProjects), - `ERROR_OutFileNotValidForProjects not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); -}); + // ERROR_OutFileNotValidForProjects + + it('should generate ERROR_OutFileNotValidForProjects if an output file is specified for a project build', async function() { + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + const projectPath = makePathToFixture('kpj-2.0/khmer_angkor', 'khmer_angkor.kpj'); + const outFilePath = makePathToFixture('kpj-2.0/khmer_angkor', 'khmer_angkor.kmx'); + const options: CompilerOptions = {...defaultCompilerOptions}; + await unitTestEndpoints.build(projectPath, outFilePath, ncb, options); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_OutFileNotValidForProjects), + `ERROR_OutFileNotValidForProjects not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + }); -/* // ERROR_InvalidProjectFile it('should generate ERROR_InvalidProjectFile if a project file is invalid', async function() { - await testForMessage(this, ['invalid-keyboards', 'error_invalid_project_file.kpj'], CompilerMessages.ERROR_InvalidProjectFile); + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + await unitTestEndpoints.build(makePathToFixture('invalid-project', 'error_invalid_project_file.kpj'), '', ncb, {}); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFile), + `ERROR_InvalidProjectFile not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); - */ // ERROR_InvalidProjectFolder (invalid source folder) From 015b81014cd509ca33abb346564c70993fe4cbda Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Mon, 4 Dec 2023 10:04:08 +0000 Subject: [PATCH 031/171] chore(developer): add ERROR_NotAProjectFile unit test --- .../invalid-project/error_not_a_project_file.xxx | 1 + developer/src/kmc/test/test-infrastructureMessages.ts | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 developer/src/kmc/test/fixtures/invalid-project/error_not_a_project_file.xxx diff --git a/developer/src/kmc/test/fixtures/invalid-project/error_not_a_project_file.xxx b/developer/src/kmc/test/fixtures/invalid-project/error_not_a_project_file.xxx new file mode 100644 index 00000000000..f7fff35790d --- /dev/null +++ b/developer/src/kmc/test/fixtures/invalid-project/error_not_a_project_file.xxx @@ -0,0 +1 @@ +This is a file used to test the not a project file error (see test-infrastructureMessages.ts) \ No newline at end of file diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index c7a097db1d7..174edd27e44 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -86,6 +86,16 @@ describe('InfrastructureMessages', function () { `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); + // ERROR_NotAProjectFile + + it('should generate ERROR_NotAProjectFile if a project file is not the correct type', async function() { + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + const projectPath = makePathToFixture('invalid-project', 'error_not_a_project_file.xxx') + loadProject(projectPath, ncb); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_NotAProjectFile), + `ERROR_NotAProjectFile not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + }); + // HINT_FilenameHasDifferingCase it('should generate HINT_FilenameHasDifferingCase if a referenced file has differing case', async function() { From 85d95ffa4f9c7a95fd4de69fe19cef2d73205347 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Tue, 5 Dec 2023 10:53:09 +0000 Subject: [PATCH 032/171] chore(developer): refactor to rename fixture/invalid-project to invalid-projects --- .../error_invalid_project_file.kpj | 0 .../error_not_a_project_file.xxx | 0 developer/src/kmc/test/test-infrastructureMessages.ts | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename developer/src/kmc/test/fixtures/{invalid-project => invalid-projects}/error_invalid_project_file.kpj (100%) rename developer/src/kmc/test/fixtures/{invalid-project => invalid-projects}/error_not_a_project_file.xxx (100%) diff --git a/developer/src/kmc/test/fixtures/invalid-project/error_invalid_project_file.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_invalid_project_file.kpj similarity index 100% rename from developer/src/kmc/test/fixtures/invalid-project/error_invalid_project_file.kpj rename to developer/src/kmc/test/fixtures/invalid-projects/error_invalid_project_file.kpj diff --git a/developer/src/kmc/test/fixtures/invalid-project/error_not_a_project_file.xxx b/developer/src/kmc/test/fixtures/invalid-projects/error_not_a_project_file.xxx similarity index 100% rename from developer/src/kmc/test/fixtures/invalid-project/error_not_a_project_file.xxx rename to developer/src/kmc/test/fixtures/invalid-projects/error_not_a_project_file.xxx diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 174edd27e44..06bf471a7ba 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -71,7 +71,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_InvalidProjectFile if a project file is invalid', async function() { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await unitTestEndpoints.build(makePathToFixture('invalid-project', 'error_invalid_project_file.kpj'), '', ncb, {}); + await unitTestEndpoints.build(makePathToFixture('invalid-projects', 'error_invalid_project_file.kpj'), '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFile), `ERROR_InvalidProjectFile not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); @@ -90,7 +90,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_NotAProjectFile if a project file is not the correct type', async function() { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - const projectPath = makePathToFixture('invalid-project', 'error_not_a_project_file.xxx') + const projectPath = makePathToFixture('invalid-projects', 'error_not_a_project_file.xxx') loadProject(projectPath, ncb); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_NotAProjectFile), `ERROR_NotAProjectFile not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); From e4821c872b8ca4263b10efa8a3c2c0be2a16d4f5 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 7 Dec 2023 11:44:53 +0000 Subject: [PATCH 033/171] chore(developer): add ERROR_UnknownFileFormat unit test and supporting endpoint --- developer/src/kmc/src/commands/analyze.ts | 7 +++++++ .../fixtures/analyze/error_unknown_file_format.xxx | 1 + developer/src/kmc/test/test-infrastructureMessages.ts | 11 +++++++++++ 3 files changed, 19 insertions(+) create mode 100644 developer/src/kmc/test/fixtures/analyze/error_unknown_file_format.xxx diff --git a/developer/src/kmc/src/commands/analyze.ts b/developer/src/kmc/src/commands/analyze.ts index 0ee8149d0b2..fd6314ec86d 100644 --- a/developer/src/kmc/src/commands/analyze.ts +++ b/developer/src/kmc/src/commands/analyze.ts @@ -121,3 +121,10 @@ async function analyzeOskRewritePua(callbacks: CompilerCallbacks, filenames: str return true; }); } + +/** + * these are exported only for unit tests, do not use + */ +export const analyzeUnitTestEndpoints = { + analyzeOskCharUse +}; \ No newline at end of file diff --git a/developer/src/kmc/test/fixtures/analyze/error_unknown_file_format.xxx b/developer/src/kmc/test/fixtures/analyze/error_unknown_file_format.xxx new file mode 100644 index 00000000000..5ae49a58cba --- /dev/null +++ b/developer/src/kmc/test/fixtures/analyze/error_unknown_file_format.xxx @@ -0,0 +1 @@ +This is a file used to test the unknown file format error (see test-infrastructureMessages.ts) \ No newline at end of file diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 06bf471a7ba..5456c2bce3d 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -10,6 +10,7 @@ import { KmnCompilerMessages } from '@keymanapp/kmc-kmn'; import { clearOptions } from '@keymanapp/developer-utils'; import { loadProject } from '../src/util/projectLoader.js'; import { defaultCompilerOptions, CompilerOptions} from '@keymanapp/common-types'; +import { analyzeUnitTestEndpoints } from '../src/commands/analyze.js'; describe('InfrastructureMessages', function () { @@ -96,6 +97,16 @@ describe('InfrastructureMessages', function () { `ERROR_NotAProjectFile not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); + // ERROR_UnknownFileFormat + + it('should generate ERROR_UnknownFileFormat if an analyze osk-char-use mapping file is not the correct type', async function() { + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + const options = {mappingFile: makePathToFixture('analyze', 'error_not_a_project_file.xxx')}; + await analyzeUnitTestEndpoints.analyzeOskCharUse(ncb, [], options); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_UnknownFileFormat), + `ERROR_NotAProjectFile not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + }); + // HINT_FilenameHasDifferingCase it('should generate HINT_FilenameHasDifferingCase if a referenced file has differing case', async function() { From f39ba347b25064f95909b28fe6d3a65882c8ed96 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 14 Dec 2023 11:10:58 +0000 Subject: [PATCH 034/171] chore(developer): add ERROR_FileTypeNotFound (BuildKeyboardInfo) unit test --- .../error_file_type_not_found_kbd.kpj | 24 +++++++++++++++++++ .../kmc/test/test-infrastructureMessages.ts | 12 ++++++++++ 2 files changed, 36 insertions(+) create mode 100644 developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_kbd.kpj diff --git a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_kbd.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_kbd.kpj new file mode 100644 index 00000000000..dd35f982a18 --- /dev/null +++ b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_kbd.kpj @@ -0,0 +1,24 @@ + + + + $PROJECTPATH + False + False + False + keyboard + + + + error_file_type_not_found_kbd_1 + error_file_type_not_found_kbd.kmn + error_file_type_not_found_kbd.kmn + 1.0 + .kmn +
+ error_file_type_not_found_kbd + Copyright (C) Keyman Team +
+
+ +
+
diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 5456c2bce3d..23ea5424160 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -11,6 +11,7 @@ import { clearOptions } from '@keymanapp/developer-utils'; import { loadProject } from '../src/util/projectLoader.js'; import { defaultCompilerOptions, CompilerOptions} from '@keymanapp/common-types'; import { analyzeUnitTestEndpoints } from '../src/commands/analyze.js'; +import { BuildKeyboardInfo } from '../src/commands/buildClasses/BuildKeyboardInfo.js'; describe('InfrastructureMessages', function () { @@ -107,6 +108,17 @@ describe('InfrastructureMessages', function () { `ERROR_NotAProjectFile not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); + // ERROR_FileTypeNotFound (BuildKeyboardInfo) + + it('should generate ERROR_FileTypeNotFound if a project file does not contain a .kps file entry (BuildKeyboardInfo)', async function() { + const buildKeyboardInfo = new BuildKeyboardInfo(); + const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found_kbd.kpj') + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + await buildKeyboardInfo.build(projectPath, ncb, {}); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), + `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + }); + // HINT_FilenameHasDifferingCase it('should generate HINT_FilenameHasDifferingCase if a referenced file has differing case', async function() { From 8af4b93120afef5d9a536cbfc0bcf04bb1bfe931 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Mon, 29 Jan 2024 09:55:46 +0000 Subject: [PATCH 035/171] chore(developer): add ERROR_FileTypeNotFound (BuildModelInfo; .model.ts) unit test --- .../error_file_type_not_found_mdl_mdl.kpj | 35 +++++++++++++++++++ .../kmc/test/test-infrastructureMessages.ts | 12 +++++++ 2 files changed, 47 insertions(+) create mode 100644 developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj diff --git a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj new file mode 100644 index 00000000000..0f17d707857 --- /dev/null +++ b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj @@ -0,0 +1,35 @@ + + + + $PROJECTPATH + False + False + False + keyboard + + + + error_file_type_not_found_mdl_mdl_1 + error_file_type_not_found_mdl_mdl.kmn + error_file_type_not_found_mdl_mdl.kmn + 1.0 + .kmn +
+ error_file_type_not_found_mdl_mdl + Copyright (C) Keyman Team +
+
+ + + error_file_type_not_found_mdl_mdl_3 + error_file_type_not_found_mdl_mdl.kps + error_file_type_not_found_mdl_mdl.kps + + .kps +
+ error_file_type_not_found_mdl_mdl + Copyright (C) Keyman Team +
+
+
+
diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 23ea5424160..2073b149f46 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -12,6 +12,7 @@ import { loadProject } from '../src/util/projectLoader.js'; import { defaultCompilerOptions, CompilerOptions} from '@keymanapp/common-types'; import { analyzeUnitTestEndpoints } from '../src/commands/analyze.js'; import { BuildKeyboardInfo } from '../src/commands/buildClasses/BuildKeyboardInfo.js'; +import { BuildModelInfo } from '../src/commands/buildClasses/BuildModelInfo.js'; describe('InfrastructureMessages', function () { @@ -119,6 +120,17 @@ describe('InfrastructureMessages', function () { `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); + // ERROR_FileTypeNotFound (BuildModelInfo; .model.ts) + + it('should generate ERROR_FileTypeNotFound if a project file does not contain a .model.ts file entry (BuildModelInfo)', async function() { + const buildModelInfo = new BuildModelInfo(); + const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found_mdl_mdl.kpj') + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + await buildModelInfo.build(projectPath, ncb, {}); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), + `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + }); + // HINT_FilenameHasDifferingCase it('should generate HINT_FilenameHasDifferingCase if a referenced file has differing case', async function() { From ca3362469f77489d4a2be40b9b44dc21842d5a2f Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Mon, 29 Jan 2024 10:21:35 +0000 Subject: [PATCH 036/171] chore(developer): add ERROR_FileTypeNotFound (BuildModelInfo; .kps) unit test --- .../error_file_type_not_found_mdl_kps.kpj | 35 +++++++++++++++++++ .../kmc/test/test-infrastructureMessages.ts | 11 ++++++ 2 files changed, 46 insertions(+) create mode 100644 developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj diff --git a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj new file mode 100644 index 00000000000..4fabebfa76e --- /dev/null +++ b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj @@ -0,0 +1,35 @@ + + + + $PROJECTPATH + False + False + False + keyboard + + + + error_file_type_not_found_mdl_kps_1 + error_file_type_not_found_mdl_kps.kmn + error_file_type_not_found_mdl_kps.kmn + 1.0 + .kmn +
+ error_file_type_not_found_mdl_kps + Copyright (C) Keyman Team +
+
+ + error_file_type_not_found_mdl_kps_2 + error_file_type_not_found_mdl_kps.model.ts + error_file_type_not_found_mdl_kps.model.ts + + .model.ts +
+ error_file_type_not_found_mdl_kps + Copyright (C) Keyman Team +
+
+ +
+
diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 2073b149f46..0079b65f0b9 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -131,6 +131,17 @@ describe('InfrastructureMessages', function () { `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); + // ERROR_FileTypeNotFound (BuildModelInfo; .kps) + + it('should generate ERROR_FileTypeNotFound if a project file does not contain a .kps file entry (BuildModelInfo)', async function() { + const buildModelInfo = new BuildModelInfo(); + const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found_mdl_kps.kpj') + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + await buildModelInfo.build(projectPath, ncb, {}); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), + `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + }); + // HINT_FilenameHasDifferingCase it('should generate HINT_FilenameHasDifferingCase if a referenced file has differing case', async function() { From 5ef356a1949b0394b158c763966e1cbb44f54d11 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 1 Feb 2024 10:31:18 +0000 Subject: [PATCH 037/171] chore(developer): correct .kpj fixtures for ERROR_FileTypeNotFound BuildModelInfo tests --- .../error_file_type_not_found_mdl_kps.kpj | 15 ++------------- .../error_file_type_not_found_mdl_mdl.kpj | 15 ++------------- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj index 4fabebfa76e..3784422768f 100644 --- a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj +++ b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj @@ -5,22 +5,11 @@ False False False - keyboard + lexicalmodel - - error_file_type_not_found_mdl_kps_1 - error_file_type_not_found_mdl_kps.kmn - error_file_type_not_found_mdl_kps.kmn - 1.0 - .kmn -
- error_file_type_not_found_mdl_kps - Copyright (C) Keyman Team -
-
- error_file_type_not_found_mdl_kps_2 + error_file_type_not_found_mdl_kps_1 error_file_type_not_found_mdl_kps.model.ts error_file_type_not_found_mdl_kps.model.ts diff --git a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj index 0f17d707857..400028dfce4 100644 --- a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj +++ b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj @@ -5,23 +5,12 @@ False False False - keyboard + lexicalmodel - - error_file_type_not_found_mdl_mdl_1 - error_file_type_not_found_mdl_mdl.kmn - error_file_type_not_found_mdl_mdl.kmn - 1.0 - .kmn -
- error_file_type_not_found_mdl_mdl - Copyright (C) Keyman Team -
-
- error_file_type_not_found_mdl_mdl_3 + error_file_type_not_found_mdl_mdl_2 error_file_type_not_found_mdl_mdl.kps error_file_type_not_found_mdl_mdl.kps From 91524edfa9ad7413c7ff7a1830a7da210db56214 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Mon, 5 Feb 2024 11:07:42 +0000 Subject: [PATCH 038/171] chore(developer): add additional file type asserts to ERROR_FileTypeNotFound BuildModelInfo tests --- developer/src/kmc/test/test-infrastructureMessages.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 0079b65f0b9..61984c275c1 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -4,7 +4,7 @@ import { InfrastructureMessages } from '../src/messages/infrastructureMessages.j import { verifyCompilerMessagesObject } from '@keymanapp/developer-test-helpers'; import { makePathToFixture } from './helpers/index.js'; import { NodeCompilerCallbacks } from '../src/util/NodeCompilerCallbacks.js'; -import { CompilerErrorNamespace, CompilerEvent } from '@keymanapp/common-types'; +import { CompilerErrorNamespace, CompilerEvent, KeymanFileTypes } from '@keymanapp/common-types'; import { unitTestEndpoints } from '../src/commands/build.js'; import { KmnCompilerMessages } from '@keymanapp/kmc-kmn'; import { clearOptions } from '@keymanapp/developer-utils'; @@ -129,6 +129,8 @@ describe('InfrastructureMessages', function () { await buildModelInfo.build(projectPath, ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + assert.isTrue(nodeCompilerMessage(ncb, InfrastructureMessages.ERROR_FileTypeNotFound).includes(KeymanFileTypes.Source.Model), + KeymanFileTypes.Source.Model+` not found in the message`); }); // ERROR_FileTypeNotFound (BuildModelInfo; .kps) @@ -140,6 +142,8 @@ describe('InfrastructureMessages', function () { await buildModelInfo.build(projectPath, ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + assert.isTrue(nodeCompilerMessage(ncb, InfrastructureMessages.ERROR_FileTypeNotFound).includes(KeymanFileTypes.Source.Package), + KeymanFileTypes.Source.Package+` not found in the message`); }); // HINT_FilenameHasDifferingCase @@ -187,4 +191,8 @@ function assertMessagesEqual(actualMessages: CompilerEvent[], expectedMessages: assert.deepEqual(actualMessages.map(m => m.code), expectedMessages, `actual callbacks.messages:\n${JSON.stringify(actualMessages,null,2)}\n\n`+ `did not match expected:\n${JSON.stringify(expectedMessages,null,2)}\n\n`); +} + +function nodeCompilerMessage(ncb: NodeCompilerCallbacks, code: number): string { + return ncb.messages.find((item) => item.code == code).message ?? ''; } \ No newline at end of file From 9fa6d23a541db625d6f46d3bb20e83d0987c3f58 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Tue, 6 Feb 2024 10:25:36 +0000 Subject: [PATCH 039/171] chore(developer): change to reflect addition of outfile parameter to build methods --- developer/src/kmc/test/test-infrastructureMessages.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 61984c275c1..7c581218c57 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -115,7 +115,7 @@ describe('InfrastructureMessages', function () { const buildKeyboardInfo = new BuildKeyboardInfo(); const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found_kbd.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await buildKeyboardInfo.build(projectPath, ncb, {}); + await buildKeyboardInfo.build(projectPath, '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); @@ -126,7 +126,7 @@ describe('InfrastructureMessages', function () { const buildModelInfo = new BuildModelInfo(); const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found_mdl_mdl.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await buildModelInfo.build(projectPath, ncb, {}); + await buildModelInfo.build(projectPath, '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); assert.isTrue(nodeCompilerMessage(ncb, InfrastructureMessages.ERROR_FileTypeNotFound).includes(KeymanFileTypes.Source.Model), @@ -139,7 +139,7 @@ describe('InfrastructureMessages', function () { const buildModelInfo = new BuildModelInfo(); const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found_mdl_kps.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await buildModelInfo.build(projectPath, ncb, {}); + await buildModelInfo.build(projectPath, '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); assert.isTrue(nodeCompilerMessage(ncb, InfrastructureMessages.ERROR_FileTypeNotFound).includes(KeymanFileTypes.Source.Package), From eb68475d35daf898693456204cbac92f157d851e Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Wed, 7 Feb 2024 17:13:59 +0000 Subject: [PATCH 040/171] chore(developer): correct error message in ERROR_UnknownFileFormat test --- developer/src/kmc/test/test-infrastructureMessages.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 7c581218c57..eda1f8dcdf4 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -106,7 +106,7 @@ describe('InfrastructureMessages', function () { const options = {mappingFile: makePathToFixture('analyze', 'error_not_a_project_file.xxx')}; await analyzeUnitTestEndpoints.analyzeOskCharUse(ncb, [], options); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_UnknownFileFormat), - `ERROR_NotAProjectFile not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + `ERROR_UnknownFileFormat not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); // ERROR_FileTypeNotFound (BuildKeyboardInfo) From 1023c7c902cd416f4b04a458590707fa200e69d3 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Mon, 12 Feb 2024 10:27:34 +0000 Subject: [PATCH 041/171] chore(developer): add ERROR_InvalidProjectFolder (no source folder) unit test --- .../kmc/test/fixtures/empty-folder/.gitkeep | 0 .../kmc/test/test-infrastructureMessages.ts | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 developer/src/kmc/test/fixtures/empty-folder/.gitkeep diff --git a/developer/src/kmc/test/fixtures/empty-folder/.gitkeep b/developer/src/kmc/test/fixtures/empty-folder/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index eda1f8dcdf4..bb8b15a7551 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -146,6 +146,25 @@ describe('InfrastructureMessages', function () { KeymanFileTypes.Source.Package+` not found in the message`); }); + // ERROR_InvalidProjectFolder (no source folder) + it('should generate ERROR_InvalidProjectFolder if there is no source folder when generating a default project file', async function() { + const projectPath = makePathToFixture('empty-folder', 'error_invalid_project_folder.kpj') + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + loadProject(projectPath, ncb); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFolder), + `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + }); + + // ERROR_InvalidProjectFolder (invalid source folder) + + it('should generate ERROR_InvalidProjectFolder if there are no valid file types in the source folder when generating a default project file', async function() { + const projectPath = makePathToFixture('invalid-source-folder', 'error_invalid_project_folder.kpj') + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + loadProject(projectPath, ncb); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFolder), + `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + }); + // HINT_FilenameHasDifferingCase it('should generate HINT_FilenameHasDifferingCase if a referenced file has differing case', async function() { From ec8d2339a686537bec8377444e3387848fcdf5ff Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Mon, 12 Feb 2024 10:39:42 +0000 Subject: [PATCH 042/171] chore(developer): add ERROR_CannotCreateFolder infrastructure message unit test --- .../src/kmc/test/fixtures/invalid-projects/build | 1 + developer/src/kmc/test/test-infrastructureMessages.ts | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 developer/src/kmc/test/fixtures/invalid-projects/build diff --git a/developer/src/kmc/test/fixtures/invalid-projects/build b/developer/src/kmc/test/fixtures/invalid-projects/build new file mode 100644 index 00000000000..ce5a9fe3c02 --- /dev/null +++ b/developer/src/kmc/test/fixtures/invalid-projects/build @@ -0,0 +1 @@ +This is a file used to test the cannot create folder error (see test-infrastructureMessages.ts) \ No newline at end of file diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index bb8b15a7551..c6f185acb58 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -165,6 +165,17 @@ describe('InfrastructureMessages', function () { `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); }); + // ERROR_CannotCreateFolder + + it('should generate ERROR_CannotCreateFolder if the output folder cannot be created', async function() { + const buildKeyboardInfo = new BuildKeyboardInfo(); + const targetFilename = makePathToFixture('invalid-projects', 'build', 'error_cannot create_folder.xxx') + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + buildKeyboardInfo['createOutputFolder'](targetFilename, ncb); // call private method + assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_CannotCreateFolder), + `ERROR_CannotCreateFolder not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + }); + // HINT_FilenameHasDifferingCase it('should generate HINT_FilenameHasDifferingCase if a referenced file has differing case', async function() { From f1fbb5a86a783e5861669a2f04093a3781d657ee Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 15 Feb 2024 09:43:28 +0000 Subject: [PATCH 043/171] chore(developer): change folder name in ERROR_InvalidProjectFolder (no source folder) test' --- developer/src/kmc/test/fixtures/empty-folder/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 developer/src/kmc/test/fixtures/empty-folder/.gitkeep diff --git a/developer/src/kmc/test/fixtures/empty-folder/.gitkeep b/developer/src/kmc/test/fixtures/empty-folder/.gitkeep deleted file mode 100644 index e69de29bb2d..00000000000 From 1a53c9d0742a217309086ba0a4e4bef35db4d5fe Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 15 Feb 2024 09:50:14 +0000 Subject: [PATCH 044/171] chore(developer): rename fixture file in 'ERROR_FileTypeNotFound (BuildKeyboardInfo)' test --- .../error_file_type_not_found_kbd.kpj | 24 ------------------- .../kmc/test/test-infrastructureMessages.ts | 4 ++-- 2 files changed, 2 insertions(+), 26 deletions(-) delete mode 100644 developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_kbd.kpj diff --git a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_kbd.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_kbd.kpj deleted file mode 100644 index dd35f982a18..00000000000 --- a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_kbd.kpj +++ /dev/null @@ -1,24 +0,0 @@ - - - - $PROJECTPATH - False - False - False - keyboard - - - - error_file_type_not_found_kbd_1 - error_file_type_not_found_kbd.kmn - error_file_type_not_found_kbd.kmn - 1.0 - .kmn -
- error_file_type_not_found_kbd - Copyright (C) Keyman Team -
-
- -
-
diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index c6f185acb58..36728df188f 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -113,7 +113,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_FileTypeNotFound if a project file does not contain a .kps file entry (BuildKeyboardInfo)', async function() { const buildKeyboardInfo = new BuildKeyboardInfo(); - const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found_kbd.kpj') + const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found__keyboard.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); await buildKeyboardInfo.build(projectPath, '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), @@ -148,7 +148,7 @@ describe('InfrastructureMessages', function () { // ERROR_InvalidProjectFolder (no source folder) it('should generate ERROR_InvalidProjectFolder if there is no source folder when generating a default project file', async function() { - const projectPath = makePathToFixture('empty-folder', 'error_invalid_project_folder.kpj') + const projectPath = makePathToFixture('no-source-folder', 'error_invalid_project_folder.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); loadProject(projectPath, ncb); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFolder), From 1e292c34dc63023ff2ee2c296dfd9d79e4534920 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 15 Feb 2024 09:54:03 +0000 Subject: [PATCH 045/171] chore(developer): rename fixture file in 'ERROR_FileTypeNotFound (BuildModelInfo; .kps)' test --- .../error_file_type_not_found_mdl_kps.kpj | 24 ------------------- .../kmc/test/test-infrastructureMessages.ts | 2 +- 2 files changed, 1 insertion(+), 25 deletions(-) delete mode 100644 developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj diff --git a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj deleted file mode 100644 index 3784422768f..00000000000 --- a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_kps.kpj +++ /dev/null @@ -1,24 +0,0 @@ - - - - $PROJECTPATH - False - False - False - lexicalmodel - - - - error_file_type_not_found_mdl_kps_1 - error_file_type_not_found_mdl_kps.model.ts - error_file_type_not_found_mdl_kps.model.ts - - .model.ts -
- error_file_type_not_found_mdl_kps - Copyright (C) Keyman Team -
-
- -
-
diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 36728df188f..c315b5d2210 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -137,7 +137,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_FileTypeNotFound if a project file does not contain a .kps file entry (BuildModelInfo)', async function() { const buildModelInfo = new BuildModelInfo(); - const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found_mdl_kps.kpj') + const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found__model_kps.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); await buildModelInfo.build(projectPath, '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), From f4b1c968cc5f40f752c5bf550719d34d3c3a18f5 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 15 Feb 2024 10:07:50 +0000 Subject: [PATCH 046/171] chore(developer): changes to files that should have been added to previous commits --- .../error_file_type_not_found__keyboard.kpj | 24 +++++++++++++++++++ .../error_file_type_not_found__model_kps.kpj | 24 +++++++++++++++++++ .../test/fixtures/no-source-folder/.gitkeep | 0 3 files changed, 48 insertions(+) create mode 100644 developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__keyboard.kpj create mode 100644 developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__model_kps.kpj create mode 100644 developer/src/kmc/test/fixtures/no-source-folder/.gitkeep diff --git a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__keyboard.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__keyboard.kpj new file mode 100644 index 00000000000..c810dc7c339 --- /dev/null +++ b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__keyboard.kpj @@ -0,0 +1,24 @@ + + + + $PROJECTPATH + False + False + False + keyboard + + + + error_file_type_not_found_kbd_1 + error_file_type_not_found__keyboard.kmn + error_file_type_not_found__keyboard.kmn + 1.0 + .kmn +
+ error_file_type_not_found__keyboard + Copyright (C) Keyman Team +
+
+ +
+
diff --git a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__model_kps.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__model_kps.kpj new file mode 100644 index 00000000000..aa1e55d9ae5 --- /dev/null +++ b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__model_kps.kpj @@ -0,0 +1,24 @@ + + + + $PROJECTPATH + False + False + False + lexicalmodel + + + + error_file_type_not_found_mdl_kps_1 + error_file_type_not_found__model_kps.model.ts + error_file_type_not_found__model_kps.model.ts + + .model.ts +
+ error_file_type_not_found__model_kps + Copyright (C) Keyman Team +
+
+ +
+
diff --git a/developer/src/kmc/test/fixtures/no-source-folder/.gitkeep b/developer/src/kmc/test/fixtures/no-source-folder/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d From 62589599a084b9484a4014a043e250aa3a857477 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 15 Feb 2024 10:11:23 +0000 Subject: [PATCH 047/171] chore(developer): rename fixture file in 'ERROR_FileTypeNotFound (BuildModelInfo; .model.ts)' --- ..._mdl_mdl.kpj => error_file_type_not_found__model_ts.kpj} | 6 +++--- developer/src/kmc/test/test-infrastructureMessages.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename developer/src/kmc/test/fixtures/invalid-projects/{error_file_type_not_found_mdl_mdl.kpj => error_file_type_not_found__model_ts.kpj} (78%) diff --git a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__model_ts.kpj similarity index 78% rename from developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj rename to developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__model_ts.kpj index 400028dfce4..3d698349136 100644 --- a/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found_mdl_mdl.kpj +++ b/developer/src/kmc/test/fixtures/invalid-projects/error_file_type_not_found__model_ts.kpj @@ -11,12 +11,12 @@ error_file_type_not_found_mdl_mdl_2 - error_file_type_not_found_mdl_mdl.kps - error_file_type_not_found_mdl_mdl.kps + error_file_type_not_found__model_ts.kps + error_file_type_not_found__model_ts.kps .kps
- error_file_type_not_found_mdl_mdl + error_file_type_not_found__model_ts Copyright (C) Keyman Team
diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index c315b5d2210..8b55751dd13 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -124,7 +124,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_FileTypeNotFound if a project file does not contain a .model.ts file entry (BuildModelInfo)', async function() { const buildModelInfo = new BuildModelInfo(); - const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found_mdl_mdl.kpj') + const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found__model_ts.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); await buildModelInfo.build(projectPath, '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), From 429cad07039ca6404d4cbe8ef91314aa53b83b68 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 15 Feb 2024 10:23:32 +0000 Subject: [PATCH 048/171] chore(developer): change unnecessary template literals to single quotes in tests --- .../kmc/test/test-infrastructureMessages.ts | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 8b55751dd13..9403f587452 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -46,7 +46,7 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'Error_File_Does_Not_Exist.kmn'), '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileDoesNotExist), - `ERROR_FileDoesNotExist not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_FileDoesNotExist not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_FileTypeNotRecognized @@ -55,7 +55,7 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'error_file_type_not_recognized.xxx'), '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotRecognized), - `ERROR_FileTypeNotRecognized not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_FileTypeNotRecognized not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_OutFileNotValidForProjects @@ -67,7 +67,7 @@ describe('InfrastructureMessages', function () { const options: CompilerOptions = {...defaultCompilerOptions}; await unitTestEndpoints.build(projectPath, outFilePath, ncb, options); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_OutFileNotValidForProjects), - `ERROR_OutFileNotValidForProjects not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_OutFileNotValidForProjects not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_InvalidProjectFile @@ -76,7 +76,7 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); await unitTestEndpoints.build(makePathToFixture('invalid-projects', 'error_invalid_project_file.kpj'), '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFile), - `ERROR_InvalidProjectFile not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_InvalidProjectFile not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_InvalidProjectFolder (invalid source folder) @@ -96,7 +96,7 @@ describe('InfrastructureMessages', function () { const projectPath = makePathToFixture('invalid-projects', 'error_not_a_project_file.xxx') loadProject(projectPath, ncb); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_NotAProjectFile), - `ERROR_NotAProjectFile not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_NotAProjectFile not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_UnknownFileFormat @@ -106,7 +106,7 @@ describe('InfrastructureMessages', function () { const options = {mappingFile: makePathToFixture('analyze', 'error_not_a_project_file.xxx')}; await analyzeUnitTestEndpoints.analyzeOskCharUse(ncb, [], options); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_UnknownFileFormat), - `ERROR_UnknownFileFormat not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_UnknownFileFormat not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_FileTypeNotFound (BuildKeyboardInfo) @@ -117,7 +117,7 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); await buildKeyboardInfo.build(projectPath, '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), - `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_FileTypeNotFound not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_FileTypeNotFound (BuildModelInfo; .model.ts) @@ -128,9 +128,9 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); await buildModelInfo.build(projectPath, '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), - `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_FileTypeNotFound not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); assert.isTrue(nodeCompilerMessage(ncb, InfrastructureMessages.ERROR_FileTypeNotFound).includes(KeymanFileTypes.Source.Model), - KeymanFileTypes.Source.Model+` not found in the message`); + KeymanFileTypes.Source.Model+' not found in the message'); }); // ERROR_FileTypeNotFound (BuildModelInfo; .kps) @@ -141,9 +141,9 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); await buildModelInfo.build(projectPath, '', ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), - `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_FileTypeNotFound not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); assert.isTrue(nodeCompilerMessage(ncb, InfrastructureMessages.ERROR_FileTypeNotFound).includes(KeymanFileTypes.Source.Package), - KeymanFileTypes.Source.Package+` not found in the message`); + KeymanFileTypes.Source.Package+' not found in the message'); }); // ERROR_InvalidProjectFolder (no source folder) @@ -152,7 +152,7 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); loadProject(projectPath, ncb); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFolder), - `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_FileTypeNotFound not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_InvalidProjectFolder (invalid source folder) @@ -162,7 +162,7 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); loadProject(projectPath, ncb); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFolder), - `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_FileTypeNotFound not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_CannotCreateFolder @@ -173,7 +173,7 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); buildKeyboardInfo['createOutputFolder'](targetFilename, ncb); // call private method assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_CannotCreateFolder), - `ERROR_CannotCreateFolder not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); + 'ERROR_CannotCreateFolder not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // HINT_FilenameHasDifferingCase From eff01fb3a156daa801fac87bc77a6afc39b27ea6 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 15 Feb 2024 10:33:14 +0000 Subject: [PATCH 049/171] chore(developer): corrected filename in ERROR_UnknownFileFormat unit test --- developer/src/kmc/test/test-infrastructureMessages.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 9403f587452..6567b4e07df 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -103,7 +103,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_UnknownFileFormat if an analyze osk-char-use mapping file is not the correct type', async function() { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - const options = {mappingFile: makePathToFixture('analyze', 'error_not_a_project_file.xxx')}; + const options = {mappingFile: makePathToFixture('analyze', 'error_unknown_file_format.xxx')}; await analyzeUnitTestEndpoints.analyzeOskCharUse(ncb, [], options); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_UnknownFileFormat), 'ERROR_UnknownFileFormat not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); From dc5a6aabb4a41bf248874622b5afe5f4a7eac867 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 15 Feb 2024 10:42:26 +0000 Subject: [PATCH 050/171] chore(developer): added missing underscore in filename in ERROR_CannotCreateFolder test --- developer/src/kmc/test/test-infrastructureMessages.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 6567b4e07df..4eb08e454bf 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -169,7 +169,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_CannotCreateFolder if the output folder cannot be created', async function() { const buildKeyboardInfo = new BuildKeyboardInfo(); - const targetFilename = makePathToFixture('invalid-projects', 'build', 'error_cannot create_folder.xxx') + const targetFilename = makePathToFixture('invalid-projects', 'build', 'error_cannot_create_folder.xxx') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); buildKeyboardInfo['createOutputFolder'](targetFilename, ncb); // call private method assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_CannotCreateFolder), From d670e471869588d7e003ebbbb398da333f9dd139 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 15 Feb 2024 10:50:13 +0000 Subject: [PATCH 051/171] chore(developer): corrected assert message in both ERROR_InvalidProjectFolder tests --- developer/src/kmc/test/test-infrastructureMessages.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 4eb08e454bf..6d8da21b315 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -152,7 +152,7 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); loadProject(projectPath, ncb); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFolder), - 'ERROR_FileTypeNotFound not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); + 'ERROR_InvalidProjectFolder not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_InvalidProjectFolder (invalid source folder) @@ -162,7 +162,7 @@ describe('InfrastructureMessages', function () { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); loadProject(projectPath, ncb); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFolder), - 'ERROR_FileTypeNotFound not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); + 'ERROR_InvalidProjectFolder not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); // ERROR_CannotCreateFolder From 20e322c9fe5281ba42a6540307b15b5104c4130f Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Sat, 17 Feb 2024 13:01:55 -0500 Subject: [PATCH 052/171] auto: increment beta version to 17.0.271 --- HISTORY.md | 4 ++++ VERSION.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 2d475b2f56a..46e6d426760 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,9 @@ # Keyman Version History +## 17.0.270 beta 2024-02-17 + +* (#10735) + ## 17.0.269 beta 2024-02-15 * docs(android): Document using gestures on touch, and remove references to Browser (#10686) diff --git a/VERSION.md b/VERSION.md index 3b4677b2ce5..57b877498e8 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.270 \ No newline at end of file +17.0.271 \ No newline at end of file From 6b229ffa145fddb82a664ca1a972cf945cc047f5 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Sat, 17 Feb 2024 23:50:55 -0600 Subject: [PATCH 053/171] fix(core): fix output append logic in any_group::apply_transform - logic updating intermediate 'output' was incorrect - update comments - also replace size() with length() several places Fixes #10736 --- core/src/ldml/ldml_transforms.cpp | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/core/src/ldml/ldml_transforms.cpp b/core/src/ldml/ldml_transforms.cpp index c7ecb56d0ee..ad77c344ce9 100644 --- a/core/src/ldml/ldml_transforms.cpp +++ b/core/src/ldml/ldml_transforms.cpp @@ -155,7 +155,7 @@ reorder_sort_key::dump() const { size_t element_list::match_end(const std::u32string &str) const { - if (str.size() < size()) { + if (str.length() < size()) { // input string too short, can't possibly match. // This assumes each element is a single char, no string elements. return 0; @@ -292,7 +292,7 @@ reorder_entry::match_end(std::u32string &str, size_t offset, size_t len) const { // is also a precondition. if (!before.empty()) { // does not match before offset - std::u32string prefix = substr.substr(0, substr.size() - match_len); + std::u32string prefix = substr.substr(0, substr.length() - match_len); // make sure the 'before' is present if (before.match_end(prefix) == 0) { return 0; // break out. @@ -342,7 +342,7 @@ reorder_group::apply(std::u32string &str) const { for (const auto &r : list) { // work backward from end of string forward // That is, see if "abc" matches "abc" or "ab" or "a" - for (size_t s = out.size(); s > 0; s--) { + for (size_t s = out.length(); s > 0; s--) { size_t submatch = r.match_end(out, 0, s); if (submatch != 0) { #if KMXPLUS_DEBUG_TRANSFORM @@ -690,24 +690,21 @@ any_group::apply_transform(std::u32string &input, std::u32string &output, size_t return matched; // no match, break out } - // remove the matched part of the updatedInput + // remove the matched part of the input + assert(subMatched <= input.length()); input.resize(input.length() - subMatched); // chop of the subMatched part at end input.append(subOutput); // subOutput could be empty such as in backspace transform - if (subMatched > output.size()) { - // including first time through - // expand match by amount subMatched prior to output - matched += (subMatched - output.size()); - } // else: didn't match prior to the existing output, so don't expand 'match' - - // now update 'output' - if (subOutput.length() >= output.length() || subMatched > output.length()) { - output = subOutput; // replace all output - } else { - // replace output with new output + if (subMatched <= output.length()) { + // remove matched part of output output.resize(output.length() - subMatched); - output.append(subOutput); + } else { + // matched past beginning of 'output', expand match + matched += (subMatched - output.length()); + output.resize(0); } + output.append(subOutput); + return matched; } From 3b02db860da9a1689fb49fb4a3167d03b7786a87 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 19 Feb 2024 07:39:47 +0700 Subject: [PATCH 054/171] fix(developer): allow more parameters in kmc.cmd Fixes #10751. --- developer/src/inst/node/kmc.cmd | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/developer/src/inst/node/kmc.cmd b/developer/src/inst/node/kmc.cmd index a9b3142d2b2..9e0c3c8f311 100644 --- a/developer/src/inst/node/kmc.cmd +++ b/developer/src/inst/node/kmc.cmd @@ -8,5 +8,15 @@ if "%1" == "--enable-source-maps" ( ) else ( set ESM= ) -"%~dp0\node.js\node.exe" %ESM% "%~dp0\kmc\kmc.mjs" %1 %2 %3 %4 %5 %6 %7 %8 %9 + +rem "%*" doesn't work with shift https://stackoverflow.com/a/34005255/1836776 +set params= +:build_params +if @%1==@ goto :finished_building_params +set params=%params% %1 +shift +goto :build_params +:finished_building_params + +"%~dp0\node.js\node.exe" %ESM% "%~dp0\kmc\kmc.mjs" %params% exit /b %errorlevel% \ No newline at end of file From 36f2acb9f4dd7f8a5c69cb41e8ca81bb8d8cf034 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Mon, 19 Feb 2024 07:56:44 +0700 Subject: [PATCH 055/171] fix(android): Match phone suggestion banner styling on tablet --- web/src/resources/osk/kmwosk.css | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/web/src/resources/osk/kmwosk.css b/web/src/resources/osk/kmwosk.css index 599a533df2d..788d90a7c6a 100644 --- a/web/src/resources/osk/kmwosk.css +++ b/web/src/resources/osk/kmwosk.css @@ -295,7 +295,7 @@ .tablet.android .kmw-key-deadkey{color:#0d0;background-color:#777;} .tablet.android .kmw-banner-bar { - background-color: #b4b4b8; + background-color: #222; position: relative; margin-top: 4px; height: 100%; @@ -303,11 +303,11 @@ } .tablet.android .kmw-suggest-option::before { - background: linear-gradient(90deg, #b4b4b8 0px, transparent 100%); + background: linear-gradient(90deg, #222 0px, transparent 100%); } .tablet.android .kmw-suggest-option::after { - background: linear-gradient(90deg, transparent 0%, #b4b4b8 100%); + background: linear-gradient(90deg, transparent 0%, #222 100%); } .tablet.android .kmw-banner-bar .kmw-suggest-option { @@ -317,17 +317,17 @@ } .tablet.android .kmw-suggestion-text { - color:#77f; + color:#fff; } -.tablet.android .kmw-suggest-option.kmw-suggest-touched {background-color:#447;} +.tablet.android .kmw-suggest-option.kmw-suggest-touched {background-color:#bbb;} .tablet.android .kmw-suggest-option.kmw-suggest-touched::before { - background: linear-gradient(90deg, #447 0px, transparent 100%); + background: linear-gradient(90deg, #bbb 0px, transparent 100%); } .tablet.android .kmw-suggest-option.kmw-suggest-touched::after { - background: linear-gradient(90deg, transparent 0%, #447 100%); + background: linear-gradient(90deg, transparent 0%, #bbb 100%); } /* Vertical centering of text labels on keys */ From 7840c9bd53197dc977c911c1b69002ff7b3a15e3 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Mon, 19 Feb 2024 08:28:33 +0700 Subject: [PATCH 056/171] chore(web): addresses PR review concerns --- web/src/app/browser/src/hardwareEventKeyboard.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/web/src/app/browser/src/hardwareEventKeyboard.ts b/web/src/app/browser/src/hardwareEventKeyboard.ts index 092ffeb0fcf..b2d64f05457 100644 --- a/web/src/app/browser/src/hardwareEventKeyboard.ts +++ b/web/src/app/browser/src/hardwareEventKeyboard.ts @@ -256,10 +256,6 @@ export default class HardwareEventKeyboard extends HardKeyboard { }); } - get activeKeyboard(): Keyboard { - return this.contextManager.activeKeyboard?.keyboard; - } - /** * Function _KeyDown * Scope Private @@ -293,7 +289,7 @@ export default class HardwareEventKeyboard extends HardKeyboard { */ _KeyPress: (e: KeyboardEvent) => boolean = (e) => { const target = eventOutputTarget(e); - if(!target || this.activeKeyboard == null) { + if(!target || this.contextManager.activeKeyboard?.keyboard == null) { return true; } @@ -406,7 +402,7 @@ export default class HardwareEventKeyboard extends HardKeyboard { // _Debug('KeyPress code='+Levent.Lcode+'; Ltarg='+Levent.Ltarg.tagName+'; LisVirtualKey='+Levent.LisVirtualKey+'; _KeyPressToSwallow='+keymanweb._KeyPressToSwallow+'; keyCode='+(e?e.keyCode:'nothing')); /* I732 START - 13/03/2007 MCD: Swedish: Start positional keyboard layout code: prevent keystroke */ - if(!this.activeKeyboard.isMnemonic) { + if(!this.contextManager.activeKeyboard?.keyboard.isMnemonic) { if(!this.swallowKeypress) { return true; } From 9ab01d272bcd2b0b48c8a54b2703a5856516ea67 Mon Sep 17 00:00:00 2001 From: jahorton Date: Mon, 19 Feb 2024 08:57:46 +0700 Subject: [PATCH 057/171] chore(ios): polish for new ios-host func per review --- .../Keyman.bundle/Contents/Resources/ios-host.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/ios-host.js b/ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/ios-host.js index e7c86b721fa..621e643bb94 100644 --- a/ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/ios-host.js +++ b/ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/ios-host.js @@ -276,18 +276,18 @@ function doResetContext() { keyman.resetContext(); } -function setKeymanContext(text, doSync, pos, length) { +function setKeymanContext(text, doSync, selStart, selLength) { // console.log(`setKeymanContext(${JSON.stringify(text)}, ${doSync}, ${pos}, ${length})`); if(text == undefined) { text = ''; } - var start = pos; - var end = pos + length; - // undefined + => NaN. - end = isNaN(end) ? undefined : end; + // Both pos + length are optional parameters. + // undefined + => NaN; undefined + undefined => NaN. + let selEnd = selStart + selLength; + selEnd = isNaN(selEnd) ? undefined : selEnd; - const shouldReset = keyman.context.updateContext(text, start, end); + const shouldReset = keyman.context.updateContext(text, selStart, selEnd); if(!doSync || shouldReset) { keyman.resetContext(); } From efda3c012090e46d2c91b69c3b45ebc75b1fbc30 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Mon, 19 Feb 2024 09:17:14 +0700 Subject: [PATCH 058/171] fix(android): Consolidate banner-bar styling --- web/src/resources/osk/kmwosk.css | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/web/src/resources/osk/kmwosk.css b/web/src/resources/osk/kmwosk.css index 788d90a7c6a..e91ebfa315a 100644 --- a/web/src/resources/osk/kmwosk.css +++ b/web/src/resources/osk/kmwosk.css @@ -204,7 +204,8 @@ .phone.android.kmw-osk-frame { background-color: #222;} -.phone.android .kmw-banner-bar { +.phone.android .kmw-banner-bar, +.tablet.android .kmw-banner-bar { background-color: #222; position: relative; margin-top: 4px; @@ -294,14 +295,6 @@ .tablet.android .kmw-spacebar-caption {color: #aaa;} .tablet.android .kmw-key-deadkey{color:#0d0;background-color:#777;} -.tablet.android .kmw-banner-bar { - background-color: #222; - position: relative; - margin-top: 4px; - height: 100%; - width: 100%; -} - .tablet.android .kmw-suggest-option::before { background: linear-gradient(90deg, #222 0px, transparent 100%); } From 774d2e8cf364ced86b980923f49bbed3b8cb3a23 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Mon, 19 Feb 2024 10:25:53 +0700 Subject: [PATCH 059/171] add gestures documentation for iOS --- ios/help/basic/keyboard-usage.md | 26 ++++++++++++++++++++ ios/help/index.md | 25 ++++++++++--------- ios/help/ios_images/key-submenu.png | Bin 0 -> 160946 bytes ios/help/ios_images/system-keyboard-cal.png | Bin 0 -> 98593 bytes 4 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 ios/help/basic/keyboard-usage.md create mode 100644 ios/help/ios_images/key-submenu.png create mode 100644 ios/help/ios_images/system-keyboard-cal.png diff --git a/ios/help/basic/keyboard-usage.md b/ios/help/basic/keyboard-usage.md new file mode 100644 index 00000000000..67ec54f32b1 --- /dev/null +++ b/ios/help/basic/keyboard-usage.md @@ -0,0 +1,26 @@ +--- +title: Using a Keyboard - Keyman for iPhone and iPad Help +--- + +Keyman keyboards are accessed by pressing the globe key whenever an iOS app presents the system keyboard. The follow screenshot shows the Keyman EuroLatin keyboard displayed with Apple's Calendar app. + +![](../ios_images/system-keyboard-cal.png) + +### Using Gestures on the Keyboard Keys + +Gestures provide ways to interact with the keyboard to produce different text output. Which gestures are available varies depending on the design of the individual Keyman keyboard. + +**Note:** a dot or a small letter in the upper right corner of a key is a hint to indicate that the key supports flick, long press or multitap. + +The Gestures: + +* **Tap:** Tap on a character key to cause the associated character to be output to the app. + +* **Long press:** Press and hold a key, and after a moment a submenu will appear. Continue holding the key and slide to the submenu to select a key. Release, and the selected key from the submenu is output. A key submenu is shown in the following screenshot. + +![](../ios_images/key-submenu.png) + +* **Flick:** hold and slide in various directions on a key to reach alternate outputs. The key will animate to show you the expected output. A common flick is to slide down to reach numerals on the top row of the keyboard. + +* **Multitap:** some keys produce alternate outputs with rapid, repeated taps. For example, tapping rapidly twice on shift will activate caps lock on many keyboards. + diff --git a/ios/help/index.md b/ios/help/index.md index 333dafb9f2d..663cb814579 100644 --- a/ios/help/index.md +++ b/ios/help/index.md @@ -13,18 +13,11 @@ title: Keyman for iPhone and iPad 17.0 Help * [How To - Keyboard and Dictionary Installation](start/installing-packages) * [How To - Installing Keyman as a System Keyboard](start/installing-system-keyboard) -## [Using the Menu](context/) -## Ask for Help -* [Ask other users in the SIL Keyman Community](https://community.software.sil.org/c/keyman) - -## Help Topics -### [Troubleshooting](troubleshooting/) -* [How To - Installing fonts](troubleshooting/installing-fonts) -* [How To - Integrating Keyman for iPhone and iPad](troubleshooting/integrating) - -### [Using Keyman for iPhone and iPad](basic/) +## [Using Keyman for iPhone and iPad](basic/) * [Switching Between Keyboards](basic/switching-between-keyboards) +* [Using a Keyboard](basic/keyboard-usage) +* [Using the Menu](context/) * [Using the Settings Screen](basic/config/) * [Language Settings](basic/language-settings) * [Installing Custom Keyboards/Dictionaries](basic/installing-custom-keyboards-dictionaries) @@ -32,7 +25,15 @@ title: Keyman for iPhone and iPad 17.0 Help * [Using the Keyman Browser](basic/using-keyman-browser) * [Removing Keyboards](basic/uninstalling-keyboards) +## Ask for Help +* [Ask other users in the SIL Keyman Community](https://community.software.sil.org/c/keyman) + +## Help Topics +### [Troubleshooting](troubleshooting/) +* [How To - Installing fonts](troubleshooting/installing-fonts) +* [How To - Integrating Keyman for iPhone and iPad](troubleshooting/integrating) + ## Further Help -For more information on Keyman, [keyman.com](https://keyman.com). +For more information on Keyman, see [keyman.com](https://keyman.com) -For more information on Keyman for iPhone and iPad, visit [keyman.com/iphone-and-ipad](https://keyman.com/iphone-and-ipad/) +For more information on Keyman for iPhone and iPad, see [keyman.com/iphone-and-ipad](https://keyman.com/iphone-and-ipad/) diff --git a/ios/help/ios_images/key-submenu.png b/ios/help/ios_images/key-submenu.png new file mode 100644 index 0000000000000000000000000000000000000000..faef6f5e8f0beb507f2367fae735901eb8a84406 GIT binary patch literal 160946 zcmb5UbyVCx^FN9fC@#g_-Q8QW0kyDiePxI4wI$f7?!&+~lc z+~2)_-0aE8WHPTzW-^<1PLin4s&eS>iQmJ(z@RJ0OKZTuz^TH(z*Zx_d*f^Z9;M$Z z09z@k&k9mfl%HLltZeNqVPF`O91u$j>=K!_@%*9NDKaC@K5}o8;$O|PTHHfPkWHq6$?&?EENtK_C4Qx zo^GkDV5Oo0!~8}g!yv-qz`(yzux~#YSYjB&f6*{7im)XAO>4k1{znE51}4H52H`(4 z`fuewN&YRrq5o6DCx^ozz148ua#$hUe@Vls7Q+7*4O{)z2J=xwpg7Cxxxv7o;{KCiVX|`x--1TmR!i4iS4COa+{u9*VButD$?omo{7*kH zqTa%9q=Th9fYRH+-qB6iTa5Z&62fovKWq+a%72Nt+lf)@s(hxDa&on#Y zPf1BB>S|#ntRXG?ANX5MjM~QC-C3A}!^_Ky-HV6a$<>;JOGrqFgOi(so15)Tg3S%+ z=nn8^b9AHmcPIbVkF=$mxvQ&-xpe_A-W*f}}=-(c>xR{tNce_H+x`UmQaX~%- z(SND=zgqrhp#MgGakF%la&mYBx{LqMT>S_9zZ?Ibz<;UK{U4QFTmnM>Tj&33`d`q0 zY!Fs+wS7|u_{WLjT%sKR7w~sI~)on)~DK;V#Smq4L@;;=${hEqdyLPnPp@s zR3sBiso&3}l7Iaafgtr@k$l*-4tl*ibz8_2W4N1I%|bx7INzOG_dRU}LsgeH^g2kf z4@luKU?YO0dZ{+CoRI|){;w(tZgB4~>j^HS(h7mxQhC3ANnQ>2N-N~F?x;A~me^lp z4Wm+(Ija=(gdy?xP&eQc_r}&QUBJBgOJ0B7{*+}Dh#}$i-1a!~x~nUZf21cvWF-95 zsdauXe`N>qd{Lp!9SaUfMxT4o3?Ac6OL!+aDY1Op@kE03`g{8)bXLua98ywg`0Nga zjPVsb9R8j8|6j=EsDa&}T?Y}{TYeF}!=Fs0y!&KrrEGqrCIhMbG8ZK#6_$qG3+AMh z63m-!I-b_QY+jHUmF?6}cs*kUbM!y&sdg&94#T$tGw&8rUe8X9F zxpn2x^jEF@Qy?_9tbx2Fc?FmTC>6f=KBIB?XvzK>Zsd*8GmS6tdULYaoeK|hB%Gy;h(s-xgp!=?ZM&mN$Sb~vF`38?O?eWd(@-kaby_QvsM~^I7 z>xJ5&N_GgJ{bOn+n78Msk#q(0bi6?u&F9iEK zxO(#Re{p>SZ@4X6O_p_+fo$id`E4Ih%rC(=nf5{h?(DCBreEbRAlK%SchB{;5+)kl zM-pmd2nZ)nQgh}9V}kZ3qD0ojpSV)4{sx6Znjs$wsVY1b{#V@i^_GQmNu*ocD^A7DBJeR$Sz=XM)ZK{~L1;M^!i|D-<+*Dy5~G$QjO1{vfQb?JLg|LhZk36PG9eBJLc|M7bxypO|Hw&7w$%k0x+?=0`UZHp1q+v z7!nZ_*o#`V6kYLi6o)sJ(AkYes9wHNOE?7j@*pw!RK+p}oabK(sJOKghRiMj#!vjp zx3kqCC*H#VvB+2+-RQ%sW!LZ~NjK@CBw}|>;0-kBx*L;mh zHA#?pcE5*0K9HnUo?l@a#zZHX6}d=gr)tU`VESrstnJ=_mhUl)xdJ}}pP+m-NQ(ZG1KfPd1yl2owj)l*h|~MwsdJ7M z$Bgi2;n*@IOAZZqmebPqm%7W5gSqW$J}Dt>fvCYuWIkF+sBy>7gYTATrq< zU@vAcl8%{X0=_!7$ljPIQF$(q4tUfhENxsV9Z@FABUAfO8V^3-Di&m<|Emc|$1n&C z*jLHeC@3vfxOwhg!$+^g*g4V|%S>0Tfxd(K1cio4N&j@B=&X1Et9NM~zRhg}H@Rd5 zuNdd#biiK}rSI%#0qNTT5OIpru@ z$;07cr9`;EDxgd4q$RdEAS3YEI_V#W#v8A6PW>Ugi}(_8czg2)lSd5lRAHS_4LyXs zEwSj8s}yCqs(VK(+&@g8>pfU6A3h>lJg3ekYdr)I?J#Q=ltA~g)5q_?-jbdHah20o zbGF7JaRA{`=m2x0|55uB{K4-8qRaYAjjGuV!uxtOk00eG*E3#FG2XwqT%}uD-DP4I zcPWEvcJ(XYxo@6tDr-t1Iz;|GBn|=l5Ldm@@VVAwbs~Qc_E#9I!NFnq=_oVHvhs;7 zfuJP<6bZ4Ozc-|Iiv^{wUB>ns7?sAtCLYaxfqsIZQj(4CF(kU;$l{r1%a^+0!{daZ zW!EXMqDISni#lb;}9b?_MV9Bb+1Ft3A~=~e>LW|MqaP83)-LsTm0!#WEn^3X(k>|-4qfcYYDAn z){8Z25UsO>MnjCl-%GangDK^!>9(2O5^JhT;R9p8M&aMTbNjk@OGM7BIx}eUv#_xD z&+v|mfk~C%Y_cVEPx%L=)7bvPB;@;{=ida z+r#XhNu7IdGl5+kA~>B=JHt!A%2VY+9y$C4pP7T> zytcCP_@h2YfRAZQ{!s|c%mS~l3 z&<|0ts}5DXbLm1)cpto;{ngJY^0%}`WP$VxJ>Z_pOHF0Dm^Tyha3un6Jyc`=Xz`~` z^S+ESQEy_YJ0pjWQQSk^5mEphqJhFUf3!wofPtE0$%nVFblr0!T{nj0&9_RFfw0eWg~zEJ(9}jr~NMQ4`yj(AAW}|=;@aekZOJx!AF%@^hksXNGI+Rfp zv|-&YtOB{GEI{H*RZ4r?^H?uZEVxM**bZ}KTF8a|v<%Mj&k35Jg;7bXWUz&h*i8#k1gbPM~ z$Vf1M4!hcnq(bXLAsE}P3yNh;yCmoB=)4Orlps+F=!x|E+O*rbV`V51cSOFf*l@cmmku|P{10SCE5g`2Kao z%bnpLn3ZYk-Q-LxY$@`z)O>b!%2}*sRaFzSBi*e(3+4NhI3K{`wvLt(1|i*b>P1Pc zhli)CyO*7xIaxoX*(4A%;*`gh9`c|Uj7~El<7MDC9<}OJ>qCv4W1yS(OQY)%CdrzV zqIfPv^ zC)m+`PFGK}QMOTmeAH0KOThR&a+KTK-V6qNQ;LU$1r>9r&fV*7yX1$CtD75|AlYdi zPLwQdG=(v5Nk`dA=Z)|#DO`>S+z_Q)v;Uea^e>YutGqP3&$h*g@;)|(5}Gt)(w+;4cDRnKGR{~oe|0xZH3NS4j@O8QB#oQbA8LlfQL)ha+tC55pbX?|Km#Vi_?OU zXWGJs_nPE%KrM_v<=Ag|Lsee6cAxg*wzfsA3U^@Zk`Kuk7@RU!sRLflZuZ8IzO<+0 z_yl=;bPl@g4ZFluz%B^eJ7jf^^>junWzoBO95t6uewdx({QjeRgUeqmU3Xy03Bsl zhE@4^+C ziMtuq!(|vnp;W;}>-p_dY~%(L9OI?HS@UIScuHUBzWLw>+|R1q2H|n zigu9bkYGC^Qqh-4K)WW3qNTcAt7xov8{7|}=2NzY9So7NJC1hwQk6XVZ{NOgYR`gm zoY+&H{2vX%dHrn@IK~th@-5EBM9$kaJ=Z*RvRbD_f%_n9i>;7vuDeNc<2MT?9FM0x z1-;C)uTKjSzcKffj8*e$)4Xdml7l^v>E8cb}7*wqkhAf8Vdts_djxWDaqyP z2A!U~XSB|ZQ@6%t7=P};vfxriD1fz7QuoziiP(fgh+s#vQjUl+zPe9I0PDmHsopMG zQ}Fl=ZEe0;XXU8zvU%tmuh)fw0t~hp78~TiuT%9Lmj5aSA(Llf19Qg&Yi5%_%(8X6l)8at%+C-WG1N~aT{9Mc)C8~z5WLQpMH z%E#S=yH|D3B_Kgo*RehDV9jfH2+Ea@t5>v*4b0#J~K6#@$>=+WE{ zMir#)?a%zouJ_wsXe$g?S>k>>h9mnrH6?>)?X=5v)n#OCs^cX0 zYW1e5EARnafEKmvvp?V9zNDcS!^DyM@`;5{wld7HNc6M*Cr8*&R8)p6N(uF3=>myy zoXt$mB6?Nm=Xl^eq<(DLIV)@G)8B&x%`*mN`uHtAI-5O81=4i7$&zlDW#Xf zYnUYLIs>28Pb$C*e7@WLcpl1B_xbGp`P_1^;>#zVE%7==wilavD!uH$sS}~AKBRN- z_E5}LAmxIwKijb8k6}2Oyt5ki>q5FMpQFRFSYWdB$+rySL?h27ndRkW6;NJYo?y}l zNwREA29C(MP^pOdgL_td#N$UKa+{g^x&zKlcuX;vB0i!)yIfY|23>OBCyH>>=Y!TB z^I@NbkgklrBN^+)uQbkqZ)-dkoO{|tr(?*(;4|nZwwj9&D~YXT zQNxOI3W+ywp9}kLgsLu!s&}dho#Vh=rcM<7NLe9d(=7AENJB{V{U}kzg5r>lYTAss zYGOQ{5-oDx=DjW9`H>8RvVScLKbgpktGC)aw-Ps%I4y0haW9Vc&*a{luuGQnHN&G^ zcJr*D-5DixTQehvY6lI27@*eaY2Ay~XWE|5t&Ew3hIBTQ=<6Rb~W%uV%V+ zp1co;L%|b(H8BPcDvlWOBKG1Vtm#?zu6B-wX3KQI1Y<{hbUObg$ba=A9|t zr9$y{%Z%deEWRc#GNm0Vhd+#j_@JRKHJhdv13IvYt+LSUcBD)r&>|#>i%@Vy?g)cM z-O@goOU7!C4%I#QoyOJzx}{o3egD?G_5le-Nl=Y53XJYFvzqqOk$V99?31fLRyfkh z*{$n9rJA;@_wbAiRSr=|4mZRTY>K&f^Zit?bf0n=)D5**?=}J@_UY5co}e6ADN-!+ zPta@hoV^Qu32o+Idj|*Ls}JBkxr`_I^*(1)P0bW8J=eBcm{PE2w@>s~V`=H~pA6Fz z{`W;+;s6rl2g>fqGQWPHZmIMN{d3$WRaglj3H?!WD1^q~+~)t~h8cJUJ=pz5U?N%e ziv^W{J(0lJ+t}Fu^h-+AU8fsH@Z<+r3^M|{hn6(T4=09W8NbSji7l$Qf(x~3E7F(K zwa0Q=Ygr|(5z0jlc*}*KkPq$bl3oNh`c>sA0ZnA$SE(bYRP8Cl1n~~@c6yC;lQ%)_+M)bxB)Xg zBO@bp&I6;^`bi4ErrjUnv0uVb@W~j0n)_+JdjpVy^x_d=qepiVB-kq#yszU_MfQ00 zK&~Z3#6JQQ04U+>?Zu6?n)@fha>o8^zJ)Wh)2-@oV^DdE9*d4B7j<}d)^!F0)m05n z)D7L5mMlz=kNoo|(#rEy5cjjW8A%QTXoqVihfkjjT%Z&=C4-#7GDjqE$$6 zM&+w0C>8drC;YO=*!#t+6RM{BjT{59WNUvzzK-NhD|3)3|D?Ckv`hc@0>=TX9(xQ| za&iJyJ^w_^HYtF;U-;?Qz+R#hM$&Oj$5iJk9zmKs(muxBVEdl*#1FF#-vx@Z{-$)I zhJ%dTR2^fW-uml>|Af~vfm`$|BFmLB#6`Z8|(Bv-u@&#~O^zVx3U185G== zK?EWaJVxQR9y5=!CC+0c_){mieAr7fEyX(mz!xTR-FEERq3}hqhtcbU)S9P>Z9N*j9McoL0oD{;*WWT8o`SsJy4$%@) zekGD6W$Gp!v>PRL%sUA=N%+#TkDiWsGk?p^0~FEk{MoAYrC8z*a&>ZR;8 z&cz)(mJC-#x)e0GFVPBz!}%Cu9ZQYfSH*zlJ49Sr;#Dy4`(}jpYQlu>bNe?0LDGmV z(HZ*qhnqsA+OxQ^TJ42V8r?qa=`OI!Ya0!k@LSr@k>)b<5pi9)ZHPF$z|&+72q!O+h3-VQKZkWpedb3~C2R z%L;$=70 zN5QO*f{83+%qhL6UYQR4@PrCU{1@*rhQ23~>v}G`1hS1JLQS&kPGMNpSsP(3bH?_6 zMyz1)_QDMXaP&~B9eq7k*#HOR#QQUsb^i+J56F3DF$obw+lchXbgM_leEg!H%yn^`-GV9gHyae zDEL#H*Fz?5AMjCm=ibJw07nDX6*o*XyzG(K`C7pCtAcjceFq(N;u3wb!?qM!<~JQO;^hlbm*>)S4P$#ipI z)8g<|>R9eHuR5&o!)v)VdkS^Zx&y|t>k+X-$pPN{WI?V*{8TOJAXm0Uj1`M0*WoY2 z;S7OMp&_IH`Xc`80xXssb}H)QMu(n=XB({=sBYbY21k})^1JXjk_h5B4NbNzQ^e5) zI<7g34R<=d%Jc3s8nU`Gq5|TjvyLfwugl54jeuEcFKYs)W4ozfFFvL*_)$Iq9jnpxM z(dB}4XuWJ%*!%sXeVaJ&6FqXH@0r?2J4JVtScyaeHku$gvS}{)%6L&96~tRu=gWyB z-FSOG*!lhq&QK6iwf063%mWo6cUTFSzn3HENX<;$MJ%abJ7x&ypmIYO_l>!}6ryyx z%sLFcM;_)SKfJK=u`t$smwmEPcUMfs;y2$Ia25%P#BPgQJHIqWUq+k!N>OWl)+fCX z_maMFLGMRq2l>OYQRsxr(D3dRU?WbO#d{t^L_%7YpJ#;^PObV9(rjknD5z3I9hezc z#=f^7ROb`EMMaiSN6SHpUcFAQ`=ta>ZrdvpR_a!R-J<`hrTdx~Cr!<9)nJCzQ5tY4 zFCP2&c3q9Uu@S|<(Y7_NkTDf?+6la;GWSTrVwf`jQ8y@4?Rp@BfCsz2rM~XqEEW}! zPq16W+NOP^{gwid&9C>QByzrRX zQT~Cr3h=BS?FKg!#uPCi9vN+&!2& z@J>6(52p@JqQaSz9O;_q!PY2YHF&5P_XxC2)TM@go^uG>F*o|A2TN)oaWsJ7EC%z? z=B_Z`?z7$h7`EWTPfmZswrCz@8%olwFod%j;zj4=@Itu1bv1I)8z*#O`b%nt_aPud zG2JyjMS^BWzpfPc(}%0t&~n*%c*#_ZkTZCzK!**=ZM!K$o(2-}Ay{p63b#-Z>nX$OkHboR&=%WF zU6gY2A3@EKI8g)OD8+zjk<*7K`(}cI>(FJ9_2F$<0)51p4G*_ z%Nf^Dskof58&YnFv769q4_b~LWg7a}k&#b*jIuIcXuxtnfRD#S)VI2fViFXwl(hbt z2ztHv>~!)cMaV$T;&BXW6(24hcCY$-nP^}H1ZtmWiE6%(ImokIyBdF7e8MNeNk|v1 zf8lmFJ1OqE9e4=ND1%_Ir{$H&)(L)_4rvp8`jpan!G6A#IQZ)r27_r(M>prf`&XGD zP97KwHeXRcTRywH(<>?0O+H<@#wJ}!l__Q8sae}NpcaW^)v$!`%5K~dZrX{dDgvGI zL$w$-^Z^^h?VBU&Zm64`fKFvV8Ms++b2alQrlC$c9CICxhHIv2H7ig`OKC^4l!37O zny1fhpfcJo7V>2)leDYh9mQqW5Ax!2li5hl<>LsCJ#*BfbjR7bNh1(|nvd;Q2a@_~ zislH??nb4EMOiuMDl~=qD%8NoQV(4x!yFc$jl|ZFKOf0(aKtweo?{ipZ(vF`J6a>E zt4168&YzrJ-#h^An({{SkSA`kG3VzYvnIvY(7cW9Vj?6vbS-(1NyMd=1b?jSl#5v= z(#|yMZ&M^GrJ20PJvfw2xb{7#IM-VMuwmtv?keuswYaGce_v^0_%)S{L%Ijg>0Le_ zE3J;dIVpS1&%t^l*lJ0Ff@KB@*3)FWbH^|ykQ{T2%a5Jm?LO;m`Al7myYy^sAhURY zp_%wnKZ^S*LhQ!e&e?9W$MO6MggWIaZ;F5f7U!FzE-e6wdqCFcK0k+@X`V)4p7GD+ z_u&XqHu@i+xVBj#2?<6r6)xyaAl`VNNXp`fr5R9*U83U?dyhw+^?|^~YEyv(+8yn3 z+F{=J>bt7nai{*Sf7j`*CVwbdsIci&`Rvv0e&%F{j12E?*wqP z7$-~M2aBn-<`9rnZIUPLJWsdYJfw?Xr-hu-1I)Vv??&mYwZ}4ACX>I|bp*d(-yd+H z>Dc-034EE9WeQE(Jq;XqzlIHOiyEKZ6!){cx@9U}D1T)(TEu z!1o%{!CWC8w8gHRNzy9EY1`@J*}iAr;sIMrVm*j9`R38klyQTNYL z)&8jYE04P4vu~y7J;x{x4d;*YgyM2^gOd|MF|}^rPh2fyeK@a!V*T@O63wigK(PnK z1kzs=>HePVsmByHy)Tix@0<;=zLt1-X9Vv|4x1=fNFv)^hVW(|pehl6r=fjF!*M{c zByREVuo*x6vx3Q-#uIn-@sQueEQJ0m{S9AZKF8dgdz_t=LjhohN^~ZiqGBhvl#31k zx=AADEj64H5>?AyhM!rVrz`;h8R@r;iYbW-=83lYAiw>Vel2sXIAqc3__>9kyxwln z1N~h%gewZ|8)YOhR(?o2K5r3%9;Utmq5gi7440l2l0dqW7p0lO$zjjc0J%nAA2#vQ z#hDp2JI#z;z-w&u`1|Y2t*1^uz4j;bM25~RQ%v-?XF8pYES&D0EnKvBM%s~LV{opk z3CATBtnXMDQ4sdSGb4B@7CPAh&9;35SWG^eIbmq8cpt7x3f1DX1r$o-j#EnPsIQKS z#L?FJsO#*I2T`dR#}W(y9iT;F_0DI_jI2g<-B ztY&Z!kpcwKgopuYVmN?zZIJ^>aOAOLcY9-YY(?o^3zN`eq=pc*5J$+~5e50He1p{5 z)nkvqI1NXOc_tV8MgiQ}TK9Fv<2TA}HGq zf&0P&^s9~}OKs3O*!x-V_F?zU)p;DihJK$nJ?-9%*wCj7`9!>{53(PFE!-G02k0h&XC?r(z ztB=yk4i?5pVuW{n1#ZAMuYB4VYh60zzMzlMoJ+OMnjBMGc62U(BAO%44CD^RaBEwF zdFRHPP)Hrowxv3r|2V;EARF|Nz4jicNwRkXbz4NA3^Dkv!iVtnKMNc6PhZ&j}%&CnSOoI`%-oaYVOYp*3RU6|!hEcICm(2(wSGs{|qdYgyT3|oS^0MMl_kA}%GGtmC= zH`hLNHVyq*4!)bil>va@lzqCed1_pC8bn5x+))tKh;hA5^va#CUMqH1_M0zrUSdkFTn&97L(ra`=PA!D@+{S1Sv<$?AI%fuIYvk&F>E-C7STv zocGVLl22P0Gb+zw#^yE{lTFq)-siemoRca1<-~Imo}elK|8m0^7M;MP!Qjf`F_MfX z-koA-i{)lVIt_8do=CfsI7_5>YR7bQe%KqYm9bpMz{XS z3(+FGdXB%`zei-%m*|;3rWDs7!qF`QWxI$a8Ah)DJ@8!eDkCMtzS4a!PY`g(Q05??FA_SV;Mffdd)g4hBMaqANvA8 z+=?wi!Btb4W>kua0?*gJbv=vU@Q7ctAF@kb9_%|`xElr4Nt}K{beY4RU~um`QQyPS#02>{&%I|^Ta2GCbu{lkO>v~?Xev|=dFnaI(5nw{LK{T(>io?R2M; zTv|=9lC;_>+L=WeP9ecKq1NHo=^k|=Y}caoB|a_N!_IU)wvgr**vp)vi^WM(E@;7z zCw%SxSC%L}r9f9$gi({hln`8t%hP&zBF zYeZ8NMSllsuIkEfmTfRjT(3Z>lw6 zvF{bw>-8uNAA%2$O70$Z_a(f>(=#EnNZkEYJ@$SrhpPi_yJsWW7DfjA;WMUt{VV6& zM?r?pTCnT8T@Mq#0LwH=dA$cPOjK-^GJhCvmi*XRx54x7;30tp4V%?G!kX7*SUp#y zDhgD5f#6^JSqqdZUN0BO7j)TD*`3k8^*&d5A5LnHE_SvH?WF=hGd_F5ogdd8ZLIw^npS+WK(eBqOr9U;r}>fGA+Bpc?1^v3sS6VJDX5%*=Phz8 z7DxD?hLw3L&>w-*I=>t6M3lW0!l1KM{#_kemX(<}xi%(y<>3JBJsk9wOMQaDF=a!1 zhKgZgz&RhF^b^Ay%k;APNAQ)JHqs*OPMy?-2+UkWR z^@u3gl9?N*6+aQ!s&mEVbRk!UHzsy1btPdvY*|)qcD3GPx7T00xzeOZ$n96ej$1S; zn<(~YI-aLW0wIMrm|OTkRQ}mE*On;{has>C|EDWkWcLfNiho+!)oG~ubE^1=EGe0+n5ve(KRd-x8{HnvMa4e6qeLls^lAPOslrp0PP*rvu@JYK&rOJK`#& zc6mY|9QsZ1OdR0lEm&^Ozk!Y(`_1Z)4A`l8)_9|@kNWX`rxhiH;{%&q;WQYTbM$I# zy`lIfCZvNmRnhKuv#frhYCTQ@{zvYa`PY}1TkjxLcmxEYoi~~1ubg(6Ej0&7VTTi( z{mu(5zug17Bau@H-8?Dil?co}xf|vOgkA?oPYKeJ>@tN!0D4Y@#o!=7hDZ&TeG7y= z0?faFczNUj{Z6ATS(oPvZB&3Uf{EODK>z3Wns^&n$I$S|q7EP1?Xn#crK{KDU-a7v2 zc#?d{^4Jdzg!C~td&0VJT+us?$}K34Wa}gKh$%s@(wEv?*FWAuuYVGs&VJKFhosiU zAaRfUD5d@4f{hUnxvw*opSWOV`?N0*Qe`pgJ3Fm+nSN#;^4rs6YwILj~x%kl6V-sz4<(3VzZ{+wwI zv@avG*3IM3b(yQTtZ2=z9gG^UO6@kPv-;&e%vaT}|NW@+tEh)ojgPIrc&cEjenj2(-4{+d%S+k+%ysk2JEI__k-7&Dq_^i{+7kXt}ay5!d3(Otp%XN+tu;fTSJMWE~ z{y@s2U6t7Wu3M!~*HD+1f=wTxGF{+fQiGQHRH{fTl(HAhqIeZT5W8j_UO%lO?bwOD zL)>=DtmJDseF|c3hGpq`;H=NWTnpOWMo*~ixKR-zJS$Y@&_IyeoM;HB!h4*-u)LZJ zjh2!v$m2~Fj-b6F=9Aj+C7nN}LXitmP->nQyegj?a-en!ce%SinRaAG8K0GKo&m!2k5@!v?5t|b|bF_SUP z`s&>5z{Da96n3YoUf@wWjvhm%HM=$0u#vlIbtiUZv67GForBwM)PmxkIjweD#^ze4 zxo($6@7z3m!v06gvS@EN&rSZq< zeSZ`0xT=Oo1>EH$q%&obEuV=#7~-54WxgsCrTIcSHp~?_b$fGE#5zY+xq7ddt2Nr6 z8RhaaYpc6Ad-+)>t`BJMFNXEC!jDoX8;hbMuG)L?4+}zgySz4i+(`6y@5WsjpWUMf zgFU*FG;Ui~)V{O&NuQY+JYhvHj!5pRpnGSiaJd81h$5ZYY6M*+0JPo0w`k3bngiHo z17NbkW8MYv-i)jJ_G6H+CYBNGD*@URILo-IA>V}qI(4h%c|YoCX@>~TDScE8?tFY% zp%3KE{T8*qh7%_{84JKUjZh{ z9;Ud2t{Sgdc8g3F6vd3~JG;!DEE{Lo6NwX1X)T{VbE;f6K@B&r0eULPk2HWjWJd)@ zH5?Rc@Lv@F2I6y)Q*W3Q!K8^M)3%-l-jFr{JjZC_EsBo3rcxkA41fB~C@9nSYTH2l zBoKGlu(WVug$^@iglj5vrODl7EDsUhH%H zVm(s5yfrO^&S&CIJ>-g&{MdJ(fg9WRL-#Ep!eXm?vVW)nYrrE{a(y+3&Bm0|^p)RM zx##IhCV^9LBa33r#jTd>7LdZpa7W+;VP?)OAmP^LU55-)m)0@Vdi>!3GcBnBBjreV zv`V8!A3r%{sE9??Df;yHyQdIvBS6T7{5DkBJejni(X=v=9j(@LyPJ*o*%zs9bb30y z8C~pZYQ%`Ug)~No6E<*uO1&z1x3LH}-C@ds2E&#tr^ql=Jdc0+_Oz~y?|v&o@W>*d zdNw`Bh4bxoyVlJ6Cs&avXJ)Z9J7Rw^!cxoK2@=~PkRnDm{Gl-Tje_yr{sI9JvIOmLt_?=vs(3?Z_8LCWhfOcLq&ImrfwvRt z6696M=}TM3Qxy#QVo6h)kH4-~2#3z^KbB!B?TXZ4ACDpJ4WyD~NQm3&s>3A~=GFy9 z8M^wUufFK!JY5+8uL?%e%u>c3m+XA~P}gE*XdTtNG++GGR)K&fDZU6#7puPzk9PKl}=JO=}vgEtu1Pal`QY> zO-W+?8zQm{mb0HJcGH!~k2O`?N6>%BcGZqun3m~73>fh5ceiJM))Cv zm(n&ENAME9eg}k$Oj-9m%s@t_2`)41vH#wIEgi&U`Hda<{f)@>3F4;!-ne&$z6`ZP ziL3*k$xx_{HwPVRMGj1&E`Q``Ecmz7Q$xvnV#yQ#Y#x++<)(5cQH=YeTP2 z45~F&u=-@HJNda@<1@~X4Nc5cN20Sal=CN3xJ4C?`V2fr0)*En6-iaSpQS_v>r(_7 zLa$%wT((~{NUgSV_;SR5Hi8QSuDKDrj!Gj>cq*|_he7q z0;EeT>z;1AofF4X#_)jMngXKacN5?p=Ee;%Lk5FXf-y}AmZ6tVaSa##Cm0+3b1+<; z?t@%@5p!m2dagTC-kKwfqc(S6wgY6Lzw7i2FCQt=MkxYBRULgy^Cm`)#1bY3O}C=Q z5J%$sJdyleCla6`SQ+@8EU|yzZ*ykIp{>;QXmpdtW;`3)yXplwVEoOewg|&qc{fhJ zvKQ2beU32(M&v@^FV6)f7dg1)u|yRkr%i`Z@W@%H!viMr{7;^=Tt7O&B#!*y!6 zX?=0ptb|?<&>(=;+vAgro&+hJwuflSrYTG=|6CsqQtbS87R+6EOU8P7KyCGpzZb;yuhh|` zsRp-xDjUJxdfN=gxtzdiTHe`qT|IBG3h33o_8Hc7K( zlREy;yF3>g^VLsCo83qdRtnYyi1WDH`4G?u{j-zN!qF=(3|c&4acmh2d>$Zgyd;QF zurGwn^=~1a5qA%GiYRJ(w#+UpDEJ$7=_%-ht@V$OgG=fPKUcgx`H%hrMqeUE2|qmY zxSHmG>x_xvvTZ4kX|<&2Uv#bkcPvNOnyXxxObA^I5ACh952Ai%A>F7Ztel=#7tHGWWZjK zarHfB#cJVOOWVuA9ltNQ4yJwPz{}WdbD-5^Bl-f|U9W>NThmvYr1crYKIQL(Rbs zHLAJO!#3^8f|uc9<#R!)3q~nmGDVw%Fn^q$t$G4&8vKl~3#q>I*8UmQ*Hq5L-U5%x#jk*Yf0d^tyKBW~_Ka4|WMCzg8?H~G*3!Zt)2EL}+ zoaM11EwyMtV>0xy>M@UOAgX#fii^z)q$%%hysTr zY>sX`sx1>27pHU}-Dzj*P)nh~GlWp0ULK%HAh6x>ep5o3uF$vA#a;OnSwZdd{xken zJW1dv$&VhAWIz$Yp*{B60@QR-$B%j-A4lB6-Jd50#0-`k)e&VYe{lf>gE5XIZCmCd z!!vqESQ1&-D$ly>o7vTKp1K%zN+#GO>F!g95sn%7;^t2coqRJei57!JRFnh{Y|j`1 z7ExtbS#b7|VznBl85`{TT`_Vqva6EI_cI{Nd(D+bncmQmBcLm`HkSFse-!%7?u0oD z`Xi~-pclW>EY}_WNu?=D1~C~ta|)-^Ze7O9qzMditFW#cfng^C47I*m8%L<<(2{937}* zFDADilb*zYmH!$Yray)bM7R#`HJ8OgJU%Q!8X708lq`)HxYG%K;2gxy4~CylVCnjL z2H!^1qziBc)dw*Pa`9~kd`RXb3?M+lpsV|04vghxt=#j5$x=SCn>7U!Oqqxol)CpFx%Nk4JZCAhQb|9`FsIFUBPB_MKeB#?u7`#@+{T?0K#x_n zW~R6VL`?Uw=vBYj8Jpo-bL3y=T&I?L+^unGa^h4Ypk~pLzBZHNzULyvh)iMuJw1jb zZOII1u|59KHf6h7{W!smP1A(wnv(~P+7sTf`eyIP&Hkjt3o}Y;G4vv;E&Pp3&YRF4 zGbkD;O6@z-D^i4(%!Y0GWI}%Ff;SW^8Z+dBYtIIkky1r6gnLNnZKwioZv2g%vTL4S z$qRrPsguXpP%1hjClt-tznq(-_3Av=E4Ox@z7>6{t=Xwk)9ETcaBms8uevQ?4fQ?j z5PZdIOu7rKq~=q=ru&ncga8|Ulbn0>=dl7Q!^9PIzj#Ql038&$%QyTrjOcaZ5NqG` z6x+nq+%@6WsGPbG?9SaEL?#3*2;3__IXKox(&T;8a|&e!rSlmaq+VbXJ)pi+4s|?d zfC>y3c)H#wTw4p_yZ*_7@|6LBJCyQKqWj%=;u~yT15-0C zXZJ3%maGSVvZokuJ)gY`xC<1~P6Enk^WfS^(n`z0kpr=5W#=*5%A=I{z^GO_K2uJh zKY3UDSAsw*pB>`7t=Ft&{;uIC099hJ+VsCg74yg5<;ZIMg$=KXG| z{q^O(m;SMi*y&$#sU^cGJuTnN{(f{}jh@5#?Lq^=%q%^%I^h zIpvXfRuL%U7zYTOepuqEpV`1p4b^MzJN>Dd7onqTTz_nV{qsmv_)WqA{Yi6%v?Sn% z^b!jVsHKk2FM;~`*Tun(Dwv1O_X}l+(-~!507w6jrYL5G$Ft4>5sm!(BD)#zOf|S} z`CG*y2@tnvbjUR&71pec&1w^-mhZ5)VA#XMhyU|+Ci+;Fyw^4iWY(bUbmL(9&f5?m zpeO&jbo(EU8-H0e_)QAe=7d0tv>VY~3$i`7QV%X`;lb}+k|;{FJ@a8l4b<6Z*Y60U*GqhHprcG4z<+#+FJjLZR zZ~T3HZT&a!H_~2P^Gx%sgJWAIIr44xcK4IgDCbr5)F@eoS;iN5zVhTC+DrXS!Lm;E zHCj72o(Y?~zETo<;*IR}mn|$>x#Dlg54=p%%Xgc?H=#k_0*M9O?>ypHzV-C6K0NwHf?J^_@T;BBge@{<2c ze8<1kwVf{XbC#3I{M(CwgVI*H6)2?T!BJKxJf4xRNeQA9HOj@prK$m)2PNfjlgzFjwXy`K4()B(t|u_SaQN3v`6T=LVH;H zM4N1BxtUEAL%LrTHD6qM786?3xrL~bH3F)+#?lhq?i{Whqx#na%0hgnYjb z#v;<7e9@WnrG&0%2Eccoki)IKl~zP#W$2yfQS0T#e3qV7-!KDx7S-)xa~9j{(AkH5 zfybvxXZefv;BzH4ExJljN>L~tYaE@H=d#9e$lcABKK%mwV|TLYdQdor*M&7TwI%;~ zNx{IwEjfjzrlMwzMWv3z=B6WLYDUV?kaGU2M(}JqG`FNu`9i!|j{k&)fra7CbPh_J zQ#JrP>||1q;hJ>0?4=I;C?F9nkv4KSpIUX9=_M^^8(s5bKn&qB)a#L=yT zFI`#1oDIS{hT=6BaffDSmX&ymnYuQuaY_LW-q#$faNxa_PQWW|61}bil9Dlw(kF?R zAk(WmMJsxUrGB8oGB$l->>eSiily;w$E>}h8rB8fxO=1DZx~8y)+ed1&J)t&XtLsQ zJ5aY^%OnE2>lME&&eEZ!&v52&uFA#1%Xt+x)Z%lIsOz?*8ZEHKn=0T&KIe7Rng=hc zS7T4=JBy{Hre+(aY-`K_bPEJh`t~*~Dh7N9ufOLAINzEk)!{?^8?QB9$w?;Bh z*3~|R;YdzI&8!5~k=jP*5I^BW5e=d7)*b~gBtKkXYYa0wplZzZKI7m1JI3JqtB{Cm z?;mv)S~cmbelF+0rG@U;>nMHwDWOW~Qu9q^SL;gQ!2*h=x)nBo>d|q$*i>6PJ|0KG z60Vf+@++6m_QFambu=$Ye0B3C56`2xYw8Rr~;Yt+ui$nnRIa<5hNlGJN_^6aWn$ectGKa z@i%O`)Z_gSPvM0Mmk$C*f+#qJP8*5p`iYOAn>N!uHRa9IEFIS7Lk?}%c@KKdx!eAN z%mfK8M)uP0;3p?Gb<1kDt@mmk`(^dHPehGjt&v;qcz!j!hDFGIUtWV=mA70(*n7dt z4Y5X`(oxgcRc{Z)qOkinzr>@g3+xK-^d1$yEG2Q8WY0e!Sch3n%pDcGd2wBx8pv;~ zyW)FrE;%%Br!Gx!P6rzWkNGPK$j3i+$#KEv^oFVY`%q;_t|G71H0%5Q8Ew0^D9Sb_ zlYtEe$4yoB0b3{6&acaIDOoO`1@HRwhl3oI!*0QUYYr0pCjOrJILF>;Z{~_fZ}_!x zQeIbhxG36>N`)yyL#fwFc%Sl=ljY8*E_2hbRvf@Rh8%7M2Nj*@RXg`$W_iStvTOuj zEoc~V*tWwC`MwgOJCM4szB3b6G&auhKK_C9UdaX4e#ybF!|?H=m6D`oIC6RvE3HWf zq8~yC1*Glq!4bwokd`g9=VGLEEkfoqiCUt2nj<}gNxdm8{4i@m%H!H1crk12_~RP? zGo0$@zHXDfjUuyPvND~c*2m1TbYYvOuU$SZ&J1*!@)EY`Y-GLjV`G*fCwM*;1m@cE zHtp7aY_@m2@mbJvfYaYWJNmP$QBhiv&Ig}gh>So^EVnRu5!Rw_fbH$4k%G;1?!zc5 zUdz6RQPfgIb79CE;}nsGYW*7Ch>pWEsP4q0yf+p(uUYlNn z@BO$ub)FWAM(|JeKoC!%r}20+*fo2&Z}M9KGhNr}&ZrX%v7A_UYc1sxG|bY;zRW0i ztX!hLH1dn`5heG|PxZaDo6Q{lM)};TPn6Dp{rU4cL7p^{b&-a{N6GZz%2hQV-g3@5 znq7G6mba_$*ZCG7Tb$-Hno|#0%P5rMmgy-+QI=|&oz}IEN0-di&6yErn_7+lt2f<; zc-BFZ<^Yc-%Nf>c*F<7pk5-v9F3F2UCwWQ-jx2e0QzR1@r;m6{$y%Cr3!nJQuc-b< z1WRrA5Uj>)Hy&c4dr=guZ7vqgs;;5tfsPL+t)QA@!JF9}GvWYp@5fLxFkXz;YV_A4<$R(+yi4!zC3?D1hK)g*qtH11T4cZZs^Py2k=N zV2l~VKNkQ?uJO%>4bod}r&ZSV!*#Q{rwYH=Umkl%zHMiD$wdqASuoGM=4LwK#js%B zqTZxe>t?xkFJg$ssk40g!q~6Ssm%jODd2a#ub*33p;5vKsuNY8ie0t0qpw!nY~p9= zV@g1JJfj%k9WDJXfUO2x$4Qf;l$Fr(3IPR@coG+ght@?Svu<(ey3j0=lxC2n6 zcc4WU6KFyo_Op6agdTdagfCEh#O$_m4aN6p6l#D+E2@bnK2PXXE#Kyj|IJFO{Rl;y-Kvo5)NNP&zO&Gk+Ev zT!`fO+^B5my`#R+9!aB9OChs&`p)P{j_D(esAA~DaaEPl!Drvdxh`mSC>h6w`9VrC z4f5R>tq51iH9GGqTx#PvH;2t0mj}$dDEcLmMCcCi;YS=U!ddof&< zbTKeUVEsf$$;B-!-+SQQoS#*(OgrK{zZPm7akcY!q$VKpdc40hW!T~zE7Pr>#th!~ zb!Abj5~4;r@cTx1N@e+-cCW}!*tAsaZW7rI!S5t5dBZ>ky_`rpxD~)($q!*^yv=Nu z)m(h#w7HjfdT!^vgc*N=(_;*lw5#GSlbkHjuKkp_=rWUG_DBN^$k~^u8U1ivK$dRf zI3Z)(-uM!yC5CtXc}e;Di0lrC;~=Hj!L}dhPmLjF0H@vxlqD zv&2pW4r_GvXDBM&^&Mwy+R)wh4iERRe3ygBk!>xB@0Q|?P$%Bha>1{DOO2l--X~P~ zV5`OoDwzpac`vkjLrb@rw`taU3SVU4h1gfo>JPDfm>N#0@vULju2UiNTSuXyM?y z{LD-}XcWKiOmw=MBj-rr$2_2W}WjxT|HBMCXW~k^DYgs!46v2CXAp2D9l?hkb8S zG5wSV{hfJMApf`Uuuu7l@O!3gTnf-~K%Yw<))dNU5g;=1{yJxoj7Mtbm7mz|S&i_v zoyil4Carm`A;y*i0JFz>5&h68&`gFFWND7|MqoJj_wOF_y=x!k-aXq2M93 zOO{JAZF2n_nY$Ag@*9wi!b&wQqSr(AHm6R6IY;zzTJZNONqI6%#%p!JkSU(TW|6FC z2+NoToWeW%fZtU;(C6p5V7v{EqVa@%%oq94ZSvx3Q>~DG^LT1J1A%4(0U1)3u4#Gv ze4vOQzb?JoUpVL&A9F?a^RI5XV8%LtXYqcrl@4EIIFrNphvw`e6Rie3qx}Mug(g?t z3{d<(YMrx~u=ojTF3*iu_wBdz9Qn>umdq^C>*q-vyRmYh>eilAvFh zC26~NY7Qk9(1(=|crC>R0!gReC%!7ms`~kX`tF)=#@jUw<)5oefysrwRJ1YdrcS2Q z(jyjDRwXOOW@$gF4v+yPmHEJoW@&ac`glyBv? zCxflFJ%qvliW-vWS0N*-yaJ?8B%82lEVJv70@S=cPwhunPUT3n%JwCVQic)C9{#OZ zzeExh_1O`-S!a_XE&oA*|AA|3%==6>6?Pd=6PI9y4fjnTj24+7Us(u^*zo;G1zFf1 zrI25XHW0;>=w`7NjsseYj8>j=wI!9^(O*;Q4_lj$SD2YCmKQuNwq?x7K3%x}!~6bP zvjo<$6V7m!9B@}E#5!|be!_iR{Y!in+%=e)OZCStk?HnK2rZM#KWW8@k>S&wB6B4+ z-|V_awCUi$zz!}0)_8}Ct+^b&n(oc+>4Jxi&p)g06_uC@plpyX(2-O-i4mYQDi5eZ zxN&`kR+3eW&^9zZRdM61i~kR+VI%tG{s!)J#0S-YoxJBN>JzF!&tl{8dsvH5F5#={ z&dBPoGP=djOw(p||4|4hU_jVl*=>kmDahQr*(6d&H(8egaE;k&Fs9-GgJ*AcJ7Cof zxq_pOKa>ncllJ6Sjz0)>!rIG^D-ympX~HhZrN~Y!e!pk2Ry2;I8G0t3ZrAs|tuXwa zw_>sM^UKYrL56<=;#EwE@Xx0x=gN$Em`W>KJPaz&zI22awo$?Sf}CoDNY>tM_^iF7 zteY;bcwHT?NYT+eOj@ly3>?mZOkRWNd@Xy4yT z?oWwTAsMSbwna7I2jhM&IwdBhm3w$UVXDx0^Wfdt{W0CH!LiML_k{`@X6Lca0g9XV z;pe}L16Wu;Z8_tqY;#X}Ye)$(h&T2zd5P)%pOCU!69EuYKR*)W)qIu1Ofe2W} zG^fDCe7KV{JsV^ipdmr0uJ2fzS*~yw9H~o?q)53(o~kf}I5qwb8WrIb?a{NNk~L0h zE4IZ0To^FA<;*<`0EqIL6d>UxJ7r?kK#@6TgmY7|{K~Yscf13Q)YI#yO6vObWuz=| z$+D*};{gXG{iEa*O4jyl1PK8h-r(MKpDLhh#@U&RG#B<$1JNIBr=6zFRAUGxrO6l5 zrW6jIY2tcGgKK~7o&RfImSps zuYE^UUyYtY)Us6(mw;P8n!jY1LK1ASb^ z-{5o@1HL)ORO1>c_9xf5jk9&D%!c?!SwgLEH_Su-b!evlb7&yR#?n$|%OmS}*j11I zOVF(lAFQMxdkfrw#oom@~g*;BYAKMb(-MCe3g;o^tf!c8#nO@4ngRf78 znpv$@NkxSQMu<4RIL{0_7m=`8;_n|BNunqf`xMK_%D^$rl3$&7Ge^y7Eg?$75mvg zWkf`{wKH~Lf zoO^fCM&d~S9m3}Pt3r~x6pyUBi%4aq*6 zgA0TD7ges8OK$a94|7>bHkTtXH^l67TkqrLwZ)k=C4BWGeIea%bGXWHm`QI=@3gHo zcgY)yG!NrtocCI}UA}O8Je=8MX|gGZt|x82c)^37gZTF#=CAlQT=Vyt81^BW#ltC#*rhj!)HH#2*It4E%f z&GYI@XQ~h}9+1QvpF13KyHGOWNndciZ;sIY?o4fr-`(_ucH6x+q=(qnTI3`o>*qG0 zA^hh2@n~jY!4C|9?3I+;zHWbJJ$fhv`I#;1e!iQ$Agk}9?6p+i0$jT4AfCTne%yvY zGtWKNA7jaHV|%?|W>ND|M$L;2Q=I6PwW6&f2H@xXwza8?8 zOO>kp%iQ$!HTM%#qau%Y7pp&z=9BNsUfbZWIf*|WZa?b6I0K~Tan*H-JY5fFv&)HA zH#U&(`f(x$S({tN9wPTM$D+wafc2AC#V?UW;6@gJOU>tv`A1h5c6MGDhn7bVfo`?b zSM5B#Q|h`=>d|ub+O~~(y3P+`5Vz$Mfhxa=#|POc;x{q!OMW84uR!vG&BrcCx7UL% z51;v(`FsA_yI-HF{HymNrrmbub2W#iO^5Y+GCNNa5@(z8PSX1$YHb@e7r}dAZJYWP z2kqwLmM`<$Lbr2}ZQn!lg_wt(m^!w^U^C`o2%kC0%eURI@F-s(s?NhPaGD?%QymPJYV+;qlw&`Qc`F`}6Tmq4^~_ z++&W&L(aul*#a&xhT|Yh6fu)}6_1M6!3VJLq8_L`Gb_KX2GF zUrV}pmszNMcQ`2THKVf3``1oIqQmyeV5*wNX0SEV>QXP%X+5%b#T9IJHyEXi<_Kq_ z%467Vn_tdo!FdPXTX56!{&|C2?k&~~9T8Y4f0!??>x>~$9B~8hKh3;IC|I{?T(QO1 zv(NUeKCD}K)GEij-}Sqla9yyeublyN$|UP~S~f$Y1vi(VII!_1?IQE?PSa~5eK}XXeEEXO z&PxAbQ-4|bZVh8Uu_zFUyvy!<=?g|kV0$x9TogM$+wWnYk8Z!hv2dL5`4j!fY~GU7 zkv~`cSk>_!&n|C443BNqt80!gv@W2fZQ`sgj|E*jcQLca{&@Nr9goe#70}oGa*@duYrkq`iC1F zNdJsrqprtPA_VbD7UnQVtUg8ym%i8c27g(2yqSF**S5qEa+lBtcx-N}uQMUmfq703 zv9|_6XM^*kZi{oa_g5@8(fL;o1%t<`h$p)8ukRz0*KJzdM)6>;ezOT_d+7H|jItxn zY)f9*tZ8js6M!+o>%lskddNYwLe~+xkP)x_&^z;&#vH$;am+Uc51I%pf59JK{&L>G z9R4QH>#%WKq@xbwHlou4&hNHlIof!HSi}oV%tPV*K5wI^j~Lr;3z=@N)p8vGt`Px$ zK;jW4Q>~98u+3z)5g~4jxU^m;=e+1D!m+uG7J?Yp`^xCtx*qjj@);@z;b)92xPiE3 z@pbJTn(s#zTo#(W$hl=hiQAM6RvvsHLPuWmMTXi7jXvtlNGo$)mE24$P0ht_#6h$s+;UVi5maG^u> zf&};jGO^5!&-sTRHa9}L`(W8PMHIem)_)r5u*}PX!@{FPL)GId6>X}cfoR?;)vLOI zQw-H^jL8xNMq#!kt;QN()g9_QYa31{E(*jToumsRzw&*e&r?DActvcFc3T2Hv9$3G z#c3=4d=-C%Ii7i!nMdtDctil&`ka-u{%lA2aw(>d^k$WJ^BxHut{KS>-_B3q>}Th2 zc|+{&dv60ki@9dv~E$bY-lSgo=1$XqVyfzn-fNvZj5_&=g-8sfiVDEd`KtKPdA8l7Qeez z+sMwA$g@2x{=cn*rwGyelg^>!owKFpj8(evs}i|V_BV336n20X1}&tzjM42b&r&MA z8^&c2W&KZh?psRV?w5K#-$9zy^>2A7{@yn~9D!9I@uj<2vqsycNC$ujMm1p6=-S&m z{~ZFxeiCb+6ZjPmRCV#^$N#~<|4N(825FBhsOge?qk6PztFWPLHu$8cKPZW&g#Sm) z+@XndO29*8Jy%9$maY1UKFKSs1oHcJmH*UEHaP~MPbhv{}zQF^u-Pla0nErr` zqS3#j^{-eU*n?g=uRVF+$A7aaT(C}JXM5y#^V*WH;hClz+qN_SIZ8Kpjv3U0=HqPe z$5^!%s8~$r_03rFwF}u3Hr<7`NVl!mEW)w;58MzPb$E_v{~c|9JpppiCxv?F6g>5- zZL_L2rWT3m=}*P`OzLJ-M z33c2WLf@-@N|8(&slhJQ#{Gq6EspuY_+jJa+cdj62gkSlQ~k0^KKo}8WjFkH6@P=B z|A;RMCce%TyGDFU*TiA>fx~j*g0$Q{bd#_B>eo>VGQ#r>!@Qw(e@f1&8F5)(BU6@V z?_ukgGh$aaiB{t8vg?BTM;H z(xb!ZfZ>PlMva8)E%V%vZ#;77G$}s@Gt_Gr)Qxw@|Fxj-L%2)oK_SVd66XEN7+1TL z>FyZ~!&Zml^gJmIM43IBv$9S#{cd$o_P<0tjqaYc<`Y5d0nttjZRQO zkLEN(u=mTFR34gvt_P3u-iDF>>lG_uh-&$}oijIOxfjlU$ZK%x@$$rlCWuiNh6P(+(y*be(Uld`_9G;Gu<<@5#;}xr*ZG| zC2>;Xj911d?L2jznPiypeLMK}U45aLW=gGcnuY2AMSdk0cr`4S99w_j!+#o*IWi9- z`pQ4wh;Ik(l4a4alxRwBk8Q5j~u=`HC`9Jh1rs& zl63EE8{jqM|5zZ9zhW_2Mej(AdAEdr+v-wmU(dlvfs{@|$~Xzxrv40p+2-F9>9`qG z`$#T*!R+;@txQrqfvM031=4*4>-ti5?J;tjMYRSbvp?3h>Qs$rUfouxVH?6*UMDNC z6BUn$Y zz6D#1b7Bef2;$nUeEp|gY=1{|$y&RQv`H#Cwa-$zWSnLguBIFzE`ad?g-A(-p;Wbo z*ld+F{M!!aVct88M`){Rbli2o<@V(QQ{DbDZ|cvuchhM3!>;i})v&-L-1~3m1r%5n zlGr>a>k=MxApk?RTY41mdx+@~lPTs&Wi(x2vD69cwRg|l#{+_Yt}~_<5vG4WIn~G> zOX(Us-h@Z@@{eQ%rk@cRtd6nkfwN^j>i-U)BXx*_t;pb8adR9F<2~VC`&+@I@p4`k zp0|U1lImD)--DIFGj#f0k-PuY*|}eND@pSwPSdQs%Qqz#3>SpbMS{z`b88<4KWnK> zk=Db)Q$2R`1`+g64>;yO3`-KfurJ$b%!5?>8wTdiH+%Y#r=Om+vzP#3(MkI``PYAb zfz$P~7s`=7Y8^!87X5anJAPDWUC$N(_*xaGk|9k0-8Y|I+MVwB_+L)22bRWE*_JCo zmRD4Wm1o@dJFM#*wBk|mg@5$?aBzB zb%(07`1}h+0luJ5`aC;tLM{fGvaavxbvJ>9vbsIMT%5p^2F!SkCW=w39W&7XasD}w zw@ZNvmk)v77n;)~JuE(T>ee%@4qCV>Hj|QF=`L{uV46&I^7DTIKC&2ecMPS*R`SYG zN75emTfTDk$>2H5t{1y-2#r6!m-357W{-@8D<@a(NXfd<_OopQ=<-T)Hm|UM-)v zS2Q6O$oJ^2J0CDiL*&)wn6i09yI6Q=F2ufLZ$`z#yTZ`mc~nZ-OHK#K&#fZJEGP#u z*Q&jSuVepCz{NWFq;k`vEH0^MGBi`-y zYc0JGYkgpjk&!$fK6=~4;gbvH%*tn&o8o$F=IgYS`m~!JWaWxhg*S~O^{R(u>uOWI zFm~7d(nh>{;E8GsvxAO#IV`ha@@T;1S8~@iOa%@mRzAxJUSy1MNRp|Ps~?5aeSA_* zkeJgnGZ$6aHqPo*+vVvC%(bG>pQ`V$YuQvY;_g(*oE%Ji8H-y@i0@ao1NNvD!XiV${ z5z)8t$W6UllD5B2Oz@=D?@=rD={TBe-agw@*ICXy>2tA}0qR}@Y9j_L2|*+JkREkn z<5txD1QJ|z_A?Jq!i6F$*v2Wc64#uVHq=cBHarc9bvFs)E&+ zZ<4o{pxGA0Xx@!?1LO~RW~@H9qYvX|>R~zG(|5GDZSirDTQCD#H};G9mUlJ|8A}3O zr002g_0gTwKoOO#^M&aPj=SXqw}2HsOCG;-LjBG0qiZ$ZNEf|rlTx3=P*2h>-n#jj z-NdYvv_R+{&n33GOjK=@M$BG)RKuros47WhiA#!khE8zVHNm!ENk!s}Lv7EV{$BbT zpt>g|i~H6_o2UFl^-?S8q-$2)1n zc+bq(00>qwq6NN5?d^xCn@IxBYzpda7NXTNTo2mOPM!5<0tPn6y@|3H>M9P2s=rN~ z$vmjC6I<)_;C(V&9Pl>BYNNd5A5m?uDJwO^xofl+$_L2X`!y_=O*gA98t<;*#CDzw z0UPbflFK*vj&fp|$PvlFwN-iipQ4Lj2dJNqa}SF3CFRG^U5s^E7p3&VDaodv9kDBj z0JF7s^VpO2UubRWn`#sKaknl!X`b@d?k+2JVd|0nv?%3%sNdkg?{ccL07BEoJz&8c z7}&3fa;!FdEOu{WF=IU`UEm$lTu^tp0fgP8_9Q51vs))0e=C;7f&Di*A$5&S>N=O6 zSZ7Fy+lQkBIHP`oTIL*N0Jlkhzzcvp-bmsWS5-ouOyY}C931b;)zzq!pVa(}%NjUN zPiV0w-O;7u(ggN-mR-bsH$Jco_3ITDTEmruW2rt5?JCZYnEpx`K@SSDAccD#w+f^d zz6uE3j_T78uzZ340w!m1q$CF-DojeYU1`C4M*%uW%~SJX zD=yPWGHC*Y@A*VH&vV{rD~lR9-WM}|`ojN#Ty4`4$zO3iOwEksNk4dzoNPP7DSo@D zcTT#Le{9CI1Rbwy!e{LlFy~N zm)%s)Vxu+#i^OAB9)i`*6s|=g>OJ})jBbZ&BLsAQs{*VA_haYGbRX=x>9VTO7L3hA zfWN5Fn(C=?c%>{)sWjUp?mPRa_8SaJS*PQ`;7cl?LWk09BDj~0aFTrQ>>MXm<5{I5 zW1lrIQ;lW28RvFnjNdL^omRjXJTzz*s!qQ+eAbep=ukpubZHE|pbVB>z3EGxX$enW zQe(jWdhkr>88T(owB(0PR9%NHpdkEfG|{^CBXZ6Uld!1wKI#xx6o@+O%6pk8(Kvv{4qO;%X8P_XuJc0c36_B3 zI|k|<-^InkxQ0Ai;B>Gw;TqkCcRUf3%nBHptJtHtH|0}t!@2HiUWu0Ly97x#c4gCe zJftKqda5E}iyf1fwXzO-e?xiF2wavCdRv&`cr>ZE_B zN0AaADteNDKszaZ4ZX`_b=?kR=`8GiBd!-{G8}m7Ae)N#jZ2adRqh^#&RP7@F{v`R zt(TTJHArD(jYUf>qb#h$O0~e zhW4`Y;h^iVH)D9hWZgCvQtP~34E@guCVYuz0@(nAk!hZ>hMkq*oboE?%tF$y8-?zU zVuv!bQ0DMi$rQZes!n0rSu8j|F< zxo;T)IYT(~auo9{dGV?4ZmVnOaZ^)yKONo^*wSPrn3Y(@6WhAY$(z!{^HH7@*WQITw7Tll5AGu3+RH`N!cg zhqXQ7cP#^N>fQ4S-Y5!_X2qfbr%%J+Ee< zN+4l;(}iHq=Cd$iQNlqlG~GcG+)1BQnai5EPK~BKX)HdL_$YQc^r;zAuL-2PfK@i0 ziGd-(^2n#rbYL38Aqqo@PdbH!_}_ve0#(+r9qbp%>Ge!U7Q5)|CV%W~BnX{0(NULf7`+@?%&Q7?9ZU=L(^68SPL#S6VI? z^nOsqM?6rjCJapvBg~dl*yZg+J58ga0fs$KF-mym-&Mi+150Q<2)a!F`38*aJhLyT zrACLDHM4um?n5P$Ix91Ot%6F~UVKS7;T6m$E69ccgB`=8xgQFBx`;~Qg2M~ahlzo! ztb9_l2PZ#ITFH@fGk6p%3f& zs=*=p`FxXtYX4^wAbzVf{Eh@YaRm8}u$bs32rk+=jXv^6yn2Al zR*YnS{K=_uZ&*#r+wjEiIE;%<-vJFfk!2_pVk5)ynagbw?+~z=$}NmPy*b!`7arVc z#cXxL48Vb?yXkxn7{DPl5YpSwkwU+SJRjZ*iow*M2q-2qko^3(=eK^Kt{JTDMCw>p zgd=aeSy9&2h=WA!W?Eu@MTSfcKO=0F|nhsvq=P9oRhk!2tB={bWwVt~9ul4oW42 z{HAqWRPiyu%$v9=r+ljCZ|}ITt}5}B`*rA7)uumD*E@};);8kT3_XKUB;q(R;DOFK z#evaz-N!9y&W18-!Ja<->F+DwB;Wp+H#g>UTY*z*>Nb|^nr5bHZ%J{!$Fy+T($EuG z53mc&*navWKOw7OV^R{?a|zevke>D$yUkxfjzP4FvDl}yYD`jK0$TTJqK0FHn4bUo z)3}sE98sX9e*H<(SsBq7y$f^NR($DOlG!Kc^f`^$e6XIA`CB_*zuUcZP?N61W+LoL z#cg!Y$^e*&59sXLYlvsxm?A+Gq$@A7JydBvdRS+-0&<150oJv8U2yx3PL|@uov#*& z8(%H>yDht#-!AB%)Gu&mUCTI}z{A*hsUbP!_ZGJ~E4MkW5Kh>I4*AM8aPYRk_i63M zj29bCZ}A(=Q6~6L5on?-!>9|~JGn668L0DHeC?xY`B`^ste485KNed}`@1TTs@K{R zGO^XN#~pq?LlB-ZCiECsLiwBfg>Y%@u_CaPve7x=bs;&rdPh=mF?gE z`~T2B|MNe;-F@HP{cSs*2!=9Du{o!ac5&g@FHC{Mx{ddk#GS_G={aBUoc8QzKf4`# z=pp>JAKz|cEgUSD3GhEn;>LlP^UpuO{l$m=qW#m?e^-0k+uqh*|2?m7FMa7t+f6s! z)PCRxez3jeSKiWI^G&a9AO4>o#@8?G?iZd|O&DpIV)o!evj?Hfm({2q`g|d0X|k&? zDzd{muaaaO;}fAjdC$uPND2|2nt7}oq{z_ zPM>e*kVK$(GsNe@amJXDl6c2ZvIyfj?F*%yQyx;PFEIrN{)qs5$syjvMhx%d!INPj zL>vwwlE)a`=U}s0c`}B!=mpQ)ygn6764;4T?TLxF@YOgMC>z|0%UG_t8;QIvYv5hK6(uK?)WN6c%;zguMb2L$0IQDob)}oTzRX)Fb#RPGI8U*Scw7oE`L~PN}}+oP6@}zyRK$D;84Nv^kDa*9oD- zD5PvQGLCi+;@Q4w6#QiD`F)<;$;h4kOdeu%eR2)vw$uWGcz(U)Bdc+ifU-vN7*EZ- zqD!prgIYOlg+m$B#!RjcO6Q8Im@sdX5JowbFsZF0vHA$SFwRSVslzo}%8iNV8|qd5 zX|0&{5&5D3#xqTp1I-0=xRtezS@=XZQ3k`RcwxM8aw5xh0k&HjzctD04UxXnF~}E* z3Fzb7bASGUKX0%4npd?qz3ENu_kaKQ+W+;h|5dy3h8GFXSBZ$(1<9d{o6E_Yo=BM| zO~fz{&)9apWyW7$L?QeFt)s_|w*T>=54ERU`;_)YU-*UXA#9$)&nPYvH~tSHoi*|+ z6%HIYKu~+Z_1Cu@yW;B=_{tK$6@BN<9ql}9{;t3N`S{}Wlh`=n#XZ!Ziv|Zhuz*v& zFt-baq^k58BfJdo0dJpSocqq9wbB6#q3(Cw!R4R}zD!I|V&zrxuoYFclUu#uflkFL zDnffemgu=9P!Se^GUs7IHIYJ7--wIg$tPPrFwmWt-UH0Ljs&V5MR%K-ih&edmn1ob zAyMI?P4n<-8jxOt!g5hW8EL5)*(Zz2z?5OWMu_XV6RLA6J+38VC>hH$Z`Le9kRZa5 zP6O=Wyn^lT*l;dk87{ig#;7CtXpb8doCIB~ECEK^xmE_~Ji81gqAq)^lUODqt@QLm zOv7=on6EqOQ!pg-{^XN3@4@+_KcULO{7E1_PiTX|YY;WDiDxWry{BY4E9~Lv>y?i^%NR)En20)WNk+k&AULRgO+wepAhZKRpeO+9F|u*i zDJMO7g$v2B#5>F`(%?ao$ zP2w{OGZ6>^F<0BB1gqYvW3Y*8u+{Jk5Pum9rf+ar%W0()>0(BA?|v@Tj~mQI~IskhK} zV$*{U9VvpFr@QXDv;DU}d!*g)!W-HNYg?b@ean^{Bfb6Om{5JH(MjSDdzcqeOUx+oB$ChHKo zIV4exR~`JklQCDM@*OUWwn37YfslHl5DBlma_5FE-VT^qmCyWSWPGOMbe^Ac8W$Lv zIOca`A;VFRB&VxztU{WLp{|cTpkbCPXZg&T+NO-51@XDHj z>Ma(WQ`IRvGe98?=e?&)?Li+v!UzmUF95m%CywrOd?sS3d}-&@W7$vpHl(2eL-x+c z+QOkYV^T72A4;9d(b3DYu2!#R1xg`;b$+^oTz)a&T?RpzC`3CN8G^DOWmdFi*C zntih{0eA>PaS~95xJ<^vCQ{`n(4aw)jSx+$MEHoY$@f#*FiNJ`d}&`|I~^R>mlzS+?~T)$z%__ik5vUNeG@)En#5BW z@6#I!36w4>`0m4ptl#*?H@2&;ysEwGRj+E_@~z+6PT&L98pPq>op;{Ze&wxiZEyVP zf7_n_MbB?Xj~-P#o6e%#Y+WwcB=G~<`}gl_&wcLm+Qk=LgniTWVjHn1PsAV8`vSZr zc<|tZ?f(1kkGBPtk0(s5DuKT}$MK>Uy{P@>Z~bQb@t^qd_G`cTpY!2rgoj%o|S z0?Blxu;lR*VO;c;Ba$LwJ{XtAs5j@ZYpcfE8Bqdz9m+{32K>I0`W%T*t`eMB_a&#D ze}M$&WSR2fPLE0CK`0>7J7C^to3$Pk>baW8`lb|GLupC$S-pr73DqSC4{K0p25{!f zGjQ?XM7MGS@181<4i4vsjJPlo?c%~-Y9~Z)c*sKlhWg67V3Te~`X#1Aa!>>bdl7w& zwV6-k$w8esj@f#`5KLK94`Dr-gRsbxWoORbPw_fO^fc&djbzDzc;%rRLp3=;u3z=i zkDL89MlhVbIEQg=Rj&C6h!YQ~$j-x@>Q?3tZ`98auB#507LvZm>wK!k0pX4XCjZP2 zTwj}*7)W5rDUMuIx?NJ#2Q)$y1*~kuK`$(wHXgI!6K~*rorDieaJpS0!6d3Gqyf|Q zrXFb?8C{o`BHk>f)|X{c%xmSm1_{9>Oug=U`Y5<2UH?$x9^k;No;5(_EEdRhPQ6u$ z0qym4PFgaa;k0{L?`xx@_?3|1N}N&F6K9SZ%1c#l9BQ4h0InnY(PPQ!`WXnFKGl`> z$ewGa4a3*?sne&FF06gEwppfoCXz`u;{16hXZ3s*) zD^Eus!RE<@nip99)*Syf9^W=Q_~5~I%dNMlPMs74@Wh@texg0=^Pbi2x%Zy-;DZn9 zH{}9^BT3891&;X%@IHL_;daU1OWJOHNc`1b`|9@dKlk(Pb+3C}+q-XXi3kecNvDf6 zFaAtWN>*QD9>=&qvJjYL#bH)jt|hZg7>89nZ9E6$f=CFA(*uw0!ouZJDvohP(?$a7 zdEkdO>FgIir+u!dDIccs(1zg7g8-7zM>qzjk&vQrq+cep+Ln14x*TE<>6C*QttY{e zC66wI80Qh*BoUOes4zkUUmSYSP;*2!TVsa6Va?Jl0TE2Hnp1T|{^)Z!`VnB(tn=(x z!fAIM+5E!8M7!hYu<2id3%I&lw8H9Kt$@^8z3f4vNRo_c44LIoHCE z;B0p!DXABRUV6n4$3Yx7M@wIgCvG;paatx~P_~W>YV4`r9BbV z@=_U=D;mkGMO`R1G3zx<(p*?tWl%)S?2 zS-@A6_!aCNywI44CyK8|J^%U7$A;)&d-w0Xt6h4Qc#}3J*JA8QN*pee&MV*M~5=}~m%jRSWmB2ykBM8HFdNUc;NF5x+Psv@M z&-+wGy^z5htG9K4+89-O}40s_UKf(c2qR$02jjhue&=(1Vk574>of$W?EzKd-8HEwlPV+ zUoxEK=5RVrGt@5C7WGAd@2|O-j*}O`%1P_2-hKvUcWUKgjl|<1nKjSj3BV8r2Vh9w zYvn|Sl$_WpHS1ym;&OOOsX^*o!2G&NJ3zEY962MY;$@T;2eU@R3W5vYgVe(F?!^U`FyaAe^ljbBfxave2<0#H+A=OSa*3QM2 zFrxG3``a;WbZ&g%i`w`7^Y3fF^Si&>-u$2bQ~S1m{B7;YS3kMk@PZrK^S}7{?Zr2~ zxc%aP{6)QG_a$HQCGFNv+!9|v2|BT7rMzhPnIwMYz$ZTWiFU=+SLlP~{BU{P_O+M2 z{AGGu?mh2)kFfDYmb`$I%q!v?BR#2y^XLAbpKE{c2Y=B1^iTh^-F)*0@YW!|egL(2 zQMu;49OaWA2j7W!{t0JZhe^ud5LFd^rN%*Vv#zEsW9WA{wVd<_@)$rjb=uM%^>Gp= z+BE}?HFHfeBu9k92F2^?cU}cf9n_sbHqk34IHg8!3U2^1XR(uFL$93QILg$O4T*XT z49u$`3=cG5b+*Se=C&mtrx6j3G|Q+QB!*FT9JEFqGLV9P0l<+M%}t&hs!O=IFX>5{ zK8{Gwsw0{C!YjYd1?+Muq+n@RArUZLzqH3q9)y@@$_bBoaX;5DX^>y^kqxRIWSv8G zk}%xLL5w(QOFpW!N8dtsUcqY3A_F@9BMLMG^(54D$Zo%l#RtFg(nLkc(k~N@QZh$O zZKKrr0ZcV8J_)%NjkM{0X4?c4L_Lf}L=296IQ390=6cQppD5whD;>tcs0hj_R7Ukx zK@)}~YU>j3q>w&;{aRp9&hghDaA{hCxB;)10=b(b8*kEu`tW5knrOm=0mUJaSMbh#2RALc79b zCRyP!Rtb5CAv_MEOpGX@`+muFrAt9vrh8}^4jg+u6Mx4yL)bjs*uMLFzN;O6_~G`XCq1d%e%I~oN!LE9Z9g@AWx$@jd-6Myz?Ed?biuml zVC09w`Q1%1@CO3%VR3G#4jw$%{_-P#sZA444l%uGz{d@VE3h_!SG0InFTod2xv|WdO4$%&WMRM#AWv#7`WGo*i_@Ad841u5(i1 zh@wIo7oKpd4%QjKgosiA8#n=kDD{X>oQgGdBs7a~B4EH2OOueDcjBoy-7!HDe2n5G za?EfrxnHLAb;eBoNr~YZO)`y`BY)*E2@vK@xJpo6iBbGi;M5Q2LZkG+$6j@kY=<$B z?0x?!OTg@j>q=}ap8!-LZfL+*cZ&W11cT_f@=yfnDq}I>9IBMA3mI|Bn?W-_CYlol zg&g7`6&)C=g*X8zu~rt%dD;R9Eaw<;Ee4aZ=C2_gN4ktvJaneeaDb%%I5-A!1_jPg zo$Fu;5FI%xziVS)fdp@o%br2CR?@|jV*tZPG_%LG8KjkHo`=|onAV~)9g;=W`-1#D zz?be&5Tk3tG2qsJUc<1Fk}h-2)&i&ISf?cM40p3IuN+KIJ|4-b$8qSgF*Y|sZ8VCEA}up z^c^-=$ju<;q)5qx;_{q41Vmru;+!CiJpE1uqt1Vn z6^)^u>+r>|`e0N|*(_g>UVOx4Fq1)znh~HF7@+8w9I@{3cSzPm3W24#w0ICAR%aB7 z`y?2tdR|&+h*-{;FY?34Ic}_bHi(xat%z|SjMFy+gVV#{yV+ox(QN%p5t~ z-$=e7#0KAowIlco=3i+DzZX zTkr&6MDI!tE|zu$LQx?y>CpS2#PkQC*Fh9ZivuPBSuo@pY}bU=_UT?Dab z0RdYj;WV#r^%Z(ATZx0tA-(r7OLvXL%2wz}6lr6rLKMFO!bpDAn2A(_ZQ0M7FViZx zl$jY)z#$*VT)#ZocY5jP!Trt1fT8$)zaxj8shFmp1KM-F8?jnZUNc#b>H;!jNN-hV zVOBJ2EY})qV@2`5`E6kG2Aeb zXrc|MeKCup(t6`m9n?)g$x%tED_EY5hl;f~@Lb#?vNw(?<;x2Ub0+6Ea9@wj(}M>d zY_I)>*R*F`_Y8ggz%!ot41ImT&;0Dqw2yrBBlyj_>l@$VGkq@{uk`R$rN6=^<^|Wk zpxyMh^u&me0b!&FZweUFrQT^`gRssu#|uZ3 z7BKhG7EhKY$|5-BNa?95Y%dVOb*M2|Jaa@3NS6<8!1VsorY>YJn1lm@RBj6=)MZmJ zXWO>|^GnY-iW64LJ&rHDDzy(U~6E+m-yfeyWYh$@PJJ<6 z+#(1cRpMhz*E#3&UIxxR^4fiWF~_2G(}u*cq>?S>5v3!S1EX}v@JC%dGOsEVF7*&F zPku4L&ffKNDbikwe7zuYc!-;m%*}AGl{C|JV78F8PQ~Q{LRWdw z6W2zQY6~B)t9Tx!v5(mV)nH?)WFO4Mz){k1+o{%imF*Yq28j~sbKe-F-_ZW;OF zRi|U^J@5Im_VnwnYZqO7vEH`h7ggSK&prC80%BaS>Qf=S1W*K&Q#;|EtZrw-<3I$zWP&gT_Otmnzy z<1ps~g7}1qJ{wNy8qDF?e(^Gx`3W|Nx_I+srd@(~j)Lv26DeJJz5xq(@OaI-(`EdO z4mQ{2JEL-G6^sIaaSXB~pz3skq&@(|S^xts_@_QGGzd%+2 zax%V_ti_Uuxy+Biz!ZBS={QCZLNEsH_DS+!UoNCyKMde-09ELnYZe=J`qdW&Mupkp z9w*A4OEdY@7bY_=!m0KKW3EzlpnXwG8sgC@{0#SX9w`|#+35Gkk~HnLVCMBQZPWwl z8Z48fV>r+H=DZ0sKI6p;o8mF4=fLr-qdyJ?eFT_Naj`aCXT%^zoYa{lC**Qpw5Wn( z{|M8_!phag;(~_)L{qIqML^FLEVfR(+M!jZ1WxRkx!aeD{k_zZ%5UG5O7XFuB}18$ zq!L;ur0OMPr8*_lR*bF5fsW{+>4vaJ^=KRXJSoSIA8XHh&hy&0yzZMFDS7Dymub_) zSEab|;V`?}u8#ABG`xKlpNskkKFh?fC*W_>@f*VVr(GBuCm!+r0TV^xKVw}U>mnuJ zcKgETeqsBWpZVGLmN&npJ>{uSnf?|X0Pnx~&)d_U@^t*Iz5SVoM0sIoO>uz)|6Grx zxe_NX>&hkRqLJGe7OK^k3pMK{n+l*m@%=(irdXTFO2ph04jkR*Ziw_#pfEVlj#2Td z0rse6N}xM3!5O2tUa#@V1-q`D^5jE263yb>D4E3zjk4pS|GLw%Al79bN)H(8t86k0 z2rcXN9X|+QCKoYzZY0b{={TsJDs6Hjpg*`Jpw9^qHx*J%*HKvF*n3)y&}ol)n2=}3 z2{2{di6=&SsVmkLfXu3ia5w}bP0;wD7XKy1Ct$dzOrn^kK~#P$Ij&Elb^N%u~3+bLZDVGKcmzK$}b2o!>Y>#98yz+m$wx7XcCKoC%p zMf!f;qJ$_3Zc_ANUV7>4u|~|$VRTHoRD0?Y>DP5fJ&U#K#}{HVENTOQP@O-J`g$fm zN9CT@NC!NL$z{N(Yz)&-jnIPIS<}fW;8UI;izB)yM}kmAL_^xtXV?!-5X6U!Ta zbB*5`9vh!2NnG~eL1q^kCvRJRXglu^2;l~bTzUG0Hxnn*6HHnOMSuCdPtSYaa~03; zed-SY2>RkL{9j89x)?cE+Vp3xsbJKuT+GLeG2AE4%`2z46UaEn zQUV+~V-md4B|eB73gm{IwKw#u4kh;_W0(U(%8-8EmuO&V9Lx2%eqI(aq9*CdM_1>h zLzCbVFa2qA{tgP#n5OPFktfQ_;y5E$k6~w6L>fwt0Q$M0TK5#5^wBF! zgmtkj4F*jq5hj1pd#!R1%b);KsFvhW){Ldc{WHGiAy)B-)w%%odRP!`F>>vkWI}Ev zG)>HeO^lp45C)7MdoxzT_OywYF&wmECe4fhYIB@3=QW#L@Pae1WyaBywd+jkX9 zOed@X8+4vCg0)(oTpHLkxF};fHIV@rOu$!q_(5-?++@WOfFW`miS2$(?91H9&);#I zVkbTYBc5SA_LtL>C(TO0%@dRE+=0y;{^ea!Z~YPHx$27I6sL;9LH#M7==1=wn{jiDh7qCDwUTVVNA7 z^1yj=P25C8Ekg3dWle;0>Kb%`h$It0h&KD-b53KL#Lc;Ih~+w{dvrY&&n=0gu4}6V zDOUw?T`aT?EdT~e47pPe1CDvo=dx$lEioMqYGD+JLlh+`l?%?5sfrDLdU;<6T=dit zDHS-`2u)Me&J39*9!FSA8k~cP7>LegX?=N#K_z6*dDl;D@@xKG;7DNZVqeiWVlVS@)(ZD&*Z_RBQ zdNvy&7ezuQ;c!yRu&z7uF#$+kw7PJCW0QH(bV8Da&D5M(GL!Jodt~wTbc|09#Sz1K z!PYzzcQD8oYCkHR@ntAY=3$H;=pga6@2FdbkR`_4mUQVtOYUAK=DH~1?|mscAHzA6 zhFIuv!3L4|slw59;=_bv#7KcrJeuSIwhb3EgL%W~HD|2POL&Fod7ZzW>(Jwlt-eJ_ z5BK?1EUcL}>(pw4pAo7d5h=1g5lEZe)^pDAXkJPH)r-W1?qFbSXIvSb4vF12#`-~6 zP@fA-0;9V@udQ?EqV=H5KrM!Mn#jVV?n34Z1Cba4OG_H*VF)!?aw*Q`Fggv$g~(LM zrgOt8Vh}1_hal5A#=O^^U{a+jg=o#Yk(^l&vDIGZw0mB4Mx!7xFxUwan;s_7;C&^&cmX<=K9?tz2bzLN zI{Ez1Sn~4L=NZ!6o6Ds2rqv+{i4%b9aw?Sv$6qorj zz1Aic<{*v}=SVC>3@RN55W(r}YRAx$H6(^2tXT^IFsM#ADZ|e|I@1@bY+jSN2&R%) z!#tNO{jv4{hK^jBOf+R0ENz|}!8xgUTl$DuW$T}DqLZ0df?zjk z-Dttw@$2G<;n13a?q{q9#EC=`^phPtxjX1>5jZH~7^E`e5Txmmk%fg~Zbit%lg2`T z$A3Lwgpv^Q5J*HX7bU?Kl)|}2PC5s5dBHDkIb{*6oXRX<)QGuL0!h_*B0qy@T^$#> z;YH8PCyKlR6`jR|Df1+;uB<6*j)17&I6tZOS~@oC6p(Bx26>_{#a4j#G4 z9;06qX^+~8i@GEeEo=|~9UR67KWhuXWZ#%4u4@zJq5zxh(^`Tqt1i8EFU(FE{YR`% zgp9dXP?SvY_!=U2te0?|Pbx}WB2+@myH%XvM=_Dos}CMu2MSeo5$iw>n%pNxPS;n@ z0ubxt;IY_~Q$7_CxIj!;aVnm*GN&ezF;4^dSP$1@CVIRMMhS^Sbd?GTr>ZJ;>PyDu zDin*jsSdJwT`95V81zMaJU>lHSxavM={2IGox=>2u`{sBp*v9CHyLhqxng zmVSK=L*xmY`7 zZxF|3Vobf!B>5Bx196E8c*m26PTqh0+vOk%@9i4>~(a>`Q?*I2|=l*lrY;dNcv*63TL zRR-bMuOua33`UcrTEfE>%&eRs9?Ro$^Qkm zU)oWp&$sGR%E-&Ah_xxKtSdPnV?~M4jCxeZKwWw41)%0}&s^CQ9Tr~8Y%6(mO+wBw zWGcBykDE7jQ+>%tCi&+XgTd7z19@PK`xH}SqW^GUs0P*M$gqcx(6Ez8-?s)gA8$G2 zfy(yH>3A~)+-Zz&Prx^>1Bm-fUlwE~#KG^yfOwP~FOQpn^&fmc2uc)!WV z8rDu9aLh|Zebqc_V!3{dj0ElnXOTd)BRsCp;LKF2!;jajf;S#HloL`G#mn6N`aLc- zi36fBbkWV>$Iz+X%*9x)l>v)ZMdXqxts!EOp)(^lPt`^b?Ms{H^)pTcdN5$s zSZ7~_-C#R;>eRL)_(Qyh9zN1`@8;ieV-1gqazl>C)1U`}(#GjTKAu_69rx@3nh!*e zTkm~NOSAeiHuH7Rr0@}dk65@?R6oP>vU&XKpVFTztzSEzE%m$3Y=F+B&O;h>{hX`r zJP|y+eq6gBb-2jSj-l(Pl=|6p?Xzq@_IMrceB6~67h759T&+=a&wRF3zIoLAd2-1S zx#JRARdskGif4x_jTk>*Eg2(wa8>y%N^vX5rqQ^T=i#~b$)Cr|3$T^DHBI$5z!8s)Ex za5?aM3i3{6XD2?>W>ixp-eYa_mHW#}SzOgIY59`O-;E zY@B!Az0f7l0g&Q?WUOJ7b#xvY>E!-1LGy&ci}e@{nH13oAB__d+^(TdDlrS zc{LpGc`szjEgbB2dA-RH{dT;Kl;*BB=qdpRxoaHsz4(&RJ-hbl0hk-s)2RQEP& z|AdbDESUm2duCss*POs8M2RPddp%huZ8KlZL7fXS^`6~3^pzMaiuE7IAEQ2Y?4*bl zM>wuI#mSJ7$zzP0t+gSB?sbC<89w10;KCNc%AYp3mRJ0qJ=@!k{MruHkMAZscKoEv z=`6iJ$kS7KDKL;zKj3F^#3)7#@es?v$p#1J#t~L?%y8m}LvNvCx3zuf|28Bhp5r(k zi%#(R5pmc$FQ?s()yGQ|NE~)?bU&cb%^OT{G@m5y=L*UELeRjGw$2;Ye8m7?rGoqJ z-d*w7GA41%?GUJn zqm4uBf!v9&g4wP5@nlOQE&^TyfvXIw^gu1Lh~ErzpE=gW*`E}>dz{Bgc)fdrXO!h> z{Mj!40eFu3gPfif^b(J+VdQZGfYlG#pcikJV4KJ~oR7y-e(8M0h^65qFsI^_pOIO! zPrfY6b*Q>r6B5OL24{)E$#Q+3<#e5#s6GPtKk5*sACfdu7oKT7v991^;<|o+6o$55 z2f2GqBnE@)z>L35|Ip!M?TSZ^>9_6!jpH=3nrzZ!r)D2@uxcJjCSS!6*Ztl&IgrlH z264Q3EQxKWw6Ef^*d6%ex;yof?X_25*7o6V&2`FNmP0|pF4lq0%?LT8A-gS=sqtSY zL9xNnPh9c^*5M4Gqga(2bNuJm9()SlUd}=DPMox>ue_}7!7FFeoeV&wihOZofTDQN z@P$9s=d1*h0}`T-ci?-zCvXlfY)`%R z#i)O;%8R&+LV7%?X{=Mxf_##t(KbL!|QqS zTe=#@d0r#Rt`e6ISTM>y#fx9pkQp;~3L)V-flbDN2M^*~{EzC3V^5&|%P+mKU5M{M zBgTKsS9%n!3VjXb>5y%0|Fs4r&ii+kpqPly2lue32OUEN>rnn!BnUzPZ`|8Ut!S}4~i@p&%oyg1pS6PdUSz8C7H+{`&JUnitRP?5U7xj_bIVpv& zRfkUgqxfy&Pu>3juKV~R-P3s9e(L2{=&`f+m;_U@RAI19^?|L|2gP?>*>E5>uLqjq z`k07k{dN5enPDe9uSw=Rg2&GL(0{(=LNtHaJb>@gi{S!u+J)_w-BA=3T;^1bw_Lcp z-}Y5F+q5zRQ99=L-`RG-!XJ6;rS!1P^Q9!S@#}QPEGux#lJ9KiHRsvJR{YuW)b&)J zv(+mPH!sIeX~$N6(`~)_pOXj=<^x zZL*l}y#4zSwXNOzsRMZOIMtr|&)A)T*4>vaoh_t*|M%?KgXNa~Z^$`Sw~>GHMb71XUdh%m8{=3% zH+rXTzpEWO{7BosZ+E-;s>}5XU_3e3+;PR!Yp7m1)f<_-Xy=`C>5LjeSB{P<=fJ+1 zgrBd}?A^1w{q-Gp;p;$7v$miGQ0v+HwKRC%so@2jTOzWFhVN6>KVRCeG_`p zGHMd4e>+~S+}S>f{`33QF1zfacE#nFA+yOTr(rhA7!^6k8nG1_yk;*ED#O_@(R}is zhihjCUg@~~uDkUr&^1?GhR4o}Ry=mD;GSr(-gs;Z)8<&7myTZ4Qz%!c;Pqn=<1qH) zv4@+Ed+)iw9l~Siv+;`4Kf#w5?}eZD-d@R?Jl!w0z*9~7h+h+%AyZFPTi%NhqsO5R zvI0l`AYuz&B0F{PaJ&6`e!M+!)sx$f6UUJsm9e-@Mz4KEee$iXVNPl+t*n`Yl(SK| z*5%Dmh1K|uPr`M$Sw2i0x5QUF^VqMPnRx9wdJBWNZ}wOhCB@qWc=nTTZ7Mm>I92z$I%IVJPTI&sE3q2#HP zr?#EKPa4~HZO2bb{Amy0r=*{vGQ6_jCm&wp9!0e&<$6y5Ht}!bs!8~e&kx@1N6q}; zA>Xptzc0QOoIgFeY{n3~N)lApBhb2oC|n#Q6L9K8B(iPBkufRk;*;|ZywbNH55Pz7 zKG81OcZuHm;L{I`Jktb z*Ep}4ef##dJMKHwF1zHy{F6WVr+8*TQ>9fCx9FV!a#hX+m*Zv%7o68So(`upnOi@*f^x>s5^8N#pBOgPf-h^G$RlR?;6T4~ zpr`v#JHPz*7(U*>>xlPhy-hvKxQ071^-R>&%_#Z=Xy)f&Ez5f4C2b|TnUm`&^O9~Qo<`^@X(9l_TN1(4$2wnd#V>8;lV#kEH@tN345V}goqmntm?|A_+nUgo=0!~W zd_p8&{eUQUn4+$vni*HE$GI#SP<0d3SnHO?EM@ZWtvn4pIK*1wXUV92S{?gMB*UyL zE^SUHe?a86-LalKmeNbIl&t{WN9V4wtR=1%e$FG?&j7B=9IJ||$tt0-BCC$n&AGy* zg*bi{ZfOHn9d?W#pi#SC$1t9L>&|PNrR|jFqrQxzZPjp0#ap*zT*XB4Dr=&EdA!9&QW~)A#*p*!U5cOfBpX3!~fZK ze8<~9+baGWU++_}!lRd6rYr5_(ZhAUzEZ1gsr!oc6#mP7Yp@a_;2D zSkhPS7MyBSKMjs2I(&#KPuCIUk|uQ6>v73kvs*Wha$r?=h zD8!Mx4&_uk1{kRGz$aGeoaZp!b4p@tH=grVI`MsEke|TQUPDdc5U1hXxN57oWvqR) zJN8UA`i-6PBy&%YiUHb4<)qs(ljoc=j5pfcd#IXIa`YU~9ou7s2)j6PPO+TRwv1Cw z+5t8Nlrto;!y2Rkg?uaQ8W|H_(9zvcCtU-*zVQsJ*96G0He!h`B5s|7c{bV-+9$-A)CD zKF@@e!!;zdW6fjil4HqhJo&6!ItL_aI+guZ5^DhM8c=NG+&ZOWg)2VJje|P-5Hx)r z##FiF1eT|oL;D*gjroTBj+Qjzs{|9J_os8^1x=CrD2>~r(F1HI)vva{^6_X{XiH$8^*&2KO3t2oT!nT zq;~RHJALvhte0=vZ5Y1tHaLob7;cz+rB)vM4DWM)R>=-a0xE%ZO5coKO8QsF=YGSF zF+I@iG@OauK{bZimSdI8+%w;7vSf*sEFs_t6OL5OOS#07(KbukJgSX)ofG3ZCHXmw zv(1?BPBEN2CVlZrp9`K!uN0kHlH#}8 z*S-q7E{+!`@%CGGQYe*=dYu#JIrYVuTp;+|$vOZ4KmbWZK~$b5tMmDeQgP&CP1WWa zEuE8?CARwLuRQjd$5NP>xFow2;t8d7Iy|qoRry>;#ZkANTw5KCF;B^5lW1h0StfRy zV}~{M$95xY9@~tmKHH43tQgx?N!7Y^6k}2Qx(#RUb@_>@u{Eaa8O&asiHkADkk`7o zXrgV5(SgUW1IsJSSGeWbX7-i5A#UBqX&K;xEH@ApgE5wLg`V%v=?+wvLNDje>PX9q zC0iYiTVj@WbJf_Ho`A~Zm}*0esBN<(mme9bO*ueRZPqP?!GUw$%wxMH>siLoXWLS; z?Tq2gBRLGU%X3S@m!Y)LpA=ovUa?C*=NwD!YNOBorKH18*o^6uRmAkW0O}l=_s`PR zM8-K`pd+5T?Uo`oXd#WUw3~C+2^GIolp}!@HKxu>oPw&)G?X>I+NE>xiK#f+%ul;@ z#yC&K!)S^^~j%F%O~i1E-lm2a~9I+`q*%X~SN z-=NM!4lhF)nQkrpft)qj51{&&bI^tZ#O5UWez#t@6>Aa4o?D-rxmAMRc9wO~?RFzAg<7~IIz49$>#4i2HMTdz5 zas_5cSNCD_ zRJ{F`_IXZe+mZt=rwaId7PfI59XO{Q;6+xi#7bW6z8I^G*cxwLnEvx`WlViZVj{~` z{uMMU?k}4~`X@^-MZXf00X2?(-yGx0yhK;yIpe8&*k0$f`9^!im!A@4HqN{_(eYB?PCqJ+0MC#?W_2VsS-FYVM$#fRVU7AovO-;HO@AdROgPh&vn#T>oqqy zY^UOQaSNDUit2PwC98fBRzZ0%hb7Im2286fqb6ZzmDY)}zLeGH z`YmU^TnBB-Va^(79lrb>z!F7g4ywMS=;A*F?c?Mcg z!rp&5rSe)g4`t$=MV$6`;~Jd(tMK&EzVua_^~A6gmnf;)aF}rz!2}re*;H}X#UbRx zQ+?*Jq;GkvKI(NC3!BTR?xBwkoZ}AE%dG0lG``9$eNU({RcE}hvsaudsOnD0AloTB z$wD`Ng~VsD%&@{6rlciKH_mZe6=$1%42#JweBTVesB%_a&E=SCqfYy}o3Y5_Jz9U@ zl@EcAU7MJ|<=S9E9IgD07Jk@`Un9R0-%%ta4;j)W^He*g8qRM#jV?A2I###M46VZ{ zZ2SM&d-M29uBzO7C!Owex;vdYoq;5sIb?*GV8j6uxaf-vGF(*V$>4ZZL_|bi^{PM+ zu3Rt*US&o=aKQ0il#iDHB10x1F*BJ+I_XX)-JPD3yz5zOe|N3gr_L{(2)zGfcmHay z;aSgGd!IU0b?Vfq%IT2R&*03s`=Z^f{)LXmVNFvum}aEDHXl1iifEHli^?nwQ;j)R zzSQ(}o}Qt&$X<(fM#2YaK=s7ZE7tv$1beoDsgO|z-i@Z9=UxD=KvBOkI>D}2qsE}} z>;`>2a9EFo7_FZzzK#PP_4x9-BAa+q(|iC8a|Zw`v&Uz@$(eIZROueDdt2>M7Tdb- zwJV%Ixap_jeG&jz4~A1TxWwr`3AKUEx@`IbMlEi)1$v_}n|#*1{wjyXjZF-p;-_%3 z@z+HSssU6(K3nCr`eFog#j%5VG&VD9+p~w=B-E$T)`j*OD1;iRX{t}uyCimH?o!Mn zphsq4;Th1H*{|sfM+|E>al5o;vWFufNv47`2ES}-^r6jN^4r}A@HZ#eDF(983yYkq z@z`)&^tp@5#*Le%51xo!C?`3D<*(X2W!n%ZGHl62iqXqB$FIk5+;r1TW$m47%lf<4 zmm6>RhCiCa;dz{m)P!vJ@h7Krw@oD+zgR-_e`0DBNfxe8C9KEWLeJFNaL@K~)z|OV zjdo`mdE}5g>ymSu2p`-HJO`D{S%yKjY&Sj~cQg2 zGH3QvB)x&;=J;y#-kpjQZ?;QsT-AqeIPJ7=x#gDfrO$oI!t5YzY6TKUZau$zy)ET% zclCRR4^Cp$Bg;2~GiS5eEi~;BH2Mj&?qsh&-569iJx!A}@WI``-Z>xjO!UCofjxXv zb+#JQ7$B(JTE}(Jbo*_$m+P;)!EO?2w+X241%C}Xd@Cv2B`X*C@X@!RB!Eq(N5n^F z;6FJ7ta0?BL+*R|v=++F+6zWL+LW!GaUvLS-{%DKvD!mQ-^Za>ynpZ3zNa6?WU!vW zDM_TO*+^5GBuc{%%WXP3L}*-rj*MJkx$&p!G2lU=DvKk7${ zkYilVgA6aBim5*B^zK@BSNWya{8D-PGoD_a^W5i@|Mm<2tz38Y^?rA3L0c{GP4GC* zvDw+INe~Ig%VAaoe+fv5Zc-G?V6jQx!|rWz$C`V~6P|cndFvm%yewW~59Ccdj~pw) z94mdQ2{YC7ddH625ZoL_VE$C;q?|D(>nOl*dJVR2*=i4--miT0&p%q8@yutIZ`^QW z%)fYOS;m%g;b*YINX9O;`KnQ!{$$Ts>}JmKQghS6k)A_%@+l{mLk>Bl{Of1_wd}Y5 z0p+;kj;G%t@Y=G?o_4N3y)Kh;Lavs>Xl27ruWTlBcM+-1=bhC>Oow-z7TM19WSc?mw*#i- z%a_};AD5Q@d(r>(Kiy?ry08E6C_cx|nHIqtF5}(N%CA~7W`4!-2Xe&4VC;QsXZhBz zUtj*qQ~pc&u^<0YuYc{G>&gKK9%y$d-##3`j^Zn6&N1a5(on@C{UbB*oty!!m8^wR zJ$}|+Fw}@2z4h!t6+m!vCIKHr^gwb#u=vzhn{C2O^6i~1M!+cseJWFvkH1lnd;QFS zK52jMQ=cz~9d>AW;qzZmuDJS&IQ5+4B`aQkIUn4)7gi0N^-)g!$^v_!+6Ym-hfj*+ zTziez*FslbeP!8y|NYCep7ku>i2cwH{ZKjJp#AOPs`hxARzT$tS8g+P)FkAhC&msm z+JT4p2p3F$=)iLiMmEW6^xDVWapV2v$A0V?W#zt0%71+QPW#$Rr~W|}H$iKA~hRz7rkY+i5Ym+IUP*awI0<#oUMtL06<_oni*Kl`(a z@<(#``jcJ*cfd^_=wVFR?);i5D}Wlrot2CiMmqE2aVgMqX<;_Q=}gnDx7=EO{uh6~ zy!JJ}T+aWA^UIsw{3d@-M-BrypM|K`pPDH1xUvsSwZ+FZkBV@!kIp7`_?D-}dnDt^ zHk0)g`?|Zp31p@$ygXEFWYm9Z;9gr-_d z6es-h^m5kaf22J!1K*h$SZK}b*JSD0rV6Lx9m9cBKa8n>c|^M!Yq)yGsgH0yrIeUd zcP}s`HiAc=y1G2^yeF1_`@$E>xlcT=Y_+Fy&$P^&rwW-oxkolK-&Pw(rfJg+PJNbh z5%{WKJG`^M>+JG}e|TZ}>}Nk){_v0fuzcdLM846Ot4_?09ru^VK7M8S{O7-3p8CUYF2|j)!oISIU0;zN&nUOwe!JCvfB83CfA-&RzkCv+d*#K6sUX z;$CJC@myi2&)4&H-8|}C2(o(N$wOaDiEVaota!}yijj;?FMDeb_;nHM)~+r8`mg_5 z-uC-%^HcxVU3;DHG<@UR*WY-|G36sCeakf~G%9m3Y;5$3B2Bho-@`t+u3NXc9C_4X z2Ha6Dc;mCmy_@c{Q~me(Ly?7}iHARN!3RIR?BIx<>zom)rVs z$;FqJ+iv@2x$vDA`uxB1ZSRa7`u%qM{+7c8$*xz2ZEty7IrqGC%OAb-k9-`T`0yvnK?fh?Uxfi5dLvbAtF6k;XL9ac zHXvAfk;w;EdIPyK%$Z`qsm~m?{^*i`i!Z*oeC(qiEC2kde=c|3byvCfUi+F<8w+A{ z3|uwMWJg?f=C~{illimW+ljMY*J16wa_@5KC71Y_v!^}%X?F1amGZW?{*SUq7mCBv zVi3aRb3&c!bFK_ccEmXF7AONN?<3tKGw|?cfYpm=bb9RSvyGKdHsl_I?tTuOq+}w2 zrkZdI5$72AGCus~!P(ekXvR#_$zbYfdVM0@bnm8e(n%+lm)ln?x88bdIsEX$%Y_&I zQF+W`&hWD~?OG=)QNOGCNN;$;!(^HaW8k2(V-2U5Nj#Di0IY%!GGry%OArzP(xwAbJrBMBf z>-y`iFR%QGSC;R7+;`jAny-~tyy6w*eII#W`TQ3?@4vEZobZdcu79H(&iSC;I#B%&3T z`LYZ@y|`%|ZlK8^17}q-z%Jft6IS9jJL~$U3*J=pf#;rk?kR77``gQ_fA!Vn>Z`7{ zYvmSu$lL{7Q+X7G9|FTQQxkC3zOUW6ZQ=cZ(fd-@0qt+sl)d5C-r%(!{;0#tyWjQh z^2BqWP}bhD*1rZGvBNQyTQ>ZCKcpSeIUX)zrg(Bx#p$cM4I4I;$DaAv^5U1g*tebE zb>^AnAOGX9oCl>2HQk6;PgBl08j zunX&euA#M7zj4ZIndH1yW}nBTMP6fxlbiV7@1YzxB_0pRx?~6;p{F4995>;!Yn-$f z#Ur#L(djdb%jOWyu~nAcbnW;q`|4%og)e+zIpBZ;e8+LoXD=#`I`Z)H6X*X#x%}&w z$Ih?f)eQ+v6sH>e=o3YSD;3$WLD7~y7kUF!4zuf^?waebDKC7%3w@`LMOTvjVgkiVZYA?CNDxf4@DbbIIZr<%KVL zs$COwds(-BZTaGtE-#Ne=cMw(Pdl~T_RY<9Mlc?VNj$vpz$JT+0o!~H(1d_cWDbyw zy+3+0m(B=m+O)}P{qCac%5MGUt#%N&rd)Z&mF1~VduloV73Y_4-ttX9quJJv%-PG* z)s&OG^zP8v6&Dgfq8S^m0RYCN;OBtNyt+Q_)|+oFI#Y1&x#yM}Z@j5ocina6rkiiF zuk3!ToO0r+wodKvagJ(&xp87hy?prH9ADL8ZdJ-4MSml_2gPE}`1H%g|M<$4<$2Hh zujRDUPxD`vUVO>Ler?uIyz(c?nssZUc9D}f=V(QwT+{(xt{h|XOc;g*Vj77sHHWr6 zU%uqa_TGJgpB=m1)}2p%>QnxK=lt`}FIQc6l^@u8esbh`sEfY$WxIUV+@u9QdYtog z@)K*l>c9MJmzSUZsh=(f9(bUw`*)PjT=bc8)X_)z2Z>8Bztl0FE5(g+4=c3IOHD!z zIVP2?QukQA)PA|T)V3Y=M~|HJ#j?%$%f2S}v8Fel@gUQS+vOCedRlFZ_nOI{W2sHH zZ0~h&EnkPnue`(}<7@MjF~*ZQ!BPvo+v^w`f2&~_qvIdIb`np%1Nv- zbHD{r#?2(b;O{Jp0POaWG9X7j?JOFu%F1kSRDB(B=z)io)vH(gMW)9ee}exc`>k(z ztL;c`ET^Axx_zSEHlE56U(MP0slgI>4lS%Tf7RU?u9>B<9$P)c5-O+JwBz2oZEN|y z$A5o0`sky}WtU%89(~eD{uSL@-u#wwg&H|>ugrok^dsQ(DW3$HfWoD<@h1{W!fF~Y21FEeczBZbHGD_ z0TmXeZQ5_>49Ek(o(VbNz-Od7TXV_fmz3wf;Q3bnKEA^~>#VbV-mkvqYCDknrd{a1 zk6o*!r?^vv^$$e`TWhh)M{1L!8uQP-ChDAAmn?jd9gyB|^9^>k^`x?wovqPN;mL7ido8H&!#HeQ+lIP*D3oDuNxo(T<-_7p%b@zRDms3tT z#or6sc^`fBG3EX5e}CDyX=6G2%(MO1vMs6N!~w5~a8Xy}lcQ^ju|{d3b<6DRd#zCIZvNAt`R;dN%WEA_&(1> z{rA`Bq8@$p(dDYEt}4eLe_UC)a-Z_n-+ybl_S$Qse!E4-sNOz@CZ0O_?W*hvA28u} zD=StkA3Ld6_!dMky?nG;o6ccHjz}DcutZc`b18Yi!I%44?xCi@1!4-tNPqmGEn6RTy^}?tzc4FvrOxOZFp2dlIw$gXE z^=Rk)_6yd%mg`%m{6a$;$%n~$FpRd&F)6`7;>_bR2Tml)JxK)Afs%UtWnwU9_BPK4 z&R<#HunvY12I(}Lm`FKvo*lo;_GaC_al4=9zia(n<-h;#ZpdmvTK%vW@ZA~|$$!u$uF5SznO}W*+vUp=T z`NWgU6<1wR&a(^L^=m=DCk$!&e6oulUi>-dC>8+5A+!&HazGAP**vYCP0)=O_ph;^yov&F~=Tb2eGQZ1)HF}W)OF4Bx;7Spm^i) z5Dp?h_!v+Y=&6DC1iFRjz)1H3d&^rdD90atT)F0kYn|vxPkd6@a{rd{!05x6Tvo|c z9o6N*GYfy~j;++5YH>iX%Lo=Z^}6Y({BL~o8_OA|o>4CQ+GXX0V@@cm4qa8Y+x1)i zRW(!Wlc?a@a<1kBY#8%v%7C@wR^t6t!5jFI3r>1Dvuvu@Z~YtJ{CnlGr$5#Y#=rZl z@3w=ez3tv$`ep1yn=)pbO3Jz@bmoqcNMtZQPS|;^4V7J)oq4jaLv^;*=ij!Sm)W-S zEIVjjx%Wyx3(f&zqx9NREpkvV{Mn7I5tv|pufTk5Sk7S%@5N~dZMSQ@zmCb*=BL_X zL^ZL;*1B3=@g-Z9D<-J4uVDHir!ED_SM30S$tk%uPhs0f$0s}fD5&mWeIlAC%~1`E z)G==c^UaXvMQI;e;E@fPzJ@rBjZNmI zcEEAb=PxR2?!3MH;xGO}Ir)S*X!?ye{6=~F;~#HdJ=%2=wqqRCk@GoOTHuq3yd!rm zVkjMmLMFo8J&v?B%s#O$Uv8)SFTT@n`u9t(d0|<#VpX~M>dobU{*ULD6Hhv#+;jI< zKll)VcyoD9`XGxwr^9oBT1Q5@5ED@?vG5U~>&MPK6?uG_aw95l8&@p?pU2dV zS9R4can|_WArAdzyJY**26Nv%_VxPDJp0V@JHP$Ae$e#nA9+ss#b0`L*=!eBw_nv+ zh__r*mK(nWbI4cyldxb@5e?_2%#%0*UY(u&>sMakUzfi8WiR)GrdPh~mF0Oq`nA?xYi%y)$1?Mn{v9X_8DuY7Askb#qQVmYN-_MM^I4@-7B z#%w#~vp=)Z%O`m!w(8$$@s1(JIECF=b>ft3d&RQjuGM*!TExp@XEhY7Jhr{i{Q`GV zuWB?O{63a#kzcav*jC5nHC3C&<8@Ttm;=p68f(oV+b}=DsUO{Jt9JSGn08oxZ5Q+s z42K&r8uo!2FZFoss;iF0=UTFC8gKQH$LHJp+s)^7nGBcDk$laj`AU9`yN=oOX}rv( z<>9q#=ZDp!P$*3+g#?1QxE9%cpZkf zfb@l$;&Tf;R?{X4Fp?d-nDEh8cCEyZu}^vL_@D1Ar=50M`N&5Kr_<>>KUT+1W-2y3gdt;8oBdqR2pAH2Q1?QL%> zU-;q|{5q{`uer9o;SFyn2Ong=EUFj5LEC!j&AcO)v7)_-?je>Resk^WOhm_Si`ya~(KKOz1%JW}YZoB0+`$g2f7V>*Iq$sl%CG(U>&x?>|KnEwHve&i4q8_ovdZsgmZysNRwD*4vDTSu zFn?@T+3d*)x>NpXr<_*);1B-5eoS*= z`Q+bz(ymFo&A+1l?ce&XvXa|bXr)zbj-QgTEl`uTce+{bLH4z5dNoF6dLD78iL>%i zMy3Y_RK2$v2bMm@5QXXkyyoDpyY3-H>q)CO?12aFYhQye@$Hzn@lEw|s!rM@250R@ zwV_mwMCEAl(X>u$J~;K z=1UP0Wg8~JkGKzBb+DiHc=3y0T%PfaXZY#y4}IuE*6*+jO&5<3{1mR{Tp_l4dtX~C zE6#xa0!Xb`LO{@Gdrp-?9lB%Z{pFCu_Ac*x&u7XFH{5JHz_ZHQwHwQyfA}-@^_@NQ ztq#BEAWz>{IOX;3u|6U-CF>9=LW60#2@KA9eHHY5-}AlYH(vi6{)@WDf6wE~HFkZ+ z``-IryBF1QanRIa$LX6Uf6g)ax(C{}S<|iO0M+Bs{YXGJzT8nxIPJLdb3gO5ejg`Y zZ*%d*my{2_|AS@qG4-H{`V~t&{C!^hIR>mvBJMV!#DnQ|)_3{wRqh9DTc@uFR_?p9 zy!@pvFE6rRb{%O4f)`zMQTf|X{%tvG^-=c8H-4Gv^h#c1UC)cmO_9~+8(FQ0`TYPF zJ-l6PPT?{*Q}oL)UEr>pNWSQWFDgI&{O8*Tg?-E4|NY;Wi@)*}zmvNTZoR=P#p@z* z)n&&-pKTR3yTfRX@!Vt%@u*=_Z%x}yooT)Fl1qKtsk2TxyRBPVeDl_Cmi-Q}`#7=f zOyd?$Y!9o^#}k}w+2K+BC9rj3nI7#joG$RN*dY$XV4ExFup7l6JI~;aWy}p*xESo1 zLubkLYc2a{h3IUiE-{e4_Kv&ln~B}s?xVACofSFopnc1}`>Zs(&f;(mNBM?qgI!iy zV5o1f57JO+*aj?mSb{b9#-7l8Oqy65$Kpkc?I3TlpV`^Ab-N#EP?37Avj^Kgam6yb z1f-5hcGWVBNETY;h-KJj>&~@hjG}m*hJIiU*2o>NtJh#=f8QH$_uUuSI%&^uwM!9h zz3mRKlX&&iTy42bnV3NO3Y*(S!Gk*nHt;mhyaOi%MyC`HI_N;ZVd42db-tr?t%MGm{OA0>@lL^+SJj{c>2_pWx}T9-0Q0D+4&zhYt6i2;c5%M-T1!+>1}O3}0}+SAsveeK{@F}io&{dSSe z5<4>}Oq8gDqu9xB->Cy*efTqr6|4jO$mQtDD?D{Y1;PXinN=%okis&Kmn~QrC-~^e zKn@-JF1HKq_p`^1ZL=SOthvLUvuVG=USgN9Y}ss=N$4^UD2!VN#u}3jntWVd1l*C` zO>Kcs^+=9hBeW+nR$XAtbFNvk{G=Z$cca_GKVVF<9il$WuCkK}y6*H2TQBtkD*ZBB zXDanIUVBejieawmCrQYok7A?fv1hF1!n0=>1Ou<$c?V8%GfTZJokWr!tWo@cGv-Nx zoKfgWz0% zf%q$r*KhS|1FY*)v_k7l0vEN9IEbZoXwe1EHsm_v{d_=IOPT31ZI%Jbrd3wob04t( zvht*Jm-}?-yKGGxG4zU~q?~)oPY(6+6BqUrk;Dn$04HH4sFEq97k**JN?VtmE=5GbnI;CSHPc6ecvpG%1;LrTn z)WbvX2~26aKvu1Bs@A>sT3Vj)eYWi}>rPwuecS2lOX5=gQM~DD^X!hL=n8ErMC!c~ zrw(~YlTn)6K*xbi$U}N3(wIW1*wFL~EZvvtgcDA*XE<*0GZ^+AT)EBe`zN4t8PwMc zkJpc0%ArGHEIZpYK*bVL%a}b!#v3|uQ4Ve zwC?S{|9<6&BaX1^mTxX6oOptt5#7xWnpFF!nL7IXIC8q8fcc3BJjB8x%S*g^WViEK zMoQnN5<;3u`nX;vX0RKx8@1@Yy{;&R<8R~%Ks9NF&<*Ky#Ol`tDK3vfIBal2rye=S z$ViMq#;pP~9;~>Uy%IM)v80^Z;pqwY8iTJS!s90-bKuK1;iON+nz^leiZx6hDsy$2 zG&Jm3r1$MU`}HCh1~P3uMtaT(4}I_V_=TL136pUiII$2$>k)D4>kdMnzIE#gzx_kC z%`oH~$m;zMLyhtrByOTY`1pkJ@j+mH=8zdog187j z_`2etj^NByb|Nz#1t8Ot$aJmmTJKfA9>db=78WkYSKT?x0hfAYa3g)B#EwwBnLBe} z&tbBm)7M-&n?e10@b3sGEPNI3I=0-yn{#;#1^|^vYG-n8Z0Z$SU%wg^o!bmx|Fyl; zy1(7#KX$AmqFRJnV{N#~nJXM5xE6+jZP> z>n-JkH}jwt9^ytC|PHc^dlC1_}2SJUxRuLM(FzzBN+H2UU?#y^k@VBpy#o~DCLVv z2OmuGMeUMkftFV1+8vR#<+SaHKCtd*kNVNqs5jgF==4?cGJ6V$&P)#(hOAL|(ubia zLnQEAa~A{)ODTZ+c(9XS$0?`}kS&vvM0T}C80wrQDEdANI{r-Kz6l30!pf~b*|ObK zZ@n$!dY=MFM;|P6mX!c3eDs+Q8(0`+mo3{HHXCbzeE6$rCKkWDLs#!OIguq)J&SDch38Lx}|#eyjmH zAY8F*dAaeX8|_CSE6X9P4)KFs|LUjKtgb~wLXlaMCzd^Put%NwumGImprV!>BY!lF z0c7MGBB>x49AyxF)uDLMn~XQAu+RR{H8hDejl*l_|=zpD*wP}MRX zESNJ+Bn0ncK&gGk;3p|OT}Y>L5KL5di_uH3&R%Ag$gJ2bOIIk|?n_+q%f_Gd2CjC! zP}z?zsPpBJ#O*P*P@nU=y^EDijUIehhj_Q!0$hu!0nVM}#5og_eBF**P_g7cQ@vr6 zG9~vm;c{x}YQkZc{7@QruQR_MnZ(Hr2^gPr`ACkPKHI^#GzYOg$0)oSr@!2ogn*lO* zGTw~X2~+RfH6DM6e>@AzO*v0R+#+eL1J7{bohTQt7%L&pV0FfIENLizfkOeOT4Cj%#)8nY}J2o_LZy19e^5yxD#s zXxBJRoi&X+WHlxP`Y6CNv~<}=8S0S(JuEZ6S-HkZP96MAg3Jyn2T0P@z~?Vb!!uq6 zJ`NmPkV9Z1gS^;4x}NP8*)T~~HQ0$!l5C@5+2MD&>R??>InB-r7;q6Ke;CKh%q5RP zvMtL~{>kFbW%cKK)(r@7}u7Or+tg<^?s&MM?ODi^2U zJ!Wp4I8z}Rhg|u5Ua<|6oGOVOKwRwKfKhWw;Q^U5bB*k(tZ+y#_yrFumkU@ZBM*53XFh|BoD2-`!UJ>T>m`-!`3o40IjwR;u*38&BM9;V?sXDhmue>V4bb{s9;B z6?tQXAO}rn(e|;Y8?3*3z2Eb1sa>n4vo)TnPLH(AuWUml;_Pz_qv>&DJ$S-KmY9{W z4X+P#70iR3sHj2@%(iFG+U*qd)Q@HL*Ydh}U)!DdAWLmAXK_jTz$c#6R0hte9zR#9 z3lpUW3I1$z4+l#65+sO|WF7!UO z*U6dtltX8G+8c*lV3mW0kG$%U!O-`1V%-lp;Gqx7VRsPx6Zp&@K?8~B>SB7l&^=BV zHMfV@#y91w5bZSBRkTnEY%Yas4iqEoYXXz|$-Dy8c<9uF&9-b;7~DCxn{g;0wGP)j zz^DA!GNuKZAU_R^bmIEni#FrDI16nwY)|2@J+DwuH*`x0oYd$;QG;cOmQ7j|=08NR zGZ}iQy0-0p7Gnr&yNWQWqTCkJl!Y}cjn%>ohR=~LORx_)cuDIF8hGGWWHerth*SMyCsq<$3~G^u z*{LKRr4NLQ?H7UT?E-h5ZPH!s{mB9Cv0X4k)Hn}Jt&c%AbtL2hgwxhwC^?{0^p4@c zX~byCyo9pP^T9FSuQB)DTs{m_Hhj77xwON|Z%p~oUCzOsoOAlrm|tsNj>GPua-`O& zEiT)U;gOC^pD4p;4si6sWV~d!GX`7blsdeg z`Q)Ez!ttdAPLf0kiD{Gyw0dD8O-RJh57^)y?R4zD;det95Br8Hqry7o3k|NoC=+PO z(eOn?EQbk}G(Iq*N<|Ypo2Qan$Bf0{i2eG{E~M5Ux4g3%V8o&D37Y%zP>ee{)D^7v$O#$|uDXE|e#DN{IW?ejvND^khVQ&9pG5kJN$CUf*yc-7PTJhIpF z95Ta!Q#GsUz+e0&hh4F`;g=2W9E+dcag`w3km)OA)Kwp8X6gs5{P3tp$3}hF z6^Botn}W7kDgfRlCuuRIAm^A z8Iv7Z&P2HmUOd@^hYNE0d3Mz_;*-G|arlVOK1Kl+A6Q~#@0)zWfk757%hKT|MmAc` zm1TJSeQ97g`Z(7K%+9do-JmQ%6F%LK$j>~~Fb*0*o#G4+9705l3-#?@3$@O#;R{#I zJ3bhYHnuQzmBS}8a%!0?B2M`SyW;Q!KD@&+u;_5dfd)+K2Tn;zr!=<(Qp?C3d_(Lg z(lNOz$w5a|fhRt)4hKPEj~VO788ybM3qEXc$)|%Sz1;?z7zfSsweiU}*$AM|pn0~; z+GC`;lh?ji4DxI^tNH} zZKpppHHIacnPc64#0%x3Ci;xcvg*q^IkK%E0~lhpVe$n(S9vJcrz8J0a zF=7@OmMObzk=wns3`XzVX45=Wm*bfi7>6E7ks*)gHhAR89O4d};)s+Kp73Qk#vV0A zwV>6H+fYYDg>Kvkf=7xWb@q+vC~D~W0-s@^XWqhrQzj!I+bAT)7D*sdk3Gv2JL7v` z$NhFU&~0VeUVE0^AK;`HDd?fk;ZwGZm!F1Ry_$GTo;k{KXZS|Lz#hF0G`89;?ES(! zyC83i-KBNq-pkAGnpRTekZj9x#vtRT$3D{wkmln-@dmFLMQyQXfGx38pj)?Zu!m1> zviU#I4npFdGf>f!MS7M^o!f}bfRRl^*#Noq&1@JQ)2ZQ>{J;bEm3ubcT9&U|>Ccke zvEK^2;i>)X)()bEU?J6VWLS9lcL}SIzE-E1;H~rvb=nl%XX}jC`4!6+d9VAD>|uA< zQ<`X%TODn(2AqArtF@6}$lNo<91S>KN1+?*=}yFZ?YX=4o6A17?(4oWZ3hDhVd%Nf zK0ku78nSI3w%G+{QgZ#+8!&_l)q#f|KcQz`seWAyykhxY_N~#JO2_K9ZbD5$r1J&XTRxM}1%`$kI7y5|G99dSK9Aqhb_=X;TWX4kBiW% z@a-K#yjhrhPnXN9vZI*&k$*S4Tkh7f)*fc53-9i`e}~-&?%&I*gHN@evo0SYzdef0 zkZ+MP(Z-0K=nmg8({r6kx-|c^UYVKHV zE94s@Up=%K>H|4%{x!~fHf$;z@7>~$Lb%rsKve&}`|KTO6Xw035PysM2ilf&wtilM z+4VT??0uJAthvo@u&GBm++!D`?qOe@>}>~6(R@`%ZYV?S$9a`#{G`%k6nx3v*7@@-S@+tv|NSpHsTo?V#1>{Z6}3R(HQHi*~c^ z&{`|vK7a7+!>s0^h1KRrS}aM`8W-Njcn*KbOUnW)RPH75(Vj?N&OU&nOh@9hAEi>jOc-K>+N^i zPTVHUknBV~utuuON#&ynuQ;0PrnCemJFof*iWqy5OwbA&{6hqsxgOcHk<}YmpM2y~ z+zxxh#ZBL|hYpHM{8|`Rc**oyc@?7*BWjYpNc9r4-Sld15cvfm?g0sAR84NT2=y^0 z35mo++9C_k&Q7>RyDzr0PwUH-*Z!5CampJ+<bDKB4nEdz*es;|)lLDaX{zkRPRs3_W>W-X z@Mv4uw#;)9E-Z75O}*EvJRZn9ZCtks7X+9_s{`&u_P|Qg9*QSaciU~Do;R#RN1bspz3yZU_p6YPrdW(KVT5vvi~#hSV^aozFh!J9e=U$ge^ z_^O>Ggp1G``Kvlzi#hx8d8{p3obgL0%^+t>_<5f>2X2d8VvlTy`t`c*R@U6PzU;hz zoq2|JQAt?$725JNo~YH=De93=f3}`E-eg`2e;rJhTTOm7biEIT8~sH#y*~wD{dBzH zmgqv++BC*nZr5|xOo%Y|wAWo4Nle7vY)aAjU9Gl6>AW5%qc@u`BUJ6<5!riqiq~L^ z49m8&)l%7b=Z^};XJB3QylLa6^19dmN;&v|Rpm%~CgTo0j>kC1b^1HAMvg0MMib)o zuG?%F+SsTfxV7nMb7ojF#K`MpRdOhDO{`l&x@_aoh3Wbg+`aeS>j#AQ-gR#|&K}aO zMegv-so7`OrrPt-I_1LK2Jw?nx0ifhXL zs}AsO!3{TEUsl+^6CQJ-Z+wT0kqh47iFu}qu`NcgO35`;p$M3WW-o>AJ>`##ox)^A z`q-ockR%{!A)omCjc4_1!?*ixdz2MR4>hYr zDNv0G2`vV%4OAU-o{y0XUVYEiIAiW`JFfYHKzYL7P#C=Cc$j9CrTJgFWOn{@Dc=fN zmDJ(?C+UWDM}+>+N;??&b~R@3TT{ELO!b?l2X5}sUhHqzDB|V+R*XUGKI^fn)sB1* ze_j_eHJj@{``YLC$itbTasHux+4s~Z`-emN5Mpxu<60g9Nrh^gqxqk%S?tlmAG!{X z^cb7tPdvW7=p`>MS6_8i`Rr#uTlPP|cGC70p0Ijd)!4a)E^WM19{ho&4p6>s)Io~F zey8RKuTEYw5TmS_kDO6Qj4_Xh3Uy{??VW4Osi&PNL~1B;M@BWep!jtx1yaKlBfYt8ns8*skl{Fm8H zD)04!!8g3&*UAky+)zIJ;SZO6_OS=O8#r=PXXsdiE9NuTGCO8Nreh-?gRLJiKVtEZ zJV7@sBlVz9NnliJK1dQ4-?%h$u;&3Fuv)K+lt1|;FVy-(fj6sGQ2!+Fau1uPR4_<- zAze;}Bu*1yH9~)*z=3_D2iLp8KAUmY(nk(sne{xlWkLQlt_Ne%3g@401LG5SKF2AizMh%NJ;jk@@z1l#4{tw?sTlaw z%dbX!Xyc`Gdi}!LM!U{opR3o$EQ3b;V2L_(W@^fpaSO?Pez?NE@Z5uiU(=HLvOmiW zZvmWH!86b=2nH>W-RewZQJh-Lic1sTHaN%5S!e>Zr%jspO7Om~V>V6}-U37D`0I|r{!pbp|E|P8)EKQVtoPz4 zp8nzHoEJaOo^vmhvyacUJ4X!$N52r~LcXbZZ1fAo&-cZ;)6YNS5jS$?=xurJbH-%o zvEu1%3Et97uhq>xBh0Hc_D6b$aIg@e{%kpWXzj;8_7~+j&wjR@rLCXyYjJtUA9BQ{ zooRd5Mg3Yv)q&B{bo)PbzQSV!uZ`$Xqgn+AqpXpI95u{4eMNW84cC<4`t9E;8#Zhx zANbJw-G0(+#%5R8*^i2JXYY$X_nC6T_1Blf4?n#8!mEGY!S8#|`^yu4;0fjA zlTP+ChWcthKBSW)IBRK@J7zCzc%n|BRi|%sx;Il??G}8tR6uS_PPQ#1lNbz>Im5#l zCxG+<>T7ly1<_-l>cP+p6LP%Pc61tZuyg1Ae(evynd;2IJh@K`foq@Rkd;i$@ge#W zKNM4#1fLNVuWKYAR$cemMT+)+=31DRD!r$22onLE{=>+Cs|EBmEq&V_u$f|s7# zJi9Q|A=z_S(VF`>P^vYUZM&{(UdRF2v*kG@(|WA1f* zjbEQ=wjA4HFis@TCg-di#P)t+)Ox>cq>-FkkM;L%1!xSa{eHV>oLt0;51VuM26M_k zl@~iboYHB;VMCWc+mMON^y#*dH1;FF;B)a3C=%tSaIg{Go*_>Wo8XAKeAkM=_L+2eLGxPQClfgf%dHRdQ5 ziwHt)!>IG))Z>MRiXm89jTI%gJlF}2xs0V#2v=7=-Q9cRM*G2t{X6E^W6D>)^5t^I z>8F=tk2$tnbIrAOfMq|zAjslkWWzYZGGrY5WT!V05osk?lh{V;hlDAMBZA7s1s9c2 zjH4zyXPib{^A4O8Es{)#EMJzTFVu#FVzfW~++4qO(NBW++RJ_x+}LVLb%N&E4pUn) zcUmb~1>_u(1r(jW$7DN0&Nj(vTkThA8#eK9&D)#syTR4jr;Ap!XB!~uL6a%mPlgylOYhk zY&-lKh6|M_bor-j#AUx^#d&@Swv*em>0bMF&JL^JUT<^g0^fc2Uuoa5$1gg3J&1x8 zZY^*jkC$!kh4S@h@XxDPwR=qi)OA$GhVFe0dcdy7*s$?lKTz7kj$r*(1a^(he)?6Q zu5&URHI0T~_E@(wD*(4ZNWbfjz3x^}Y+$p0zRcLBYMmMzxclq?Z-ZUTuDUf}`b4~R z&n5PR`4#>;v?^QintRm&L)7H?8K{{;?@@u(GU|=Z_+TAghww+dWM%7ZircY$r~eXA z6Q=a~z_V=GQu|fivJ^nA!7#n;8RlNRPUgbwf_lbPC7dRxn~QP%yszz63ifrC)*t_c zS)#}y)wh?RI+dcg<+v;lHD_y;Yl5CH$M}#8PA#wygC9G+IQk}Aa2s0>s0pHrdE$Kl z6d(5dI@qgNYpg^{UK8r}3DKfQQ+#AnY{Ugm;;4~$tLkXIZ+6(PBeh=by<%^7>8nVw z>6Qz3+t+vptvblxTa286!>3v#E3ca5(20l&@#&JFT%)iG^n0`f~};U_&S7!TN_A z7rYPHgA|w8Pny@>b+>PbRvol|Ibi>N&DqyM?TV|iAf%TWyUX8+h3)LD{@d**@cLQ2 z@*jH0fn{I2p$Sy`o-WRdxbM``4wCj+S#G^;jo*vP>pyH&+>6I+QytVx zO<9*rn;I*=Z&$yYT?o2&x#gQ{{1-tw*n8Ar2ipTi_pEcfD|!F_8-q4)E0!-Wx9BPC z_JLT5HYXXSf6T{ zZM|m<54U#3Kb%_ zI*(1j;w5{QZ`|^Ya{1+#mvhcJr<`!yiRF^ZFDd7I&pGAJJMJi-vy0vjI^-Zfh$44= zSzBK0%BKo?zpR0YG3gkP7?DIou05EjKllclknn{yN(uImeQ8de0NGl$l`F5lvb^di zUsZ0p=_dOc@1k<{nP>a$7I<|cR?C4!5;cUR%&}ge5B`W#T|<4TmP|aBN1&uYEn=Nr z%H?EPAz(+>IAxIJzA1>cH)DlsgniJoZaWhDw5p$}>bp`+Kx@tn9ewkfFlEdBdGf=I zt0UDLSNE-1xBebK>#?`huTu0q{HXp>eJN)WM`K{6$G~V^x(%ue&3_p*KRCF z9J+s5Zg12F^gXGXZiAxhJp=`|g_+!|GxRH0*tW+% zv_TMoyYhAtavpA;J=mjk)t{%M=j%DLE?KRQmu=WN#}V^4ozzLEfe)19jy~SE5ksb6R8-Vm3A~FO!8#sMLwUj&$50QFqoAd<7P^1{mI>OWy&Pwp zNC-b9=<31HV^hxomE?t*&zwFy#CmVj#5*fTF_dg;73K65(0rz6ImaW*ua;@1@(Gi$ z@lr&91Y(P?vR^;_Nct*_t7dNluvfdd)c6WAj2g29*jjLY`S zhfJUOvaERNl~Whl>T8|crVdE5A9)@QyKj$c9>t)0Imr$mHA!zAlIx%BYWPC&<(x&V zQA~+m5FOa+QV4xj`NlW>o_%;)T#m3CVBWRvF25gAltpnvq!LKOBPn*vA&m<#lzoMx3+H5hg9u1mMmUUUiGSlsgl~-lCpmTSGYK*~2{=HKt_EHS7rH48c%MPYJX#FRP-W{HGrrc7QXp$t zg)2PcWyTRF&QWqx!MU&M$bvV#jQX+G5??aPrI^)voO z<%+Lg;ZFZ0mtB{p9krh=cWYoJYA4*cS@wZDPqL5Kk`HV>6KJ+S@~hf0pERtjZ-Fqo zCDGUPtB*da{LNqfO}Tg7rgHQt$CLvPIur$fpzsra{fTnuL5G%u?OLtNn-x6 z#nVdsQ=eO4f?Z5R`-_4ihc)oIN5-#yicfZ$V$?DY-5u38B`e6kJnm}Cs@G%&^1##U zior&FA1izI!G%pa99hQid;=y!1#feZ@!8Jn0FMXNg<>E?rgsig`Z#p@%!f@q4I72# zExIrnOAJX>OKwwR@p>zXxZ$H$eCBby+2qGQlB*FM@s&@%D2>+P;KHpQ-rOV0pJO~< zbz+yQwvdi5kbxzRSl0(*NHtI$uAWPF*)m3)*)E+1F8A_DS0hfZW4|5*B7v%*aw&Aw z;OcWZ(2RXfg0mePDM zRLroG)JuzV7-v}QVrsiSF#K_8gz6=BK*#DK>Zm7nyhCl0UFtijEwhIvpN zwNa~jw;8eefjc8y9uH>hCYh{JVxFSFV$YFYItNbKA$eXx+2{G-nD5u+K$h0O<^o0E z4?{p~VCGeZU-%w_uewH^`v@|RbkrP&EeEp|l8v|=BfH|VE$dkpHsi94udkuUWL)n{ zx>m!XRnne&0GO1VIaCH9=4LrR-lF>7^5tzVyYvp;cEq!cR2Tt*L4qL!a z?>XeOCL49Qp)N+)Twui8C-h#kp)C zF8qMYdO`*9h5=oDwn=W_abGmIy6@WDGE#ZN{gcEoHth8nWOPC9nwp^?>hZ3ZSQal@E~9eg~z zn2Lf;m5e!HhN)cX~`(;j`Z?;-n^kA3W8b~5Av z|An?52JV+q)Uia|Fg9w4dUO7esXzLN>&H!PnriTdB-Jc@+CnMv5}R#PQO(bRlLGmw z4yXFuu=m)Ed2rcSbe%yfRdSz6HZ|pLTdaNkPQ&Y*5r_J^3tDMaa zrwkeA09%k896EmbR>wfn<{pfC&!0$gJ@Vs%2EFfvRhx$kZ}5SeDeKEo&#9$lz!VdL_T^e=q@uDdvz@B4dr*!86#E zSB(+U3mv&~9BBGnW$<)MhE1Q{^K3B{f$TBT-Oqtj250hK7EXV(o*27&d>P;TF`-Qz zv*vdj8DXPzh02%pMAr_QGOqb68Ju96--OIf4j&0h4zBndFBz!ENi{>29hzlgvn|W` zowO>wUwT*8XdDW&14UU=2ItAxGv3x4~OohSLc(Pq`&VjBV$><|) zIde0R*A~5dh^sJC#N5kit>;AVVja7XO>y`u^-K)ha%8*%t8JcKIh{f>xrFa|Wy^l) zYT)Q)>v1iCoHT*D21kx}m@V)*`8cjWh|#99w|T@wN|@%x0QgVzecH*|5J}q%R24az&8|DpBUhH&uK|4) zbW>Ts79r}@GHQ%D3Jz?MkE+25L*Bq=Ezp6fuXS6&e6JQEL)lSC==l1c1oT`?(d&w9 zL+4`eOh!Pq5g?x$J%yp~s?SN_Q{cXT1E<7ix+lHshx3aLI>U^R?9r zJMq<@sfTGESwn#vo(!3?37;GJrmze&`>M<_X+S#CjL$CY*+wnBO*%GuVc{T7diH0# zeBkLTxT)a9(Hpbg%Q{80ph_hXLfBr{fhP!5fnx z3s!6(;w%N)a9|KSSxs)(w1mevOr*B32EVh1SSuI~y5!TJc%trLjNDOSSe&I|!yXop z!7*sTJ8+H;?>rY+l_p&O55Mec^pf-V@X4R64_PIbbCEicY`uyx(pOqYqS3 ziz1>ieNls0hzAk%4Y(W^_yIXc&Np)N^^#-q5Qd;(IM`qio)WSTnZ98-aB7B%=!vA~ zB$CyL%X*drH7xPD#ivk~{3p){W%@$Z2v2nl2cewSs1g}nFk-L?lN+_vzO7)`iC0YK zg9977_cd7Eq`!i5O<9(^QnbE?gr2}j1TysI%ziil;KPoNpI&w_vPtJpdT!w8<;%SN zRygAfib~&NF~CKSof@#u0ygngko$F!E*4! zF(AVSS7?I`2G2A)sT7{XH;6;fkhq73F2DYA`pknb&gNv~%g zvd8&-oMu9uZ@lQsmY2+9q~D`Ow|mcRr(LM#Z)&p3DOntFXP^9PV5WT4?YO+i*enZ! zPR=}tW-ES=5C1iSg=j20to~MK=8>!hZ)mYhe9bRgZB3k+7z5{BO)T3a=;)d z*OX;p!XM~Z4l^^12fjKQ>%x+;2{VWTvB;+E10u-v^_+0R^HrTNz23Mua1vml2B|O^ z+lUqlHXk^D)p*nU8wEwIpdcgDlrLd*W4lfEET_xAei@P8>vr!v%WSyXF9L^)U=0dC z`2@iRW6cMoO#?XUVXKCnc+*EYvC~`pXFm6t^5_#D?H1j-UO)AWg9OMc7&Yg}vi#E3 zz&6ol-F;fvpH{|%QHVFsnjaG`T%ZreQ;HksS1ao;he@ z^?<&@cB$Ky82BM%lZ~GJS$2O)Fyn*3Ca1j~yijezc@6%kN)Vy+3sDwO1imllX&ZsfrhQDCFK;2k_<5SQ9GR+?pt@+i>MYOr}} za=dYzBP}XHvdoHLM4Atpgv6(Q)HrYgfV0;{%AYW`a^N$4pJ;^lH=bK6OmfcHM`s^Q z)#kV5zxUp9`WdH{m%sdFex^e=Je^iSpP_4c5_#ql86T&2I%RRJ(D*hH~;LCzp?YmidfVIpi9iMvp(>&`;pU#%) zJNr?Nd9fZSGHYPq4eN+UE;afV6XtPEja$V5s69Eb3t}H2^k^O3ak)KC1iy#1tfp0Y zHEi(}L}{EWYX;WV}VfIzN_#~qt` zv&$eK4tg_r%RU);Jbtt51Dv);KL2^F!4%7$-}#ILd;L`1Ld4&-{s2U&)Fz? ze&GxMUhY_P$M{aOit{zm2;o%DDOonPT#pp}cbgV~Dh_qTX9`e{6BdKs&h{0TjpNQc z@3h<2-{JScxNH4-+Ync9=CV-dQctcan?lJoitmEh!hv<(ijj?2diiP9rWJdMJ$r4- z)~)5Hn{O)X*Wcxj6KGq{N=MktT*v``&e;OwuLT;eZAfy>BdjU#$e!~fr&zrLx*PFU ztN$A}-%wT^dZ<0uZ*PCXcYB#KzhvSwpJePApX{x6{P=Rc_~^k%&vNzaB~<;J?BM%$ zdl2#wM?A_NAiT6}x94Mxc23mR=fY0D+_!uIinUdMjwGw_DV8Q1c5Lcv+~OsR{ZSga zJM=*Z#=}mvac?oy0cX#JJ#h~2v6@FdYopg7$4%wv^EiRij227mr`hY)tt;#8LEwiT zcBnm6crX8|-RGYi^l;X(w=u%lAX}F)oC<73N!C!+pMZhhgPfRnb&AR;Db0-`(k^f%Thbrf1j;~I(Smk zQZ?;vNw#j;VVFJb*?)VKO?JXT2l}&XgPFVyW79#;u8f69_1}tdX-wLd?Y{dSexpz( z$}6*la->GVn8seL^LxeT7|FfOqdDW$Qz;+nzzeUHyN7<&1Tqer90Txw<_lJfB> zzQ*W=TSp(ex_rdWbo}OT|G(uq&w7p@aQww5K3*Q9uZ-;Bm@{V&{1r8hR!5b|lla@T z$>w+iJ&>nns3l(1T9}!svE|A6sKMZRFrxm>d-A#Er_TSWvUcM}m)lo$V8yA{>NLXM zmveyipu8}U<7%yvDVunDII^B>O25cz*Y#w2=F$f~@WHa#4qk8j=56JetjE}Mmd-oxymHl5SCub(?hECFlTNUM zj~z2FtLR$m_Yl-U-+&=7yitk5%Ah}524II1ykVpMJ<6@O+)^I<*vFQqJmo3nOJDj@ zx%TSo%2BJ2v?r5W{Sd{gHmoW^`9LA#y&e&ORVq`ngNX(|+`6e#Y##B>Vm++ZALNz0GM=(`y!aEiDdaUVwM#9ce{`+UY zRG$0e&n}1BLHA{sT~@C6+LdMXF-Q6JeoTLxK#}^MvJ&_FN*Kz59#mA??wUt1!TCP7VvrDi&9=qx=pYiK* zi5tIhQ@Q7!du>chT1^6IWQ!N?UT(kR&T_)>$CX14JKX2ni**W-7|w4iFdmaIDqmxf z;A7%6od)a8i%7CW`D9nia#)6C=BQZBujSgXVUyo4YKI-%?zvRo9t}|~_2@h9=7+Qy zl8}AKnORWTIpZX``R5%tDM+A9h%8^0r7zS*2}eL>$XQ0tq)cV2Hm&4(CeA)9SC&8h zlRqtMZeLT*I_s?Rn%Det`AK`2qE7qk^rWxUQ#?6;_Gek8NEcRZuFnAY=!MTYq|*eq z+O}-oTn;<@u=46xzq(v^-Sy?gFL`l!$xB{RUi5+&m19phHom%0OrPIZEXXE$@)G9| z%~-U~JV9V4!1BT;x!QH6Z2jHq%W0>dUi9_it+(D4SC5)7w%`)vtr5r~Kek?7-tOF2C{j-dO(OAOEqu=C!|6 zp74E7@P~|&4yvK$|t1mjm;%Ll+(7Srw!WY}u&^KOxV|mHTUs4XY4WSN{ zUh#@ol=r>wedUAi|6n-m)w4)syQkT3gX9q9okd=v@}&fLQ@WQiIofgap^ z%gx^`@BYxc%em*C>kkIK^wLYq&;0by*asdvD`BrsymuirqP_@R*p(~GDK}>AMj8fV z!p(@nFwW}KJ4rjlO}1hG#NYfyxz|3yUw{4e<bh9G$09p>v$cHrOBatREr=n< zLDbm&?a)-x`n&G6GfI1uMSIvJ*E#ZaqrSHH*;hjsUvgzRVE>!^wWf}M+A_yfIo{J! z>X>X`!{}g`?jvgO_4?o$q=vCPJGSpAci*$M?6c2OKcLf`G9JAq`hdP^<7WGCb-7{o z8c3?-Si_0aTYe$)IO^-wa)W<}eU3+_hic2#ZDrdQJ0rMav5%?ErU7GK6*1Z7It-nC z$T3|5mF(D%<$YkG11AOajbQrTKcx#hG}9U}CCQr^i2#T`u(V+>*>iFE%x6DS{_KDK zSvh3YA?5ck`2BMA)mNAIy#GDr*MH;J%d_n%)KC2WCzh?-whlQm@08rvgP!v?e(N>zAXEe$=A)y3FNCqU#;>6k($=HD34`YK_@0y&$vS53k z^Mb&(gu#F?HbyoWgLjPu&)ADdLVz&Y0_B`0Xf#nX(yLRaPgiw+_y5-jzkNOPzg=B* z>Qr^#zTvyy{qEK3z=7|JS6o%z@|L&Q3CO1MzW2V@57fW?yZ?82-5Xz5{@bhGTF!jJ z>E-^N_6s`|#msSF^Ed)cDolw@g9D05rwzq@Gl61=jxKEFI3{n|w57b_<*z7T{NfkO zo8R(Z%lh>PmKXini^}DfUta#{)Blg%>vS;RUF6>8ps@fC{!m7KSHhSLv(3@$Zh4XU zB_}&x8-RSD^PK0DzyHK1${+vXJIa}7o>5-)npfJ+{mSyqZ+^3^T5WInwqFXiT;;FS zl;#A#LxIE51f~0GIy;!GaUqiN6hk`aU;{hBjT<(VCqC(XJ6XM;Ty*h8<$wS4XUpRr z_qg)f*S@xV@RASu{Q)=-`Fd{QAQ*A2$Yu@YrkKcCIRR@Wx>B88Q4Ii8T&p377xu=@ zUyj~pS1EttIX`cxeah=!|N3&;X{VJ}zWSBrjc85Kl{owuods9-N=XkTO6_B52%%_ab#0Z~mSt}+3~ z6$nh$L1w{r5Upaj6mT8kDhsz!9f}zbAG%kru&=%Cge3YEaa*4fX%fQ+O1UYSu5ZW~ z+o_5qIf_;Kit7@<)w_MmDmx*0sNjV^`IR+nQDMO}5JN0|&Qd zGgKvWMnfD`27zOwckj9o-T~QAW%z^*_iZj+W*0wj?Z^6?8GXHVny!(dV;tEO2yKs$ zf~dX1REL7vH>CMP{6FdWpb<~B6d-0Yw< zpIvro_3X!-UCuc3%3PAiCps6~+?C=}8GG^e#FGj!py>FHOWGAVsSFbLM7cI6Q z6#QcO%x6ARaMkA66OQw%nK;0A7o6Kb7`ZsH?j<9p%PA+RVAK6(kY{{g&w4a!kyw3j zHF)j1wdK0&uCw{_SN_t_OaA;4pG)VTe}37|ZozE#Idz=Im*a|8abS}!t^K&Czu zuU_Uv8&eIU(ejgZV*nqSls9u?pK<>d+EtgZ)yXUR6PDRHshK0Q=Ts)X@{+poNKl@N z4Lx&>US=EY_&OA+W`z5>4w4r{Y{OD@b5-n41d^Y=nw!hd^*V7DL$9z)s#le_z2j}=iRb@l`R~8;-^(Ef9#W38g9o06 z)SWP>w~DE(avSp4PO3W3QYIovstNzLS^>9F+haS{<(B)hrAy0=H{MwO_@X~4=RN)j z<+p$Dx63Ifp5h0VnX4Uj5_x{}j-MHawDQiYndagUK>bkHsvcvCvBlWq=H9Pf^|kW( z&wkFnc08nf={LVr9(DSo{LSWmj~RS3UzWv-TCre68(=_7?^~mQ?b2L3p z{O)~lvt6=Y={F!=@~0mtC!Bh`U-A3;H@{xadem8V^XM|3xMnWrNDIY~N_jyq*=-q^ z3=*?hT;h-oSjknuYY(vFx%k}|m-C-+e!0u;VZh@o9{(ec=gwa9MRCC0@nlXIrwVtH z*hh0GSIIIb+%m6Z)yg~h;O5kuZoH|SX1|I()b0J^s{rdGje{k;%^piA*Cj)A= zbB$QA35WLo$0hFzGIbk{tTZ{}g;Dwg^dXz$0T2$M<3L0^Y_jO2pbr#>}P4+++31ohw|5B*}2;pPI%-j{RqwhfKe}mn+hndz-y%CEgGZ`@3^UKvah** z=BIz!4gdSI|57ganWvWj{OkY4ZdkseARxDw%zYdL4?ace|dS{|Mk3b!P74An-~3O+Thh+o-K+a8=_=c zcIc-H?3oW3`Ma$;Nrxuz_8$kgrAwBU?|%Ec_S~i=<=M~vg>vJqHM?)p zBZHrCAAkJuefz5Vx8C|&_7%fQyV_cB4wtXEay;qgsR75I4xW=cxA|h! zoLdN6uQ=KM%9UR&FL>b#%DdnFr{$=ljxNU@cdVa$+_Parx%%3x?boLDQ6kx2a_++z zTY;cg^3b`DDTU8=oit^eWbui^^b714OqlDhe)X%$IW|{*@<0AWdBdCDP%e7cMfNpb zy@?h6QykD?Zco|Nuep44E)O9iMB9Ys!R`$vy9+;+e#Y&M>{mdHh_xL$lgt~hWiz&F z^KnCP15f#dj&}Kt`uW?68!>RAtkr|QL1r5Vd^GH&qRT0K_g+66H~Z$B(X;;H$`9E7 z8$+lPhi9G)N}p@=5pnuaz!-28GB(Q^qduZ>)ePj1S~}I>fq#zRvL)ZX5zN6tM)%}4 zRm-kn5Jn8LtKI6oz2YQ-u@+Gds3c@VO ze$Dm4a^Zy+mK*IC1z-Kz*UCZm$?yGklO}e~HG1SDf7CUFX6$qm`88k_x_nG0ZsDB5 z7UGq?`r#L8`y8-O`Osf|sJ!m=uPfjF=C|zz@oUQRWy{OkFMPXS@xVm&BHx*$C*s1P z#&F--gxqLk5TEd~fWe9RV0B`Ae{khB0e!1p7pF}l|TH$Kd>9Df3z&Kmu_Bn?RDiF-}q)Z`WU-8+^%Z27~)c#90RsF z3i_L&Y*p|S7r-dFPgw^(TenA9e#rBA&wHMIt-Gka`K@oWd$b;3KK8MXl{Jgkv`h3Y zc*nsIEso+zjo5}qWz*4$617?))MJqiwc-H-Svsrn74-U5>&rFQUh5}#zxmeRET6V} z`kwg2^ZjHN{aUk`1sCi)b1NLDaZ?MQ)2)IzNqghMX`KH5#Hv213WUz{b4D5q*q&G>)N>kH$@XiypR^0SWhz=CkHbF)f7& z|0&6n(23Ism@6RkbJ@f(pPeJ3{^!)CYu+Y|Tc_ib-b5Tc4m$YY^6`&--0z2Y;R|0_ zjyd}1@)v*c7v-{lyv%-8bfjVIz@cJ3bxrm?$$DW`=R92}g*nv|JxoHLAec^hgL5oH zKXH%Ksb`;B{^Xq(*)ukFl%M;#pYwzHd*1V&^4;%z*Y3SJDDKe$*WlmLXPacz3D~LB zK(6>h8+!=|qiot%Dg{Pu}s4ci4@~8~j&N?Z6FZ z_^CL5Z9twXDHU9#!Lw0X$^J>ryc>$b$nSW&$86Uwe?t4qUi$L#idVg&ob{N;_%EX_ zy67VR`p%u@tGfEO^$ZYnva5|+#eEFmbydnI`w5RauLp12LRj;~4hM5?iCyh`@vpzQ zy!a(AE>HT=C)rolUn{SD&FjhuCmzq6+TlAE@F0H9XG+)k8Nl##!=}tODlg83Mb%ez zX9u=Iuw5QvKODI9Lzmjur7QeV5SP67lJey*Ur|2#k-se`pK-Ep-(8N?*Qv!d6~}c3 zw(V1!Bl3cKE6N)Rjde37A;(Gb{g(d;k2s;c=Uwl1-gD16*MHe~-SyX%Ywg#u3+>rv z5!)iGp(JvAg_BMg=}}jIq}r$|PVEf;VP)~RRBAlwe^}n^hpQcn?B@BkYgXGmLT0gG zm`^$&Qg*ewQSUR(F{2%miZsl+4oeNG12NY>5VY68H3Gr3ieJd;V9!3@oCvO4x7x14<762xy(OcTeKfV0346w9%s_UI0a1}5BU>y_VF!w0%3d2ZBxd1u6{ zD=y*j5R!XWj6!7{Omnt%;si&Waw>l~jYTATgB^XNZ7d+bpQoiS`M{3SGH^tnx?@Z) zEbz9n@3#m2;gj{JKJ{t8Ob+$ohaBO$?*67q346!kilkExxi)jS=LG1iiSJuWHba(U z*3-@N#{uNXV~#8rU-T|}7S&tba^mqP`AJiI4v&0Q%U|^vBjaR4B2AW~)fww*fK2Ig zF*yKNO%AJVdroyZ`h=s)n_uzf^0HUF%uT1Cdb-~`)be-jgunD7xAdv*u3RbUoR6@X z3o?powz#xC8@6|Rt%AOO?4y5Mjym$l@~(Hi%btsLi=B|ylh!F;4diGW+c~!7I_#Tf z^U`oTj~XdyCkQ>RxGuH(h}ZU}w$F#{ZYIXB6o8to~h z^H|$yY$2Bh5m!?TLbgK|fyvlDPk6-f<-PBIZ@~{D*4q_6{J7wVBaiS840$K(tnx)8 z^Fp878H_Q*x;D(@_&aAM9(ginlOX`eE8d44aaj5NxBh-vedrpWGdJCEV>!$oLW*Al z#hf*K^Y`Sq5EWWe_N1>F(l0Ij0Bye5T!E?GbvpS-CpU$XU3%2cR~0^92J$o$*xT7@ zFJ+BC4%n+#tt<=eigi4zE3;;KFUjYH{jhxW!$}c-jIm@h+8%E!e(5<%UBig zlPcr=D3fe}3pdKv#*Xle$DhG2+xkH6=tCQSaVt-?!G$6{TYVp;b65f_AHAlqA{#nlPM{cxXm%oW{jrmg*$==35yo#l^ zxj2D*tj74_CiiRq?V9rZ=Rd#vs67kmRj+texx${B&lg4m1fo=ue~XzDZBPMC;mKQF zk9^wMxn6jO8xZwal)_-c&!_Rh0YBovS6}#=^vI)lmAK8F%#~8g>Lw$OVpN&Ccr@%! zHaSe-y-y=fc(36U1@rv$bL=Z#yOACFA7c+v#n`v`6VP7DF|ypFJnc5#qfKo~NnOz# z%UMd7;1cJok<#b~Fs8tieomrffFJxZXMMfk$_z61E6K<>XDvtRVvsyHnWN{X$ri)_ zqx?}*2Ulq!_a!Xw$G!|#{=T;wQwOuNh&-5;3@Gm{bRcJ%pWcqwcd*Cd?Ih z6f#rBQYR~+$x_Y0aoHCvx;BB8*5;+@vF+hx5Zjsm!mf5(eGhIczcCUdq!kO#ZkDKl!*!+F0g3n4B?^QKNX@ zAXFbzvO!Q>v*Y1w%bv^qF$uJ1_KK1Fo|+^sUtHcWuSVWAYF=wc!+zc*Uif16lhhaH>=OIPp01 z>_?Tq`@4_ZeL_q8>D4=T?(};{K<6RGIG~aaa*m5}X>HJd7tEmk7}!)!i_crRPiwpz}d#gLZTK>b+$c}-P9n@8=z*L(nIGltKBN!mD$nh0lV_?(wDsi&gI<4p6fW@rH(xC zN9pucnb%X2!$p$$C%bbclk?BSXxfMkALSugJZg(adf{swhYbT}ANiqngA20@@yUXA z<{9n4jhHF^DZd;8J|jkL)h!PbAkR@Ud=AK@TJv$zSe5Owk+l(Lo-}6cj;{{w1WL)a zpgP!-9|sAz5XOjH=J+IyTtpgNktuAlBPb94)QAUB>C5@VHcsMKty*PY&F!>TNo}(q z!z_p-5@qDk%|-;X0xQ5m2_u~{k-g6l3@EZ@FY2TrZgOcWdOv%$6h07o&+KdDZQHi` zeW^$d>!wRFkuXLdonr+Z9O(}oibhv;);XXqc*TefvBO(D4Qt6M5+YDGDV(5X@aE(~ zhcL~Eft_@;;RH${Kp@-54*mhP002M$Nkl1nuBu&%TfwHW}u^Hb??MY#b0wp}jLyrPKl(B{m7~#-%OjbZPrF?;LbJb@kY$(#f2Y+hAhN8A?xh5jTfC2z3@Dmp8 zEW?Zqs6yQ+Sva*7KXb?ioz@NHRB*E7Crsi~Lh==_*S1hHqh0=k-lu7er(LH)%$1YF z5l>uDO*m%8WbqHn@S8=C)K$xrR|Z0w%t0UP_;R#06cpi%Z<|;e@Fi zelUT~d?u%_@X0>ns=Kn7th0~sT^FQG-r1+aGTnw8ZOveU(wC$#)W?C7KD7FnR1$Cp zhlV{Pq>BSHeSnF~y13RcSQgq#X7R%vJ{ATV`^&+)*ukf5JhBKUM&wdjc~WbnR`SV* z+BvvqB}+#8ITjzm!V%kh{$?J!rQOX7yFaPk#SHSO}4uVxe> zOCF#hU}uc!jIp z&}SFnL_Sv=KC;O_w@01X@{VHWpd?=;lYOCATRG(#w&rVs)(J4ut8RXkFzX?UE9*hS z!EfG85KgrWV;g$sumGb?ZN&z5st>Mj3-V+im{i1xb`1$A3yihpxC)SYti>gQKcjJhbB?7ru2VxG;{&DeP`40GfR;ruvQL(U6N!f#c*YdqljDm+ zI`NCf^|djDk#6M4afDF~oA~9YdM=Fe$~bXkAK9(O0R#|C%dupgWYxk>xcTOgagY(- zhLNwqp_du!0g1r z8`3(4cUdm5X9eD4k0;@K6YE8ZnqsYL2FxsHlew7{dlMPX<)dCHN8-dsEta__zz~tO zF58O0hr$i_+|x!2_c$G3_c-hs#;Uu??{PfPp+;fqyQ(kYZXr!o&silq|gJ4rD%a<;du>YehWp^I}ue zI?q;`kRP2n;a*80Ty{eU%xYRahY*hZ0!8o-+ES&tNf;F4K)vxI%+M^A; z&}F@Js8zCE;p&fUVh&ZX?Ab>=s)2!BSn1^>yY#4~6DI3~6UJ?oT=;AgzN-hkZ1Q(b zTjaJn0NoV7bYtz@a!Q=SxjikQM}bR@-zc)uk+Be`IA9TvblF|_tjjX|vtO2B%VqS- zHptcP2N3a83`~Q{EhEE`b2Wa6~(?dGMCKqeT(6>Q0$@O*>_l`U7a0?fVk`#j&v0w=9EUCxY4s>v9 zEXJJW0evpfPd}yTtjvgLyc<=~brXBf6RmMPX<A1q6Ms!0NNt`^5p9I0=R4&Z3Ksa4-8ey_Y-`aEiW)cAP9Zr%_>ks;=0{gVTX0_Ph zJ+ft6wu4cB!pK)O@F>8wVvVld3>3sQVx%{epUXCT6JUv)z?OXG3@UeECBqj*{;jTp zR|cNKLkGKjMjq&sU%#;=1N>0LGjh_(rEJ2=_E37@ zd?uz+Q0+KdH(e0{J<}>Qy03CvYH`^h%HjG1&ZNe0O;UjoxOfuhmvZ9lyE_CNWpKgq*9cg5J<{c^K zvpI*6WiI$5C(J31Fru#z=4Y}F#%qcG7f=_xpj|o2#;ps?? zf&&6cOu^h*(+!a?^k^w7w3&+uF2kPl%1pscj_{!rc5<-h`p(& z{70Sh=&QPs6r-L`s^qMC#OJm!s$rAtTgJH2G;3zbURkdhq#Cv?3)^%Mth6?pzC>2l zoU{~^&GQA$vDu-5pi&PdWA7mj*%V}KL!Wh$Rl_bm$SSg{R%&Xit~s$;m5#MV_Nh3h z&%RKoJ;qjh3M1}p6OU@x6gTU#4`d}eV&v->TfnZkBUWwI@?oOEKD10PGhT=(9c;)cl^j|--IkAx!Yh}|Egdi;9y-}o zXI~Atbiikww}(ZFF?6K|HXH(@SgjnSf?7D~RC`X=kR4bR*HxhG*$+4+=RDR%ow1UE zwIX-6W|!DsIpqLUm|2gcF`vQBjiWD8n#3ilDG@$6u*}D&xrIX{@QlT1Tv8)DGcle0 z#}lyk*jG|SCNzU;ej``Yu_ zAmfb;^6vZN>a<{9V;{4xa#SW9G)3?I!!Lz!2lPN=pjuG_+p~I4%ov_RDi<)p3O`;| zf<#`}q{rzWi(lSQqv~2>YUf(XLYL(cBTj~`*11lcU}lyCW*M5f0ukLWyMXX~(9c8? zg;Eo9Zcph(yW%NJ*;Qw|429G@>qZy zd1`>RE6QiDQ(QS#mK94evTce7_)gz7B2VB(&IF~&6fW2+8hrO#9~U4$aG)f=P8JUJ zd?nk(g&HN>#g?{J0~)P5~QzcY(QKKw!lkDYkZMcDgBF0F?ifU(R*&-hm)d#N~(A%LBMlxcKx@@a7GqDvT#|M}2Cgf=kQ!DUQ0Y1l*e#{B_ z#%;1VvTv5fqgr^hGcN0e&2glgqaM3I2W&>&PPk?)vx=z{XHl~n@8;mFuBq0b5{6}e zfTf1q^s%KSkE=slwrnX&mMw7~tPt3Ta7h=3Vqk=$7W|A$ePjm<(UF&YVd-NAN6)}L zG5i8gNvw*ypFKuk$BrF-kJ94Bi|uL=`-NESBbmiTMp%GjoX9t0DLV~AJKo#Q9E{Y} zkuf#)0rGZjgF+j9#=e023!#~p=V(57gh4PVb7df=$Q~B;3o9%|3a5~e)m$apvYhc* z4_TdP_c&#+WP#L1Eoar)HkX`(I|lFb!80WG-DgqRvk%{XPUlMNk&~OZb2>wKnDP;* z!;8n1(5GgT5!`(sq*6IOntj)Ozx~|XUyO)fEm{5t9AK|huulMO|6(*@4iB-(D|bIV0EI-Vb{cuDv$E58lo_#M`&FQF)PF zbybhPXiKL{+U}D4+8)}0(YKas<>r>*4dlJUUQe@l$^QNe7yLqGe_JQ~>alVwE<9Wo zzhY;cVxWc|rQ+GBOS850+8Nk@i`-o!Jd|eSf0r?57A@S@*2De2^V`>XE6#nf7~4tb z>A{XtiMyku1I%Wa%q_M1*}^~alVUQQa8@Il?YHeyygejz*KT{#Fke%%&p!5qWam}B zs==EAYMm-3xRco%jYl>pG9R3*KrLTS%(aBd-f98O#q!zx0H0ZN0P?qA6D`|ku^Cc~ zoS(;5tl;rzXeKw;VbNgKn7Lg}AaOM3Ds&vgdpB(b?AeL0jIhttfpB!*`}SPnyQwrm zht>K}mF{D#lb;dxBxr3G$g+U|Bw8m1loF480fj;Xb!?Vfxiqq%-U@mY{u#5$! z5oU)Oxq9z^z`kX}hK>HRMEqjm-&Jx}AR60^T!xxzZE8dIuBms;Cxq>G(7yYgjrDl+ zpvfD`f$P@zuPy@h@065crfE6}s9BV|EZqSMkY*@$vazdd*tpqVaj?Iiw4yI-*Q~S$ zy5WdXOTtT)IXWF0dAz24ryPK@qTLl_r-=nrHFpJg(4X3SkG&&m$-@2Z`6JtX{;aZB z1+)!HP-Yxf)rHdBWyZpA54VyOk>lr-% ze{XIN<=>KIem?fnnTk8GG52Wiwu!dMe#VUVbS<{|vuV@4Ws$uqW62Ub`FN2D#bzqrY8Xq1_ydd9=WuX|r&lJ(EXdvu+QqkuPeLseU*{ zKnv$sIpnbq49T?I$9^ffyWC~_8=rSLiw$>y=B+&~xK+Q0atD42Bma4W?WGa?Tz7O} zOwZJZ5r%S&GR65G!$Y@QIZAGo6^vJT)v zbI%ffjPENMiPz-Y{-+XZcA|z&Ub!Yz8f8KcwU8C|&3Jay*^hl}`Om-hYvszXe8paA z_0n?A+2`03%=PQphyh=)vW)!Fqt5+DyLwrr{DBZE_fh?V7Z8f4zETT4EqUM4bBo=H zoC_NH1yAGwo$So1#(;r^6upaVV;!l}f;Rl8ettCiw&yr0;0z!sfKeHPrlYSQ6Segk z8=qf#w4K5AH{Is%D#Fhq+g9yv3T0r4(5q`>bbY<4USuDoQGI;ix-FtClQs2u6*5Piavr1$u9mGB%G_+!4`apy)mk=^1a z-ZSIRP?4M3h@kPC>SvdLIeBWy2P*lib{^!JoFT(*HFkmb+s(1K+KQiMgA(QD+wS7F z>+1wqQ+hl%C%GEr=uKPTDonc~Ssis{CSyUTHbmvET6ue}H8x_Tf-8M^B@nJqBG26> zUw`v$cJ*&Ty@F#(@d4nufuPC|J;jQ%%8PFgCbhg_FkrI-Rdui^hI0`rY(M_hW)KEWb0WFQSrgdSlHOm+UTHDGiN#?B% zb5uMrq%rrDnrWU{Ej=T|!$SZaCvV20PO1j6dd9dlh#q)s{8;QmsBrj^LFmAvX%?@?o) zTx_R`pK9*3cb1_nwih-+*8A4{pbZ1|T$UqtVkq&dh^fS(Q>nSlv*%-M2?^93kLeKHH6GGcLVqGn;xyQcPL+O0rgiXPnFt;T~ zByh=}eTNOWSWmNaY2-m{`oJ42a)F;TDW~Fd%MVKU`Zp2sK(@e7syTa9~9XmMhI9BkO^3F^TEw?@;C_ZRv_ne0M-yII~1KZI8dm8q3>x;%G=1ods z6gAf4su_j=Tq?+2ZPl`&CKQA|3RN=(0Fqc)uzpas+_%N=1HuO@lrMkv%jKjKPAZER z;cHo;-Bcq;$2wAlG|xN)95Ia(|4_0o0Tp^hyB3Pyy3+A?A_fK9=JxY^rqA5;WWa|#V)FtXaF-Kdt&kUkUou&_V$GWedPrhxP-`o%@S^p+JZGNZf@gTgo2?SH)p1 zi`V8H<4SpfeWh~Ooi{tvQAZtLHs8CoY}$B>_2*FUk5bi0@W^l6``9?PSkl(mUSW~O z+OYfWmp39a17Zv0#9z3$0?Jyt>`jL@iU*)*%Z4&xe>*|C^A4<|t!3rvgZ)5w=N&gW zcJcD{WzhjR5ma7SuUgA|4-+%sQqdv;X#8$3=kp5_ehJT54D9P3wVf+t-eEPd$AIUY z$q!z{$YYDsRUwJu5@UoD_B(1{F#qnqKfN5;$2!H))euh#{T&O&UE^SxSR&XqaN>`C z<^I6a=iMHSSLR|5;Eg}MwGVixWQ7O%z}im8tuMFVc7wMMw7y{d-*U@!-fn%vi9pKH zjlKYn#tsSw<8;gs9qjYYA#8FzK{hC^FlC!3TydzpAB4IVkx&$+)h6HsU42-8&=EEd z?>6N2vc%@yLd`o7)IiMKDd%1&2og0J>&IWV+PF*&j1|mn%)Qp9s_)tgDt}Uq?KS1H%PzAASl(0i$88}sFt*KcrXdb=w6&qDL#&8n<~cja zz{U1QFD~gB{$hkzXwgEcdk-130>ffbpDVqvWIx0q3g}~>gw}M4G0;8~xZD%9dVe4g ztB)~vj`WsC9*yAjbz$=*e>j8H(KTT1UwFDSO-c|0Q?5)Ct6?Ctriass(`cS6AoO$D z#4(TEcY$U1F1viX#NuN>;000Mwbl*;cFCwQf3O2tx^$6$Qqs>eTUH`+M{`!4`JqEG zEUq-&YhPPE`9GXj9&6tvzxREY_>S>)uluj%OJDj@`QG=wS5~iF=9h%&l$MB1a18lYX!f>_3Z%8*> zqceHs@+CHB_%&iP$lr-;!<=;9=9)%gEtAog>#Q%&|D_lDOHtqd{=c+7tu4R$f?p}$ z{`R-ZXD|OkS%2VKpa1YjUX5Nt=JX)53+zO(-Q%9C{L^!|V!hx)!>ScF@9bZi)rgpM zdD4@9yqt6HkCeav_{Z&jwfp=^Xmmsj=#V-i z-P|?e;48VUTeou^8Ppj}|A3v?;tKd;yE&M@s6s!;&V6EQNjsa4LIY|Ab9?h<+wVR3 ziRJ9G&MqJM=tt`hcI@jwc#9I?>I1RsQr1t{u%5PU-|koLaf^U&GoZFUVPx>v7mr+3 zJz@+65Ybq}!Gst$+A|X}NBc z1@y8ggEW_uAFRTTCr#*sZ2X13qa$H7_pZPv{~@`|GiO^TP5|S(C)9nt=W2@V3zsg%`2e4)K*L@0`C+1uxtdvEzqg`O195-#e zr<{7qiRF>cI<-9e=bu%!Zn?Ky{oU`DHLF(IeG$V~iir?8=ZVW9MCK|QI@^(K+hO0q z+X2i@*odf})>vUDPW(y%BZ0B#*JAL_S`-O2b`l4#+guJlXnlF{i(gz$Ir*gWzW2Sa zY~Hk?9D2xsb&UIrv%li7UtyW;rM>USzV5(@6YeAMBcZ{O-7Y&hUSS91)hp~I&28Yx zc}vctCmpaTY~!nhYp(sb^2XP{rkrv5>E%z~@h4^7p$C>@k2$J5^Jz~lU%%=rW%sq$ zm8Hw<1h;+_Nq;f0l_T{Qp=~3u`LM}O!tUL?wJfk3(Xk_D7WT^~JK4ky(aY?l-46oc zHb`SX26Js9p9Ab9><8C;&t5M4xN_>LrK|2=0)AQMz7(ERZ)&2JvEJZcEI0kL?>4EVUCS z`>>POkr-5qdAcSFVjJLdwHK9h21rIN0^l-M`izw ziKsE4hchZ)co(CeZ44}y|1%(->YDxO3wL~FCt|cAv!6LWPRtHJ@`&{J3LUsLtKRG-Nw~zVv81~7tubYzZD@^9Tq4wGP4^EAx=78cL zf5ukr>%{$n1G9OTy#sK!ZC5Dwn|!~`JDjlL>T&POcw7$=N9$4jit)BMb$!F8BC&SQ z`#|5GQ~4qXaXU|KQ;)tVF9?*;FXWGThYvSBmvH1&ALToRr7d_IV;wRkixXNQmP?9fe=%k;P#RFVFHhny_f~I`NMgwqT1W_n zKX^r8wD5`l%CB8n-ty+Rl%IOaQ_9O<_44wb_rAw=BoErxHQUS9O*ny)uQ{|5Jek+~ zmSQM>xOvXnt2G|!E1y^BXY`}_x(~;I{qJS;4PMxx<12)-9(z{#AHVaq@;v)R#*OxD zlNbH!i^?&_9qT`F^-Jf5Rel^91eb~phuiaKF1q;Qa@i+8Ro2@TP~DKNu?mie z5E87BUFf|7)k4|%MnFY~1IR41AIv{o8873ot$3*w{Ptiww*T1HasfmP!AuSN47BD7 zpZ>O>e_*1`^$>Bzq=>XAGiifAdJ72=R5MycqL1*zLI)hN)mB3S0g<*^ zyGnd0%fj780W)+<*;0aI0igr6ub(DCSGg|QniCof= zi%Vq!Ta?;|lsoNJZ$NVOJ&}LM)#fR469%7X#DV;B9*{ZT3{gXdT{*BO2Ur=^PSdMP z-61m|jB=zV^tlZT{(@G-;m<&Wzqa~p1SAuwtsrPCDf#7gmVr%$XNB7A!T?RL^?~z~ z45CP?aFM|1srGCV@P)SLz@9+c|gZYQXL3#D`Lb8gmfAU_6r`k4FBD$zgr&ls7IAI z{l=ThRrZy_+b?{(p9tcsCf#ENtVTr{phnItjD}^7%Q39+!r(5-SQD!fnLqxqP#)W( zjdu9pipcsk2bIe|ce$^pxBubW%PA+FQcgVaq_TR=nsU}zXE`_W2A-bk19N9g#!#QB zBbt4Jz3-Qg1yuQuG%XHeGH%2tm)JwE97&>+q-FLs<3iuT%;ER0# z3T#Uj^S&_rvJM9Y6|F03Mm@JT_6-@r4iD8;tX1oiL4Z(OET*bDjt|=8BOWdKMNJQA zVN|w|UE>Rg$_ff)3T^1=fMvG#T6)KlVH^XZ79PBW@~z zmClcR>?7sFmwvcB_c^~l|^CEVe ztJyrPP__{MAE7h?wBTxx-+K~e@!->pJyE%NT z-HV2s>``=b1MJeJOZ*|C-d)2ohQoX@<`9Dtl6_r z`Yaf!@)!ocpt^s@?sD)U2bae^?s4VJGtMlJdi0~q<9_6E<#f9@?OWgZmfgc+&#tm{ z=<}uH4IW0(5;dZ8WUXPcWomijMryw~922n?=oc=^59bt*5Ui6&*Ei`A5m%b<3#|*D z`m^N_I}yaQ#PBuvnP;BqAF^7U}oO5ML(iVw5?CfI~%|4_V8V8OJc%)W5tT4=`kJZQ^bXaf3!t5?4P&oWEKyD zJnhuee4g!RCrE2nuPI;s+E?udF{hNHjylRn9`t>L-ymN5q_IOjUBprmPY@yz2n0jeo?y2?sr3B#@SujlVyybk;(%f>T#9*Cx7B6%kd{1@B7-_Hb-v1 z?RGy&MAFKg@x-cFWK}MCeG+L)pLe_M{yO_ng8e#LMUohEt+A3$V<6wCfiNbV(^NuM z)c09dFNboDRTsHBAp0QqojZ3wc;JDn_uamI+rMtva_`q||F*yF1MrN>&bHXEO+NEa|6K01Cv6{m_#r;I z{Jx{=&m8+vRnDq&zUqbYmM!PQuV^`(;P44o$0FmjB4Xf$j6UIYHu%K^*IaXLdBYptP z<=21xzm$Ld);H`&3Wt>2@4l`4zTL2klc$UR_)p83k3OCE_4MhrmewK1OA-4Fpw(DV zHngo1FU=sIzHh{9y!tVuE62z84fad6&wuXo<-;HPa5>Pn9b7&8+mHTjx$tf8w7wqh zS9gKay2%ll442R|3yqnQghhYZ19;{kUs=f`KH|Uu9Jy!{9<{h2=8Aowv9J zU$NeO_ualt;R+jya`i@AFan#D)eFUKP!q)DnWau>HD#>Kii%Q)%Z zym_--Rll%oxO;=$-+8zrfBBbw*`FxB?!W_mJ#m}nIFX0r8*!q4;z!KB7$$X~A9Wzb zELoiFA@GQ*LM=xxVv-df3KrUxrmL^M+MkNP$mZTkyH&v-T5RiyBS0p$5FL!-&j{eu zcc6u#e=Nf%`WD#eUFg6|y&@}{sy8Um&=Qw@8Ce#zBr_9YDa*=HRDUYNEGbvUl%6it z(JEl@hZCz@6qaez0$h7nod9wg+agAdqMEJQWezlh$0b23F|eGxo{bMH28H@L!`j2d?7nE_i| z>Nv=(v)woWfx-S1Df?2U50=qZd}!GtNa)7`+vxBW!yUKZ;X4<+j=;YLO5VW~JWM4= z2P4zN68X)w;klRh!H}TzLPoX76zd*(Mhk>=TxW=APYJd@9dp7lezgoI890!E3-`|K zsSh(`ZtM$W@gPE8|G^6e^@+W5Z`(Nr7g*RC%w6d-d$rbx#CY)P$p{gPjHb0XyX+G) zc8L3|D*kGjxGEImLVhylv63D-^-s~GEx#BM_>o5v#)tb2q39)C0k5jv=`)}-x_OW5?sM?9m(=rCX9LZ(1!O(+jVay%NY5K1hpgGCvKT^_-w z2=b+O)_Ol(P48?A<}3vVwgI-7OJ#s+EJ|(E=Qc3d@y+F*^}@CXU}hr704O)KC8O3K z^iw5cWrxlRPnqJn6VJZB-5C$@wsBz( zg_~IM2?YgDdPadg7q*cxxuYk6f{yHnM;xp=2@a&`5E?d6w!%C^rC0zYzSM#ieL|tk zU!OsPuOoS{7HrH-7>#tVXAJmCBA%_>C&WX6j#jjc)jEr|{4^qLGgHa%Kwcri9U9pmKhJKz3J zx#RfCeAEnoQJ7s{Xg*`L{CSWfjmX?)}v zEYUacWjin^8dLRUtckLvIr9Wi8uo{*(y*uDU* zMKWq~F!$NMb8Lx{EEd+(ilq`7F*A)ZLoCMSlHRbRP5*4kdd#^!dK^yeC;Y`1<5tJQ z$vG>4>9~@g;yT<@05bX#5)hH6;|C2r`+lI6V`m1>xdzA>ajSRin`Suqbm9msd^ry8 z*{3X$Ablu_DF-T1hZ2&$s_V53$QwLpQ9`Omd~OS)8n!C)lqr5fs9~}E?0?%iSOXSh z9VC>9$=Z;C#xRmKQUXF;sPPA^JXv#@{plkVeXyiIR~YlmG3ga(P3F+U7KM3mWRwYg z6emU@;!Lp-4`%iPQqCT2^;`W6pKOCHjzGwVeFjEjL78pl*vF*~{<6x>e#E+FG{t8A z#LUJLN6sU3F;?`f<6KkCob=Ip3I;+g7X$kzWGKuGWaL?uO~*LU5<_Wr%rqwKBTy{# zB3_xP2Sg}C^-#GmGx3l&a;SRbZ<7sr^#T(6q}_ z`J+GiqjLN)$NSfJH`)UUabU*RTsmpWp3H+9ax?23lMxi1t-KVU?;i}t@dHAm1UX_r zW)yNN7UOGdq=hdEedvd_)?tnTJqmd#b4hPR$m42An_z9Th`9{LD5Y5EHMs43_m#E8f#FC_rDJI#ZB}%%$jFY(H z5RjJx+(j(#a}$Z$N?~U3g%$mxCbwWiTO2@37T%qGk;h5Vvu})D&6vzeq!N)gl*&i7 zm{mvoV2wx`EA}E|<QVM!(qoQ2 z+HW?-38(I>!`I))9X;;j^gU7k#1AVxSfm|CGpvvTKXMa?B`slxj!_sRTOw+NU>f)KYn{j@;qHwL$jGB`htBHQR6H$w>5$v5XL zoNQC=7=6T3Mty9K7?`7v;!@qm$ULzg7>mfMJjE69LX)KVT(d39$=y4lHZV%IJpfb2 zTnm(S3Lp}-GiH=$Fs^6|>>Ln^s{#Xte<&C>4YG7@utkv4A{^|pq1FmkXMkoj;(!So zyyZ_8Eu)4%86qcI>CGjh02i5wL-B-fZNe=>BBf^yT}WsJN=PAKQ=a{XOCQ>M#>f+S ziBY*g7e&_4WC=csGnFy0v~!fQZ{Vp#8<_=TX3uhF5j%Ct1uc0PegFecl)gvm4Q-9fk@SjD4{LCdjYx5DEYRW~_2_{l)a1o7cqLN9rF;UV z=)s3{L(90(WeF{CARd04fE&f}OCwx`!q55nnIN+$|6q|7HS?mB`@<-RCO;vmn`^0l zX1|Ejb7}MxJ!hl%;2SxWNsJ|;u@&oqZ1P9lu4V?jd9@flsmG>G>xrWe3Pj+VmlJzJ zdS=20ciKsmoy__JP+>GLAtT@50K)UFwc6}sctG!^Ca*rQ=VlRQh0Ttn0Q88M(C00z zF*YWVlYzY%*~ABI*hryV(PA`4oI(28V4pdB7?I2~K5hp}7DiJJj7Sck7?~1VSi(0v zXhoazAm^`Kh~W};{bhZY>DPOsg}6O`cxAn`;!&G9Ld$}hJ?Uc!Pb3iZphT@N>D*YV zU(=3;YF8zk(otJAa9KuM*!Gx#5i~k3QBJx&Syis!;)dr4O z)nFE%P^^U$GUA4ve6}>2oMX?_x5yLhuquP#;6~BgWEDF6sL?X#A}oCM#~#r_9kS78 zh?we(XPLfE;5}zyX9kMV+?;|vXixdps>#ilwg+hksy!G|mg)(K|)< zW=ocNk^@K6JC~k&nFlnhf$(7QjG9|KNyRXmdQBU4);|akUdV{m}}r@?f81zQKkPNVXA1 zp+;X>q*w0rR9}>XVv9}Q(pzmr;6e^w2UL_ZweT=Nri<2);JH_o+f5Nb2yiF^%9)ok zqR6I*Xot>8OktWDLbj+8Q7z)th6^nCiwq@a4R!F7512Bm&|!zf{1qcdl5VWQiy}VA zp06pCH*_f4530`j^fEl-AHA6kwbX=?`v@X(;u^VNJzj{;1rBl?oj z&2^FED;u)Y5-{%g)N^r&kv{B0-9dGIi(HhYasyKr%i3aK*78tH)U?nKqd-YK%u2Zd zFN-8G!#2wwo?;4rF=W5M2aZ|AI?Xxv>n(i1sSzdyUeu@^<5r`>y;4LTKwB$O!-i&H zAm^4Dt6grg22QyU8@Zs3zA9U^#};EN2gaZey&>D58_ZY1oe2mla%RgTP|SJJkxS?q zDbcx0ZcAoAk%vM_(pV{L_GQFt43ra4j6Wn!Kw5%HS>(PD5*9Lsqp(CUyWU4wA`nI6 z!Q2=*N02{snNdukbt@Lt9allK7qZhYNI?Y~`w2^M(_Lf5I2w;0r<}+2!>C~Nm`aFL zEtYa)pR2KD-#Ia*X`6b?aI=pi0I~dA5C}TPDGwP(a1H90D@`0&$h1~ki^vs-Hj%`r&6MPWnng9eGZMM;j>l z*1d_tq+?xMZ7(CM{Mn9tB1gsuypy*G(1$G~X~D=sBze)pXsf?Dm+SrM_Zgf=|MC6Cx#;m4Miz=)0h}#Mq#XwsdJNCDG9Cd2|IJjOL=gd zlqEgUVz$VSQS*2*Kk3DQ8ah}RN%2{?UXeNzx=(m1CL^F%kzb&|$~ZY1qo@a5<1Mn| zm6g22ff|KAlp-#*S~{>>&^sd0Uz}`7M=h5557rnI4HC6jB6j9ip3sF%KkDeKKIGiP zCuc}Jg81fdrfkJI{N#Cjbt5)=z#oy6K?PccT(pF?_ks@#akH&J$d+TUr^MJ?a={{` ziP{A#m$QmHndVAO)5ziiw5A&LBa)&K@l9T)ja%cU@(i(b(u_6Lk2_VAEC&kFel zioL`KIK@=2RV#8tkcKSHuUF>~kYR1mYRqlf#UfjUcK*_Nov%1`hM|!IfLv|CazG^^ zTdM08guO#WiHJ?LV2&XpLD*pN6=PBT7aBDqzhKbDDZ(;2TQW!tr9qm_BhrWbkYmNV zFTwPw=>Q8gy2SY4tUyvIh+{aR=v*m)Vs4m7An6R%X6nQ`$ndGYPS#`DioWzbY-JrN z+PKcahc(&yiOyTeX?r)SUfjBuL+$L;xJ;Stl(PnbtesT!g@SpY%H!zJ!N)%{Aiv}m zJf7LiLY#Clv
by`C!FOR8)F*&!#V-%407_{&wA|NWJsx*Go)7wFH(T-2m+=n<5ocsHp_IWDjH-a(B^RVaZ)aXLyh%; z*)AOf$<(sH$-SZjmDj`QgEk|80Y1n}zErW5bQNh(bD@t(%*%WkLv8i}c4)XuP|oIC zX}zj^`}nq2ZA}M+H9TIG$w<8unceXo$@GnWMjmaX_ADIh3x%^jfmUDZK<8`1qprEM_|`TkwD@zcx^Gll*; z*FQ|s<*gDj=Oz5RtrafJq1LW2jmPP*!9mQ-lF7`dT>(1Tz01?E8Lg+G6DL@i7jYsS zy`Z1VChRF#$Y|9uGa_d%a+BLP7=f7P;6tE}_u| zO}5l^_@b#A99c#?7qih^L5a#OI+~gOfQ1YEL2TIgcno78Uz!3>z};<6$i@wuipia3 z4hVU!glZ<{?jsFimCnT)$Sd13r?9Fk2b-bvm!H}*M(}JH+yt!0OkjK;*!>`%)@#0a zfS}fBc$)!@6xY{FmsCa9JezM5;6G1s{=sfsKBisY4da~58S4ShB|5-u;LPtEbliwEpAIF^2w z3Jxm!`n=oi{p$F@3&K>yuezBu;j#gVD~YkcFrm2K8rn`w#i^NmyAGS(bGCJZSK{n4 z0*~WtzU^Qgq2Q);XUSABpj`{aejg;8Qg3Yt16P}~;?y{FPIELW7v>LM2co=%1~(vh z7F*0adqAc7Ti3bps#{K`7}6y~>q17=B7m3n4-if7=Vjot*goIIF-EAa_?QQ6aUxI!SI^uh7@0){)#O@?CWxcf;>>XdhzC~RWivnI zi+2@bTk(f!g2VKUvi1l2#QW_5oXyx`S&`^{rVvgk;W$ye)+&I~c zWi{+)Zzw>YJg|==M%L)-dM1p-7M(Dy$k1;meb^f_m z{UnG)@(#q?d$mA<`EPV$$k4X7PMqM3EKtKZ7U<;kP}tG8YdZ;6kp1@+U@`_h7Y-~# z_7?Loti7Mchk3=SHP+^{N0>TUK<{xf=_ot#xT;1_<@0Eeb2bb&tNl1FdzLpdlXp~NdY_0(ppaIi~OO$}}@+qC7DdJ>3?xItsy;baNV!8!22 zb=Dt@O!z9|>^h>wmrBLl#yQX4$7s_F4v2x0ob#Yf+FWT1&b?i`_Sh52@34cI%{!wb zBM$^Sw&53V``Ehx*II4!4m)Hoj7J8is`}Zgt)ApZ6u8s}9YX*+RE%`_8gs$Ng;|4g?BbW3yw&E<0IVZ0~-=yc;>$ z?)&4eu|ODuao%NrK_Uu0tk?^1|3&xmMmRh?^?ReUn#O?^=bnuU6ESb{`+c# zSZ8bO2+ihupnjFed#shisNdT*{Bgj&<>p(i!0-E=hta3K&3!H$LT%f=-QMwcv-O83g5DR)2Kiv;e~-OG zZti!C^z14i=Fr`vJ>28NO~ZyeW{;ty>Eu#T6TdgPyYWz5BhX4 zZaeL@CpX)+quW9Y_I z&QrRj_tycG|xEmRoKsM<0EJzsNdws`i2x zio9PK5^7ui-aV|Rhd25U4;_7lA6~z6^G$b@#kLpD-S-x`Ne)Y#= z28*Hnvu~XZyVVh;K+3=X^uoDw&6`m?ncHuP!XlEb!G6S_(%Xh>J zD?7MRc9&&K*V%^*oUAj>=n2$@jT>#b%l?!Tv_dLB)c6xdHL$q|pLLSOi8gR3!o#L{ z0KKp|CiKM)wrhQUvBjnK9XRgn*s;58-G*%m^A0>yu@qM^fg7==@&Y}I?Bc^1WdDp2 zRyyFMLybQayy9u4UG-b+>qv7A{Xuc09k@4c+-~!7lWDNOi`Uiw(-(Nij{H!RFKm$U zr}%T(WH;!XMVOIqkDaKmwG(qbkvzMje~vcS4I8i>ZMQ$|!*ee10zY(_A9}S_Lnkcc zT&DE$o6jZ=VEMOl#dbyKV*wuX0&`@!UG=lqAel;;W{;SI)M^{c5v9vfV2?g(MiVh|QoHv{ z#lv{tyJ^RslOK8Pe)rsS=bztl%T1TqxyE8U*Vtxk*qP-&yo3>LbQ&8R{xFzm;}0^@ zR?RN3ZR)Pf`;uQEHHIL;NUN<{N7DnXKwEG@Ct+ z88ux1&wcY8U1@reh(PgFOP>jFF^*N z&`Fdu&!|XC4MbA;fOrZd!xD3DkIg;xp@W+i+tO+~vD#;!CB5mPS{`Qr4LXlMK-$2` z$W%wvoNd7Qa82Gy!I9z;PEKomUbl9&^=Y;DALFPnfvh32!oNy$X7P#88>Xof_&5ygPn=r{ORKo zeHb$!CwMg8voYX92HDi&0f*X*2|kW6+K3c*aOQp}M(8xMu%OtQw5fqt@-kONC68LF zfrp%WsVDX7HLYA~dqitCzucS1W$yKcbt&G+LOBOpkIA{iA`YUs z6b4qTBehl2FSZ%zb5Y;24)UnaSx?!eL(NRXgX0nwNL)Y6MabMk>G1ACZ3)b2Iyc79 zc1v%L0i&tkiYt7Msch&S9Ar?hlnt~j8msIF3)i}Gs$i>P-eG;AaId2rT{SEegK9)l z4=8gDM-QU!{hSC|W~(;lJBo79{O5SFFJy;|qPUSeHMFtsl*O4@GDlt~@IaAWzRH8W zCI(COQ=<|17$KtDxdo}K(yH91wqJr8g9DsoA;vcJ&ZiS60Ol(q1tw!3Dk*VRTstd_ z6pbwt#`n89Bx!&PEru|Af+rB!LRn~Iurv@y8YPKZ6O=ZtPX1afxHBFn22tpZEHk&_ zH=L-dV#Y3g!eu`3xXv+TK=-?!MGI(kMI=p#VNQ9RZ{XCF_iF0#It`xb(Z<1K`0WZYy3NWn^Il^ZYV!d4*= zyW$@j=P-&d*yt*K)E%WaWSh0*Jk9F)2RcjP+j`qnjx+T*R^S_T*y4h>QJB#8%=Z&@ zEQFtXeCEyxw9Vf;m}7*A3n^1*m;uQxO%jZ?{+m zmLiq_LNSMdt7Ek{@Qm(zkt9m z1YyNb57bNOQ8F*voX61f4?a;eM$DBfi!#t?k1-GzC3u7sNA#O9eOswsF4y@+9`~l` zyluhMT60nm2L3#|447=FRXmtZoCJ_@Yy+%6U?9&|av@uaFAiNu~(c{l!2LTHF zB4ok;OWd14Uv^#PomWzos!FA~RFXAWl1FS=o&=sSc5E83F*c@G)7=;hW@rL|?wE9f zn?O2bCCoIT7hy`TG~EoLF`h7CVNCFZfwV&dwj>X-Mr&3{B~__3l_ab8Z-3{zd*Azi z|FTT7R!-Ibo_+TI_P6&wcX;>R_ujobkB?uB)OSamA@Q6$9~%&BOG7ns*<$-IrHGvP zb%+mwPO-9=hM(%wNWW~U`XUzEd2(vzl{wrUcmvxa<}q-yYhaE)K@-h7_WB)L!wlo< zWnUpnY?xf=-)5a{m*=bxVV38VwiQT$^&}T11_LA zdh^iJGG*oMdF8hQ+U{J}dP;P~h3#eRn&SG;wRDb8n9no4*?~Myi0zJlG_N0Re?uRp zd}iFhY-W;n%k~)RO}cG47IVK9wXqt{N%Q4bj2Sl^Y|a(ZDD#So%5K_~I6JTOi{S`- zEbOst3$E=4{g;`V2aZiDfMp)T{Ux9+H1gP@{x7A7`QX@~b)xz6wx^0Bu@D}PUpzk& zzu-I}2K{V7)o4RcsGmg)UxvUT6FwxNs08W^>tG~}>w za>0FO&N=t2n5fEkIHnh}E%vk>_I1;WE<{OdWR1;_W*s9B7-Jq;X-DJs0tfFt6koh$ z^Xnct$V=JbeCC^r5bTRv_5{1vGTKiOBf6J&~1XEWP7Kf)B<|i1Xw%WY=OkpFp3ym+y{*)`rgY zpDMeK{{-%I4IZ{TPKX|S;GtMu{T-WwL}+;{2G*sgSY0VRh$5qV#&J-fLdm4D5&N@_!lM4+c_s#BIP zJP*cg>eu`^mhz#89?tJAaXjOnYk>y&@mP<0PvUz^saUda(k&4++JsdKRktzj%X_QT zF(Ky*RLmde4%`BQ?Z)+J@%8k2T?2Lw-@3Rer}@x7!et9qWZRf!tzX zdGb{2isRj$J=~8f?t>N+Kg|tT|Lr^L z^l9f#{gQ4?*Tv{1$Xhd%4B$^9DN$HutFHsr_i7?FcK!&F{O#v>0sHa+v% zPn-6ib+%sQ#!8u8dxVtxJZ)1S(H5q~K#U|at4ErwgVc?&0m&yYIkVG!?#3JA@7Dau zZN4~ID0I{G~+a?+C1K5U+|1XJFdsF2}`9 zQdv(&9(Z87^Ui}&f_Agq=|-ZQ(4KwP8F8?W6DM97XoDkrX==GC2j{w7U*3|8>-uBq zhK*d=u6FL&Io*5j;pwis?~R{5$FFj*kH*1$SDav+y?@`dgBwJ4-Y(l=ty_;f&a(Ss ztpj5=^;{B;#JI}G>nkTi)OGtEcg4+8IcTybpbiy9m zzfB$^_FQMrzX#kTTi5$cZo6EL%l(MDxJj%V+a2q2Z=3|49k(7~o6L0xFKxTJx*eRy zn|y3@eT=u0@u%6Yk(TDc9P5RvNw?j8U`F^D&c}1ymgFfvDt48KcXLY~1d|2|L-Cu*=x2caLtnwg||^m$eQGjGWbD8_HaUPCSTb+4AKnBQMosUJsae4ol@J*z(+UxhcLS|J`M~!;(&kFS^KA(K6iT% zwOHZsNYu1{@1EQl^OqO|0FyA}-kPu1zk8z3W`ypmcjN3B%Qj-644xb>!d#6M99?FB|e3B7Z*2~^;Wv1vNcIMjWN!e5u&d+hN+o}j?yk(d#UsV(5 zi^AY0sXx7tYSSn#Q{pHPy2t?#IFjE+J!-R@!@!OS;yXM-3|ulfMv|~l8}rCa5HBMpPv9fJojZ3#9lPQd5BJA9 z+A|#=Cr^W19^t@=?-?hZ8uiD?NUT>*9P_|QU7+HB)|e4TPT3KSCXDM{VvR9QV`~T7 z$Y~ypcpii1r2IJD7&WX9$DNjW0svPsAH4hUbbQ{jL+c{UaZGr8I`vd;q8gqtADS6* z=%L^jxB6lAdco!tQt)_IChxor;y&{k1AjF|3)?V19&a{w$NjLl6Z8G|ADQ;Vx?+Dh zeBY5ck9&zKG!J{04}^4M@fZg=dH&O|4SoUrfNy(^F5b2iC2V)mSrIiaHUoTRCJD{OOK z&eL&YJoATN%GP;2_~?54A+t@L9Q)F}hwhvBL|?nDZVvnK!=IndK4)*f@zpVWJ1+Fj zX<(d7*Na?$Mc(7MgC+IF0c%&yH4cb79oIP7iyK*Mijp&!ag8nz@7RbIh=sqm-tkZtHR(Dob?EEM>onbg<=2$%D~5fJr=F!4|_U7$5lN z089=qXk)`#*uxv#`p=VZj=2wEmPZTiKze6(= zQpZjh8!`2yvnpb#fAYkr@b)d-a7;E~NL6-)(9VY3y^T>X3n|FEILw5No$kEz&dpl# zono$s@Rg&x+)(rG(iu^?o7dpVHG}4&a>>caTrfD-1dWAt%3N8Nzd+LBuRq7e%14ZR z2YN&AB_@MpR{d>RV<#rSc7pAtVwiKQR%NXzbgYVR2D1yz zXiWO((erNi(Rh5w>G1;g^rt@~KO*+Nf(OmayyMh5Y|0Sx#X0NX1WI`48N+B=pUQ)! zs*#^$P(5$^pr_epUvtT3YebLji<8@@KmF;`GoJB`cyT&APHG>P|MA!>o@8A3_0ZO) zYCOO8qeAP{JNlZ#IjUl3YOQK2ZH=9Yk;li?mi!KHuZSYohoa>vKLmt1mj?njqB=dyh2 zK^)aYkqq`9s_^mg!P!mg+TW(a+r zU?nEBQQtDZmTwChFs7ogmIo#~7Qst5)U#||*JGSHk%!-`o5#Z|a_7nuwYmO)q#u22 z!yz?YZjgnI*`OKgzUvYY3u8Ba9Jk2<-Ru-HWbvdRaKhc<@0T?D@Q#t4v%)!Ztd8iBW4gy) zF^!TJnEvNDOJDnYUCO#-@;rns3FG#ZaS(axQ=Xb12jvboZwbay$JS<@W^cRERzGXH zhh&z^Y|;1+n{d*B?C8YB`r!UBhvQxUEw{v-+Q)Yjlp}s-uy1E@X3`1i>iW8robd)@ zu~rN`<*iH$FD=omlWe>#v6f>e;zohD-+p`CE&s+?SBLXX%W+{ToP#(1_t=?vF5oaf zJtz$8ITYA-<%6ery`_0tIXkYl(M5G;&5gd&0fyMc=R;e z9aR2em(3oEX+LLB{=pFY5_dFz;pH!!zUr&KDzC7!-m>Kq$<$smIr^ zcWDp0O*rd17GLXoZ+-R{qK$5rJ+|LGz2rVh(rl$mUtq<}g?HOpb{JzlcE83i#=hd@ zfD7Yl-~gyiZk>5nF6*JL$EA~3AWW8fy`eX`ui}{vz5md$!aSZ68v-3RXN*j^IpnY> z2HdKpe;AKxpM6Hq7{gCqV}T}95MpfD=~ug*z0(cXRuwuJWGf#i?1xMfP97Sw)WOM| z#_)`yGvgyte%-^n5x8C4bG>UIg-Z4RDU1gIEl%psF}s60RaDrpH2hx7H7hD+MU3yCV`b^(1%a5@Ho;em=S$pN`42R3eMWeMXwK*R~ zFMH#a|B}PH#KeLOkme zjLNs8g)0_NninjEEN^+#5{sHyq+z7_wEcwmc#BpZi~=_l+D7pc6INs~mDXzsw~iE= zC9SOXm)?vTiCsEpTltAy{+%z@TkJG^Pw?>J_>NYb z;!d-4gKgHhVtaHxaRFWWnnUYVBkPhlJ;EpcpAz3K<8eF>#&an-x#gqp1)Bz;6CQuh zp}5SfXv!C-C2qNg7%K)Zd#28TUTj%Hyu`LkE<(jVNS ztxtp&#x}5H@0|d!E*sO_E$Z4)ZU9Dwr$wXa(fQBpJ&3VjtY7okHuKnN^j&Wmt~H-+ z?&WUOI)88QwUdA_x^^?s(BVG)-im^9-SaI5Er|G+Oxk8)) zEM`Vlled@FIxBf7l52#+bsI08_0H2)SMTUX69w!NFBBGjRmKV6zO(k}jn$Z2@S3Zb zBfpYXu-OKau+CQ_M>Pk1;XLnXoO!KBbj}}{k&%)$(u|@pS~yN>xuwD-ms~QPfByOT z0}^zDq~XP*7_p3(F8xD8K2+ffm6PhKm{_|Po;33~Gx0eESc@H5tzr#DcAPluh#!q` z<@SafZb(^gfIDg%xs~WBghQUkAqo>+!b>I8vPhZ=&ALH?Yf>URE$0+hX4f@AXG>t}s`` zV5hTwPGTsWz`6&QMTWsP>-rcS<28RD*9IMz>Y8)zPMK&%f+}10HC(-xYrA(IoV%R- zqRhD);@rVzys(;M1FWM$=6`qm;_RlIJ~v%(!3EQ4r=Om`aLR)r2`x)#>xC$sq$_v0 z;jI~~YK-uqz`5ZgdSQ)2-(`(UvrMTUWJZJla3zCZ23~jF_4)D1b_WvWJSWm3*PJs1|lN z#cI4XLW&Iw>txri6XW}JcjTAd`2zgW_~C_HWo^x}7b|?8H`%Rc)H%8=8@{R%h9%ni z!boFJdfAkLys0U#aK=3%k>^}|Sx9bUIjn?^zr}0s%v}yM*U~#j*dm--4A$7?tNp-@ z4!`Z}Yo6INlT|>^tNV!VOlJ5K5b)`LYnLpsDd(|IoN(?R)irF2IM~Tp4Cub-mK%&2 z!yCf6#elJiEhlCutz+0_oERr|5E?Uv*$tW*w+RDqjYHSD9edt*0MNn_o&BY>uNiC= zi$|ce=}RND4?1QNN+WGLLU)#m?}*?x$uQh}^DTMFchfsaNA13_YiupColDQX=YhVw zG%{9t7?uco6c71;(o2}|-H&_D+!gP@_yTfXZAv6w%SIeUU+O(_9?r~qddIKq&`Dc| zE@fDL>s-YINA43X8^yGzt@2;mgh9t~MYFQi&zkC8d3vVWyja$9WnMPVf;i>nEx`WR zB(ro(<=Op>cMUT-T*PUf-p^ji?0N6og5xW@HC|Dal_~_UHfJ!ntvAj+dNJhOM*$Tp zqzoAgM7liqo6Ejhzt$@Mt?{KHt|XRfjz~{4!eeXcrCYOm&cxpQLgfBG6)WjQxL5{a z0n)JZ!D43o`#ZioW^BN?UBtcj-kVnl^T#l8Bjeu0)HH*_ zQP=sc@qLU;6NN0D$Jp8eKpJ0tDs!P@ijOR2PcVt*yzSVhtfmgJ!4avjB$&9$u zG%u`kZ^zDKuqyF-kaos7FN5q9y}1+X0or__#lc%u^jlth8_}}7g`o|cLC+{d2gbeO z&gOBSIN2G12`tmw0b9qeiNU(r*70deMOfzzXfA$0N3_w+KAq5WXmVp2cO1^St#W{j$ZYaR2-JX zQZYPchvi@n+tEjk>I>pbu8UHzbgYQxp_gy+gxugWsA35(j1LvguzZQ*YDHq!o`Gbs zEcJQMm2k{U@X6)b7aL2WYNwO085F7KVvBs&c1@I*VlHIytgBsSa8qY!ID$=1f zepVhsuN=e&zA|wwWfR}lIR&|lSw3EWm9JUkW52@5uBB>&KmJCC#a^k?LJrNQ`H@q} z^6bk(%&d7r&36CDqr7Mu4U+j%UuYxd6jBhX(sqURrk6FCG)T>?i;<&QXU@)5Ys`5% zGe?3}I_D0bL)yz@_1G1~v0&LckB)^kqA=tyNZ?soLosWLy=#$a_8U|&wnlcARf|Tl z6wdXCW2t9kjqC0H?E87&Iw_aSu=#388XPDF78R3`B>HY!5_+zbk#L$H`&70_#RZS+ zK-T&}s#Y9JY#~bW8c))2G&dZ6O$FUK882{c%=VD4A0gNWY|1RK$B28e(aeL~=h(jK zXizBU?G1<4yuH*Lk= zPqudH@tw8vlusdzHO`!UEHwO<9LqddJYT`kc4G5Ym8IztOe>ad9+9PT&gOJv`#Vb$ zs21hyjIp^!)y2q6W)_2egp*E7GuTrc_U`MXycDBi3XLam#Hb}>=`@Bzxs(QXBQ;iOMgc48=h7q8V7qg zG7bUKf1{FDGax=_XmDF*jI7*{H8P@)YL4&{i*&YhR@v=uW_!|)A~SYXG`M&X7DYmn zCl)gh%44U7f@fH5hJtvwN3r_8P;vnG1|to+!m&)*&P?7HOOn zb{YNRqq+{7sXDElqKAF)5Io3i%YJx^iJt%SG>LiE4;AF-O{=xhRo|g z#fSz=;@LRkzt&WmVraZ#ODoy7b*{!xWp9d8I{d`3?C~K2NXJ0OsC=XmN_c7PIqaFL zV%ir=?&vCG0L489**Q1IKxuZ>=E^I7VNI;LQypTKhhr%(miBPpbrrR6*10D2XvJCj zLXw;Kg|UUqtU+G-;-PFbAH62k;hgcU7@br8#<^E~FYzUE#a|?ad1Ph}^5I`^Vvt5_ zMQAo{zVOW5y}#kVeq-L)@elspAB->5F4u=R#H-BVBQr%){$_WqURBEpG5-3;3Y9Z) z>tmMA0IMQ6H)))MXV+QTx44bKPYqkIO}@gFztO~32KH%H@ zX=*7hW!8C#;xXtN7oVhV<$Z9vi7*C%NjVndB*dm%|*xyh-<;o0&@h?L0~wQW(&S4M`~1%*h0w@~HWh zcQH{IM>2`(G79X*VDpYRlZFnx$04fu#K~j#fO`--JCKPw2H!s3AX6%?GR+&qj4T^u zwArNL7F})#14L&Ael2$0_18_`@g3hjz449TF#Ugj`Ipnr{oK#T-Iq_xk8t!j3X$UD zmK==_ed+>~+nRx`=LML5xk5)m^V#=IuFMAYz>C{DZ~Ep^znlZ^P)rk>lE~*{Da+8~ zxrQJ%b(jL$DcDZ2foOg znlh@)z*IKnv8*HX6=aBtp`3|U@p=px`t90LE+>P553j8-kK-4s)7tO z1Fm!CQL?hn$HUn=IK(9A7KXq$l5C97aWhoD`}T%6ydj=LcJlPA|MFL-XFmU#aku$L z@}$a9YTZa9Hgl?uk!Auao*BH}w)!7yn*vP~%`zkBU+V)c&GVP|*kAnXFg%He8K)JU;WDIzx&4jCVyna zGbLFc-26XL5C$2)*nZz1|MB#1f9rRq{qZbA9t%YP(}Q+%cGzf{3xia|BG;JAB)HUt^BcgM00 zgsyueCP3f{dt9E`-f+X`rf>iDw@hF6y4O!1{NM-kQ58S*LvM?pZ63^nKWD<7&%ExH z-!h(cn|kd~kp~+~{AY*nT;70t%+4chRRIaQ(uj{cVsjJ319#k+cgMc($bI?KXTqup zC%$DgAkx%f86WH9PYsr^)xo7}ogWC-Cf$;)Y=<2G;Kq0FZtyo50>Q8ia|A6X31XZmhn7xp7Pbwwwhlw*ld9cE00Lw zPTx1*bn|re-&~znIP>Z2W19f4dBwy2<`wI5B%GGANLFUHn%85p<6qCO=0kehdhguu z&ZT@c6IFu|ieZ0x{jszyUYz0w5!?>p!3Q49U%-7Xj(@)QQoRXr zzHpmSxhgvPHt!5a4EKo(*Qzr?ZDEVnUh$TX!DKV9u=Ae&(=sUI@d)#`oo6Yml~(CS&S$>lIB4= za}vezOOn6p64G&ug~c4;`Wz_2)}=XYVRvIb(5Gxe^ys)K!AaArUilT%o4@&6^7b37 zi`{Vx7=GP%Vmzbq#1nU?40cys;l1Ge3v&CUsN9`{h{G>=!?|rEj|7Z_G!Pu;I$vV6 zZg_6ecbqZc)~VQL{55D0%p)G%&>VvG0o;7q^`+5 z33j?`uDxOUwzs@_dgIr>ar*t=fA91?-~A7#U;5==oSy!)r%wOmhu=0GJa~`ZiH!rY zqq?8@Rx!qKHg}DB+$t0&~AJ?&}v zkpnLR%E7GoW+pj*NY22ywl$F0Szo}x30JhS7gerAs266rDJIbv`!C&Dga#Vk_3t}# z-}I7~zGS-S;*0YcUuVTr$a!?Yb1r*MzNqP{U9rkr%+56_lT}vbrnts9BV*|^YlGc~ zemN&X);yAnSy@-Mr;y{kq7gR-__gnMCmS6F3X%P+q?KkmNt(&yxf1`phQ;pH!w zE`83k<6y`$5`{h96!5X-Ur9NjsT~0(pc~6y`6wt%Hfs&@ut~RBaG%)R%N_; zVV2t+7GAXOjT2cO0L`=Vcuw9Moi z$pKl~N_`zsGBjoerN&jW6Q(^mb*bieUU-#DFl=9$yS{_ z{kPxrjd^l-^ytypUi1=H%wl3p9*W^;%506rBX!MS53y~^RTf-4N3L6ump+Ypcxat3 z=Rl~AEqm7*=ZJ+WX*u(*V}4!A9YL9QW^izz60QI9WO| zA2G!1?p0TPa{AZ*`u~XWBhzO;d(HGKzxpfj@Z@`Q`{b4nd7?WL27d(bFhXT>F6c=y z$4+EENh&{G9$K>uvf)0DHVbCoMB;SpY3zLGa2wnkU`I%;L*5j`z8%|jP{=P=TF}ii zGw2-60YdG`P1CR^ddPI9eCM}K-|!7@oZk7acTd0Zo4+-E-RoaDef)1e zG5!3{|NQjUx4w1y$N%^Tr=R(mpPNoT<>b6N;Ez#87ISre7cy^2qneC4WOv?q7{il? zw~-@LhfYK9Fr}Gc17UvmY;cF;IdWh6WtUH{|GL*t*IaW=Tmd*Tz2<9PGhKAiMbkh1 z(SJJK{pj8KjyYc0B9^#|cP?o}@K`TEwfjYGkLy4LL(64%S)bw57`CZd{<7D@$E3b;jrJOQ7Hdey2CNn#( zBS^2RoI{L4t=QeqRR_mN42?wdVd}DctaA^_Y!!S@-7Y@Lf44o0c2VzK1BZTA>{uFBpQcf!8>g_lpS zdChC4cfI@F)8G8nU*`)nZ%RHD>+56x?|;k(L~|9&&0Nk^M&qyl#;;Gm`Rl)#Cm-A)Td}vx zz>#6A*3p$q*Mi;ZYmI%#S#tzl{=zJ`6Ru=(wf6Zhc>eTvzx(gzoy$LQ#V4j$zT%a+ zt^L$b|K#-PPkm-OB|etacDLqZtc+^D6tUt-%ADp>yau|zWR}3><+W1lV(IDX^qm>5 zV!rlkUmIVs_>SqX{`#+`&wcKu>2F zaSZikVe61*QsqLdH5QBWsrAqimL11q_o7I*AmzV$g(29}B{k z=N6`2czW;zdi>|GD|zAWD^3gLaOg=`cE85=u`%wk4SBo@+CrayHg}pZg_9_vv|1e)_ul(^(~ti1AD#Zh1 zh)--@h(CVC$EUZv<=dun&N*lLk^l8arXTwkKbGIgc=n~wp6644BO^tX)-Kbi+^cDD=+wXzM5b*-ykt?$KOlH{5(f-sth>n{S@p z{yT4<&OYaCU4oxkDvIOV)bo(+{58Up7c6PX(jI0|zey{fzEpHLVeFi+@EsXGLipeZ zKQMjGSAWg)$xnT9deb+(X*%zM^YVngu6#MB@?oU-+K=JaAIp+8N|m&cKxJV){W>$o z{iLa|MwUh=fZXi$-S2)^+$sOQyov1xKlq{PE5G_H^JMT9U-63R>T5oe>rV6O%qna2 z=9bkjw#E`sa_&nZdL6h={~0c=IbEZ%&fjo)Y#hIM#0&X97|)vIF6=+~(?2o&;1B+z ztm`E&e#!K`-}gP!PyWJIHXmf2u);~uHoDYV6ksB0SVuwQU0}x3AXUs*0 z*S+rRrjz4D{Aj%K&6B1uasu`8FaPrC@BjV(ar(fAK04hMS3rN@t^f0M(UUJqo39Ke zN$||vBfjTl4D)ryc;v?M|Fu%8a3LI0BEjkl#>a7E7nFAfS(&u4^e9rpPm%M0t*Smgudey656;G7E zb$W8Fz+d=<|9$$-@A%Fgj@WFPwht$9_C6hkkbYC;#+ErWb$di?wkQJem*C z^7dHlWdn&$nJf+nPC}*`g9lB#0tqq$1!zlK%18cuAA^VRKK&`rn11S~e`4y4zbrq>bN+DDoJiKVEUK$70~cntDf_x7J?fpu(D0Y&&M&?+&3HyVGi|kK zIH>HJPKtNLFPN^l@`~xqy=TUkA`~6s=jPlwG{hiWB!Eaia12fAIU$ z-q;S``ObI772BQDOJDlZ>9(70%Qs^4@o4bbw|d1~&Y?qfqX;>#j826K{y`Ie0L)ITRe{xyp8GT#-I< z_mMdMl1(*a=dCrXt`q#61E8iU1t$TmM~+oAee}=%TyLb}OW&M`@%qFA zuCI(^-h1Es`_rY*e&)0*?#TX*cfBLNk9&Kp)B5fpv3efJ9-DuJ1}Y;#iOy^4XsS5o zE^MW>b?!|)E1J-4U2c#$HFP5hg*(=X)24hJz$6~`U~9iEn0zNp9!^x4mzUiQ*2&o3eK!d9L&8$E(+TJS~y`Gq#X-lpv5_{z|u z=o8>|(>P{Gf1%I}IR1=|D`{u$KP|7woEhKWI(YxV__$S59-rspC-4 zYjU(Ch=pt$7=lntYkzy%x5h}0t~kYxg?EzAdd9P+_x|4R<-5#p|F-XlU#6ZhU2(;g zakXiGe#fc%Q4r&y(vq?wTK@N_NFXEiHA59uw7%hh<)=UFG&<(KL$Y*~}FX7XW^TKub2PR==@@<||L>f{Cc z_+9;KQ&r_PL1?&pMvN6Nx2z5Yo{hYmlXdj99&B}QPUQe@%vwsI#3+1jXB3-5veUL! zY%+BoaVQ(<6~S@JqLR=rZJC5%E6W<^aqsy)xydB=HuK+H74N7rk`nut&u>G6!*zyXQzgSpdo zxdKbF&F&t%2i0Z9#^z&IP|!N4%d$47ft^WW+-2jp?bjz2{&*-I1`{Wjh)%=-JjPC= z!v-fi8oxUG?ce_0>8(HT{nL#%T%QNRxF>cTBu|Kk*&c|GPJSxBPxGsBGIdov2zFO~ z?w{PTn7Ie9W5h6Rj>Xt$eC;P~jD{jF9?r(vZRCT&2WIU!_|vq@^&OYzEA5*8!^i%^ z^h0m^q3N>AE}MSzpZ(}`<1IJFi}Fr=IXq4r#fYDMbztx=j6G}3C|WSKJr6Dc0++xP z$}WTaKq(5A^3MPOKmbWZK~ze5S(%Qq4CjFYU=8t@TfWf#H=p>M>096Y=IK}Ci-dQ@ zj`k1U`UBGypS&VIN@0iNmygaE$^VMWyjaYyyj(j7H8F`p7+W^=u!+$UKH^Y?cu5i) z+t_UfZkz7B^UgQ{d})$?_)kAPJ>!|rm|pOL7vx7N9B7=Y=H4s`&xPxd29)@%udKRH zXq8;!kl(_P(aE6Jt82hfG7|F{S2E%RgOk1weE0*?r#{7Z(7tneAbw%@nNNRu+7l=8 z+Ly^lSt*5D7m5U*5O6v=9))kohX^h`LbgS{M=;VD+hUvI*GPQIFrD&+m^WKD-FnmX z@hd+bSEQeuzufw>csG6Ch3Ahiy)XUXbIv2XBtx&7Y;{J8RU>C)ef6@4sply~kEWc2 z9L&RkdLE4vT~63({Op?(-)ynNIlAD>SmdvD@AV^YVMhQliEgYRb0#`rVsUZ{9lR)i{vjRr#!O^Z;#3{p*6^!XXdMwt*yf>Y z6++fTq^RvzHQCmAwRSv{M)W@BIYJzXhmZ4X;`~uht{Yf-&h~LWXMdD80uBSnVrFJf%a4Y(`@qa1QmA(|G%v6{27yT|U2UHso4@Isr#F4`oARK4 zC=M>i<=Ma3@iR;D=>^4lW#I#6;g$V{r5uK#b~+^fiP!AqZ#R1WI5_g}aD2zH8O@l3V#ZCQVk6GmR}!)S)mx1% z_1JnTYV!~q)I}FuJpJxFemB?82mbg2({KFWzcGD7+(+y)pZQFl{2J}~TJkBjF=bP9 z=TI4zCi%ia^JG0*WHCvLyk;&&B>TuSt_;SD)P?c!@Sl9(Px7kMwbx&pCmw#a>5RoJ zrdq4uT5hymbXZ#ZD;&DeBa^ej5E%hzWckrdwT8H zyf(g{@$%{Y?|=Vv)hDjXj~Tc*uQ)q19O6am*>x6*Kt%sZljCsEx{k0!l{%GhpfxY1TbK^M2$(;(OX8}oBg_O{#6~uam_95jC(C6^$C(~CgoRw`m#g1 zZ@19tu8)PRL=|qDm0v`0BKXXxF5}Y2G1Ct}{P1*ITvB}BAO2C?+4P?Hb=JwbGC%(D zEA;cpxIaj~Q*M6d4%IxH&IVn#TgHx!4Z=FtgiR}57M5VWG(J^fS)yv>Y{-{inf>AW z-j`R-E{`u#)2NmE1)Y4#-mFQPD3Z9zUD21Ug^^z9`A+VbXG3Al={km2g3Yhq1oCwb zj9BO7&3Aqtc<_Pz-qytzUYrl!$teT(WBG;v(K77@}ZC9x_I5!zHWNx;fLaj zyYHT^yY{*~*n?SSzpjMYnKK_)_$w16wWTlmjw_7zGsb2Shy7*Iz9=s(tFC=#?Tha) zTs8fh|MTDEue44-7~<0Kl-QnU8YyO{1wywxN7mC4}U1$Jl-|E^u;gD8sGo^KgwG$T>R9FbA5SU z#W?cGdCOvz-#k`6vM4K-BmGgEtX@{VRh2wyJHubhif=wRTrVfE=bdx@bn`7YXB~Xx zSbjMR!BJb7>VZL=&RjmimH#qstq0c@$WAag@$apV^L4iZB#a>^N9Ub)&h+p8;C<8Q zZoWBA+RvUIQNOJXf$NygA z>{9|xW&olkygVe>;bKV)VP>kN(8? zeEOugjQrsF=U@1ief!S-)=z)(`o~T=b=L{G69+4wot_+De*ThYeaZab#Y`j?KFJE6 zY_Tq89T<|Lby=Fw1^8fmft4GnaYlT`8K+PDN{H_Z*%5zy-Hy#S+yVqQpS$w~%#VNk zs@MtId1KfgdE~L_oc(9S7Z^`&2PeE+cu;)DMIc;6Z-*KwCnyYjgi;65e zez)F!SKRtv+kxz{jPv;TbZt8CNoVITkjhW%dGokpx(;x;o}yoHLp(8-WgstM6kDws*%baqhW?FEqD( zDLfu~^z+mC=bs(VyE?JeRC5liGcjkkIvzMRWq0)_uFjA5PuYKJ9#ful?vwHgfQ~t4 zw2wV|{v{hFW{ucK4%~gubboyJL-$g0R^b;x&U@1S{3T}JZ;MCVs>fRQ71!~+FM(j+ zfz$ia^Pcm(d;u$OBr$KD8=)$0#bRFAzHYhgK)ADYl#Q!iyLRuK&W&GLGIQE?s8{pY z`J{E`jwb{sf_xPB$LY3I4{(@4eA_R3UYSYE z8?PJOtLo-EZl0e1+~?;U^|^%2eoMWzW#0~a=iLXVBZp(V+Zp>(23C#{etOPxF3s=D z>aPE>hN75+!~)q3T^q8>rLYi2ZUJ=Uz9Vsh{&3z~ONnc(vkl^MLcI2J?>FX@F|G45 zHuWZ%;~ghlS6+E#yy4b^=)oNqyoc|7=&@&A`jivyzWa{fxaF3ce=X*APrOb&5N1B- z?SH%*;*WQ({^JFd`>4?OKhp7Eh;!PrTtB&38rOBr+OGd3yZFf)i*r*TGl_uPM)s zv_ur2QDSfmMO0o)6RRF3wr^>LABY?{c11uft#qo%I5Q~I$ERms{%pM%L@+RUrD?H_ zoU=UPbe?FOyZPM1g-yAKSL5vY!{L0h*6``MS|+Y%RWVdux(`e4OP9y?7P0uai}<-O zMQyn+Etr*`qAOb>R6ST2DZ6Ft${5t5jf91F*5>a>Ra+Xz=IXtkCFtC_aU%EId-0dO zINxAD8dn3)h;8u2XTK!(seF9LAo6?_FH+S}^*N_LkLBg;w(@yKG+SbqpBWj+&)$mR z5tGXPb52~XIroC|a$SkR>t0NXBw6`jcYJX=R$;~DrCx2xNAsI_b}SlBW4laMj2X^( zCa4yf$*^m?mW^8Wp1e2LQK7{{2sd!5#+tx{VzFzKX@Q+{N^oOMe~;%cUNn|3C_>%; z)(()*;X|IsK5@dxTh|VX;oNYrld%}leGzT`ASfe2lmuSG>sburj0tR)dr<4?X-D+}8*CzRAbQQ*3;nk3VPF zV~9(;mhFTEV}9>Gu%fkIxDhK%sTU!pKo8Fm&2>Te+o0H~O_m6z?6iK=rQs@5oa*}I0o&Zc+@ z(QVT9ElqiJKUp0)@{J9Eo8!U*nm4>$X`rFu6N<+kqc&#;n;P~SS*u=p#aC6{7Dwz* z=9{&EuQ`NNM%ct6T*>ybhTiD1v7hph9d$TgA&pt)#r)W!84#;;vJI|98-|JzOn!~U z7JqrnSh>NmK{Z!`9d~2$8FeUIvkg_IF=EZ*5av|6tr4dm4sJd$c-(`Gi!wHiehbCQ z&d@CMj&48qcAM>f*|4*T0CXqI;5ycN6T9#J4X-mKui!L*G-6DQNm1Lx`J`onJW<&k zy~m$sj_lzN!8##oi9Y|FT$$zry;bI@UfyzLH?Tz>=-CNscd0x&QhwTrz>2l7Bg3#1 zFBp#{mmes{g*#)#BJnIzK{o^(=H@)aff`i*L#LXYLB+$SrhJeKC5yRa>$6iit$pNK zT(+wMEsasOHBy`!cXaU}Y1H$xTt1R&46jD6#64QiapAq47*!a@FALn!MrzL0@x%{6 zQK|x5(Afi78L;g98k-R=u?bxnp)Y>(3hhxvS@Nat01-R4j2Js7F>7R<;AV!Qnsbw; zDsnBVP%~gYZ2Ggte3^|0bKm2aZ_jx^x6~nh%`x#<6YgEDdM_Q=aUIio*Ti_4aYe$0 zA5DEN*L+LM@R8DMD3zH{(xEaFl78`#?f0=9AOj(q$_ui&OTi? zm>}_AL#CJpBuDHLdRJ=9631wb07)~l`kF7*EQ^-P8yP-&&r68e6vy$x?lY6H+RrD3 z`C1oBUUJ1H4&+TO^&^1eC(c1*(0!YFrd#ORfLuJBQw~MvTaRYa*|Rhw6)2Y!3&=d^ zIHzIb+J7GV#0j9COf-YShK#;rVmK#eJ-W4jv*~hL{$3>*bH_0=o-^InV7@42vbhfd znLj7&F^n{id*8#N$2t3fM`eZeshfjH$fb1&nB8;^95x*w9Ni}z(ym+wL*p1}fHQ-w zJul1Z;kG17M*QjELJs=p9aLyxw_6$`ZZm>b6w#EMIe)mA+RXEKBK?hrH3OTk$sAEXvzHQnO^9>Yu9sXRT%CNIFID`OIMg(HrW6Tr9_8y^@$u>Q7sIm zu2db4-YrAL0K9$Zd+Xy_?jO~SQqso&>lkyA<+1xsxV5b%k>4swB9z`3=GwCM(%R94 z^09VQI*d-lR@CV1>)v*ZUYUs<;Ot_-24Oos=xN0xP2y!*E(@4?9SGzvAMezv*E+z( zxgtp>oqQOVs^I||U!vGkJEBKvOq+IbqovQKRF!BmEm?}okfpt<@WG(ZUiYbrI_HwD zTae4A=1~|`zpi@|TjsMec;?`D1)36%6kYRInP4R*{-%^}Yt@|ztNmcZ8@nsCO*+(J z&j2inDWzEW!*E++>auy!%YsHcNxMQzC-kOeW#Bljzc`VctNEluuk5T(?=X4{V%;{` zTm#t6@tl|06t^PP7Ugxjjsvf}B$>gC^jd$)K4eRk>8wbUjP4O0cg=h;NEt|H1`@U ztHag<8|!}dX`u9J<4$0|O=jE7xupltKyWZDt}d~o>7Q^O(Ysk%_nOf{N)oDKz=94d zTD*iYK1N|k4-6q-ku}D$AVkAEk;!3{_+(F5E`;;A_-a1nue`u*<&(Gd=2EXrh{9jz zU*c*cOk`UL56`XM#V&uxVT4T-bpUq;u6hw7eJX6XS+<{|iH$g!$J%Jn==IjbO63Nx z-IVXL#^fEdrX1{7I3(u>J96ihP6%NgQFG)BmVO@9e55p7GomP=A5D44vy7@i5V==; zw2YLOVu_{d1ktl8+4$lhmiX3HDTdjzNYtKKkW8*$b=6cbmlXbo@T$4##eb{(b6Yf!C-3l06J}V z>#{NHG&cDgJD)hAI96LHV{F%3x2YdEof+jO5E^X?0jK(HT4tJ90U$Eky>5Av<j2*^F~n#R)}k>#=Jz zx%=+Z_Z-V#yvUVLt$)0nx9}b5 ze9T?*Vac3ApzXEW&&)=99Q{IN7VL^(Bo?58my_dxtGV!;Dj$!)xXI5|C~oIASLc_n zvZxHqsJb;0pDi90e|clGo@|hfuk59>zRv_P&>QRVI)C~0xM*r@JpMFZs5Cn{iiNP^ zDT}n-23|Qy@=~6R>_g1b_8K~$WHA!gW0-o?jNM9~=verR$7PAgGZk4dP(IE{y+GCx zq32*dy|~2#jwZc&jX~Lq8311zTNSli@E&c1FvjY2zqHp}J16j#m67x6`mz}7IE=mB zFemnQZ=Cwd#&&vFj@A05pJuziA+{#Xrr=CT5MXq)pzpMM6d z$X#Emx4|@*FN{z)!uzke&r@O@eBkCghuh%Z00(wmCQoOBSAECYH1PTcMs6G{hWt4? zYctkbnnq+~R%G^rE$wE;-t?PfL+$4tJ$R4ZCr2ziw*R7!q`>7Lx0@em`m}^0D+v-X z+0Zr8SzqP>D+>}Xvt}r~0lCLfCdZGFV~+_mM@s>>fXN4#gQYxdbM&;!dyx|)(af*W zv6sd=|2Z~1&SS-CADFwG(hJ^?M%h@69<1U6D6Q_Ukodwt&Z* zBH2wF1~eZ_grs4zSpKR`$Y|S4qyKBi7dS7@sZkXd)RiaMe-9wVyGWC+mUjuC0&0 zebxHV7LcrwoWIQADB#BQ8)8$=AA??RjRh+klC~MmqwMomG{-hWMHNTrQ=lfOdNtzG zQtb2GBvuUFV^a=7jf&Hckka-Do8-g=v>#tPE?G!C0*g`0RFty0Ff-Mbd6cCju)QkB z5y#R}yh34BTgJhcb#Lf$VDlW129MSsLfQERr_G+obDU$d2P) zY+9~$-j}L!@|rW=l$wp5_E_>dXImd9?mtXt|vY-}^8=~5dva6B&VJbU!v z$KuZ6I|4T!hNj0J;kkJ`^T5ds>GEhZ@`F<~Xqn>>GtL~$U~L*kQd=IldR`EW25#nw z!R%*1^j*hBIB$GGequc0gge`Q{xR-w3$_m2pO1Su?mUsZhQ~cf;--%ILNR!qt=MbS z!iH%59I?zc4b3vgQB&B^12xq=ZnoJsfXvm-sEOzJS&w@*?D3CBQE=a-Ji!W(Q^`0Z zqI|~^jEq5}wJxvXO-XRY4Ls*fL$!!8AMD{B6yP?l>rk?Oe5ZJC49X%N${Tmt=E2YT zsDpUiiw-t}G&;pk_IXrRBr>qQMjewm#-eYB_Hdv0V_>k)k;Zn%dU!PR=dhGfA`|W! z91jWI$wLVAoUBnqj#+>)epaqQ!8gY%&@92QZfm?T%506+c+Mn1C+^;pccvaU_#b%& zE?4aFSrf;-$K!rJq>Gx~ak?}|n*&g>GFfjw+Gm$9{PrIqa%eeOJTNeNhsr+e$H$$u zckIx5s3V;m_(C+u_{vIFq1XPBD5mRvT3QQZ? zl;O$0nQ#DNob}9lgz>sD2y#7#to7Y;O6I|XJagC(+g)6k;P}lwMJ3d+46H#r^qV zTfWGNFqZls{RlBfpEup`Eg6&{!($#hS@*`eN5A&*7z@1Iwf4?C?;zc5+Tn0KE>1v> zj|Yh!na+*}Z=TL$UYxU_RRi!jl8wqbm$9ItiY*K_>x5p8Z8IaiaR^SQ^Kff>p4iO; zgLmxoL1g%)&*RgPuwQ)9MXMb}QSyK=0%lE4g1suUr4POwr+CbTz1E<$em(AZ4(12q zQ8kATJuvOrbK+PJBo>cbi5>FD{YUeJY5zIrMBhCv2Uh<>F@!857i~^8wio?6ul2ZN zk0smBJ?rk)+isg4i4*o6C&ja_a%F}!^gCm{-4{<@Kle%JEkM3do8zs3gjt4-$6Lf>FOJ-DyWW6=QTr0xJ$INtE*=tkXnM*em!u4x z^D64l@IMXBs$#UBzQA_3&evo26-(=Ook!s~i8x`p=iYnc`D%ya@fP0hNHLBbx!pZH z9gQ1sJ}I_4TKVSCg;brMu*EvEr+nam$WUpwE_JZ#RAJ#yCHCU^?}*J&~R*0bU0(srm+78e-IKUGBiO-q9XE z)`^orYa;Xzy6<-6wck3p@S&9_|ML z>gvy48&CE=tDe6#a*rbTA2I0lN5Duu7n#SXg}UZunIPHh6axrpGlp^a;yy&oYN6;S z>3QYs;W#kfnI{q_#0dwvv72Nc*j>AKOn2ORcRc$q9w~C>nfU^c#Dj+rT0ilQg(Fgn znd^nXksCWOFCL3V?sMK)+IRt!Nh&Z%u^^TM4r;n1NA90)i)U-?+O;Ec0_2)Pis4Cn zc23t`d((6zo`-eHDW?t|af#CF2fSVku+mf$+gr#nU(D6q5R(Altd(v(#+>-!03l+> z4GOlEL-!tv6ZU(i-6w55A!oaL@cxIV&s=>?JaBmbbmDl1p~+a6xxK~5Nck^%T26f| zvWAFDZ5)K{r)>*Es5a#`QcoiofL^ByTN(k(cAh19M{IZ8$(!dRl9%H`u_K-Xc`!~u z9((kfd{A;?l2gQBbW8}(Q5W<|gY}~|lYOkGY|c#sqh;Gx*UX4;WFu0@Od_i29(>@z z>9$+%h=+>DmFU3nhn;`OoOs-D{VjoeC|(SBR$gYCoKVa@$a%~QAzH%V8C>i~@(r(y zO%4bHJmThfTN!L321m%|z<@0%4;?-{9k}DJ+-I_$Fbq@LdB)&%*W5VW|D*?|z4?4M z^HM*Qng{o(R6$wS)|y&Qp5Ihup)$HA_rpc7z-3({OWfQdE_Wn97{~B~2k)D9@A0LX zbjZ}$mku2|636h^m*N=CmELUBF?hVaWzR9M)dM7J3SAz<(-ulQbGZZ=efGnamr;~Q zXqIhLoel9&JTvZ&+wW8wNiSm76!o5Z>h9^|a#{J>L_f5Cnd|)~ya_4o0OtPu~*r)N~=GJBF+}maf#z{MR zaMmHyj9q-kse?=^xRxem)Uk|bLI%ff0Uc-ssZgANFhLJKe0`(9Zj8_Km^!_n3kV^9 zyaVEoHiFElGUlL(eH=U&m{8AHWSTiNsyxJX+NmeUNz<;}(7?_sbhz$}kMACi4f)C| zuMQ25L!gcxpB>TlxyDdsTyTzGk6FPgz3cHf4P$|=^PzTZ>)j8R=#HOuPp6%}E8f+6 zej-xrs5&r5=0UqV4*2)pd*5`^&9{X|&&xi&SB^x|p@uOHKi4OW@#d`=4jvk@!869L{2J~(s8 zXLp>m-*Ly?amC|v!zR6!YzH)IF)!nuzw4t1Lqo>LvFK^GGk4gH>AoEczK=gY?b&@w zTs_mtx?aDovf_LFj7^2hXf3?Iil_9fnMJ^0{5(-l{63};{R{z)zH*I!(BizvkD zx%6XQm=f<=?c4ESXzP4ki~F@*J|`T1(sbHs@zn%>43b=0xVBT`czEcZ!_!SS-7?}B zP-_f1DfE3 zOy#lr2Hh&wnaI}4)@TPnZ*uFrN34BTV@{>RWqdFx5}j})X(&$Gdty8^upZ1S0wY&+ zV@MJpoJ>hwyOwd@>WOw)UiXvL(K!3vtGZH8W}32>Y}8t(804hp z9L8|fsU~sAM->6{J4miX?Ay0D7*8JF!aK5NX-VwpXxm;nX2c$Su0d)nsW338iZvc2 zt)hYC-LRXgab;+ODGrdlBURW2~*Y-JC3!Kp0%M1WgWv$m42pDZVZWB8O?wcl$CSa4rQNBOxB4*^KSgICttrw zWSioj))YC)pL)59yKkSjyS^q>M^#q*&Z0EtbWP&#cI3);ZO3n|vv=A0>yoY62W0vB zG_L|D1kCcf$L5mg`KyBvRyF&1oV`z+F#2>81LIzi1Na2VHj@(2ZzJ&Erup&VIH&;j>+c=KMQq7X?czp$px>_Uqp5y?2u_nc1Pa1Dq& zKzN4e<0LTtDTlyBO<7mQ5=r7i-#IdF@&-rFgX#g>8|#3?6;T%Hq(wts{IN7rEY`}F zkVHw}V{IoxTpz{B&(X|xtll2NEJx+HNng60s~K!P{c^5=^g8-TTcv#RBc7G7*~~tN z3t_2SXJe~+kGfZRbn6=Lh=oDZ>siXO&R+3CS8>oTd5r755!IJu+>#SkV?gv#=}Qtz zN11n1Uu!d@Ajy5H#e=8M!6uF#TXNSdGuG=tMa`faNY@M0Q(IkmUTVm zT6xVl*^TNW9V3>0VwcW7Ms#26+!wZLlC6)OJ16$mT`;>vgZLFXQZEEIDy__OW~BO+J{|ifX$| zH9q-Ip`9m%q3_Lj={!sFR-RbI@7D=mV1Y_}Anj}Rtr}aBuvUp3d#|+Wgb7H=+;El(5e}A@BhTA6?EnMWD<n|9N0dAeIbz^2T4dcz{H3PPE#fAQF z(;R10?TTYdu{%DR?ff@k!1vlMqu<&pZs#&?90zja*7oL1j9BJ|w)1R~ty?pByj{NK z*OA^&w$>~ZSsSmMJ?izKE4^?mt+QtB9XdXu-0-F>b-S4PN7dzj}!x}))>Y&7}07QNPKXxQ!&I`BD` zoX6#%rdyu4@J6=hLY&~r*GC+Kt?L3{A-!}(nmA3WeNFMW+u92#e& zT7-*P3PS$v*%RMi%FjjQGf3>TiKqd;2(eF1mp4-6TH0vYIK`Wh$66iRc}V{S^Be9R z*X2#@*lFv{L)tHXd8~NHvTYa1KJLLG(|XRfyB9*suIn<^_1J#f>DTs6xJ|k_);8PF z>=X8UkqZac*KKq0PGt08X!g-)^K#ASv3tC_oTMmPTi92654X$3zV40xLVd?~8NcnYj8S%rDn4e{-BVcGV&dM4N z(ZDRdQoUiZL~69uZEzZ@!gWb?Jkj{uv;S=@BmdaO`M%~o@hic-@iiX5@n$A4PkrhI)4Ate zkY7&r1kF($J={26ur1FvsG6N&&PPA6^i1)k*~h)KT83^`JJzso(VNfy0Ol4en0Eml z&(2n;U!)p?`{O6&*IaYWbToc(lQmen)(f_UX@hMtlJ^K6f7{4%^L3h8zjZ z7>9SRPOy)At|7Db@}#$8Ltb!p{}ChYAs;+=Fn-Z--F&>)!Gd{aepK5!tsMKnMSO4& z#^3(^XT}$$_l)nyIItKHEcw*4*8HX z#E^<4*LA+Gg^7@sF_1xyQviS>{%E#qq-EF=(s8z<+tkdr!Io1Hc3HkFZjLXr-!^`w3ReK&n1edA5nG*U7s}PZS!aqX+uEOT z;(Sf=|7Y)AgZDVD^UfhbTnG>(NP+|jUP19LDiS4G6kX+PMUwp`wI%tYI8~7yJ5`$x zTi!UyI%`YWXgA8HHk-<3S8<$`EZNRVvL(6VxLmfA^4d`zI-TUFFoOf&X;(InQ~{>7JRMetYJf*T&eHpc=W1u3|06t|sKx z6}%dkCv}nX61cO@-X4>tOWF!cn1-HC12)T>9kNVds;t$$s)4HODYtr;66o;I<{rmqvX0|CQGJezX%+2>4qFWDP2?Pv4TkGfO%Lx+y% z`>xL2b#5L&_MaV&uSk}uHtHSY7{I1M!*l}`%+oR8n{6UeAz8KyJqlwY$0xE2c3%+h zwYng_g3Sv-k#o^=PDyE$nk^1tiHrv|`P%x99cRX*X?veEfsmazbzrNEt@X|qFAr#X zorcELoXDuxBo3s5pR&1akIibi+6?YFj(A2)Zqwk?_s3*|-@$1f<%0uHRaRq1jt>tC zY75>R-)h^iQDQI8{aZ6IqaPH5d57FwRqsBi{FF&*4Y}*9oZ=GFZF5Y6d&FSh;$M{y zz1u5pgQ#} zS~=xg@`3faQTb}Q#v-}fFy~&!V_WBg*ZT>{XwN8nzr;}$7v!^c?1)z`_ygI%X9Nl- zk2d*ff*@l&6I0m4ICbdIu^hv9ofG49(>S(n6@?s62_}-q*5qkAX{0m8`OFsk2F@X~ zSDJ!4oCOEmu+*V%f3A}|o*BMXuy-7kon|qF(7eXGuR7iZ@&w5*ccAv}-5YloHs|VH zs*_xOUd>t=Yv^k@YhWp=xLQWJwC{C~BY@lv8+TA6KwdG}7-KoIrG3${_A-)Jl}^Q5 zs(ITnx_p2;a+ND~wG76572hVK-M|4@?t0o34&?r`vFrAO+%j?!yrdFekA&ZKW@|MH3o2xfg`^a5pTTB{)34Bh1+r1zjI?& zVhKRnn1kHqd2!ZuZ0rko@|^tOxDYrYgmBi&$3~M zRtcT-qwSK72#5XLM*X#HrTscuTMt{6bGskqz598}iZa!L<(W>5+8yHfn0G z{o}_HVJnjIJQ87TgWev*goFf6n#x+)&=2m4s%0abi+ya>j>k`cxmv1%=t3r zc^reqCD~zRNiE9Hjd$q-#e=TvQa+0QstM;I7To%_QB`YK=6mpb$<`6pKd(Jhxy#q80OC?m<4 zRQ5nh+1{;7Y}+Jr#UgL1^Oe?ucQtJr7Fp%*^{Fwv1%gzx{M#sz5E{ofe z+ym!@hMVK<;;g)F*{Yv32uM2_x;3H}YwIto3a>@Rrja*InQe)(V_dNbfn|wp_Prbh z_W>ttFE^ZR?KbV0G6!(oes&}ta1!5Q@WogWp$SQRn$tjmr$qO7?K5#*D-1F*fErO+ zMy`PxJxQ3McWKz#zwp``MUC<@4cWXj+NwCD9c^sGdeRN4qjXHwYA~+iZAY$t!O|=^ zadg%Xt&ppDT`+`KdDu`I7Us^zbOjC4G%D=MUB6GD7y@4$jaU-znGlujCPY}8K6 z#e`?$73 zyl-KyHMiDs81>E8kc3kH(MCBc_Us%zeofhm0^B z5;{G7-kMN!U}nh^r)y5Nn##pG@#15ZslqCll|ZWt6{c9U5%qWENgp_5}$1xE4)h^ z*M%LesE!7Yq{b>TJd4FRP_^Cii_|eWcSNo$UyWZr?8WVYQArZVWxe9EceouXR*rV~ zL?Wqh15ZTKz>S=INQH+L8A*~kRvL8TqAosbl-q};j>Ghj|>9 z4ZM9IabMb>(9+0blvfKWRR8%H>L834DOh8GG-CL0|IXo#Z;7`YbS*?i>I zyKJ4gYaN;EOFQc<&pbBE>mzdeTG~)wCgYLYxAInN0OQD&`rKlO=B^D~<`6SsGUd39 zA^Wv;Pn;a%lGJsRQm@z=q_OMrhHJCJr4@{Y)y2HPwu%F&rl`R5nRxMBZ989agFY|% zEw`z$)N7eKzWF09b(UH0ItD(Nx-1H;H1R6=6Y*oY&p-cszS1B4qmMkIXPPQe$niG@ zj=54gtVdjKpJiC^=eV6$y#dx4-))55q5|>PHp>H+bhbM>}|lPJLyhZJooda+M6( zoKum2R5W8hRBQPZcB3u4%QjXH?4%EAILkK0MJlg1sdJ3-u(XwQj#13kv^Fe-Lp>|` zT8N+Oi?S&!_t?Hs9b)TT&h{a$OABsrmPq{qHk6va}JO)Y9EZQ zJGUGx$pKhzfpIOQj_tUVj2>O`fOD#4WLa+pwlkKc-%b2&-5Njj@!WLJ{(IX!+<24d zrZ%9Zku2-UTK!N4!Jp;!>w48&MjW+F-F>klZ&)9i#-$B*6r4)MJkApt6%A<49eE#W zLO%u>XpL7p;;~QyD6Jm+lsq6R5VOPMG-RuIFmt|YHOj__YxojEbz_{{np`rr+Sgdn z1GIIHmxooESm-OU$*20oEJJ5c;LYV6dk;WECO*~Kg0QXY#DKNx+K#%k>$U?g`--s- z=W|~JsrcN&c^^0i(6t@I8rJp6eyy#s%1V7DUQj}K|JgS@124>wncey5!?7>SEe}RI zK5<(*a_Psu8XCum#O2lgvu4CG=aOD_YLEKEeufOBQjOVcRW|w#{E`ou`$tym_bIrM z^6@)4)3r5j9?mNM#U$;iQt*kKJ_ICZojNlSkzjE%IbdgNjon8e1Wav5j7 zo+r51(#BY;%;T}$@@2i_T1<+Pjv0}5C&11BkGn}4Bm*;*l}jbvF; zh1hwu9q84P?a@%SeMMF-^wq|=ig_s+I=UeJM1d8UZ83r3H{$Yva48x^RD#$is7uiXPg19@}OCpjA^^K`x;=pE|UfxB1~-uo^z#%|PTJYom^Z|Lj*RV+bBmRy(1zH8nM1EFTut z&%le@ZIpc2s2{{7>Cnk?c$BSr-gZMvNquDB^SX561Y!I@OEz>P63MVolC5h4Cj?u^ z2gc|*PFQ66Gs=0jbnM8)EfkjGS@j}BZLg6@l6~cpa@UM=jz{f3#euJ(Q*A_OjdCp2 z7qDA5_op5hdZFe%s)hQ|vG^!9p4|PS^4ve{#!6H9s%`bD^02jsfssyaR0~{I4WE`{ zHR?ku@55JTSBPnE7TIGv_&a_k8~mw{YLzU@)a$rO-GA7-+(OE}M(%{3WL#Ee@uws= z#!@j~wX1qtEpfGO40*L(meaUPOU%Cu&tB^ra zXriXN@vP#U9^c~2Nqqn_kC=EfH@C)Sw$>L;^T4}2wml#?ZgY7sN}Ja5Q_Z;YjmYOx z>`0XdZcxtAJAu;$g^~yB!MV=HGI8ocWc=tJS$+T~m-W30OUrSDSKsq0NYq^gf_r>t$;{#5|C@a@x zBYyD=+~BtjJS1bVv$rZsP|;DB4{R$^{w*;Zb>p!edXZWtV_)W2CuY#Bl&ps{ zc^kRq7$Bj_ZQ26~u&HUUx8zlyO>^H5`Nj+xVA# z-Y+hBwM&yU)&}d1Qq|RR#Urnry}Z%H3F8)G^3*Z{J93_&w&~=pzHm-eW`oowjjm;u z!h^^Y0qRZ_V;OnfAyvM_*ZM{_Eu5sOc*@pQxn&qw?mS7_ChY@U^HrSKB-g=WR%4e3 z8y3mga^rAo9c3q8XMg0`qw(I6!}*S+ty?$8+jF0b_hy_KzgoXDSHt)z98yN3kZhj$ z(nnSH_^^vVzh4GSjnnONuX<491gR;HgC?@yim;t^^5ednds+2gndF&CWpW1CoJPss zwTL_qqCiKGmgWgw8jzSa8BOje4~!#{0e%OQW%Q6HMfPEO>NQ6351H93#y>NZ91;I% zEjIU~{VyYNTX8797ENXmUuzdQUZLT()EJj>4_{~+pFxq=_><4S0-yZCyKTiRi_7-F zFBxi==h3;JM=Xn82zWi7#gy)}iMU!JJeXViZnOqOjeQ&swY{LkCam_`XaRa9>0Kkw zzREVrll#K_9x%1fz>NN|t@vayT4FB|Gv`UD<-Ki@1q43ZBq+^77W#}X3==~=46t$3 zW=v7p2qV-+m;qNjVjg9DngiIryb7UOuuP%adPH;^?#(f671 z_!-besnRc0E3TJ%>Pvf^rtGCAPL8w^Dry;bk_w3O(r)QItR+fdGB%T?Wg`PlCok0| zMxHc_K(ZQ&+PCJYwo5Z(kQ+z&rTi>ys9R+*rVHC2Q(t-i zE$Xe>?X#YP)T!y&dp!eT*VEXLmK0n=m{{zzn=bsmE zaMk1~NopJjg0SwR>JK#+W2ZXQ_qGIqPX-U_uG`Le_T!-IeFhhQgUJ@;@-zlJ$%G$T z$L)&+KUVtub1&rcXS@ZNW{3%U52C~43-O>o7lVA~2%SPezvQcu+yOl@$2CRl;Va_abh>_n+wJYKM}vrG^OktuOsp=lkGDkG z`Vq&xH2P&zww0#3UwA(mt>MLW{A>_kfDoq zc+HBVWDMch;`JfOIKDV0IQH3RaB=+eQrk1)J$~6Hj>R}1_`Nvy55Dk1th_~<2_t2- z5FPyDqvoU*t2WBDr1Fpm+jk??sHh*wM}^p(=4GVT@#}K3rw}2lz9<8?1$YuUGS`uj zsyw=|8?M84&W3Y6i5eH>w1tcSQxGjm@>W&Ww~22xU(>8ihJ`<>NlzYt=EWv2Sx>vX z_toO7#)y&y4?R^xEq6dGSZ8DEl$`^sW$ImDCr%Yad6{g4yke=_Ipvp4bRO@k%1<}B zvzmF?c_z%fMMK$+n`q{%>aFm>YP@-^_rcOXX|*4CtgXSJ8X=KIGT}9(1DS+tOpzm>)dW32F{oqc%qHRjvt%;`cM2=yqWdlY2TGs zPIupZ*R(kX`_rZ^(_j3H|JAhbs;j0uzW$Brw}1P$^P7JRZY2Am45v0dR3tqqK1V-n zk*94URnlPSa;Ip8HaJ#?q45Cff!3Ugaqgu?D7~m%##R<_VTrb~>UQ<3u8udjKOGay z$21{Iuu#Tw9G!>@+2vPUo~w3`Jp6E6BsK>b(J3N&fOmD>aN`ZrQ%^lL9Xobxy7ZDu zr~UWtj|ompxZ>E8|IXU#j;VD+;~RZ7E*iF!*VCq}ufBSEB7W-T(4j*u_7M&3+q!LQ z{3OJ+@pA?T;%)5P^Cx`nx%-}sW$@Si6hDCwcH85pZmz!in*14^#~(ka$y0=PBHrqL z*=3hS-^IlH{`;rhyU(A_jhDI}h%%?QlPrn1Xw3n3w8bTR z(!O@hoZ1&iIWAA;e%ifz_w?Wc52hdd&C_U|{W|vaACsnSTerpJi*NNlH|@Q6Z@xqB zzI*S>MFm zpXn2&tFGFY=fNWnKQe8Pfp6cHmrnQIcVA4%Pv$-tZJPI+ zYT74mKQgyt^p0CM_D|)^=7+%jzpkIVuJu)RSXels?7`TGH^eCr%H^(W;$>F#yfnPp&U7dewyPfkOa*Jvn6wo^^pyp|W8xa5C^k4owSOHQ(X%9c?kb=zi_ zLJo#Tl3D85qZMsLTD;W8E^X|(0M7i zp4s4#jQ5F~P8~ODVy;2bht#Xgc*`A6Vp_yimy@C(;_cmeLd1b`=;>#sr=NN{JA+R> zM~@zzo_PGp9FLQ~_|1BYA${24n%r1a-v4W0;}AfZMzW-@#tACRI#yPGw5_>GVV!gI zlzAP(-~Q>Jp5FL|H%#CB<~OG=e(}rG2Y&GvV_-Wn{lkCwPp11~#fjg`d;2@yF}>?u z@0uQa?C~7TY!64}w4A)A87=}Fw>I3O$}>&_bB}x+Gj3s%L>#g+cC=p-wk|2>gwrrO zbh1i)bnc0hC-S1WXV0FzDCDoE2c+_heGt!s#iwB|r04G1m9`mUfMLG&AV`A{!r+d{_0gOs1RBNvJ<7wGikc9>&NU~G6J{f_);npiDdqsRA| z@eVOKStZ-H?aVZVC;c`ec~)#E<6^t}{N3>rI=f@yvNzko0SBJdrSr}`FaFM*o{!tT z+qdt?pW49>E1Aigou=racYEAEwI8IsHhA)L#0Vb~h`4z2(-{0j2IWj)hCN*TrEMte zjk@*+Oz4Ln>{V<1n1qrccT&G-61;Qg&X^ot5Ro_Xf>>B0*x%=3|n8A*2Xm~_pa{Z16wZ^7|m>?3}z>DrhugJV_j z%s57N(2w3nNr)C(_Y*?*hrH2_+z&D7xi}_HyqgYROmc3x;l?};o{isrVUOpxaP%oWGb>yTG@r8Mr6F??f6lJ zR%Ck>IYRAcr0SuH4;0n-6DKHe?h)+W=h8{yEmmWs8$8yVcjFwSe9!a2AUXBe#fi1f zc3CIrmXN!e$7viRmT@i|JN8_xVs4GexjqDO2%#t8qo-CzXMNYT0+2j*3T9oL)oz6^ zN!WxY9m!j6LrjjgB^R9|c6phjvpKoT$ZN8lWm)%%6BR~ZgUBIra(S5>&zY-x0k&A1 zYoRU=(h{ag*S3c7_CUjl42rA)U$$PfK+^vB-mNB`hzYs^tS1(Z+px1pZ@4m)2?%OPZbF|#v|m>ks{ zr$J0w4QT_1PWon(XQKN>o(9@c^axVm7(I|8gmV^8TtK*ez(k1EnDfs+KL`0oAA3}{ z)`EnK3_lmdKL#O27FKcc-CVJPv^_3v+^Rsw?XrO7C-KjJ{`2waKE6d67u(xz`)poh zxP8HK#YzpUn+#$cAEzQROxW9|B0eRmkcP@vstvy+0)2 zkGMDoZoBQayr?~U^x2p!-xrgoZOOsLedRtSMlNvl$AJe9*?i60-l$BbAwx4@ow;bg`SS3VmRZGdl6OzaXL?WL`> z=dQc&qTAaou~XSjV&o0{>k%f<%pFZ>!u&L!NdM}p-m3xZzdMm zE^f`mKlLkx(bCIKL(Qg)e?Fk3Rw<=9_Q6dAcH2WuJWV ziHw!wli27h_9Oj7pXTu&{Pcx-n%A^!njU!If$6&Iu8SYd-5IOp$J0l0!=G58iH*AZ z1ZnP?mSZD{N~&R_eoPioC5zgvSim$@8rL!cc?CuE;zLfNUX$yq974UE9Q(w?rkAS& z%1vjn_S+OI(ND+NvpL48ZP~Za#0Tc@dE@KjTJZLq0Dt(Geq~}z;5L8uObI5B^B~;N zr`(2KM(kT`>UEoVuwSN>HGJyQSqQ9XoU+rNS#q>G7LIydZoNKv2%BCO_EiSYDNmeC z3f^SRHZ#kXxiL%o>d2VLS#cWe?+1Ff?uBfvNt|PwolkBagpn#nlKB?BZ8#};*qKj@ zKlM}p?eyrQk4!)H-~Z3k2j2gWbGev{%)WhB#!32M+^+h*>7lso!l$!e`sII}j*=$` zbAJY}eVac-nYtWBB-gVNvR+bNknC&x-(` zwqN_Y*F~S5m7m5L?4OL=WqfOq3(|GhUzeYt%gc0?S+ z!)-^NWnm)7tw)ySx5fnHx;PFrSvoCzAC8OY{`6gkB>InT=h$Hti;FI|S7_sf7hagR zVA4N0q9oAK>2a~VBED#_D9$&7nh2=LCEe@Ml5lAN}+12&}-{!b1V;R{HF#!SN%?Jmk9(RB?j8JD^_>770&7{6F{C# z;ua&ZeEp8EPv^$!91{(0-ClIjMR{xWo8S1xbjhWcWF2lMkh~oC(MKN*YJ0_xVwOj0 zp$q?vVYHVOoScM2EYBV}5);k4r*n3llm6(-n_lypygh&3xqGso@3`ZR>9Wf&i&ea{ z;`yWJNeT7Uu_IO? z^MgW66kAtiJF-keB8^tHatN5jJrgTh#C6fd7fs*(_P3`qV)d5us3t{-1V-tyUlODi zNUL+cmK{S{HClRGoa8ED3{fpKOM*3In%%Vg%9M1x5LjInQpr2)p;(n|1ZD%lIcrd`r35XPJT>% z^yZS={#N8ok=a7&s`HG^F%rKO~vN-SsS~zSrWY$CFGP%ph@!@)!#-{f_h4}v?@BEP% z__fS`#YMaF6Voq!_*bT1hy!Wgl~=~aVaxQ1PyYJ!%fI}8=dGIE@qjcJ4hEu5zVK_G zgg|*+y~k1X#uBThmr+8V}MIx+kaV(jciqul{NGJ&z)X;fHK~GCDZK?CIm<0 zVs`B4vFXXDo{Wk1*?H07*%k)tGvl__-namAQ9l?fE=*#$kT5}D<%Cc1yxf%MjCSsf z3sID>x%!&C7%>53a=`w$J|;z*HpPV{E+kCmx&6iDh{+b|#v5+P6_f)9?$1daw^^>f z=IZz~cy!u*fhGz}lz3L^=&_^IRr{{W+b&)?U=qfJ=)U{zjRv0<&yif!KB=D;zOT<) zhYuWhAU-G@h-YWcnXb9!+Pv`6Iqnzb>K7(XtW+I|3-MENTbr2AIp^$bGkegxoAZQ; z0=FjNWdg~hj$2IoUUgO4Uv}wb(-oIrk!`*I{`+F(>akeq+>?KNvvW&K&@PV21Oxd4 z4?Y;rzdRNbwLLkZIDYJSUhJ8?@r=zm(eKw@dtFXIc(&-F2OrAg_sT1;Y%5D~D`-z} z1s<-);#nFd78l1wSm!mvp)QWJH`^a=$cYDe{zK7Hfb!UjeR%G9=jt{sw`$|>yjYQA zLd~(lr+RKjalxW*SoLBxl76FqI0nv-eZ&Nc53+r+-;nbK z1YcP=Yuw*N6)vJJC#F3Y?aAYSi6MQ#heK9RdHxK}BhMa*;7`S>`r{M*$Zb0Mh2xe< zF@8AS`Oxs#qtWNF&)E-N#mXKCU#w{cNQCGmK3j2dUVkUn2la-L1G$mwAjS|=J-fKf%g4hQQKnC2$q@Ob6; zlsneyqw$5xeuR=dWldl!hPRHbWyfI3rn4P+wQVrP+prvi_aAs@diT43X1Y9%1@`gt z@j+sLe0ccU?Vp>TjSm>l#0Qfj&mIo*WXz^zJi+1QqJ1MrR^^EeLE5g#aHiokLI^c*37{r~3&;`Y?{P5{<};D7ZCAC3n&FVDgKLm&Fr zc>&}h&yRlO<2fkutjasz`NPxqfB#$Jd4+T0Q}WK~zWBsEowikj7QVtsji{FKPy15V z6v#+w2Q?HPNL7|pgJErZ+SU$(C~a3c20xg=ON~_f5laVNRmBIDX@s-$*`I zv!0Aw8|Ycx!UvP5Lx&GdU%&m1Trs(7-@fGj{1-l-69V4`ydfr2Ojej!a0}=#lbD!j zagk%CfeSXRVSh6j;nO*jGvuryZj0le_OXif`OkeWCqmpNp{+Muf5UWktRNhTcK8+} z?M2Tm5+*VC+;dMpSj>aKdt+6I$$$jH$comk;9})R!QzdiV}S`u-a17RB5q@;fgCMuk`?=lZ(HuWa$nO0I2z81 z$`f%rid$FoLr!9$juyerZ8~I3%Gl?$gIk|G>`kBF@}^s2lJQioVzS!#&_fUAS9$eRlK{QkM zX87tBfZ~t+XWQz_Oddzp`IR3b@j$AwE{H9sz2-H4AwJL@h~t-i6MfkTiD${3 zGO^FLj@{0exUQdBt!ZlwKCuYqY>p}99bITQa#bLXGV>*VT|I;F#Hl)UbdXyPfkuiU zL%$?OMnZ0#IS{GbG(ONU=qYqIFhT7r>&UHN=AEk)z|hIcHJCqk@bUaKELhw&iNW;m z|BvsEPqPh!knf9v$e|M`z&Md6$nWPDpx@n#IM z$+%)uKx!rzRpLI$3|Y}v1BcbtaFrZn+HAg z9*p3#o-#W5Wm}mX4JenLR~cpTSKcm*!TiMYahoG9P&~84gn);C={GLMtR`_Q?zy-H z#J=OA!sLWWz|mNlA|##*$bp^bN#cUVvlv@qlElP-frwB2m&Qs9_FS03G9hK6fS!vA z6MM>edoK8Ij0bJ=Yu&8_xb4S&Vj$#U+na8>DKA|3elS*AxJAV$e-dR@ee(85v;&`T z^R{~SF_SQJBj>`+#hO))c#%Q&GB|E;?~Rod+Rv(xUR|MEC`<@hS>Zz4r@-MWC+e{x z$4VG&Vl{-@lH4ZZm}3&a>c*RIeRK9N&bCIZOg`x#ZYMIqp&xmOo%q-nK90Sw**8x< z`Bd%$o}=OUCypUjcGyR>k64&^GI=DHn(Z97ChYfZM8UdI2MSNTeZhtjQyc-l9zbcPppt~ z%+d~y8R8PIZ6jmiM11rslR-4ZLw|7`f9qS{N?&|qj#VOVQS#WsSHJpIwITLrciv(c znf3?%)qiaDZAFd?ZZ98h-@Z$yVQ35CZ8sPxIYyPe$43}rWDi6%20Y2R$~q3KQ2T-H zK+bDJGZ2y)Ck{L)S-z|~si?D^9led<5P z2Vy<5$}^pJ#G?V9{mgCCJKphMW0w0j3yTfDUTF;AYE0d(6*vUCtof;J>8_K+nkHQu zO6>3!;LcPF$r=LkS_Wet%A{WR#0jB8uyJ*2gNiXxwRIW1?QMf7XHG=`ekH905KNX; z@EQkdSpl!}6=O&y?wNA}lHYO1L-D-N{~phZ?3q6Fp%3S$`*;5MUx{zjJwE-L-}pB< z0J99u;6SqPth5aWfRp`Z9-HNSIH9r0Sg6DwneCDXK}!rCq&^f-oq0VN%UMJ#au(RNn1@`3brtAq>sd2y?Xhs1ff zTzwnoNf73s*xH>JvuG2OALQKj;g%ySdGzg(xJ|$c+?7{cnHOpIMeZtM%RVXRA0&8- zjLFO1OD@b;N6;_a#-yM5h9fH;$rW+n8@}9M)J>jDZZ4g}EwATe-}6v;OdMiWtH%>M zArh8-LqDcoA*I6Yq(bbf<3GH{e$7BsO+1|Re>Nz!g)9+K&pv40qsl(v7-3R_f9kv& ziRZ?+1hQ-_{0;BCyV&w7;TiEs#LzOPlYGPfp*QKKt3*a>YRdPxuHsCPesJNjPtcdO+2f z64Ee~t1gY_g4S0BXa44#s!d#WZaMAVdG=Y;r$2q$^p>~Kwx6D8=MVni4^1EY*e7GM zv?DLV?|IL=^V24)2!Hq=esB8aU;4;&@bM?&7R|k}3Uyh2!o+RoZ812ryoK1rrPcxi zXQ_uI+3MJ^Zg^@EJ81SA&>LyUq!y#g1i?@`Ooexyftm@;S#djq+gRMH;MpHO^>g84 zRp3px#BH|=cE`ib`=QH|-u8H<%xVqK%&;`hg^aJ{bK&CQUwm*OyZf%YbHHMCfE6EB z8~Vk;gn{MxDsEkI0pj)wap0eeA`=#Fg>c*ID_{P~^x)|aWK6ey@2xq(%Lj=ApS_XY z7MrZbCW>6lxb?xUJT7V|cL(?7mtU?GAFzRoFmiu$`;L`0RuQIb)au8n7`=%a9(@!})n zNaB=cNt@8cfBKu}mAEi``qQ7zRWVkYF1q!5^Wx7(Hug^Lp};$7kGbYNj+=19`>ZsP z!F{~hEMnvK66Q4u_8Sx5Tyep$@%zFLD}7-cw-$9tvabeF3V>t(yu=0olD^IMD^8Tr9@!l}FX=C zyn5i|HcdwHP2Y2_5F;0J_6xV{G+~rIEvShRLjq~?pKFjyP5B%cvxBm7|P49Wn-=F@) z`+t6V-Ro|STdH5r6=C|4#F+Ctcl>UyT<6Md^uJ>@pZOg}IqbV{V{AiSWxX6Ez1+aA zlf&H+94``#4osWAG*LrM^Hgh7bx6<~gN_q{92vCWF9#Kr3ch zuew&&tS}F(VDU+a;WD{@(h!f8EvhqpQzHWh)cPo@7tlp=pK~Bx6ra-n;1B*oU{A$K zzH@r-|Mb2X(BkEfZ7H4;o@Z5fF5vN)G~_-0bRsVMYPFtasEc?rreUU1i?=r~3VrwY zeJAMJzG`i<Vjx378(qVkWcF^b=~|LTJ`WVF9YQE5D&6)@k&e_I6T9_MSkCv`*P(4 zW?!%<>q2=dpFQH%*%MDZna}c|dn6u;=HkaH5EBC~EKH=B_;Bmx!FYxRdser+62+}T zCOh^4YBL>9~R_IO6%Jh>_>ruDRx#*srh6zP&o05yI}Cd-mse zMaWDhuDN=C`^^NudQ<;O9^DkiTaVA9SlNL>42YxOCsjXM9} zq>pP~;hzR`EU`LyeyqeYsb<1QU&DEQaKG`5Z-{r}9m}S93FGQlO&C=R4vA2lpBB#ewSXhclzi5 z{O6~?`*;4<^!I+|?@T9Nd|~?aU;p(O*Pe{yNh{v;@s6{&wHl8P;FbRb=ms=ye2{wV z%}=jOoo0y(MWIM-GwE$>CM%rjB~K6|A`de4f3mP4Ij5XaQ+SC4h6$5H(WeL*SZDKI z_lSg`ChC^eoU&J*YEGFy_*VYnz~3Av#)%lzZr;BAtk*t%@TpT5E_Ze5|-#mfxu3cFgm!8gY4iE&0CqCf4P#y7AGE zek^nkMJ(InlkRwy!9HlH<98p~r!cw*J`=YNo_z99^sPQU(yB4_@reKza(xo?Hd_{C zC*$2oXP&tw22eeJ0f$oeG^@ADN(Oqw+HAuwU)Sbh$L%8q_w0O5(zqqUM3M;&7h|6J zVMTziNPD8dCvV;g&V$6eV+DrE!QJ=Vty^(1S>Y|-@NiM%86R$|+;!Kt^P&$&KDQAU zA|_S(l>TDyJ(-g$E}X1haRK>u*l?j^Wrk1QJTSfMoLzY_zSZY}{Vqfn{!i5gYxIx1h3L;u~>5hu4(S=C}v#>3Ctisv>U7hn=?_T-f3yto~EI98tNn|T`T_oY?G zOKjtCiBR&wt(C=iE-8GoVzepxgPdDvJf}pQ#LI0F_7mkt;#+QX?9=fLCdL?6Q+P!L zw@f(Zcy$2B01stj!(@l&!MLrq)cqWf_3=*k@JuJaWq~g zxi{Vs$a%$a%kf)1*%F_mjdYGcsH9O5#Ud?5XkJX=g1 z?<{aU_uPq77hG`O>Bo*8`Dz^ZUv6^^US`KP9Ztj_6Cujv%RgKobE2MZn}G5%;;dI; zEo0|V1UY5rl>NsfiP?t#;;nL%|6)xxezzn3VnEpu_fwBva>=DXdH(r(e(cV#-*fWp zbGB{L!4$2EPqPekH{5W2o?JC@2W6S-!JEk~OMPs-Z;huLmNGcnaXjM?g*{k&Y72FD5c#1luS*WG+wte9PtpS<$G zLP>&X>96@Js%$?O)<+*bIKAek8>S!lfghOm?bFX6m|$}ZWPAhcw|?t)a)9TgVzL1J zjBB`z(nw%3wE_bt51HS6*MXSy>05c`sX6Q#VoXr-aQ?#cC*wlDW7-`Tg?yko)fx(I z>j4cO%H|t>#y~i9lJTh=85hE(E&Qyya52tFYxvGdMDyWiT^Mv&jpEqmB9UC-oW5hi z!aieP^2wP`&H6MS+zi%v(e>#UXLfLL`+{feh=Ts$>^=r$U+F1V25A182v#ee1F zoTGhQteHG8$zgKmwpQ+CUlAK86BoFk=}E_f`h^(s_EuvYWC?fIN2}R#>P+kXeaH#R{cjr!l~aISHwXq>^l;u&b8Rr35X5cLb6p^ zP1mskpZB?KYQ8DXF)sYX$)Mkl3H(L8v@zq3{YD#oEYi>H7sb0NeK29k2mZ6)*taLr zw)&${`CLk1a=)^#qF>EJ84hwL1|%LF<{0B#I%5;J!Sq@UVsonfWEuUy#Dd$D*TnnB zc!2#YU-?Q-lIS<~Jr9}ZYE|Iih%Dmc_wdxK>@Q6=b!K@NCLa3M%ouu zyUoTah|Piz@frx?9&@iWAiYNa-G2MmVxq(&5ZaIAhYuY;dHs!7ZF=H~M?d=DgAe>l zobP7__Goa#J?YsWlPUf<=>6vjm2)OhG|_)ioRx_vCtBmo05TE)_YqQ;O-Q~`s#s$h zzTK)@_MB0zOVfE+u!Ef(5cPEqkb}3*c+1d}I%UC1Gq#SH+}e zXU^{Ljjs(KjAiw6V+Dp=9^BrXkyO7?cEtAMJmsz=&PWIxnR3Aj7|0?mF&Yv9nTxUp zDF(Beu$4>`DsZkF=L<$1z|8_H&*9{bjf)@sL0@}F^e5@$4aKHdSpy(0Mb4*ib8p(p zXOBo=BJ+h&{3gIpoB{emkAxF!Up#i3BE!>{rVDV{bNCqC5_K9EZs!3<4O_9rbyc zFc6dbiC9L`aY&zYYw@O6-;}G0JkQ6mLVt5>);3I7@uIp~>f;m6?1$1O`oZ3?W1@KJ zC70%^Ezdx)3TAHXYm!~-%TUa@dM`JA)v>2!pDs|(xLXd6q4#;`oUMU*m z96&46WokIWJY4A^?}etzXsdN%u^2tEVT%M?yM=OT=X&OBnqSM;5;b9gr(~Utn`W#r z%UCQQxjVoovKd+%s2aQ`p6a)$m+)*WlOdLp<4YEKyNHKL`LSA_hv1e7lPONDeEot$ zTH~*V;ZQ^PCMb};d4<>sL;<+DjRtsMYVDO>LfWSBxjkubANDJ# zrLgv}Vhu zr3{~K|JC+3*{}-6)N4P~{bJ5IF-t6Xl!iRxPkZFS8Y=C>tR=D@QwahW|6m#IY52k= z)bPdxiPumZIB+0uy_pN1-d0%kKe_RfsmQ47+>n3YLjlS7!!19a>wDmV1Nr=!`@}J) zeQXpv-j!5peUc*iMlP(jLKil{8b(+!Iuk>g{{?DLQKSV$wX*F-5i}sOI!2FZMdA90 zQRZl^gNm~2RY%!+=Sw}4C(Bw`$wk>VId(_A`beX;F^;M^D1)!ME(_ty#@vX~-b4^I z`CzBy$nwN?1vIH!s5;wLT`gA-^2*uE8%><5F=Y%Yxy#NgzLPiM!g)JoQW_i3{iK}J zr8q<>4V(`&JF5quEuF8^*{s>Jj+(5CerRVvF{DVa-n+;UvGGAC^n9C`5LMc4 zoAQA`-g>Q(R4a+9EtW<&A8f+AZviqfLeFgkp6}t)EVpnN#CV{vrvP~$nAf^xeO2BN za9CMNijS?ds#7yMB=Mh5rHN@`>!}VKm0hO>j=E*WH=6DxAc+#M(UNYo^+4)a#Nd{w zX8$7=tg08+=3d5SOnfyW`^$?{+c9d7TO}?yV8_-rb1%jXDR`3NmZf@ca9d|iTZ|Y7 z%V3aJw!@!FX28?>{unV;i&}PTg>)?PZ~hUDV+U;vIe+dgmyJ+e`vVlQI$Gy2R%xX*T`dX#smNN+;dOfRyHm{1&5XSRRSR{ZK)4l%fv@N z8a)bQ?_!CqjTh80@OTQSj5wsRBKogzN*7*DNZ*OcvP z$x91oCuY{gWxmdB5(FhVHq^Fp{&F(WG^dSo3?#*xVkF03G+kyLxT;?lUvkAH%AfSA zP1?q$^0__6k(1WS)3#~`7HN1C>QqiE0dtGJWVT;& z$h+c{p?o^J>I1!a?7#Y}9P(1pAkF1md_*Wd>Q0V(SdE^Q4y1j$pB%O8VC2n{7uOsc z2q&{qA3mftGxjxpYaK7=A1T|^k83R4uc=NBLFE;GaXV7A*S?f@FAck79j&T(F}Y1{ zrCX$UT$7#qFKTf$?zd>O6>7invSuq@*$ZQxW%jH{#9)~xWx}cts-1E40G858T6OLL zWF&K_)+8uxG!%gyeJ>=|qov|pFow{QN^4o6?;lPrtC$*2mDjQ{$Xq7R)C$I1p12S$ zCso)OV;l3NO;!TaK-DLPwsCI0T6fueNmXn+d9s0SeH}#|=`9FlY2GBYJOf3=x^?cC zGTX{|xLtQU4vr$z6ubW#`?&8t=xC^S1&C!HTS5 zjjtT(D-6t6^VBt4mz}4N=EyeaX52+@yUd%sma&s~oT%t?h90?jk&#}iUUigRce&QR zn=DImY$BK{t07ySvVyCT8`JrMZRp1U1~aqE}mhj zo`+><<-Nq+*wTZrg%unOaiYgN^rrJUG&3(j!qFTaxVNrBO4JnbnS= zug6bFgLEK3Dd9_h#@nl+aE+WlbJ)A>lPxN;%379XZ!5P+Qgb2&F{H9Ln{d+3qH4~} zE{=MP!R$!QY1UECKx^Qka%|}pUC}S9od|igQ^Z5ofemMTp-zbH(obv>XJPT-xKrQc zNno2MLtj%;g^;}dfibqYOAI<>RiBtD=t$6^i2sGh=0yZwxuGz*F*tF6==if^FrMvFCK;>Rz}u$s*K)UOLb9r_e3Y%j z&bG+xr{<||2DXEPd{sLy+v~VT(J*g_9^vlLF=a#wdoERzR zUu?+JPi}^es{g={DvrvCT>7=!F!pfd+_=24=uS)FV5H<4eif(sj#|djgs9R%=_Ki zY6YKTR3zFu0yrImJP%IAGLL5-J1oXiQhSi#MZRk^@+6OL12rebCLeIwxBLhtcE_f6 z$eZ=#%ZY?^>LJHg@st&>+c57TM`FL`bNeM%Cq<7Bzt!^s<`9{LHfwe z;P&v_#Nswd{ zUAk*Nb4NwF>Srx)ao8sJ8+Z&F2R^F3RnEa>d4Z>DJIcMDxY(pp2%nDYW~j;CxXfpt zA)ZalsFRHAJ|)hrWyW-TbHqtgbvDJ$sX-UGxuM%Mw-d9TWis15m##)2hGyA!ixK1? z7{=t&Wq5t!35DLno#O*F$^#)8TGHUAHhjA@_bH5Y!=GXy*1;|9h+Qo)>%iI;$*`|H zsfakGC!UH!D&5%5t?@Y|1CLDcSubWG+%M~7=73pVozL3`P8i8ut|&01buvqbwXjvL ze)c6_(rM*q}ECz8S6(pFYI5DVb;;j+Sq62=$)mD#Wg7*!WW<(!-!N4J!)k8VemVtR zwXwd+661-J$%w$H%5n|N*wt86*H%NZVwErC^OD(gTHA+k=JimERB7PA3`W>T8|Q7aTxc=a zJNc>?e1V%|kxE9s(Pc;)^nZTgEXW8@%!|wv)bjv!b#1cak)R!%u z(AEC5t*=$oErZ9Y%4*qq`!KiV-FXvKTbG^NmU@;gz;4O>bEG8UvTP$HgcB2;)yWeMnGw zZ0*me45pb5U2XdqY{jy)6oZFC*DCK)W*zy6%qV-YZjK&W>4}+S|LApgq&PK{tRGS{ zIk!f+c;+%{1HEJ%eP-K%t#;;DZ)+=L#aGX(o<=0{RqZ!ovERY$3z;Q#|1W(m>$J#y zZ~N-mWpewe9QNg0cw4RZ*YGhg$SUVjBmLMf;;^SV8eNUWWk&*9XP;QunnAiD1i&lp z001waNkl7TuL96U}0cY=L~^mK+}F<^HOr_$SaTA zZ9eD58|yfzyWEKk!pN!1^2yhwv}>DUS;s~FtMx^b#Kp3QL)KgRmqT^^$nx|PH+Sy?n8|PAX05@&cPeSBteZt0c@|tWd087Y)@&pRW ziFj2){uB!3c;}SToXr=r(Hm7i8c3;nP`P3oeeYH4%wc_%yKLPuA6~mAOt4zAc0Gku zswc)dRJm%o8$^Lg0Q-xi3BmdZm)ziMM7FZ5)?Jo`Jq~ZO8JC$QH}%0mZKRFcWz5*$ zNS5)9n2cZc$w15_6n^-x{W!R4X<(PO_EFKRvZcMzt8J1kdiUEp+jTN?IURyPefK>F2a3l7vD20tMOP@BWzTGF*5mVi_0}EoH`F5b*_RibYSuU`hEQAG* z+{x#ovF3B0uXR~BPD3FwQQ3f6=-QAfokS_erkVk8-Fb$Wl|j^X7&LLe1P}`;Kx?my zsRR^&hRr4wyM%ZX#JY`%Mf6O&OWxEEo}nbOr*-;jk16%UdE!LHhRy*}CSmYOR-C|A8|o$X`ztB)!L})Ww(g08hvFq_ z@eAPbGa5{uI!hEZ2#Y3bxu*+l6zf5Zv4iNSnV{-rX)haT6j1NCMyo*q@3I?Q-ES6b zM};y;0bwzGHv2d*IMMjcv+di?ieo2i;_p;D;&#OEwDDV1{8;La9cLxm@F0G7k>uh{ zV0s>%G49VhGIZhq@7U&Xf*@`o*j9b@i9I^r5Y10B@UEBbJM?3cX`Z(Dv6a}|KgKu? zU|Y8EYw^!bmux>PCz$*c!xEou@Cjy;WiFSJQqB|w+tGsBy9%nY7WNH`d5{EI@FIrWm3AX3W;mDDXEa|w_#TRRZh7W zV~bNYS-_%}0Fw}AU#wGt+DP6QHd3d5FfD)@N19f{T5i0~*0p096Xv89A0eyMy{%Oq zfW)jb1{cccAC4J*x`!XoK62#2{nUd2L%Yr9n9n87T-myK$yNfQmxV;_U z;fujM9wReG)8VWE$TU7mX*;BjDK)lfLh+)RUt`23R>55KZ;D^Acr1Qu>`44POnF;;8qV-0fyiY85{;rHWR@?>z_3N` z)a#x&p)kNic4#9LSFAC%rLKD@wwm!Wk8LSRbq8!a^Ni_hx8I(>=FM-Sx#)ci3t4E=;toI9c2yJh_!JR1$RP0;ZtQZ;*M%{i%(2WCZr@|8> zzX$hVydC$z{g1?N__YJ2QLq}f?aa;7gAX2z6{&CJui5ikQ@y{Md;RuQa7PS!qcdG8 z5;FJ4Sk;pMG;h8{Ma3~9u@Y{o)<>T8hHY7T3Kc&9de8p-F(4g}pGsijR4 zOETBuKW6Z;5_k0333;9iOIYD+ zs+E37s=&?mSMgKZVUFIOf~$QnE8D2%VOQg=D$3CICPu}vt&7EA@2e#*<0HRMw}1cr z3pX6yVpKEak>iI5e7@(Er3Juvv^jom>EOYqraSJuW4hw<%lq#VW*iF-&?jry z{b!l&t31n0j`-anI-swFGy;rvpT9R(6ae?8W(7ecK)tTnrw>-oMH4qWgeB?QWy|2R z%-pWqsA7;++_G$2%gsTK&T^NHH!k%28nk~)2r(vxQ>X7(dD?!~CHV=wbD~_6<~_9l z*uR}r^-@N?rfQ44)*W!pyScyp24-?B`dG(HTe&K5q>D`^Y3B_0{caj7=n`q*-O z_9c|ZDPN%N!TZp4S((F;NISeo8)KZ>5+4?~@3>@yF?Tt_HTghhX|Ph2&vDHgy|pka z)nM>Sj-?LLKHZdcv0>BoVbGWC8ku#*HF0Lsq=t@^KuA<<)JTy|q97nbz|fHr6-bPf(20Pw00BY^krEP;<-7X_ z?Cj3&y)*ZonfuFg?{nvz_w&qqUMI-;IFph8GdCLOx6uvDFmhdV0ebGv=(`sTvAZ+Pr3+-pm!P&*Z;uHt#GNI7| zHK&u^h1V~-JI#>>^&Ayjl*2{BZfiOnF@MzdNN3FB#IVA0zGL?MsDRw>lE9h4uTO`t zmqRcQdp>5pI+gZ1@z5QIIH~*7Au1UT+69t3@hf^_jtG+)pPF-C@)8Er#DJp}$)L$^^=j*5Q#b`8a*S|CW@$yI-JPvFp@8MV)&j8 zlGKCshg0h$YX5oZH|m%94VAdx(EMGOk~mt09W;fvJq&rdk*Mj7O+EotKAv~00*yob zx{>mUWGY;c1v-5So3J;U5@{wpCNU-FP{OT-EY_^#X?|QeXA`39rn>zse&q}3BHgde z6L?QlG`(o_k_Pw6aa+30yrFFgF|@bysiTo@6Sd2-vA3!>`-i^o@7jR0u&OWex7~kL z?=u~anjap~{ayW+Pr-R8rE_4u+sk4AGW*S=73g z(6L?!e4w-J!h)Bx&v~toyOkID%dfQvl_ddV1Kqo9nRorZzjO6zdWl$E>0hhj_79hh zg0U^)e{a@D4v}rEde+`yCo6B^pEzO3I6CX~Q0LY>uU2N$#pVZc1g1+8MAQOgE zv^S~m`50TOuQ%oygj%B3xAiWBOQo@d}`4ZS=NAkn)Q1%p`KK^G+3ebrx%%etp4wlYh6!)QW)D7h_YH| zc#1Sb6|JdryrXpSj~8n9YMjCOULK@~e`ntXJR)5->a3G+MPKEh*yV`S_(@WD;z{-C zKobh5LpOr>G{jweropo{ZisrSyC)B7BPzp zpP7wIH&}jjwuN#fBkp6`b=@`G0dJwZ&;OQeiiS2N^!MhrHx}%CesmbbMGeM1_5QFB zb;@#5>1T%a>&I#Ve80^2I2N9!b!Hx8FU#%D<*@?^=0W-ckR9dlt=yFpFhHQ~*)1~_ z7G*@9GhLq|ByH?mFL$rSImQ(B2T2$js$Oj~3O}l68#;ozz?a&2_ay^gF97=lI_62e z*~=)E&3z5XM=@^x-4XU}zVN&|(i!DA-gWC9uXkAgj%ocNipNj8_ahspoA%jjy*WYA z53k#A4(`3d$~b1Q7Fmh##s+b53z)OXU&C-KHG{gUfQHXhlFq#*nWNc7SBV>+X+r*n z2mLauKF>aX2fysI_3lV^W9lu?z|ly-Eib*0C-QQ^TH_Y)MX0#A!6#qZb@t*1V~RA3 z4mM5dS#g7^4-aZ_T;?VvX2AWwLKZigBd09W#B*+ zewlwIbbh<{pHu#NeDxbLYK!GQkQ)GV2aROdvkPn=OL`pEc&62-I1BqAW^=5%{rDZn!giX)+6DHj8 z_dij+ZlnQ?V9Q(&KM?@qQj(ic|EFvPqfa+7x{qDg<_-mm2HOb+4;w&58(O>kzkrBW zfWIVf9+o4^Auf;M4<60L{jm;DE|ie=DSpNddUWbgz54G@eo*F+z}h?Z)jR(MI0A|+ zsXpy7JpQ1JRKq*9>L%rv43TRI!v`%(6x(&4v-)qvg_!mVXaCCd7?FB%)Jwnbp`Uu7 zRV!FiE+mrgbv?L8U&&jpI|lQwUG| zTheR^4y9y1uXxKK;V? zv*7vIhqUPQaoO2}hqHsVgn!==7WJUrF(VYq=*6A9YUirnb=Hybi1O@FFR@ur!TQ-- zW!#0UUO8G#|IW=VAAb>_j{DxX6dz9lYEpYvS(C{=E5M zxyaT6n|GkIB``i|CCU6!?mv;Sc}zYj)aqMIzWLV=8A!8%S+$Yz$j*MdvOx{G=!tcw zFvZ|A&y(^BHGz$t=K7r;oP5!>4cP7u!<|fY!qsaTIk&W}9FeeHTRvizeq5sCsi@SW z(Ho*+p`TiM?>+L%8x4+CDl_mZFMI9J}#&QY!n2 z#8>0L5b72wRcZK{`i$@12%K`?_I8oY<)sG~LPHucFXv0^4&IeEIF&*>KSen26$CYS zK6eAx+3TydYAT=@$M@{Ahm4bjyu@T<+>dJ)qWCW*eIPyzvk5osYr7I4(sc2ZLpb`< zqyIjM;9j4|>H6_RK~6P1S2qwX8@mdLM`JFe5?`7TOI0e9U8vwG^*RMmsqH+64NKk^sf)@*QW=$Kg9?~hb)^P0a? z^7X1ZQ$Awvd#KX_znScdpm;ephGN1k`7(BJT=!ZM4{2GXUK%2q?qLM(^x>tD1|8<~pI&q#-i zhYeR)qKr0vJ@4Fd-C7>rN0v*2!&N5VryTLrbs8M7x!PsrJd10CGt5i;gvP(Zife`y z4oC@;fvIN>u@6mH80Wt*5y}SDYT*;&Zmh1i*B?Hml%V(axHK%b!p-E~&+jSWisn`y zBklZ=N)JM5I!Xns3+I>(dHz;v7msA*uoR!P1fIyMX;-D6v;j0=eFm1J0T&&h?#gL% zi^oN&9DvZzgpfMbu#OMsViFG=f!J-tYp_9$r|+!lM7m{iM-lCq+Y;6&h3i{=jj1Km z(`ME^HwB5O)sM97ekm(K#r$(;v{qCXyUkr9is#_a4U6+WB2YKbUu(6Dxj zsTVMpcTRi2NPy`^b56fXE~yDT-{jMrU$*m^W(E*mZt5`H7P0h(?>V1p9R=mTWQtdL zx{ettp=IC3h6cRbk$jboy{Y>t!!j*NJXdX2KVYWhQR>SoyU(|OfKFauqj)}0!Hpg0 zhTMvA3?DwxWn&*|eOIfM)am!*=Q*AmJ5s>~VMaFLkWbAL#fgz^qLZp0&cbwHK5}){DY>KVYcPHFT8ZaC_W+E#-KJrX;eF^K65o#h};5X@b&0!JAzT zH-D%fJ^N9JVe{KEL#ActUYY+L!yko|U0eQ46yenwSGMQn2c*2gOHA$ik8Sn+e|{dh zdHi^=V}`=ZB#h9$!Iu^mBX#0TOvC%m3Td#@*p4e z>31tHm?62zuf!{!Dz-Nlq~VHTYJbh!JX!;iip*5<|M44i?Y&c$G!6Gz4>aI%4SGdIg|(TJV_7OVzO4ZqlE|KFEL-6={x{tc)TZXw)Aig z@_qfaan14DRj%XVY4UHR$Lv1OiZvp%i|Th5oLA?jT!C;(Gg}|4-FzUadc=_H5%TqI zluSOMWKN|O?O)qFl@UPuglpVE3fvqx|0tS43~|OZ@BLe;Y~5pw?PF?IGI{G;D`R-p z^cz41Z|Gk9e_WZe5JQ(AQ2;)LlTL!SE}>o#u`dFr+Y9+TWA%yidI#GgSwe{oS<39r z$Tuho-*TIDxj-;C>?v1;;lcNQ=h3QN#?d#H$y$>c?%A`CIL>ZDr{BWlw05n+(IdRD z>T8&kTWW+m6|s8SS>Bo^@u=~abvpt7ae(#u@vdEViD7EIia)u!39iGIek9`!<=d^h z@#h3CwK%s>VsDdD8euBUbGnE)S<-tT3{HYy^XrmY5iN1^Zb0rXmKX<;&yS-cxpIoT z1**k!@`#+k=+)T|P$TMvI_fbzM>W7NG%wYks}auoL!+>&bt)=47};PVGt1~sJ8}Gn zYh4$iI84N-X9 z`|*-72sad46sG)B-I8OwAFJ>-hSpkliTzIS`%!#C8=A|!j0E0plVtAe_yiNPl}bBb z&)KTyAxD>l9M`PID|F8L5l4MM?t} z)%e|oHWb1oejNxoKPEIvm!#1=4Co?&yR)c z28I^Czb+4fqVK*wUSaBF4)uo-L@VaVoD#`N10Fx8F#2o4T5#ts)k%&Ba&OL%}HBlv#ah}{VV@IClU$iQAhTO;4h%@w)OW7 zDkuGxsC$X>^hViOfM%M2!&4T!(R;P;OM*+lNdK?&-v04)K+Z4&fMntO^2`$|azn8#*iRE!2y$6Ted&Kz9fTUz{ z6#dksF700>i^s3W*nVqAfp+H#1zLG)Yu)lDh^|E=oq(XPE)RiXhD&~$bqCffQb>@p z@O$8;du`+9djT$Zc&(TJQ(ksNAbccubAdZIXOOrtSLzO09{qDJw#UdFr4439L4y!s zXkOz^PgyvxzGrgGu<>vGE{+CvMCPeiY~r?%T6p#Y;-)t-Y_W4!Vcj8({z2bn9j0n& zBT?q#`#6>gsO}S2MRsld!NhEJ0zf-$>T{WjL7e_4vFS+vcuV2B#(eYrri?CjK(VIc zOv3ADhvHrzNg50|1Df$w`aNpgaCOu6UDcxhyoI9b}pO9VqX0bz&7dAM_wjYq+#uEm%Ti2b~ek?5N+bbw* zuJi{Z24ym1XeZTu^b8K%YZ`kS>{iGOWevpv9%dXX+`{wJwY&w9o4hDsr-&?F1!7Q$+1yy_u9$Xy>=A&R7O2)&)nuX$dQhm z+y?*m?P&j(N$4yyF$AU~T|GjX^)775fMoxsKv3e)0WWbeK(v7Wd|SAy*3YPan!~8S z>5kNkSw|Rz$A+S9FZ+mDgxCC2rbJ-f!&#ASxh^y2ZCNQLtyeeNUj3gR?M7Gk$ozq^ zv|nq}jyMu{1b@E}jT{afCe!L8tQ>JL#5}8!#vCvh*40qv{A#ed>TDsqr(@mzm}>W$51rHm z)V55`t@DvXh0Yo&)L_q^exV2uS{bTFY;n#j@*1p$y^YaecmKi|lbSWYtY2|kq3hWK z!GW1QJlmbs>CsI{=NmC-&>|-d>waeA(%0>s_I9(Ek=Z1e_kY5dDv z`D8f+5#Z!?6bVv?jZ=poZxfKqo31%)w(ts8(>!g{*#I#@$JetQ0?!d`+@l$LD1V-t z@VQ(?xHH!#AILsUo&90bm0%s*v!GcVK=4fxR8o^+#M%T2kuh_|dvKZ7`@E80u!~ zZ?tQ2bv-?i>>i{&Ia?|6tCmD{z{3!}UNf#3z;HL)gcRNRzh|}Z$oeiYi~JA_m081s zw1nJQ(TNQpKaYRh*v!gduZk2_#~0F^WI^{f=;q`z3{J-Y^6&VLUyd|2R*E%mCmb5^ z^c-2kdE4&-V=;{ z!6z>=RUVmPx-Ox~szxw5vn7w=Mi|Tpk24#+%zUBfIr*K!2dLXSkOR7&v?7wL5OY?H z>0N00DWOc;N|17{0PEU9F9B)2@a)5#-;t;;RhgNNd|qg_k*U}~@veNVCjRuFez;5G z*{c=6QS+cF`H+HZ*Imx12(OR;W!K9cYKW9dD!2L}xz>x7x@XNTpRA?5siuaO$X?qQ z`=y&GU)YijS`X&CSLle2N>{Q%JMunfl*rD-rIieWzs!}I!nE_&)SuQ#4Dg8;0(#$A zo{o9if%pmcZXe&3DST5jtY_9^tN}zQ>^eW=JMu<`vEB}>*U?kUDdw09yC~>$hDx(K zDa{VTN|gwL_JuPQ3Ys9gCfSs}XpgCMjDZIXVozfm5Sz0j%DrDuh_L)?YmhRKDzd_z zZ)5{c=Iq2sPfAc+2TgNb4~(^*_uc=4N4<$QMCs9^-`EqxO7F7jNk%MEAI^8~mPSt7 zhlL1>#Ey+lL7+O^;jOWBw;(8#qW9-wX&kMrK{QVPU+Hufz$Hymku8l^M)_UWZ27%F1=ZJgMK^oz)Q>P zE~(Ca_n4oWzg8x{ZMRNwhI>VZC)O=az!FWEDrP3SkLm;(Rdj5&C4~DYs+-T=mU5Q$3Lrdz%UW~WPPI!K8;)#U2;IDGRf9<* zJLi$0G`trG8Zqe$zav{Y@dh(9D7Rsc9G)2@F#mtK;YTBf^;h+vkq!mcQZ7vke9do( zgi9!Q3#-8?2}5gOCU7)D6KIT~TGmS{{lYOQCw>GS3Q{3>o&ZxX0W*!R>fG7bhYJ^* z<-#d8;<@UhXNCPk5>SX`R|`LZfdosg<8#-fD4YY{0eq#`P`)LLR#LK-KRGs**nO(` z)2VftE+%2Sb#(J=HS)UQ18Ra8mvVI|Xs0>8@nowJPgKPusk+@M$?hW5@T6p%x@3;1 z4pmM%_SU+5kbjV0%@iv^SWoThsEycm1|ME%Wg)bC$2lUA{sxj@&25~h-R;`N(mc@^ z7H1HRVsW$91n{}OH2GF=ZQt9q^k`aT(;wunvwhlU95l0A2>>b`8X_D2wY z^>H=^mFdkqQoUT5|KGs^arx?fKffbp*iv=1kxpw~GN)yhpgFZdg|x|UrCxiUd!N7e zu^7#_`AfnPT_RyMD;L&bn>q3fU;X(mXgtDy__F$pE;|*HcRr=7JJ8JPb(+SLzNrSk z#MuHy2e9E+id5Khl@|gwm4!^NPW7KK8ORqUybHU~(bjNwK^FUYm!`Uj595*`Yoyxk z!2N=aIyKH@HHNP&voj(_pwrc;ORd7|j|`J_S`NNQt`mow)^V}`5X-Ln397Aygt#Nv z*qK8XXRP3fxXX{V%-`m=6FVr7toX+1#KM&Fhikh&7S4I#856${OYWVbrL6xY@>LeA z6th&qv@P4=etTLx@*D8?;eKME?bZdU@@CiebB0}~daj z`pEelPH0kyD!L4Tjh>F`y)#I0CHN(-kKH~yP?@}s6TU9*Ry7EhnqT;EGEvVj)e~S3 z?*rssbSFT8Aqzy&Ty5MX0`r@kXFHk`+HJb@9$1a2Mt~Aneu;@RRyNHGjbWyREHd9Q zVDKL2dJPbYUS6$BW$q-F>ndyMj3XoO4F2(4Rv0GS@sp*C0krFcf_KArQ*Sx8?c#UL zB&m%o;OpeA6KXWi#4InF6>yTn0mA6nKg`&)fwnjjOo_*()2=mdajm&g$6Q19noYf5 zZC){&Y}t(MTzf{Uk0NgKT!vAN(CzSl+?EHe?3>#?_y#z46Sdy)Atg^)$F4nbWLaGE zVYjITa6*zkxfppp{5j#nYZPb&UD5Fms9NV9=6nXEBxpmb zxY2XOnBlEl`gBVd7rG6mficw%JZ7f>nvd)Zf7qPBq~-LE>{o8uS}N@eWW{v|j@^F9 z@5F4m4WcK`NHQFdF~Q}k$-&)T%_Z)qo#I&k?uWq_%AUnn6XIHPuoxt z=Yb2}O)%RfR2`^>;!RANCgY5B>Ko<2gs&+P9b~3K0M^IB&!c5yFb#q)sVqXQ-dc%y z2>6SH?bl<{8fG6lUKg+wjm5AV!}rpV70u~98!FI3W?;(w2T;`it7>BNXL(tv zQU=2mo%NPzlK8REg4?Pyco^qOUob*%R?C&4Xf z*kcpK;Ywm5D=qE;?(;W=JGl#G9cpv2Yi8)fDy^4H-Es5rJKhOW{ieJF^EN_a18vWJ zrjtbjoDtHRB~&9kx4dJTCfIvp|mB~)SrnJBfvO3&Xn_iC=r(Y$L z8)a*0+u9&7V**NySt``%Thk+Mj@_PXKm_Yo0R9S%+%Q6#=Bks0iSr_3l61Vi<{$SH zFke31h(KA`S>YJm+xgC@BWe1Rb$rZ(VqbMMA^J)ua*6DejY$+tS1#|!# zEd}ecOY37{QXx(cw>Ia=l+nly=zV=%-_3gAF3muCayPS0KuJ#(&EHVk$KU7^mRB~P5WFl~ET(C_FHTyX zv~Ew0ZlX4vwj(!227>SL9Pqo$u`dbay#H&#@6?b1LH~ag8oNZBZtZZEM5x+`E@axC zG+uA+D1jf>2fdBXkse*pGgU>lOQKpy^;g1VpbB!kt2jh3V5FRf+nHZnw5Q8fi0q45 zjp2{?Oa7k>N}k8=0e>Oeb-=(*?81o6wDM^eEvrnwi=xNbpWQ@(Gg)MuBf#Ld`^Nr~ zYgdW4SB{}Ihw~Vh(f5hopNMXvDkc*{vGY9oe|Ju#o#KEIL(?|9un^e;`-hpa)$NL# HZZG~15T#Oe literal 0 HcmV?d00001 diff --git a/ios/help/ios_images/system-keyboard-cal.png b/ios/help/ios_images/system-keyboard-cal.png new file mode 100644 index 0000000000000000000000000000000000000000..6c60f41a74c6c7fc1500eda00160b9dac15f87b5 GIT binary patch literal 98593 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 ZL3dkTl?> Date: Mon, 19 Feb 2024 13:48:45 +0700 Subject: [PATCH 060/171] updated with changes for 17 --- mac/help/about/whatsnew.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mac/help/about/whatsnew.md b/mac/help/about/whatsnew.md index 4b4dc3d81fe..6033783f5e4 100644 --- a/mac/help/about/whatsnew.md +++ b/mac/help/about/whatsnew.md @@ -4,3 +4,6 @@ title: What's New Here are some of the new features we have added to Keyman 17.0 for macOS: +Keyman Engine for macOS depends on Keyman Core for processing keystrokes, improving reliability and consistency with the Linux and Windows versions of Keyman (#10066) + +Move active keyboards list to Keyman section of main Input Menu from hierarchical submenu (#9777) \ No newline at end of file From d0d1e5e6fe435c270181dcf799cfe18f364097fa Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 19 Feb 2024 14:06:03 +0700 Subject: [PATCH 061/171] fix(developer): return an error code if build-test-data fails Fixes #10752. Also removes `console.log()` call and replaces with appropriate call to `callbacks.reportMessage()`. --- .../src/kmc/src/commands/buildTestData/index.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/developer/src/kmc/src/commands/buildTestData/index.ts b/developer/src/kmc/src/commands/buildTestData/index.ts index 4253f55cf6b..2f19bf17a2e 100644 --- a/developer/src/kmc/src/commands/buildTestData/index.ts +++ b/developer/src/kmc/src/commands/buildTestData/index.ts @@ -5,8 +5,10 @@ import { CompilerCallbacks, defaultCompilerOptions, LDMLKeyboardTestDataXMLSourc import { NodeCompilerCallbacks } from '../../util/NodeCompilerCallbacks.js'; import { fileURLToPath } from 'url'; import { CommandLineBaseOptions } from 'src/util/baseOptions.js'; +import { exitProcess } from '../../util/sysexits.js'; +import { InfrastructureMessages } from '../../messages/infrastructureMessages.js'; -export async function buildTestData(infile: string, _options: any, commander: any) { +export async function buildTestData(infile: string, _options: any, commander: any): Promise { const options: CommandLineBaseOptions = commander.optsWithGlobals(); let compilerOptions: kmcLdml.LdmlCompilerOptions = { @@ -19,21 +21,22 @@ export async function buildTestData(infile: string, _options: any, commander: an } }; - let testData = await loadTestData(infile, compilerOptions); + const callbacks: CompilerCallbacks = new NodeCompilerCallbacks(options); + + let testData = await loadTestData(infile, callbacks, compilerOptions); if (!testData) { - return; + await exitProcess(1); } const fileBaseName = options.outFile ?? infile; const outFileBase = path.basename(fileBaseName, path.extname(fileBaseName)); const outFileDir = path.dirname(fileBaseName); const outFileJson = path.join(outFileDir, outFileBase + '.json'); - console.log(`Writing JSON test data to ${outFileJson}`); fs.writeFileSync(outFileJson, JSON.stringify(testData, null, ' ')); + callbacks.reportMessage(InfrastructureMessages.Info_FileBuiltSuccessfully({filename: outFileJson, relativeFilename: infile})); } -async function loadTestData(inputFilename: string, options: kmcLdml.LdmlCompilerOptions): Promise { - const callbacks: CompilerCallbacks = new NodeCompilerCallbacks(options); +async function loadTestData(inputFilename: string, callbacks: CompilerCallbacks, options: kmcLdml.LdmlCompilerOptions): Promise { const k = new kmcLdml.LdmlKeyboardCompiler(); if(!await k.init(callbacks, options)) { return null; From 3219754a6adcda188ce773de29431c5abe6eed24 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 19 Feb 2024 14:10:13 +0700 Subject: [PATCH 062/171] chore(developer): reduce WARN_TouchLayoutUsesUnsupportedGesturesDownlevel to HINT Fixes #10741. --- .../src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts | 8 ++++---- .../src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts | 2 +- developer/src/kmc-kmn/test/kmw/test-kmw-messages.ts | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts index 7eec5cc07e4..fe757d5bc33 100644 --- a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts @@ -4,8 +4,8 @@ import { kmnfile } from "./compiler-globals.js"; const Namespace = CompilerErrorNamespace.KmwCompiler; // const SevInfo = CompilerErrorSeverity.Info | Namespace; -// const SevHint = CompilerErrorSeverity.Hint | Namespace; -const SevWarn = CompilerErrorSeverity.Warn | Namespace; +const SevHint = CompilerErrorSeverity.Hint | Namespace; +// const SevWarn = CompilerErrorSeverity.Warn | Namespace; const SevError = CompilerErrorSeverity.Error | Namespace; // const SevFatal = CompilerErrorSeverity.Fatal | Namespace; @@ -107,7 +107,7 @@ export class KmwCompilerMessages extends KmnCompilerMessages { `Touch layout file ${o.filename} does not exist`); static ERROR_TouchLayoutFileDoesNotExist = SevError | 0x0004; - static Warn_TouchLayoutUsesUnsupportedGesturesDownlevel = (o:{keyId:string}) => m(this.WARN_TouchLayoutUsesUnsupportedGesturesDownlevel, + static Hint_TouchLayoutUsesUnsupportedGesturesDownlevel = (o:{keyId:string}) => m(this.HINT_TouchLayoutUsesUnsupportedGesturesDownlevel, `The touch layout uses a flick or multi-tap gesture on key ${o.keyId}, which is only available on version 17.0+ of Keyman`); - static WARN_TouchLayoutUsesUnsupportedGesturesDownlevel = SevWarn | 0x0005; + static HINT_TouchLayoutUsesUnsupportedGesturesDownlevel = SevHint | 0x0005; }; diff --git a/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts b/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts index 48aaba19122..86dd8cc82ac 100644 --- a/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts +++ b/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts @@ -241,7 +241,7 @@ export function ValidateLayoutFile(fk: KMX.KEYBOARD, FDebug: boolean, sLayoutFil const warnGesturesIfNeeded = function(keyId: string) { if(!hasWarnedOfGestureUseDownlevel && !IsKeyboardVersion17OrLater()) { hasWarnedOfGestureUseDownlevel = true; - callbacks.reportMessage(KmwCompilerMessages.Warn_TouchLayoutUsesUnsupportedGesturesDownlevel({keyId})); + callbacks.reportMessage(KmwCompilerMessages.Hint_TouchLayoutUsesUnsupportedGesturesDownlevel({keyId})); } } diff --git a/developer/src/kmc-kmn/test/kmw/test-kmw-messages.ts b/developer/src/kmc-kmn/test/kmw/test-kmw-messages.ts index 8c17126a3b4..28c12e87044 100644 --- a/developer/src/kmc-kmn/test/kmw/test-kmw-messages.ts +++ b/developer/src/kmc-kmn/test/kmw/test-kmw-messages.ts @@ -39,10 +39,10 @@ describe('KmwCompilerMessages', function () { } } - // WARN_TouchLayoutUsesUnsupportedGesturesDownlevel + // HINT_TouchLayoutUsesUnsupportedGesturesDownlevel - it('should generate WARN_TouchLayoutUsesUnsupportedGesturesDownlevel if the touch layout has gestures but the keyboard is an old version', async function() { - await testForMessage(this, ['kmw', 'validate_gesture.kmn'], KmwCompilerMessages.WARN_TouchLayoutUsesUnsupportedGesturesDownlevel); + it('should generate HINT_TouchLayoutUsesUnsupportedGesturesDownlevel if the touch layout has gestures but the keyboard is an old version', async function() { + await testForMessage(this, ['kmw', 'validate_gesture.kmn'], KmwCompilerMessages.HINT_TouchLayoutUsesUnsupportedGesturesDownlevel); }); // TODO: other messages From 013fdfaf0c766e20ff35e92f7b6478830a52e70b Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 19 Feb 2024 15:32:31 +0700 Subject: [PATCH 063/171] fix(developer): prevent renaming of new project types in New Project dialog Fixes #10548. --- .../tike/project/Keyman.Developer.UI.Project.UfrmNewProject.dfm | 1 + 1 file changed, 1 insertion(+) diff --git a/developer/src/tike/project/Keyman.Developer.UI.Project.UfrmNewProject.dfm b/developer/src/tike/project/Keyman.Developer.UI.Project.UfrmNewProject.dfm index 9bfca9c288e..5208255bbcc 100644 --- a/developer/src/tike/project/Keyman.Developer.UI.Project.UfrmNewProject.dfm +++ b/developer/src/tike/project/Keyman.Developer.UI.Project.UfrmNewProject.dfm @@ -51,6 +51,7 @@ inherited frmNewProject: TfrmNewProject FFFFFFFFFFFF00000000FFFFFFFF000000001657006F00720064006C00690073 00740020004C00650078006900630061006C0020004D006F00640065006C00} LargeImages = ilLarge + ReadOnly = True SmallImages = ilSmall TabOrder = 0 OnDblClick = lvItemsDblClick From 4079b1be1213245f0e7a5b03b16f560f1375e541 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Mon, 19 Feb 2024 15:25:15 +0100 Subject: [PATCH 064/171] chore(linux): Improve readability of test names This change adds an additional underscore between the tested method name and the description of the test. --- linux/scripts/test/deb-packaging.tests.sh | 44 +++++++++++------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/linux/scripts/test/deb-packaging.tests.sh b/linux/scripts/test/deb-packaging.tests.sh index 9de6b7de406..5bc89aa66dd 100755 --- a/linux/scripts/test/deb-packaging.tests.sh +++ b/linux/scripts/test/deb-packaging.tests.sh @@ -97,7 +97,7 @@ run_test() { teardown } -test_check_updated_version_number_NoChange_OK() { +test_check_updated_version_number__NoChange_OK() { createBase alpha echo "readme" > README.md @@ -109,7 +109,7 @@ test_check_updated_version_number_NoChange_OK() { linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify } -test_check_updated_version_number_LineAdded_OK() { +test_check_updated_version_number__LineAdded_OK() { createBase alpha sed -i 's/ km_core_actions_dispose@Base 17.0.197/ km_core_actions_dispose@Base 17.0.197\n km_core_added@Base 17.0.255/' linux/debian/libkeymancore.symbols @@ -121,7 +121,7 @@ test_check_updated_version_number_LineAdded_OK() { linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify } -test_check_updated_version_number_LineAddedWithoutVerUpd_ERROR() { +test_check_updated_version_number__LineAddedWithoutVerUpd_ERROR() { createBase alpha sed -i 's/ km_core_actions_dispose@Base 17.0.197/ km_core_actions_dispose@Base 17.0.197\n km_core_added@Base 17.0.197/' linux/debian/libkeymancore.symbols @@ -135,7 +135,7 @@ test_check_updated_version_number_LineAddedWithoutVerUpd_ERROR() { [[ "${output[*]}" == *"ERROR: libkeymancore.symbols file got changed without changing the package version number of the symbol"* ]] } -test_check_updated_version_number_LineRemovedWithAPIUpd_OK() { +test_check_updated_version_number__LineRemovedWithAPIUpd_OK() { createBase alpha echo "2.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md @@ -149,7 +149,7 @@ test_check_updated_version_number_LineRemovedWithAPIUpd_OK() { linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify } -test_check_updated_version_number_LineRemoved_InAlpha_ChangedBefore_OK() { +test_check_updated_version_number__LineRemoved_InAlpha_ChangedBefore_OK() { createBase alpha git checkout master # simulate a commit that already introduced an API version change @@ -170,7 +170,7 @@ test_check_updated_version_number_LineRemoved_InAlpha_ChangedBefore_OK() { linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify } -test_check_updated_version_number_LineRemoved_InAlpha_FileMissingInStable_ApiVerChanged_OK() { +test_check_updated_version_number__LineRemoved_InAlpha_FileMissingInStable_ApiVerChanged_OK() { createBase alpha git checkout master # simulate a commit that renamed the .symbols file and updated the API version @@ -194,7 +194,7 @@ test_check_updated_version_number_LineRemoved_InAlpha_FileMissingInStable_ApiVer linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify } -test_check_updated_version_number_LineRemoved_InAlpha_FileMissingInStable_ApiVerUnchanged_ERROR() { +test_check_updated_version_number__LineRemoved_InAlpha_FileMissingInStable_ApiVerUnchanged_ERROR() { createBase alpha git checkout master # simulate a commit that renamed the .symbols file @@ -218,7 +218,7 @@ test_check_updated_version_number_LineRemoved_InAlpha_FileMissingInStable_ApiVer [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libfoo.symbols file"* ]] } -test_check_updated_version_number_LineRemoved_InAlpha_ChangeFromStable_ERROR() { +test_check_updated_version_number__LineRemoved_InAlpha_ChangeFromStable_ERROR() { createBase alpha sed -i '6d' linux/debian/libkeymancore.symbols @@ -232,7 +232,7 @@ test_check_updated_version_number_LineRemoved_InAlpha_ChangeFromStable_ERROR() { [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libkeymancore.symbols file"* ]] } -test_check_updated_version_number_LineRemoved_InBeta_ApiVerUnchanged_ERROR() { +test_check_updated_version_number__LineRemoved_InBeta_ApiVerUnchanged_ERROR() { createBase beta # simulate a commit that already introduced an API version change in Beta @@ -256,7 +256,7 @@ test_check_updated_version_number_LineRemoved_InBeta_ApiVerUnchanged_ERROR() { [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libkeymancore.symbols file"* ]] } -test_check_updated_version_number_LineRemoved_InBeta_ApiVerChanged_OK() { +test_check_updated_version_number__LineRemoved_InBeta_ApiVerChanged_OK() { createBase beta # simulate a commit that already introduced an API version change in Beta @@ -281,7 +281,7 @@ test_check_updated_version_number_LineRemoved_InBeta_ApiVerChanged_OK() { linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base beta verify } -test_check_updated_version_number_LineRemoved_InBeta_FileMissingInStable_ApiVerUnchanged_ERROR() { +test_check_updated_version_number__LineRemoved_InBeta_FileMissingInStable_ApiVerUnchanged_ERROR() { createBase alpha git checkout -b beta # simulate a commit that renamed the .symbols file @@ -306,16 +306,16 @@ test_check_updated_version_number_LineRemoved_InBeta_FileMissingInStable_ApiVerU } echo "(test logs are in /tmp/.log)" -run_test test_check_updated_version_number_NoChange_OK -run_test test_check_updated_version_number_LineAdded_OK -run_test test_check_updated_version_number_LineAddedWithoutVerUpd_ERROR -run_test test_check_updated_version_number_LineRemovedWithAPIUpd_OK -run_test test_check_updated_version_number_LineRemoved_InAlpha_ChangedBefore_OK -run_test test_check_updated_version_number_LineRemoved_InAlpha_FileMissingInStable_ApiVerChanged_OK -run_test test_check_updated_version_number_LineRemoved_InAlpha_FileMissingInStable_ApiVerUnchanged_ERROR -run_test test_check_updated_version_number_LineRemoved_InAlpha_ChangeFromStable_ERROR -run_test test_check_updated_version_number_LineRemoved_InBeta_ApiVerUnchanged_ERROR -run_test test_check_updated_version_number_LineRemoved_InBeta_ApiVerChanged_OK -run_test test_check_updated_version_number_LineRemoved_InBeta_FileMissingInStable_ApiVerUnchanged_ERROR +run_test test_check_updated_version_number__NoChange_OK +run_test test_check_updated_version_number__LineAdded_OK +run_test test_check_updated_version_number__LineAddedWithoutVerUpd_ERROR +run_test test_check_updated_version_number__LineRemovedWithAPIUpd_OK +run_test test_check_updated_version_number__LineRemoved_InAlpha_ChangedBefore_OK +run_test test_check_updated_version_number__LineRemoved_InAlpha_FileMissingInStable_ApiVerChanged_OK +run_test test_check_updated_version_number__LineRemoved_InAlpha_FileMissingInStable_ApiVerUnchanged_ERROR +run_test test_check_updated_version_number__LineRemoved_InAlpha_ChangeFromStable_ERROR +run_test test_check_updated_version_number__LineRemoved_InBeta_ApiVerUnchanged_ERROR +run_test test_check_updated_version_number__LineRemoved_InBeta_ApiVerChanged_OK +run_test test_check_updated_version_number__LineRemoved_InBeta_FileMissingInStable_ApiVerUnchanged_ERROR # TODO: still some test cases missing for the different checks From a8543892eba257fb74f6bd6fad7c7f9571b62bff Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Mon, 19 Feb 2024 16:34:13 +0100 Subject: [PATCH 065/171] chore(linux): Move cat-file to wrapper methods This addresses suggestions from code review. --- linux/scripts/deb-packaging.sh | 69 ++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/linux/scripts/deb-packaging.sh b/linux/scripts/deb-packaging.sh index 1bf518c50e9..2d244f228dc 100755 --- a/linux/scripts/deb-packaging.sh +++ b/linux/scripts/deb-packaging.sh @@ -142,21 +142,43 @@ check_updated_version_number() { } get_api_version_in_symbols_file() { - # Extract 1 from "libkeymancore.so.1 libkeymancore #MINVER#" - local firstline - local file="$1" - firstline="$(head -1 "${file}")" + # Retrieve symbols file at commit $1 and extract "1" from + # "libkeymancore.so.1 libkeymancore #MINVER#" + local firstline tmpfile + local sha="$1" + + tmpfile=$(mktemp) + if ! git cat-file blob "${sha}:linux/debian/${PKG_NAME}.symbols" > "${tmpfile}" 2>/dev/null; then + rm "${tmpfile}" + echo "-1" + return + fi + + firstline="$(head -1 "${tmpfile}")" firstline="${firstline#"${PKG_NAME}".so.}" firstline="${firstline%% *}" + + rm "${tmpfile}" echo "${firstline}" } get_api_version_from_core() { - local api_version file - file="$1" - api_version=$(cat "${file}") - # Extract major version number from "1.0.0" + # Retrieve CORE_API_VERSION.md from commit $1 and extract major version + # number from "1.0.0" + local api_version tmpfile + local sha="$1" + tmpfile=$(mktemp) + + if ! git cat-file blob "${sha}:core/CORE_API_VERSION.md" > "${tmpfile}" 2>/dev/null; then + rm "${tmpfile}" + echo "-1" + return + fi + + api_version=$(cat "${tmpfile}") api_version=${api_version%%.*} + + rm "${tmpfile}" echo "${api_version}" } @@ -169,14 +191,10 @@ get_api_version_from_core() { # NOTE: it is up to the caller to check if this is a major version # change that requires an API version update. is_api_version_updated() { - local OLD_API_VERSION NEW_API_VERSION TIER TMPFILE - TMPFILE=$(mktemp) - git cat-file blob "${GIT_BASE}:linux/debian/${PKG_NAME}.symbols" > "${TMPFILE}" - OLD_API_VERSION=$(get_api_version_in_symbols_file "${TMPFILE}") - git cat-file blob "${GIT_SHA}:linux/debian/${PKG_NAME}.symbols" > "${TMPFILE}" - NEW_API_VERSION=$(get_api_version_in_symbols_file "${TMPFILE}") + local OLD_API_VERSION NEW_API_VERSION TIER + OLD_API_VERSION=$(get_api_version_in_symbols_file "${GIT_BASE}") + NEW_API_VERSION=$(get_api_version_in_symbols_file "${GIT_SHA}") if (( NEW_API_VERSION > OLD_API_VERSION )); then - rm "${TMPFILE}" echo "0" return fi @@ -186,30 +204,26 @@ is_api_version_updated() { TIER=$(cat "${REPO_ROOT}/TIER.md") case ${TIER} in alpha) - local STABLE_VERSION STABLE_API_VERSION + local STABLE_VERSION STABLE_API_VERSION STABLE_BRANCH STABLE_API_VERSION=0 STABLE_VERSION=$((${VERSION%%.*} - 1)) - if ! git cat-file blob "origin/stable-${STABLE_VERSION}.0:linux/debian/${PKG_NAME}.symbols" > "${TMPFILE}" 2>/dev/null; then + STABLE_BRANCH="origin/stable-${STABLE_VERSION}.0" + STABLE_API_VERSION=$(get_api_version_in_symbols_file "${STABLE_BRANCH}") + if (( STABLE_API_VERSION == -1 )); then # .symbols file doesn't exist in stable branch, so let's check CORE_API_VERSION.md. That # doesn't exist in 16.0 but appeared in 17.0. - if ! git cat-file blob "origin/stable-${STABLE_VERSION}.0:core/CORE_API_VERSION.md" > "${TMPFILE}" 2>/dev/null; then + STABLE_API_VERSION=$(get_api_version_from_core "${STABLE_BRANCH}") + if (( STABLE_API_VERSION == -1 )); then # CORE_API_VERSION.md doesn't exist either if (( NEW_API_VERSION > 0 )); then # .symbols and CORE_API_VERSION.md file don't exist in stable branch; however, we # incremented the version number compared to 16.0, so that's ok - rm "${TMPFILE}" echo "2" return fi - else - # Get API version from CORE_API_VERSION.md - STABLE_API_VERSION=$(get_api_version_from_core "${TMPFILE}") fi - else - STABLE_API_VERSION=$(get_api_version_in_symbols_file "${TMPFILE}") fi if (( NEW_API_VERSION > STABLE_API_VERSION )); then - rm "${TMPFILE}" echo "2" return fi ;; @@ -217,7 +231,6 @@ is_api_version_updated() { ;; esac - rm "${TMPFILE}" echo "1" } @@ -259,8 +272,8 @@ check_for_api_version_consistency() { # Checks that the (major) API version number in the .symbols file and # in CORE_API_VERSION.md are the same local symbols_version api_version - symbols_version=$(get_api_version_in_symbols_file "debian/${PKG_NAME}.symbols") - api_version=$(get_api_version_from_core ../core/CORE_API_VERSION.md) + symbols_version=$(get_api_version_in_symbols_file "HEAD") + api_version=$(get_api_version_from_core "HEAD") if (( symbols_version == api_version )); then output_ok "API version in .symbols file and in CORE_API_VERSION.md is the same" From 5dd953f085acb78a25d977fff66e645eedbb4ae6 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Mon, 19 Feb 2024 16:47:07 +0100 Subject: [PATCH 066/171] docs(linux): Update screenshots and FAQ --- linux/help/common/index.md | 39 +++++++++--------- .../linux_images/download-khmer-angkor.png | Bin 50100 -> 63299 bytes .../linux_images/km-config-khmer-angkor.png | Bin 21455 -> 29360 bytes linux/help/linux_images/km-config.png | Bin 18591 -> 23894 bytes .../package-khmer-angkor-welcome.png | Bin 55975 -> 67023 bytes .../region-language-khmer-angkor.png | Bin 66996 -> 73089 bytes .../help/linux_images/search-khmer-angkor.png | Bin 30884 -> 41332 bytes 7 files changed, 20 insertions(+), 19 deletions(-) diff --git a/linux/help/common/index.md b/linux/help/common/index.md index a25eb07da08..e1bbbdc2258 100644 --- a/linux/help/common/index.md +++ b/linux/help/common/index.md @@ -2,6 +2,8 @@ title: Common Questions --- +See also [Knowledge Base articles](https://help.keyman.com/knowledge-base/). + ## Q. How do I install Keyman for Linux? **A.** In Ubuntu and Wasta-Linux, Keyman for Linux can be installed via launchpad: @@ -16,29 +18,23 @@ sudo apt-get install keyman onboard-keyman An older version of Keyman for Linux packages is also available in any current Debian at: [https://packages.debian.org/keyman](https://packages.debian.org/keyman) +**Note** in order to fully work you'll need a patched version of ibus +which is available in the above launchpad repo. Patched versions of ibus +will have the string `sil` in the package version number. + ## Q. How do I install a Keyman keyboard? **A.** Follow this [guide](../start/installing-keyboard) for installing Keyman keyboards. ## Q. What's the relationship between Keyman for Linux and KMFL? -**A.** KMFL is no longer actively developed, although it can still be installed. -Both Keyman for Linux and KMFL are available in the Keyman -[PPA](https://en.wikipedia.org/wiki/Ubuntu#Package_Archives). The installation -instructions above will install Keyman, not KMFL. KMFL was developed as a black-box clone of Keyman -for Windows years ago; after Keyman was released as open source it became possible to share the -code base between Windows and Linux. Keyman for Linux is the long-term supported solution. - -## Q. Can I have Keyman for Linux and KMFL installed at the same time? +**A.** KMFL is no longer actively developed and no longer distributed with +Keyman 17. -**A.** Yes. To install KMFL on Ubuntu: - -```bash -sudo add-apt-repository ppa:keymanapp/keyman -sudo apt-get update -sudo apt-get upgrade -sudo apt-get install ibus-kmfl -``` +KMFL was developed as a black-box clone of Keyman for Windows years ago; after +Keyman was released as open source it became possible to share the +code base between Windows and Linux. Keyman for Linux is the long-term +supported solution. ## Q. If I already had KMFL installed, how can I uninstall KMFL before installing Keyman? @@ -55,13 +51,17 @@ sudo dpkg --purge ibus-kmfl libkmfl ![](../linux_images/onboard.png "Onboard") +Unfortunately `onbboard` only works with X11, not with Wayland. Currently there's +no on-screen keyboard for Wayland that works with Keyman. + ## Q. What Linux distros will Keyman work with? **A.** Keyman runs on Debian, Ubuntu, Wasta Linux and can be compiled to run from source in most distributions. -**Note:** Keyman for Linux no longer supports Ubuntu 16.04 LTS (Xenial Xerus). -Keyman 16 was the last version that supports Ubuntu 18.04 LTS (Bionic Beaver). +**Note:** Ubuntu versions before Ubuntu 20.04 LTS are no longer supported with +Keyman 17. If you are still running an older version and require Keyman you'll +have to install an older Keyman version. ## Q. Will my existing Windows Keyman keyboard work with Keyman for Linux? @@ -74,7 +74,8 @@ features will be progressively implemented. **A.** If Keyman crashes, it will automatically send a report to the development team. This report is anonymous and contains only technical details relating to the crash. It does not include keystroke data or personally identifying data. If -you don't want these automatic error reports to be sent you can set the +you don't want these automatic error reports to be sent you can disable the +checkbox in the Options in Keyman Configuration, or you can set the environment variable `KEYMAN_NOSENTRY` and start `km-config` from the command line: diff --git a/linux/help/linux_images/download-khmer-angkor.png b/linux/help/linux_images/download-khmer-angkor.png index 38679e9687426ac7e62d2a91cfd492eac6ff9623..3a0ef4da88c3b63031627c62031e9c6d02d597d9 100644 GIT binary patch literal 63299 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�pelHSB`^A`R&)WB}JbWRC%ar{trkj&% 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 P;6EubdC@ZAFMj_A;q$#3 literal 50100 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 diff --git a/linux/help/linux_images/km-config-khmer-angkor.png b/linux/help/linux_images/km-config-khmer-angkor.png index 793406b2e13d4d0df5d3a5733a0722fa84b42a1c..4a35b773b661420d8a2d2ff7a5e0b411aa581746 100644 GIT binary patch literal 29360 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 Q(}XMXFI8R?NSVF+KLh8 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 diff --git a/linux/help/linux_images/km-config.png b/linux/help/linux_images/km-config.png index 6c148b50c24475d61f11aa98d8b3e9057edac2fc..75cad6b9dd88303abe307636c7963220f20b771b 100644 GIT binary patch literal 23894 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 DtL~!L diff --git a/linux/help/linux_images/package-khmer-angkor-welcome.png b/linux/help/linux_images/package-khmer-angkor-welcome.png index 60c9b4a8975fc60718dd5b59e72b436e2cd3e9a8..490673372bce12168e04a479dfd49bddb8f51516 100644 GIT binary patch literal 67023 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�xsfar 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 Z<@%SokYLWBi&|rZ`T4+3aZdhl<6rzb8EF6j diff --git a/linux/help/linux_images/region-language-khmer-angkor.png b/linux/help/linux_images/region-language-khmer-angkor.png index 8eea947f6ea7d66a970f8d014a31484f2a630122..711233b55488cfaf88daa3bd036a51178e177f0d 100644 GIT binary patch literal 73089 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 F{|7exPpJR^ literal 66996 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 z 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 literal 30884 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 Date: Mon, 19 Feb 2024 13:03:33 -0500 Subject: [PATCH 067/171] auto: increment beta version to 17.0.272 --- HISTORY.md | 13 +++++++++++++ VERSION.md | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 46e6d426760..049c6f0e282 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,18 @@ # Keyman Version History +## 17.0.271 beta 2024-02-19 + +* chore(developer): add infrastructure messages tests (#10756) +* chore(windows): Update more PT strings (#10718) +* docs(android/app): Update tablet screenshots (#10726) +* fix(web): sticky special-key highlighting (#10729) +* fix(web): disables modipress for layer-switch keys with subkeys (#10745) +* fix(web): missing null-guard for hardware keystrokes without active Keyman keyboard (#10740) +* docs(ios): what's new in 17.0 (#10748) +* fix(web): handling of page-elements focused before engine initialization (#10744) +* fix(ios): multitap consistency after new-lines (#10728) +* docs(common): Update website README (#10738) + ## 17.0.270 beta 2024-02-17 * (#10735) diff --git a/VERSION.md b/VERSION.md index 57b877498e8..f40470029ef 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.271 \ No newline at end of file +17.0.272 \ No newline at end of file From 2ee402c2b80e87a4500066e762065cdb7c240834 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Mon, 19 Feb 2024 12:37:26 -0600 Subject: [PATCH 068/171] Update core/src/ldml/ldml_transforms.cpp Co-authored-by: Marc Durdin --- core/src/ldml/ldml_transforms.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/ldml/ldml_transforms.cpp b/core/src/ldml/ldml_transforms.cpp index ad77c344ce9..ad63937cc27 100644 --- a/core/src/ldml/ldml_transforms.cpp +++ b/core/src/ldml/ldml_transforms.cpp @@ -692,7 +692,7 @@ any_group::apply_transform(std::u32string &input, std::u32string &output, size_t // remove the matched part of the input assert(subMatched <= input.length()); - input.resize(input.length() - subMatched); // chop of the subMatched part at end + input.resize(input.length() - subMatched); // chop off the subMatched part at end input.append(subOutput); // subOutput could be empty such as in backspace transform if (subMatched <= output.length()) { From 1834c55e524745925be772281b2e7445d3bb7681 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Mon, 19 Feb 2024 19:41:16 +0100 Subject: [PATCH 069/171] chore(linux): Fix `debian.sh` by removing quotes We want `EXTRA_ARGS` to be split so that we end up with different arguments. --- linux/scripts/debian.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/linux/scripts/debian.sh b/linux/scripts/debian.sh index 135de85432b..66cc7ba1575 100755 --- a/linux/scripts/debian.sh +++ b/linux/scripts/debian.sh @@ -32,10 +32,11 @@ for proj in ${projects}; do downloadSource debianpackage cd "${proj}-${version}" - if [ -n "$DIST" ]; then - EXTRA_ARGS="--distribution $DIST --force-distribution" + if [[ -n "${DIST}" ]]; then + EXTRA_ARGS="--distribution ${DIST} --force-distribution" fi - dch --newversion "${version}-${DEBREVISION-1}" "${EXTRA_ARGS}" "Re-release to Debian" + # shellcheck disable=SC2086 + dch --newversion "${version}-${DEBREVISION-1}" ${EXTRA_ARGS} "Re-release to Debian" debuild -d -S -sa -Zxz cd "${BASEDIR}" done From 349168f23766109fda68c81b96808c10bea5670e Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Mon, 19 Feb 2024 14:16:04 -0600 Subject: [PATCH 070/171] chore(developer): rename MarkerTracker to SubstitutionTracker - preparing to track variables also For #10731 --- developer/src/kmc-ldml/src/compiler/disp.ts | 6 +-- developer/src/kmc-ldml/src/compiler/keys.ts | 10 ++--- ...ker-tracker.ts => substitution-tracker.ts} | 43 +++++++++++++------ developer/src/kmc-ldml/src/compiler/tran.ts | 8 ++-- developer/src/kmc-ldml/src/compiler/vars.ts | 32 +++++++------- 5 files changed, 58 insertions(+), 41 deletions(-) rename developer/src/kmc-ldml/src/compiler/{marker-tracker.ts => substitution-tracker.ts} (61%) diff --git a/developer/src/kmc-ldml/src/compiler/disp.ts b/developer/src/kmc-ldml/src/compiler/disp.ts index b5389103c1d..7c8839f31af 100644 --- a/developer/src/kmc-ldml/src/compiler/disp.ts +++ b/developer/src/kmc-ldml/src/compiler/disp.ts @@ -7,12 +7,12 @@ import { SectionCompiler } from "./section-compiler.js"; import DependencySections = KMXPlus.DependencySections; import Disp = KMXPlus.Disp; import DispItem = KMXPlus.DispItem; -import { MarkerTracker, MarkerUse } from "./marker-tracker.js"; +import { SubstitutionUse, Substitutions } from "./substitution-tracker.js"; export class DispCompiler extends SectionCompiler { - static validateMarkers(keyboard: LDMLKeyboard.LKKeyboard, mt : MarkerTracker): boolean { + static validateSubstitutions(keyboard: LDMLKeyboard.LKKeyboard, st : Substitutions): boolean { keyboard.displays?.display?.forEach(({ output }) => - mt.add(MarkerUse.match, MarkerParser.allReferences(output))); + st.markers.add(SubstitutionUse.match, MarkerParser.allReferences(output))); // no marker references in 'id' return true; } diff --git a/developer/src/kmc-ldml/src/compiler/keys.ts b/developer/src/kmc-ldml/src/compiler/keys.ts index 9dea9516da8..3856cc00ff9 100644 --- a/developer/src/kmc-ldml/src/compiler/keys.ts +++ b/developer/src/kmc-ldml/src/compiler/keys.ts @@ -9,19 +9,19 @@ import KeysKeys = KMXPlus.KeysKeys; import ListItem = KMXPlus.ListItem; import KeysFlicks = KMXPlus.KeysFlicks; import { allUsedKeyIdsInFlick, allUsedKeyIdsInKey, allUsedKeyIdsInLayers, calculateUniqueKeys, hashFlicks, hashKeys, translateLayerAttrToModifier, validModifier } from '../util/util.js'; -import { MarkerTracker, MarkerUse } from './marker-tracker.js'; +import { SubstitutionUse, Substitutions } from './substitution-tracker.js'; /** reserved name for the special gap key. space is not allowed in key ids. */ const reserved_gap = "gap (reserved)"; export class KeysCompiler extends SectionCompiler { - static validateMarkers( + static validateSubstitutions( keyboard: LDMLKeyboard.LKKeyboard, - mt: MarkerTracker + st: Substitutions ): boolean { // TODO-LDML: repetition - + const mt = st.markers; const uniqueKeys = calculateUniqueKeys([...keyboard.keys?.key]); const keyBag = hashKeys(uniqueKeys); // for easier lookup // will be the set of ALL keys used in this keyboard @@ -37,7 +37,7 @@ export class KeysCompiler extends SectionCompiler { for (let keyId of usedKeys.values()) { const key = keyBag.get(keyId); if (!key) continue; - mt.add(MarkerUse.emit, MarkerParser.allReferences(key.output)); + mt.add(SubstitutionUse.emit, MarkerParser.allReferences(key.output)); } return true; } diff --git a/developer/src/kmc-ldml/src/compiler/marker-tracker.ts b/developer/src/kmc-ldml/src/compiler/substitution-tracker.ts similarity index 61% rename from developer/src/kmc-ldml/src/compiler/marker-tracker.ts rename to developer/src/kmc-ldml/src/compiler/substitution-tracker.ts index 8007f29e5bf..c852ef348ea 100644 --- a/developer/src/kmc-ldml/src/compiler/marker-tracker.ts +++ b/developer/src/kmc-ldml/src/compiler/substitution-tracker.ts @@ -1,7 +1,7 @@ /** - * Verb for MarkerTracker.add() + * Verb for SubstitutionTracker.add() */ -export enum MarkerUse { +export enum SubstitutionUse { /** outputs this marker into context (e.g. transform to= or key to=) */ emit, /** consumes this marker out of the context (e.g. transform from=) */ @@ -12,18 +12,18 @@ export enum MarkerUse { variable, } -type MarkerSet = Set; +type SubstitutionSet = Set; /** Tracks usage of markers */ -export class MarkerTracker { +export class SubstitutionTracker { /** markers that were emitted */ - emitted: MarkerSet; + emitted: SubstitutionSet; /** markers that were consumed and removed from the context */ - consumed: MarkerSet; + consumed: SubstitutionSet; /** markers that were matched, but not necessarily consumed */ - matched: MarkerSet; + matched: SubstitutionSet; /** all markers */ - all: MarkerSet; + all: SubstitutionSet; constructor() { this.emitted = new Set(); @@ -35,28 +35,28 @@ export class MarkerTracker { /** * * @param verb what kind of use we are adding - * @param markers list of markers to add + * @param markers list of substitutions to add */ - add(verb: MarkerUse, markers: string[]) { + add(verb: SubstitutionUse, markers: string[]) { if (!markers.length) { return; // skip if empty } - if (verb == MarkerUse.emit) { + if (verb == SubstitutionUse.emit) { markers.forEach((m) => { this.emitted.add(m); this.all.add(m); }); - } else if (verb == MarkerUse.consume) { + } else if (verb == SubstitutionUse.consume) { markers.forEach((m) => { this.consumed.add(m); this.all.add(m); }); - } else if (verb == MarkerUse.match) { + } else if (verb == SubstitutionUse.match) { markers.forEach((m) => { this.matched.add(m); this.all.add(m); }); - } else if (verb == MarkerUse.variable) { + } else if (verb == SubstitutionUse.variable) { markers.forEach((m) => { // we don't know, so add it to all three this.matched.add(m); @@ -70,3 +70,18 @@ export class MarkerTracker { } } } + +/** rollup of several substitution types */ +export class Substitutions { + markers: SubstitutionTracker; + set: SubstitutionTracker; + string: SubstitutionTracker; + uset: SubstitutionTracker; + + constructor() { + this.markers = new SubstitutionTracker(); + this.set = new SubstitutionTracker(); + this.string = new SubstitutionTracker(); + this.uset = new SubstitutionTracker(); + } +} diff --git a/developer/src/kmc-ldml/src/compiler/tran.ts b/developer/src/kmc-ldml/src/compiler/tran.ts index 6bf1e28a1ac..02416468307 100644 --- a/developer/src/kmc-ldml/src/compiler/tran.ts +++ b/developer/src/kmc-ldml/src/compiler/tran.ts @@ -15,18 +15,18 @@ import LKTransform = LDMLKeyboard.LKTransform; import LKTransforms = LDMLKeyboard.LKTransforms; import { verifyValidAndUnique } from "../util/util.js"; import { CompilerMessages } from "./messages.js"; -import { MarkerTracker, MarkerUse } from "./marker-tracker.js"; +import { Substitutions, SubstitutionUse } from "./substitution-tracker.js"; type TransformCompilerType = 'simple' | 'backspace'; export abstract class TransformCompiler extends SectionCompiler { - static validateMarkers(keyboard: LDMLKeyboard.LKKeyboard, mt : MarkerTracker): boolean { + static validateSubstitutions(keyboard: LDMLKeyboard.LKKeyboard, st : Substitutions): boolean { keyboard?.transforms?.forEach(transforms => transforms.transformGroup.forEach(transformGroup => { transformGroup.transform?.forEach(({ to, from }) => { - mt.add(MarkerUse.emit, MarkerParser.allReferences(to)); - mt.add(MarkerUse.consume, MarkerParser.allReferences(from)); + st.markers.add(SubstitutionUse.emit, MarkerParser.allReferences(to)); + st.markers.add(SubstitutionUse.consume, MarkerParser.allReferences(from)); })})); return true; } diff --git a/developer/src/kmc-ldml/src/compiler/vars.ts b/developer/src/kmc-ldml/src/compiler/vars.ts index a6efcd0e2f0..eac896921c8 100644 --- a/developer/src/kmc-ldml/src/compiler/vars.ts +++ b/developer/src/kmc-ldml/src/compiler/vars.ts @@ -12,7 +12,7 @@ import { CompilerMessages } from "./messages.js"; import { KeysCompiler } from "./keys.js"; import { TransformCompiler } from "./tran.js"; import { DispCompiler } from "./disp.js"; -import { MarkerTracker, MarkerUse } from "./marker-tracker.js"; +import { SubstitutionUse, Substitutions } from "./substitution-tracker.js"; export class VarsCompiler extends SectionCompiler { public get id() { return constants.section.vars; @@ -36,7 +36,7 @@ export class VarsCompiler extends SectionCompiler { let valid = true; valid = this.validateVars() && valid; // accumulate validity - valid = this.validateMarkers() && valid; // accumulate validity + valid = this.validateAllSubstitutions() && valid; // accumulate validity return valid; } @@ -148,23 +148,24 @@ export class VarsCompiler extends SectionCompiler { return valid; } - private collectMarkers(mt : MarkerTracker) : boolean { + private collectSubstitutions(st: Substitutions): boolean { let valid = true; // call our friends to validate - valid = this.validateVarsMarkers(this.keyboard3, mt) && valid; // accumulate validity - valid = KeysCompiler.validateMarkers(this.keyboard3, mt) && valid; // accumulate validity - valid = TransformCompiler.validateMarkers(this.keyboard3, mt) && valid; // accumulate validity - valid = DispCompiler.validateMarkers(this.keyboard3, mt) && valid; // accumulate validity + valid = this.validateSubstitutions(this.keyboard3, st) && valid; // accumulate validity + valid = KeysCompiler.validateSubstitutions(this.keyboard3, st) && valid; // accumulate validity + valid = TransformCompiler.validateSubstitutions(this.keyboard3, st) && valid; // accumulate validity + valid = DispCompiler.validateSubstitutions(this.keyboard3, st) && valid; // accumulate validity return valid; } - private validateMarkers(): boolean { - const mt = new MarkerTracker(); - let valid = this.collectMarkers(mt); - // see if there are any matched-but-not-emitted + private validateAllSubstitutions(): boolean { + const st = new Substitutions(); + let valid = this.collectSubstitutions(st); + // see if there are any matched-but-not-emitted markers const matchedNotEmitted : Set = new Set(); + const mt = st.markers; for (const m of mt.matched.values()) { if (m === MarkerParser.ANY_MARKER_ID) continue; // match-all marker if (!mt.emitted.has(m)) { @@ -186,9 +187,9 @@ export class VarsCompiler extends SectionCompiler { return valid; } - validateVarsMarkers(keyboard: LDMLKeyboard.LKKeyboard, mt : MarkerTracker) : boolean { + validateSubstitutions(keyboard: LDMLKeyboard.LKKeyboard, st : Substitutions) : boolean { keyboard?.variables?.string?.forEach(({value}) => - mt.add(MarkerUse.variable, MarkerParser.allReferences(value))); + st.markers.add(SubstitutionUse.variable, MarkerParser.allReferences(value))); return true; } @@ -211,8 +212,9 @@ export class VarsCompiler extends SectionCompiler { this.addUnicodeSet(result, e, sections)); // reload markers - TODO-LDML: double work! - const mt = new MarkerTracker(); - this.collectMarkers(mt); + const st = new Substitutions(); + this.collectSubstitutions(st); + const mt = st.markers; // collect all markers, excluding the match-all const allMarkers : string[] = Array.from(mt.all).filter(m => m !== MarkerParser.ANY_MARKER_ID).sort(); From 470a62aaaf99cbca57a1225dc0746c0a61184607 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Mon, 19 Feb 2024 16:39:53 -0600 Subject: [PATCH 071/171] fix(developer): missing variables tests. everywhere. Fixes #10731 --- developer/src/kmc-ldml/src/compiler/disp.ts | 8 +- developer/src/kmc-ldml/src/compiler/keys.ts | 10 +- .../src/compiler/substitution-tracker.ts | 18 +++ developer/src/kmc-ldml/src/compiler/tran.ts | 22 ++- developer/src/kmc-ldml/src/compiler/vars.ts | 138 +++++++++--------- .../fixtures/sections/disp/invalid-var.xml | 16 ++ .../sections/keys/invalid-undefined-var-1.xml | 16 ++ .../keys/invalid-undefined-var-1b.xml | 17 +++ .../sections/tran/fail-missing-var-1.xml | 14 ++ .../sections/tran/fail-missing-var-2.xml | 14 ++ .../sections/tran/fail-missing-var-3.xml | 14 ++ .../sections/tran/fail-missing-var-4.xml | 18 +++ .../sections/tran/fail-missing-var-5.xml | 18 +++ .../sections/tran/fail-missing-var-6.xml | 14 ++ developer/src/kmc-ldml/test/test-disp.ts | 12 +- developer/src/kmc-ldml/test/test-keys.ts | 12 ++ developer/src/kmc-ldml/test/test-tran.ts | 36 +++++ 17 files changed, 314 insertions(+), 83 deletions(-) create mode 100644 developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-var.xml create mode 100644 developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml create mode 100644 developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml create mode 100644 developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-1.xml create mode 100644 developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-2.xml create mode 100644 developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-3.xml create mode 100644 developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-4.xml create mode 100644 developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-5.xml create mode 100644 developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-6.xml diff --git a/developer/src/kmc-ldml/src/compiler/disp.ts b/developer/src/kmc-ldml/src/compiler/disp.ts index 7c8839f31af..2c614def8da 100644 --- a/developer/src/kmc-ldml/src/compiler/disp.ts +++ b/developer/src/kmc-ldml/src/compiler/disp.ts @@ -1,5 +1,5 @@ import { constants } from "@keymanapp/ldml-keyboard-constants"; -import { KMXPlus, LDMLKeyboard, MarkerParser } from '@keymanapp/common-types'; +import { KMXPlus, LDMLKeyboard } from '@keymanapp/common-types'; import { CompilerMessages } from "./messages.js"; import { SectionCompiler } from "./section-compiler.js"; @@ -11,8 +11,10 @@ import { SubstitutionUse, Substitutions } from "./substitution-tracker.js"; export class DispCompiler extends SectionCompiler { static validateSubstitutions(keyboard: LDMLKeyboard.LKKeyboard, st : Substitutions): boolean { - keyboard.displays?.display?.forEach(({ output }) => - st.markers.add(SubstitutionUse.match, MarkerParser.allReferences(output))); + keyboard.displays?.display?.forEach(({ display, output }) => { + st.addStringAndMarkerSubstitution(SubstitutionUse.match, output); + st.addStringSubstitution(SubstitutionUse.emit, display); + }); // no marker references in 'id' return true; } diff --git a/developer/src/kmc-ldml/src/compiler/keys.ts b/developer/src/kmc-ldml/src/compiler/keys.ts index 3856cc00ff9..15cbc2cd98e 100644 --- a/developer/src/kmc-ldml/src/compiler/keys.ts +++ b/developer/src/kmc-ldml/src/compiler/keys.ts @@ -1,5 +1,5 @@ import { SectionIdent, constants } from '@keymanapp/ldml-keyboard-constants'; -import { LDMLKeyboard, KMXPlus, Constants, MarkerParser } from '@keymanapp/common-types'; +import { LDMLKeyboard, KMXPlus, Constants } from '@keymanapp/common-types'; import { CompilerMessages } from './messages.js'; import { SectionCompiler } from "./section-compiler.js"; @@ -20,8 +20,6 @@ export class KeysCompiler extends SectionCompiler { keyboard: LDMLKeyboard.LKKeyboard, st: Substitutions ): boolean { - // TODO-LDML: repetition - const mt = st.markers; const uniqueKeys = calculateUniqueKeys([...keyboard.keys?.key]); const keyBag = hashKeys(uniqueKeys); // for easier lookup // will be the set of ALL keys used in this keyboard @@ -33,11 +31,11 @@ export class KeysCompiler extends SectionCompiler { KeysCompiler.addKeysFromFlicks(usedFlicks, flickHash, usedKeys); KeysCompiler.addUsedGestureKeys(layerKeyIds, keyBag, usedKeys); - // process each key + // process each used key. unused keys don't get checked. for (let keyId of usedKeys.values()) { const key = keyBag.get(keyId); - if (!key) continue; - mt.add(SubstitutionUse.emit, MarkerParser.allReferences(key.output)); + if (!key) continue; // key not found is handled elsewhere. + st.addStringAndMarkerSubstitution(SubstitutionUse.emit, key.output); } return true; } diff --git a/developer/src/kmc-ldml/src/compiler/substitution-tracker.ts b/developer/src/kmc-ldml/src/compiler/substitution-tracker.ts index c852ef348ea..e37e320b0f6 100644 --- a/developer/src/kmc-ldml/src/compiler/substitution-tracker.ts +++ b/developer/src/kmc-ldml/src/compiler/substitution-tracker.ts @@ -1,3 +1,5 @@ +import { MarkerParser, VariableParser } from "@keymanapp/common-types"; + /** * Verb for SubstitutionTracker.add() */ @@ -73,6 +75,22 @@ export class SubstitutionTracker { /** rollup of several substitution types */ export class Substitutions { + addSetAndStringSubtitution(verb: SubstitutionUse, str?: string) { + this.set.add(verb, VariableParser.allSetReferences(str)); + this.addStringAndMarkerSubstitution(verb, str); + } + /** add a string that can have string var substitutions or markers */ + addStringAndMarkerSubstitution(verb: SubstitutionUse, str?: string) { + this.addMarkers(verb, str); + this.addStringSubstitution(verb, str); + } + addStringSubstitution(verb: SubstitutionUse, str?: string) { + this.string.add(verb, VariableParser.allStringReferences(str)); + } + /** add a string that's just markers */ + addMarkers(verb: SubstitutionUse, str?: string) { + this.markers.add(verb, MarkerParser.allReferences(str)); + } markers: SubstitutionTracker; set: SubstitutionTracker; string: SubstitutionTracker; diff --git a/developer/src/kmc-ldml/src/compiler/tran.ts b/developer/src/kmc-ldml/src/compiler/tran.ts index 02416468307..1bb392c38b2 100644 --- a/developer/src/kmc-ldml/src/compiler/tran.ts +++ b/developer/src/kmc-ldml/src/compiler/tran.ts @@ -21,13 +21,27 @@ type TransformCompilerType = 'simple' | 'backspace'; export abstract class TransformCompiler extends SectionCompiler { - static validateSubstitutions(keyboard: LDMLKeyboard.LKKeyboard, st : Substitutions): boolean { + static validateSubstitutions(keyboard: LDMLKeyboard.LKKeyboard, st: Substitutions): boolean { keyboard?.transforms?.forEach(transforms => transforms.transformGroup.forEach(transformGroup => { transformGroup.transform?.forEach(({ to, from }) => { - st.markers.add(SubstitutionUse.emit, MarkerParser.allReferences(to)); - st.markers.add(SubstitutionUse.consume, MarkerParser.allReferences(from)); - })})); + st.addSetAndStringSubtitution(SubstitutionUse.consume, from); + st.addSetAndStringSubtitution(SubstitutionUse.emit, to); + const mapFrom = VariableParser.CAPTURE_SET_REFERENCE.exec(from); + const mapTo = VariableParser.MAPPED_SET_REFERENCE.exec(to || ''); + if (mapFrom) { + // add the 'from' as a match + st.set.add(SubstitutionUse.consume, [mapFrom[1]]); + } + if (mapTo) { + // add the 'from' as a match + st.set.add(SubstitutionUse.emit, [mapTo[1]]); + } + }); + transformGroup.reorder?.forEach(({ before }) => { + st.addStringSubstitution(SubstitutionUse.consume, before); + }); + })); return true; } diff --git a/developer/src/kmc-ldml/src/compiler/vars.ts b/developer/src/kmc-ldml/src/compiler/vars.ts index eac896921c8..4fe66233ada 100644 --- a/developer/src/kmc-ldml/src/compiler/vars.ts +++ b/developer/src/kmc-ldml/src/compiler/vars.ts @@ -35,20 +35,15 @@ export class VarsCompiler extends SectionCompiler { public validate(): boolean { let valid = true; - valid = this.validateVars() && valid; // accumulate validity valid = this.validateAllSubstitutions() && valid; // accumulate validity return valid; } - private validateVars(): boolean { + private validateVars(st: Substitutions): boolean { let valid = true; const variables = this.keyboard3?.variables; - if (!variables) { - return true; // nothing to check - } - // Check for duplicate ids const allIds = new Set(); const dups = new Set(); @@ -69,75 +64,56 @@ export class VarsCompiler extends SectionCompiler { } } - // Strings - for (const { id, value } of variables?.string) { - addId(id); - allStrings.add(id); - const stringrefs = VariableParser.allStringReferences(value); - for (const id2 of stringrefs) { - if (!allStrings.has(id2)) { - valid = false; - this.callbacks.reportMessage(CompilerMessages.Error_MissingStringVariable({ id: id2 })); - } + if (variables) { + // Strings + for (const { id, value } of variables.string) { + addId(id); + allStrings.add(id); + const stringrefs = VariableParser.allStringReferences(value); + st.string.add(SubstitutionUse.variable, stringrefs); } - } - // Sets - for (const { id, value } of variables.set) { - addId(id); - allSets.add(id); - // check for illegal references, here. - const stringrefs = VariableParser.allStringReferences(value); - for (const id2 of stringrefs) { - if (!allStrings.has(id2)) { - valid = false; - this.callbacks.reportMessage(CompilerMessages.Error_MissingStringVariable({ id: id2 })); - } - } - - // Now split into spaces. - const items: string[] = VariableParser.setSplitter(value); - for (const item of items) { - const setrefs = VariableParser.allSetReferences(item); - if (setrefs.length > 1) { - // this is the form $[seta]$[setb] - valid = false; - this.callbacks.reportMessage(CompilerMessages.Error_NeedSpacesBetweenSetVariables({ item })); - } else { - for (const id2 of setrefs) { - if (!allSets.has(id2)) { - valid = false; - this.callbacks.reportMessage(CompilerMessages.Error_MissingSetVariable({ id: id2 })); - } + // Sets + for (const { id, value } of variables.set) { + addId(id); + allSets.add(id); + // check for illegal references, here. + const stringrefs = VariableParser.allStringReferences(value); + st.string.add(SubstitutionUse.variable, stringrefs); + + // Now split into spaces. + const items: string[] = VariableParser.setSplitter(value); + for (const item of items) { + const setrefs = VariableParser.allSetReferences(item); + if (setrefs.length > 1) { + // this is the form $[seta]$[setb] + valid = false; + this.callbacks.reportMessage(CompilerMessages.Error_NeedSpacesBetweenSetVariables({ item })); + } else { + st.set.add(SubstitutionUse.variable, setrefs); // the reference to a 'map' } - } - // TODO-LDML: Are there other illegal cases here? what about "x$[set]"? - } - } - // UnicodeSets - for (const { id, value } of variables.unicodeSet) { - addId(id); - allUnicodeSets.add(id); - const stringrefs = VariableParser.allStringReferences(value); - for (const id2 of stringrefs) { - if (!allStrings.has(id2)) { - valid = false; - this.callbacks.reportMessage(CompilerMessages.Error_MissingStringVariable({ id: id2 })); + // TODO-LDML: Are there other illegal cases here? what about "x$[set]"? } } - const setrefs = VariableParser.allSetReferences(value); - for (const id2 of setrefs) { - if (!allUnicodeSets.has(id2)) { - valid = false; - if (allSets.has(id2)) { - // $[set] in a UnicodeSet must be another UnicodeSet. - this.callbacks.reportMessage(CompilerMessages.Error_CantReferenceSetFromUnicodeSet({ id: id2 })); - } else { - this.callbacks.reportMessage(CompilerMessages.Error_MissingUnicodeSetVariable({ id: id2 })); + // UnicodeSets + for (const { id, value } of variables.unicodeSet) { + addId(id); + allUnicodeSets.add(id); + const stringrefs = VariableParser.allStringReferences(value); + st.string.add(SubstitutionUse.variable, stringrefs); + const setrefs = VariableParser.allSetReferences(value); + for (const id2 of setrefs) { + if (!allUnicodeSets.has(id2)) { + valid = false; + if (allSets.has(id2)) { + // $[set] in a UnicodeSet must be another UnicodeSet. + this.callbacks.reportMessage(CompilerMessages.Error_CantReferenceSetFromUnicodeSet({ id: id2 })); + } else { + st.uset.add(SubstitutionUse.variable, [id2]); + } } } } } - // one report if any dups if (dups.size > 0) { this.callbacks.reportMessage(CompilerMessages.Error_DuplicateVariable({ @@ -145,6 +121,29 @@ export class VarsCompiler extends SectionCompiler { })); valid = false; } + + // check for any missing vars + for (const id of st.set.all) { + // note: we check the uset list also. we don't know until later which was + // intended. collisions are handled separately. + if (!allSets.has(id) && !allUnicodeSets.has(id)) { + valid = false; + this.callbacks.reportMessage(CompilerMessages.Error_MissingSetVariable({ id })); + } + } + for (const id of st.string.all) { + if (!allStrings.has(id)) { + valid = false; + this.callbacks.reportMessage(CompilerMessages.Error_MissingStringVariable({ id })); + } + } + for (const id of st.uset.all) { + if (!allUnicodeSets.has(id)) { + valid = false; + this.callbacks.reportMessage(CompilerMessages.Error_MissingUnicodeSetVariable({ id })); + } + } + return valid; } @@ -156,7 +155,6 @@ export class VarsCompiler extends SectionCompiler { valid = KeysCompiler.validateSubstitutions(this.keyboard3, st) && valid; // accumulate validity valid = TransformCompiler.validateSubstitutions(this.keyboard3, st) && valid; // accumulate validity valid = DispCompiler.validateSubstitutions(this.keyboard3, st) && valid; // accumulate validity - return valid; } @@ -184,6 +182,10 @@ export class VarsCompiler extends SectionCompiler { this.callbacks.reportMessage(CompilerMessages.Error_MissingMarkers({ ids: Array.from(matchedNotEmitted.values()).sort() })); valid = false; } + + // now, validate the variables. + valid = this.validateVars(st) && valid; + return valid; } diff --git a/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-var.xml b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-var.xml new file mode 100644 index 00000000000..8ba588ce14b --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/disp/invalid-var.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml new file mode 100644 index 00000000000..233aa516db8 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml new file mode 100644 index 00000000000..9e8f15bb960 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/keys/invalid-undefined-var-1b.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-1.xml b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-1.xml new file mode 100644 index 00000000000..d9eb951b4db --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-1.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-2.xml b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-2.xml new file mode 100644 index 00000000000..0bbf24c44f7 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-2.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-3.xml b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-3.xml new file mode 100644 index 00000000000..d5af2a70fe3 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-3.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-4.xml b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-4.xml new file mode 100644 index 00000000000..9cdd6a5799f --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-4.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-5.xml b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-5.xml new file mode 100644 index 00000000000..6264b114a11 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-5.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-6.xml b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-6.xml new file mode 100644 index 00000000000..bce70eb2275 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/tran/fail-missing-var-6.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/test-disp.ts b/developer/src/kmc-ldml/test/test-disp.ts index 4faa866c4d7..678728d3e52 100644 --- a/developer/src/kmc-ldml/test/test-disp.ts +++ b/developer/src/kmc-ldml/test/test-disp.ts @@ -1,7 +1,7 @@ import 'mocha'; import {assert} from 'chai'; import { DispCompiler } from '../src/compiler/disp.js'; -import { compilerTestCallbacks, loadSectionFixture } from './helpers/index.js'; +import { compilerTestCallbacks, loadSectionFixture, testCompilationCases } from './helpers/index.js'; import { KMXPlus } from '@keymanapp/common-types'; import { CompilerMessages } from '../src/compiler/messages.js'; @@ -81,6 +81,14 @@ describe('disp', function () { assert.equal(compilerTestCallbacks.messages.length, 1); assert.deepEqual(compilerTestCallbacks.messages[0], CompilerMessages.Error_DisplayNeedsToOrId({ output: 'e', keyId: 'e' })); }); - + testCompilationCases(DispCompiler, [ + { + subpath: 'sections/disp/invalid-var.xml', + errors: [ + CompilerMessages.Error_MissingStringVariable({id: "missingdisplay"}), + CompilerMessages.Error_MissingStringVariable({id: "missingoutput"}), + ], + }, + ]); }); diff --git a/developer/src/kmc-ldml/test/test-keys.ts b/developer/src/kmc-ldml/test/test-keys.ts index eb286f2838e..a2906d0e58d 100644 --- a/developer/src/kmc-ldml/test/test-keys.ts +++ b/developer/src/kmc-ldml/test/test-keys.ts @@ -391,6 +391,18 @@ describe('keys.kmap', function () { CompilerMessages.Error_InvalidScanCode({ form: "zzz", codes: ['ff'] }), ], }, + { + subpath: 'sections/keys/invalid-undefined-var-1.xml', + errors: [ + CompilerMessages.Error_MissingStringVariable({id: "varsok"}), + ], + }, + { + subpath: 'sections/keys/invalid-undefined-var-1b.xml', + errors: [ + CompilerMessages.Error_MissingStringVariable({id: "varsok"}), + ], + }, ], keysDependencies); it('should reject layouts with too many hardware rows', async function() { diff --git a/developer/src/kmc-ldml/test/test-tran.ts b/developer/src/kmc-ldml/test/test-tran.ts index c12173a2507..6e70c4b9c10 100644 --- a/developer/src/kmc-ldml/test/test-tran.ts +++ b/developer/src/kmc-ldml/test/test-tran.ts @@ -297,6 +297,42 @@ describe('tran', function () { CompilerMessages.Error_InvalidQuadEscape({ cp: 295 }), ], }, + { + subpath: `sections/tran/fail-missing-var-1.xml`, + errors: [ + CompilerMessages.Error_MissingStringVariable({ id: "missingfrom" }), + ], + }, + { + subpath: `sections/tran/fail-missing-var-2.xml`, + errors: [ + CompilerMessages.Error_MissingStringVariable({ id: "missingto" }), + ], + }, + { + subpath: `sections/tran/fail-missing-var-3.xml`, + errors: [ + CompilerMessages.Error_MissingSetVariable({ id: "missingset" }), + ], + }, + { + subpath: `sections/tran/fail-missing-var-4.xml`, + errors: [ + CompilerMessages.Error_MissingSetVariable({ id: "missingset" }), + ], + }, + { + subpath: `sections/tran/fail-missing-var-5.xml`, + errors: [ + CompilerMessages.Error_MissingSetVariable({ id: "missingset" }), + ], + }, + { + subpath: `sections/tran/fail-missing-var-6.xml`, + errors: [ + CompilerMessages.Error_MissingStringVariable({ id: "missingstr" }), + ], + }, ], tranDependencies); }); From 0921ae0354d9032970df4b034744af093f0ed2db Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 20 Feb 2024 06:18:15 +0700 Subject: [PATCH 072/171] chore(developer): handle shift and root path in kmc.cmd --- developer/src/inst/node/kmc.cmd | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/developer/src/inst/node/kmc.cmd b/developer/src/inst/node/kmc.cmd index 9e0c3c8f311..f41bf9fafdd 100644 --- a/developer/src/inst/node/kmc.cmd +++ b/developer/src/inst/node/kmc.cmd @@ -2,6 +2,9 @@ rem This script avoids path dependencies for node for distribution rem with Keyman Developer. When used on platforms other than Windows, rem node can be used directly with the compiler (`npm link` will setup). + +set root=%~dp0 + if "%1" == "--enable-source-maps" ( set ESM=--enable-source-maps shift @@ -18,5 +21,5 @@ shift goto :build_params :finished_building_params -"%~dp0\node.js\node.exe" %ESM% "%~dp0\kmc\kmc.mjs" %params% +"%root%\node.js\node.exe" %ESM% "%root%\kmc\kmc.mjs" %params% exit /b %errorlevel% \ No newline at end of file From e431f850a046313771e5d6d79576abc9cf4a4c67 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 20 Feb 2024 07:12:49 +0700 Subject: [PATCH 073/171] fix(developer): match kmc console formatting for messages in IDE Fixes #10546. Format compiler messages in the same way as kmc, and match the colors from kmc's console log messages. --- developer/src/tike/main/UfrmMessages.pas | 168 +++++++++++++++--- ...an.Developer.System.Project.ProjectLog.pas | 40 +---- 2 files changed, 148 insertions(+), 60 deletions(-) diff --git a/developer/src/tike/main/UfrmMessages.pas b/developer/src/tike/main/UfrmMessages.pas index ade6b1d1b8b..f57e097fc4a 100644 --- a/developer/src/tike/main/UfrmMessages.pas +++ b/developer/src/tike/main/UfrmMessages.pas @@ -1,18 +1,18 @@ (* Name: UfrmMessages Copyright: Copyright (C) SIL International. - Documentation: - Description: + Documentation: + Description: Create Date: 1 Aug 2006 Modified Date: 24 Jul 2015 Authors: mcdurdin - Related Files: - Dependencies: + Related Files: + Dependencies: - Bugs: - Todo: - Notes: + Bugs: + Todo: + Notes: History: 01 Aug 2006 - mcdurdin - Rework messages as TTntMemo 23 Aug 2006 - mcdurdin - Rework menu as TSp-TbxPopupMenu 14 Sep 2006 - mcdurdin - Double click selects whole line for error @@ -107,6 +107,8 @@ TfrmMessages = class(TTikeDockForm) implementation uses + Winapi.RichEdit, + UfrmMain, UfrmMDIEditor, dmActionsMain, @@ -123,33 +125,145 @@ implementation - Message functions - -------------------------------------------------------------------------------} +const // ABGR - text on white bg, Colors similar to Light+ VSCode color theme + Color_Filename = $96791A; + Color_Line = $197975; + Color_Text = $333333; + Color_Code = $666666; + + Color_Info = $333333; + Color_Hint = $A25015; + Color_Warn = $156193; + Color_Error = $3434C9; + Color_Fatal = $3434C9; + + Color_SuccessText = $1C8816; + Color_InfoText = $6B6B6B; + Color_FailureText = $3434C9; + + // Hard coded message numbers from infrastructureMessages.ts + + NAMESPACE_Infrastructure = $5000; + INFO_FileBuiltSuccessfully = NAMESPACE_Infrastructure or $0006; + INFO_FileNotBuiltSuccessfully = NAMESPACE_Infrastructure or $0007; + INFO_ProjectBuiltSuccessfully = NAMESPACE_Infrastructure or $000B; + INFO_ProjectNotBuiltSuccessfully = NAMESPACE_Infrastructure or $000C; + + procedure TfrmMessages.Add(state: TProjectLogState; filename, msg: WideString; MsgCode, line: Integer); +type + TSegment = record + text: string; + color: TColor; + end; var mi: TMessageItem; FColor: TColor; + FTextColor: TColor; + Segments: array of TSegment; + + procedure AddText(const text: string; color: TColor); + var + s: TSegment; + begin + s.text := text; + s.color := color; + SetLength(Segments, Length(Segments)+1); + Segments[High(Segments)] := s; + end; + + procedure AddLine; + var + t: string; + s: TSegment; + cr: TCharRange; + cf: TCharFormat; + gtle: TGetTextLengthEx; + begin + // TRichEdit's wrapper of the RichEdit control is very slow, so we instead + // use direct messages to the RichEdit control to emit formatted text + FillChar(cf, sizeof(TCharFormat), 0); + cf.cbSize := sizeof(TCharFormat); + cf.dwMask := CFM_COLOR; + + gtle.flags := GTL_PRECISE or GTL_NUMCHARS; + gtle.codepage := 1200; + cr.cpMin := SendMessage(memoMessage.Handle, EM_GETTEXTLENGTHEX, NativeUint(@gtle), 0); + cr.cpMax := cr.cpMin; + SendMessage(memoMessage.Handle, EM_EXSETSEL, 0, NativeUint(@cr)); + + for s in Segments do + t := t + s.text; + memoMessage.SelText := t; + + for s in Segments do + begin + cr.cpMin := cr.cpMax; + cr.cpMax := cr.cpMax + s.text.Length; + SendMessage(memoMessage.Handle, EM_EXSETSEL, 0, NativeUint(@cr)); + cf.crTextColor := ColorToRGB(s.color); + SendMessage(memoMessage.Handle, EM_SETCHARFORMAT, SCF_SELECTION, NativeUint(@cf)); + end; + cr.cpMin := cr.cpMax; + SendMessage(memoMessage.Handle, EM_EXSETSEL, 0, NativeUint(@cr)); + end; + +var + eventMask: DWord; begin - mi := TMessageItem.Create; - mi.FileName := filename; - mi.Msg := msg; - mi.MsgCode := MsgCode; - mi.Line := line; - - case state of - plsInfo: FColor := clBlack; - plsWarning: FColor := clOlive; - plsError: FColor := clRed; - plsFatal: FColor := clRed; - plsSuccess: FColor := clGreen; - plsFailure: FColor := clRed; - else + + eventMask := SendMessage(memoMessage.Handle, EM_SETEVENTMASK, 0, 0); + SendMessage(memoMessage.Handle, WM_SETREDRAW, 0, 0); + try + mi := TMessageItem.Create; + mi.FileName := filename; + mi.Msg := msg; + mi.MsgCode := MsgCode; + mi.Line := line; + FColor := clBlack; - end; + FTextColor := Color_Text; + + // Override formatting for 4 known messages + if (MsgCode = INFO_FileBuiltSuccessfully) or + (MsgCode = INFO_ProjectBuiltSuccessfully) then + state := plsSuccess + else if (MsgCode = INFO_FileNotBuiltSuccessfully) or + (MsgCode = INFO_ProjectNotBuiltSuccessfully) then + state := plsFailure; + + case state of + plsInfo: begin FColor := Color_Info; FTextColor := Color_InfoText; end; + plsHint: FColor := Color_Hint; + plsWarning: FColor := Color_Warn; + plsError: FColor := Color_Error; + plsFatal: FColor := Color_Error; + plsSuccess: begin FColor := Color_Info; FTextColor := Color_SuccessText; end; + plsFailure: begin FColor := Color_Info; FTextColor := Color_FailureText; end; + end; + + // Add a log entry, following the color scheme that we use in kmc, matching + // colors from VSCode's Light+ theme, which work reasonably well on white + // background. - memoMessage.SelStart := Length(memoMessage.Text); - memoMessage.SelLength := 0; - memoMessage.SelAttributes.Color := FColor; - memoMessage.Lines.Add(TProjectLog.FormatMessage(state, filename, msg, msgcode, line)); - memoMessage.SelAttributes.Color := clBlack; + AddText(ExtractFileName(Filename), Color_Filename); + if line > 0 then + begin + AddText(':', Color_Text); + AddText(IntToStr(Line), Color_Line); + end; + AddText(' - ', Color_Text); + AddText(ProjectLogStateTitle[state], FColor); + AddText(' KM'+IntToHex(MsgCode, 5), Color_Code); + AddText(': ', Color_Text); + AddText(StringReplace(msg, #13#10, ' ', [rfReplaceAll]), FTextColor); + + AddText(#13#10, clBlack); + AddLine; + finally + SendMessage(memoMessage.Handle, WM_SETREDRAW, 1, 0); + SendMessage(memoMessage.Handle, EM_SETEVENTMASK, 0, eventMask); + end; FMessageItems.Add(mi); if not memoMessage.Focused then SelLine := memoMessage.Lines.Count - 1; diff --git a/developer/src/tike/project/Keyman.Developer.System.Project.ProjectLog.pas b/developer/src/tike/project/Keyman.Developer.System.Project.ProjectLog.pas index 9776a9ce978..174de3ff57f 100644 --- a/developer/src/tike/project/Keyman.Developer.System.Project.ProjectLog.pas +++ b/developer/src/tike/project/Keyman.Developer.System.Project.ProjectLog.pas @@ -38,44 +38,18 @@ interface const ProjectLogStateTitle: array[TProjectLogState] of string = ( - '', - 'Hint', - 'Warning', - 'Error', - 'Fatal Error', - 'Success', - 'Failure' + 'info', + 'hint', + 'warn', + 'error', + 'fatal', + 'info', + 'info' ); -type - TProjectLog = class sealed - class function FormatMessage(state: TProjectLogState; filename, msg: string; code, line: Integer): string; - end; - implementation uses System.SysUtils; -{ TProjectLog } - -class function TProjectLog.FormatMessage(state: TProjectLogState; filename, - msg: string; code, line: Integer): string; -var - Prefix: string; -begin - Prefix := ProjectLogStateTitle[state]; - if Prefix <> '' then Prefix := Prefix + ': '; - - msg := StringReplace(msg, #13#10, ' ', [rfReplaceAll]); - - if line = 0 - then filename := ExtractFileName(filename) - else filename := Format('%s (%d)', [ExtractFileName(filename), line]); - - if code = 0 - then Result := Format('%s: %s%s', [filename, Prefix, msg]) - else Result := Format('%s: %s%4.4x %s', [filename, Prefix, code, msg]); -end; - end. From 8ca774ba25bce9818d7207c609bf18c2047d5453 Mon Sep 17 00:00:00 2001 From: Shawn Schantz <89134789+sgschantz@users.noreply.github.com> Date: Tue, 20 Feb 2024 09:10:00 +0700 Subject: [PATCH 074/171] use bullet list Co-authored-by: Marc Durdin --- mac/help/about/whatsnew.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mac/help/about/whatsnew.md b/mac/help/about/whatsnew.md index 6033783f5e4..9ba50a66119 100644 --- a/mac/help/about/whatsnew.md +++ b/mac/help/about/whatsnew.md @@ -4,6 +4,5 @@ title: What's New Here are some of the new features we have added to Keyman 17.0 for macOS: -Keyman Engine for macOS depends on Keyman Core for processing keystrokes, improving reliability and consistency with the Linux and Windows versions of Keyman (#10066) - -Move active keyboards list to Keyman section of main Input Menu from hierarchical submenu (#9777) \ No newline at end of file +* Keyman Engine for macOS now uses Keyman Core for processing keystrokes, improving reliability and consistency with the Linux and Windows versions of Keyman (#10066) +* List of Keyman keyboards has been moved out of a submenu of the main Input Menu into the Keyman section of the menu (#9777) \ No newline at end of file From 86fa729ef96692621c84a769726906f9c04542e4 Mon Sep 17 00:00:00 2001 From: Shawn Schantz <89134789+sgschantz@users.noreply.github.com> Date: Tue, 20 Feb 2024 09:44:01 +0700 Subject: [PATCH 075/171] remove superfluous Help Topics heading Co-authored-by: Marc Durdin --- ios/help/index.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ios/help/index.md b/ios/help/index.md index 663cb814579..739195dd6e5 100644 --- a/ios/help/index.md +++ b/ios/help/index.md @@ -28,8 +28,7 @@ title: Keyman for iPhone and iPad 17.0 Help ## Ask for Help * [Ask other users in the SIL Keyman Community](https://community.software.sil.org/c/keyman) -## Help Topics -### [Troubleshooting](troubleshooting/) +## [Troubleshooting](troubleshooting/) * [How To - Installing fonts](troubleshooting/installing-fonts) * [How To - Integrating Keyman for iPhone and iPad](troubleshooting/integrating) From bd487e2683a527a39db561a2b13a6689ac3654e1 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Tue, 20 Feb 2024 10:20:18 +0700 Subject: [PATCH 076/171] update help content for review comments --- ios/help/basic/keyboard-usage.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/help/basic/keyboard-usage.md b/ios/help/basic/keyboard-usage.md index 67ec54f32b1..e56b56ae4b5 100644 --- a/ios/help/basic/keyboard-usage.md +++ b/ios/help/basic/keyboard-usage.md @@ -2,7 +2,7 @@ title: Using a Keyboard - Keyman for iPhone and iPad Help --- -Keyman keyboards are accessed by pressing the globe key whenever an iOS app presents the system keyboard. The follow screenshot shows the Keyman EuroLatin keyboard displayed with Apple's Calendar app. +Keyman keyboards are accessed by pressing the globe key whenever an iOS app presents the system keyboard. The following screenshot shows the Keyman EuroLatin keyboard displayed with Apple's Calendar app. ![](../ios_images/system-keyboard-cal.png) @@ -20,7 +20,7 @@ The Gestures: ![](../ios_images/key-submenu.png) -* **Flick:** hold and slide in various directions on a key to reach alternate outputs. The key will animate to show you the expected output. A common flick is to slide down to reach numerals on the top row of the keyboard. +* **Flick:** hold and slide in various directions on a key to reach alternate outputs. The key will animate to show you the expected output. For example, a keyboard could support sliding down on keys in the top row to output numerals. * **Multitap:** some keys produce alternate outputs with rapid, repeated taps. For example, tapping rapidly twice on shift will activate caps lock on many keyboards. From 457275e46f85c874c45bdce03e7bf05e5378911c Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 20 Feb 2024 11:10:39 +0700 Subject: [PATCH 077/171] fix(developer): ensure fatal errors report message or made non-fatal Fixes #10678. Some messages have been reduced to ERROR instead of FATAL, as they are not internal compiler errors. Where fatal messages are raised, the message will now be reported through correctly to Sentry. --- common/test/keyboards/invalid/README.md | 12 ++++++------ .../src/common/include/kmn_compiler_errors.h | 15 ++++++++------- .../kmc-kmn/src/compiler/kmn-compiler-messages.ts | 6 +++--- .../src/kmc/src/util/NodeCompilerCallbacks.ts | 2 +- developer/src/kmcmplib/src/CompMsg.cpp | 2 +- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/common/test/keyboards/invalid/README.md b/common/test/keyboards/invalid/README.md index a1a1b5e3ab9..cf5c958a9d9 100644 --- a/common/test/keyboards/invalid/README.md +++ b/common/test/keyboards/invalid/README.md @@ -43,20 +43,20 @@ While running, kmcompxtest extracts those 4 characters from the Filename (e.g. 4 ### Tests are available for the following CERR_: -| | Error Number | CERR_ +| | Error Number | CERR_ | :-: | :-----------:| :------------------------------------- -| | 00000800 | CERR_LEXICAL_MODEL_MIN +| | 00000800 | CERR_LEXICAL_MODEL_MIN | | 000008FF | CERR_LEXICAL_MODEL_MAX | | 00000800 | CERR_LEXICAL_MODEL_MIN | | 000008FF | CERR_LEXICAL_MODEL_MAX | | 00000000 | CERR_None -| | 00000001 | CERR_EndOfFile +| | 00000001 | CERR_EndOfFile | | 00008002 | CERR_BadCallParams | | 00008004 | CERR_CannotAllocateMemory -| | 00008005 | CERR_InfileNotExist -| | 00008006 | CERR_CannotCreateOutfile +| | 00004005 | CERR_InfileNotExist +| | 00004006 | // CERR_CannotCreateOutfile | | 00008007 | CERR_UnableToWriteFully -| | 00008008 | CERR_CannotReadInfile +| | 00004008 | CERR_CannotReadInfile | | 00008009 | CERR_SomewhereIGotItWrong |**X**| 0000400A | CERR_InvalidToken | | 0000400B | CERR_InvalidBegin diff --git a/developer/src/common/include/kmn_compiler_errors.h b/developer/src/common/include/kmn_compiler_errors.h index e0bea39549c..dc6423af6aa 100644 --- a/developer/src/common/include/kmn_compiler_errors.h +++ b/developer/src/common/include/kmn_compiler_errors.h @@ -41,19 +41,20 @@ // Message codes // -// All errors here and below are mirrored in kmc-kmn/src/compiler/messages.ts; -// if you add a new error here be sure to update that file also. Note that this -// correlation is currently maintained manually. All values must be below -// 0x1000 (exclusive of severity code). +// All errors here and below are mirrored in +// kmc-kmn/src/compiler/kmn-compiler-messages.ts; if you add a new error here be +// sure to update that file also. Note that this correlation is currently +// maintained manually. All values must be below 0x1000 (exclusive of severity +// code). #define CERR_None 0x00000000 #define CERR_EndOfFile 0x00000001 #define CERR_BadCallParams 0x00008002 #define CERR_CannotAllocateMemory 0x00008004 -#define CERR_InfileNotExist 0x00008005 -#define CERR_CannotCreateOutfile 0x00008006 +#define CERR_InfileNotExist 0x00004005 // #10678: reduced from fatal to error in 17.0 +// #define CERR_CannotCreateOutfile 0x00004006 // #10678: reduced from fatal to error in 17.0, but unused #define CERR_UnableToWriteFully 0x00008007 -#define CERR_CannotReadInfile 0x00008008 +#define CERR_CannotReadInfile 0x00004008 // #10678: reduced from fatal to error in 17.0 #define CERR_SomewhereIGotItWrong 0x00008009 #define CERR_InvalidToken 0x0000400A diff --git a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts index 4ad9d025982..7c14eb57caa 100644 --- a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts @@ -112,10 +112,10 @@ export class KmnCompilerMessages { static FATAL_BadCallParams = SevFatal | 0x002; static FATAL_CannotAllocateMemory = SevFatal | 0x004; - static FATAL_InfileNotExist = SevFatal | 0x005; - static FATAL_CannotCreateOutfile = SevFatal | 0x006; + static ERROR_InfileNotExist = SevError | 0x005; // #10678: reduced from fatal to error in 17.0 + // static ERROR_CannotCreateOutfile = SevError | 0x006; // #10678: reduced from fatal to error in 17.0, but unused static FATAL_UnableToWriteFully = SevFatal | 0x007; - static FATAL_CannotReadInfile = SevFatal | 0x008; + static ERROR_CannotReadInfile = SevError | 0x008; // #10678: reduced from fatal to error in 17.0 static FATAL_SomewhereIGotItWrong = SevFatal | 0x009; static ERROR_InvalidToken = SevError | 0x00A; diff --git a/developer/src/kmc/src/util/NodeCompilerCallbacks.ts b/developer/src/kmc/src/util/NodeCompilerCallbacks.ts index ccccb44f89c..446924913ad 100644 --- a/developer/src/kmc/src/util/NodeCompilerCallbacks.ts +++ b/developer/src/kmc/src/util/NodeCompilerCallbacks.ts @@ -139,7 +139,7 @@ export class NodeCompilerCallbacks implements CompilerCallbacks { if(CompilerError.severity(event.code) == CompilerErrorSeverity.Fatal) { // this is async so returns a Promise, we'll let it resolve in its own // time, and it will emit a message to stderr with details at that time - KeymanSentry.reportException(event.exceptionVar, false); + KeymanSentry.reportException(event.exceptionVar ?? event.message, false); } if(disable || CompilerError.severity(event.code) < compilerLogLevelToSeverity[this.options.logLevel]) { diff --git a/developer/src/kmcmplib/src/CompMsg.cpp b/developer/src/kmcmplib/src/CompMsg.cpp index 715750d4f2f..0c1adfa6e6d 100644 --- a/developer/src/kmcmplib/src/CompMsg.cpp +++ b/developer/src/kmcmplib/src/CompMsg.cpp @@ -24,7 +24,7 @@ const struct CompilerError CompilerErrors[] = { { CERR_IndexInVirtualKeySection , "'index' command is illegal in virtual key section"}, { CERR_BadCallParams , "CompileKeyboardFile was called with bad parameters"}, { CERR_InfileNotExist , "Cannot find the input file"}, - { CERR_CannotCreateOutfile , "Cannot open output file for writing"}, + // { CERR_CannotCreateOutfile , "Cannot open output file for writing"}, unused { CERR_UnableToWriteFully , "Unable to write the file completely"}, { CERR_CannotReadInfile , "Cannot read the input file"}, { CERR_SomewhereIGotItWrong , "Internal error: contact Keyman"}, From 8115c15c3ab116b51d7746760cababa85053743d Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 20 Feb 2024 12:03:34 +0700 Subject: [PATCH 078/171] chore(developer): add LDML specific text to Project view Fixes #10543. Very basic text relating to LDML keyboards. Tweaks the remaining text to match our project development model. --- developer/src/tike/xml/project/elements.xsl | 6 ++ developer/src/tike/xml/project/icon32_xml.gif | Bin 0 -> 1181 bytes developer/src/tike/xml/project/icon_xml.gif | Bin 0 -> 932 bytes developer/src/tike/xml/project/keyboards.xsl | 80 ++++++++++++------ 4 files changed, 59 insertions(+), 27 deletions(-) create mode 100644 developer/src/tike/xml/project/icon32_xml.gif create mode 100644 developer/src/tike/xml/project/icon_xml.gif diff --git a/developer/src/tike/xml/project/elements.xsl b/developer/src/tike/xml/project/elements.xsl index 8265cd3e17e..bd11244faf2 100644 --- a/developer/src/tike/xml/project/elements.xsl +++ b/developer/src/tike/xml/project/elements.xsl @@ -178,6 +178,12 @@ + + + gif xml LDML Keyboard Source File + + + png kmx Keyman Keyboard File diff --git a/developer/src/tike/xml/project/icon32_xml.gif b/developer/src/tike/xml/project/icon32_xml.gif new file mode 100644 index 0000000000000000000000000000000000000000..42f1c93946aed47e50e0bebe72a2584964afecfd GIT binary patch literal 1181 zcmZ?wbhEHbRA5kGXlGz(XlS@|=g!@`ckkW1cmMwV2M-=ReE9IuqeqV)KYsG$$*U)nL*^yw7JoYxwqB@++8;3fcd(3u9DY_o~|la zVBqZdsWtC|xWV1ct+{S9dUkATIok98T(6Hn)AN%Hlq2@-xuKuVz#mi{Cp&9X>e1!0 zC;WV?zdpY<)!+Pv?r!tktJ@SC?9MLu@$T{7^#64metl_resrO#h8+M?H(ab`jj#cTyy-b#n9S>T0xqdug{5jX`K)YyLg<`X$l)-~crX@cfb}2?# nBr)>N6FbnOd2NSMhpte;!%WVvFOuC%Sv8+baN&~_V6X-N@1hun literal 0 HcmV?d00001 diff --git a/developer/src/tike/xml/project/icon_xml.gif b/developer/src/tike/xml/project/icon_xml.gif new file mode 100644 index 0000000000000000000000000000000000000000..32bda937e359128f68b5918ae2580f716a567c44 GIT binary patch literal 932 zcmZ?wbhEHb6krfwXlGyu2?&?&!0bk|Ni~=@8AFb|AFQ( zjDpb+7&;-K_>+a1fkBEv2jpZ>o?zf;WH8N;aM+OG$iO7bcc$TCQ!AHrbsXzYG!A4NK?uD)Yv?QlfCE8jZ2QqGnm*jbSf{YG0$O+{FZaz zfx5>m=Waa)tA^#?i+IE|5~74xU19N=>=rtKLHopVubpZR2d+H7wvL0(!1Tnl1xL3R JFf%b&0|20=c + 1 + 1

Creating your first keyboard

-

- Click the New Keyboard button to create a keyboard for any device. This will open the Keyboard Editor, where you can - create a keyboard visually, or programatically with the Keyman Keyboard Language. -

+ +

+ Double-click your keyboard file in the list below to open it in the LDML Keyboard Editor. In Keyman Developer 17, this + is a basic XML editor with an integrated test pane, available from the Keyboard menu. +

+
+ + +

+ Double-click your keyboard file in the list below to open it in the Keyboard Editor, where you can + create a keyboard visually, or programmatically with the Keyman Keyboard Language. +

-
    -
  • - The Layout page in the Keyboard Editor lets you quickly create - a keyboard using a visual representation of a computer keyboard. You can drag and drop characters from the - Character Map to create Unicode keyboard layouts. -
  • -
  • - The Source tab of the layout page shows the keyboard's design in the - Keyman Keyboard Language. From here, you can enhance keyboards with input management features - such as constraints, dead keys, character reordering, and more. Read the Tutorial - for an introduction to these features. -
  • -
+
    +
  • + The Layout page in the Keyboard Editor lets you quickly create + a keyboard using a visual representation of a computer keyboard. You can drag and drop characters from the + Character Map to create Unicode keyboard layouts. +
  • +
  • + The Source tab of the layout page shows the keyboard's design in the + Keyman Keyboard Language. From here, you can enhance keyboards with input management features + such as constraints, dead keys, character reordering, and more. Read the Tutorial + for an introduction to these features. +
  • +
+

It's a good idea to read Developing Open Source Keyboards for guidelines @@ -52,14 +68,24 @@ - + + + + + + - - - + + + + + + + + From 9045d2f970729cc91e98b8291f381f3f99fbf9ba Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 20 Feb 2024 12:51:36 +0700 Subject: [PATCH 079/171] fix(developer): reset debugger after ldml keyboard compile Fixes #10545. --- .../tike/actions/dmActionsKeyboardEditor.pas | 22 +++++++------ ...an.Developer.UI.UfrmLdmlKeyboardEditor.pas | 31 +++++++++++++++++++ 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/developer/src/tike/actions/dmActionsKeyboardEditor.pas b/developer/src/tike/actions/dmActionsKeyboardEditor.pas index 0154b059c05..94d00a34b16 100644 --- a/developer/src/tike/actions/dmActionsKeyboardEditor.pas +++ b/developer/src/tike/actions/dmActionsKeyboardEditor.pas @@ -1,18 +1,18 @@ (* Name: dmActionsKeyboardEditor Copyright: Copyright (C) SIL International. - Documentation: - Description: + Documentation: + Description: Create Date: 23 Aug 2006 Modified Date: 4 May 2015 Authors: mcdurdin - Related Files: - Dependencies: + Related Files: + Dependencies: - Bugs: - Todo: - Notes: + Bugs: + Todo: + Notes: History: 23 Aug 2006 - mcdurdin - Initial version 14 Sep 2006 - mcdurdin - Add debugger actions 28 Sep 2006 - mcdurdin - Added Test Keyboard menu item @@ -33,7 +33,7 @@ 04 Nov 2014 - mcdurdin - I4504 - V9.0 - Consolidate the compile action into single command 04 May 2015 - mcdurdin - I4686 - V9.0 - Refactor compile into project file action 04 May 2015 - mcdurdin - I4687 - V9.0 - Split project UI actions into separate classes - + *) unit dmActionsKeyboardEditor; // I3306 // I3323 @@ -202,7 +202,11 @@ procedure TmodActionsKeyboardEditor.actKeyboardCompileExecute(Sender: TObject); end else if ActiveLdmlKeyboardEditor <> nil then begin - ActiveProjectFileUI.DoAction(pfaCompile, False); + if not ActiveLdmlKeyboardEditor.PrepareForBuild(DebugReset) then + Exit; + + if ActiveProjectFileUI.DoAction(pfaCompile, False) and DebugReset then + ActiveLdmlKeyboardEditor.StartDebugging; end else if ActivePackageEditor <> nil then begin diff --git a/developer/src/tike/child/Keyman.Developer.UI.UfrmLdmlKeyboardEditor.pas b/developer/src/tike/child/Keyman.Developer.UI.UfrmLdmlKeyboardEditor.pas index a9c41b09ec8..66b6b397d2b 100644 --- a/developer/src/tike/child/Keyman.Developer.UI.UfrmLdmlKeyboardEditor.pas +++ b/developer/src/tike/child/Keyman.Developer.UI.UfrmLdmlKeyboardEditor.pas @@ -35,6 +35,7 @@ TfrmLdmlKeyboardEditor = class(TfrmEditor) public procedure StartDebugging; procedure StopDebugging; + function PrepareForBuild(var DebugReset: Boolean): Boolean; property DebugForm: TfrmLdmlKeyboardDebug read FDebugForm; property IsDebugVisible: Boolean read GetIsDebugVisible; end; @@ -43,10 +44,12 @@ implementation uses keymanstrings, + KeymanDeveloperOptions, Keyman.System.Debug.DebugUIStatus, Keyman.Developer.System.Project.xmlLdmlProjectFile, Keyman.Developer.UI.Project.ProjectFileUI, Keyman.Developer.UI.Project.xmlLdmlProjectFileUI, + Keyman.Developer.UI.UfrmMessageDlgWithSave, KeymanDeveloperUtils, TextFileFormat, UfrmMessages; @@ -145,4 +148,32 @@ procedure TfrmLdmlKeyboardEditor.SaveSettings(SaveProject: Boolean); inherited; end; +function TfrmLdmlKeyboardEditor.PrepareForBuild(var DebugReset: Boolean): Boolean; +var + FSave: Boolean; +begin + if IsDebugVisible then + begin + if not FKeymanDeveloperOptions.DebuggerAutoResetBeforeCompiling then + begin + if TfrmMessageDlgWithSave.Execute( + 'You must reset the debugger before recompiling your keyboard. Reset the debugger and recompile?', + 'Always reset the debugger automatically before compiling', + '', True, FSave) in [mrNo, mrCancel] then + Exit(False); + if FSave then + begin + FKeymanDeveloperOptions.DebuggerAutoResetBeforeCompiling := True; + FKeymanDeveloperOptions.Write; + end; + end; + + DebugReset := True; + StopDebugging; + end; + + Result := True; +end; + + end. From 588164504214132c2ffb198ab5c51184c6a6fa32 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 20 Feb 2024 13:04:07 +0700 Subject: [PATCH 080/171] fix(developer): crash opening invalid project Fixes #10684. If a project .kpj file was not saved in UTF-8 or ANSI, or had a BOM, then Keyman Developer would crash with an access violation due to an uninitialized variable. --- .../tike/project/Keyman.Developer.System.Project.ProjectFile.pas | 1 + 1 file changed, 1 insertion(+) diff --git a/developer/src/tike/project/Keyman.Developer.System.Project.ProjectFile.pas b/developer/src/tike/project/Keyman.Developer.System.Project.ProjectFile.pas index 3922822e4bf..da4b1952fe3 100644 --- a/developer/src/tike/project/Keyman.Developer.System.Project.ProjectFile.pas +++ b/developer/src/tike/project/Keyman.Developer.System.Project.ProjectFile.pas @@ -835,6 +835,7 @@ function TProject.Load: Boolean; buf: TBytes; // I3310 encoding: TEncoding; begin + encoding := nil; FState := psLoading; try SetLength(buf, 32); From c850b7145b89253dbf9b51c38a82136d1cd5ac2a Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 20 Feb 2024 12:59:15 +0700 Subject: [PATCH 081/171] fix(android/engine): Remove logs for uninitialized default keyboard --- .../engine/KMKeyboardWebViewClient.java | 5 +---- .../java/com/keyman/engine/KMManager.java | 19 +++++++++++++------ .../engine/data/KeyboardController.java | 8 ++++++-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardWebViewClient.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardWebViewClient.java index 7a315ff6e1d..b80f6766a33 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardWebViewClient.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardWebViewClient.java @@ -90,10 +90,7 @@ private void pageLoaded(WebView view, String url) { // Revert to default (index 0) or fallback keyboard keyboardInfo = KMManager.getKeyboardInfo(context, 0); if (keyboardInfo == null) { - // Only log SystemKeyboard to Sentry because some keyboard apps like FV don't install keyboards until the user chooses - if (keyboardType == KeyboardType.KEYBOARD_TYPE_SYSTEM) { - KMLog.LogError(TAG, "No keyboards installed. Reverting to fallback"); - } + // Don't log to Sentry because some keyboard apps like FV don't install keyboards until the user chooses keyboardInfo = KMManager.getDefaultKeyboard(context); } if (keyboardInfo != null) { diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java index 1d2593baf75..e5f0b3d2ec8 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java @@ -1632,6 +1632,13 @@ public static boolean removeKeyboard(Context context, int position) { return KeyboardPickerActivity.removeKeyboard(context, position); } + public static boolean isDefaultKey(String key) { + if (key != null && key.equals(KMString.format("%s_%s", KMDefault_LanguageID, KMDefault_KeyboardID))) { + return true; + } + return false; + } + /** * Some apps have the user select which keyboard to add. To ensure there's always a fallback * system keyboard when the keyboard list is empty, use this method. @@ -2171,13 +2178,13 @@ public static int getCurrentKeyboardIndex(Context context) { public static Keyboard getCurrentKeyboardInfo(Context context) { int index = getCurrentKeyboardIndex(context); if(index < 0) { - // As of 15.0-beta and 15.0-stable, this only appears to occur when - // #6703 would trigger. This logging may help us better identify the - // root cause. + // index can be undefined if user installs Keyman (without launching it) + // and then enables Keyaman as a system keyboard from the Android settings menus. + // We'll only log if key isn't for fallback keyboard String key = KMKeyboard.currentKeyboard(); - // Even if it's null, it's still a notable error. This function shouldn't - // be reachable in execution (15.0) at a time this variable would be set to `null`. - KMLog.LogError(TAG, "Failed getCurrentKeyboardIndex check for keyboard: " + key); + if (!isDefaultKey(key)) { + KMLog.LogError(TAG, "Failed getCurrentKeyboardIndex check for keyboard: " + key); + } return null; } return KeyboardController.getInstance().getKeyboardInfo(index); diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/data/KeyboardController.java b/android/KMEA/app/src/main/java/com/keyman/engine/data/KeyboardController.java index 0eb56eb0425..7ae2dfa2eb2 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/data/KeyboardController.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/data/KeyboardController.java @@ -12,6 +12,7 @@ import com.keyman.engine.KeyboardPickerActivity; import com.keyman.engine.util.BCP47; import com.keyman.engine.util.FileUtils; +import com.keyman.engine.util.KMString; import com.keyman.engine.util.MapCompat; import com.keyman.engine.KMManager; import com.keyman.engine.util.KMLog; @@ -167,7 +168,7 @@ public Keyboard getKeyboardInfo(int index) { KMLog.LogError(TAG, "getKeyboardInfo while KeyboardController() not initialized"); return null; } else if (index < 0) { - KMLog.LogError(TAG, "getKeyboardInfo with invalid index: " + index); + // Don't need to report to Sentry return null; } @@ -208,7 +209,10 @@ public int getKeyboardIndex(String key) { } } - KMLog.LogError(TAG, "getKeyboardIndex failed for key " + key); + // We'll only log if key isn't for fallback keyboard + if (!KMManager.isDefaultKey(key)) { + KMLog.LogError(TAG, "getKeyboardIndex failed for key " + key); + } return index; } From 8e7a12f8cbd53210ee011b7e441a8865add5150d Mon Sep 17 00:00:00 2001 From: rc-swag <58423624+rc-swag@users.noreply.github.com> Date: Tue, 20 Feb 2024 17:50:32 +1000 Subject: [PATCH 082/171] docs(windows): add whats new k4w 17.0 --- windows/src/desktop/help/about/whatsnew.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/windows/src/desktop/help/about/whatsnew.md b/windows/src/desktop/help/about/whatsnew.md index 228dc2524ee..bb8b6708f2f 100644 --- a/windows/src/desktop/help/about/whatsnew.md +++ b/windows/src/desktop/help/about/whatsnew.md @@ -4,6 +4,9 @@ title: What's New Here are some of the new features we have added to Keyman 17.0 for Windows: +- Support for the new LDML Keyboard Standard. +- Updates to the Keyman for Windows engine to align with enhancements made to Keyman Core, improving the efficiency of processing the input text with each keystroke. + ## Related Topics - [Version History](history) From d6d0b40fa548832f473dcac03f55ee03ebdfd373 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Tue, 20 Feb 2024 11:04:54 +0100 Subject: [PATCH 083/171] chore(linux): Fix `upload-to-debian.sh` script for beta releases --- linux/scripts/upload-to-debian.sh | 35 ++++++++++++++++++------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/linux/scripts/upload-to-debian.sh b/linux/scripts/upload-to-debian.sh index d7665f29f8f..42c0940c0c9 100755 --- a/linux/scripts/upload-to-debian.sh +++ b/linux/scripts/upload-to-debian.sh @@ -73,6 +73,12 @@ if ! git diff --quiet; then builder_die "You have changed files in your git working directory. Exiting." fi +if [[ "$(cat TIER.md)" == "beta" ]]; then + ISBETA=true +else + ISBETA=false +fi + builder_heading "Fetching latest changes" git fetch -p origin stable_branch=$(git branch -r | grep origin/stable- | sort | tail -1) @@ -81,10 +87,9 @@ stable_branch=${stable_branch##* } git checkout "${stable_branch#origin/}" git pull origin "${stable_branch#origin/}" -if git branch -r | grep origin/beta; then - ISBETA=true -else - ISBETA=false +if ${ISBETA}; then + git checkout beta + git pull origin beta fi cd "$KEYMAN_ROOT/linux" @@ -98,27 +103,27 @@ $NOOP dput mentors ./*.changes cd .. builder_heading "Updating changelog" -# base changelog branch on remote stable branch -git checkout -B chore/linux/changelog "$stable_branch" +if $ISBETA; then + CLBRANCH=origin/beta +else + CLBRANCH="${stable_branch}" +fi + +# base changelog branch on remote stable/beta branch +git checkout -B chore/linux/changelog "${CLBRANCH}" cp debianpackage/keyman-*/debian/changelog debian/ git add debian/changelog git commit -m "chore(linux): Update debian changelog" if [ -n "$PUSH" ]; then $NOOP git push --force-with-lease origin chore/linux/changelog - $NOOP gh pr create --draft --base "${stable_branch#origin/}" --title "chore(linux): Update debian changelog" --body "@keymanapp-test-bot skip" -fi - -if $ISBETA; then - CLBRANCH=origin/beta -else - CLBRANCH=origin/master + $NOOP gh pr create --draft --base "${CLBRANCH#origin/}" --title "chore(linux): Update debian changelog" --body "@keymanapp-test-bot skip" fi -git checkout -B chore/linux/cherry-pick/changelog ${CLBRANCH} +git checkout -B chore/linux/cherry-pick/changelog origin/master git cherry-pick -x chore/linux/changelog if [ -n "$PUSH" ]; then $NOOP git push --force-with-lease origin chore/linux/cherry-pick/changelog - $NOOP gh pr create --draft --base ${CLBRANCH#origin/} --title "chore(linux): Update debian changelog 🍒" --body "@keymanapp-test-bot skip" + $NOOP gh pr create --draft --base master --title "chore(linux): Update debian changelog 🍒" --body "@keymanapp-test-bot skip" fi builder_heading "Finishing" From 55f2dbfc19105096b70154600b3b6214899d1bc0 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Tue, 20 Feb 2024 11:27:13 +0100 Subject: [PATCH 084/171] chore(linux): Unnecessary to checkout stable branch for beta releases --- linux/scripts/upload-to-debian.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/linux/scripts/upload-to-debian.sh b/linux/scripts/upload-to-debian.sh index 42c0940c0c9..f4c7687b7c2 100755 --- a/linux/scripts/upload-to-debian.sh +++ b/linux/scripts/upload-to-debian.sh @@ -81,15 +81,15 @@ fi builder_heading "Fetching latest changes" git fetch -p origin -stable_branch=$(git branch -r | grep origin/stable- | sort | tail -1) -stable_branch=${stable_branch##* } -# Checkout stable branch so that `scripts/debian.sh` picks up correct version -git checkout "${stable_branch#origin/}" -git pull origin "${stable_branch#origin/}" - if ${ISBETA}; then git checkout beta git pull origin beta +else + stable_branch=$(git branch -r | grep origin/stable- | sort | tail -1) + stable_branch=${stable_branch##* } + # Checkout stable branch so that `scripts/debian.sh` picks up correct version + git checkout "${stable_branch#origin/}" + git pull origin "${stable_branch#origin/}" fi cd "$KEYMAN_ROOT/linux" @@ -103,7 +103,7 @@ $NOOP dput mentors ./*.changes cd .. builder_heading "Updating changelog" -if $ISBETA; then +if ${ISBETA}; then CLBRANCH=origin/beta else CLBRANCH="${stable_branch}" From 48e418b60fabd73b1fc5e3ad6d54905ff65236cf Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Tue, 20 Feb 2024 12:15:46 +0100 Subject: [PATCH 085/171] chore(linux): Update Debian `control` file - update standards version - update debhelper version to the one that Ubuntu 20.04 Focal supports - update branch in git repo --- linux/debian/control | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/linux/debian/control b/linux/debian/control index 69cf4334434..d8927504335 100644 --- a/linux/debian/control +++ b/linux/debian/control @@ -7,7 +7,7 @@ Uploaders: Eberhard Beilharz , Build-Depends: bash-completion, - debhelper (>= 11), + debhelper (>= 12), dh-python, gir1.2-webkit2-4.1 | gir1.2-webkit2-4.0, ibus, @@ -40,9 +40,9 @@ Build-Depends: xvfb, metacity, gawk, -Standards-Version: 4.6.1 -Vcs-Git: https://github.com/keymanapp/keyman.git -b stable-16.0 [linux/debian] -Vcs-Browser: https://github.com/keymanapp/keyman/tree/stable-16.0/linux/debian +Standards-Version: 4.6.2 +Vcs-Git: https://github.com/keymanapp/keyman.git -b beta [linux/debian] +Vcs-Browser: https://github.com/keymanapp/keyman/tree/beta/linux/debian Homepage: https://www.keyman.com Rules-Requires-Root: binary-targets From ea2536072a996fafada113bd1f296a88854db156 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Tue, 20 Feb 2024 14:56:11 +0100 Subject: [PATCH 086/171] chore(linux): Fix more lintian warnings --- linux/debian/compat | 1 - linux/debian/control | 2 +- linux/debian/copyright | 12 ++++++------ 3 files changed, 7 insertions(+), 8 deletions(-) delete mode 100644 linux/debian/compat diff --git a/linux/debian/compat b/linux/debian/compat deleted file mode 100644 index b4de3947675..00000000000 --- a/linux/debian/compat +++ /dev/null @@ -1 +0,0 @@ -11 diff --git a/linux/debian/control b/linux/debian/control index d8927504335..904267f59e1 100644 --- a/linux/debian/control +++ b/linux/debian/control @@ -7,7 +7,7 @@ Uploaders: Eberhard Beilharz , Build-Depends: bash-completion, - debhelper (>= 12), + debhelper-compat (= 12), dh-python, gir1.2-webkit2-4.1 | gir1.2-webkit2-4.0, ibus, diff --git a/linux/debian/copyright b/linux/debian/copyright index 1b0defab65d..ee6603bded6 100644 --- a/linux/debian/copyright +++ b/linux/debian/copyright @@ -4,24 +4,24 @@ Upstream-Contact: Keyman team Source: https://github.com/keymanapp/keyman Files: * -Copyright: 2018-2023 SIL International +Copyright: 2018-2024 SIL International License: MIT Files: linux/ibus-keyman/* -Copyright: 2004-2023 SIL International +Copyright: 2004-2024 SIL International License: GPL-2+ Files: linux/ibus-keyman/src/keymanutil.c linux/ibus-keyman/src/keymanutil.h linux/ibus-keyman/src/kmpdetails.c linux/ibus-keyman/src/kmpdetails.h -Copyright: 2009-2023 SIL International +Copyright: 2009-2024 SIL International License: GPL-2+ or MIT Files: linux/ibus-keyman/src/keyman-service.c linux/ibus-keyman/src/keyman-service.h linux/keyman-config/buildtools/help2md -Copyright: 2018-2023 SIL International +Copyright: 2018-2024 SIL International License: GPL-3+ Files: linux/ibus-keyman/tests/ibusimcontext.c @@ -31,7 +31,7 @@ Copyright: 2008-2010, Peng Huang 2008-2013, Peng Huang 2008-2021, Red Hat, Inc. 2015-2021, Takao Fujiwara - 2021-2023, SIL International + 2021-2024, SIL International License: LGPL-2.1+ Files: linux/keyman-config/buildtools/help2man @@ -41,7 +41,7 @@ License: GPL-3+ Files: debian/com.keyman.config.appdata.xml debian/com.keyman.ibus_keyman.metainfo.xml Copyright: 2019 Daniel Glassey - 2022-2023 SIL International + 2022-2024 SIL International License: MIT License: MIT From e9c1a9b46ff95307054c64fc2c37f89f2ae12c58 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Tue, 20 Feb 2024 15:26:21 +0100 Subject: [PATCH 087/171] chore(linux): Ignore existing PRs Don't try (and fail) to create the PR if it already exists. Instead simply skip this step because the PR will already be updated by the `git push`. --- linux/scripts/upload-to-debian.sh | 34 +++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/linux/scripts/upload-to-debian.sh b/linux/scripts/upload-to-debian.sh index f4c7687b7c2..3631df93716 100755 --- a/linux/scripts/upload-to-debian.sh +++ b/linux/scripts/upload-to-debian.sh @@ -99,7 +99,7 @@ cd debianpackage/ builder_heading "Signing source package" debsign -k"$DEBKEYID" --re-sign ./*.changes builder_heading "Uploading packages to mentors.debian.net" -$NOOP dput mentors ./*.changes +${NOOP} dput mentors ./*.changes cd .. builder_heading "Updating changelog" @@ -109,25 +109,37 @@ else CLBRANCH="${stable_branch}" fi +function push_to_github_and_create_pr() { + local BRANCH=$1 + local BASE=$2 + local COMMIT_MSG=$3 + local PR_MSG=$4 + + if [[ -n "${PUSH}" ]]; then + ${NOOP} git push --force-with-lease origin "${BRANCH}" + # shellcheck disable=2312 + if (( $(gh pr list --draft --search "${COMMIT_MSG}" --base "${BASE}" --json title --jq '.[].title' | wc -l) > 0)); then + builder_echo "PR already exists" + else + ${NOOP} gh pr create --draft --base "${BASE}" --title "${PR_MSG}" --body "@keymanapp-test-bot skip" + fi + fi +} + # base changelog branch on remote stable/beta branch git checkout -B chore/linux/changelog "${CLBRANCH}" cp debianpackage/keyman-*/debian/changelog debian/ git add debian/changelog -git commit -m "chore(linux): Update debian changelog" -if [ -n "$PUSH" ]; then - $NOOP git push --force-with-lease origin chore/linux/changelog - $NOOP gh pr create --draft --base "${CLBRANCH#origin/}" --title "chore(linux): Update debian changelog" --body "@keymanapp-test-bot skip" -fi +COMMIT_MESSAGE="chore(linux): Update debian changelog" +git commit -m "${COMMIT_MESSAGE}" +push_to_github_and_create_pr chore/linux/changelog "${CLBRANCH#origin/}" "${COMMIT_MESSAGE}" "${COMMIT_MESSAGE}" git checkout -B chore/linux/cherry-pick/changelog origin/master git cherry-pick -x chore/linux/changelog -if [ -n "$PUSH" ]; then - $NOOP git push --force-with-lease origin chore/linux/cherry-pick/changelog - $NOOP gh pr create --draft --base master --title "chore(linux): Update debian changelog 🍒" --body "@keymanapp-test-bot skip" -fi +push_to_github_and_create_pr chore/linux/cherry-pick/changelog master "${COMMIT_MESSAGE}" "${COMMIT_MESSAGE} 🍒" builder_heading "Finishing" -if $ISBETA; then +if ${ISBETA}; then git checkout beta else git checkout master From 0ec2f4f5b6acee889ae3e8bad26cb512171c6315 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Tue, 20 Feb 2024 16:23:18 +0100 Subject: [PATCH 088/171] chore(linux): Break long lines in `CONTRIBUTING.md` This fixes another lintian warning. --- CONTRIBUTING.md | 321 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 243 insertions(+), 78 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 15924ad455a..3c46cc6524a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,11 @@ ⭐ Thank you for your contribution! ⭐ -The following is a set of guidelines for contributing to Keyman, Keyman keyboards, Keyman lexical models and Keyman websites, which are hosted in the [Keymanapp Organization](https://github.com/keymanapp) on GitHub. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. +The following is a set of guidelines for contributing to Keyman, Keyman +keyboards, Keyman lexical models and Keyman websites, which are hosted +in the [Keymanapp Organization](https://github.com/keymanapp) on GitHub. +These are mostly guidelines, not rules. Use your best judgment, and feel +free to propose changes to this document in a pull request. (These guidelines have been adapted from [Atom Guidelines](https://github.com/atom/atom/blob/master/CONTRIBUTING.md).) @@ -35,11 +39,17 @@ The following is a set of guidelines for contributing to Keyman, Keyman keyboard ## Code of Conduct -This project and everyone participating in it is governed by the [Keyman Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [community@keyman.com](mailto:community@keyman.com). +This project and everyone participating in it is governed by the [Keyman +Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected +to uphold this code. Please report unacceptable behavior to +[community@keyman.com](mailto:community@keyman.com). ## I don't want to read this whole thing I just have a question!!! -**Note:** If you have a question about using Keyman, you'll get faster results by asking in the Keyman Community, where many other users may also be able to assist you. If you have a question about the Keyman source code, feel free to open an issue! +**Note:** If you have a question about using Keyman, you'll get faster +results by asking in the Keyman Community, where many other users may +also be able to assist you. If you have a question about the Keyman +source code, feel free to open an issue! * [Keyman Community](https://community.software.sil.org/c/keyman) @@ -47,12 +57,23 @@ This project and everyone participating in it is governed by the [Keyman Code of ### Keyman, Keyboard Layouts and Lexical Models -Keyman is a complex project that spans six different platforms, with many a variety of components on each platform. We have chosen to host the Keyman project in the [keymanapp/keyman](https://github.com/keymanapp/keyman) monorepo, but [keyboard layouts](https://github.com/keymanapp/keyboards) and [lexical models](https://github.com/keymanapp/lexical-models) are stored in their own repositories. - -* Issues relating to the Keyman apps and their interactions with operating systems or other apps should be opened in the Keyman repo -* For keyboard-specific or model-specific issues, open issues in the corresponding repository. -* The Keyman websites are also hosted in their own repositories. Contributions, including issues and pull requests can be opened against these repositories also. -* Product documentation for the Keyman app is hosted in the Keyman app repository, and replicated to the help.keyman.com repository. +Keyman is a complex project that spans six different platforms, with +many a variety of components on each platform. We have chosen to host +the Keyman project in the +[keymanapp/keyman](https://github.com/keymanapp/keyman) monorepo, but +[keyboard layouts](https://github.com/keymanapp/keyboards) and [lexical +models](https://github.com/keymanapp/lexical-models) are stored in their +own repositories. + +* Issues relating to the Keyman apps and their interactions with + operating systems or other apps should be opened in the Keyman repo +* For keyboard-specific or model-specific issues, open issues in the + corresponding repository. +* The Keyman websites are also hosted in their own repositories. + Contributions, including issues and pull requests can be opened + against these repositories also. +* Product documentation for the Keyman app is hosted in the Keyman app + repository, and replicated to the help.keyman.com repository. The primary repositories you are most likely to interact with are: @@ -68,147 +89,291 @@ The primary repositories you are most likely to interact with are: ### Reporting Bugs -This section guides you through submitting a bug report for Keyman. Following these guidelines helps maintainers and the community understand your report :pencil:, reproduce the behavior :computer: :computer:, and find related reports :mag_right:. +This section guides you through submitting a bug report for Keyman. +Following these guidelines helps maintainers and the community +understand your report :pencil:, reproduce the behavior :computer: +:computer:, and find related reports :mag_right:. -Before creating bug reports, please check [this list](#before-submitting-a-bug-report) as you might find out that you don't need to create one. When you are creating a bug report, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out [the required template](https://github.com/keymanapp/keyman/issues/new?assignees=&labels=bug&template=bug_report.md&title=bug%3A+); the information it asks for helps us resolve issues faster. +Before creating bug reports, please check [this +list](#before-submitting-a-bug-report) as you might find out that you +don't need to create one. When you are creating a bug report, please +[include as many details as +possible](#how-do-i-submit-a-good-bug-report). Fill out [the required +template](https://github.com/keymanapp/keyman/issues/new?assignees=&labels=bug&template=bug_report.md&title=bug%3A+); +the information it asks for helps us resolve issues faster. -> **Note:** If you find a **Closed** issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one. +> **Note:** If you find a **Closed** issue that seems like it is the +> same thing that you're experiencing, open a new issue and include a +> link to the original issue in the body of your new one. #### Before Submitting A Bug Report -* **Check that you are running the [latest version](https://keyman.com/downloads).** -* **Check the [community](https://community.software.sil.org/c/keyman)** for common questions and problems; search there to see if other people have reported the issue and possible solutions. -* **Determine [which repository the problem should be reported in](#keyman-keyboard-layouts-and-lexical-models)**. -* **Perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Akeymanapp+label%3Abug)** to see if the problem has already been reported. If it has **and the issue is still open**, add a comment to the existing issue instead of opening a new one. +* **Check that you are running the [latest + version](https://keyman.com/downloads).** +* **Check the [community](https://community.software.sil.org/c/keyman)** + for common questions and problems; search there to see if other people + have reported the issue and possible solutions. +* **Determine [which repository the problem should be reported + in](#keyman-keyboard-layouts-and-lexical-models)**. +* **Perform a [cursory + search](https://github.com/search?q=+is%3Aissue+user%3Akeymanapp+label%3Abug)** + to see if the problem has already been reported. If it has **and the + issue is still open**, add a comment to the existing issue instead of + opening a new one. #### How Do I Submit A (Good) Bug Report? -Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/). After you've determined [which repository](#keyman-keyboard-layouts-and-lexical-models) your bug is related to, create an issue on that repository and provide the following information by filling in the template (not all repositories currently have a bug reporting template; in those cases, you can start with the [Keyman bug report template](https://github.com/keymanapp/keyman/blob/master/.github/ISSUE_TEMPLATE/bug_report.md?plain=1) if you wish). - -Explain the problem and include additional details to help maintainers reproduce the problem: - -* **Use a clear and descriptive title** for the issue to identify the problem. -* **Describe the exact steps which reproduce the problem** in as many details as possible. When listing steps, **don't just say what you did, but explain how you did it**. For example, if you typed on Android using a bluetooth keyboard, instead of with the touch keyboard, note that. -* **Provide specific examples to demonstrate the steps** If you are documenting a problem with unexpected output from a keyboard, make sure you include the exact keystroke sequence you typed, the output you received, and the expected output. - -* **Include screenshots and animated GIFs** which show you following the described steps and clearly demonstrate the problem. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. - -* **If you're reporting that Keyman crashed**, include the reference number from the crash report, if available. +Bugs are tracked as [GitHub +issues](https://guides.github.com/features/issues/). After you've +determined [which +repository](#keyman-keyboard-layouts-and-lexical-models) your bug is +related to, create an issue on that repository and provide the following +information by filling in the template (not all repositories currently +have a bug reporting template; in those cases, you can start with the +[Keyman bug report +template](https://github.com/keymanapp/keyman/blob/master/.github/ISSUE_TEMPLATE/bug_report.md?plain=1) +if you wish). + +Explain the problem and include additional details to help maintainers +reproduce the problem: + +* **Use a clear and descriptive title** for the issue to identify the + problem. +* **Describe the exact steps which reproduce the problem** in as many + details as possible. When listing steps, **don't just say what you + did, but explain how you did it**. For example, if you typed on + Android using a bluetooth keyboard, instead of with the touch + keyboard, note that. +* **Provide specific examples to demonstrate the steps** If you are + documenting a problem with unexpected output from a keyboard, make + sure you include the exact keystroke sequence you typed, the output + you received, and the expected output. + +* **Include screenshots and animated GIFs** which show you following the + described steps and clearly demonstrate the problem. You can use [this + tool](https://www.cockos.com/licecap/) to record GIFs on macOS and + Windows, and [this tool](https://github.com/colinkeenan/silentcast) or + [this tool](https://github.com/GNOME/byzanz) on Linux. + +* **If you're reporting that Keyman crashed**, include the reference + number from the crash report, if available. Provide more context by answering these questions: -* **Did the problem start happening recently** (e.g. after updating to a new version of Keyman, keyboard, app or operating system) or was this always a problem? -* If the problem started happening recently, **can you reproduce the problem in an older version of Keyman?** What's the most recent version in which the problem doesn't happen? You can download older versions of Keyman from [the Downloads page](https://keyman.com/downloads). -* **Can you reliably reproduce the issue?** If not, provide details about how often the problem happens and under which conditions it normally happens. +* **Did the problem start happening recently** (e.g. after updating to a + new version of Keyman, keyboard, app or operating system) or was this + always a problem? +* If the problem started happening recently, **can you reproduce the + problem in an older version of Keyman?** What's the most recent + version in which the problem doesn't happen? You can download older + versions of Keyman from [the Downloads + page](https://keyman.com/downloads). +* **Can you reliably reproduce the issue?** If not, provide details + about how often the problem happens and under which conditions it + normally happens. Include details about your configuration and environment: -* **Which version of Keyman are you using?** The version information is typically available in the About or Info screen, depending on your device type. -* **What's the name and version of the OS you're using**? Note exactly which type of device you are using, the version of the operating system. -* **Are you running Keyman in a virtual machine?** If so, which VM software are you using and which operating systems and versions are used for the host and the guest? -* **Which keyboards and models do you have installed?** You can get that list by running `apm list --installed`. -* **What app are you interacting with?** If the problem is in interaction with a specific app, note the app you are trying to work with, and its version. -* **Which keyboard layout experiences the problem?** Capture the keyboard ID and the version of the keyboard layout. On Windows, tell us also the base keyboard layout, found in Keyman Configuration, Options tab. -* **Diagnostic reports** On Windows, you can capture a diagnostic report by clicking Diagnostics in the Support tab of Keyman Configuration, save it and attach it to the issue. +* **Which version of Keyman are you using?** The version information is + typically available in the About or Info screen, depending on your + device type. +* **What's the name and version of the OS you're using**? Note exactly + which type of device you are using, the version of the operating + system. +* **Are you running Keyman in a virtual machine?** If so, which VM + software are you using and which operating systems and versions are + used for the host and the guest? +* **Which keyboards and models do you have installed?** You can get that + list by running `apm list --installed`. +* **What app are you interacting with?** If the problem is in + interaction with a specific app, note the app you are trying to work + with, and its version. +* **Which keyboard layout experiences the problem?** Capture the + keyboard ID and the version of the keyboard layout. On Windows, tell + us also the base keyboard layout, found in Keyman Configuration, + Options tab. +* **Diagnostic reports** On Windows, you can capture a diagnostic report + by clicking Diagnostics in the Support tab of Keyman Configuration, + save it and attach it to the issue. ### Suggesting Enhancements -This section guides you through submitting an enhancement suggestion for Keyman, including completely new features and minor improvements to existing functionality. Following these guidelines helps maintainers and the community understand your suggestion :pencil: and find related suggestions :mag_right:. - -Before creating enhancement suggestions, please check [this list](#before-submitting-an-enhancement-suggestion) as you might find out that you don't need to create one. When you are creating an enhancement suggestion, please [include as many details as possible](#how-do-i-submit-a-good-enhancement-suggestion). -Fill in [the template](https://github.com/keymanapp/keyman/issues/new?assignees=&labels=feat&template=feature_request.md&title=feat%3A+), including the steps that you imagine you would take if the feature you're requesting existed. +This section guides you through submitting an enhancement suggestion for +Keyman, including completely new features and minor improvements to +existing functionality. Following these guidelines helps maintainers and +the community understand your suggestion :pencil: and find related +suggestions :mag_right:. + +Before creating enhancement suggestions, please check [this +list](#before-submitting-an-enhancement-suggestion) as you might find +out that you don't need to create one. When you are creating an +enhancement suggestion, please [include as many details as +possible](#how-do-i-submit-a-good-enhancement-suggestion). Fill in [the +template](https://github.com/keymanapp/keyman/issues/new?assignees=&labels=feat&template=feature_request.md&title=feat%3A+), +including the steps that you imagine you would take if the feature +you're requesting existed. #### Before Submitting An Enhancement Suggestion -* **Determine [which repository the enhancement should be suggested in](#keyman-keyboard-layouts-and-lexical-models).** -* **Perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Akeymanapp+label%3Afeat)** to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one. +* **Determine [which repository the enhancement should be suggested + in](#keyman-keyboard-layouts-and-lexical-models).** +* **Perform a [cursory + search](https://github.com/search?q=+is%3Aissue+user%3Akeymanapp+label%3Afeat)** + to see if the enhancement has already been suggested. If it has, add a + comment to the existing issue instead of opening a new one. #### How Do I Submit A (Good) Enhancement Suggestion? -Enhancement suggestions are tracked as [GitHub issues](https://guides.github.com/features/issues/). After you've determined [which repository](#keyman-keyboard-layouts-and-lexical-models) your enhancement suggestion is related to, create an issue on that repository and provide the following information: - -* **Use a clear and descriptive title** for the issue to identify the suggestion. -* **Provide a step-by-step description of the suggested enhancement** in as many details as possible. -* **Provide specific examples to demonstrate the steps**. Include copy/pasteable snippets which you use in those examples, as [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). -* **Describe the current behavior** and **explain which behavior you expected to see instead** and why. -* **Include screenshots and animated GIFs** which help you demonstrate the steps or point out the part of Keyman which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. +Enhancement suggestions are tracked as [GitHub +issues](https://guides.github.com/features/issues/). After you've +determined [which +repository](#keyman-keyboard-layouts-and-lexical-models) your +enhancement suggestion is related to, create an issue on that repository +and provide the following information: + +* **Use a clear and descriptive title** for the issue to identify the + suggestion. +* **Provide a step-by-step description of the suggested enhancement** in + as many details as possible. +* **Provide specific examples to demonstrate the steps**. Include + copy/pasteable snippets which you use in those examples, as [Markdown + code + blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). +* **Describe the current behavior** and **explain which behavior you + expected to see instead** and why. +* **Include screenshots and animated GIFs** which help you demonstrate + the steps or point out the part of Keyman which the suggestion is + related to. You can use [this tool](https://www.cockos.com/licecap/) + to record GIFs on macOS and Windows, and [this + tool](https://github.com/colinkeenan/silentcast) or [this + tool](https://github.com/GNOME/byzanz) on Linux. * **Explain why this enhancement would be useful** to most Keyman users. -* **List some other keyboard tools or operating systems where this enhancement exists.** -* **Specify which version of Keyman you're using.** The version information is typically available in the About or Info screen, depending on your device type. +* **List some other keyboard tools or operating systems where this + enhancement exists.** +* **Specify which version of Keyman you're using.** The version + information is typically available in the About or Info screen, + depending on your device type. * **Specify the name and version of the OS you're using.** ### Your First Code Contribution -Unsure where to begin contributing to Keyman? You can start by looking through these `good-first-issue` and `help-wanted` issues: +Unsure where to begin contributing to Keyman? You can start by looking +through these `good-first-issue` and `help-wanted` issues: -* [Good first issues](https://github.com/keymanapp/keyman/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) - issues which should only require a few lines of code, and a test or two. -* [Help wanted issues](https://github.com/keymanapp/keyman/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) - issues which should be a bit more involved than `Good First Issues` issues. +* [Good first + issues](https://github.com/keymanapp/keyman/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) + - issues which should only require a few lines of code, and a test or + two. +* [Help wanted + issues](https://github.com/keymanapp/keyman/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) + - issues which should be a bit more involved than `Good First Issues` + issues. ### Building Keyman -Keyman can be built locally. For instructions on how to do this, see the [build documentation](./docs/build/index.md). +Keyman can be built locally. For instructions on how to do this, see the +[build documentation](./docs/build/index.md). ### Localize Keyman We use CrowdIn to develop translations for the Keyman user interface. -* [Localize Keyman](https://translate.keyman.com/project/keyman) [![Crowdin](https://badges.crowdin.net/keyman/localized.svg)](https://translate.keyman.com/project/keyman) +* [Localize Keyman](https://translate.keyman.com/project/keyman) + [![Crowdin](https://badges.crowdin.net/keyman/localized.svg)](https://translate.keyman.com/project/keyman) ### Other Ways of Getting Involved -Even if you are not a coder, there are many other ways you can help with the Keyman project: +Even if you are not a coder, there are many other ways you can help with +the Keyman project: -* [Other Ways of Getting Involved](https://keyman.com/about/get-involved) +* [Other Ways of Getting + Involved](https://keyman.com/about/get-involved) ## Style Guides ### Principles of Keyman Code Changes -These are some general principles that we need to be following when we create features or bug fixes in Keyman. These principles help to uphold a good user experience for Keyman end users and keyboard/model developers. +These are some general principles that we need to be following when we +create features or bug fixes in Keyman. These principles help to uphold +a good user experience for Keyman end users and keyboard/model +developers. -* [Principles of Keyman Code Changes Wiki](https://github.com/keymanapp/keyman/wiki/Principles-of-Keyman-Code-Changes) +* [Principles of Keyman Code Changes + Wiki](https://github.com/keymanapp/keyman/wiki/Principles-of-Keyman-Code-Changes) ### Pull Request and Commit Workflow -We have a number of git commit and pull request formatting preferences. We can review your pull request faster if you follow these guidelines: +We have a number of git commit and pull request formatting preferences. +We can review your pull request faster if you follow these guidelines: -* [Pull Request and Commit workflow wiki](https://github.com/keymanapp/keyman/wiki/Pull-Request-and-Commit-workflow-notes) +* [Pull Request and Commit workflow + wiki](https://github.com/keymanapp/keyman/wiki/Pull-Request-and-Commit-workflow-notes) ### Code Style Guide -The Keyman style guide will help you to prepare code in a way that matches the Keyman source. Note that older source may not yet meet this guide, so if you are fixing up an old piece of code, you may need to use your judgment to determine the code styling to use. +The Keyman style guide will help you to prepare code in a way that +matches the Keyman source. Note that older source may not yet meet this +guide, so if you are fixing up an old piece of code, you may need to use +your judgment to determine the code styling to use. -* [Code Style Guide wiki](https://github.com/keymanapp/keyman/wiki/Keyman-Code-Style-Guide) +* [Code Style Guide + wiki](https://github.com/keymanapp/keyman/wiki/Keyman-Code-Style-Guide) ### User Testing -Any pull request that impacts end user experience should include a user test. This is a set of instructions that an experienced user of Keyman could follow to validate that your pull request does what it should do. A good tester may depart from the test steps you provide to check the things you forgot -- but you should try and provide comprehensive test steps. +Any pull request that impacts end user experience should include a user +test. This is a set of instructions that an experienced user of Keyman +could follow to validate that your pull request does what it should do. +A good tester may depart from the test steps you provide to check the +things you forgot -- but you should try and provide comprehensive test +steps. -The Keyman app repository has a bot which coordinates user testing for each pull request: +The Keyman app repository has a bot which coordinates user testing for +each pull request: -* [User Testing wiki](https://github.com/keymanapp/keyman/wiki/User-Testing-Workflows) +* [User Testing + wiki](https://github.com/keymanapp/keyman/wiki/User-Testing-Workflows) ### Documentation Style Guide -This applies to user documentation found both on [help.keyman.com](https://github.com/keymanapp/help.keyman.com) and the application user documentation found in the [Keyman repository](https://github.com/keymanapp/keyman). Remember that application documentation is replicated to help.keyman.com but should be edited in the Keyman repository. - -* All new documentation pages should be written in [Markdown](https://daringfireball.net/projects/markdown). -* Older documentation may be written in HTML or a strange hybrid of PHP scripts and HTML. If you make more than a minor change to an older doc, rewrite it to Markdown: +This applies to user documentation found both on +[help.keyman.com](https://github.com/keymanapp/help.keyman.com) and the +application user documentation found in the [Keyman +repository](https://github.com/keymanapp/keyman). Remember that +application documentation is replicated to help.keyman.com but should be +edited in the Keyman repository. + +* All new documentation pages should be written in + [Markdown](https://daringfireball.net/projects/markdown). +* Older documentation may be written in HTML or a strange hybrid of PHP + scripts and HTML. If you make more than a minor change to an older + doc, rewrite it to Markdown: 1. View Source on the page from your browser 2. Find the documentation content (often within the `
` tag) - 3. Use a tool such as [Browserling HTML to Markdown](https://www.browserling.com/tools/html-to-markdown) to convert the document to Markdown - 4. Paste this into a new file with the same name but the .md extension, and remove the old .html or .php file. + 3. Use a tool such as [Browserling HTML to + Markdown](https://www.browserling.com/tools/html-to-markdown) to + convert the document to Markdown + 4. Paste this into a new file with the same name but the .md + extension, and remove the old .html or .php file. -The style guide for code documentation and comments can be found in the [Code Style Guide wiki](https://github.com/keymanapp/keyman/wiki/Keyman-Code-Style-Guide). +The style guide for code documentation and comments can be found in the +[Code Style Guide +wiki](https://github.com/keymanapp/keyman/wiki/Keyman-Code-Style-Guide). ## Additional Notes ### Issue and Pull Request Labels -This section lists the labels we use to help us track and manage issues and pull requests. These labels are used on the [Keyman app repo and the website repos](#keyman-keyboard-layouts-and-lexical-models). +This section lists the labels we use to help us track and manage issues +and pull requests. These labels are used on the [Keyman app repo and the +website repos](#keyman-keyboard-layouts-and-lexical-models). -[GitHub search](https://help.github.com/articles/searching-issues/) makes it easy to use labels for finding groups of issues or pull requests you're interested in. -The labels are loosely grouped by their purpose, but it's not required that every issue has a label from every group or that an issue can't have more than one label from the same group. +[GitHub search](https://help.github.com/articles/searching-issues/) +makes it easy to use labels for finding groups of issues or pull +requests you're interested in. The labels are loosely grouped by their +purpose, but it's not required that every issue has a label from every +group or that an issue can't have more than one label from the same +group. #### Type of Issue From 424b9833e22febe72c66ad8cf6d4c66c32f52eec Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Tue, 20 Feb 2024 13:03:49 -0500 Subject: [PATCH 089/171] auto: increment beta version to 17.0.273 --- HISTORY.md | 15 +++++++++++++++ VERSION.md | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 049c6f0e282..7ed253fefa6 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,20 @@ # Keyman Version History +## 17.0.272 beta 2024-02-20 + +* fix(core): fix output append logic in any_group::apply_transform (#10758) +* fix(android): Match phone suggestion banner styling on tablet (#10760) +* docs(mac): Document What's New for version 17.0 (#10764) +* (#10773) +* chore(developer): reduce WARN_TouchLayoutUsesUnsupportedGesturesDownlevel to HINT (#10766) +* fix(developer): prevent renaming of new project types in New Project dialog (#10767) +* fix(developer): return an error code if build-test-data fails (#10765) +* fix(developer): allow more parameters in kmc.cmd (#10759) +* chore(linux): Ignore missing .symbols file in stable branch (#10674) +* chore(linux): Update symbols file with current version (#10575) +* docs(linux): Update screenshots and FAQ (#10768) +* chore(linux): Fix `debian.sh` by removing quotes (#10772) + ## 17.0.271 beta 2024-02-19 * chore(developer): add infrastructure messages tests (#10756) diff --git a/VERSION.md b/VERSION.md index f40470029ef..b99d1bc30e2 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.272 \ No newline at end of file +17.0.273 \ No newline at end of file From 9ef198ff198d2d87470c7788cd255516bed04b11 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Tue, 20 Feb 2024 12:47:25 -0600 Subject: [PATCH 090/171] chore(core): update sample ldml keyboard Fixes: #10505 --- .../unit/ldml/keyboards/ldml_test-test.xml | 35 +++++++++++++++++++ core/tests/unit/ldml/keyboards/ldml_test.xml | 17 ++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/core/tests/unit/ldml/keyboards/ldml_test-test.xml b/core/tests/unit/ldml/keyboards/ldml_test-test.xml index ba9630e004d..c9972c79269 100644 --- a/core/tests/unit/ldml/keyboards/ldml_test-test.xml +++ b/core/tests/unit/ldml/keyboards/ldml_test-test.xml @@ -28,5 +28,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/tests/unit/ldml/keyboards/ldml_test.xml b/core/tests/unit/ldml/keyboards/ldml_test.xml index 63bd4f1c08a..17296a3c8a8 100644 --- a/core/tests/unit/ldml/keyboards/ldml_test.xml +++ b/core/tests/unit/ldml/keyboards/ldml_test.xml @@ -13,6 +13,12 @@ + + + + + + @@ -24,7 +30,7 @@ - + @@ -54,6 +60,9 @@ + + + @@ -98,16 +107,22 @@ + + + + + + From a0c31c31b923ac8592cf679be3aa1c0776be2450 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 21 Feb 2024 08:03:15 +0700 Subject: [PATCH 091/171] refactor(android/app): Move installing default language resources --- .../kmapro/DefaultLanguageResource.java | 62 +++++++++++++++++++ .../com/tavultesoft/kmapro/MainActivity.java | 40 +----------- 2 files changed, 64 insertions(+), 38 deletions(-) create mode 100644 android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/DefaultLanguageResource.java diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/DefaultLanguageResource.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/DefaultLanguageResource.java new file mode 100644 index 00000000000..41b1964c4ff --- /dev/null +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/DefaultLanguageResource.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2024 SIL International. All rights reserved. + */ + +package com.tavultesoft.kmapro; + +import android.content.Context; +import android.content.SharedPreferences; + +import com.keyman.engine.KMManager; +import com.keyman.engine.data.LexicalModel; + +import java.util.HashMap; + +public class DefaultLanguageResource { + private static final String defaultKeyboardInstalled = "DefaultKeyboardInstalled"; + private static final String defaultDictionaryInstalled = "DefaultDictionaryInstalled"; + + /** + * Check if app has installed default keyboard and dictionary. If not, install them + * @param context + */ + public static void install(Context context) { + SharedPreferences prefs = context.getSharedPreferences(context.getString(R.string.kma_prefs_name), Context.MODE_PRIVATE); + + // Add default keyboard + boolean installDefaultKeyboard = prefs.getBoolean(defaultKeyboardInstalled, false); + if (!installDefaultKeyboard) { + if (!KMManager.keyboardExists(context, KMManager.KMDefault_PackageID, KMManager.KMDefault_KeyboardID, + KMManager.KMDefault_LanguageID)) { + KMManager.addKeyboard(context, KMManager.getDefaultKeyboard(context.getApplicationContext())); + } + SharedPreferences.Editor editor = prefs.edit(); + editor.putBoolean(defaultKeyboardInstalled, true); + editor.commit(); + } + + // Add default dictionary + boolean installDefaultDictionary = prefs.getBoolean(defaultDictionaryInstalled, false); + if (!installDefaultDictionary) { + LexicalModel defaultLexicalModel = LexicalModel.getDefaultLexicalModel(context); + HashMap lexicalModelInfo = new HashMap(); + lexicalModelInfo.put(KMManager.KMKey_PackageID, defaultLexicalModel.getPackageID()); + lexicalModelInfo.put(KMManager.KMKey_LanguageID, defaultLexicalModel.getLanguageID()); + lexicalModelInfo.put(KMManager.KMKey_LanguageName, defaultLexicalModel.getLanguageName()); + lexicalModelInfo.put(KMManager.KMKey_LexicalModelID, defaultLexicalModel.getLexicalModelID()); + lexicalModelInfo.put(KMManager.KMKey_LexicalModelName, defaultLexicalModel.getLexicalModelName()); + lexicalModelInfo.put(KMManager.KMKey_LexicalModelVersion, defaultLexicalModel.getVersion()); + /* + // If welcome.htm exists, add custom help link + welcomeFile = new File(KMManager.getLexicalModelsDir(), KMManager.KMDefault_DictionaryPackageID + File.separator + FileUtils.WELCOME_HTM); + lexicalModelInfo.put(KMManager.KMKey_CustomHelpLink, welcomeFile.getPath()); + */ + KMManager.addLexicalModel(context, lexicalModelInfo); + KMManager.registerAssociatedLexicalModel(KMManager.KMDefault_LanguageID); + + SharedPreferences.Editor editor = prefs.edit(); + editor.putBoolean(defaultDictionaryInstalled, true); + editor.commit(); + } + } +} \ No newline at end of file diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java index 98baa169ab4..e7077a1d721 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/MainActivity.java @@ -111,8 +111,6 @@ public class MainActivity extends BaseActivity implements OnKeyboardEventListene private final int maxTextSize = 72; private int textSize = minTextSize; private int lastOrientation = Configuration.ORIENTATION_UNDEFINED; - private static final String defaultKeyboardInstalled = "DefaultKeyboardInstalled"; - private static final String defaultDictionaryInstalled = "DefaultDictionaryInstalled"; private static final String userTextKey = "UserText"; private static final String userTextSizeKey = "UserTextSize"; private Toolbar toolbar; @@ -147,43 +145,9 @@ protected void onCreate(Bundle savedInstanceState) { KMManager.initialize(getApplicationContext(), KeyboardType.KEYBOARD_TYPE_INAPP); KMManager.executeResourceUpdate(this); - SharedPreferences prefs = getSharedPreferences(getString(R.string.kma_prefs_name), Context.MODE_PRIVATE); - // Add default keyboard - boolean installDefaultKeyboard = prefs.getBoolean(defaultKeyboardInstalled, false); - if (!installDefaultKeyboard) { - if (!KMManager.keyboardExists(context, KMManager.KMDefault_PackageID, KMManager.KMDefault_KeyboardID, - KMManager.KMDefault_LanguageID)) { - KMManager.addKeyboard(this, KMManager.getDefaultKeyboard(getApplicationContext())); - } - SharedPreferences.Editor editor = prefs.edit(); - editor.putBoolean(defaultKeyboardInstalled, true); - editor.commit(); - } - - // Add default dictionary - boolean installDefaultDictionary = prefs.getBoolean(defaultDictionaryInstalled, false); - if (!installDefaultDictionary) { - LexicalModel defaultLexicalModel = LexicalModel.getDefaultLexicalModel(context); - HashMap lexicalModelInfo = new HashMap(); - lexicalModelInfo.put(KMManager.KMKey_PackageID, defaultLexicalModel.getPackageID()); - lexicalModelInfo.put(KMManager.KMKey_LanguageID, defaultLexicalModel.getLanguageID()); - lexicalModelInfo.put(KMManager.KMKey_LanguageName, defaultLexicalModel.getLanguageName()); - lexicalModelInfo.put(KMManager.KMKey_LexicalModelID, defaultLexicalModel.getLexicalModelID()); - lexicalModelInfo.put(KMManager.KMKey_LexicalModelName, defaultLexicalModel.getLexicalModelName()); - lexicalModelInfo.put(KMManager.KMKey_LexicalModelVersion, defaultLexicalModel.getVersion()); - /* - // If welcome.htm exists, add custom help link - welcomeFile = new File(KMManager.getLexicalModelsDir(), KMManager.KMDefault_DictionaryPackageID + File.separator + FileUtils.WELCOME_HTM); - lexicalModelInfo.put(KMManager.KMKey_CustomHelpLink, welcomeFile.getPath()); - */ - KMManager.addLexicalModel(context, lexicalModelInfo); - KMManager.registerAssociatedLexicalModel(KMManager.KMDefault_LanguageID); - - SharedPreferences.Editor editor = prefs.edit(); - editor.putBoolean(defaultDictionaryInstalled, true); - editor.commit(); - } + DefaultLanguageResource.install(context); + SharedPreferences prefs = getSharedPreferences(getString(R.string.kma_prefs_name), Context.MODE_PRIVATE); KMManager.SpacebarText spacebarText = KMManager.SpacebarText.fromString(prefs.getString(KeymanSettingsActivity.spacebarTextKey, KMManager.SpacebarText.LANGUAGE_KEYBOARD.toString())); KMManager.setSpacebarText(spacebarText); From 8ef4ee5a9325fed5c2fe94caf41f94abb02d089f Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 21 Feb 2024 08:10:45 +0700 Subject: [PATCH 092/171] fix(android/app): Allow SystemKeyboard install to install resources --- .../main/java/com/keyman/android/SystemKeyboard.java | 10 ++++++---- .../tavultesoft/kmapro/DefaultLanguageResource.java | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java index cf919deddb4..7e705869308 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java +++ b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java @@ -5,8 +5,8 @@ package com.keyman.android; import com.tavultesoft.kmapro.BuildConfig; +import com.tavultesoft.kmapro.DefaultLanguageResource; import com.tavultesoft.kmapro.KeymanSettingsActivity; -import com.keyman.android.BannerController; import com.keyman.engine.KMManager; import com.keyman.engine.KMManager.KeyboardType; import com.keyman.engine.KMHardwareKeyboardInterpreter; @@ -64,11 +64,13 @@ public void onCreate() { KMManager.setDebugMode(true); } KMManager.addKeyboardEventListener(this); - KMManager.initialize(getApplicationContext(), KeyboardType.KEYBOARD_TYPE_SYSTEM); - interpreter = new KMHardwareKeyboardInterpreter(getApplicationContext(), KeyboardType.KEYBOARD_TYPE_SYSTEM); + Context context = getApplicationContext(); + KMManager.initialize(context, KeyboardType.KEYBOARD_TYPE_SYSTEM); + DefaultLanguageResource.install(context); + interpreter = new KMHardwareKeyboardInterpreter(context, KeyboardType.KEYBOARD_TYPE_SYSTEM); KMManager.setInputMethodService(this); // for HW interface - SharedPreferences prefs = getApplicationContext().getSharedPreferences(getApplicationContext().getString(R.string.kma_prefs_name), Context.MODE_PRIVATE); + SharedPreferences prefs = context.getSharedPreferences(context.getString(R.string.kma_prefs_name), Context.MODE_PRIVATE); KMManager.SpacebarText spacebarText = KMManager.SpacebarText.fromString(prefs.getString(KeymanSettingsActivity.spacebarTextKey, KMManager.SpacebarText.LANGUAGE_KEYBOARD.toString())); KMManager.setSpacebarText(spacebarText); diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/DefaultLanguageResource.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/DefaultLanguageResource.java index 41b1964c4ff..10558fca0d9 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/DefaultLanguageResource.java +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/DefaultLanguageResource.java @@ -59,4 +59,4 @@ public static void install(Context context) { editor.commit(); } } -} \ No newline at end of file +} From f91b56c99380257364d6478404f2c1396526229f Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 21 Feb 2024 08:55:13 +0700 Subject: [PATCH 093/171] chore(android/app): Remove logging for install referrer details --- .../src/main/java/com/keyman/android/CheckInstallReferrer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/CheckInstallReferrer.java b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/CheckInstallReferrer.java index 62ec9813c37..8a2dbea470b 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/CheckInstallReferrer.java +++ b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/CheckInstallReferrer.java @@ -91,7 +91,7 @@ public static void checkGooglePlayInstallReferrer(MainActivity mainActivity, Con } if (!installerInfo.equalsIgnoreCase(GOOGLE_PLAY)) { - KMLog.LogInfo(TAG, "Skipping install referrer. Installed from " + installerInfo); + // Don't log install referrer #10762 return; } From 9e3a0d627b5ac8a82a1b0d5a77378b2f09b49d19 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 21 Feb 2024 11:46:52 +0700 Subject: [PATCH 094/171] docs(android/app): Update tablet screenshots (again) --- .../help/android_images/dist-install1-at.png | Bin 32321 -> 33697 bytes android/help/android_images/settings1-at.png | Bin 29317 -> 30052 bytes android/help/android_images/settings2-at.png | Bin 30480 -> 30727 bytes android/help/android_images/settings7-at.png | Bin 32541 -> 33492 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/android/help/android_images/dist-install1-at.png b/android/help/android_images/dist-install1-at.png index 11f565d897bb1cb0d8d94490d212cc72bf9adc45..d1bca4d5776db69684f799179b967847dff91351 100644 GIT binary patch literal 33697 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 literal 32321 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±)4^S#6djy|eCx+MJboh1W`nPh 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 XO#^w_kb}-Ns-|QYWC9`O;&Un!=u$s@Bxk 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 bK1Ug`ZH5&pQ%u3fN1;>{)a5_OngstJ&DK~# delta 25416 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 U(T!u_Ke0h6E2ztVk~0tbKeg?YEdT%j diff --git a/android/help/android_images/settings2-at.png b/android/help/android_images/settings2-at.png index ad4b7c83249bfab1383e960d8066f656e497ae3b..a1f71a3f3ebd37eb7e82cde119666035a33dd017 100644 GIT binary patch literal 30727 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 diff --git a/android/help/android_images/settings7-at.png b/android/help/android_images/settings7-at.png index 9a6a9649f6f40d586643b3ceae91b0035e213d83..fcb8af9b76b01eb71ec84a474839e2d987dc5d47 100644 GIT binary patch literal 33492 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 JN|en*{|CC(@HYSe From dc93c5495cede05b5b488391cd3390fc7c0bb55c Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 21 Feb 2024 13:53:52 +0700 Subject: [PATCH 095/171] fix(developer): publish keymancore-1.dll symbols Fixes #10737. Two parts to this: first, Keyman Core release build needs to generate the .pdb file, and second, the build needs to put it and the .dll into a place where the sentry-cli scan will find it. --- core/meson.build | 3 ++- developer/src/tike/Makefile | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/core/meson.build b/core/meson.build index 716faca2dc2..62b3d0ee082 100644 --- a/core/meson.build +++ b/core/meson.build @@ -11,7 +11,8 @@ project('keyman_core', 'cpp', 'c', default_options : ['buildtype=release', 'cpp_std=c++14', 'b_vscrt=static_from_buildtype', - 'warning_level=2'], + 'warning_level=2', + 'debug=true'], meson_version: '>=0.57.0') # Import our standard compiler defines; this is copied from diff --git a/developer/src/tike/Makefile b/developer/src/tike/Makefile index c8b0cff87e0..90675a7dce7 100644 --- a/developer/src/tike/Makefile +++ b/developer/src/tike/Makefile @@ -16,6 +16,8 @@ build: version.res manifest.res icons dirs xml xsd pull-core $(COPY) kmc.cmd $(DEVELOPER_PROGRAM) $(COPY) $(KEYMAN_ROOT)\core\build\x86\$(TARGET_PATH)\src\keymancore-1.dll $(DEVELOPER_PROGRAM) if exist $(WIN32_TARGET_PATH)\tike.dbg $(COPY) $(WIN32_TARGET_PATH)\tike.dbg $(DEVELOPER_DEBUGPATH) + $(COPY) $(KEYMAN_ROOT)\core\build\x86\$(TARGET_PATH)\src\keymancore-1.dll $(WIN32_TARGET_PATH) + $(COPY) $(KEYMAN_ROOT)\core\build\x86\$(TARGET_PATH)\src\keymancore-1.pdb $(WIN32_TARGET_PATH) xsd: $(COPY) $(KEYMAN_ROOT)\common\schemas\kps\kps.xsd $(DEVELOPER_PROGRAM) From d66da2da917cd8d7a1774494aeb281a9a2bbee40 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 21 Feb 2024 15:49:20 +0700 Subject: [PATCH 096/171] fix(developer): improve uploading of sourcemaps to sentry Fixes #10720. This makes three fixes: * Uploads each sourcemap path separately to try and avoid the 413 error noted in the issue above. * Starts from the parent folder, as it is possible that paths starting with .. may be ignored, as they were not being uploaded to sentry. * Removes a number of unneeded test files and debug symbols, which should reduce the size of each release's debug data upload, and slightly speed up the build. --- developer/src/tools/sentry-upload-difs.sh | 77 ++++++++++++++--------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/developer/src/tools/sentry-upload-difs.sh b/developer/src/tools/sentry-upload-difs.sh index 5dd22cc886a..f6e9c2f25dd 100755 --- a/developer/src/tools/sentry-upload-difs.sh +++ b/developer/src/tools/sentry-upload-difs.sh @@ -1,5 +1,4 @@ #!/usr/bin/env bash - # # Upload Debug Information Files for this developer folder # @@ -12,52 +11,72 @@ # Prerequisites: SENTRY_AUTH_TOKEN, SENTRY_URL, SENTRY_ORG variables must # be configured. # - -set -e -set -u - ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" . "${THIS_SCRIPT%/*}/../../../resources/build/build-utils.sh" ## END STANDARD BUILD SCRIPT INCLUDE -cd "$KEYMAN_ROOT/developer/src" +cd "$KEYMAN_ROOT/developer" # # Remove some additional unnecessary files: we don't want to upload these # because they are really only used for internal test or as samples. # -[ -f ./samples/imsample/IMSample.pdb ] && rm -f ./samples/imsample/IMSample.pdb +excluded_files=( + src/kmcmplib/build/x64/release/tests/api-test.exe + src/kmcmplib/build/x64/release/tests/api-test.pdb + src/kmcmplib/build/x64/release/tests/kmcompxtest.exe + src/kmcmplib/build/x64/release/tests/kmcompxtest.pdb + src/kmcmplib/build/x64/release/tests/uset-api-test.exe + src/kmcmplib/build/x64/release/tests/uset-api-test.pdb + src/kmcmplib/build/x86/release/tests/api-test.exe + src/kmcmplib/build/x86/release/tests/api-test.pdb + src/kmcmplib/build/x86/release/tests/kmcompxtest.exe + src/kmcmplib/build/x86/release/tests/kmcompxtest.pdb + src/kmcmplib/build/x86/release/tests/uset-api-test.exe + src/kmcmplib/build/x86/release/tests/uset-api-test.pdb + src/samples/imsample/bin/Win32/Release/imsample.dll + src/samples/imsample/bin/Win32/Release/imsample.pdb + src/samples/imsample/bin/Win32/Release/imsample.pdb + src/samples/imsample/bin/x64/Release/imsample.x64.dll + src/samples/imsample/bin/x64/Release/imsample.x64.pdb + src/samples/imsample/bin/x64/Release/imsample.x64.pdb +) + +rm -f "${excluded_files[@]}" # # Upload the files # sourcemap_paths=( - ./TIKE/xml - ../bin/server - ./kmc/build - ./kmc-analyze/build - ./kmc-keyboard-info/build - ./kmc-kmn/build - ./kmc-ldml/build - ./kmc-model/build - ./kmc-model-info/build - ./kmc-package/build + ./src/TIKE/xml + ./bin/server + ./src/kmc/build + ./src/kmc-analyze/build + ./src/kmc-keyboard-info/build + ./src/kmc-kmn/build + ./src/kmc-ldml/build + ./src/kmc-model/build + ./src/kmc-model-info/build + ./src/kmc-package/build ) echo "Uploading symbols for developer/" -./kmc/node_modules/.bin/sentry-cli upload-dif \ - --project keyman-developer \ - --include-sources \ - --no-zips \ - . -./kmc/node_modules/.bin/sentry-cli sourcemaps upload \ - --org keyman \ - --project keyman-developer \ - --release "$VERSION_GIT_TAG" \ - --dist "$VERSION_ENVIRONMENT" \ - --ext js --ext mjs --ext ts --ext map \ - "${sourcemap_paths[@]}" +./src/kmc/node_modules/.bin/sentry-cli upload-dif \ + --project keyman-developer \ + --include-sources \ + --no-zips \ + src/ + +for sourcemap_path in "${sourcemap_paths[@]}"; do + ./src/kmc/node_modules/.bin/sentry-cli sourcemaps upload \ + --org keyman \ + --project keyman-developer \ + --release "$VERSION_GIT_TAG" \ + --dist "$VERSION_ENVIRONMENT" \ + --ext js --ext mjs --ext ts --ext map \ + "$sourcemap_path" +done From 816734d3c0fc8991b908f9c8f7e6217bbe8db367 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Wed, 21 Feb 2024 15:36:25 +0100 Subject: [PATCH 097/171] chore(linux): Address comments from Debian mailing list The upload of the beta version caused some comments on the [Debian Input Method](https://lists.debian.org/debian-input-method/2024/02/msg00062.html) mailing list. This change addresses these: - rename libkeymancore package to include SONAME: libkeymancore1 - remove unnecessary dependency on quilt Additionally this change sorts the build dependencies alphabetically. --- linux/debian/control | 33 +++++++++---------- ...mancore.install => libkeymancore1.install} | 0 ...mancore.symbols => libkeymancore1.symbols} | 2 +- 3 files changed, 17 insertions(+), 18 deletions(-) rename linux/debian/{libkeymancore.install => libkeymancore1.install} (100%) rename linux/debian/{libkeymancore.symbols => libkeymancore1.symbols} (97%) diff --git a/linux/debian/control b/linux/debian/control index 904267f59e1..5e4ca9870c2 100644 --- a/linux/debian/control +++ b/linux/debian/control @@ -9,10 +9,21 @@ Build-Depends: bash-completion, debhelper-compat (= 12), dh-python, + gawk, gir1.2-webkit2-4.1 | gir1.2-webkit2-4.0, ibus, + libevdev-dev, + libgtk-3-dev, + libibus-1.0-dev (>= 1.2), + libicu-dev, + libjson-glib-dev (>= 1.4.0), liblocale-gettext-perl, + libsystemd-dev, + meson (>= 0.53), + metacity, + ninja-build, perl, + pkg-config, python3-all (>= 3.5), python3-dbus, python3-gi, @@ -22,24 +33,12 @@ Build-Depends: python3-pil, python3-pip, python3-qrcode, - python3-sentry-sdk (>= 1.1), - python3-requests, python3-requests-cache, + python3-requests, + python3-sentry-sdk (>= 1.1), python3-setuptools, - quilt, - meson (>= 0.53), - ninja-build, - libevdev-dev, - libgtk-3-dev, - libicu-dev, - libibus-1.0-dev (>= 1.2), - libjson-glib-dev (>= 1.4.0), - libsystemd-dev, - pkg-config, xserver-xephyr, xvfb, - metacity, - gawk, Standards-Version: 4.6.2 Vcs-Git: https://github.com/keymanapp/keyman.git -b beta [linux/debian] Vcs-Browser: https://github.com/keymanapp/keyman/tree/beta/linux/debian @@ -112,7 +111,7 @@ Package: libkeymancore-dev Architecture: amd64 arm64 armel armhf i386 loong64 mipsel mips64el ppc64el riscv64 Section: libdevel Depends: - libkeymancore (= ${binary:Version}), + libkeymancore1 (= ${binary:Version}), ${misc:Depends}, Conflicts: libkmnkbp-dev Replaces: libkmnkbp-dev @@ -134,7 +133,7 @@ Description: Development files for Keyman keyboard processing library . This package contains development headers and libraries. -Package: libkeymancore +Package: libkeymancore1 Architecture: amd64 arm64 armel armhf i386 loong64 mipsel mips64el ppc64el riscv64 Section: libs Pre-Depends: @@ -166,7 +165,7 @@ Package: ibus-keyman Architecture: amd64 arm64 armel armhf i386 loong64 mipsel mips64el ppc64el riscv64 Depends: ibus (>= 1.3.7), - libkeymancore (= ${binary:Version}), + libkeymancore1 (= ${binary:Version}), keyman-system-service (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends}, diff --git a/linux/debian/libkeymancore.install b/linux/debian/libkeymancore1.install similarity index 100% rename from linux/debian/libkeymancore.install rename to linux/debian/libkeymancore1.install diff --git a/linux/debian/libkeymancore.symbols b/linux/debian/libkeymancore1.symbols similarity index 97% rename from linux/debian/libkeymancore.symbols rename to linux/debian/libkeymancore1.symbols index 7c339866a90..99a3be74a41 100644 --- a/linux/debian/libkeymancore.symbols +++ b/linux/debian/libkeymancore1.symbols @@ -1,4 +1,4 @@ -libkeymancore.so.1 libkeymancore #MINVER# +libkeymancore.so.1 libkeymancore1 #MINVER# * Build-Depends-Package: libkeymancore-dev (c++|optional)"typeinfo name for std::codecvt_utf8_utf16@Base" 17.0.244 From 1120e8a2a132006e444f12dd91755dafe63d1736 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Wed, 21 Feb 2024 16:36:28 +0100 Subject: [PATCH 098/171] chore(linux): Update debian changelog --- linux/debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/linux/debian/changelog b/linux/debian/changelog index 25a7e0cf593..0f50fdc4c98 100644 --- a/linux/debian/changelog +++ b/linux/debian/changelog @@ -1,3 +1,10 @@ +keyman (17.0.272-1) unstable; urgency=medium + + * New upstream release. + * Re-release to Debian + + -- Eberhard Beilharz Wed, 21 Feb 2024 16:36:14 +0100 + keyman (16.0.145-1) unstable; urgency=medium [Jeremy Bicha] From 2ccdee521c719e1ab65bdbcddc62f891ed87e164 Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Wed, 21 Feb 2024 13:03:05 -0500 Subject: [PATCH 099/171] auto: increment beta version to 17.0.274 --- HISTORY.md | 9 +++++++++ VERSION.md | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 7ed253fefa6..538547da370 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,14 @@ # Keyman Version History +## 17.0.273 beta 2024-02-21 + +* fix(developer): match kmc console formatting for messages in IDE (#10775) +* fix(developer): ensure fatal errors report message or made non-fatal (#10777) +* chore(developer): add LDML specific text to Project view (#10779) +* fix(developer): reset debugger after ldml keyboard compile (#10780) +* fix(developer): crash opening invalid project (#10781) +* docs(ios): document gestures (#10763) + ## 17.0.272 beta 2024-02-20 * fix(core): fix output append logic in any_group::apply_transform (#10758) diff --git a/VERSION.md b/VERSION.md index b99d1bc30e2..fceaf9cdb31 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.273 \ No newline at end of file +17.0.274 \ No newline at end of file From 5900ab4079a15ec69af53918f2f4513741f7e80a Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Thu, 22 Feb 2024 05:53:15 +0700 Subject: [PATCH 100/171] fix(developer): use `--no-dedupe` flag to avoid HTTP 414 in sentry-cli Ref https://github.com/getsentry/sentry-cli/issues/1657 Seeing requests with > 16K URI (e.g. 48KB!) like: GET https://sentry.io/api/0/projects/keyman/keyman-developer/releases/release@17.0.273-beta-test-10798/files/?cursor=&checksum=004512221481ac19e94117147b07f028ba6c31d4&... This will skip the de-dupe phase which is intended to reduce the number of files being uploaded; as it was failing in some cases, and thus uploading the files anyway, I am hopeful that it will have no significant impact on the build time. --- developer/src/tools/sentry-upload-difs.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/developer/src/tools/sentry-upload-difs.sh b/developer/src/tools/sentry-upload-difs.sh index f6e9c2f25dd..21c84f8420e 100755 --- a/developer/src/tools/sentry-upload-difs.sh +++ b/developer/src/tools/sentry-upload-difs.sh @@ -73,6 +73,7 @@ echo "Uploading symbols for developer/" for sourcemap_path in "${sourcemap_paths[@]}"; do ./src/kmc/node_modules/.bin/sentry-cli sourcemaps upload \ + --no-dedupe \ --org keyman \ --project keyman-developer \ --release "$VERSION_GIT_TAG" \ From 42a7068ced629d0b6f92ef913d23b38016af96d3 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 22 Feb 2024 08:27:27 +0700 Subject: [PATCH 101/171] Update android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java Co-authored-by: Marc Durdin --- .../app/src/main/java/com/keyman/engine/KMManager.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java index e5f0b3d2ec8..3c86ca5ac5e 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java @@ -1633,10 +1633,10 @@ public static boolean removeKeyboard(Context context, int position) { } public static boolean isDefaultKey(String key) { - if (key != null && key.equals(KMString.format("%s_%s", KMDefault_LanguageID, KMDefault_KeyboardID))) { - return true; - } - return false; + return ( + key != null && + key.equals(KMString.format("%s_%s", KMDefault_LanguageID, KMDefault_KeyboardID) + ); } /** From fcf28a5acaeae43fbe4df15bdebb786168f2dcf6 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 22 Feb 2024 08:51:36 +0700 Subject: [PATCH 102/171] fix(android/engine): Fix how keyboard picker menu exits --- android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java index 1d2593baf75..84f8d633abc 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java @@ -2092,7 +2092,6 @@ public static void showKeyboardPicker(Context context, KeyboardType kbType) { if (kbType == KeyboardType.KEYBOARD_TYPE_SYSTEM) { i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); - i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); } i.putExtra(KMKey_DisplayKeyboardSwitcher, kbType == KeyboardType.KEYBOARD_TYPE_SYSTEM); From 5d6aafb65fa688b4b2b25c4199175ceeb570c5df Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 22 Feb 2024 08:59:38 +0700 Subject: [PATCH 103/171] fix(android/engine): Fix missing paren --- .../KMEA/app/src/main/java/com/keyman/engine/KMManager.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java index 3c86ca5ac5e..362bac9dcf7 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMManager.java @@ -1635,8 +1635,7 @@ public static boolean removeKeyboard(Context context, int position) { public static boolean isDefaultKey(String key) { return ( key != null && - key.equals(KMString.format("%s_%s", KMDefault_LanguageID, KMDefault_KeyboardID) - ); + key.equals(KMString.format("%s_%s", KMDefault_LanguageID, KMDefault_KeyboardID))); } /** From 34f144259a8b4ef651a0a392eaa323fa1cd52b8a Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Thu, 22 Feb 2024 10:12:17 +0700 Subject: [PATCH 104/171] fix(developer): strip paths from keymanweb sourcemaps when uploading to sentry For keymanweb distribution only, strip all paths from sourcemaps when uploading to Sentry, by running the sourcemap upload from the specific folder. This maps to sentry-manager's stripping of paths in its reporting. --- developer/src/tools/sentry-upload-difs.sh | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/developer/src/tools/sentry-upload-difs.sh b/developer/src/tools/sentry-upload-difs.sh index 21c84f8420e..52d14637757 100755 --- a/developer/src/tools/sentry-upload-difs.sh +++ b/developer/src/tools/sentry-upload-difs.sh @@ -71,13 +71,24 @@ echo "Uploading symbols for developer/" --no-zips \ src/ -for sourcemap_path in "${sourcemap_paths[@]}"; do - ./src/kmc/node_modules/.bin/sentry-cli sourcemaps upload \ +upload_sourcemap() { + local smpath="$1" + "$KEYMAN_ROOT/developer/src/kmc/node_modules/.bin/sentry-cli" sourcemaps upload \ --no-dedupe \ --org keyman \ --project keyman-developer \ --release "$VERSION_GIT_TAG" \ --dist "$VERSION_ENVIRONMENT" \ --ext js --ext mjs --ext ts --ext map \ - "$sourcemap_path" + "$smpath" +} + +# Separate sourcemap upload for KeymanWeb to avoid pathing +cd "$KEYMAN_ROOT/developer/bin/server/build/src/site/resource" +upload_sourcemap . +cd "$KEYMAN_ROOT/developer" + +# Upload all other sourcemaps +for sourcemap_path in "${sourcemap_paths[@]}"; do + upload_sourcemap "$sourcemap_path" done From 335675dd6c6d7f9ebeed7a9fa2776288e60649b1 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Thu, 22 Feb 2024 10:14:38 +0700 Subject: [PATCH 105/171] chore(developer): try paths from resource parent instead This matches the paths as shown in the server URLs --- developer/src/tools/sentry-upload-difs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developer/src/tools/sentry-upload-difs.sh b/developer/src/tools/sentry-upload-difs.sh index 52d14637757..ee970434f7f 100755 --- a/developer/src/tools/sentry-upload-difs.sh +++ b/developer/src/tools/sentry-upload-difs.sh @@ -84,7 +84,7 @@ upload_sourcemap() { } # Separate sourcemap upload for KeymanWeb to avoid pathing -cd "$KEYMAN_ROOT/developer/bin/server/build/src/site/resource" +cd "$KEYMAN_ROOT/developer/bin/server/build/src/site" upload_sourcemap . cd "$KEYMAN_ROOT/developer" From 36e7a2b51a287ce9b1ab5623ddd2a88992a7657e Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Thu, 22 Feb 2024 10:20:32 +0700 Subject: [PATCH 106/171] chore(web): proper reporting of errors from es5 KMW --- common/web/sentry-manager/src/index.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/common/web/sentry-manager/src/index.ts b/common/web/sentry-manager/src/index.ts index b5bb89c0ff5..aab835cda07 100644 --- a/common/web/sentry-manager/src/index.ts +++ b/common/web/sentry-manager/src/index.ts @@ -25,12 +25,14 @@ export class KeymanSentryManager { _enabled: boolean = true; static STANDARD_ALIASABLE_FILES = { - 'keymanweb.js': 'keymanweb.js', - 'keymanweb-webview.js': 'keymanweb-webview.js', - 'kmwuibutton.js': 'kmwuibutton.js', - 'kmwuifloat.js': 'kmwuifloat.js', - 'kmwuitoggle.js': 'kmwuitoggle.js', - 'kmwuitoolbar.js': 'kmwuitoolbar.js' + 'keymanweb.js': 'keymanweb.js', + 'keymanweb-webview.js': 'keymanweb-webview.js', + 'keymanweb.es5.js': 'keymanweb.es5.js', + 'keymanweb-webview.es5.js': 'keymanweb-webview.es5.js', + 'kmwuibutton.js': 'kmwuibutton.js', + 'kmwuifloat.js': 'kmwuifloat.js', + 'kmwuitoggle.js': 'kmwuitoggle.js', + 'kmwuitoolbar.js': 'kmwuitoolbar.js' // Also add entries for the naming system used by Android and iOS - and map them to the EMBEDDED upload, not the std 'native' one. } From ec6730d2d8de82f51c52dcb913a404a4ff94ad78 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Thu, 22 Feb 2024 10:49:23 +0700 Subject: [PATCH 107/171] docs(android): Update screenshots for help Addresses #10632 by updating the Keyman for Android help screenshots (phone layout) --- .../confirm-english-dictionary-delete-ap.png | Bin 7274 -> 18111 bytes .../confirm-khmer-delete-ap.png | Bin 6820 -> 21167 bytes android/help/android_images/dl-success-ap.png | Bin 11163 -> 23657 bytes .../english-dictionaries-ap.png | Bin 14066 -> 21781 bytes .../english-dictionary-info-ap.png | Bin 10544 -> 19544 bytes .../android_images/english-settings-ap.png | Bin 14502 -> 26016 bytes .../help/android_images/khmer-settings-ap.png | Bin 13871 -> 25393 bytes .../help/android_images/select_language.png | Bin 45584 -> 79051 bytes .../settings-2-installed-languages-ap.png | Bin 5413 -> 13152 bytes .../android_images/settings-khmer-info-ap.png | Bin 17294 -> 17468 bytes ...ngs-screen-install-keyboard-dictionary.png | Bin 10544 -> 23262 bytes .../settings-str-dictionary-ap.png | Bin 8756 -> 15019 bytes .../settings-str-settings-ap.png | Bin 12433 -> 25530 bytes .../settings-two-installed-languages-ap.png | Bin 5859 -> 15137 bytes .../uninstall-dictionary-notification-ap.png | Bin 18595 -> 24956 bytes .../uninstall-notification-ap.png | Bin 6182 -> 16430 bytes 16 files changed, 0 insertions(+), 0 deletions(-) diff --git a/android/help/android_images/confirm-english-dictionary-delete-ap.png b/android/help/android_images/confirm-english-dictionary-delete-ap.png index d33a12186015948b7684bd9f34cad3e7034d7b58..d8208a4c16cfc2dc0c27a76f0ae26059c62873b2 100644 GIT binary patch literal 18111 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 literal 7274 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 diff --git a/android/help/android_images/confirm-khmer-delete-ap.png b/android/help/android_images/confirm-khmer-delete-ap.png index d572f04a8d6f6b41afe0c51fbbc9954df33ef2a2..4437c61f7317e0df7c43bafedd53aa19659a870e 100644 GIT binary patch literal 21167 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 diff --git a/android/help/android_images/dl-success-ap.png b/android/help/android_images/dl-success-ap.png index a8ba0374157e58436c46fa9cfb762cae10cb9f19..5f065b4d7d501c25bb755ccb56a8539a736b3e7a 100644 GIT binary patch literal 23657 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 literal 11163 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 jdUBJ$SU97QyoDqUSqeVg5~XV}>&u1hT&<5Y9wk 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 N002ovPDHLkV1f=V1g`)9 literal 14066 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 QNI7DuDQPQK$XkT{7YU<^1ONa4 diff --git a/android/help/android_images/english-settings-ap.png b/android/help/android_images/english-settings-ap.png index f565542f472e3ae35593a701ef38f374bed8d57b..d58a51ab9e78c1e957e6c85b49143ea52d4d6f58 100644 GIT binary patch literal 26016 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

Xh^H3XymB=tDh$ z@O;Hw#p1;#%_9fCu(7~$Ox%mR$u?GWbrW@(=X4K&#c1Wpwzao+{;t0QH6~@)@3L4fFJma?N6?F*3nNFSbAP01u>IPRVW4J@K76*x#4AXcZm-V z5Bx%;w2aFnm2|w_U3EKe)*G(@m5~XTU+5b*13E7hkT1bbZ_yOBKWbl=FO1;#Q+IWB zMEQPYS`EMd4U8B?^Av1k_v8;GS-Ndb`4S+p3WH;{15@YtbW~U}2=-L2B@d=vId(Xe zYXV?F{_Us8h@XRhh8=E3J9Uk*C8|V(ko1HgEu5V?OkM_`u+4K_{`q@G7HuV%9eC2i zGyrt?m8P>kVkp7q`+)|cN3hW|)^+C@8BIum zE+g1=q^xD**3Tb{A7nM@M182rP zP!FFNSG^uh>4zMHGperP0W6hn35rcS?_+1^n%rKYLar#+Mx{YugJB<>%-^S`ae>R% z(PSo}3LJgg3W%&H179NjlFx}y2)GYag1;wFE*K$7!nX1w%x_%O$S3Qp)Cg{&Hd;cy zTh4wvi+=%_x(7}%LN}NP4?xtE^+6=*%T@O1@5*nmbteaFAS6P=|2^HlA^yxWG!+7n zgaF=ww*v#<9SY_#pqZc;7|68>K)nW%|M`E9fpg3lKyB1BXjGGLuy6G0Fgjzwyv{;E zgc38bxE)@}0?eS%xIrh37jHN+TRsoVbroEDyU>kRP<6jPagEu;d>4!M=fFVy2qC;l zX7n$~0sfN6vy6(N<_iQuOgjesLQyDMjFM5|ES9t4Vmn=o8kNeG>ez}N0D<&qxX|(m z3cByw55*TQwQ^kaF%q3r@eoVbEt|I&+t3myA^PBS(8Bav-Mo~Lq!43`uxVfjN3fqp zSnc0Mywf9XNW(%=xw_}R5OS-Bxb&;r$Er?H!^)(xObO7!d)SjW|A-!@%KSI45OFF9%*NAju%S07HqS6j!7Ayexdm6p_^#t(p;zYtg5ErWLpY$X zWye0ZQxtb+AUbJpB+2R-k_(XpW&psFU+QfAKOx0hl9&sFVAJK1b2>!wzNjIl9pR_} zef3hciBxYJ8wojn8VVN)Jz6Y)g^K(9XC#!AF!miHFE!#gCNbjU{|~_=L}Z1_1@!~| E7Z)SjC;$Ke diff --git a/android/help/android_images/khmer-settings-ap.png b/android/help/android_images/khmer-settings-ap.png index ea112fe4c45fcb07f9c2adc5b1f202e55ec61830..40d89c72c1476447fe07bab734d2750a219b5264 100644 GIT binary patch literal 25393 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 Np@E5hjjnU-{{i76Bwzpl literal 13871 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 diff --git a/android/help/android_images/select_language.png b/android/help/android_images/select_language.png index 08747300ce713a7fd4a9d779d96ee39192118449..72d9a59c58f4605d04ec3be83582a4eb7fbc9dc1 100644 GIT binary patch literal 79051 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 literal 45584 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 I$)^GT2g(MTEdT%j literal 5413 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 z

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 Xc+K=Zl5-b4Ed-O1P!z8aH46SebgGW9 diff --git a/android/help/android_images/settings-screen-install-keyboard-dictionary.png b/android/help/android_images/settings-screen-install-keyboard-dictionary.png index abca0d92052974ce51ec2b05a21e9cacb1e6a182..d16e3ef06ab81c71554189c66461df0532c78146 100644 GIT binary patch literal 23262 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 literal 10544 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 diff --git a/android/help/android_images/settings-str-dictionary-ap.png b/android/help/android_images/settings-str-dictionary-ap.png index 9d0c5ccf0690c44dccaa59b5081d8f7bcf53f5c5..3478dbc13b643921afa6020c4e9a39e5cdb0a45b 100644 GIT binary patch literal 15019 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 VBHr|bfLEOea?(mtWfDdK{|DAyXP5v0 literal 8756 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 diff --git a/android/help/android_images/settings-str-settings-ap.png b/android/help/android_images/settings-str-settings-ap.png index 7ebc6deab86a11df95e294305e5c93e3dfef5004..b9d4c6bfa88c42791e614652bf3ae2a85b533202 100644 GIT binary patch literal 25530 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 literal 12433 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 diff --git a/android/help/android_images/settings-two-installed-languages-ap.png b/android/help/android_images/settings-two-installed-languages-ap.png index 59ee66788f0c2ae857ed6b1ff0fbfc56351deb90..1c87d8d1a846310e8939df7dd4751f90ec52d873 100644 GIT binary patch literal 15137 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 literal 5859 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 F{{yRtXJG&U diff --git a/android/help/android_images/uninstall-dictionary-notification-ap.png b/android/help/android_images/uninstall-dictionary-notification-ap.png index 512ec9476fe9a36f5b5a9e2f1ce352f819f4f609..bce3c789861714a66674836416c890e010cb6197 100644 GIT binary patch literal 24956 zcmeFYbyQa0w=evFD4?j6lypc)ccXN7r*!8-H%dr@bazWA(kUJC0Mgyv()}*JzdY}` z=N;pW@!mV`A7?v+9c$0M)|_+AH9w!Z2$q)>d;S#fDFgy}E+H$E@Ze0@ znamynL0NEDR(Dj?cOkZOur)EaGA4F(voj_(b~QJFKwPKuk}REP>mvg0p_qIK&F`Yx zm!PHT?_ahE$QyS%!%hc+OB5+IM52i+;C4%EZ+-4PX73Lrt3(n+EY0&=b?er!cqqpN z%Dr1Y4W3^&%lh16@$0$RU%3vFCZKnp+{pJ^-prgH^8bWxruGH}Z+qS{^4|~rfrg#- z3lDzhPZDu%*2Sor5T@oA@Si}qtqS;E>^<8ySst*lBk9EtYj(J`IXw_ z=jFi_Z}P8PZ>$@yYXfQ~QtIx1PP>+~nB(K0-kl~RJsb2cy`cD|XP>(zu()}9@;2gZ z$NdWZ?vMA4<6P4%>T3V<7S#wMHJeMXCAkS5OWP>-rtR`Uu9EZyQ|DnQ9Ku>vQO&>t zOV{)2_>rd4LskB^x_Orso!%M=<%A6H!}P3x&l7Sz`T>Npljoc|iIa&d5q(TuxJrrI zB@%|AEE-?GH?;>RYibhH=DWcqDY0smQU9ECn$fWh?CX2W$ok~XGpsWKuLd8MiSClWf@xCE&t2I8JO3#3yA`s+=3cp;2cm=1DLVt&-+p(v2yUH@q33(NwOo z7|~T4P_Zb|w6w0OnM7aH)-<2Cuq<^M-~BaPSI3g+!XdsC9TdjwI65qv(Q3L*T`8UB zR6V7pZLTn-s!_jfQF2h>_Zz0=JXODAV{`s!T$cN?hgwXIZ|~&1FhFhE+v`3Q{2pBn zS6*!8*t}zQ$XH%?CbPLmtulV@F#nlP!%X%xc$bGdbnS`d z5_^1BZjZz8#Ctci?fX3R>t9&M$j86FbrC9Rwilpp{8(?0+q>R;A*i}GoM6=uI~t(W zCua&5KzY9(H)O%QmPKtxH&E3kbM}

tl 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 F0sv2jx-$R( diff --git a/android/help/android_images/uninstall-notification-ap.png b/android/help/android_images/uninstall-notification-ap.png index ef0d25689d3dbb8cbd102528837c1767d09ad764..bf42b71733a5a993eae6e310ff981bf56c1a0401 100644 GIT binary patch literal 16430 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 AcK`qY From d7411ec4c40cb2402b0f09fc192c29a904596b37 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Thu, 22 Feb 2024 11:48:56 +0700 Subject: [PATCH 108/171] fix(developer): version string matches for sentry Fixes two things: * $VERSION_GIT_TAG was being misinterpreted by mkver as $VERSION + "_GIT_TAG". This has been addressed by making the $VERSION match the last one in the replaceVersionStrings_Mkver function, and also have moved to using the newer $VersionGitTag and $Environment vartiables instead. * The 'dist' property was being set in sentry-cli sourcemap uploads, though we never set the dist prop when we initialize sentry. --- developer/src/server/src/site/lib/sentry/init.js.in | 4 ++-- developer/src/tike/xml/app/lib/sentry/init.js.in | 4 ++-- developer/src/tools/sentry-upload-difs.sh | 1 - resources/build/build-utils.sh | 3 ++- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/developer/src/server/src/site/lib/sentry/init.js.in b/developer/src/server/src/site/lib/sentry/init.js.in index 21ceba901b8..735689af238 100644 --- a/developer/src/server/src/site/lib/sentry/init.js.in +++ b/developer/src/server/src/site/lib/sentry/init.js.in @@ -9,8 +9,8 @@ Sentry.init({ dsn: 'https://39b25a09410349a58fe12aaf721565af@o1005580.ingest.sentry.io/5983519', // Keyman Developer - environment: '$VERSION_ENVIRONMENT', - release: '$VERSION_GIT_TAG' + environment: '$Environment', + release: '$VersionGitTag' }); function keymanEnableDiagnostics() { diff --git a/developer/src/tike/xml/app/lib/sentry/init.js.in b/developer/src/tike/xml/app/lib/sentry/init.js.in index 21ceba901b8..735689af238 100644 --- a/developer/src/tike/xml/app/lib/sentry/init.js.in +++ b/developer/src/tike/xml/app/lib/sentry/init.js.in @@ -9,8 +9,8 @@ Sentry.init({ dsn: 'https://39b25a09410349a58fe12aaf721565af@o1005580.ingest.sentry.io/5983519', // Keyman Developer - environment: '$VERSION_ENVIRONMENT', - release: '$VERSION_GIT_TAG' + environment: '$Environment', + release: '$VersionGitTag' }); function keymanEnableDiagnostics() { diff --git a/developer/src/tools/sentry-upload-difs.sh b/developer/src/tools/sentry-upload-difs.sh index ee970434f7f..a7ae63933d5 100755 --- a/developer/src/tools/sentry-upload-difs.sh +++ b/developer/src/tools/sentry-upload-difs.sh @@ -78,7 +78,6 @@ upload_sourcemap() { --org keyman \ --project keyman-developer \ --release "$VERSION_GIT_TAG" \ - --dist "$VERSION_ENVIRONMENT" \ --ext js --ext mjs --ext ts --ext map \ "$smpath" } diff --git a/resources/build/build-utils.sh b/resources/build/build-utils.sh index 76aa45e651e..3356bb9dfed 100755 --- a/resources/build/build-utils.sh +++ b/resources/build/build-utils.sh @@ -299,7 +299,6 @@ replaceVersionStrings_Mkver() { s/\$Environment/$VERSION_ENVIRONMENT/g; s/\$Version/$VERSION/g; s/\$VERSIONNUM/$VERSION_MAJOR,$VERSION_MINOR,$VERSION_PATCH,0/g; - s/\$VERSION/$VERSION_WIN/g; s/\$RELEASE_MAJOR/$VERSION_MAJOR/g; s/\$RELEASE_MINOR/$VERSION_MINOR/g; s/\$RELEASE/$VERSION_RELEASE/g; @@ -315,6 +314,8 @@ replaceVersionStrings_Mkver() { s/\$VERSION_GIT_TAG/$VERSION_GIT_TAG/g; s/\$VERSION_ENVIRONMENT/$VERSION_ENVIRONMENT/g; + s/\$VERSION/$VERSION_WIN/g; + " "$infile" > "$outfile" } From 037704528ccf8a9f224bffbb43cd7e7e67e08e22 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Thu, 22 Feb 2024 12:28:18 +0700 Subject: [PATCH 109/171] fix(android): first keystroke when context is empty --- android/KMEA/app/src/main/assets/android-host.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/KMEA/app/src/main/assets/android-host.js b/android/KMEA/app/src/main/assets/android-host.js index 8c4fd7da8fb..6a0a3858c3a 100644 --- a/android/KMEA/app/src/main/assets/android-host.js +++ b/android/KMEA/app/src/main/assets/android-host.js @@ -237,7 +237,7 @@ function updateKMText(text) { console_debug('updateKMText(text='+text+') context.value='+keyman.context.getText()); - if(text != keyman.context.getText()) { + if(!text || text != keyman.context.getText()) { keyman.context.setText(text); keyman.resetContext(); } From 9a3d4e30f410ca86deb1f9f82ee4efd7ea3853ab Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Thu, 22 Feb 2024 12:45:12 +0700 Subject: [PATCH 110/171] chore(developer): restore previous tags --- developer/src/server/src/site/lib/sentry/init.js.in | 4 ++-- developer/src/tike/xml/app/lib/sentry/init.js.in | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/developer/src/server/src/site/lib/sentry/init.js.in b/developer/src/server/src/site/lib/sentry/init.js.in index 735689af238..21ceba901b8 100644 --- a/developer/src/server/src/site/lib/sentry/init.js.in +++ b/developer/src/server/src/site/lib/sentry/init.js.in @@ -9,8 +9,8 @@ Sentry.init({ dsn: 'https://39b25a09410349a58fe12aaf721565af@o1005580.ingest.sentry.io/5983519', // Keyman Developer - environment: '$Environment', - release: '$VersionGitTag' + environment: '$VERSION_ENVIRONMENT', + release: '$VERSION_GIT_TAG' }); function keymanEnableDiagnostics() { diff --git a/developer/src/tike/xml/app/lib/sentry/init.js.in b/developer/src/tike/xml/app/lib/sentry/init.js.in index 735689af238..21ceba901b8 100644 --- a/developer/src/tike/xml/app/lib/sentry/init.js.in +++ b/developer/src/tike/xml/app/lib/sentry/init.js.in @@ -9,8 +9,8 @@ Sentry.init({ dsn: 'https://39b25a09410349a58fe12aaf721565af@o1005580.ingest.sentry.io/5983519', // Keyman Developer - environment: '$Environment', - release: '$VersionGitTag' + environment: '$VERSION_ENVIRONMENT', + release: '$VERSION_GIT_TAG' }); function keymanEnableDiagnostics() { From e50966f265f4bf7575e4f167507343f111d53e9b Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Thu, 22 Feb 2024 12:45:28 +0700 Subject: [PATCH 111/171] chore(developer): sentry 7.102.0 for Server --- developer/src/server/src/site/lib/sentry/bundle.min.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/developer/src/server/src/site/lib/sentry/bundle.min.js b/developer/src/server/src/site/lib/sentry/bundle.min.js index 262b9344894..c9aa7758e20 100644 --- a/developer/src/server/src/site/lib/sentry/bundle.min.js +++ b/developer/src/server/src/site/lib/sentry/bundle.min.js @@ -1,3 +1,3 @@ -/*! @sentry/browser 5.15.0 (3ce26d5c) | https://github.com/getsentry/sentry-javascript */ -var Sentry=function(n){var t=function(n,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var r in t)t.hasOwnProperty(r)&&(n[r]=t[r])})(n,r)};function r(n,r){function e(){this.constructor=n}t(n,r),n.prototype=null===r?Object.create(r):(e.prototype=r.prototype,new e)}var e=function(){return(e=Object.assign||function(n){for(var t,r=1,e=arguments.length;r=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}}}function o(n,t){var r="function"==typeof Symbol&&n[Symbol.iterator];if(!r)return n;var e,i,o=r.call(n),u=[];try{for(;(void 0===t||t-- >0)&&!(e=o.next()).done;)u.push(e.value)}catch(n){i={error:n}}finally{try{e&&!e.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return u}function u(){for(var n=[],t=0;t=400&&t<500)switch(t){case 401:return n.Unauthenticated;case 403:return n.PermissionDenied;case 404:return n.NotFound;case 409:return n.AlreadyExists;case 413:return n.FailedPrecondition;case 429:return n.ResourceExhausted;default:return n.InvalidArgument}if(t>=500&&t<600)switch(t){case 501:return n.Unimplemented;case 503:return n.Unavailable;case 504:return n.DeadlineExceeded;default:return n.InternalError}return n.UnknownError}}(s||(s={})),(f=n.Status||(n.Status={})).Unknown="unknown",f.Skipped="skipped",f.Success="success",f.RateLimit="rate_limit",f.Invalid="invalid",f.Failed="failed",function(n){n.fromHttpCode=function(t){return t>=200&&t<300?n.Success:429===t?n.RateLimit:t>=400&&t<500?n.Invalid:t>=500?n.Failed:n.Unknown}}(n.Status||(n.Status={}));var h=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(n,t){return n.__proto__=t,n}:function(n,t){for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r]);return n});var v=function(n){function t(t){var r=this.constructor,e=n.call(this,t)||this;return e.message=t,e.name=r.prototype.constructor.name,h(e,r.prototype),e}return r(t,n),t}(Error);function l(n){switch(Object.prototype.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return x(n,Error)}}function d(n){return"[object ErrorEvent]"===Object.prototype.toString.call(n)}function p(n){return"[object DOMError]"===Object.prototype.toString.call(n)}function y(n){return"[object String]"===Object.prototype.toString.call(n)}function m(n){return null===n||"object"!=typeof n&&"function"!=typeof n}function b(n){return"[object Object]"===Object.prototype.toString.call(n)}function w(n){return"undefined"!=typeof Event&&x(n,Event)}function g(n){return"undefined"!=typeof Element&&x(n,Element)}function E(n){return Boolean(n&&n.then&&"function"==typeof n.then)}function x(n,t){try{return n instanceof t}catch(n){return!1}}function j(n,t){return void 0===t&&(t=0),"string"!=typeof n||0===t?n:n.length<=t?n:n.substr(0,t)+"..."}function k(n,t){if(!Array.isArray(n))return"";for(var r=[],e=0;e"}return n.event_id||""}function C(n){var t=D();if(!("console"in t))return n();var r=t.console,e={};["debug","info","warn","error","log","assert"].forEach(function(n){n in t.console&&r[n].__sentry_original__&&(e[n]=r[n],r[n]=r[n].__sentry_original__)});var i=n();return Object.keys(e).forEach(function(n){r[n]=e[n]}),i}function M(n,t,r){n.exception=n.exception||{},n.exception.values=n.exception.values||[],n.exception.values[0]=n.exception.values[0]||{},n.exception.values[0].value=n.exception.values[0].value||t||"",n.exception.values[0].type=n.exception.values[0].type||r||"Error"}function A(n,t){void 0===t&&(t={});try{n.exception.values[0].mechanism=n.exception.values[0].mechanism||{},Object.keys(t).forEach(function(r){n.exception.values[0].mechanism[r]=t[r]})}catch(n){}}function U(n){try{for(var t=n,r=[],e=0,i=0,o=" > ".length,u=void 0;t&&e++<5&&!("html"===(u=q(t))||e>1&&i+r.length*o+u.length>=80);)r.push(u),i+=u.length,t=t.parentNode;return r.reverse().join(" > ")}catch(n){return""}}function q(n){var t,r,e,i,o,u=n,c=[];if(!u||!u.tagName)return"";if(c.push(u.tagName.toLowerCase()),u.id&&c.push("#"+u.id),(t=u.className)&&y(t))for(r=t.split(/\s+/),o=0;o"}try{o.currentTarget=g(i.currentTarget)?U(i.currentTarget):Object.prototype.toString.call(i.currentTarget)}catch(n){o.currentTarget=""}for(var e in"undefined"!=typeof CustomEvent&&x(n,CustomEvent)&&(o.detail=i.detail),i)Object.prototype.hasOwnProperty.call(i,e)&&(o[e]=i);return o}return n}function tn(n){return function(n){return~-encodeURI(n).split(/%..|./).length}(JSON.stringify(n))}function rn(n,t,r){void 0===t&&(t=3),void 0===r&&(r=102400);var e=un(n,t);return tn(e)>r?rn(n,t-1,r):e}function en(n,t){return"domain"===t&&n&&"object"==typeof n&&n.u?"[Domain]":"domainEmitter"===t?"[DomainEmitter]":"undefined"!=typeof global&&n===global?"[Global]":"undefined"!=typeof window&&n===window?"[Window]":"undefined"!=typeof document&&n===document?"[Document]":b(r=n)&&"nativeEvent"in r&&"preventDefault"in r&&"stopPropagation"in r?"[SyntheticEvent]":"number"==typeof n&&n!=n?"[NaN]":void 0===n?"[undefined]":"function"==typeof n?"[Function: "+G(n)+"]":n;var r}function on(n,t,r,e){if(void 0===r&&(r=1/0),void 0===e&&(e=new Y),0===r)return function(n){var t=Object.prototype.toString.call(n);if("string"==typeof n)return n;if("[object Object]"===t)return"[Object]";if("[object Array]"===t)return"[Array]";var r=en(n);return m(r)?r:t}(t);if(null!=t&&"function"==typeof t.toJSON)return t.toJSON();var i=en(t,n);if(m(i))return i;var o=nn(t),u=Array.isArray(t)?[]:{};if(e.memoize(t))return"[Circular ~]";for(var c in o)Object.prototype.hasOwnProperty.call(o,c)&&(u[c]=on(c,o[c],r-1,e));return e.unmemoize(t),u}function un(n,t){try{return JSON.parse(JSON.stringify(n,function(n,r){return on(n,r,t)}))}catch(n){return"**non-serializable**"}}function cn(n,t){void 0===t&&(t=40);var r=Object.keys(nn(n));if(r.sort(),!r.length)return"[object has no keys]";if(r[0].length>=t)return j(r[0],t);for(var e=r.length;e>0;e--){var i=r.slice(0,e).join(", ");if(!(i.length>t))return e===r.length?i:j(i,t)}return""}!function(n){n.PENDING="PENDING",n.RESOLVED="RESOLVED",n.REJECTED="REJECTED"}(K||(K={}));var an=function(){function n(n){var t=this;this.s=K.PENDING,this.h=[],this.v=function(n){t.l(K.RESOLVED,n)},this.p=function(n){t.l(K.REJECTED,n)},this.l=function(n,r){t.s===K.PENDING&&(E(r)?r.then(t.v,t.p):(t.s=n,t.m=r,t.g()))},this.j=function(n){t.h=t.h.concat(n),t.g()},this.g=function(){t.s!==K.PENDING&&(t.s===K.REJECTED?t.h.forEach(function(n){n.onrejected&&n.onrejected(t.m)}):t.h.forEach(function(n){n.onfulfilled&&n.onfulfilled(t.m)}),t.h=[])};try{n(this.v,this.p)}catch(n){this.p(n)}}return n.prototype.toString=function(){return"[object SyncPromise]"},n.resolve=function(t){return new n(function(n){n(t)})},n.reject=function(t){return new n(function(n,r){r(t)})},n.all=function(t){return new n(function(r,e){if(Array.isArray(t))if(0!==t.length){var i=t.length,o=[];t.forEach(function(t,u){n.resolve(t).then(function(n){o[u]=n,0===(i-=1)&&r(o)}).then(null,e)})}else r([]);else e(new TypeError("Promise.all requires an array as input."))})},n.prototype.then=function(t,r){var e=this;return new n(function(n,i){e.j({onfulfilled:function(r){if(t)try{return void n(t(r))}catch(n){return void i(n)}else n(r)},onrejected:function(t){if(r)try{return void n(r(t))}catch(n){return void i(n)}else i(t)}})})},n.prototype.catch=function(n){return this.then(function(n){return n},n)},n.prototype.finally=function(t){var r=this;return new n(function(n,e){var i,o;return r.then(function(n){o=!1,i=n,t&&t()},function(n){o=!0,i=n,t&&t()}).then(function(){o?e(i):n(i)})})},n}(),sn=function(){function n(n){this.k=n,this._=[]}return n.prototype.isReady=function(){return void 0===this.k||this.length()0&&r(!1)},n);an.all(t._).then(function(){clearTimeout(e),r(!0)}).then(null,function(){r(!0)})})},n}();function fn(){if(!("fetch"in D()))return!1;try{return new Headers,new Request(""),new Response,!0}catch(n){return!1}}function hn(n){return n&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(n.toString())}function vn(){if(!fn())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch(n){return!1}}var ln,dn=D(),pn={},yn={};function mn(n){if(!yn[n])switch(yn[n]=!0,n){case"console":!function(){if(!("console"in dn))return;["debug","info","warn","error","log","assert"].forEach(function(n){n in dn.console&&Z(dn.console,n,function(t){return function(){for(var r=[],e=0;e2?t[2]:void 0;if(e){var i=ln,o=String(e);ln=o,wn("history",{from:i,to:o})}return n.apply(this,t)}}dn.onpopstate=function(){for(var n=[],t=0;t1&&(h=d.slice(0,-1).join("/"),l=d.pop()),this.O({host:a,pass:c,path:h,projectId:l,port:f,protocol:e,user:i})},n.prototype.O=function(n){this.protocol=n.protocol,this.user=n.user,this.pass=n.pass||"",this.host=n.host,this.port=n.port||"",this.path=n.path||"",this.projectId=n.projectId},n.prototype.T=function(){var n=this;if(["protocol","user","host","projectId"].forEach(function(t){if(!n[t])throw new v("Invalid Dsn")}),"http"!==this.protocol&&"https"!==this.protocol)throw new v("Invalid Dsn");if(this.port&&isNaN(parseInt(this.port,10)))throw new v("Invalid Dsn")},n}(),In=function(){function n(){this.D=!1,this.R=[],this.N=[],this.I=[],this.C={},this.M={},this.A={},this.U={}}return n.prototype.addScopeListener=function(n){this.R.push(n)},n.prototype.addEventProcessor=function(n){return this.N.push(n),this},n.prototype.q=function(){var n=this;this.D||(this.D=!0,setTimeout(function(){n.R.forEach(function(t){t(n)}),n.D=!1}))},n.prototype.L=function(n,t,r,i){var o=this;return void 0===i&&(i=0),new an(function(u,c){var a=n[i];if(null===t||"function"!=typeof a)u(t);else{var s=a(e({},t),r);E(s)?s.then(function(t){return o.L(n,t,r,i+1).then(u)}).then(null,c):o.L(n,s,r,i+1).then(u).then(null,c)}})},n.prototype.setUser=function(n){return this.C=n||{},this.q(),this},n.prototype.setTags=function(n){return this.M=e({},this.M,n),this.q(),this},n.prototype.setTag=function(n,t){var r;return this.M=e({},this.M,((r={})[n]=t,r)),this.q(),this},n.prototype.setExtras=function(n){return this.A=e({},this.A,n),this.q(),this},n.prototype.setExtra=function(n,t){var r;return this.A=e({},this.A,((r={})[n]=t,r)),this.q(),this},n.prototype.setFingerprint=function(n){return this.H=n,this.q(),this},n.prototype.setLevel=function(n){return this.P=n,this.q(),this},n.prototype.setTransaction=function(n){return this.F=n,this.W&&(this.W.transaction=n),this.q(),this},n.prototype.setContext=function(n,t){var r;return this.U=e({},this.U,((r={})[n]=t,r)),this.q(),this},n.prototype.setSpan=function(n){return this.W=n,this.q(),this},n.prototype.getSpan=function(){return this.W},n.clone=function(t){var r=new n;return t&&(r.I=u(t.I),r.M=e({},t.M),r.A=e({},t.A),r.U=e({},t.U),r.C=t.C,r.P=t.P,r.W=t.W,r.F=t.F,r.H=t.H,r.N=u(t.N)),r},n.prototype.clear=function(){return this.I=[],this.M={},this.A={},this.C={},this.U={},this.P=void 0,this.F=void 0,this.H=void 0,this.W=void 0,this.q(),this},n.prototype.addBreadcrumb=function(n,t){var r=e({timestamp:W()},n);return this.I=void 0!==t&&t>=0?u(this.I,[r]).slice(-t):u(this.I,[r]),this.q(),this},n.prototype.clearBreadcrumbs=function(){return this.I=[],this.q(),this},n.prototype.X=function(n){n.fingerprint=n.fingerprint?Array.isArray(n.fingerprint)?n.fingerprint:[n.fingerprint]:[],this.H&&(n.fingerprint=n.fingerprint.concat(this.H)),n.fingerprint&&!n.fingerprint.length&&delete n.fingerprint},n.prototype.applyToEvent=function(n,t){return this.A&&Object.keys(this.A).length&&(n.extra=e({},this.A,n.extra)),this.M&&Object.keys(this.M).length&&(n.tags=e({},this.M,n.tags)),this.C&&Object.keys(this.C).length&&(n.user=e({},this.C,n.user)),this.U&&Object.keys(this.U).length&&(n.contexts=e({},this.U,n.contexts)),this.P&&(n.level=this.P),this.F&&(n.transaction=this.F),this.W&&(n.contexts=e({trace:this.W.getTraceContext()},n.contexts)),this.X(n),n.breadcrumbs=u(n.breadcrumbs||[],this.I),n.breadcrumbs=n.breadcrumbs.length>0?n.breadcrumbs:void 0,this.L(u(Cn(),this.N),n,t)},n}();function Cn(){var n=D();return n.__SENTRY__=n.__SENTRY__||{},n.__SENTRY__.globalEventProcessors=n.__SENTRY__.globalEventProcessors||[],n.__SENTRY__.globalEventProcessors}function Mn(n){Cn().push(n)}var An=3,Un=function(){function n(n,t,r){void 0===t&&(t=new In),void 0===r&&(r=An),this.B=r,this.$=[],this.$.push({client:n,scope:t})}return n.prototype.G=function(n){for(var t,r=[],e=1;e0?n[n.length-1].scope:void 0,r=In.clone(t);return this.getStack().push({client:this.getClient(),scope:r}),r},n.prototype.popScope=function(){return void 0!==this.getStack().pop()},n.prototype.withScope=function(n){var t=this.pushScope();try{n(t)}finally{this.popScope()}},n.prototype.getClient=function(){return this.getStackTop().client},n.prototype.getScope=function(){return this.getStackTop().scope},n.prototype.getStack=function(){return this.$},n.prototype.getStackTop=function(){return this.$[this.$.length-1]},n.prototype.captureException=function(n,t){var r=this.J=R(),i=t;if(!t){var o=void 0;try{throw new Error("Sentry syntheticException")}catch(n){o=n}i={originalException:n,syntheticException:o}}return this.G("captureException",n,e({},i,{event_id:r})),r},n.prototype.captureMessage=function(n,t,r){var i=this.J=R(),o=r;if(!r){var u=void 0;try{throw new Error(n)}catch(n){u=n}o={originalException:n,syntheticException:u}}return this.G("captureMessage",n,t,e({},o,{event_id:i})),i},n.prototype.captureEvent=function(n,t){var r=this.J=R();return this.G("captureEvent",n,e({},t,{event_id:r})),r},n.prototype.lastEventId=function(){return this.J},n.prototype.addBreadcrumb=function(n,t){var r=this.getStackTop();if(r.scope&&r.client){var i=r.client.getOptions&&r.client.getOptions()||{},o=i.beforeBreadcrumb,u=void 0===o?null:o,c=i.maxBreadcrumbs,a=void 0===c?100:c;if(!(a<=0)){var s=W(),f=e({timestamp:s},n),h=u?C(function(){return u(f,t)}):f;null!==h&&r.scope.addBreadcrumb(h,Math.min(a,100))}}},n.prototype.setUser=function(n){var t=this.getStackTop();t.scope&&t.scope.setUser(n)},n.prototype.setTags=function(n){var t=this.getStackTop();t.scope&&t.scope.setTags(n)},n.prototype.setExtras=function(n){var t=this.getStackTop();t.scope&&t.scope.setExtras(n)},n.prototype.setTag=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setTag(n,t)},n.prototype.setExtra=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setExtra(n,t)},n.prototype.setContext=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setContext(n,t)},n.prototype.configureScope=function(n){var t=this.getStackTop();t.scope&&t.client&&n(t.scope)},n.prototype.run=function(n){var t=Ln(this);try{n(this)}finally{Ln(t)}},n.prototype.getIntegration=function(n){var t=this.getClient();if(!t)return null;try{return t.getIntegration(n)}catch(t){return Q.warn("Cannot retrieve integration "+n.id+" from the current Hub"),null}},n.prototype.startSpan=function(n,t){return void 0===t&&(t=!1),this.V("startSpan",n,t)},n.prototype.traceHeaders=function(){return this.V("traceHeaders")},n.prototype.V=function(n){for(var t=[],r=1;r=n&&r({interval:i,ready:!1})):r({interval:i,ready:!0})},1)})},n.prototype.in=function(){return this.tn},n.prototype.cn=function(){return!1!==this.getOptions().enabled&&void 0!==this.en},n.prototype.an=function(n,t,r){var i=this,o=this.getOptions(),u=o.environment,c=o.release,a=o.dist,s=o.maxValueLength,f=void 0===s?250:s,h=o.normalizeDepth,v=void 0===h?3:h,l=e({},n);void 0===l.environment&&void 0!==u&&(l.environment=u),void 0===l.release&&void 0!==c&&(l.release=c),void 0===l.dist&&void 0!==a&&(l.dist=a),l.message&&(l.message=j(l.message,f));var d=l.exception&&l.exception.values&&l.exception.values[0];d&&d.value&&(d.value=j(d.value,f));var p=l.request;p&&p.url&&(p.url=j(p.url,f)),void 0===l.event_id&&(l.event_id=r&&r.event_id?r.event_id:R()),this.sn(l.sdk);var y=an.resolve(l);return t&&(y=t.applyToEvent(l,r)),y.then(function(n){return"number"==typeof v&&v>0?i.fn(n,v):n})},n.prototype.fn=function(n,t){return n?e({},n,n.breadcrumbs&&{breadcrumbs:n.breadcrumbs.map(function(n){return e({},n,n.data&&{data:un(n.data,t)})})},n.user&&{user:un(n.user,t)},n.contexts&&{contexts:un(n.contexts,t)},n.extra&&{extra:un(n.extra,t)}):null},n.prototype.sn=function(n){var t=Object.keys(this.Z);n&&t.length>0&&(n.integrations=t)},n.prototype.on=function(n,t,r){var e=this,i=this.getOptions(),o=i.beforeSend,u=i.sampleRate;return this.cn()?"number"==typeof u&&Math.random()>u?an.reject("This event has been sampled, will not send event."):new an(function(i,u){e.an(n,r,t).then(function(n){if(null!==n){var r=n;if(t&&t.data&&!0===t.data.__sentry__||!o)return e.in().sendEvent(r),void i(r);var c=o(n,t);if(void 0===c)Q.error("`beforeSend` method has to return `null` or a valid event.");else if(E(c))e.hn(c,i,u);else{if(null===(r=c))return Q.log("`beforeSend` returned `null`, will not send event."),void i(null);e.in().sendEvent(r),i(r)}}else u("An event processor returned null, will not send event.")}).then(null,function(n){e.captureException(n,{data:{__sentry__:!0},originalException:n}),u("Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: "+n)})}):an.reject("SDK not enabled, will not send event.")},n.prototype.hn=function(n,t,r){var e=this;n.then(function(n){null!==n?(e.in().sendEvent(n),t(n)):r("`beforeSend` returned `null`, will not send event.")}).then(null,function(n){r("beforeSend rejected with "+n)})},n}(),Kn=function(){function t(){}return t.prototype.sendEvent=function(t){return an.resolve({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:n.Status.Skipped})},t.prototype.close=function(n){return an.resolve(!0)},t}(),Qn=function(){function n(n){this.rn=n,this.rn.dsn||Q.warn("No DSN provided, backend will not do anything."),this.vn=this.ln()}return n.prototype.ln=function(){return new Kn},n.prototype.eventFromException=function(n,t){throw new v("Backend has to implement `eventFromException` method")},n.prototype.eventFromMessage=function(n,t,r){throw new v("Backend has to implement `eventFromMessage` method")},n.prototype.sendEvent=function(n){this.vn.sendEvent(n).then(null,function(n){Q.error("Error while sending event: "+n)})},n.prototype.getTransport=function(){return this.vn},n}();var Yn=function(){function n(){this.name=n.id}return n.prototype.setupOnce=function(){zn=Function.prototype.toString,Function.prototype.toString=function(){for(var n=[],t=0;t|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,it=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js))(?::(\d+))?(?::(\d+))?\s*$/i,ot=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,ut=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,ct=/\((\S*)(?::(\d+))(?::(\d+))\)/;function at(n){var t=null,r=n&&n.framesToPop;try{if(t=function(n){if(!n||!n.stacktrace)return null;for(var t,r=n.stacktrace,e=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,i=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,o=r.split("\n"),u=[],c=0;c eval")>-1&&(t=ut.exec(r[3]))?(r[1]=r[1]||"eval",r[3]=t[1],r[4]=t[2],r[5]=""):0!==u||r[5]||void 0===n.columnNumber||(i[0].column=n.columnNumber+1),e={url:r[3],func:r[1]||rt,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}!e.func&&e.line&&(e.func=rt),i.push(e)}if(!i.length)return null;return{message:ft(n),name:n.name,stack:i}}(n))return st(t,r)}catch(n){}return{message:ft(n),name:n&&n.name,stack:[],failed:!0}}function st(n,t){try{return e({},n,{stack:n.stack.slice(t)})}catch(t){return n}}function ft(n){var t=n&&n.message;return t?t.error&&"string"==typeof t.error.message?t.error.message:t:"No error message"}var ht=50;function vt(n){var t=dt(n.stack),r={type:n.name,value:n.message};return t&&t.length&&(r.stacktrace={frames:t}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function lt(n){return{exception:{values:[vt(n)]}}}function dt(n){if(!n||!n.length)return[];var t=n,r=t[0].func||"",e=t[t.length-1].func||"";return-1===r.indexOf("captureMessage")&&-1===r.indexOf("captureException")||(t=t.slice(1)),-1!==e.indexOf("sentryWrapped")&&(t=t.slice(0,-1)),t.map(function(n){return{colno:null===n.column?void 0:n.column,filename:n.url||t[0].url,function:n.func||"?",in_app:!0,lineno:null===n.line?void 0:n.line}}).slice(0,ht).reverse()}function pt(n,t,r){var e,i;if(void 0===r&&(r={}),d(n)&&n.error)return e=lt(at(n=n.error));if(p(n)||(i=n,"[object DOMException]"===Object.prototype.toString.call(i))){var o=n,u=o.name||(p(o)?"DOMError":"DOMException"),c=o.message?u+": "+o.message:u;return M(e=yt(c,t,r),c),e}return l(n)?e=lt(at(n)):b(n)||w(n)?(A(e=function(n,t,r){var e={exception:{values:[{type:w(n)?n.constructor.name:r?"UnhandledRejection":"Error",value:"Non-Error "+(r?"promise rejection":"exception")+" captured with keys: "+cn(n)}]},extra:{__serialized__:rn(n)}};if(t){var i=dt(at(t).stack);e.stacktrace={frames:i}}return e}(n,t,r.rejection),{synthetic:!0}),e):(M(e=yt(n,t,r),""+n,void 0),A(e,{synthetic:!0}),e)}function yt(n,t,r){void 0===r&&(r={});var e={message:n};if(r.attachStacktrace&&t){var i=dt(at(t).stack);e.stacktrace={frames:i}}return e}var mt=function(){function n(n){this.options=n,this._=new sn(30),this.url=new $n(this.options.dsn).getStoreEndpointWithUrlEncodedAuth()}return n.prototype.sendEvent=function(n){throw new v("Transport Class has to implement `sendEvent` method")},n.prototype.close=function(n){return this._.drain(n)},n}(),bt=D(),wt=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.xn=new Date(Date.now()),n}return r(e,t),e.prototype.sendEvent=function(t){var r=this;if(new Date(Date.now())0}function Ot(n,t,r){if(void 0===t&&(t={}),"function"!=typeof n)return n;try{if(n.__sentry__)return n;if(n.__sentry_wrapped__)return n.__sentry_wrapped__}catch(t){return n}var sentryWrapped=function(){var i=Array.prototype.slice.call(arguments);try{r&&"function"==typeof r&&r.apply(this,arguments);var o=i.map(function(n){return Ot(n,t)});return n.handleEvent?n.handleEvent.apply(this,o):n.apply(this,o)}catch(n){throw _t+=1,setTimeout(function(){_t-=1}),Bn(function(r){r.addEventProcessor(function(n){var r=e({},n);return t.mechanism&&(M(r,void 0,void 0),A(r,t.mechanism)),r.extra=e({},r.extra,{arguments:i}),r}),captureException(n)}),n}};try{for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(sentryWrapped[i]=n[i])}catch(n){}n.prototype=n.prototype||{},sentryWrapped.prototype=n.prototype,Object.defineProperty(n,"__sentry_wrapped__",{enumerable:!1,value:sentryWrapped}),Object.defineProperties(sentryWrapped,{__sentry__:{enumerable:!1,value:!0},__sentry_original__:{enumerable:!1,value:n}});try{Object.getOwnPropertyDescriptor(sentryWrapped,"name").configurable&&Object.defineProperty(sentryWrapped,"name",{get:function(){return n.name}})}catch(n){}return sentryWrapped}var Tt=function(){function t(n){this.name=t.id,this.jn=!1,this.kn=!1,this.rn=e({onerror:!0,onunhandledrejection:!0},n)}return t.prototype.setupOnce=function(){Error.stackTraceLimit=50,this.rn.onerror&&(Q.log("Global Handler attached: onerror"),this._n()),this.rn.onunhandledrejection&&(Q.log("Global Handler attached: onunhandledrejection"),this.Sn())},t.prototype._n=function(){var n=this;this.jn||(bn({callback:function(r){var e=r.error,i=Hn(),o=i.getIntegration(t),u=e&&!0===e.__sentry_own_request__;if(o&&!St()&&!u){var c=i.getClient(),a=m(e)?n.On(r.msg,r.url,r.line,r.column):n.Tn(pt(e,void 0,{attachStacktrace:c&&c.getOptions().attachStacktrace,rejection:!1}),r.url,r.line,r.column);A(a,{handled:!1,type:"onerror"}),i.captureEvent(a,{originalException:e})}},type:"error"}),this.jn=!0)},t.prototype.Sn=function(){var r=this;this.kn||(bn({callback:function(e){var i=e;try{"reason"in e?i=e.reason:"detail"in e&&"reason"in e.detail&&(i=e.detail.reason)}catch(n){}var o=Hn(),u=o.getIntegration(t),c=i&&!0===i.__sentry_own_request__;if(!u||St()||c)return!0;var a=o.getClient(),s=m(i)?r.Dn(i):pt(i,void 0,{attachStacktrace:a&&a.getOptions().attachStacktrace,rejection:!0});s.level=n.Severity.Error,A(s,{handled:!1,type:"onunhandledrejection"}),o.captureEvent(s,{originalException:i})},type:"unhandledrejection"}),this.kn=!0)},t.prototype.On=function(n,t,r,e){var i,o=d(n)?n.message:n;if(y(o)){var u=o.match(/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i);u&&(i=u[1],o=u[2])}var c={exception:{values:[{type:i||"Error",value:o}]}};return this.Tn(c,t,r,e)},t.prototype.Dn=function(n){return{exception:{values:[{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+n}]}}},t.prototype.Tn=function(n,t,r,e){n.exception=n.exception||{},n.exception.values=n.exception.values||[],n.exception.values[0]=n.exception.values[0]||{},n.exception.values[0].stacktrace=n.exception.values[0].stacktrace||{},n.exception.values[0].stacktrace.frames=n.exception.values[0].stacktrace.frames||[];var i=isNaN(parseInt(e,10))?void 0:e,o=isNaN(parseInt(r,10))?void 0:r,u=y(t)&&t.length>0?t:function(){try{return document.location.href}catch(n){return""}}();return 0===n.exception.values[0].stacktrace.frames.length&&n.exception.values[0].stacktrace.frames.push({colno:i,filename:u,function:"?",in_app:!0,lineno:o}),n},t.id="GlobalHandlers",t}(),Dt=function(){function n(){this.Rn=0,this.name=n.id}return n.prototype.Nn=function(n){return function(){for(var t=[],r=0;r"}0!==t.length&&Hn().addBreadcrumb({category:"ui."+n.name,message:t},{event:n.event,name:n.name})},t.prototype.qn=function(n){if(n.endTimestamp){if(n.xhr.__sentry_own_request__)return;Hn().addBreadcrumb({category:"xhr",data:n.xhr.__sentry_xhr__,type:"http"},{xhr:n.xhr})}else this.rn.sentry&&n.xhr.__sentry_own_request__&&Nt(n.args[0])},t.prototype.Ln=function(t){if(t.endTimestamp){var r=Hn().getClient(),i=r&&r.getDsn();if(this.rn.sentry&&i){var o=new $n(i).getStoreEndpoint();if(o&&-1!==t.fetchData.url.indexOf(o)&&"POST"===t.fetchData.method&&t.args[1]&&t.args[1].body)return void Nt(t.args[1].body)}t.error?Hn().addBreadcrumb({category:"fetch",data:e({},t.fetchData,{status_code:t.response.status}),level:n.Severity.Error,type:"http"},{data:t.error,input:t.args}):Hn().addBreadcrumb({category:"fetch",data:e({},t.fetchData,{status_code:t.response.status}),type:"http"},{input:t.args,response:t.response})}},t.prototype.Hn=function(n){var t=D(),r=n.from,e=n.to,i=N(t.location.href),o=N(r),u=N(e);o.path||(o=i),i.protocol===u.protocol&&i.host===u.host&&(e=u.relative),i.protocol===o.protocol&&i.host===o.host&&(r=o.relative),Hn().addBreadcrumb({category:"navigation",data:{from:r,to:e}})},t.prototype.setupOnce=function(){var n=this;this.rn.console&&bn({callback:function(){for(var t=[],r=0;r=this.k)return r;var e=vt(at(n[t]));return this.Wn(n[t],t,u([e],r))},n.id="LinkedErrors",n}(),At=D(),Ut=function(){function n(){this.name=n.id}return n.prototype.setupOnce=function(){Mn(function(t){if(Hn().getIntegration(n)){if(!At.navigator||!At.location)return t;var r=t.request||{};return r.url=r.url||At.location.href,r.headers=r.headers||{},r.headers["User-Agent"]=At.navigator.userAgent,e({},t,{request:r})}return t})},n.id="UserAgent",n}(),qt=Object.freeze({GlobalHandlers:Tt,TryCatch:Dt,Breadcrumbs:Rt,LinkedErrors:Mt,UserAgent:Ut}),Lt=[new nt,new Yn,new Dt,new Rt,new Tt,new Mt,new Ut];var Ht={},Pt=D();Pt.Sentry&&Pt.Sentry.Integrations&&(Ht=Pt.Sentry.Integrations);var Ft=e({},Ht,tt,qt);return n.BrowserClient=kt,n.Hub=Un,n.Integrations=Ft,n.SDK_NAME=jt,n.SDK_VERSION="5.15.0",n.Scope=In,n.Transports=Et,n.addBreadcrumb=function(n){Xn("addBreadcrumb",n)},n.addGlobalEventProcessor=Mn,n.captureEvent=function(n){return Xn("captureEvent",n)},n.captureException=captureException,n.captureMessage=function(n,t){var r;try{throw new Error(n)}catch(n){r=n}return Xn("captureMessage",n,t,{originalException:n,syntheticException:r})},n.close=function(n){var t=Hn().getClient();return t?t.close(n):an.reject(!1)},n.configureScope=function(n){Xn("configureScope",n)},n.defaultIntegrations=Lt,n.flush=function(n){var t=Hn().getClient();return t?t.flush(n):an.reject(!1)},n.forceLoad=function(){},n.getCurrentHub=Hn,n.getHubFromCarrier=Fn,n.init=function(n){if(void 0===n&&(n={}),void 0===n.defaultIntegrations&&(n.defaultIntegrations=Lt),void 0===n.release){var t=D();t.SENTRY_RELEASE&&t.SENTRY_RELEASE.id&&(n.release=t.SENTRY_RELEASE.id)}!function(n,t){!0===t.debug&&Q.enable();var r=Hn(),e=new n(t);r.bindClient(e)}(kt,n)},n.lastEventId=function(){return Hn().lastEventId()},n.onLoad=function(n){n()},n.setContext=function(n,t){Xn("setContext",n,t)},n.setExtra=function(n,t){Xn("setExtra",n,t)},n.setExtras=function(n){Xn("setExtras",n)},n.setTag=function(n,t){Xn("setTag",n,t)},n.setTags=function(n){Xn("setTags",n)},n.setUser=function(n){Xn("setUser",n)},n.showReportDialog=function(n){void 0===n&&(n={}),n.eventId||(n.eventId=Hn().lastEventId());var t=Hn().getClient();t&&t.showReportDialog(n)},n.withScope=Bn,n.wrap=function(n){return Ot(n)()},n}({}); +/*! @sentry/browser 7.102.0 (4c0fa37) | https://github.com/getsentry/sentry-javascript */ +var Sentry=function(t){const n=Object.prototype.toString;function e(t){switch(n.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return l(t,Error)}}function r(t,e){return n.call(t)===`[object ${e}]`}function i(t){return r(t,"ErrorEvent")}function o(t){return r(t,"DOMError")}function s(t){return r(t,"String")}function c(t){return"object"==typeof t&&null!==t&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function u(t){return null===t||c(t)||"object"!=typeof t&&"function"!=typeof t}function a(t){return r(t,"Object")}function f(t){return"undefined"!=typeof Event&&l(t,Event)}function h(t){return Boolean(t&&t.then&&"function"==typeof t.then)}function l(t,n){try{return t instanceof n}catch(t){return!1}}function d(t){return!("object"!=typeof t||null===t||!t.__isVue&&!t.t)}function p(t,n=0){return"string"!=typeof t||0===n||t.length<=n?t:`${t.slice(0,n)}...`}function m(t,n){if(!Array.isArray(t))return"";const e=[];for(let n=0;ny(t,n,e)))}function v(t,n,e=250,r,i,o,s){if(!(o.exception&&o.exception.values&&s&&l(s.originalException,Error)))return;const c=o.exception.values.length>0?o.exception.values[o.exception.values.length-1]:void 0;var u,a;c&&(o.exception.values=(u=_(t,n,i,s.originalException,r,o.exception.values,c,0),a=e,u.map((t=>(t.value&&(t.value=p(t.value,a)),t)))))}function _(t,n,e,r,i,o,s,c){if(o.length>=e+1)return o;let u=[...o];if(l(r[i],Error)){b(s,c);const o=t(n,r[i]),a=u.length;E(o,i,a,c),u=_(t,n,e,r[i],i,[o,...u],o,a)}return Array.isArray(r.errors)&&r.errors.forEach(((r,o)=>{if(l(r,Error)){b(s,c);const a=t(n,r),f=u.length;E(a,`errors[${o}]`,f,c),u=_(t,n,e,r,i,[a,...u],a,f)}})),u}function b(t,n){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,is_exception_group:!0,exception_id:n}}function E(t,n,e,r){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,type:"chained",source:n,exception_id:e,parent_id:r}}function w(t){return t&&t.Math==Math?t:void 0}const $="object"==typeof globalThis&&w(globalThis)||"object"==typeof window&&w(window)||"object"==typeof self&&w(self)||"object"==typeof global&&w(global)||function(){return this}()||{};function S(){return $}function x(t,n,e){const r=e||$,i=r.__SENTRY__=r.__SENTRY__||{};return i[t]||(i[t]=n())}const k=S();function T(t,n={}){if(!t)return"";try{let e=t;const r=5,i=[];let o=0,s=0;const c=" > ",u=c.length;let a;const f=Array.isArray(n)?n:n.keyAttrs,h=!Array.isArray(n)&&n.maxStringLength||80;for(;e&&o++1&&s+i.length*u+a.length>=h));)i.push(a),s+=a.length,e=e.parentNode;return i.reverse().join(c)}catch(t){return""}}function j(t,n){const e=t,r=[];let i,o,c,u,a;if(!e||!e.tagName)return"";if(k.HTMLElement&&e instanceof HTMLElement&&e.dataset&&e.dataset.sentryComponent)return e.dataset.sentryComponent;r.push(e.tagName.toLowerCase());const f=n&&n.length?n.filter((t=>e.getAttribute(t))).map((t=>[t,e.getAttribute(t)])):null;if(f&&f.length)f.forEach((t=>{r.push(`[${t[0]}="${t[1]}"]`)}));else if(e.id&&r.push(`#${e.id}`),i=e.className,i&&s(i))for(o=i.split(/\s+/),a=0;a{const r=I[t];e[t]=n[t],n[t]=r}));try{return t()}finally{r.forEach((t=>{n[t]=e[t]}))}}const M=function(){let t=!1;const n={enable:()=>{t=!0},disable:()=>{t=!1},isEnabled:()=>t};return O.forEach((t=>{n[t]=()=>{}})),n}(),R=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function C(t,n=!1){const{host:e,path:r,pass:i,port:o,projectId:s,protocol:c,publicKey:u}=t;return`${c}://${u}${n&&i?`:${i}`:""}@${e}${o?`:${o}`:""}/${r?`${r}/`:r}${s}`}function A(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function N(t){const n="string"==typeof t?function(t){const n=R.exec(t);if(!n)return void D((()=>{console.error(`Invalid Sentry Dsn: ${t}`)}));const[e,r,i="",o,s="",c]=n.slice(1);let u="",a=c;const f=a.split("/");if(f.length>1&&(u=f.slice(0,-1).join("/"),a=f.pop()),a){const t=a.match(/^\d+/);t&&(a=t[0])}return A({host:o,pass:i,path:u,projectId:a,port:s,protocol:e,publicKey:r})}(t):A(t);if(n)return n}class L extends Error{constructor(t,n="warn"){super(t),this.message=t,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=n}}function P(t,n,e){if(!(n in t))return;const r=t[n],i=e(r);"function"==typeof i&&B(i,r),t[n]=i}function U(t,n,e){try{Object.defineProperty(t,n,{value:e,writable:!0,configurable:!0})}catch(t){}}function B(t,n){try{const e=n.prototype||{};t.prototype=n.prototype=e,U(t,"__sentry_original__",n)}catch(t){}}function F(t){return t.__sentry_original__}function H(t){if(e(t))return{message:t.message,name:t.name,stack:t.stack,...W(t)};if(f(t)){const n={type:t.type,target:q(t.target),currentTarget:q(t.currentTarget),...W(t)};return"undefined"!=typeof CustomEvent&&l(t,CustomEvent)&&(n.detail=t.detail),n}return t}function q(t){try{return n=t,"undefined"!=typeof Element&&l(n,Element)?T(t):Object.prototype.toString.call(t)}catch(t){return""}var n}function W(t){if("object"==typeof t&&null!==t){const n={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n}return{}}function z(t){return X(t,new Map)}function X(t,n){if(function(t){if(!a(t))return!1;try{const n=Object.getPrototypeOf(t).constructor.name;return!n||"Object"===n}catch(t){return!0}}(t)){const e=n.get(t);if(void 0!==e)return e;const r={};n.set(t,r);for(const e of Object.keys(t))void 0!==t[e]&&(r[e]=X(t[e],n));return r}if(Array.isArray(t)){const e=n.get(t);if(void 0!==e)return e;const r=[];return n.set(t,r),t.forEach((t=>{r.push(X(t,n))})),r}return t}const G=/\(error: (.*)\)/,J=/captureMessage|captureException/;function K(...t){const n=t.sort(((t,n)=>t[0]-n[0])).map((t=>t[1]));return(t,e=0)=>{const r=[],i=t.split("\n");for(let t=e;t1024)continue;const o=G.test(e)?e.replace(G,"$1"):e;if(!o.match(/\S*Error: /)){for(const t of n){const n=t(o);if(n){r.push(n);break}}if(r.length>=50)break}}return function(t){if(!t.length)return[];const n=Array.from(t);/sentryWrapped/.test(n[n.length-1].function||"")&&n.pop();n.reverse(),J.test(n[n.length-1].function||"")&&(n.pop(),J.test(n[n.length-1].function||"")&&n.pop());return n.slice(0,50).map((t=>({...t,filename:t.filename||n[n.length-1].filename,function:t.function||"?"})))}(r)}}const V="";function Y(t){try{return t&&"function"==typeof t&&t.name||V}catch(t){return V}}const Z={},Q={};function tt(t,n){Z[t]=Z[t]||[],Z[t].push(n)}function nt(t,n){Q[t]||(n(),Q[t]=!0)}function et(t,n){const e=t&&Z[t];if(e)for(const t of e)try{t(n)}catch(t){}}function rt(){"console"in $&&O.forEach((function(t){t in $.console&&P($.console,t,(function(n){return I[t]=n,function(...n){et("console",{args:n,level:t});const e=I[t];e&&e.apply($.console,n)}}))}))}function it(){const t=$,n=t.crypto||t.msCrypto;let e=()=>16*Math.random();try{if(n&&n.randomUUID)return n.randomUUID().replace(/-/g,"");n&&n.getRandomValues&&(e=()=>{const t=new Uint8Array(1);return n.getRandomValues(t),t[0]})}catch(t){}return([1e7]+1e3+4e3+8e3+1e11).replace(/[018]/g,(t=>(t^(15&e())>>t/4).toString(16)))}function ot(t){return t.exception&&t.exception.values?t.exception.values[0]:void 0}function st(t){const{message:n,event_id:e}=t;if(n)return n;const r=ot(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||e||"":e||""}function ct(t,n,e){const r=t.exception=t.exception||{},i=r.values=r.values||[],o=i[0]=i[0]||{};o.value||(o.value=n||""),o.type||(o.type=e||"Error")}function ut(t,n){const e=ot(t);if(!e)return;const r=e.mechanism;if(e.mechanism={type:"generic",handled:!0,...r,...n},n&&"data"in n){const t={...r&&r.data,...n.data};e.mechanism.data=t}}function at(t){if(t&&t.__sentry_captured__)return!0;try{U(t,"__sentry_captured__",!0)}catch(t){}return!1}function ft(t){return Array.isArray(t)?t:[t]}const ht=$;let lt,dt,pt;function mt(){if(!ht.document)return;const t=et.bind(null,"dom"),n=yt(t,!0);ht.document.addEventListener("click",n,!1),ht.document.addEventListener("keypress",n,!1),["EventTarget","Node"].forEach((n=>{const e=ht[n]&&ht[n].prototype;e&&e.hasOwnProperty&&e.hasOwnProperty("addEventListener")&&(P(e,"addEventListener",(function(n){return function(e,r,i){if("click"===e||"keypress"==e)try{const r=this,o=r.__sentry_instrumentation_handlers__=r.__sentry_instrumentation_handlers__||{},s=o[e]=o[e]||{refCount:0};if(!s.handler){const r=yt(t);s.handler=r,n.call(this,e,r,i)}s.refCount++}catch(t){}return n.call(this,e,r,i)}})),P(e,"removeEventListener",(function(t){return function(n,e,r){if("click"===n||"keypress"==n)try{const e=this,i=e.__sentry_instrumentation_handlers__||{},o=i[n];o&&(o.refCount--,o.refCount<=0&&(t.call(this,n,o.handler,r),o.handler=void 0,delete i[n]),0===Object.keys(i).length&&delete e.__sentry_instrumentation_handlers__)}catch(t){}return t.call(this,n,e,r)}})))}))}function yt(t,n=!1){return e=>{if(!e||e._sentryCaptured)return;const r=function(t){try{return t.target}catch(t){return null}}(e);if(function(t,n){return"keypress"===t&&(!n||!n.tagName||"INPUT"!==n.tagName&&"TEXTAREA"!==n.tagName&&!n.isContentEditable)}(e.type,r))return;U(e,"_sentryCaptured",!0),r&&!r._sentryId&&U(r,"_sentryId",it());const i="keypress"===e.type?"input":e.type;if(!function(t){if(t.type!==dt)return!1;try{if(!t.target||t.target._sentryId!==pt)return!1}catch(t){}return!0}(e)){t({event:e,name:i,global:n}),dt=e.type,pt=r?r._sentryId:void 0}clearTimeout(lt),lt=ht.setTimeout((()=>{pt=void 0,dt=void 0}),1e3)}}const gt=S();function vt(){if(!("fetch"in gt))return!1;try{return new Headers,new Request("http://www.example.com"),new Response,!0}catch(t){return!1}}function _t(t){return t&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}function bt(){(function(){if("string"==typeof EdgeRuntime)return!0;if(!vt())return!1;if(_t(gt.fetch))return!0;let t=!1;const n=gt.document;if(n&&"function"==typeof n.createElement)try{const e=n.createElement("iframe");e.hidden=!0,n.head.appendChild(e),e.contentWindow&&e.contentWindow.fetch&&(t=_t(e.contentWindow.fetch)),n.head.removeChild(e)}catch(t){}return t})()&&P($,"fetch",(function(t){return function(...n){const{method:e,url:r}=function(t){if(0===t.length)return{method:"GET",url:""};if(2===t.length){const[n,e]=t;return{url:wt(n),method:Et(e,"method")?String(e.method).toUpperCase():"GET"}}const n=t[0];return{url:wt(n),method:Et(n,"method")?String(n.method).toUpperCase():"GET"}}(n),i={args:n,fetchData:{method:e,url:r},startTimestamp:Date.now()};return et("fetch",{...i}),t.apply($,n).then((t=>(et("fetch",{...i,endTimestamp:Date.now(),response:t}),t)),(t=>{throw et("fetch",{...i,endTimestamp:Date.now(),error:t}),t}))}}))}function Et(t,n){return!!t&&"object"==typeof t&&!!t[n]}function wt(t){return"string"==typeof t?t:t?Et(t,"url")?t.url:t.toString?t.toString():"":""}let $t=null;function St(){$t=$.onerror,$.onerror=function(t,n,e,r,i){const o={column:r,error:i,line:e,msg:t,url:n};return et("error",o),!(!$t||$t.__SENTRY_LOADER__)&&$t.apply(this,arguments)},$.onerror.__SENTRY_INSTRUMENTED__=!0}let xt=null;function kt(){xt=$.onunhandledrejection,$.onunhandledrejection=function(t){const n=t;return et("unhandledrejection",n),!(xt&&!xt.__SENTRY_LOADER__)||xt.apply(this,arguments)},$.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const Tt=S();const jt=$;let Ot;function It(t){const n="history";tt(n,t),nt(n,Dt)}function Dt(){if(!function(){const t=Tt.chrome,n=t&&t.app&&t.app.runtime,e="history"in Tt&&!!Tt.history.pushState&&!!Tt.history.replaceState;return!n&&e}())return;const t=jt.onpopstate;function n(t){return function(...n){const e=n.length>2?n[2]:void 0;if(e){const t=Ot,n=String(e);Ot=n;et("history",{from:t,to:n})}return t.apply(this,n)}}jt.onpopstate=function(...n){const e=jt.location.href,r=Ot;Ot=e;if(et("history",{from:r,to:e}),t)try{return t.apply(this,n)}catch(t){}},P(jt.history,"pushState",n),P(jt.history,"replaceState",n)}const Mt=$;function Rt(){if(!Mt.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;P(t,"open",(function(t){return function(...n){const e=Date.now(),r=s(n[0])?n[0].toUpperCase():void 0,i=function(t){if(s(t))return t;try{return t.toString()}catch(t){}return}(n[1]);if(!r||!i)return t.apply(this,n);this.__sentry_xhr_v3__={method:r,url:i,request_headers:{}},"POST"===r&&i.match(/sentry_key/)&&(this.__sentry_own_request__=!0);const o=()=>{const t=this.__sentry_xhr_v3__;if(t&&4===this.readyState){try{t.status_code=this.status}catch(t){}et("xhr",{args:[r,i],endTimestamp:Date.now(),startTimestamp:e,xhr:this})}};return"onreadystatechange"in this&&"function"==typeof this.onreadystatechange?P(this,"onreadystatechange",(function(t){return function(...n){return o(),t.apply(this,n)}})):this.addEventListener("readystatechange",o),P(this,"setRequestHeader",(function(t){return function(...n){const[e,r]=n,i=this.__sentry_xhr_v3__;return i&&s(e)&&s(r)&&(i.request_headers[e.toLowerCase()]=r),t.apply(this,n)}})),t.apply(this,n)}})),P(t,"send",(function(t){return function(...n){const e=this.__sentry_xhr_v3__;if(!e)return t.apply(this,n);void 0!==n[0]&&(e.body=n[0]);return et("xhr",{args:[e.method,e.url],startTimestamp:Date.now(),xhr:this}),t.apply(this,n)}}))}function Ct(t,n=100,e=1/0){try{return Nt("",t,n,e)}catch(t){return{ERROR:`**non-serializable** (${t})`}}}function At(t,n=3,e=102400){const r=Ct(t,n);return i=r,function(t){return~-encodeURI(t).split(/%..|./).length}(JSON.stringify(i))>e?At(t,n-1,e):r;var i}function Nt(t,n,e=1/0,r=1/0,i=function(){const t="function"==typeof WeakSet,n=t?new WeakSet:[];return[function(e){if(t)return!!n.has(e)||(n.add(e),!1);for(let t=0;t=r){l[t]="[MaxProperties ~]";break}const n=m[t];l[t]=Nt(t,n,f-1,r,i),p++}return s(n),l}var Lt;function Pt(t){return new Bt((n=>{n(t)}))}function Ut(t){return new Bt(((n,e)=>{e(t)}))}!function(t){t[t.PENDING=0]="PENDING";t[t.RESOLVED=1]="RESOLVED";t[t.REJECTED=2]="REJECTED"}(Lt||(Lt={}));class Bt{constructor(t){Bt.prototype.__init.call(this),Bt.prototype.__init2.call(this),Bt.prototype.__init3.call(this),Bt.prototype.__init4.call(this),this.o=Lt.PENDING,this.u=[];try{t(this.h,this.l)}catch(t){this.l(t)}}then(t,n){return new Bt(((e,r)=>{this.u.push([!1,n=>{if(t)try{e(t(n))}catch(t){r(t)}else e(n)},t=>{if(n)try{e(n(t))}catch(t){r(t)}else r(t)}]),this.p()}))}catch(t){return this.then((t=>t),t)}finally(t){return new Bt(((n,e)=>{let r,i;return this.then((n=>{i=!1,r=n,t&&t()}),(n=>{i=!0,r=n,t&&t()})).then((()=>{i?e(r):n(r)}))}))}__init(){this.h=t=>{this.m(Lt.RESOLVED,t)}}__init2(){this.l=t=>{this.m(Lt.REJECTED,t)}}__init3(){this.m=(t,n)=>{this.o===Lt.PENDING&&(h(n)?n.then(this.h,this.l):(this.o=t,this.v=n,this.p()))}}__init4(){this.p=()=>{if(this.o===Lt.PENDING)return;const t=this.u.slice();this.u=[],t.forEach((t=>{t[0]||(this.o===Lt.RESOLVED&&t[1](this.v),this.o===Lt.REJECTED&&t[2](this.v),t[0]=!0)}))}}}function Ft(t){const n=[];function e(t){return n.splice(n.indexOf(t),1)[0]}return{$:n,add:function(r){if(!(void 0===t||n.lengthe(i))).then(null,(()=>e(i).then(null,(()=>{})))),i},drain:function(t){return new Bt(((e,r)=>{let i=n.length;if(!i)return e(!0);const o=setTimeout((()=>{t&&t>0&&e(!1)}),t);n.forEach((t=>{Pt(t).then((()=>{--i||(clearTimeout(o),e(!0))}),r)}))}))}}}function Ht(t){if(!t)return{};const n=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!n)return{};const e=n[6]||"",r=n[8]||"";return{host:n[4],path:n[5],protocol:n[2],search:e,hash:r,relative:n[5]+e+r}}const qt=["fatal","error","warning","log","info","debug"];function Wt(t){return"warn"===t?"warning":qt.includes(t)?t:"log"}function zt(){return Date.now()/1e3}const Xt=function(){const{performance:t}=$;if(!t||!t.now)return zt;const n=Date.now()-t.now(),e=null==t.timeOrigin?n:t.timeOrigin;return()=>(e+t.now())/1e3}();(()=>{const{performance:t}=$;if(!t||!t.now)return;const n=36e5,e=t.now(),r=Date.now(),i=t.timeOrigin?Math.abs(t.timeOrigin+e-r):n,o=it.split("=").map((t=>decodeURIComponent(t.trim()))))).reduce(((t,[n,e])=>(t[n]=e,t)),{})}const Kt=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function Vt(t,n){const e=function(t){if(!t)return;const n=t.match(Kt);if(!n)return;let e;return"1"===n[3]?e=!0:"0"===n[3]&&(e=!1),{traceId:n[1],parentSampled:e,parentSpanId:n[2]}}(t),r=function(t){if(!s(t)&&!Array.isArray(t))return;let n={};if(Array.isArray(t))n=t.reduce(((t,n)=>{const e=Jt(n);for(const n of Object.keys(e))t[n]=e[n];return t}),{});else{if(!t)return;n=Jt(t)}const e=Object.entries(n).reduce(((t,[n,e])=>(n.match(Gt)&&(t[n.slice("sentry-".length)]=e),t)),{});return Object.keys(e).length>0?e:void 0}(n),{traceId:i,parentSpanId:o,parentSampled:c}=e||{};return e?{traceparentData:e,dynamicSamplingContext:r||{},propagationContext:{traceId:i||it(),parentSpanId:o||it().substring(16),spanId:it().substring(16),sampled:c,dsc:r||{}}}:{traceparentData:e,dynamicSamplingContext:void 0,propagationContext:{traceId:i||it(),spanId:it().substring(16)}}}function Yt(t,n=[]){return[t,n]}function Zt(t,n){const[e,r]=t;return[e,[...r,n]]}function Qt(t,n){const e=t[1];for(const t of e){if(n(t,t[0].type))return!0}return!1}function tn(t,n){return(n||new TextEncoder).encode(t)}function nn(t,n){const[e,r]=t;let i=JSON.stringify(e);function o(t){"string"==typeof i?i="string"==typeof t?i+t:[tn(i,n),t]:i.push("string"==typeof t?tn(t,n):t)}for(const t of r){const[n,e]=t;if(o(`\n${JSON.stringify(n)}\n`),"string"==typeof e||e instanceof Uint8Array)o(e);else{let t;try{t=JSON.stringify(e)}catch(n){t=JSON.stringify(Ct(e))}o(t)}}return"string"==typeof i?i:function(t){const n=t.reduce(((t,n)=>t+n.length),0),e=new Uint8Array(n);let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}(i)}function en(t,n){const e="string"==typeof t.data?tn(t.data,n):t.data;return[z({type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType}),e]}const rn={session:"session",sessions:"session",attachment:"attachment",transaction:"transaction",event:"error",client_report:"internal",user_report:"default",profile:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",feedback:"feedback",statsd:"unknown"};function on(t){return rn[t]}function sn(t){if(!t||!t.sdk)return;const{name:n,version:e}=t.sdk;return{name:n,version:e}}function cn(t,{statusCode:n,headers:e},r=Date.now()){const i={...t},o=e&&e["x-sentry-rate-limits"],s=e&&e["retry-after"];if(o)for(const t of o.trim().split(",")){const[n,e]=t.split(":",2),o=parseInt(n,10),s=1e3*(isNaN(o)?60:o);if(e)for(const t of e.split(";"))i[t]=r+s;else i.all=r+s}else s?i.all=r+function(t,n=Date.now()){const e=parseInt(`${t}`,10);if(!isNaN(e))return 1e3*e;const r=Date.parse(`${t}`);return isNaN(r)?6e4:r-n}(s,r):429===n&&(i.all=r+6e4);return i}function un(t,n){const e={type:n.name||n.constructor.name,value:n.message},r=function(t,n){return t(n.stack||"",1)}(t,n);return r.length&&(e.stacktrace={frames:r}),e}class an{static __initStatic(){this.id="Feedback"}constructor(t){this.name=an.id,D((()=>{console.warn("You are using new Feedback() even though this bundle does not include Feedback.")}))}setupOnce(){}openDialog(){}closeDialog(){}attachTo(){}createWidget(){}removeWidget(){}getWidget(){}remove(){}}an.__initStatic();class fn{static __initStatic(){this.id="Replay"}constructor(t){this.name=fn.id,D((()=>{console.warn("You are using new Replay() even though this bundle does not include replay.")}))}setupOnce(){}start(){}stop(){}flush(){}}fn.__initStatic();class hn{static __initStatic(){this.id="BrowserTracing"}constructor(t){this.name=hn.id,D((()=>{console.warn("You are using new BrowserTracing() even though this bundle does not include tracing.")}))}setupOnce(){}}hn.__initStatic();const ln="production";function dn(){return x("globalEventProcessors",(()=>[]))}function pn(t){dn().push(t)}function mn(t,n,e,r=0){return new Bt(((i,o)=>{const s=t[r];if(null===n||"function"!=typeof s)i(n);else{const c=s({...n},e);h(c)?c.then((n=>mn(t,n,e,r+1).then(i))).then(null,o):mn(t,c,e,r+1).then(i).then(null,o)}}))}function yn(t){const n=Xt(),e={sid:it(),init:!0,timestamp:n,started:n,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>function(t){return z({sid:`${t.sid}`,init:t.init,started:new Date(1e3*t.started).toISOString(),timestamp:new Date(1e3*t.timestamp).toISOString(),status:t.status,errors:t.errors,did:"number"==typeof t.did||"string"==typeof t.did?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}})}(e)};return t&&gn(e,t),e}function gn(t,n={}){if(n.user&&(!t.ipAddress&&n.user.ip_address&&(t.ipAddress=n.user.ip_address),t.did||n.did||(t.did=n.user.id||n.user.email||n.user.username)),t.timestamp=n.timestamp||Xt(),n.abnormal_mechanism&&(t.abnormal_mechanism=n.abnormal_mechanism),n.ignoreDuration&&(t.ignoreDuration=n.ignoreDuration),n.sid&&(t.sid=32===n.sid.length?n.sid:it()),void 0!==n.init&&(t.init=n.init),!t.did&&n.did&&(t.did=`${n.did}`),"number"==typeof n.started&&(t.started=n.started),t.ignoreDuration)t.duration=void 0;else if("number"==typeof n.duration)t.duration=n.duration;else{const n=t.timestamp-t.started;t.duration=n>=0?n:0}n.release&&(t.release=n.release),n.environment&&(t.environment=n.environment),!t.ipAddress&&n.ipAddress&&(t.ipAddress=n.ipAddress),!t.userAgent&&n.userAgent&&(t.userAgent=n.userAgent),"number"==typeof n.errors&&(t.errors=n.errors),n.status&&(t.status=n.status)}function vn(t,n){let e={};n?e={status:n}:"ok"===t.status&&(e={status:"exited"}),gn(t,e)}function _n(t){const{spanId:n,traceId:e}=t.spanContext(),{data:r,op:i,parent_span_id:o,status:s,tags:c,origin:u}=En(t);return z({data:r,op:i,parent_span_id:o,span_id:n,status:s,tags:c,trace_id:e,origin:u})}function bn(t){return t>9999999999?t/1e3:t}function En(t){return function(t){return"function"==typeof t.getSpanJSON}(t)?t.getSpanJSON():"function"==typeof t.toJSON?t.toJSON():{}}function wn(t,n,e,r,i,o){const{normalizeDepth:s=3,normalizeMaxBreadth:c=1e3}=t,u={...n,event_id:n.event_id||e.event_id||it(),timestamp:n.timestamp||zt()},a=e.integrations||t.integrations.map((t=>t.name));!function(t,n){const{environment:e,release:r,dist:i,maxValueLength:o=250}=n;"environment"in t||(t.environment="environment"in n?e:ln);void 0===t.release&&void 0!==r&&(t.release=r);void 0===t.dist&&void 0!==i&&(t.dist=i);t.message&&(t.message=p(t.message,o));const s=t.exception&&t.exception.values&&t.exception.values[0];s&&s.value&&(s.value=p(s.value,o));const c=t.request;c&&c.url&&(c.url=p(c.url,o))}(u,t),function(t,n){n.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...n])}(u,a),void 0===n.type&&function(t,n){const e=$._sentryDebugIds;if(!e)return;let r;const i=$n.get(n);i?r=i:(r=new Map,$n.set(n,r));const o=Object.keys(e).reduce(((t,i)=>{let o;const s=r.get(i);s?o=s:(o=n(i),r.set(i,o));for(let n=o.length-1;n>=0;n--){const r=o[n];if(r.filename){t[r.filename]=e[i];break}}return t}),{});try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.filename&&(t.debug_id=o[t.filename])}))}))}catch(t){}}(u,t.stackParser);const f=function(t,n){if(!n)return t;const e=t?t.clone():new Hn;return e.update(n),e}(r,e.captureContext);e.mechanism&&ut(u,e.mechanism);const h=i&&i.getEventProcessors?i.getEventProcessors():[],l=function(){Fn||(Fn=new Hn);return Fn}().getScopeData();if(o){Un(l,o.getScopeData())}if(f){Un(l,f.getScopeData())}const d=[...e.attachments||[],...l.attachments];d.length&&(e.attachments=d),Pn(u,l);return mn([...h,...dn(),...l.eventProcessors],u,e).then((t=>(t&&function(t){const n={};try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.debug_id&&(t.abs_path?n[t.abs_path]=t.debug_id:t.filename&&(n[t.filename]=t.debug_id),delete t.debug_id)}))}))}catch(t){}if(0===Object.keys(n).length)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const e=t.debug_meta.images;Object.keys(n).forEach((t=>{e.push({type:"sourcemap",code_file:t,debug_id:n[t]})}))}(t),"number"==typeof s&&s>0?function(t,n,e){if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map((t=>({...t,...t.data&&{data:Ct(t.data,n,e)}})))},...t.user&&{user:Ct(t.user,n,e)},...t.contexts&&{contexts:Ct(t.contexts,n,e)},...t.extra&&{extra:Ct(t.extra,n,e)}};t.contexts&&t.contexts.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=Ct(t.contexts.trace.data,n,e)));t.spans&&(r.spans=t.spans.map((t=>{const r=En(t).data;return r&&(t.data=Ct(r,n,e)),t})));return r}(t,s,c):t)))}const $n=new WeakMap;function Sn(t){if(t)return function(t){return t instanceof Hn||"function"==typeof t}(t)||function(t){return Object.keys(t).some((t=>xn.includes(t)))}(t)?{captureContext:t}:t}const xn=["user","level","extra","contexts","tags","fingerprint","requestSession","propagationContext"];function captureException(t,n){return Vn().captureException(t,Sn(n))}function kn(t,n){return Vn().captureEvent(t,n)}function Tn(t,n){Vn().addBreadcrumb(t,n)}function jn(...t){const n=Vn();if(2===t.length){const[e,r]=t;return e?n.withScope((()=>(n.getStackTop().scope=e,r(e)))):n.withScope(r)}return n.withScope(t[0])}function On(){return Vn().getClient()}function In(){return Vn().getScope()}function Dn(t){const n=On(),e=Yn(),r=In(),{release:i,environment:o=ln}=n&&n.getOptions()||{},{userAgent:s}=$.navigator||{},c=yn({release:i,environment:o,user:r.getUser()||e.getUser(),...s&&{userAgent:s},...t}),u=e.getSession();return u&&"ok"===u.status&&gn(u,{status:"exited"}),Mn(),e.setSession(c),r.setSession(c),c}function Mn(){const t=Yn(),n=In(),e=n.getSession()||t.getSession();e&&vn(e),Rn(),t.setSession(),n.setSession()}function Rn(){const t=Yn(),n=In(),e=On(),r=n.getSession()||t.getSession();r&&e&&e.captureSession&&e.captureSession(r)}function Cn(t=!1){t?Mn():Rn()}function An(t){return t.transaction}function Nn(t,n,e){const r=n.getOptions(),{publicKey:i}=n.getDsn()||{},{segment:o}=e&&e.getUser()||{},s=z({environment:r.environment||ln,release:r.release,user_segment:o,public_key:i,trace_id:t});return n.emit&&n.emit("createDsc",s),s}function Ln(t){const n=On();if(!n)return{};const e=Nn(En(t).trace_id||"",n,In()),r=An(t);if(!r)return e;const i=r&&r._frozenDynamicSamplingContext;if(i)return i;const{sampleRate:o,source:s}=r.metadata;null!=o&&(e.sample_rate=`${o}`);const c=En(r);return s&&"url"!==s&&(e.transaction=c.description),e.sampled=String(function(t){const{traceFlags:n}=t.spanContext();return Boolean(1&n)}(r)),n.emit&&n.emit("createDsc",e),e}function Pn(t,n){const{fingerprint:e,span:r,breadcrumbs:i,sdkProcessingMetadata:o}=n;!function(t,n){const{extra:e,tags:r,user:i,contexts:o,level:s,transactionName:c}=n,u=z(e);u&&Object.keys(u).length&&(t.extra={...u,...t.extra});const a=z(r);a&&Object.keys(a).length&&(t.tags={...a,...t.tags});const f=z(i);f&&Object.keys(f).length&&(t.user={...f,...t.user});const h=z(o);h&&Object.keys(h).length&&(t.contexts={...h,...t.contexts});s&&(t.level=s);c&&(t.transaction=c)}(t,n),r&&function(t,n){t.contexts={trace:_n(n),...t.contexts};const e=An(n);if(e){t.sdkProcessingMetadata={dynamicSamplingContext:Ln(n),...t.sdkProcessingMetadata};const r=En(e).description;r&&(t.tags={transaction:r,...t.tags})}}(t,r),function(t,n){t.fingerprint=t.fingerprint?ft(t.fingerprint):[],n&&(t.fingerprint=t.fingerprint.concat(n));t.fingerprint&&!t.fingerprint.length&&delete t.fingerprint}(t,e),function(t,n){const e=[...t.breadcrumbs||[],...n];t.breadcrumbs=e.length?e:void 0}(t,i),function(t,n){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...n}}(t,o)}function Un(t,n){const{extra:e,tags:r,user:i,contexts:o,level:s,sdkProcessingMetadata:c,breadcrumbs:u,fingerprint:a,eventProcessors:f,attachments:h,propagationContext:l,transactionName:d,span:p}=n;Bn(t,"extra",e),Bn(t,"tags",r),Bn(t,"user",i),Bn(t,"contexts",o),Bn(t,"sdkProcessingMetadata",c),s&&(t.level=s),d&&(t.transactionName=d),p&&(t.span=p),u.length&&(t.breadcrumbs=[...t.breadcrumbs,...u]),a.length&&(t.fingerprint=[...t.fingerprint,...a]),f.length&&(t.eventProcessors=[...t.eventProcessors,...f]),h.length&&(t.attachments=[...t.attachments,...h]),t.propagationContext={...t.propagationContext,...l}}function Bn(t,n,e){if(e&&Object.keys(e).length){t[n]={...t[n]};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[n][r]=e[r])}}let Fn;class Hn{constructor(){this._=!1,this.S=[],this.k=[],this.T=[],this.j=[],this.O={},this.I={},this.D={},this.M={},this.R={},this.C=qn()}static clone(t){return t?t.clone():new Hn}clone(){const t=new Hn;return t.T=[...this.T],t.I={...this.I},t.D={...this.D},t.M={...this.M},t.O=this.O,t.A=this.A,t.N=this.N,t.L=this.L,t.P=this.P,t.U=this.U,t.k=[...this.k],t.B=this.B,t.j=[...this.j],t.R={...this.R},t.C={...this.C},t.F=this.F,t}setClient(t){this.F=t}getClient(){return this.F}addScopeListener(t){this.S.push(t)}addEventProcessor(t){return this.k.push(t),this}setUser(t){return this.O=t||{email:void 0,id:void 0,ip_address:void 0,segment:void 0,username:void 0},this.L&&gn(this.L,{user:t}),this.H(),this}getUser(){return this.O}getRequestSession(){return this.B}setRequestSession(t){return this.B=t,this}setTags(t){return this.I={...this.I,...t},this.H(),this}setTag(t,n){return this.I={...this.I,[t]:n},this.H(),this}setExtras(t){return this.D={...this.D,...t},this.H(),this}setExtra(t,n){return this.D={...this.D,[t]:n},this.H(),this}setFingerprint(t){return this.U=t,this.H(),this}setLevel(t){return this.A=t,this.H(),this}setTransactionName(t){return this.P=t,this.H(),this}setContext(t,n){return null===n?delete this.M[t]:this.M[t]=n,this.H(),this}setSpan(t){return this.N=t,this.H(),this}getSpan(){return this.N}getTransaction(){const t=this.N;return t&&t.transaction}setSession(t){return t?this.L=t:delete this.L,this.H(),this}getSession(){return this.L}update(t){if(!t)return this;const n="function"==typeof t?t(this):t;if(n instanceof Hn){const t=n.getScopeData();this.I={...this.I,...t.tags},this.D={...this.D,...t.extra},this.M={...this.M,...t.contexts},t.user&&Object.keys(t.user).length&&(this.O=t.user),t.level&&(this.A=t.level),t.fingerprint.length&&(this.U=t.fingerprint),n.getRequestSession()&&(this.B=n.getRequestSession()),t.propagationContext&&(this.C=t.propagationContext)}else if(a(n)){const n=t;this.I={...this.I,...n.tags},this.D={...this.D,...n.extra},this.M={...this.M,...n.contexts},n.user&&(this.O=n.user),n.level&&(this.A=n.level),n.fingerprint&&(this.U=n.fingerprint),n.requestSession&&(this.B=n.requestSession),n.propagationContext&&(this.C=n.propagationContext)}return this}clear(){return this.T=[],this.I={},this.D={},this.O={},this.M={},this.A=void 0,this.P=void 0,this.U=void 0,this.B=void 0,this.N=void 0,this.L=void 0,this.H(),this.j=[],this.C=qn(),this}addBreadcrumb(t,n){const e="number"==typeof n?n:100;if(e<=0)return this;const r={timestamp:zt(),...t},i=this.T;return i.push(r),this.T=i.length>e?i.slice(-e):i,this.H(),this}getLastBreadcrumb(){return this.T[this.T.length-1]}clearBreadcrumbs(){return this.T=[],this.H(),this}addAttachment(t){return this.j.push(t),this}getAttachments(){return this.getScopeData().attachments}clearAttachments(){return this.j=[],this}getScopeData(){const{T:t,j:n,M:e,I:r,D:i,O:o,A:s,U:c,k:u,C:a,R:f,P:h,N:l}=this;return{breadcrumbs:t,attachments:n,contexts:e,tags:r,extra:i,user:o,level:s,fingerprint:c||[],eventProcessors:u,propagationContext:a,sdkProcessingMetadata:f,transactionName:h,span:l}}applyToEvent(t,n={},e=[]){Pn(t,this.getScopeData());return mn([...e,...dn(),...this.k],t,n)}setSDKProcessingMetadata(t){return this.R={...this.R,...t},this}setPropagationContext(t){return this.C=t,this}getPropagationContext(){return this.C}captureException(t,n){const e=n&&n.event_id?n.event_id:it();if(!this.F)return M.warn("No client configured on scope - will not capture exception!"),e;const r=new Error("Sentry syntheticException");return this.F.captureException(t,{originalException:t,syntheticException:r,...n,event_id:e},this),e}captureMessage(t,n,e){const r=e&&e.event_id?e.event_id:it();if(!this.F)return M.warn("No client configured on scope - will not capture message!"),r;const i=new Error(t);return this.F.captureMessage(t,n,{originalException:t,syntheticException:i,...e,event_id:r},this),r}captureEvent(t,n){const e=n&&n.event_id?n.event_id:it();return this.F?(this.F.captureEvent(t,{...n,event_id:e},this),e):(M.warn("No client configured on scope - will not capture event!"),e)}H(){this._||(this._=!0,this.S.forEach((t=>{t(this)})),this._=!1)}}function qn(){return{traceId:it(),spanId:it().substring(16)}}const Wn="7.102.0",zn=parseFloat(Wn),Xn=100;class Gn{constructor(t,n,e,r=zn){let i,o;this.q=r,n?i=n:(i=new Hn,i.setClient(t)),e?o=e:(o=new Hn,o.setClient(t)),this.W=[{scope:i}],t&&this.bindClient(t),this.X=o}isOlderThan(t){return this.q(this.popScope(),t)),(t=>{throw this.popScope(),t})):(this.popScope(),e)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this.X}getStack(){return this.W}getStackTop(){return this.W[this.W.length-1]}captureException(t,n){const e=this.G=n&&n.event_id?n.event_id:it(),r=new Error("Sentry syntheticException");return this.getScope().captureException(t,{originalException:t,syntheticException:r,...n,event_id:e}),e}captureMessage(t,n,e){const r=this.G=e&&e.event_id?e.event_id:it(),i=new Error(t);return this.getScope().captureMessage(t,n,{originalException:t,syntheticException:i,...e,event_id:r}),r}captureEvent(t,n){const e=n&&n.event_id?n.event_id:it();return t.type||(this.G=e),this.getScope().captureEvent(t,{...n,event_id:e}),e}lastEventId(){return this.G}addBreadcrumb(t,n){const{scope:e,client:r}=this.getStackTop();if(!r)return;const{beforeBreadcrumb:i=null,maxBreadcrumbs:o=Xn}=r.getOptions&&r.getOptions()||{};if(o<=0)return;const s={timestamp:zt(),...t},c=i?D((()=>i(s,n))):s;null!==c&&(r.emit&&r.emit("beforeAddBreadcrumb",c,n),e.addBreadcrumb(c,o))}setUser(t){this.getScope().setUser(t),this.getIsolationScope().setUser(t)}setTags(t){this.getScope().setTags(t),this.getIsolationScope().setTags(t)}setExtras(t){this.getScope().setExtras(t),this.getIsolationScope().setExtras(t)}setTag(t,n){this.getScope().setTag(t,n),this.getIsolationScope().setTag(t,n)}setExtra(t,n){this.getScope().setExtra(t,n),this.getIsolationScope().setExtra(t,n)}setContext(t,n){this.getScope().setContext(t,n),this.getIsolationScope().setContext(t,n)}configureScope(t){const{scope:n,client:e}=this.getStackTop();e&&t(n)}run(t){const n=Kn(this);try{t(this)}finally{Kn(n)}}getIntegration(t){const n=this.getClient();if(!n)return null;try{return n.getIntegration(t)}catch(t){return null}}startTransaction(t,n){const e=this.J("startTransaction",t,n);return e}traceHeaders(){return this.J("traceHeaders")}captureSession(t=!1){if(t)return this.endSession();this.K()}endSession(){const t=this.getStackTop().scope,n=t.getSession();n&&vn(n),this.K(),t.setSession()}startSession(t){const{scope:n,client:e}=this.getStackTop(),{release:r,environment:i=ln}=e&&e.getOptions()||{},{userAgent:o}=$.navigator||{},s=yn({release:r,environment:i,user:n.getUser(),...o&&{userAgent:o},...t}),c=n.getSession&&n.getSession();return c&&"ok"===c.status&&gn(c,{status:"exited"}),this.endSession(),n.setSession(s),s}shouldSendDefaultPii(){const t=this.getClient(),n=t&&t.getOptions();return Boolean(n&&n.sendDefaultPii)}K(){const{scope:t,client:n}=this.getStackTop(),e=t.getSession();e&&n&&n.captureSession&&n.captureSession(e)}J(t,...n){const e=Jn().__SENTRY__;if(e&&e.extensions&&"function"==typeof e.extensions[t])return e.extensions[t].apply(this,n)}}function Jn(){return $.__SENTRY__=$.__SENTRY__||{extensions:{},hub:void 0},$}function Kn(t){const n=Jn(),e=Qn(n);return te(n,t),e}function Vn(){const t=Jn();if(t.__SENTRY__&&t.__SENTRY__.acs){const n=t.__SENTRY__.acs.getCurrentHub();if(n)return n}return function(t=Jn()){n=t,n&&n.__SENTRY__&&n.__SENTRY__.hub&&!Qn(t).isOlderThan(zn)||te(t,new Gn);var n;return Qn(t)}(t)}function Yn(){return Vn().getIsolationScope()}function Zn(t,n={}){const e=Jn();return e.__SENTRY__&&e.__SENTRY__.acs?e.__SENTRY__.acs.runWithAsyncContext(t,n):t()}function Qn(t){return x("hub",(()=>new Gn),t)}function te(t,n){if(!t)return!1;return(t.__SENTRY__=t.__SENTRY__||{}).hub=n,!0}function ne(t,n,e=(()=>{})){let r;try{r=t()}catch(t){throw n(t),e(),t}return function(t,n,e){if(h(t))return t.then((t=>(e(),t)),(t=>{throw n(t),e(),t}));return e(),t}(r,n,e)}function ee(t){if("boolean"==typeof __SENTRY_TRACING__&&!__SENTRY_TRACING__)return!1;const n=On(),e=t||n&&n.getOptions();return!!e&&(e.enableTracing||"tracesSampleRate"in e||"tracesSampler"in e)}function re(){return In().getSpan()}function ie(t,n,e){if(!ee())return;const r=Yn(),i=In();let o;if(n)o=n.startChild(e);else{const{traceId:n,dsc:s,parentSpanId:c,sampled:u}={...r.getPropagationContext(),...i.getPropagationContext()};o=t.startTransaction({traceId:n,parentSpanId:c,parentSampled:u,...e,metadata:{dynamicSamplingContext:s,...e.metadata}})}return se(o,i,r),o}function oe(t){if(t.startTime){const e={...t};return e.startTimestamp="number"==typeof(n=t.startTime)?bn(n):Array.isArray(n)?n[0]+n[1]/1e9:n instanceof Date?bn(n.getTime()):Xt(),delete e.startTime,e}var n;return t}function se(t,n,e){t&&(U(t,"_sentryIsolationScope",e),U(t,"_sentryScope",n))}let ce;function ue(t,n,e,r,i,o){const s=re();if(s){const c=function(t){return ce?ce.get(t):void 0}(s)||new Map,u=`${t}:${n}@${r}`,a=c.get(o);if(a){const[,t]=a;c.set(o,[u,{min:Math.min(t.min,e),max:Math.max(t.max,e),count:t.count+=1,sum:t.sum+=e,tags:t.tags}])}else c.set(o,[u,{min:e,max:e,count:1,sum:e,tags:i}]);ce||(ce=new WeakMap),ce.set(s,c)}}function ae(t,n,e,r){const i=sn(e),o=t.type&&"replay_event"!==t.type?t.type:"event";!function(t,n){n&&(t.sdk=t.sdk||{},t.sdk.name=t.sdk.name||n.name,t.sdk.version=t.sdk.version||n.version,t.sdk.integrations=[...t.sdk.integrations||[],...n.integrations||[]],t.sdk.packages=[...t.sdk.packages||[],...n.packages||[]])}(t,e&&e.sdk);const s=function(t,n,e,r){const i=t.sdkProcessingMetadata&&t.sdkProcessingMetadata.dynamicSamplingContext;return{event_id:t.event_id,sent_at:(new Date).toISOString(),...n&&{sdk:n},...!!e&&r&&{dsn:C(r)},...i&&{trace:z({...i})}}}(t,i,r,n);delete t.sdkProcessingMetadata;return Yt(s,[[{type:o},t]])}function fe(t){const n=t.protocol?`${t.protocol}:`:"",e=t.port?`:${t.port}`:"";return`${n}//${t.host}${e}${t.path?`/${t.path}`:""}/api/`}function he(t,n){return e={sentry_key:t.publicKey,sentry_version:"7",...n&&{sentry_client:`${n.name}/${n.version}`}},Object.keys(e).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`)).join("&");var e}function le(t,n={}){const e="string"==typeof n?n:n.tunnel,r="string"!=typeof n&&n.V?n.V.sdk:void 0;return e||`${function(t){return`${fe(t)}${t.projectId}/envelope/`}(t)}?${he(t,r)}`}const de=[];function pe(t){const n=t.defaultIntegrations||[],e=t.integrations;let r;n.forEach((t=>{t.isDefaultInstance=!0})),r=Array.isArray(e)?[...n,...e]:"function"==typeof e?ft(e(n)):n;const i=function(t){const n={};return t.forEach((t=>{const{name:e}=t,r=n[e];r&&!r.isDefaultInstance&&t.isDefaultInstance||(n[e]=t)})),Object.keys(n).map((t=>n[t]))}(r),o=function(t,n){for(let e=0;e"Debug"===t.name));if(-1!==o){const[t]=i.splice(o,1);i.push(t)}return i}function me(t,n){for(const e of n)e&&e.afterAllSetup&&e.afterAllSetup(t)}function ye(t,n,e){if(!e[n.name]){if(e[n.name]=n,-1===de.indexOf(n.name)&&(n.setupOnce(pn,Vn),de.push(n.name)),n.setup&&"function"==typeof n.setup&&n.setup(t),t.on&&"function"==typeof n.preprocessEvent){const e=n.preprocessEvent.bind(n);t.on("preprocessEvent",((n,r)=>e(n,r,t)))}if(t.addEventProcessor&&"function"==typeof n.processEvent){const e=n.processEvent.bind(n),r=Object.assign(((n,r)=>e(n,r,t)),{id:n.name});t.addEventProcessor(r)}}}function ge(t,n){return Object.assign((function(...t){return n(...t)}),{id:t})}const ve=/[^a-zA-Z0-9_/.-]+/g,_e=/[^\w\d\s_:/@.{}[\]$-]+/g;function be(t,n,e,r){const i={sent_at:(new Date).toISOString()};e&&e.sdk&&(i.sdk={name:e.sdk.name,version:e.sdk.version}),r&&n&&(i.dsn=C(n));const o=function(t){const n=function(t){let n="";for(const e of t){const t=Object.entries(e.tags),r=t.length>0?`|#${t.map((([t,n])=>`${t}:${n}`)).join(",")}`:"";n+=`${e.name}@${e.unit}:${e.metric}|${e.metricType}${r}|T${e.timestamp}\n`}return n}(t);return[{type:"statsd",length:n.length},n]}(t);return Yt(i,[o])}function Ee(t){return void 0===t.type}function we(t){return"transaction"===t.type}const $e={c:class{constructor(t){this.v=t}get weight(){return 1}add(t){this.v+=t}toString(){return`${this.v}`}},g:class{constructor(t){this.Y=t,this.Z=t,this.tt=t,this.nt=t,this.et=1}get weight(){return 5}add(t){this.Y=t,tthis.tt&&(this.tt=t),this.nt+=t,this.et++}toString(){return`${this.Y}:${this.Z}:${this.tt}:${this.nt}:${this.et}`}},d:class{constructor(t){this.v=[t]}get weight(){return this.v.length}add(t){this.v.push(t)}toString(){return this.v.join(":")}},s:class{constructor(t){this.first=t,this.v=new Set([t])}get weight(){return this.v.size}add(t){this.v.add(t)}toString(){return Array.from(this.v).map((t=>"string"==typeof t?function(t){let n=0;for(let e=0;e>>0}(t):t)).join(":")}}};function Se(t){const n=Vn().getStackTop();n.client=t,n.scope.setClient(t)}function xe(t,n,e=Ft(t.bufferSize||30)){let r={};function i(i){const o=[];if(Qt(i,((n,e)=>{const i=on(e);if(function(t,n,e=Date.now()){return function(t,n){return t[n]||t.all||0}(t,n)>e}(r,i)){const r=ke(n,e);t.recordDroppedEvent("ratelimit_backoff",i,r)}else o.push(n)})),0===o.length)return Pt();const s=Yt(i[0],o),c=n=>{Qt(s,((e,r)=>{const i=ke(e,r);t.recordDroppedEvent(n,on(r),i)}))};return e.add((()=>n({body:nn(s,t.textEncoder)}).then((t=>(r=cn(r,t),t)),(t=>{throw c("network_error"),t})))).then((t=>t),(t=>{if(t instanceof L)return c("queue_overflow"),Pt();throw t}))}return i.__sentry__baseTransport__=!0,{send:i,flush:t=>e.drain(t)}}function ke(t,n){if("event"===n||"transaction"===n)return Array.isArray(t)?t[1]:void 0}const Te=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/],je=[/^.*\/healthcheck$/,/^.*\/healthy$/,/^.*\/live$/,/^.*\/ready$/,/^.*\/heartbeat$/,/^.*\/health$/,/^.*\/healthz$/],Oe="InboundFilters",Ie=(t={})=>({name:Oe,setupOnce(){},processEvent(n,e,r){const i=r.getOptions(),o=function(t={},n={}){return{allowUrls:[...t.allowUrls||[],...n.allowUrls||[]],denyUrls:[...t.denyUrls||[],...n.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...n.ignoreErrors||[],...t.disableErrorDefaults?[]:Te],ignoreTransactions:[...t.ignoreTransactions||[],...n.ignoreTransactions||[],...t.disableTransactionDefaults?[]:je],ignoreInternal:void 0===t.ignoreInternal||t.ignoreInternal}}(t,i);return function(t,n){if(n.ignoreInternal&&function(t){try{return"SentryError"===t.exception.values[0].type}catch(t){}return!1}(t))return!0;if(function(t,n){if(t.type||!n||!n.length)return!1;return function(t){const n=[];t.message&&n.push(t.message);let e;try{e=t.exception.values[t.exception.values.length-1]}catch(t){}e&&e.value&&(n.push(e.value),e.type&&n.push(`${e.type}: ${e.value}`));return n}(t).some((t=>g(t,n)))}(t,n.ignoreErrors))return!0;if(function(t,n){if("transaction"!==t.type||!n||!n.length)return!1;const e=t.transaction;return!!e&&g(e,n)}(t,n.ignoreTransactions))return!0;if(function(t,n){if(!n||!n.length)return!1;const e=Me(t);return!!e&&g(e,n)}(t,n.denyUrls))return!0;if(!function(t,n){if(!n||!n.length)return!0;const e=Me(t);return!e||g(e,n)}(t,n.allowUrls))return!0;return!1}(n,o)?null:n}}),De=ge(Oe,Ie);function Me(t){try{let n;try{n=t.exception.values[0].stacktrace.frames}catch(t){}return n?function(t=[]){for(let n=t.length-1;n>=0;n--){const e=t[n];if(e&&""!==e.filename&&"[native code]"!==e.filename)return e.filename||null}return null}(n):null}catch(t){return null}}let Re;const Ce="FunctionToString",Ae=new WeakMap,Ne=()=>({name:Ce,setupOnce(){Re=Function.prototype.toString;try{Function.prototype.toString=function(...t){const n=F(this),e=Ae.has(On())&&void 0!==n?n:this;return Re.apply(e,t)}}catch(t){}},setup(t){Ae.set(t,!0)}}),Le=ge(Ce,Ne),Pe="LinkedErrors",Ue=ge(Pe,((t={})=>{const n=t.limit||5,e=t.key||"cause";return{name:Pe,setupOnce(){},preprocessEvent(t,r,i){const o=i.getOptions();v(un,o.stackParser,o.maxValueLength,e,n,t,r)}}}));var Be=Object.freeze({__proto__:null,FunctionToString:Le,InboundFilters:De,LinkedErrors:Ue});class Fe{constructor(t){this.F=t,this.rt=new Map,this.it=setInterval((()=>this.flush()),5e3)}add(t,n,e,r="none",i={},o=Xt()){const s=Math.floor(o),c=n.replace(ve,"_"),u=function(t){const n={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e.replace(ve,"_")]=String(t[e]).replace(_e,""));return n}(i),a=function(t,n,e,r){return`${t}${n}${e}${Object.entries(z(r)).sort(((t,n)=>t[0].localeCompare(n[0])))}`}(t,c,r,u);let f=this.rt.get(a);const h=f&&"s"===t?f.metric.weight:0;f?(f.metric.add(e),f.timestampt));this.F.captureAggregateMetrics(t)}this.rt.clear()}}close(){clearInterval(this.it),this.flush()}}const He="MetricsAggregator",qe=()=>({name:He,setupOnce(){},setup(t){t.metricsAggregator=new Fe(t)}});function We(t,n,e,r={}){const i=On(),o=In();if(i){if(!i.metricsAggregator)return;const{unit:s,tags:c,timestamp:u}=r,{release:a,environment:f}=i.getOptions(),h=o.getTransaction(),l={};a&&(l.release=a),f&&(l.environment=f),h&&(l.transaction=En(h).description||""),i.metricsAggregator.add(t,n,e,s,{...l,...c},u)}}const ze={increment:function(t,n=1,e){We("c",t,n,e)},distribution:function(t,n,e){We("d",t,n,e)},set:function(t,n,e){We("s",t,n,e)},gauge:function(t,n,e){We("g",t,n,e)},MetricsAggregator:ge(He,qe),metricsAggregatorIntegration:qe},Xe=Be,Ge=$;let Je=0;function Ke(){return Je>0}function Ve(){Je++,setTimeout((()=>{Je--}))}function Ye(t,n={},e){if("function"!=typeof t)return t;try{const n=t.__sentry_wrapped__;if(n)return n;if(F(t))return t}catch(n){return t}const sentryWrapped=function(){const r=Array.prototype.slice.call(arguments);try{e&&"function"==typeof e&&e.apply(this,arguments);const i=r.map((t=>Ye(t,n)));return t.apply(this,i)}catch(t){throw Ve(),jn((e=>{e.addEventProcessor((t=>(n.mechanism&&(ct(t,void 0,void 0),ut(t,n.mechanism)),t.extra={...t.extra,arguments:r},t))),captureException(t)})),t}};try{for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&(sentryWrapped[n]=t[n])}catch(t){}B(sentryWrapped,t),U(t,"__sentry_wrapped__",sentryWrapped);try{Object.getOwnPropertyDescriptor(sentryWrapped,"name").configurable&&Object.defineProperty(sentryWrapped,"name",{get:()=>t.name})}catch(t){}return sentryWrapped}function Ze(t,n){const e=tr(t,n),r={type:n&&n.name,value:er(n)};return e.length&&(r.stacktrace={frames:e}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function Qe(t,n){return{exception:{values:[Ze(t,n)]}}}function tr(t,n){const e=n.stacktrace||n.stack||"",r=function(t){if(t){if("number"==typeof t.framesToPop)return t.framesToPop;if(nr.test(t.message))return 1}return 0}(n);try{return t(e,r)}catch(t){}return[]}const nr=/Minified React error #\d+;/i;function er(t){const n=t&&t.message;return n?n.error&&"string"==typeof n.error.message?n.error.message:n:"No error message"}function rr(t,n,e,r){const i=or(t,n,e&&e.syntheticException||void 0,r);return ut(i),i.level="error",e&&e.event_id&&(i.event_id=e.event_id),Pt(i)}function ir(t,n,e="info",r,i){const o=sr(t,n,r&&r.syntheticException||void 0,i);return o.level=e,r&&r.event_id&&(o.event_id=r.event_id),Pt(o)}function or(t,n,s,c,u){let h;if(i(n)&&n.error){return Qe(t,n.error)}if(o(n)||r(n,"DOMException")){const e=n;if("stack"in n)h=Qe(t,n);else{const n=e.name||(o(e)?"DOMError":"DOMException"),r=e.message?`${n}: ${e.message}`:n;h=sr(t,r,s,c),ct(h,r)}return"code"in e&&(h.tags={...h.tags,"DOMException.code":`${e.code}`}),h}if(e(n))return Qe(t,n);if(a(n)||f(n)){return h=function(t,n,e,r){const i=On(),o=i&&i.getOptions().normalizeDepth,s={exception:{values:[{type:f(n)?n.constructor.name:r?"UnhandledRejection":"Error",value:cr(n,{isUnhandledRejection:r})}]},extra:{__serialized__:At(n,o)}};if(e){const n=tr(t,e);n.length&&(s.exception.values[0].stacktrace={frames:n})}return s}(t,n,s,u),ut(h,{synthetic:!0}),h}return h=sr(t,n,s,c),ct(h,`${n}`,void 0),ut(h,{synthetic:!0}),h}function sr(t,n,e,r){const i={};if(r&&e){const r=tr(t,e);r.length&&(i.exception={values:[{value:n,stacktrace:{frames:r}}]})}if(c(n)){const{__sentry_template_string__:t,__sentry_template_values__:e}=n;return i.logentry={message:t,params:e},i}return i.message=n,i}function cr(t,{isUnhandledRejection:n}){const e=function(t,n=40){const e=Object.keys(H(t));if(e.sort(),!e.length)return"[object has no keys]";if(e[0].length>=n)return p(e[0],n);for(let t=e.length;t>0;t--){const r=e.slice(0,t).join(", ");if(!(r.length>n))return t===e.length?r:p(r,n)}return""}(t),r=n?"promise rejection":"exception";if(i(t))return`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``;if(f(t)){return`Event \`${function(t){try{const n=Object.getPrototypeOf(t);return n?n.constructor.name:void 0}catch(t){}}(t)}\` (type=${t.type}) captured as ${r}`}return`Object captured as ${r} with keys: ${e}`}function ur(t,{metadata:n,tunnel:e,dsn:r}){const i={event_id:t.event_id,sent_at:(new Date).toISOString(),...n&&n.sdk&&{sdk:{name:n.sdk.name,version:n.sdk.version}},...!!e&&!!r&&{dsn:C(r)}},o=function(t){return[{type:"user_report"},t]}(t);return Yt(i,[o])}class ar extends class{constructor(t){if(this.ot=t,this._integrations={},this.st=!1,this.ct=0,this.ut={},this.ft={},this.k=[],t.dsn&&(this.ht=N(t.dsn)),this.ht){const n=le(this.ht,t);this.lt=t.transport({recordDroppedEvent:this.recordDroppedEvent.bind(this),...t.transportOptions,url:n})}}captureException(t,n,e){if(at(t))return;let r=n&&n.event_id;return this.dt(this.eventFromException(t,n).then((t=>this.yt(t,n,e))).then((t=>{r=t}))),r}captureMessage(t,n,e,r){let i=e&&e.event_id;const o=c(t)?t:String(t),s=u(t)?this.eventFromMessage(o,n,e):this.eventFromException(t,e);return this.dt(s.then((t=>this.yt(t,e,r))).then((t=>{i=t}))),i}captureEvent(t,n,e){if(n&&n.originalException&&at(n.originalException))return;let r=n&&n.event_id;const i=(t.sdkProcessingMetadata||{}).capturedSpanScope;return this.dt(this.yt(t,n,i||e).then((t=>{r=t}))),r}captureSession(t){"string"!=typeof t.release||(this.sendSession(t),gn(t,{init:!1}))}getDsn(){return this.ht}getOptions(){return this.ot}getSdkMetadata(){return this.ot.V}getTransport(){return this.lt}flush(t){const n=this.lt;return n?(this.metricsAggregator&&this.metricsAggregator.flush(),this.gt(t).then((e=>n.flush(t).then((t=>e&&t))))):Pt(!0)}close(t){return this.flush(t).then((t=>(this.getOptions().enabled=!1,this.metricsAggregator&&this.metricsAggregator.close(),t)))}getEventProcessors(){return this.k}addEventProcessor(t){this.k.push(t)}setupIntegrations(t){(t&&!this.st||this.vt()&&!this.st)&&this._t()}init(){this.vt()&&this._t()}getIntegrationById(t){return this.getIntegrationByName(t)}getIntegrationByName(t){return this._integrations[t]}getIntegration(t){try{return this._integrations[t.id]||null}catch(t){return null}}addIntegration(t){const n=this._integrations[t.name];ye(this,t,this._integrations),n||me(this,[t])}sendEvent(t,n={}){this.emit("beforeSendEvent",t,n);let e=ae(t,this.ht,this.ot.V,this.ot.tunnel);for(const t of n.attachments||[])e=Zt(e,en(t,this.ot.transportOptions&&this.ot.transportOptions.textEncoder));const r=this.bt(e);r&&r.then((n=>this.emit("afterSendEvent",t,n)),null)}sendSession(t){const n=function(t,n,e,r){const i=sn(e);return Yt({sent_at:(new Date).toISOString(),...i&&{sdk:i},...!!r&&n&&{dsn:C(n)}},["aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()]])}(t,this.ht,this.ot.V,this.ot.tunnel);this.bt(n)}recordDroppedEvent(t,n,e){if(this.ot.sendClientReports){const e=`${t}:${n}`;this.ut[e]=this.ut[e]+1||1}}captureAggregateMetrics(t){const n=be(t,this.ht,this.ot.V,this.ot.tunnel);this.bt(n)}on(t,n){this.ft[t]||(this.ft[t]=[]),this.ft[t].push(n)}emit(t,...n){this.ft[t]&&this.ft[t].forEach((t=>t(...n)))}_t(){const{integrations:t}=this.ot;this._integrations=function(t,n){const e={};return n.forEach((n=>{n&&ye(t,n,e)})),e}(this,t),me(this,t),this.st=!0}Et(t,n){let e=!1,r=!1;const i=n.exception&&n.exception.values;if(i){r=!0;for(const t of i){const n=t.mechanism;if(n&&!1===n.handled){e=!0;break}}}const o="ok"===t.status;(o&&0===t.errors||o&&e)&&(gn(t,{...e&&{status:"crashed"},errors:t.errors||Number(r||e)}),this.captureSession(t))}gt(t){return new Bt((n=>{let e=0;const r=setInterval((()=>{0==this.ct?(clearInterval(r),n(!0)):(e+=1,t&&e>=t&&(clearInterval(r),n(!1)))}),1)}))}vt(){return!1!==this.getOptions().enabled&&void 0!==this.lt}wt(t,n,e,r=Yn()){const i=this.getOptions(),o=Object.keys(this._integrations);return!n.integrations&&o.length>0&&(n.integrations=o),this.emit("preprocessEvent",t,n),wn(i,t,n,e,this,r).then((t=>{if(null===t)return t;const n={...r.getPropagationContext(),...e?e.getPropagationContext():void 0};if(!(t.contexts&&t.contexts.trace)&&n){const{traceId:r,spanId:i,parentSpanId:o,dsc:s}=n;t.contexts={trace:{trace_id:r,span_id:i,parent_span_id:o},...t.contexts};const c=s||Nn(r,this,e);t.sdkProcessingMetadata={dynamicSamplingContext:c,...t.sdkProcessingMetadata}}return t}))}yt(t,n={},e){return this.$t(t,n,e).then((t=>t.event_id),(t=>{}))}$t(t,n,e){const r=this.getOptions(),{sampleRate:i}=r,o=we(t),s=Ee(t),c=t.type||"error",u=`before send for type \`${c}\``;if(s&&"number"==typeof i&&Math.random()>i)return this.recordDroppedEvent("sample_rate","error",t),Ut(new L(`Discarding event because it's not included in the random sample (sampling rate = ${i})`,"log"));const f="replay_event"===c?"replay":c,l=(t.sdkProcessingMetadata||{}).capturedSpanIsolationScope;return this.wt(t,n,e,l).then((e=>{if(null===e)throw this.recordDroppedEvent("event_processor",f,t),new L("An event processor returned `null`, will not send event.","log");if(n.data&&!0===n.data.__sentry__)return e;const i=function(t,n,e){const{beforeSend:r,beforeSendTransaction:i}=t;if(Ee(n)&&r)return r(n,e);if(we(n)&&i)return i(n,e);return n}(r,e,n);return function(t,n){const e=`${n} must return \`null\` or a valid event.`;if(h(t))return t.then((t=>{if(!a(t)&&null!==t)throw new L(e);return t}),(t=>{throw new L(`${n} rejected with ${t}`)}));if(!a(t)&&null!==t)throw new L(e);return t}(i,u)})).then((r=>{if(null===r)throw this.recordDroppedEvent("before_send",f,t),new L(`${u} returned \`null\`, will not send event.`,"log");const i=e&&e.getSession();!o&&i&&this.Et(i,r);const s=r.transaction_info;if(o&&s&&r.transaction!==t.transaction){const t="custom";r.transaction_info={...s,source:t}}return this.sendEvent(r,n),r})).then(null,(t=>{if(t instanceof L)throw t;throw this.captureException(t,{data:{__sentry__:!0},originalException:t}),new L(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ${t}`)}))}dt(t){this.ct++,t.then((t=>(this.ct--,t)),(t=>(this.ct--,t)))}bt(t){if(this.emit("beforeEnvelope",t),this.vt()&&this.lt)return this.lt.send(t).then(null,(t=>{}))}St(){const t=this.ut;return this.ut={},Object.keys(t).map((n=>{const[e,r]=n.split(":");return{reason:e,category:r,quantity:t[n]}}))}}{constructor(t){!function(t,n,e=[n],r="npm"){const i=t.V||{};i.sdk||(i.sdk={name:`sentry.javascript.${n}`,packages:e.map((t=>({name:`${r}:@sentry/${t}`,version:Wn}))),version:Wn}),t.V=i}(t,"browser",["browser"],Ge.SENTRY_SDK_SOURCE||"npm"),super(t),t.sendClientReports&&Ge.document&&Ge.document.addEventListener("visibilitychange",(()=>{"hidden"===Ge.document.visibilityState&&this.xt()}))}eventFromException(t,n){return rr(this.ot.stackParser,t,n,this.ot.attachStacktrace)}eventFromMessage(t,n="info",e){return ir(this.ot.stackParser,t,n,e,this.ot.attachStacktrace)}captureUserFeedback(t){if(!this.vt())return;const n=ur(t,{metadata:this.getSdkMetadata(),dsn:this.getDsn(),tunnel:this.getOptions().tunnel});this.bt(n)}wt(t,n,e){return t.platform=t.platform||"javascript",super.wt(t,n,e)}xt(){const t=this.St();if(0===t.length)return;if(!this.ht)return;const n=(e=t,Yt((r=this.ot.tunnel&&C(this.ht))?{dsn:r}:{},[[{type:"client_report"},{timestamp:i||zt(),discarded_events:e}]]));var e,r,i;this.bt(n)}}let fr;function hr(t,n=function(){if(fr)return fr;if(_t(Ge.fetch))return fr=Ge.fetch.bind(Ge);const t=Ge.document;let n=Ge.fetch;if(t&&"function"==typeof t.createElement)try{const e=t.createElement("iframe");e.hidden=!0,t.head.appendChild(e);const r=e.contentWindow;r&&r.fetch&&(n=r.fetch),t.head.removeChild(e)}catch(t){}return fr=n.bind(Ge)}()){let e=0,r=0;return xe(t,(function(i){const o=i.body.length;e+=o,r++;const s={body:i.body,method:"POST",referrerPolicy:"origin",headers:t.headers,keepalive:e<=6e4&&r<15,...t.fetchOptions};try{return n(t.url,s).then((t=>(e-=o,r--,{statusCode:t.status,headers:{"x-sentry-rate-limits":t.headers.get("X-Sentry-Rate-Limits"),"retry-after":t.headers.get("Retry-After")}})))}catch(t){return fr=void 0,e-=o,r--,Ut(t)}}))}function lr(t){return xe(t,(function(n){return new Bt(((e,r)=>{const i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=()=>{4===i.readyState&&e({statusCode:i.status,headers:{"x-sentry-rate-limits":i.getResponseHeader("X-Sentry-Rate-Limits"),"retry-after":i.getResponseHeader("Retry-After")}})},i.open("POST",t.url);for(const n in t.headers)Object.prototype.hasOwnProperty.call(t.headers,n)&&i.setRequestHeader(n,t.headers[n]);i.send(n.body)}))}))}const dr="?";function pr(t,n,e,r){const i={filename:t,function:n,in_app:!0};return void 0!==e&&(i.lineno=e),void 0!==r&&(i.colno=r),i}const mr=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,yr=/\((\S*)(?::(\d+))(?::(\d+))\)/,gr=[30,t=>{const n=mr.exec(t);if(n){if(n[2]&&0===n[2].indexOf("eval")){const t=yr.exec(n[2]);t&&(n[2]=t[1],n[3]=t[2],n[4]=t[3])}const[t,e]=Or(n[1]||dr,n[2]);return pr(e,t,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}}],vr=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,_r=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,br=[50,t=>{const n=vr.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){const t=_r.exec(n[3]);t&&(n[1]=n[1]||"eval",n[3]=t[1],n[4]=t[2],n[5]="")}let t=n[3],e=n[1]||dr;return[e,t]=Or(e,t),pr(t,e,n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}}],Er=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,wr=[40,t=>{const n=Er.exec(t);return n?pr(n[2],n[1]||dr,+n[3],n[4]?+n[4]:void 0):void 0}],$r=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Sr=[10,t=>{const n=$r.exec(t);return n?pr(n[2],n[3]||dr,+n[1]):void 0}],xr=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,kr=[20,t=>{const n=xr.exec(t);return n?pr(n[5],n[3]||n[4]||dr,+n[1],+n[2]):void 0}],Tr=[gr,br,wr],jr=K(...Tr),Or=(t,n)=>{const e=-1!==t.indexOf("safari-extension"),r=-1!==t.indexOf("safari-web-extension");return e||r?[-1!==t.indexOf("@")?t.split("@")[0]:dr,e?`safari-extension:${n}`:`safari-web-extension:${n}`]:[t,n]},Ir=1024,Dr="Breadcrumbs",Mr=(t={})=>{const n={console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:Dr,setupOnce(){},setup(t){var e;n.console&&function(t){const n="console";tt(n,t),nt(n,rt)}(function(t){return function(n){if(On()!==t)return;const e={category:"console",data:{arguments:n.args,logger:"console"},level:Wt(n.level),message:m(n.args," ")};if("assert"===n.level){if(!1!==n.args[0])return;e.message=`Assertion failed: ${m(n.args.slice(1)," ")||"console.assert"}`,e.data.arguments=n.args.slice(1)}Tn(e,{input:n.args,level:n.level})}}(t)),n.dom&&(e=function(t,n){return function(e){if(On()!==t)return;let r,i,o="object"==typeof n?n.serializeAttribute:void 0,s="object"==typeof n&&"number"==typeof n.maxStringLength?n.maxStringLength:void 0;s&&s>Ir&&(s=Ir),"string"==typeof o&&(o=[o]);try{const t=e.event,n=function(t){return!!t&&!!t.target}(t)?t.target:t;r=T(n,{keyAttrs:o,maxStringLength:s}),i=function(t){if(!k.HTMLElement)return null;let n=t;for(let t=0;t<5;t++){if(!n)return null;if(n instanceof HTMLElement&&n.dataset.sentryComponent)return n.dataset.sentryComponent;n=n.parentNode}return null}(n)}catch(t){r=""}if(0===r.length)return;const c={category:`ui.${e.name}`,message:r};i&&(c.data={"ui.component_name":i}),Tn(c,{event:e.event,name:e.name,global:e.global})}}(t,n.dom),tt("dom",e),nt("dom",mt)),n.xhr&&function(t){tt("xhr",t),nt("xhr",Rt)}(function(t){return function(n){if(On()!==t)return;const{startTimestamp:e,endTimestamp:r}=n,i=n.xhr.__sentry_xhr_v3__;if(!e||!r||!i)return;const{method:o,url:s,status_code:c,body:u}=i;Tn({category:"xhr",data:{method:o,url:s,status_code:c},type:"http"},{xhr:n.xhr,input:u,startTimestamp:e,endTimestamp:r})}}(t)),n.fetch&&function(t){const n="fetch";tt(n,t),nt(n,bt)}(function(t){return function(n){if(On()!==t)return;const{startTimestamp:e,endTimestamp:r}=n;if(r&&(!n.fetchData.url.match(/sentry_key/)||"POST"!==n.fetchData.method))if(n.error){Tn({category:"fetch",data:n.fetchData,level:"error",type:"http"},{data:n.error,input:n.args,startTimestamp:e,endTimestamp:r})}else{const t=n.response;Tn({category:"fetch",data:{...n.fetchData,status_code:t&&t.status},type:"http"},{input:n.args,response:t,startTimestamp:e,endTimestamp:r})}}}(t)),n.history&&It(function(t){return function(n){if(On()!==t)return;let e=n.from,r=n.to;const i=Ht(Ge.location.href);let o=e?Ht(e):void 0;const s=Ht(r);o&&o.path||(o=i),i.protocol===s.protocol&&i.host===s.host&&(r=s.relative),i.protocol===o.protocol&&i.host===o.host&&(e=o.relative),Tn({category:"navigation",data:{from:e,to:r}})}}(t)),n.sentry&&t.on&&t.on("beforeSendEvent",function(t){return function(n){On()===t&&Tn({category:"sentry."+("transaction"===n.type?"transaction":"event"),event_id:n.event_id,level:n.level,message:st(n)},{event:n})}}(t))}}},Rr=ge(Dr,Mr);const Cr="Dedupe",Ar=()=>{let t;return{name:Cr,setupOnce(){},processEvent(n){if(n.type)return n;try{if(function(t,n){if(!n)return!1;if(function(t,n){const e=t.message,r=n.message;if(!e&&!r)return!1;if(e&&!r||!e&&r)return!1;if(e!==r)return!1;if(!Pr(t,n))return!1;if(!Lr(t,n))return!1;return!0}(t,n))return!0;if(function(t,n){const e=Ur(n),r=Ur(t);if(!e||!r)return!1;if(e.type!==r.type||e.value!==r.value)return!1;if(!Pr(t,n))return!1;if(!Lr(t,n))return!1;return!0}(t,n))return!0;return!1}(n,t))return null}catch(t){}return t=n}}},Nr=ge(Cr,Ar);function Lr(t,n){let e=Br(t),r=Br(n);if(!e&&!r)return!0;if(e&&!r||!e&&r)return!1;if(e=e,r=r,r.length!==e.length)return!1;for(let t=0;t{const n={onerror:!0,onunhandledrejection:!0,...t};return{name:Fr,setupOnce(){Error.stackTraceLimit=50},setup(t){n.onerror&&function(t){!function(t){const n="error";tt(n,t),nt(n,St)}((n=>{const{stackParser:e,attachStacktrace:r}=zr();if(On()!==t||Ke())return;const{msg:o,url:c,line:u,column:a,error:f}=n,h=void 0===f&&s(o)?function(t,n,e,r){const o=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;let s=i(t)?t.message:t,c="Error";const u=s.match(o);u&&(c=u[1],s=u[2]);return Wr({exception:{values:[{type:c,value:s}]}},n,e,r)}(o,c,u,a):Wr(or(e,f||o,void 0,r,!1),c,u,a);h.level="error",kn(h,{originalException:f,mechanism:{handled:!1,type:"onerror"}})}))}(t),n.onunhandledrejection&&function(t){!function(t){const n="unhandledrejection";tt(n,t),nt(n,kt)}((n=>{const{stackParser:e,attachStacktrace:r}=zr();if(On()!==t||Ke())return;const i=function(t){if(u(t))return t;const n=t;try{if("reason"in n)return n.reason;if("detail"in n&&"reason"in n.detail)return n.detail.reason}catch(t){}return t}(n),o=u(i)?{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(i)}`}]}}:or(e,i,void 0,r,!0);o.level="error",kn(o,{originalException:i,mechanism:{handled:!1,type:"onunhandledrejection"}})}))}(t)}}},qr=ge(Fr,Hr);function Wr(t,n,e,r){const i=t.exception=t.exception||{},o=i.values=i.values||[],c=o[0]=o[0]||{},u=c.stacktrace=c.stacktrace||{},a=u.frames=u.frames||[],f=isNaN(parseInt(r,10))?void 0:r,h=isNaN(parseInt(e,10))?void 0:e,l=s(n)&&n.length>0?n:function(){try{return k.document.location.href}catch(t){return""}}();return 0===a.length&&a.push({colno:f,filename:l,function:"?",in_app:!0,lineno:h}),t}function zr(){const t=On();return t&&t.getOptions()||{stackParser:()=>[],attachStacktrace:!1}}const Xr="HttpContext",Gr=()=>({name:Xr,setupOnce(){},preprocessEvent(t){if(!Ge.navigator&&!Ge.location&&!Ge.document)return;const n=t.request&&t.request.url||Ge.location&&Ge.location.href,{referrer:e}=Ge.document||{},{userAgent:r}=Ge.navigator||{},i={...t.request&&t.request.headers,...e&&{Referer:e},...r&&{"User-Agent":r}},o={...t.request,...n&&{url:n},headers:i};t.request=o}}),Jr=ge(Xr,Gr),Kr="LinkedErrors",Vr=(t={})=>{const n=t.limit||5,e=t.key||"cause";return{name:Kr,setupOnce(){},preprocessEvent(t,r,i){const o=i.getOptions();v(Ze,o.stackParser,o.maxValueLength,e,n,t,r)}}},Yr=ge(Kr,Vr),Zr=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","BroadcastChannel","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","SharedWorker","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],Qr="TryCatch",ti=(t={})=>{const n={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,...t};return{name:Qr,setupOnce(){n.setTimeout&&P(Ge,"setTimeout",ei),n.setInterval&&P(Ge,"setInterval",ei),n.requestAnimationFrame&&P(Ge,"requestAnimationFrame",ri),n.XMLHttpRequest&&"XMLHttpRequest"in Ge&&P(XMLHttpRequest.prototype,"send",ii);const t=n.eventTarget;if(t){(Array.isArray(t)?t:Zr).forEach(oi)}}}},ni=ge(Qr,ti);function ei(t){return function(...n){const e=n[0];return n[0]=Ye(e,{mechanism:{data:{function:Y(t)},handled:!1,type:"instrument"}}),t.apply(this,n)}}function ri(t){return function(n){return t.apply(this,[Ye(n,{mechanism:{data:{function:"requestAnimationFrame",handler:Y(t)},handled:!1,type:"instrument"}})])}}function ii(t){return function(...n){const e=this;return["onload","onerror","onprogress","onreadystatechange"].forEach((t=>{t in e&&"function"==typeof e[t]&&P(e,t,(function(n){const e={mechanism:{data:{function:t,handler:Y(n)},handled:!1,type:"instrument"}},r=F(n);return r&&(e.mechanism.data.handler=Y(r)),Ye(n,e)}))})),t.apply(this,n)}}function oi(t){const n=Ge,e=n[t]&&n[t].prototype;e&&e.hasOwnProperty&&e.hasOwnProperty("addEventListener")&&(P(e,"addEventListener",(function(n){return function(e,r,i){try{"function"==typeof r.handleEvent&&(r.handleEvent=Ye(r.handleEvent,{mechanism:{data:{function:"handleEvent",handler:Y(r),target:t},handled:!1,type:"instrument"}}))}catch(t){}return n.apply(this,[e,Ye(r,{mechanism:{data:{function:"addEventListener",handler:Y(r),target:t},handled:!1,type:"instrument"}}),i])}})),P(e,"removeEventListener",(function(t){return function(n,e,r){const i=e;try{const e=i&&i.__sentry_wrapped__;e&&t.call(this,n,e,r)}catch(t){}return t.call(this,n,i,r)}})))}const si=[Ie(),Ne(),ti(),Mr(),Hr(),Vr(),Ar(),Gr()];function ci(t){return[...si]}var ui=Object.freeze({__proto__:null,GlobalHandlers:qr,TryCatch:ni,Breadcrumbs:Rr,LinkedErrors:Yr,HttpContext:Jr,Dedupe:Nr});let ai={};Ge.Sentry&&Ge.Sentry.Integrations&&(ai=Ge.Sentry.Integrations);const fi={...ai,...Xe,...ui};return fi.Replay=fn,fi.BrowserTracing=hn,t.Breadcrumbs=Rr,t.BrowserClient=ar,t.BrowserTracing=hn,t.Dedupe=Nr,t.Feedback=an,t.FunctionToString=Le,t.GlobalHandlers=qr,t.HttpContext=Jr,t.Hub=Gn,t.InboundFilters=De,t.Integrations=fi,t.LinkedErrors=Yr,t.Replay=fn,t.SDK_VERSION=Wn,t.SEMANTIC_ATTRIBUTE_SENTRY_OP="sentry.op",t.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN="sentry.origin",t.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE="sentry.sample_rate",t.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE="sentry.source",t.Scope=Hn,t.TryCatch=ni,t.WINDOW=Ge,t.addBreadcrumb=Tn,t.addEventProcessor=function(t){const n=On();n&&n.addEventProcessor&&n.addEventProcessor(t)},t.addGlobalEventProcessor=pn,t.addIntegration=function(t){const n=On();n&&n.addIntegration&&n.addIntegration(t)},t.addTracingExtensions=function(){},t.breadcrumbsIntegration=Mr,t.browserApiErrorsIntegration=ti,t.browserTracingIntegration=function(t){return new hn({})},t.captureEvent=kn,t.captureException=captureException,t.captureMessage=function(t,n){const e="string"==typeof n?n:void 0,r="string"!=typeof n?{captureContext:n}:void 0;return Vn().captureMessage(t,e,r)},t.captureSession=Cn,t.captureUserFeedback=function(t){const n=On();n&&n.captureUserFeedback(t)},t.chromeStackLineParser=gr,t.close=async function(t){const n=On();return n?n.close(t):Promise.resolve(!1)},t.configureScope=function(t){Vn().configureScope(t)},t.continueTrace=({sentryTrace:t,baggage:n},e)=>{const r=In(),{traceparentData:i,dynamicSamplingContext:o,propagationContext:s}=Vt(t,n);r.setPropagationContext(s);const c={...i,metadata:z({dynamicSamplingContext:o})};return e?Zn((()=>e(c))):c},t.createTransport=xe,t.createUserFeedbackEnvelope=ur,t.dedupeIntegration=Ar,t.defaultIntegrations=si,t.defaultStackLineParsers=Tr,t.defaultStackParser=jr,t.endSession=Mn,t.eventFromException=rr,t.eventFromMessage=ir,t.exceptionFromError=Ze,t.feedbackIntegration=function(t){return new an({})},t.flush=async function(t){const n=On();return n?n.flush(t):Promise.resolve(!1)},t.forceLoad=function(){},t.functionToStringIntegration=Ne,t.geckoStackLineParser=br,t.getActiveSpan=re,t.getClient=On,t.getCurrentHub=Vn,t.getCurrentScope=In,t.getDefaultIntegrations=ci,t.getHubFromCarrier=Qn,t.globalHandlersIntegration=Hr,t.httpContextIntegration=Gr,t.inboundFiltersIntegration=Ie,t.init=function(t={}){void 0===t.defaultIntegrations&&(t.defaultIntegrations=ci()),void 0===t.release&&("string"==typeof __SENTRY_RELEASE__&&(t.release=__SENTRY_RELEASE__),Ge.SENTRY_RELEASE&&Ge.SENTRY_RELEASE.id&&(t.release=Ge.SENTRY_RELEASE.id)),void 0===t.autoSessionTracking&&(t.autoSessionTracking=!0),void 0===t.sendClientReports&&(t.sendClientReports=!0);const n={...t,stackParser:(e=t.stackParser||jr,Array.isArray(e)?K(...e):e),integrations:pe(t),transport:t.transport||(vt()?hr:lr)};var e;!function(t,n){!0===n.debug&&D((()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),In().update(n.initialScope);const e=new t(n);Se(e),function(t){t.init?t.init():t.setupIntegrations&&t.setupIntegrations()}(e)}(ar,n),t.autoSessionTracking&&function(){if(void 0===Ge.document)return;Dn({ignoreDuration:!0}),Cn(),It((({from:t,to:n})=>{void 0!==t&&t!==n&&(Dn({ignoreDuration:!0}),Cn())}))}()},t.isInitialized=function(){return!!On()},t.lastEventId=function(){return Vn().lastEventId()},t.linkedErrorsIntegration=Vr,t.makeFetchTransport=hr,t.makeMain=Kn,t.makeXHRTransport=lr,t.metrics=ze,t.onLoad=function(t){t()},t.opera10StackLineParser=Sr,t.opera11StackLineParser=kr,t.parameterize=function(t,...n){const e=new String(String.raw(t,...n));return e.__sentry_template_string__=t.join("\0").replace(/%/g,"%%").replace(/\0/g,"%s"),e.__sentry_template_values__=n,e},t.replayIntegration=function(t){return new fn({})},t.setContext=function(t,n){Vn().setContext(t,n)},t.setCurrentClient=Se,t.setExtra=function(t,n){Vn().setExtra(t,n)},t.setExtras=function(t){Vn().setExtras(t)},t.setTag=function(t,n){Vn().setTag(t,n)},t.setTags=function(t){Vn().setTags(t)},t.setUser=function(t){Vn().setUser(t)},t.showReportDialog=(t={},n=Vn())=>{if(!Ge.document)return;const{client:e,scope:r}=n.getStackTop(),i=t.dsn||e&&e.getDsn();if(!i)return;r&&(t.user={...r.getUser(),...t.user}),t.eventId||(t.eventId=n.lastEventId());const o=Ge.document.createElement("script");o.async=!0,o.crossOrigin="anonymous",o.src=function(t,n){const e=N(t);if(!e)return"";const r=`${fe(e)}embed/error-page/`;let i=`dsn=${C(e)}`;for(const t in n)if("dsn"!==t&&"onClose"!==t)if("user"===t){const t=n.user;if(!t)continue;t.name&&(i+=`&name=${encodeURIComponent(t.name)}`),t.email&&(i+=`&email=${encodeURIComponent(t.email)}`)}else i+=`&${encodeURIComponent(t)}=${encodeURIComponent(n[t])}`;return`${r}?${i}`}(i,t),t.onLoad&&(o.onload=t.onLoad);const{onClose:s}=t;if(s){const t=n=>{if("__sentry_reportdialog_closed__"===n.data)try{s()}finally{Ge.removeEventListener("message",t)}};Ge.addEventListener("message",t)}const c=Ge.document.head||Ge.document.body;c&&c.appendChild(o)},t.startInactiveSpan=function(t){if(!ee())return;const n=oe(t),e=Vn(),r=t.scope?t.scope.getSpan():re();if(t.onlyIfParent&&!r)return;const i=Yn(),o=In();let s;if(r)s=r.startChild(n);else{const{traceId:t,dsc:r,parentSpanId:c,sampled:u}={...i.getPropagationContext(),...o.getPropagationContext()};s=e.startTransaction({traceId:t,parentSpanId:c,parentSampled:u,...n,metadata:{dynamicSamplingContext:r,...n.metadata}})}return se(s,o,i),s},t.startSession=Dn,t.startSpan=function(t,n){const e=oe(t);return Zn((()=>jn(t.scope,(r=>{const i=Vn(),o=r.getSpan(),s=t.onlyIfParent&&!o?void 0:ie(i,o,e);return r.setSpan(s),ne((()=>n(s)),(()=>{if(s){const{status:t}=En(s);t&&"ok"!==t||s.setStatus("internal_error")}}),(()=>s&&s.end()))}))))},t.startSpanManual=function(t,n){const e=oe(t);return Zn((()=>jn(t.scope,(r=>{const i=Vn(),o=r.getSpan(),s=t.onlyIfParent&&!o?void 0:ie(i,o,e);function c(){s&&s.end()}return r.setSpan(s),ne((()=>n(s,c)),(()=>{if(s&&s.isRecording()){const{status:t}=En(s);t&&"ok"!==t||s.setStatus("internal_error")}}))}))))},t.startTransaction=function(t,n){return Vn().startTransaction({...t},n)},t.winjsStackLineParser=wr,t.withIsolationScope=function(t){return Zn((()=>t(Yn())))},t.withScope=jn,t.wrap=function(t){return Ye(t)()},t}({}); //# sourceMappingURL=bundle.min.js.map From b60243075d62f327cf1d83429b89005de90a2580 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Thu, 22 Feb 2024 12:51:01 +0700 Subject: [PATCH 112/171] chore(common): upgrade sentry to 7.102.0 for Windows + Developer Updates to version 7.102.0 of Sentry, in order to get working sourcemap matching. --- developer/src/tike/xml/app/lib/sentry/bundle.min.js | 4 ++-- oem/firstvoices/windows/src/xml/sentry.bundle.min.js | 4 ++-- windows/src/desktop/kmshell/xml/sentry.bundle.min.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/developer/src/tike/xml/app/lib/sentry/bundle.min.js b/developer/src/tike/xml/app/lib/sentry/bundle.min.js index 262b9344894..c9aa7758e20 100644 --- a/developer/src/tike/xml/app/lib/sentry/bundle.min.js +++ b/developer/src/tike/xml/app/lib/sentry/bundle.min.js @@ -1,3 +1,3 @@ -/*! @sentry/browser 5.15.0 (3ce26d5c) | https://github.com/getsentry/sentry-javascript */ -var Sentry=function(n){var t=function(n,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var r in t)t.hasOwnProperty(r)&&(n[r]=t[r])})(n,r)};function r(n,r){function e(){this.constructor=n}t(n,r),n.prototype=null===r?Object.create(r):(e.prototype=r.prototype,new e)}var e=function(){return(e=Object.assign||function(n){for(var t,r=1,e=arguments.length;r=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}}}function o(n,t){var r="function"==typeof Symbol&&n[Symbol.iterator];if(!r)return n;var e,i,o=r.call(n),u=[];try{for(;(void 0===t||t-- >0)&&!(e=o.next()).done;)u.push(e.value)}catch(n){i={error:n}}finally{try{e&&!e.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return u}function u(){for(var n=[],t=0;t=400&&t<500)switch(t){case 401:return n.Unauthenticated;case 403:return n.PermissionDenied;case 404:return n.NotFound;case 409:return n.AlreadyExists;case 413:return n.FailedPrecondition;case 429:return n.ResourceExhausted;default:return n.InvalidArgument}if(t>=500&&t<600)switch(t){case 501:return n.Unimplemented;case 503:return n.Unavailable;case 504:return n.DeadlineExceeded;default:return n.InternalError}return n.UnknownError}}(s||(s={})),(f=n.Status||(n.Status={})).Unknown="unknown",f.Skipped="skipped",f.Success="success",f.RateLimit="rate_limit",f.Invalid="invalid",f.Failed="failed",function(n){n.fromHttpCode=function(t){return t>=200&&t<300?n.Success:429===t?n.RateLimit:t>=400&&t<500?n.Invalid:t>=500?n.Failed:n.Unknown}}(n.Status||(n.Status={}));var h=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(n,t){return n.__proto__=t,n}:function(n,t){for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r]);return n});var v=function(n){function t(t){var r=this.constructor,e=n.call(this,t)||this;return e.message=t,e.name=r.prototype.constructor.name,h(e,r.prototype),e}return r(t,n),t}(Error);function l(n){switch(Object.prototype.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return x(n,Error)}}function d(n){return"[object ErrorEvent]"===Object.prototype.toString.call(n)}function p(n){return"[object DOMError]"===Object.prototype.toString.call(n)}function y(n){return"[object String]"===Object.prototype.toString.call(n)}function m(n){return null===n||"object"!=typeof n&&"function"!=typeof n}function b(n){return"[object Object]"===Object.prototype.toString.call(n)}function w(n){return"undefined"!=typeof Event&&x(n,Event)}function g(n){return"undefined"!=typeof Element&&x(n,Element)}function E(n){return Boolean(n&&n.then&&"function"==typeof n.then)}function x(n,t){try{return n instanceof t}catch(n){return!1}}function j(n,t){return void 0===t&&(t=0),"string"!=typeof n||0===t?n:n.length<=t?n:n.substr(0,t)+"..."}function k(n,t){if(!Array.isArray(n))return"";for(var r=[],e=0;e"}return n.event_id||""}function C(n){var t=D();if(!("console"in t))return n();var r=t.console,e={};["debug","info","warn","error","log","assert"].forEach(function(n){n in t.console&&r[n].__sentry_original__&&(e[n]=r[n],r[n]=r[n].__sentry_original__)});var i=n();return Object.keys(e).forEach(function(n){r[n]=e[n]}),i}function M(n,t,r){n.exception=n.exception||{},n.exception.values=n.exception.values||[],n.exception.values[0]=n.exception.values[0]||{},n.exception.values[0].value=n.exception.values[0].value||t||"",n.exception.values[0].type=n.exception.values[0].type||r||"Error"}function A(n,t){void 0===t&&(t={});try{n.exception.values[0].mechanism=n.exception.values[0].mechanism||{},Object.keys(t).forEach(function(r){n.exception.values[0].mechanism[r]=t[r]})}catch(n){}}function U(n){try{for(var t=n,r=[],e=0,i=0,o=" > ".length,u=void 0;t&&e++<5&&!("html"===(u=q(t))||e>1&&i+r.length*o+u.length>=80);)r.push(u),i+=u.length,t=t.parentNode;return r.reverse().join(" > ")}catch(n){return""}}function q(n){var t,r,e,i,o,u=n,c=[];if(!u||!u.tagName)return"";if(c.push(u.tagName.toLowerCase()),u.id&&c.push("#"+u.id),(t=u.className)&&y(t))for(r=t.split(/\s+/),o=0;o"}try{o.currentTarget=g(i.currentTarget)?U(i.currentTarget):Object.prototype.toString.call(i.currentTarget)}catch(n){o.currentTarget=""}for(var e in"undefined"!=typeof CustomEvent&&x(n,CustomEvent)&&(o.detail=i.detail),i)Object.prototype.hasOwnProperty.call(i,e)&&(o[e]=i);return o}return n}function tn(n){return function(n){return~-encodeURI(n).split(/%..|./).length}(JSON.stringify(n))}function rn(n,t,r){void 0===t&&(t=3),void 0===r&&(r=102400);var e=un(n,t);return tn(e)>r?rn(n,t-1,r):e}function en(n,t){return"domain"===t&&n&&"object"==typeof n&&n.u?"[Domain]":"domainEmitter"===t?"[DomainEmitter]":"undefined"!=typeof global&&n===global?"[Global]":"undefined"!=typeof window&&n===window?"[Window]":"undefined"!=typeof document&&n===document?"[Document]":b(r=n)&&"nativeEvent"in r&&"preventDefault"in r&&"stopPropagation"in r?"[SyntheticEvent]":"number"==typeof n&&n!=n?"[NaN]":void 0===n?"[undefined]":"function"==typeof n?"[Function: "+G(n)+"]":n;var r}function on(n,t,r,e){if(void 0===r&&(r=1/0),void 0===e&&(e=new Y),0===r)return function(n){var t=Object.prototype.toString.call(n);if("string"==typeof n)return n;if("[object Object]"===t)return"[Object]";if("[object Array]"===t)return"[Array]";var r=en(n);return m(r)?r:t}(t);if(null!=t&&"function"==typeof t.toJSON)return t.toJSON();var i=en(t,n);if(m(i))return i;var o=nn(t),u=Array.isArray(t)?[]:{};if(e.memoize(t))return"[Circular ~]";for(var c in o)Object.prototype.hasOwnProperty.call(o,c)&&(u[c]=on(c,o[c],r-1,e));return e.unmemoize(t),u}function un(n,t){try{return JSON.parse(JSON.stringify(n,function(n,r){return on(n,r,t)}))}catch(n){return"**non-serializable**"}}function cn(n,t){void 0===t&&(t=40);var r=Object.keys(nn(n));if(r.sort(),!r.length)return"[object has no keys]";if(r[0].length>=t)return j(r[0],t);for(var e=r.length;e>0;e--){var i=r.slice(0,e).join(", ");if(!(i.length>t))return e===r.length?i:j(i,t)}return""}!function(n){n.PENDING="PENDING",n.RESOLVED="RESOLVED",n.REJECTED="REJECTED"}(K||(K={}));var an=function(){function n(n){var t=this;this.s=K.PENDING,this.h=[],this.v=function(n){t.l(K.RESOLVED,n)},this.p=function(n){t.l(K.REJECTED,n)},this.l=function(n,r){t.s===K.PENDING&&(E(r)?r.then(t.v,t.p):(t.s=n,t.m=r,t.g()))},this.j=function(n){t.h=t.h.concat(n),t.g()},this.g=function(){t.s!==K.PENDING&&(t.s===K.REJECTED?t.h.forEach(function(n){n.onrejected&&n.onrejected(t.m)}):t.h.forEach(function(n){n.onfulfilled&&n.onfulfilled(t.m)}),t.h=[])};try{n(this.v,this.p)}catch(n){this.p(n)}}return n.prototype.toString=function(){return"[object SyncPromise]"},n.resolve=function(t){return new n(function(n){n(t)})},n.reject=function(t){return new n(function(n,r){r(t)})},n.all=function(t){return new n(function(r,e){if(Array.isArray(t))if(0!==t.length){var i=t.length,o=[];t.forEach(function(t,u){n.resolve(t).then(function(n){o[u]=n,0===(i-=1)&&r(o)}).then(null,e)})}else r([]);else e(new TypeError("Promise.all requires an array as input."))})},n.prototype.then=function(t,r){var e=this;return new n(function(n,i){e.j({onfulfilled:function(r){if(t)try{return void n(t(r))}catch(n){return void i(n)}else n(r)},onrejected:function(t){if(r)try{return void n(r(t))}catch(n){return void i(n)}else i(t)}})})},n.prototype.catch=function(n){return this.then(function(n){return n},n)},n.prototype.finally=function(t){var r=this;return new n(function(n,e){var i,o;return r.then(function(n){o=!1,i=n,t&&t()},function(n){o=!0,i=n,t&&t()}).then(function(){o?e(i):n(i)})})},n}(),sn=function(){function n(n){this.k=n,this._=[]}return n.prototype.isReady=function(){return void 0===this.k||this.length()0&&r(!1)},n);an.all(t._).then(function(){clearTimeout(e),r(!0)}).then(null,function(){r(!0)})})},n}();function fn(){if(!("fetch"in D()))return!1;try{return new Headers,new Request(""),new Response,!0}catch(n){return!1}}function hn(n){return n&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(n.toString())}function vn(){if(!fn())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch(n){return!1}}var ln,dn=D(),pn={},yn={};function mn(n){if(!yn[n])switch(yn[n]=!0,n){case"console":!function(){if(!("console"in dn))return;["debug","info","warn","error","log","assert"].forEach(function(n){n in dn.console&&Z(dn.console,n,function(t){return function(){for(var r=[],e=0;e2?t[2]:void 0;if(e){var i=ln,o=String(e);ln=o,wn("history",{from:i,to:o})}return n.apply(this,t)}}dn.onpopstate=function(){for(var n=[],t=0;t1&&(h=d.slice(0,-1).join("/"),l=d.pop()),this.O({host:a,pass:c,path:h,projectId:l,port:f,protocol:e,user:i})},n.prototype.O=function(n){this.protocol=n.protocol,this.user=n.user,this.pass=n.pass||"",this.host=n.host,this.port=n.port||"",this.path=n.path||"",this.projectId=n.projectId},n.prototype.T=function(){var n=this;if(["protocol","user","host","projectId"].forEach(function(t){if(!n[t])throw new v("Invalid Dsn")}),"http"!==this.protocol&&"https"!==this.protocol)throw new v("Invalid Dsn");if(this.port&&isNaN(parseInt(this.port,10)))throw new v("Invalid Dsn")},n}(),In=function(){function n(){this.D=!1,this.R=[],this.N=[],this.I=[],this.C={},this.M={},this.A={},this.U={}}return n.prototype.addScopeListener=function(n){this.R.push(n)},n.prototype.addEventProcessor=function(n){return this.N.push(n),this},n.prototype.q=function(){var n=this;this.D||(this.D=!0,setTimeout(function(){n.R.forEach(function(t){t(n)}),n.D=!1}))},n.prototype.L=function(n,t,r,i){var o=this;return void 0===i&&(i=0),new an(function(u,c){var a=n[i];if(null===t||"function"!=typeof a)u(t);else{var s=a(e({},t),r);E(s)?s.then(function(t){return o.L(n,t,r,i+1).then(u)}).then(null,c):o.L(n,s,r,i+1).then(u).then(null,c)}})},n.prototype.setUser=function(n){return this.C=n||{},this.q(),this},n.prototype.setTags=function(n){return this.M=e({},this.M,n),this.q(),this},n.prototype.setTag=function(n,t){var r;return this.M=e({},this.M,((r={})[n]=t,r)),this.q(),this},n.prototype.setExtras=function(n){return this.A=e({},this.A,n),this.q(),this},n.prototype.setExtra=function(n,t){var r;return this.A=e({},this.A,((r={})[n]=t,r)),this.q(),this},n.prototype.setFingerprint=function(n){return this.H=n,this.q(),this},n.prototype.setLevel=function(n){return this.P=n,this.q(),this},n.prototype.setTransaction=function(n){return this.F=n,this.W&&(this.W.transaction=n),this.q(),this},n.prototype.setContext=function(n,t){var r;return this.U=e({},this.U,((r={})[n]=t,r)),this.q(),this},n.prototype.setSpan=function(n){return this.W=n,this.q(),this},n.prototype.getSpan=function(){return this.W},n.clone=function(t){var r=new n;return t&&(r.I=u(t.I),r.M=e({},t.M),r.A=e({},t.A),r.U=e({},t.U),r.C=t.C,r.P=t.P,r.W=t.W,r.F=t.F,r.H=t.H,r.N=u(t.N)),r},n.prototype.clear=function(){return this.I=[],this.M={},this.A={},this.C={},this.U={},this.P=void 0,this.F=void 0,this.H=void 0,this.W=void 0,this.q(),this},n.prototype.addBreadcrumb=function(n,t){var r=e({timestamp:W()},n);return this.I=void 0!==t&&t>=0?u(this.I,[r]).slice(-t):u(this.I,[r]),this.q(),this},n.prototype.clearBreadcrumbs=function(){return this.I=[],this.q(),this},n.prototype.X=function(n){n.fingerprint=n.fingerprint?Array.isArray(n.fingerprint)?n.fingerprint:[n.fingerprint]:[],this.H&&(n.fingerprint=n.fingerprint.concat(this.H)),n.fingerprint&&!n.fingerprint.length&&delete n.fingerprint},n.prototype.applyToEvent=function(n,t){return this.A&&Object.keys(this.A).length&&(n.extra=e({},this.A,n.extra)),this.M&&Object.keys(this.M).length&&(n.tags=e({},this.M,n.tags)),this.C&&Object.keys(this.C).length&&(n.user=e({},this.C,n.user)),this.U&&Object.keys(this.U).length&&(n.contexts=e({},this.U,n.contexts)),this.P&&(n.level=this.P),this.F&&(n.transaction=this.F),this.W&&(n.contexts=e({trace:this.W.getTraceContext()},n.contexts)),this.X(n),n.breadcrumbs=u(n.breadcrumbs||[],this.I),n.breadcrumbs=n.breadcrumbs.length>0?n.breadcrumbs:void 0,this.L(u(Cn(),this.N),n,t)},n}();function Cn(){var n=D();return n.__SENTRY__=n.__SENTRY__||{},n.__SENTRY__.globalEventProcessors=n.__SENTRY__.globalEventProcessors||[],n.__SENTRY__.globalEventProcessors}function Mn(n){Cn().push(n)}var An=3,Un=function(){function n(n,t,r){void 0===t&&(t=new In),void 0===r&&(r=An),this.B=r,this.$=[],this.$.push({client:n,scope:t})}return n.prototype.G=function(n){for(var t,r=[],e=1;e0?n[n.length-1].scope:void 0,r=In.clone(t);return this.getStack().push({client:this.getClient(),scope:r}),r},n.prototype.popScope=function(){return void 0!==this.getStack().pop()},n.prototype.withScope=function(n){var t=this.pushScope();try{n(t)}finally{this.popScope()}},n.prototype.getClient=function(){return this.getStackTop().client},n.prototype.getScope=function(){return this.getStackTop().scope},n.prototype.getStack=function(){return this.$},n.prototype.getStackTop=function(){return this.$[this.$.length-1]},n.prototype.captureException=function(n,t){var r=this.J=R(),i=t;if(!t){var o=void 0;try{throw new Error("Sentry syntheticException")}catch(n){o=n}i={originalException:n,syntheticException:o}}return this.G("captureException",n,e({},i,{event_id:r})),r},n.prototype.captureMessage=function(n,t,r){var i=this.J=R(),o=r;if(!r){var u=void 0;try{throw new Error(n)}catch(n){u=n}o={originalException:n,syntheticException:u}}return this.G("captureMessage",n,t,e({},o,{event_id:i})),i},n.prototype.captureEvent=function(n,t){var r=this.J=R();return this.G("captureEvent",n,e({},t,{event_id:r})),r},n.prototype.lastEventId=function(){return this.J},n.prototype.addBreadcrumb=function(n,t){var r=this.getStackTop();if(r.scope&&r.client){var i=r.client.getOptions&&r.client.getOptions()||{},o=i.beforeBreadcrumb,u=void 0===o?null:o,c=i.maxBreadcrumbs,a=void 0===c?100:c;if(!(a<=0)){var s=W(),f=e({timestamp:s},n),h=u?C(function(){return u(f,t)}):f;null!==h&&r.scope.addBreadcrumb(h,Math.min(a,100))}}},n.prototype.setUser=function(n){var t=this.getStackTop();t.scope&&t.scope.setUser(n)},n.prototype.setTags=function(n){var t=this.getStackTop();t.scope&&t.scope.setTags(n)},n.prototype.setExtras=function(n){var t=this.getStackTop();t.scope&&t.scope.setExtras(n)},n.prototype.setTag=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setTag(n,t)},n.prototype.setExtra=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setExtra(n,t)},n.prototype.setContext=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setContext(n,t)},n.prototype.configureScope=function(n){var t=this.getStackTop();t.scope&&t.client&&n(t.scope)},n.prototype.run=function(n){var t=Ln(this);try{n(this)}finally{Ln(t)}},n.prototype.getIntegration=function(n){var t=this.getClient();if(!t)return null;try{return t.getIntegration(n)}catch(t){return Q.warn("Cannot retrieve integration "+n.id+" from the current Hub"),null}},n.prototype.startSpan=function(n,t){return void 0===t&&(t=!1),this.V("startSpan",n,t)},n.prototype.traceHeaders=function(){return this.V("traceHeaders")},n.prototype.V=function(n){for(var t=[],r=1;r=n&&r({interval:i,ready:!1})):r({interval:i,ready:!0})},1)})},n.prototype.in=function(){return this.tn},n.prototype.cn=function(){return!1!==this.getOptions().enabled&&void 0!==this.en},n.prototype.an=function(n,t,r){var i=this,o=this.getOptions(),u=o.environment,c=o.release,a=o.dist,s=o.maxValueLength,f=void 0===s?250:s,h=o.normalizeDepth,v=void 0===h?3:h,l=e({},n);void 0===l.environment&&void 0!==u&&(l.environment=u),void 0===l.release&&void 0!==c&&(l.release=c),void 0===l.dist&&void 0!==a&&(l.dist=a),l.message&&(l.message=j(l.message,f));var d=l.exception&&l.exception.values&&l.exception.values[0];d&&d.value&&(d.value=j(d.value,f));var p=l.request;p&&p.url&&(p.url=j(p.url,f)),void 0===l.event_id&&(l.event_id=r&&r.event_id?r.event_id:R()),this.sn(l.sdk);var y=an.resolve(l);return t&&(y=t.applyToEvent(l,r)),y.then(function(n){return"number"==typeof v&&v>0?i.fn(n,v):n})},n.prototype.fn=function(n,t){return n?e({},n,n.breadcrumbs&&{breadcrumbs:n.breadcrumbs.map(function(n){return e({},n,n.data&&{data:un(n.data,t)})})},n.user&&{user:un(n.user,t)},n.contexts&&{contexts:un(n.contexts,t)},n.extra&&{extra:un(n.extra,t)}):null},n.prototype.sn=function(n){var t=Object.keys(this.Z);n&&t.length>0&&(n.integrations=t)},n.prototype.on=function(n,t,r){var e=this,i=this.getOptions(),o=i.beforeSend,u=i.sampleRate;return this.cn()?"number"==typeof u&&Math.random()>u?an.reject("This event has been sampled, will not send event."):new an(function(i,u){e.an(n,r,t).then(function(n){if(null!==n){var r=n;if(t&&t.data&&!0===t.data.__sentry__||!o)return e.in().sendEvent(r),void i(r);var c=o(n,t);if(void 0===c)Q.error("`beforeSend` method has to return `null` or a valid event.");else if(E(c))e.hn(c,i,u);else{if(null===(r=c))return Q.log("`beforeSend` returned `null`, will not send event."),void i(null);e.in().sendEvent(r),i(r)}}else u("An event processor returned null, will not send event.")}).then(null,function(n){e.captureException(n,{data:{__sentry__:!0},originalException:n}),u("Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: "+n)})}):an.reject("SDK not enabled, will not send event.")},n.prototype.hn=function(n,t,r){var e=this;n.then(function(n){null!==n?(e.in().sendEvent(n),t(n)):r("`beforeSend` returned `null`, will not send event.")}).then(null,function(n){r("beforeSend rejected with "+n)})},n}(),Kn=function(){function t(){}return t.prototype.sendEvent=function(t){return an.resolve({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:n.Status.Skipped})},t.prototype.close=function(n){return an.resolve(!0)},t}(),Qn=function(){function n(n){this.rn=n,this.rn.dsn||Q.warn("No DSN provided, backend will not do anything."),this.vn=this.ln()}return n.prototype.ln=function(){return new Kn},n.prototype.eventFromException=function(n,t){throw new v("Backend has to implement `eventFromException` method")},n.prototype.eventFromMessage=function(n,t,r){throw new v("Backend has to implement `eventFromMessage` method")},n.prototype.sendEvent=function(n){this.vn.sendEvent(n).then(null,function(n){Q.error("Error while sending event: "+n)})},n.prototype.getTransport=function(){return this.vn},n}();var Yn=function(){function n(){this.name=n.id}return n.prototype.setupOnce=function(){zn=Function.prototype.toString,Function.prototype.toString=function(){for(var n=[],t=0;t|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,it=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js))(?::(\d+))?(?::(\d+))?\s*$/i,ot=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,ut=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,ct=/\((\S*)(?::(\d+))(?::(\d+))\)/;function at(n){var t=null,r=n&&n.framesToPop;try{if(t=function(n){if(!n||!n.stacktrace)return null;for(var t,r=n.stacktrace,e=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,i=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,o=r.split("\n"),u=[],c=0;c eval")>-1&&(t=ut.exec(r[3]))?(r[1]=r[1]||"eval",r[3]=t[1],r[4]=t[2],r[5]=""):0!==u||r[5]||void 0===n.columnNumber||(i[0].column=n.columnNumber+1),e={url:r[3],func:r[1]||rt,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}!e.func&&e.line&&(e.func=rt),i.push(e)}if(!i.length)return null;return{message:ft(n),name:n.name,stack:i}}(n))return st(t,r)}catch(n){}return{message:ft(n),name:n&&n.name,stack:[],failed:!0}}function st(n,t){try{return e({},n,{stack:n.stack.slice(t)})}catch(t){return n}}function ft(n){var t=n&&n.message;return t?t.error&&"string"==typeof t.error.message?t.error.message:t:"No error message"}var ht=50;function vt(n){var t=dt(n.stack),r={type:n.name,value:n.message};return t&&t.length&&(r.stacktrace={frames:t}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function lt(n){return{exception:{values:[vt(n)]}}}function dt(n){if(!n||!n.length)return[];var t=n,r=t[0].func||"",e=t[t.length-1].func||"";return-1===r.indexOf("captureMessage")&&-1===r.indexOf("captureException")||(t=t.slice(1)),-1!==e.indexOf("sentryWrapped")&&(t=t.slice(0,-1)),t.map(function(n){return{colno:null===n.column?void 0:n.column,filename:n.url||t[0].url,function:n.func||"?",in_app:!0,lineno:null===n.line?void 0:n.line}}).slice(0,ht).reverse()}function pt(n,t,r){var e,i;if(void 0===r&&(r={}),d(n)&&n.error)return e=lt(at(n=n.error));if(p(n)||(i=n,"[object DOMException]"===Object.prototype.toString.call(i))){var o=n,u=o.name||(p(o)?"DOMError":"DOMException"),c=o.message?u+": "+o.message:u;return M(e=yt(c,t,r),c),e}return l(n)?e=lt(at(n)):b(n)||w(n)?(A(e=function(n,t,r){var e={exception:{values:[{type:w(n)?n.constructor.name:r?"UnhandledRejection":"Error",value:"Non-Error "+(r?"promise rejection":"exception")+" captured with keys: "+cn(n)}]},extra:{__serialized__:rn(n)}};if(t){var i=dt(at(t).stack);e.stacktrace={frames:i}}return e}(n,t,r.rejection),{synthetic:!0}),e):(M(e=yt(n,t,r),""+n,void 0),A(e,{synthetic:!0}),e)}function yt(n,t,r){void 0===r&&(r={});var e={message:n};if(r.attachStacktrace&&t){var i=dt(at(t).stack);e.stacktrace={frames:i}}return e}var mt=function(){function n(n){this.options=n,this._=new sn(30),this.url=new $n(this.options.dsn).getStoreEndpointWithUrlEncodedAuth()}return n.prototype.sendEvent=function(n){throw new v("Transport Class has to implement `sendEvent` method")},n.prototype.close=function(n){return this._.drain(n)},n}(),bt=D(),wt=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.xn=new Date(Date.now()),n}return r(e,t),e.prototype.sendEvent=function(t){var r=this;if(new Date(Date.now())0}function Ot(n,t,r){if(void 0===t&&(t={}),"function"!=typeof n)return n;try{if(n.__sentry__)return n;if(n.__sentry_wrapped__)return n.__sentry_wrapped__}catch(t){return n}var sentryWrapped=function(){var i=Array.prototype.slice.call(arguments);try{r&&"function"==typeof r&&r.apply(this,arguments);var o=i.map(function(n){return Ot(n,t)});return n.handleEvent?n.handleEvent.apply(this,o):n.apply(this,o)}catch(n){throw _t+=1,setTimeout(function(){_t-=1}),Bn(function(r){r.addEventProcessor(function(n){var r=e({},n);return t.mechanism&&(M(r,void 0,void 0),A(r,t.mechanism)),r.extra=e({},r.extra,{arguments:i}),r}),captureException(n)}),n}};try{for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(sentryWrapped[i]=n[i])}catch(n){}n.prototype=n.prototype||{},sentryWrapped.prototype=n.prototype,Object.defineProperty(n,"__sentry_wrapped__",{enumerable:!1,value:sentryWrapped}),Object.defineProperties(sentryWrapped,{__sentry__:{enumerable:!1,value:!0},__sentry_original__:{enumerable:!1,value:n}});try{Object.getOwnPropertyDescriptor(sentryWrapped,"name").configurable&&Object.defineProperty(sentryWrapped,"name",{get:function(){return n.name}})}catch(n){}return sentryWrapped}var Tt=function(){function t(n){this.name=t.id,this.jn=!1,this.kn=!1,this.rn=e({onerror:!0,onunhandledrejection:!0},n)}return t.prototype.setupOnce=function(){Error.stackTraceLimit=50,this.rn.onerror&&(Q.log("Global Handler attached: onerror"),this._n()),this.rn.onunhandledrejection&&(Q.log("Global Handler attached: onunhandledrejection"),this.Sn())},t.prototype._n=function(){var n=this;this.jn||(bn({callback:function(r){var e=r.error,i=Hn(),o=i.getIntegration(t),u=e&&!0===e.__sentry_own_request__;if(o&&!St()&&!u){var c=i.getClient(),a=m(e)?n.On(r.msg,r.url,r.line,r.column):n.Tn(pt(e,void 0,{attachStacktrace:c&&c.getOptions().attachStacktrace,rejection:!1}),r.url,r.line,r.column);A(a,{handled:!1,type:"onerror"}),i.captureEvent(a,{originalException:e})}},type:"error"}),this.jn=!0)},t.prototype.Sn=function(){var r=this;this.kn||(bn({callback:function(e){var i=e;try{"reason"in e?i=e.reason:"detail"in e&&"reason"in e.detail&&(i=e.detail.reason)}catch(n){}var o=Hn(),u=o.getIntegration(t),c=i&&!0===i.__sentry_own_request__;if(!u||St()||c)return!0;var a=o.getClient(),s=m(i)?r.Dn(i):pt(i,void 0,{attachStacktrace:a&&a.getOptions().attachStacktrace,rejection:!0});s.level=n.Severity.Error,A(s,{handled:!1,type:"onunhandledrejection"}),o.captureEvent(s,{originalException:i})},type:"unhandledrejection"}),this.kn=!0)},t.prototype.On=function(n,t,r,e){var i,o=d(n)?n.message:n;if(y(o)){var u=o.match(/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i);u&&(i=u[1],o=u[2])}var c={exception:{values:[{type:i||"Error",value:o}]}};return this.Tn(c,t,r,e)},t.prototype.Dn=function(n){return{exception:{values:[{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+n}]}}},t.prototype.Tn=function(n,t,r,e){n.exception=n.exception||{},n.exception.values=n.exception.values||[],n.exception.values[0]=n.exception.values[0]||{},n.exception.values[0].stacktrace=n.exception.values[0].stacktrace||{},n.exception.values[0].stacktrace.frames=n.exception.values[0].stacktrace.frames||[];var i=isNaN(parseInt(e,10))?void 0:e,o=isNaN(parseInt(r,10))?void 0:r,u=y(t)&&t.length>0?t:function(){try{return document.location.href}catch(n){return""}}();return 0===n.exception.values[0].stacktrace.frames.length&&n.exception.values[0].stacktrace.frames.push({colno:i,filename:u,function:"?",in_app:!0,lineno:o}),n},t.id="GlobalHandlers",t}(),Dt=function(){function n(){this.Rn=0,this.name=n.id}return n.prototype.Nn=function(n){return function(){for(var t=[],r=0;r"}0!==t.length&&Hn().addBreadcrumb({category:"ui."+n.name,message:t},{event:n.event,name:n.name})},t.prototype.qn=function(n){if(n.endTimestamp){if(n.xhr.__sentry_own_request__)return;Hn().addBreadcrumb({category:"xhr",data:n.xhr.__sentry_xhr__,type:"http"},{xhr:n.xhr})}else this.rn.sentry&&n.xhr.__sentry_own_request__&&Nt(n.args[0])},t.prototype.Ln=function(t){if(t.endTimestamp){var r=Hn().getClient(),i=r&&r.getDsn();if(this.rn.sentry&&i){var o=new $n(i).getStoreEndpoint();if(o&&-1!==t.fetchData.url.indexOf(o)&&"POST"===t.fetchData.method&&t.args[1]&&t.args[1].body)return void Nt(t.args[1].body)}t.error?Hn().addBreadcrumb({category:"fetch",data:e({},t.fetchData,{status_code:t.response.status}),level:n.Severity.Error,type:"http"},{data:t.error,input:t.args}):Hn().addBreadcrumb({category:"fetch",data:e({},t.fetchData,{status_code:t.response.status}),type:"http"},{input:t.args,response:t.response})}},t.prototype.Hn=function(n){var t=D(),r=n.from,e=n.to,i=N(t.location.href),o=N(r),u=N(e);o.path||(o=i),i.protocol===u.protocol&&i.host===u.host&&(e=u.relative),i.protocol===o.protocol&&i.host===o.host&&(r=o.relative),Hn().addBreadcrumb({category:"navigation",data:{from:r,to:e}})},t.prototype.setupOnce=function(){var n=this;this.rn.console&&bn({callback:function(){for(var t=[],r=0;r=this.k)return r;var e=vt(at(n[t]));return this.Wn(n[t],t,u([e],r))},n.id="LinkedErrors",n}(),At=D(),Ut=function(){function n(){this.name=n.id}return n.prototype.setupOnce=function(){Mn(function(t){if(Hn().getIntegration(n)){if(!At.navigator||!At.location)return t;var r=t.request||{};return r.url=r.url||At.location.href,r.headers=r.headers||{},r.headers["User-Agent"]=At.navigator.userAgent,e({},t,{request:r})}return t})},n.id="UserAgent",n}(),qt=Object.freeze({GlobalHandlers:Tt,TryCatch:Dt,Breadcrumbs:Rt,LinkedErrors:Mt,UserAgent:Ut}),Lt=[new nt,new Yn,new Dt,new Rt,new Tt,new Mt,new Ut];var Ht={},Pt=D();Pt.Sentry&&Pt.Sentry.Integrations&&(Ht=Pt.Sentry.Integrations);var Ft=e({},Ht,tt,qt);return n.BrowserClient=kt,n.Hub=Un,n.Integrations=Ft,n.SDK_NAME=jt,n.SDK_VERSION="5.15.0",n.Scope=In,n.Transports=Et,n.addBreadcrumb=function(n){Xn("addBreadcrumb",n)},n.addGlobalEventProcessor=Mn,n.captureEvent=function(n){return Xn("captureEvent",n)},n.captureException=captureException,n.captureMessage=function(n,t){var r;try{throw new Error(n)}catch(n){r=n}return Xn("captureMessage",n,t,{originalException:n,syntheticException:r})},n.close=function(n){var t=Hn().getClient();return t?t.close(n):an.reject(!1)},n.configureScope=function(n){Xn("configureScope",n)},n.defaultIntegrations=Lt,n.flush=function(n){var t=Hn().getClient();return t?t.flush(n):an.reject(!1)},n.forceLoad=function(){},n.getCurrentHub=Hn,n.getHubFromCarrier=Fn,n.init=function(n){if(void 0===n&&(n={}),void 0===n.defaultIntegrations&&(n.defaultIntegrations=Lt),void 0===n.release){var t=D();t.SENTRY_RELEASE&&t.SENTRY_RELEASE.id&&(n.release=t.SENTRY_RELEASE.id)}!function(n,t){!0===t.debug&&Q.enable();var r=Hn(),e=new n(t);r.bindClient(e)}(kt,n)},n.lastEventId=function(){return Hn().lastEventId()},n.onLoad=function(n){n()},n.setContext=function(n,t){Xn("setContext",n,t)},n.setExtra=function(n,t){Xn("setExtra",n,t)},n.setExtras=function(n){Xn("setExtras",n)},n.setTag=function(n,t){Xn("setTag",n,t)},n.setTags=function(n){Xn("setTags",n)},n.setUser=function(n){Xn("setUser",n)},n.showReportDialog=function(n){void 0===n&&(n={}),n.eventId||(n.eventId=Hn().lastEventId());var t=Hn().getClient();t&&t.showReportDialog(n)},n.withScope=Bn,n.wrap=function(n){return Ot(n)()},n}({}); +/*! @sentry/browser 7.102.0 (4c0fa37) | https://github.com/getsentry/sentry-javascript */ +var Sentry=function(t){const n=Object.prototype.toString;function e(t){switch(n.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return l(t,Error)}}function r(t,e){return n.call(t)===`[object ${e}]`}function i(t){return r(t,"ErrorEvent")}function o(t){return r(t,"DOMError")}function s(t){return r(t,"String")}function c(t){return"object"==typeof t&&null!==t&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function u(t){return null===t||c(t)||"object"!=typeof t&&"function"!=typeof t}function a(t){return r(t,"Object")}function f(t){return"undefined"!=typeof Event&&l(t,Event)}function h(t){return Boolean(t&&t.then&&"function"==typeof t.then)}function l(t,n){try{return t instanceof n}catch(t){return!1}}function d(t){return!("object"!=typeof t||null===t||!t.__isVue&&!t.t)}function p(t,n=0){return"string"!=typeof t||0===n||t.length<=n?t:`${t.slice(0,n)}...`}function m(t,n){if(!Array.isArray(t))return"";const e=[];for(let n=0;ny(t,n,e)))}function v(t,n,e=250,r,i,o,s){if(!(o.exception&&o.exception.values&&s&&l(s.originalException,Error)))return;const c=o.exception.values.length>0?o.exception.values[o.exception.values.length-1]:void 0;var u,a;c&&(o.exception.values=(u=_(t,n,i,s.originalException,r,o.exception.values,c,0),a=e,u.map((t=>(t.value&&(t.value=p(t.value,a)),t)))))}function _(t,n,e,r,i,o,s,c){if(o.length>=e+1)return o;let u=[...o];if(l(r[i],Error)){b(s,c);const o=t(n,r[i]),a=u.length;E(o,i,a,c),u=_(t,n,e,r[i],i,[o,...u],o,a)}return Array.isArray(r.errors)&&r.errors.forEach(((r,o)=>{if(l(r,Error)){b(s,c);const a=t(n,r),f=u.length;E(a,`errors[${o}]`,f,c),u=_(t,n,e,r,i,[a,...u],a,f)}})),u}function b(t,n){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,is_exception_group:!0,exception_id:n}}function E(t,n,e,r){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,type:"chained",source:n,exception_id:e,parent_id:r}}function w(t){return t&&t.Math==Math?t:void 0}const $="object"==typeof globalThis&&w(globalThis)||"object"==typeof window&&w(window)||"object"==typeof self&&w(self)||"object"==typeof global&&w(global)||function(){return this}()||{};function S(){return $}function x(t,n,e){const r=e||$,i=r.__SENTRY__=r.__SENTRY__||{};return i[t]||(i[t]=n())}const k=S();function T(t,n={}){if(!t)return"";try{let e=t;const r=5,i=[];let o=0,s=0;const c=" > ",u=c.length;let a;const f=Array.isArray(n)?n:n.keyAttrs,h=!Array.isArray(n)&&n.maxStringLength||80;for(;e&&o++1&&s+i.length*u+a.length>=h));)i.push(a),s+=a.length,e=e.parentNode;return i.reverse().join(c)}catch(t){return""}}function j(t,n){const e=t,r=[];let i,o,c,u,a;if(!e||!e.tagName)return"";if(k.HTMLElement&&e instanceof HTMLElement&&e.dataset&&e.dataset.sentryComponent)return e.dataset.sentryComponent;r.push(e.tagName.toLowerCase());const f=n&&n.length?n.filter((t=>e.getAttribute(t))).map((t=>[t,e.getAttribute(t)])):null;if(f&&f.length)f.forEach((t=>{r.push(`[${t[0]}="${t[1]}"]`)}));else if(e.id&&r.push(`#${e.id}`),i=e.className,i&&s(i))for(o=i.split(/\s+/),a=0;a{const r=I[t];e[t]=n[t],n[t]=r}));try{return t()}finally{r.forEach((t=>{n[t]=e[t]}))}}const M=function(){let t=!1;const n={enable:()=>{t=!0},disable:()=>{t=!1},isEnabled:()=>t};return O.forEach((t=>{n[t]=()=>{}})),n}(),R=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function C(t,n=!1){const{host:e,path:r,pass:i,port:o,projectId:s,protocol:c,publicKey:u}=t;return`${c}://${u}${n&&i?`:${i}`:""}@${e}${o?`:${o}`:""}/${r?`${r}/`:r}${s}`}function A(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function N(t){const n="string"==typeof t?function(t){const n=R.exec(t);if(!n)return void D((()=>{console.error(`Invalid Sentry Dsn: ${t}`)}));const[e,r,i="",o,s="",c]=n.slice(1);let u="",a=c;const f=a.split("/");if(f.length>1&&(u=f.slice(0,-1).join("/"),a=f.pop()),a){const t=a.match(/^\d+/);t&&(a=t[0])}return A({host:o,pass:i,path:u,projectId:a,port:s,protocol:e,publicKey:r})}(t):A(t);if(n)return n}class L extends Error{constructor(t,n="warn"){super(t),this.message=t,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=n}}function P(t,n,e){if(!(n in t))return;const r=t[n],i=e(r);"function"==typeof i&&B(i,r),t[n]=i}function U(t,n,e){try{Object.defineProperty(t,n,{value:e,writable:!0,configurable:!0})}catch(t){}}function B(t,n){try{const e=n.prototype||{};t.prototype=n.prototype=e,U(t,"__sentry_original__",n)}catch(t){}}function F(t){return t.__sentry_original__}function H(t){if(e(t))return{message:t.message,name:t.name,stack:t.stack,...W(t)};if(f(t)){const n={type:t.type,target:q(t.target),currentTarget:q(t.currentTarget),...W(t)};return"undefined"!=typeof CustomEvent&&l(t,CustomEvent)&&(n.detail=t.detail),n}return t}function q(t){try{return n=t,"undefined"!=typeof Element&&l(n,Element)?T(t):Object.prototype.toString.call(t)}catch(t){return""}var n}function W(t){if("object"==typeof t&&null!==t){const n={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n}return{}}function z(t){return X(t,new Map)}function X(t,n){if(function(t){if(!a(t))return!1;try{const n=Object.getPrototypeOf(t).constructor.name;return!n||"Object"===n}catch(t){return!0}}(t)){const e=n.get(t);if(void 0!==e)return e;const r={};n.set(t,r);for(const e of Object.keys(t))void 0!==t[e]&&(r[e]=X(t[e],n));return r}if(Array.isArray(t)){const e=n.get(t);if(void 0!==e)return e;const r=[];return n.set(t,r),t.forEach((t=>{r.push(X(t,n))})),r}return t}const G=/\(error: (.*)\)/,J=/captureMessage|captureException/;function K(...t){const n=t.sort(((t,n)=>t[0]-n[0])).map((t=>t[1]));return(t,e=0)=>{const r=[],i=t.split("\n");for(let t=e;t1024)continue;const o=G.test(e)?e.replace(G,"$1"):e;if(!o.match(/\S*Error: /)){for(const t of n){const n=t(o);if(n){r.push(n);break}}if(r.length>=50)break}}return function(t){if(!t.length)return[];const n=Array.from(t);/sentryWrapped/.test(n[n.length-1].function||"")&&n.pop();n.reverse(),J.test(n[n.length-1].function||"")&&(n.pop(),J.test(n[n.length-1].function||"")&&n.pop());return n.slice(0,50).map((t=>({...t,filename:t.filename||n[n.length-1].filename,function:t.function||"?"})))}(r)}}const V="";function Y(t){try{return t&&"function"==typeof t&&t.name||V}catch(t){return V}}const Z={},Q={};function tt(t,n){Z[t]=Z[t]||[],Z[t].push(n)}function nt(t,n){Q[t]||(n(),Q[t]=!0)}function et(t,n){const e=t&&Z[t];if(e)for(const t of e)try{t(n)}catch(t){}}function rt(){"console"in $&&O.forEach((function(t){t in $.console&&P($.console,t,(function(n){return I[t]=n,function(...n){et("console",{args:n,level:t});const e=I[t];e&&e.apply($.console,n)}}))}))}function it(){const t=$,n=t.crypto||t.msCrypto;let e=()=>16*Math.random();try{if(n&&n.randomUUID)return n.randomUUID().replace(/-/g,"");n&&n.getRandomValues&&(e=()=>{const t=new Uint8Array(1);return n.getRandomValues(t),t[0]})}catch(t){}return([1e7]+1e3+4e3+8e3+1e11).replace(/[018]/g,(t=>(t^(15&e())>>t/4).toString(16)))}function ot(t){return t.exception&&t.exception.values?t.exception.values[0]:void 0}function st(t){const{message:n,event_id:e}=t;if(n)return n;const r=ot(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||e||"":e||""}function ct(t,n,e){const r=t.exception=t.exception||{},i=r.values=r.values||[],o=i[0]=i[0]||{};o.value||(o.value=n||""),o.type||(o.type=e||"Error")}function ut(t,n){const e=ot(t);if(!e)return;const r=e.mechanism;if(e.mechanism={type:"generic",handled:!0,...r,...n},n&&"data"in n){const t={...r&&r.data,...n.data};e.mechanism.data=t}}function at(t){if(t&&t.__sentry_captured__)return!0;try{U(t,"__sentry_captured__",!0)}catch(t){}return!1}function ft(t){return Array.isArray(t)?t:[t]}const ht=$;let lt,dt,pt;function mt(){if(!ht.document)return;const t=et.bind(null,"dom"),n=yt(t,!0);ht.document.addEventListener("click",n,!1),ht.document.addEventListener("keypress",n,!1),["EventTarget","Node"].forEach((n=>{const e=ht[n]&&ht[n].prototype;e&&e.hasOwnProperty&&e.hasOwnProperty("addEventListener")&&(P(e,"addEventListener",(function(n){return function(e,r,i){if("click"===e||"keypress"==e)try{const r=this,o=r.__sentry_instrumentation_handlers__=r.__sentry_instrumentation_handlers__||{},s=o[e]=o[e]||{refCount:0};if(!s.handler){const r=yt(t);s.handler=r,n.call(this,e,r,i)}s.refCount++}catch(t){}return n.call(this,e,r,i)}})),P(e,"removeEventListener",(function(t){return function(n,e,r){if("click"===n||"keypress"==n)try{const e=this,i=e.__sentry_instrumentation_handlers__||{},o=i[n];o&&(o.refCount--,o.refCount<=0&&(t.call(this,n,o.handler,r),o.handler=void 0,delete i[n]),0===Object.keys(i).length&&delete e.__sentry_instrumentation_handlers__)}catch(t){}return t.call(this,n,e,r)}})))}))}function yt(t,n=!1){return e=>{if(!e||e._sentryCaptured)return;const r=function(t){try{return t.target}catch(t){return null}}(e);if(function(t,n){return"keypress"===t&&(!n||!n.tagName||"INPUT"!==n.tagName&&"TEXTAREA"!==n.tagName&&!n.isContentEditable)}(e.type,r))return;U(e,"_sentryCaptured",!0),r&&!r._sentryId&&U(r,"_sentryId",it());const i="keypress"===e.type?"input":e.type;if(!function(t){if(t.type!==dt)return!1;try{if(!t.target||t.target._sentryId!==pt)return!1}catch(t){}return!0}(e)){t({event:e,name:i,global:n}),dt=e.type,pt=r?r._sentryId:void 0}clearTimeout(lt),lt=ht.setTimeout((()=>{pt=void 0,dt=void 0}),1e3)}}const gt=S();function vt(){if(!("fetch"in gt))return!1;try{return new Headers,new Request("http://www.example.com"),new Response,!0}catch(t){return!1}}function _t(t){return t&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}function bt(){(function(){if("string"==typeof EdgeRuntime)return!0;if(!vt())return!1;if(_t(gt.fetch))return!0;let t=!1;const n=gt.document;if(n&&"function"==typeof n.createElement)try{const e=n.createElement("iframe");e.hidden=!0,n.head.appendChild(e),e.contentWindow&&e.contentWindow.fetch&&(t=_t(e.contentWindow.fetch)),n.head.removeChild(e)}catch(t){}return t})()&&P($,"fetch",(function(t){return function(...n){const{method:e,url:r}=function(t){if(0===t.length)return{method:"GET",url:""};if(2===t.length){const[n,e]=t;return{url:wt(n),method:Et(e,"method")?String(e.method).toUpperCase():"GET"}}const n=t[0];return{url:wt(n),method:Et(n,"method")?String(n.method).toUpperCase():"GET"}}(n),i={args:n,fetchData:{method:e,url:r},startTimestamp:Date.now()};return et("fetch",{...i}),t.apply($,n).then((t=>(et("fetch",{...i,endTimestamp:Date.now(),response:t}),t)),(t=>{throw et("fetch",{...i,endTimestamp:Date.now(),error:t}),t}))}}))}function Et(t,n){return!!t&&"object"==typeof t&&!!t[n]}function wt(t){return"string"==typeof t?t:t?Et(t,"url")?t.url:t.toString?t.toString():"":""}let $t=null;function St(){$t=$.onerror,$.onerror=function(t,n,e,r,i){const o={column:r,error:i,line:e,msg:t,url:n};return et("error",o),!(!$t||$t.__SENTRY_LOADER__)&&$t.apply(this,arguments)},$.onerror.__SENTRY_INSTRUMENTED__=!0}let xt=null;function kt(){xt=$.onunhandledrejection,$.onunhandledrejection=function(t){const n=t;return et("unhandledrejection",n),!(xt&&!xt.__SENTRY_LOADER__)||xt.apply(this,arguments)},$.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const Tt=S();const jt=$;let Ot;function It(t){const n="history";tt(n,t),nt(n,Dt)}function Dt(){if(!function(){const t=Tt.chrome,n=t&&t.app&&t.app.runtime,e="history"in Tt&&!!Tt.history.pushState&&!!Tt.history.replaceState;return!n&&e}())return;const t=jt.onpopstate;function n(t){return function(...n){const e=n.length>2?n[2]:void 0;if(e){const t=Ot,n=String(e);Ot=n;et("history",{from:t,to:n})}return t.apply(this,n)}}jt.onpopstate=function(...n){const e=jt.location.href,r=Ot;Ot=e;if(et("history",{from:r,to:e}),t)try{return t.apply(this,n)}catch(t){}},P(jt.history,"pushState",n),P(jt.history,"replaceState",n)}const Mt=$;function Rt(){if(!Mt.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;P(t,"open",(function(t){return function(...n){const e=Date.now(),r=s(n[0])?n[0].toUpperCase():void 0,i=function(t){if(s(t))return t;try{return t.toString()}catch(t){}return}(n[1]);if(!r||!i)return t.apply(this,n);this.__sentry_xhr_v3__={method:r,url:i,request_headers:{}},"POST"===r&&i.match(/sentry_key/)&&(this.__sentry_own_request__=!0);const o=()=>{const t=this.__sentry_xhr_v3__;if(t&&4===this.readyState){try{t.status_code=this.status}catch(t){}et("xhr",{args:[r,i],endTimestamp:Date.now(),startTimestamp:e,xhr:this})}};return"onreadystatechange"in this&&"function"==typeof this.onreadystatechange?P(this,"onreadystatechange",(function(t){return function(...n){return o(),t.apply(this,n)}})):this.addEventListener("readystatechange",o),P(this,"setRequestHeader",(function(t){return function(...n){const[e,r]=n,i=this.__sentry_xhr_v3__;return i&&s(e)&&s(r)&&(i.request_headers[e.toLowerCase()]=r),t.apply(this,n)}})),t.apply(this,n)}})),P(t,"send",(function(t){return function(...n){const e=this.__sentry_xhr_v3__;if(!e)return t.apply(this,n);void 0!==n[0]&&(e.body=n[0]);return et("xhr",{args:[e.method,e.url],startTimestamp:Date.now(),xhr:this}),t.apply(this,n)}}))}function Ct(t,n=100,e=1/0){try{return Nt("",t,n,e)}catch(t){return{ERROR:`**non-serializable** (${t})`}}}function At(t,n=3,e=102400){const r=Ct(t,n);return i=r,function(t){return~-encodeURI(t).split(/%..|./).length}(JSON.stringify(i))>e?At(t,n-1,e):r;var i}function Nt(t,n,e=1/0,r=1/0,i=function(){const t="function"==typeof WeakSet,n=t?new WeakSet:[];return[function(e){if(t)return!!n.has(e)||(n.add(e),!1);for(let t=0;t=r){l[t]="[MaxProperties ~]";break}const n=m[t];l[t]=Nt(t,n,f-1,r,i),p++}return s(n),l}var Lt;function Pt(t){return new Bt((n=>{n(t)}))}function Ut(t){return new Bt(((n,e)=>{e(t)}))}!function(t){t[t.PENDING=0]="PENDING";t[t.RESOLVED=1]="RESOLVED";t[t.REJECTED=2]="REJECTED"}(Lt||(Lt={}));class Bt{constructor(t){Bt.prototype.__init.call(this),Bt.prototype.__init2.call(this),Bt.prototype.__init3.call(this),Bt.prototype.__init4.call(this),this.o=Lt.PENDING,this.u=[];try{t(this.h,this.l)}catch(t){this.l(t)}}then(t,n){return new Bt(((e,r)=>{this.u.push([!1,n=>{if(t)try{e(t(n))}catch(t){r(t)}else e(n)},t=>{if(n)try{e(n(t))}catch(t){r(t)}else r(t)}]),this.p()}))}catch(t){return this.then((t=>t),t)}finally(t){return new Bt(((n,e)=>{let r,i;return this.then((n=>{i=!1,r=n,t&&t()}),(n=>{i=!0,r=n,t&&t()})).then((()=>{i?e(r):n(r)}))}))}__init(){this.h=t=>{this.m(Lt.RESOLVED,t)}}__init2(){this.l=t=>{this.m(Lt.REJECTED,t)}}__init3(){this.m=(t,n)=>{this.o===Lt.PENDING&&(h(n)?n.then(this.h,this.l):(this.o=t,this.v=n,this.p()))}}__init4(){this.p=()=>{if(this.o===Lt.PENDING)return;const t=this.u.slice();this.u=[],t.forEach((t=>{t[0]||(this.o===Lt.RESOLVED&&t[1](this.v),this.o===Lt.REJECTED&&t[2](this.v),t[0]=!0)}))}}}function Ft(t){const n=[];function e(t){return n.splice(n.indexOf(t),1)[0]}return{$:n,add:function(r){if(!(void 0===t||n.lengthe(i))).then(null,(()=>e(i).then(null,(()=>{})))),i},drain:function(t){return new Bt(((e,r)=>{let i=n.length;if(!i)return e(!0);const o=setTimeout((()=>{t&&t>0&&e(!1)}),t);n.forEach((t=>{Pt(t).then((()=>{--i||(clearTimeout(o),e(!0))}),r)}))}))}}}function Ht(t){if(!t)return{};const n=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!n)return{};const e=n[6]||"",r=n[8]||"";return{host:n[4],path:n[5],protocol:n[2],search:e,hash:r,relative:n[5]+e+r}}const qt=["fatal","error","warning","log","info","debug"];function Wt(t){return"warn"===t?"warning":qt.includes(t)?t:"log"}function zt(){return Date.now()/1e3}const Xt=function(){const{performance:t}=$;if(!t||!t.now)return zt;const n=Date.now()-t.now(),e=null==t.timeOrigin?n:t.timeOrigin;return()=>(e+t.now())/1e3}();(()=>{const{performance:t}=$;if(!t||!t.now)return;const n=36e5,e=t.now(),r=Date.now(),i=t.timeOrigin?Math.abs(t.timeOrigin+e-r):n,o=it.split("=").map((t=>decodeURIComponent(t.trim()))))).reduce(((t,[n,e])=>(t[n]=e,t)),{})}const Kt=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function Vt(t,n){const e=function(t){if(!t)return;const n=t.match(Kt);if(!n)return;let e;return"1"===n[3]?e=!0:"0"===n[3]&&(e=!1),{traceId:n[1],parentSampled:e,parentSpanId:n[2]}}(t),r=function(t){if(!s(t)&&!Array.isArray(t))return;let n={};if(Array.isArray(t))n=t.reduce(((t,n)=>{const e=Jt(n);for(const n of Object.keys(e))t[n]=e[n];return t}),{});else{if(!t)return;n=Jt(t)}const e=Object.entries(n).reduce(((t,[n,e])=>(n.match(Gt)&&(t[n.slice("sentry-".length)]=e),t)),{});return Object.keys(e).length>0?e:void 0}(n),{traceId:i,parentSpanId:o,parentSampled:c}=e||{};return e?{traceparentData:e,dynamicSamplingContext:r||{},propagationContext:{traceId:i||it(),parentSpanId:o||it().substring(16),spanId:it().substring(16),sampled:c,dsc:r||{}}}:{traceparentData:e,dynamicSamplingContext:void 0,propagationContext:{traceId:i||it(),spanId:it().substring(16)}}}function Yt(t,n=[]){return[t,n]}function Zt(t,n){const[e,r]=t;return[e,[...r,n]]}function Qt(t,n){const e=t[1];for(const t of e){if(n(t,t[0].type))return!0}return!1}function tn(t,n){return(n||new TextEncoder).encode(t)}function nn(t,n){const[e,r]=t;let i=JSON.stringify(e);function o(t){"string"==typeof i?i="string"==typeof t?i+t:[tn(i,n),t]:i.push("string"==typeof t?tn(t,n):t)}for(const t of r){const[n,e]=t;if(o(`\n${JSON.stringify(n)}\n`),"string"==typeof e||e instanceof Uint8Array)o(e);else{let t;try{t=JSON.stringify(e)}catch(n){t=JSON.stringify(Ct(e))}o(t)}}return"string"==typeof i?i:function(t){const n=t.reduce(((t,n)=>t+n.length),0),e=new Uint8Array(n);let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}(i)}function en(t,n){const e="string"==typeof t.data?tn(t.data,n):t.data;return[z({type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType}),e]}const rn={session:"session",sessions:"session",attachment:"attachment",transaction:"transaction",event:"error",client_report:"internal",user_report:"default",profile:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",feedback:"feedback",statsd:"unknown"};function on(t){return rn[t]}function sn(t){if(!t||!t.sdk)return;const{name:n,version:e}=t.sdk;return{name:n,version:e}}function cn(t,{statusCode:n,headers:e},r=Date.now()){const i={...t},o=e&&e["x-sentry-rate-limits"],s=e&&e["retry-after"];if(o)for(const t of o.trim().split(",")){const[n,e]=t.split(":",2),o=parseInt(n,10),s=1e3*(isNaN(o)?60:o);if(e)for(const t of e.split(";"))i[t]=r+s;else i.all=r+s}else s?i.all=r+function(t,n=Date.now()){const e=parseInt(`${t}`,10);if(!isNaN(e))return 1e3*e;const r=Date.parse(`${t}`);return isNaN(r)?6e4:r-n}(s,r):429===n&&(i.all=r+6e4);return i}function un(t,n){const e={type:n.name||n.constructor.name,value:n.message},r=function(t,n){return t(n.stack||"",1)}(t,n);return r.length&&(e.stacktrace={frames:r}),e}class an{static __initStatic(){this.id="Feedback"}constructor(t){this.name=an.id,D((()=>{console.warn("You are using new Feedback() even though this bundle does not include Feedback.")}))}setupOnce(){}openDialog(){}closeDialog(){}attachTo(){}createWidget(){}removeWidget(){}getWidget(){}remove(){}}an.__initStatic();class fn{static __initStatic(){this.id="Replay"}constructor(t){this.name=fn.id,D((()=>{console.warn("You are using new Replay() even though this bundle does not include replay.")}))}setupOnce(){}start(){}stop(){}flush(){}}fn.__initStatic();class hn{static __initStatic(){this.id="BrowserTracing"}constructor(t){this.name=hn.id,D((()=>{console.warn("You are using new BrowserTracing() even though this bundle does not include tracing.")}))}setupOnce(){}}hn.__initStatic();const ln="production";function dn(){return x("globalEventProcessors",(()=>[]))}function pn(t){dn().push(t)}function mn(t,n,e,r=0){return new Bt(((i,o)=>{const s=t[r];if(null===n||"function"!=typeof s)i(n);else{const c=s({...n},e);h(c)?c.then((n=>mn(t,n,e,r+1).then(i))).then(null,o):mn(t,c,e,r+1).then(i).then(null,o)}}))}function yn(t){const n=Xt(),e={sid:it(),init:!0,timestamp:n,started:n,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>function(t){return z({sid:`${t.sid}`,init:t.init,started:new Date(1e3*t.started).toISOString(),timestamp:new Date(1e3*t.timestamp).toISOString(),status:t.status,errors:t.errors,did:"number"==typeof t.did||"string"==typeof t.did?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}})}(e)};return t&&gn(e,t),e}function gn(t,n={}){if(n.user&&(!t.ipAddress&&n.user.ip_address&&(t.ipAddress=n.user.ip_address),t.did||n.did||(t.did=n.user.id||n.user.email||n.user.username)),t.timestamp=n.timestamp||Xt(),n.abnormal_mechanism&&(t.abnormal_mechanism=n.abnormal_mechanism),n.ignoreDuration&&(t.ignoreDuration=n.ignoreDuration),n.sid&&(t.sid=32===n.sid.length?n.sid:it()),void 0!==n.init&&(t.init=n.init),!t.did&&n.did&&(t.did=`${n.did}`),"number"==typeof n.started&&(t.started=n.started),t.ignoreDuration)t.duration=void 0;else if("number"==typeof n.duration)t.duration=n.duration;else{const n=t.timestamp-t.started;t.duration=n>=0?n:0}n.release&&(t.release=n.release),n.environment&&(t.environment=n.environment),!t.ipAddress&&n.ipAddress&&(t.ipAddress=n.ipAddress),!t.userAgent&&n.userAgent&&(t.userAgent=n.userAgent),"number"==typeof n.errors&&(t.errors=n.errors),n.status&&(t.status=n.status)}function vn(t,n){let e={};n?e={status:n}:"ok"===t.status&&(e={status:"exited"}),gn(t,e)}function _n(t){const{spanId:n,traceId:e}=t.spanContext(),{data:r,op:i,parent_span_id:o,status:s,tags:c,origin:u}=En(t);return z({data:r,op:i,parent_span_id:o,span_id:n,status:s,tags:c,trace_id:e,origin:u})}function bn(t){return t>9999999999?t/1e3:t}function En(t){return function(t){return"function"==typeof t.getSpanJSON}(t)?t.getSpanJSON():"function"==typeof t.toJSON?t.toJSON():{}}function wn(t,n,e,r,i,o){const{normalizeDepth:s=3,normalizeMaxBreadth:c=1e3}=t,u={...n,event_id:n.event_id||e.event_id||it(),timestamp:n.timestamp||zt()},a=e.integrations||t.integrations.map((t=>t.name));!function(t,n){const{environment:e,release:r,dist:i,maxValueLength:o=250}=n;"environment"in t||(t.environment="environment"in n?e:ln);void 0===t.release&&void 0!==r&&(t.release=r);void 0===t.dist&&void 0!==i&&(t.dist=i);t.message&&(t.message=p(t.message,o));const s=t.exception&&t.exception.values&&t.exception.values[0];s&&s.value&&(s.value=p(s.value,o));const c=t.request;c&&c.url&&(c.url=p(c.url,o))}(u,t),function(t,n){n.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...n])}(u,a),void 0===n.type&&function(t,n){const e=$._sentryDebugIds;if(!e)return;let r;const i=$n.get(n);i?r=i:(r=new Map,$n.set(n,r));const o=Object.keys(e).reduce(((t,i)=>{let o;const s=r.get(i);s?o=s:(o=n(i),r.set(i,o));for(let n=o.length-1;n>=0;n--){const r=o[n];if(r.filename){t[r.filename]=e[i];break}}return t}),{});try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.filename&&(t.debug_id=o[t.filename])}))}))}catch(t){}}(u,t.stackParser);const f=function(t,n){if(!n)return t;const e=t?t.clone():new Hn;return e.update(n),e}(r,e.captureContext);e.mechanism&&ut(u,e.mechanism);const h=i&&i.getEventProcessors?i.getEventProcessors():[],l=function(){Fn||(Fn=new Hn);return Fn}().getScopeData();if(o){Un(l,o.getScopeData())}if(f){Un(l,f.getScopeData())}const d=[...e.attachments||[],...l.attachments];d.length&&(e.attachments=d),Pn(u,l);return mn([...h,...dn(),...l.eventProcessors],u,e).then((t=>(t&&function(t){const n={};try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.debug_id&&(t.abs_path?n[t.abs_path]=t.debug_id:t.filename&&(n[t.filename]=t.debug_id),delete t.debug_id)}))}))}catch(t){}if(0===Object.keys(n).length)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const e=t.debug_meta.images;Object.keys(n).forEach((t=>{e.push({type:"sourcemap",code_file:t,debug_id:n[t]})}))}(t),"number"==typeof s&&s>0?function(t,n,e){if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map((t=>({...t,...t.data&&{data:Ct(t.data,n,e)}})))},...t.user&&{user:Ct(t.user,n,e)},...t.contexts&&{contexts:Ct(t.contexts,n,e)},...t.extra&&{extra:Ct(t.extra,n,e)}};t.contexts&&t.contexts.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=Ct(t.contexts.trace.data,n,e)));t.spans&&(r.spans=t.spans.map((t=>{const r=En(t).data;return r&&(t.data=Ct(r,n,e)),t})));return r}(t,s,c):t)))}const $n=new WeakMap;function Sn(t){if(t)return function(t){return t instanceof Hn||"function"==typeof t}(t)||function(t){return Object.keys(t).some((t=>xn.includes(t)))}(t)?{captureContext:t}:t}const xn=["user","level","extra","contexts","tags","fingerprint","requestSession","propagationContext"];function captureException(t,n){return Vn().captureException(t,Sn(n))}function kn(t,n){return Vn().captureEvent(t,n)}function Tn(t,n){Vn().addBreadcrumb(t,n)}function jn(...t){const n=Vn();if(2===t.length){const[e,r]=t;return e?n.withScope((()=>(n.getStackTop().scope=e,r(e)))):n.withScope(r)}return n.withScope(t[0])}function On(){return Vn().getClient()}function In(){return Vn().getScope()}function Dn(t){const n=On(),e=Yn(),r=In(),{release:i,environment:o=ln}=n&&n.getOptions()||{},{userAgent:s}=$.navigator||{},c=yn({release:i,environment:o,user:r.getUser()||e.getUser(),...s&&{userAgent:s},...t}),u=e.getSession();return u&&"ok"===u.status&&gn(u,{status:"exited"}),Mn(),e.setSession(c),r.setSession(c),c}function Mn(){const t=Yn(),n=In(),e=n.getSession()||t.getSession();e&&vn(e),Rn(),t.setSession(),n.setSession()}function Rn(){const t=Yn(),n=In(),e=On(),r=n.getSession()||t.getSession();r&&e&&e.captureSession&&e.captureSession(r)}function Cn(t=!1){t?Mn():Rn()}function An(t){return t.transaction}function Nn(t,n,e){const r=n.getOptions(),{publicKey:i}=n.getDsn()||{},{segment:o}=e&&e.getUser()||{},s=z({environment:r.environment||ln,release:r.release,user_segment:o,public_key:i,trace_id:t});return n.emit&&n.emit("createDsc",s),s}function Ln(t){const n=On();if(!n)return{};const e=Nn(En(t).trace_id||"",n,In()),r=An(t);if(!r)return e;const i=r&&r._frozenDynamicSamplingContext;if(i)return i;const{sampleRate:o,source:s}=r.metadata;null!=o&&(e.sample_rate=`${o}`);const c=En(r);return s&&"url"!==s&&(e.transaction=c.description),e.sampled=String(function(t){const{traceFlags:n}=t.spanContext();return Boolean(1&n)}(r)),n.emit&&n.emit("createDsc",e),e}function Pn(t,n){const{fingerprint:e,span:r,breadcrumbs:i,sdkProcessingMetadata:o}=n;!function(t,n){const{extra:e,tags:r,user:i,contexts:o,level:s,transactionName:c}=n,u=z(e);u&&Object.keys(u).length&&(t.extra={...u,...t.extra});const a=z(r);a&&Object.keys(a).length&&(t.tags={...a,...t.tags});const f=z(i);f&&Object.keys(f).length&&(t.user={...f,...t.user});const h=z(o);h&&Object.keys(h).length&&(t.contexts={...h,...t.contexts});s&&(t.level=s);c&&(t.transaction=c)}(t,n),r&&function(t,n){t.contexts={trace:_n(n),...t.contexts};const e=An(n);if(e){t.sdkProcessingMetadata={dynamicSamplingContext:Ln(n),...t.sdkProcessingMetadata};const r=En(e).description;r&&(t.tags={transaction:r,...t.tags})}}(t,r),function(t,n){t.fingerprint=t.fingerprint?ft(t.fingerprint):[],n&&(t.fingerprint=t.fingerprint.concat(n));t.fingerprint&&!t.fingerprint.length&&delete t.fingerprint}(t,e),function(t,n){const e=[...t.breadcrumbs||[],...n];t.breadcrumbs=e.length?e:void 0}(t,i),function(t,n){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...n}}(t,o)}function Un(t,n){const{extra:e,tags:r,user:i,contexts:o,level:s,sdkProcessingMetadata:c,breadcrumbs:u,fingerprint:a,eventProcessors:f,attachments:h,propagationContext:l,transactionName:d,span:p}=n;Bn(t,"extra",e),Bn(t,"tags",r),Bn(t,"user",i),Bn(t,"contexts",o),Bn(t,"sdkProcessingMetadata",c),s&&(t.level=s),d&&(t.transactionName=d),p&&(t.span=p),u.length&&(t.breadcrumbs=[...t.breadcrumbs,...u]),a.length&&(t.fingerprint=[...t.fingerprint,...a]),f.length&&(t.eventProcessors=[...t.eventProcessors,...f]),h.length&&(t.attachments=[...t.attachments,...h]),t.propagationContext={...t.propagationContext,...l}}function Bn(t,n,e){if(e&&Object.keys(e).length){t[n]={...t[n]};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[n][r]=e[r])}}let Fn;class Hn{constructor(){this._=!1,this.S=[],this.k=[],this.T=[],this.j=[],this.O={},this.I={},this.D={},this.M={},this.R={},this.C=qn()}static clone(t){return t?t.clone():new Hn}clone(){const t=new Hn;return t.T=[...this.T],t.I={...this.I},t.D={...this.D},t.M={...this.M},t.O=this.O,t.A=this.A,t.N=this.N,t.L=this.L,t.P=this.P,t.U=this.U,t.k=[...this.k],t.B=this.B,t.j=[...this.j],t.R={...this.R},t.C={...this.C},t.F=this.F,t}setClient(t){this.F=t}getClient(){return this.F}addScopeListener(t){this.S.push(t)}addEventProcessor(t){return this.k.push(t),this}setUser(t){return this.O=t||{email:void 0,id:void 0,ip_address:void 0,segment:void 0,username:void 0},this.L&&gn(this.L,{user:t}),this.H(),this}getUser(){return this.O}getRequestSession(){return this.B}setRequestSession(t){return this.B=t,this}setTags(t){return this.I={...this.I,...t},this.H(),this}setTag(t,n){return this.I={...this.I,[t]:n},this.H(),this}setExtras(t){return this.D={...this.D,...t},this.H(),this}setExtra(t,n){return this.D={...this.D,[t]:n},this.H(),this}setFingerprint(t){return this.U=t,this.H(),this}setLevel(t){return this.A=t,this.H(),this}setTransactionName(t){return this.P=t,this.H(),this}setContext(t,n){return null===n?delete this.M[t]:this.M[t]=n,this.H(),this}setSpan(t){return this.N=t,this.H(),this}getSpan(){return this.N}getTransaction(){const t=this.N;return t&&t.transaction}setSession(t){return t?this.L=t:delete this.L,this.H(),this}getSession(){return this.L}update(t){if(!t)return this;const n="function"==typeof t?t(this):t;if(n instanceof Hn){const t=n.getScopeData();this.I={...this.I,...t.tags},this.D={...this.D,...t.extra},this.M={...this.M,...t.contexts},t.user&&Object.keys(t.user).length&&(this.O=t.user),t.level&&(this.A=t.level),t.fingerprint.length&&(this.U=t.fingerprint),n.getRequestSession()&&(this.B=n.getRequestSession()),t.propagationContext&&(this.C=t.propagationContext)}else if(a(n)){const n=t;this.I={...this.I,...n.tags},this.D={...this.D,...n.extra},this.M={...this.M,...n.contexts},n.user&&(this.O=n.user),n.level&&(this.A=n.level),n.fingerprint&&(this.U=n.fingerprint),n.requestSession&&(this.B=n.requestSession),n.propagationContext&&(this.C=n.propagationContext)}return this}clear(){return this.T=[],this.I={},this.D={},this.O={},this.M={},this.A=void 0,this.P=void 0,this.U=void 0,this.B=void 0,this.N=void 0,this.L=void 0,this.H(),this.j=[],this.C=qn(),this}addBreadcrumb(t,n){const e="number"==typeof n?n:100;if(e<=0)return this;const r={timestamp:zt(),...t},i=this.T;return i.push(r),this.T=i.length>e?i.slice(-e):i,this.H(),this}getLastBreadcrumb(){return this.T[this.T.length-1]}clearBreadcrumbs(){return this.T=[],this.H(),this}addAttachment(t){return this.j.push(t),this}getAttachments(){return this.getScopeData().attachments}clearAttachments(){return this.j=[],this}getScopeData(){const{T:t,j:n,M:e,I:r,D:i,O:o,A:s,U:c,k:u,C:a,R:f,P:h,N:l}=this;return{breadcrumbs:t,attachments:n,contexts:e,tags:r,extra:i,user:o,level:s,fingerprint:c||[],eventProcessors:u,propagationContext:a,sdkProcessingMetadata:f,transactionName:h,span:l}}applyToEvent(t,n={},e=[]){Pn(t,this.getScopeData());return mn([...e,...dn(),...this.k],t,n)}setSDKProcessingMetadata(t){return this.R={...this.R,...t},this}setPropagationContext(t){return this.C=t,this}getPropagationContext(){return this.C}captureException(t,n){const e=n&&n.event_id?n.event_id:it();if(!this.F)return M.warn("No client configured on scope - will not capture exception!"),e;const r=new Error("Sentry syntheticException");return this.F.captureException(t,{originalException:t,syntheticException:r,...n,event_id:e},this),e}captureMessage(t,n,e){const r=e&&e.event_id?e.event_id:it();if(!this.F)return M.warn("No client configured on scope - will not capture message!"),r;const i=new Error(t);return this.F.captureMessage(t,n,{originalException:t,syntheticException:i,...e,event_id:r},this),r}captureEvent(t,n){const e=n&&n.event_id?n.event_id:it();return this.F?(this.F.captureEvent(t,{...n,event_id:e},this),e):(M.warn("No client configured on scope - will not capture event!"),e)}H(){this._||(this._=!0,this.S.forEach((t=>{t(this)})),this._=!1)}}function qn(){return{traceId:it(),spanId:it().substring(16)}}const Wn="7.102.0",zn=parseFloat(Wn),Xn=100;class Gn{constructor(t,n,e,r=zn){let i,o;this.q=r,n?i=n:(i=new Hn,i.setClient(t)),e?o=e:(o=new Hn,o.setClient(t)),this.W=[{scope:i}],t&&this.bindClient(t),this.X=o}isOlderThan(t){return this.q(this.popScope(),t)),(t=>{throw this.popScope(),t})):(this.popScope(),e)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this.X}getStack(){return this.W}getStackTop(){return this.W[this.W.length-1]}captureException(t,n){const e=this.G=n&&n.event_id?n.event_id:it(),r=new Error("Sentry syntheticException");return this.getScope().captureException(t,{originalException:t,syntheticException:r,...n,event_id:e}),e}captureMessage(t,n,e){const r=this.G=e&&e.event_id?e.event_id:it(),i=new Error(t);return this.getScope().captureMessage(t,n,{originalException:t,syntheticException:i,...e,event_id:r}),r}captureEvent(t,n){const e=n&&n.event_id?n.event_id:it();return t.type||(this.G=e),this.getScope().captureEvent(t,{...n,event_id:e}),e}lastEventId(){return this.G}addBreadcrumb(t,n){const{scope:e,client:r}=this.getStackTop();if(!r)return;const{beforeBreadcrumb:i=null,maxBreadcrumbs:o=Xn}=r.getOptions&&r.getOptions()||{};if(o<=0)return;const s={timestamp:zt(),...t},c=i?D((()=>i(s,n))):s;null!==c&&(r.emit&&r.emit("beforeAddBreadcrumb",c,n),e.addBreadcrumb(c,o))}setUser(t){this.getScope().setUser(t),this.getIsolationScope().setUser(t)}setTags(t){this.getScope().setTags(t),this.getIsolationScope().setTags(t)}setExtras(t){this.getScope().setExtras(t),this.getIsolationScope().setExtras(t)}setTag(t,n){this.getScope().setTag(t,n),this.getIsolationScope().setTag(t,n)}setExtra(t,n){this.getScope().setExtra(t,n),this.getIsolationScope().setExtra(t,n)}setContext(t,n){this.getScope().setContext(t,n),this.getIsolationScope().setContext(t,n)}configureScope(t){const{scope:n,client:e}=this.getStackTop();e&&t(n)}run(t){const n=Kn(this);try{t(this)}finally{Kn(n)}}getIntegration(t){const n=this.getClient();if(!n)return null;try{return n.getIntegration(t)}catch(t){return null}}startTransaction(t,n){const e=this.J("startTransaction",t,n);return e}traceHeaders(){return this.J("traceHeaders")}captureSession(t=!1){if(t)return this.endSession();this.K()}endSession(){const t=this.getStackTop().scope,n=t.getSession();n&&vn(n),this.K(),t.setSession()}startSession(t){const{scope:n,client:e}=this.getStackTop(),{release:r,environment:i=ln}=e&&e.getOptions()||{},{userAgent:o}=$.navigator||{},s=yn({release:r,environment:i,user:n.getUser(),...o&&{userAgent:o},...t}),c=n.getSession&&n.getSession();return c&&"ok"===c.status&&gn(c,{status:"exited"}),this.endSession(),n.setSession(s),s}shouldSendDefaultPii(){const t=this.getClient(),n=t&&t.getOptions();return Boolean(n&&n.sendDefaultPii)}K(){const{scope:t,client:n}=this.getStackTop(),e=t.getSession();e&&n&&n.captureSession&&n.captureSession(e)}J(t,...n){const e=Jn().__SENTRY__;if(e&&e.extensions&&"function"==typeof e.extensions[t])return e.extensions[t].apply(this,n)}}function Jn(){return $.__SENTRY__=$.__SENTRY__||{extensions:{},hub:void 0},$}function Kn(t){const n=Jn(),e=Qn(n);return te(n,t),e}function Vn(){const t=Jn();if(t.__SENTRY__&&t.__SENTRY__.acs){const n=t.__SENTRY__.acs.getCurrentHub();if(n)return n}return function(t=Jn()){n=t,n&&n.__SENTRY__&&n.__SENTRY__.hub&&!Qn(t).isOlderThan(zn)||te(t,new Gn);var n;return Qn(t)}(t)}function Yn(){return Vn().getIsolationScope()}function Zn(t,n={}){const e=Jn();return e.__SENTRY__&&e.__SENTRY__.acs?e.__SENTRY__.acs.runWithAsyncContext(t,n):t()}function Qn(t){return x("hub",(()=>new Gn),t)}function te(t,n){if(!t)return!1;return(t.__SENTRY__=t.__SENTRY__||{}).hub=n,!0}function ne(t,n,e=(()=>{})){let r;try{r=t()}catch(t){throw n(t),e(),t}return function(t,n,e){if(h(t))return t.then((t=>(e(),t)),(t=>{throw n(t),e(),t}));return e(),t}(r,n,e)}function ee(t){if("boolean"==typeof __SENTRY_TRACING__&&!__SENTRY_TRACING__)return!1;const n=On(),e=t||n&&n.getOptions();return!!e&&(e.enableTracing||"tracesSampleRate"in e||"tracesSampler"in e)}function re(){return In().getSpan()}function ie(t,n,e){if(!ee())return;const r=Yn(),i=In();let o;if(n)o=n.startChild(e);else{const{traceId:n,dsc:s,parentSpanId:c,sampled:u}={...r.getPropagationContext(),...i.getPropagationContext()};o=t.startTransaction({traceId:n,parentSpanId:c,parentSampled:u,...e,metadata:{dynamicSamplingContext:s,...e.metadata}})}return se(o,i,r),o}function oe(t){if(t.startTime){const e={...t};return e.startTimestamp="number"==typeof(n=t.startTime)?bn(n):Array.isArray(n)?n[0]+n[1]/1e9:n instanceof Date?bn(n.getTime()):Xt(),delete e.startTime,e}var n;return t}function se(t,n,e){t&&(U(t,"_sentryIsolationScope",e),U(t,"_sentryScope",n))}let ce;function ue(t,n,e,r,i,o){const s=re();if(s){const c=function(t){return ce?ce.get(t):void 0}(s)||new Map,u=`${t}:${n}@${r}`,a=c.get(o);if(a){const[,t]=a;c.set(o,[u,{min:Math.min(t.min,e),max:Math.max(t.max,e),count:t.count+=1,sum:t.sum+=e,tags:t.tags}])}else c.set(o,[u,{min:e,max:e,count:1,sum:e,tags:i}]);ce||(ce=new WeakMap),ce.set(s,c)}}function ae(t,n,e,r){const i=sn(e),o=t.type&&"replay_event"!==t.type?t.type:"event";!function(t,n){n&&(t.sdk=t.sdk||{},t.sdk.name=t.sdk.name||n.name,t.sdk.version=t.sdk.version||n.version,t.sdk.integrations=[...t.sdk.integrations||[],...n.integrations||[]],t.sdk.packages=[...t.sdk.packages||[],...n.packages||[]])}(t,e&&e.sdk);const s=function(t,n,e,r){const i=t.sdkProcessingMetadata&&t.sdkProcessingMetadata.dynamicSamplingContext;return{event_id:t.event_id,sent_at:(new Date).toISOString(),...n&&{sdk:n},...!!e&&r&&{dsn:C(r)},...i&&{trace:z({...i})}}}(t,i,r,n);delete t.sdkProcessingMetadata;return Yt(s,[[{type:o},t]])}function fe(t){const n=t.protocol?`${t.protocol}:`:"",e=t.port?`:${t.port}`:"";return`${n}//${t.host}${e}${t.path?`/${t.path}`:""}/api/`}function he(t,n){return e={sentry_key:t.publicKey,sentry_version:"7",...n&&{sentry_client:`${n.name}/${n.version}`}},Object.keys(e).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`)).join("&");var e}function le(t,n={}){const e="string"==typeof n?n:n.tunnel,r="string"!=typeof n&&n.V?n.V.sdk:void 0;return e||`${function(t){return`${fe(t)}${t.projectId}/envelope/`}(t)}?${he(t,r)}`}const de=[];function pe(t){const n=t.defaultIntegrations||[],e=t.integrations;let r;n.forEach((t=>{t.isDefaultInstance=!0})),r=Array.isArray(e)?[...n,...e]:"function"==typeof e?ft(e(n)):n;const i=function(t){const n={};return t.forEach((t=>{const{name:e}=t,r=n[e];r&&!r.isDefaultInstance&&t.isDefaultInstance||(n[e]=t)})),Object.keys(n).map((t=>n[t]))}(r),o=function(t,n){for(let e=0;e"Debug"===t.name));if(-1!==o){const[t]=i.splice(o,1);i.push(t)}return i}function me(t,n){for(const e of n)e&&e.afterAllSetup&&e.afterAllSetup(t)}function ye(t,n,e){if(!e[n.name]){if(e[n.name]=n,-1===de.indexOf(n.name)&&(n.setupOnce(pn,Vn),de.push(n.name)),n.setup&&"function"==typeof n.setup&&n.setup(t),t.on&&"function"==typeof n.preprocessEvent){const e=n.preprocessEvent.bind(n);t.on("preprocessEvent",((n,r)=>e(n,r,t)))}if(t.addEventProcessor&&"function"==typeof n.processEvent){const e=n.processEvent.bind(n),r=Object.assign(((n,r)=>e(n,r,t)),{id:n.name});t.addEventProcessor(r)}}}function ge(t,n){return Object.assign((function(...t){return n(...t)}),{id:t})}const ve=/[^a-zA-Z0-9_/.-]+/g,_e=/[^\w\d\s_:/@.{}[\]$-]+/g;function be(t,n,e,r){const i={sent_at:(new Date).toISOString()};e&&e.sdk&&(i.sdk={name:e.sdk.name,version:e.sdk.version}),r&&n&&(i.dsn=C(n));const o=function(t){const n=function(t){let n="";for(const e of t){const t=Object.entries(e.tags),r=t.length>0?`|#${t.map((([t,n])=>`${t}:${n}`)).join(",")}`:"";n+=`${e.name}@${e.unit}:${e.metric}|${e.metricType}${r}|T${e.timestamp}\n`}return n}(t);return[{type:"statsd",length:n.length},n]}(t);return Yt(i,[o])}function Ee(t){return void 0===t.type}function we(t){return"transaction"===t.type}const $e={c:class{constructor(t){this.v=t}get weight(){return 1}add(t){this.v+=t}toString(){return`${this.v}`}},g:class{constructor(t){this.Y=t,this.Z=t,this.tt=t,this.nt=t,this.et=1}get weight(){return 5}add(t){this.Y=t,tthis.tt&&(this.tt=t),this.nt+=t,this.et++}toString(){return`${this.Y}:${this.Z}:${this.tt}:${this.nt}:${this.et}`}},d:class{constructor(t){this.v=[t]}get weight(){return this.v.length}add(t){this.v.push(t)}toString(){return this.v.join(":")}},s:class{constructor(t){this.first=t,this.v=new Set([t])}get weight(){return this.v.size}add(t){this.v.add(t)}toString(){return Array.from(this.v).map((t=>"string"==typeof t?function(t){let n=0;for(let e=0;e>>0}(t):t)).join(":")}}};function Se(t){const n=Vn().getStackTop();n.client=t,n.scope.setClient(t)}function xe(t,n,e=Ft(t.bufferSize||30)){let r={};function i(i){const o=[];if(Qt(i,((n,e)=>{const i=on(e);if(function(t,n,e=Date.now()){return function(t,n){return t[n]||t.all||0}(t,n)>e}(r,i)){const r=ke(n,e);t.recordDroppedEvent("ratelimit_backoff",i,r)}else o.push(n)})),0===o.length)return Pt();const s=Yt(i[0],o),c=n=>{Qt(s,((e,r)=>{const i=ke(e,r);t.recordDroppedEvent(n,on(r),i)}))};return e.add((()=>n({body:nn(s,t.textEncoder)}).then((t=>(r=cn(r,t),t)),(t=>{throw c("network_error"),t})))).then((t=>t),(t=>{if(t instanceof L)return c("queue_overflow"),Pt();throw t}))}return i.__sentry__baseTransport__=!0,{send:i,flush:t=>e.drain(t)}}function ke(t,n){if("event"===n||"transaction"===n)return Array.isArray(t)?t[1]:void 0}const Te=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/],je=[/^.*\/healthcheck$/,/^.*\/healthy$/,/^.*\/live$/,/^.*\/ready$/,/^.*\/heartbeat$/,/^.*\/health$/,/^.*\/healthz$/],Oe="InboundFilters",Ie=(t={})=>({name:Oe,setupOnce(){},processEvent(n,e,r){const i=r.getOptions(),o=function(t={},n={}){return{allowUrls:[...t.allowUrls||[],...n.allowUrls||[]],denyUrls:[...t.denyUrls||[],...n.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...n.ignoreErrors||[],...t.disableErrorDefaults?[]:Te],ignoreTransactions:[...t.ignoreTransactions||[],...n.ignoreTransactions||[],...t.disableTransactionDefaults?[]:je],ignoreInternal:void 0===t.ignoreInternal||t.ignoreInternal}}(t,i);return function(t,n){if(n.ignoreInternal&&function(t){try{return"SentryError"===t.exception.values[0].type}catch(t){}return!1}(t))return!0;if(function(t,n){if(t.type||!n||!n.length)return!1;return function(t){const n=[];t.message&&n.push(t.message);let e;try{e=t.exception.values[t.exception.values.length-1]}catch(t){}e&&e.value&&(n.push(e.value),e.type&&n.push(`${e.type}: ${e.value}`));return n}(t).some((t=>g(t,n)))}(t,n.ignoreErrors))return!0;if(function(t,n){if("transaction"!==t.type||!n||!n.length)return!1;const e=t.transaction;return!!e&&g(e,n)}(t,n.ignoreTransactions))return!0;if(function(t,n){if(!n||!n.length)return!1;const e=Me(t);return!!e&&g(e,n)}(t,n.denyUrls))return!0;if(!function(t,n){if(!n||!n.length)return!0;const e=Me(t);return!e||g(e,n)}(t,n.allowUrls))return!0;return!1}(n,o)?null:n}}),De=ge(Oe,Ie);function Me(t){try{let n;try{n=t.exception.values[0].stacktrace.frames}catch(t){}return n?function(t=[]){for(let n=t.length-1;n>=0;n--){const e=t[n];if(e&&""!==e.filename&&"[native code]"!==e.filename)return e.filename||null}return null}(n):null}catch(t){return null}}let Re;const Ce="FunctionToString",Ae=new WeakMap,Ne=()=>({name:Ce,setupOnce(){Re=Function.prototype.toString;try{Function.prototype.toString=function(...t){const n=F(this),e=Ae.has(On())&&void 0!==n?n:this;return Re.apply(e,t)}}catch(t){}},setup(t){Ae.set(t,!0)}}),Le=ge(Ce,Ne),Pe="LinkedErrors",Ue=ge(Pe,((t={})=>{const n=t.limit||5,e=t.key||"cause";return{name:Pe,setupOnce(){},preprocessEvent(t,r,i){const o=i.getOptions();v(un,o.stackParser,o.maxValueLength,e,n,t,r)}}}));var Be=Object.freeze({__proto__:null,FunctionToString:Le,InboundFilters:De,LinkedErrors:Ue});class Fe{constructor(t){this.F=t,this.rt=new Map,this.it=setInterval((()=>this.flush()),5e3)}add(t,n,e,r="none",i={},o=Xt()){const s=Math.floor(o),c=n.replace(ve,"_"),u=function(t){const n={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e.replace(ve,"_")]=String(t[e]).replace(_e,""));return n}(i),a=function(t,n,e,r){return`${t}${n}${e}${Object.entries(z(r)).sort(((t,n)=>t[0].localeCompare(n[0])))}`}(t,c,r,u);let f=this.rt.get(a);const h=f&&"s"===t?f.metric.weight:0;f?(f.metric.add(e),f.timestampt));this.F.captureAggregateMetrics(t)}this.rt.clear()}}close(){clearInterval(this.it),this.flush()}}const He="MetricsAggregator",qe=()=>({name:He,setupOnce(){},setup(t){t.metricsAggregator=new Fe(t)}});function We(t,n,e,r={}){const i=On(),o=In();if(i){if(!i.metricsAggregator)return;const{unit:s,tags:c,timestamp:u}=r,{release:a,environment:f}=i.getOptions(),h=o.getTransaction(),l={};a&&(l.release=a),f&&(l.environment=f),h&&(l.transaction=En(h).description||""),i.metricsAggregator.add(t,n,e,s,{...l,...c},u)}}const ze={increment:function(t,n=1,e){We("c",t,n,e)},distribution:function(t,n,e){We("d",t,n,e)},set:function(t,n,e){We("s",t,n,e)},gauge:function(t,n,e){We("g",t,n,e)},MetricsAggregator:ge(He,qe),metricsAggregatorIntegration:qe},Xe=Be,Ge=$;let Je=0;function Ke(){return Je>0}function Ve(){Je++,setTimeout((()=>{Je--}))}function Ye(t,n={},e){if("function"!=typeof t)return t;try{const n=t.__sentry_wrapped__;if(n)return n;if(F(t))return t}catch(n){return t}const sentryWrapped=function(){const r=Array.prototype.slice.call(arguments);try{e&&"function"==typeof e&&e.apply(this,arguments);const i=r.map((t=>Ye(t,n)));return t.apply(this,i)}catch(t){throw Ve(),jn((e=>{e.addEventProcessor((t=>(n.mechanism&&(ct(t,void 0,void 0),ut(t,n.mechanism)),t.extra={...t.extra,arguments:r},t))),captureException(t)})),t}};try{for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&(sentryWrapped[n]=t[n])}catch(t){}B(sentryWrapped,t),U(t,"__sentry_wrapped__",sentryWrapped);try{Object.getOwnPropertyDescriptor(sentryWrapped,"name").configurable&&Object.defineProperty(sentryWrapped,"name",{get:()=>t.name})}catch(t){}return sentryWrapped}function Ze(t,n){const e=tr(t,n),r={type:n&&n.name,value:er(n)};return e.length&&(r.stacktrace={frames:e}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function Qe(t,n){return{exception:{values:[Ze(t,n)]}}}function tr(t,n){const e=n.stacktrace||n.stack||"",r=function(t){if(t){if("number"==typeof t.framesToPop)return t.framesToPop;if(nr.test(t.message))return 1}return 0}(n);try{return t(e,r)}catch(t){}return[]}const nr=/Minified React error #\d+;/i;function er(t){const n=t&&t.message;return n?n.error&&"string"==typeof n.error.message?n.error.message:n:"No error message"}function rr(t,n,e,r){const i=or(t,n,e&&e.syntheticException||void 0,r);return ut(i),i.level="error",e&&e.event_id&&(i.event_id=e.event_id),Pt(i)}function ir(t,n,e="info",r,i){const o=sr(t,n,r&&r.syntheticException||void 0,i);return o.level=e,r&&r.event_id&&(o.event_id=r.event_id),Pt(o)}function or(t,n,s,c,u){let h;if(i(n)&&n.error){return Qe(t,n.error)}if(o(n)||r(n,"DOMException")){const e=n;if("stack"in n)h=Qe(t,n);else{const n=e.name||(o(e)?"DOMError":"DOMException"),r=e.message?`${n}: ${e.message}`:n;h=sr(t,r,s,c),ct(h,r)}return"code"in e&&(h.tags={...h.tags,"DOMException.code":`${e.code}`}),h}if(e(n))return Qe(t,n);if(a(n)||f(n)){return h=function(t,n,e,r){const i=On(),o=i&&i.getOptions().normalizeDepth,s={exception:{values:[{type:f(n)?n.constructor.name:r?"UnhandledRejection":"Error",value:cr(n,{isUnhandledRejection:r})}]},extra:{__serialized__:At(n,o)}};if(e){const n=tr(t,e);n.length&&(s.exception.values[0].stacktrace={frames:n})}return s}(t,n,s,u),ut(h,{synthetic:!0}),h}return h=sr(t,n,s,c),ct(h,`${n}`,void 0),ut(h,{synthetic:!0}),h}function sr(t,n,e,r){const i={};if(r&&e){const r=tr(t,e);r.length&&(i.exception={values:[{value:n,stacktrace:{frames:r}}]})}if(c(n)){const{__sentry_template_string__:t,__sentry_template_values__:e}=n;return i.logentry={message:t,params:e},i}return i.message=n,i}function cr(t,{isUnhandledRejection:n}){const e=function(t,n=40){const e=Object.keys(H(t));if(e.sort(),!e.length)return"[object has no keys]";if(e[0].length>=n)return p(e[0],n);for(let t=e.length;t>0;t--){const r=e.slice(0,t).join(", ");if(!(r.length>n))return t===e.length?r:p(r,n)}return""}(t),r=n?"promise rejection":"exception";if(i(t))return`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``;if(f(t)){return`Event \`${function(t){try{const n=Object.getPrototypeOf(t);return n?n.constructor.name:void 0}catch(t){}}(t)}\` (type=${t.type}) captured as ${r}`}return`Object captured as ${r} with keys: ${e}`}function ur(t,{metadata:n,tunnel:e,dsn:r}){const i={event_id:t.event_id,sent_at:(new Date).toISOString(),...n&&n.sdk&&{sdk:{name:n.sdk.name,version:n.sdk.version}},...!!e&&!!r&&{dsn:C(r)}},o=function(t){return[{type:"user_report"},t]}(t);return Yt(i,[o])}class ar extends class{constructor(t){if(this.ot=t,this._integrations={},this.st=!1,this.ct=0,this.ut={},this.ft={},this.k=[],t.dsn&&(this.ht=N(t.dsn)),this.ht){const n=le(this.ht,t);this.lt=t.transport({recordDroppedEvent:this.recordDroppedEvent.bind(this),...t.transportOptions,url:n})}}captureException(t,n,e){if(at(t))return;let r=n&&n.event_id;return this.dt(this.eventFromException(t,n).then((t=>this.yt(t,n,e))).then((t=>{r=t}))),r}captureMessage(t,n,e,r){let i=e&&e.event_id;const o=c(t)?t:String(t),s=u(t)?this.eventFromMessage(o,n,e):this.eventFromException(t,e);return this.dt(s.then((t=>this.yt(t,e,r))).then((t=>{i=t}))),i}captureEvent(t,n,e){if(n&&n.originalException&&at(n.originalException))return;let r=n&&n.event_id;const i=(t.sdkProcessingMetadata||{}).capturedSpanScope;return this.dt(this.yt(t,n,i||e).then((t=>{r=t}))),r}captureSession(t){"string"!=typeof t.release||(this.sendSession(t),gn(t,{init:!1}))}getDsn(){return this.ht}getOptions(){return this.ot}getSdkMetadata(){return this.ot.V}getTransport(){return this.lt}flush(t){const n=this.lt;return n?(this.metricsAggregator&&this.metricsAggregator.flush(),this.gt(t).then((e=>n.flush(t).then((t=>e&&t))))):Pt(!0)}close(t){return this.flush(t).then((t=>(this.getOptions().enabled=!1,this.metricsAggregator&&this.metricsAggregator.close(),t)))}getEventProcessors(){return this.k}addEventProcessor(t){this.k.push(t)}setupIntegrations(t){(t&&!this.st||this.vt()&&!this.st)&&this._t()}init(){this.vt()&&this._t()}getIntegrationById(t){return this.getIntegrationByName(t)}getIntegrationByName(t){return this._integrations[t]}getIntegration(t){try{return this._integrations[t.id]||null}catch(t){return null}}addIntegration(t){const n=this._integrations[t.name];ye(this,t,this._integrations),n||me(this,[t])}sendEvent(t,n={}){this.emit("beforeSendEvent",t,n);let e=ae(t,this.ht,this.ot.V,this.ot.tunnel);for(const t of n.attachments||[])e=Zt(e,en(t,this.ot.transportOptions&&this.ot.transportOptions.textEncoder));const r=this.bt(e);r&&r.then((n=>this.emit("afterSendEvent",t,n)),null)}sendSession(t){const n=function(t,n,e,r){const i=sn(e);return Yt({sent_at:(new Date).toISOString(),...i&&{sdk:i},...!!r&&n&&{dsn:C(n)}},["aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()]])}(t,this.ht,this.ot.V,this.ot.tunnel);this.bt(n)}recordDroppedEvent(t,n,e){if(this.ot.sendClientReports){const e=`${t}:${n}`;this.ut[e]=this.ut[e]+1||1}}captureAggregateMetrics(t){const n=be(t,this.ht,this.ot.V,this.ot.tunnel);this.bt(n)}on(t,n){this.ft[t]||(this.ft[t]=[]),this.ft[t].push(n)}emit(t,...n){this.ft[t]&&this.ft[t].forEach((t=>t(...n)))}_t(){const{integrations:t}=this.ot;this._integrations=function(t,n){const e={};return n.forEach((n=>{n&&ye(t,n,e)})),e}(this,t),me(this,t),this.st=!0}Et(t,n){let e=!1,r=!1;const i=n.exception&&n.exception.values;if(i){r=!0;for(const t of i){const n=t.mechanism;if(n&&!1===n.handled){e=!0;break}}}const o="ok"===t.status;(o&&0===t.errors||o&&e)&&(gn(t,{...e&&{status:"crashed"},errors:t.errors||Number(r||e)}),this.captureSession(t))}gt(t){return new Bt((n=>{let e=0;const r=setInterval((()=>{0==this.ct?(clearInterval(r),n(!0)):(e+=1,t&&e>=t&&(clearInterval(r),n(!1)))}),1)}))}vt(){return!1!==this.getOptions().enabled&&void 0!==this.lt}wt(t,n,e,r=Yn()){const i=this.getOptions(),o=Object.keys(this._integrations);return!n.integrations&&o.length>0&&(n.integrations=o),this.emit("preprocessEvent",t,n),wn(i,t,n,e,this,r).then((t=>{if(null===t)return t;const n={...r.getPropagationContext(),...e?e.getPropagationContext():void 0};if(!(t.contexts&&t.contexts.trace)&&n){const{traceId:r,spanId:i,parentSpanId:o,dsc:s}=n;t.contexts={trace:{trace_id:r,span_id:i,parent_span_id:o},...t.contexts};const c=s||Nn(r,this,e);t.sdkProcessingMetadata={dynamicSamplingContext:c,...t.sdkProcessingMetadata}}return t}))}yt(t,n={},e){return this.$t(t,n,e).then((t=>t.event_id),(t=>{}))}$t(t,n,e){const r=this.getOptions(),{sampleRate:i}=r,o=we(t),s=Ee(t),c=t.type||"error",u=`before send for type \`${c}\``;if(s&&"number"==typeof i&&Math.random()>i)return this.recordDroppedEvent("sample_rate","error",t),Ut(new L(`Discarding event because it's not included in the random sample (sampling rate = ${i})`,"log"));const f="replay_event"===c?"replay":c,l=(t.sdkProcessingMetadata||{}).capturedSpanIsolationScope;return this.wt(t,n,e,l).then((e=>{if(null===e)throw this.recordDroppedEvent("event_processor",f,t),new L("An event processor returned `null`, will not send event.","log");if(n.data&&!0===n.data.__sentry__)return e;const i=function(t,n,e){const{beforeSend:r,beforeSendTransaction:i}=t;if(Ee(n)&&r)return r(n,e);if(we(n)&&i)return i(n,e);return n}(r,e,n);return function(t,n){const e=`${n} must return \`null\` or a valid event.`;if(h(t))return t.then((t=>{if(!a(t)&&null!==t)throw new L(e);return t}),(t=>{throw new L(`${n} rejected with ${t}`)}));if(!a(t)&&null!==t)throw new L(e);return t}(i,u)})).then((r=>{if(null===r)throw this.recordDroppedEvent("before_send",f,t),new L(`${u} returned \`null\`, will not send event.`,"log");const i=e&&e.getSession();!o&&i&&this.Et(i,r);const s=r.transaction_info;if(o&&s&&r.transaction!==t.transaction){const t="custom";r.transaction_info={...s,source:t}}return this.sendEvent(r,n),r})).then(null,(t=>{if(t instanceof L)throw t;throw this.captureException(t,{data:{__sentry__:!0},originalException:t}),new L(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ${t}`)}))}dt(t){this.ct++,t.then((t=>(this.ct--,t)),(t=>(this.ct--,t)))}bt(t){if(this.emit("beforeEnvelope",t),this.vt()&&this.lt)return this.lt.send(t).then(null,(t=>{}))}St(){const t=this.ut;return this.ut={},Object.keys(t).map((n=>{const[e,r]=n.split(":");return{reason:e,category:r,quantity:t[n]}}))}}{constructor(t){!function(t,n,e=[n],r="npm"){const i=t.V||{};i.sdk||(i.sdk={name:`sentry.javascript.${n}`,packages:e.map((t=>({name:`${r}:@sentry/${t}`,version:Wn}))),version:Wn}),t.V=i}(t,"browser",["browser"],Ge.SENTRY_SDK_SOURCE||"npm"),super(t),t.sendClientReports&&Ge.document&&Ge.document.addEventListener("visibilitychange",(()=>{"hidden"===Ge.document.visibilityState&&this.xt()}))}eventFromException(t,n){return rr(this.ot.stackParser,t,n,this.ot.attachStacktrace)}eventFromMessage(t,n="info",e){return ir(this.ot.stackParser,t,n,e,this.ot.attachStacktrace)}captureUserFeedback(t){if(!this.vt())return;const n=ur(t,{metadata:this.getSdkMetadata(),dsn:this.getDsn(),tunnel:this.getOptions().tunnel});this.bt(n)}wt(t,n,e){return t.platform=t.platform||"javascript",super.wt(t,n,e)}xt(){const t=this.St();if(0===t.length)return;if(!this.ht)return;const n=(e=t,Yt((r=this.ot.tunnel&&C(this.ht))?{dsn:r}:{},[[{type:"client_report"},{timestamp:i||zt(),discarded_events:e}]]));var e,r,i;this.bt(n)}}let fr;function hr(t,n=function(){if(fr)return fr;if(_t(Ge.fetch))return fr=Ge.fetch.bind(Ge);const t=Ge.document;let n=Ge.fetch;if(t&&"function"==typeof t.createElement)try{const e=t.createElement("iframe");e.hidden=!0,t.head.appendChild(e);const r=e.contentWindow;r&&r.fetch&&(n=r.fetch),t.head.removeChild(e)}catch(t){}return fr=n.bind(Ge)}()){let e=0,r=0;return xe(t,(function(i){const o=i.body.length;e+=o,r++;const s={body:i.body,method:"POST",referrerPolicy:"origin",headers:t.headers,keepalive:e<=6e4&&r<15,...t.fetchOptions};try{return n(t.url,s).then((t=>(e-=o,r--,{statusCode:t.status,headers:{"x-sentry-rate-limits":t.headers.get("X-Sentry-Rate-Limits"),"retry-after":t.headers.get("Retry-After")}})))}catch(t){return fr=void 0,e-=o,r--,Ut(t)}}))}function lr(t){return xe(t,(function(n){return new Bt(((e,r)=>{const i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=()=>{4===i.readyState&&e({statusCode:i.status,headers:{"x-sentry-rate-limits":i.getResponseHeader("X-Sentry-Rate-Limits"),"retry-after":i.getResponseHeader("Retry-After")}})},i.open("POST",t.url);for(const n in t.headers)Object.prototype.hasOwnProperty.call(t.headers,n)&&i.setRequestHeader(n,t.headers[n]);i.send(n.body)}))}))}const dr="?";function pr(t,n,e,r){const i={filename:t,function:n,in_app:!0};return void 0!==e&&(i.lineno=e),void 0!==r&&(i.colno=r),i}const mr=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,yr=/\((\S*)(?::(\d+))(?::(\d+))\)/,gr=[30,t=>{const n=mr.exec(t);if(n){if(n[2]&&0===n[2].indexOf("eval")){const t=yr.exec(n[2]);t&&(n[2]=t[1],n[3]=t[2],n[4]=t[3])}const[t,e]=Or(n[1]||dr,n[2]);return pr(e,t,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}}],vr=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,_r=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,br=[50,t=>{const n=vr.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){const t=_r.exec(n[3]);t&&(n[1]=n[1]||"eval",n[3]=t[1],n[4]=t[2],n[5]="")}let t=n[3],e=n[1]||dr;return[e,t]=Or(e,t),pr(t,e,n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}}],Er=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,wr=[40,t=>{const n=Er.exec(t);return n?pr(n[2],n[1]||dr,+n[3],n[4]?+n[4]:void 0):void 0}],$r=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Sr=[10,t=>{const n=$r.exec(t);return n?pr(n[2],n[3]||dr,+n[1]):void 0}],xr=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,kr=[20,t=>{const n=xr.exec(t);return n?pr(n[5],n[3]||n[4]||dr,+n[1],+n[2]):void 0}],Tr=[gr,br,wr],jr=K(...Tr),Or=(t,n)=>{const e=-1!==t.indexOf("safari-extension"),r=-1!==t.indexOf("safari-web-extension");return e||r?[-1!==t.indexOf("@")?t.split("@")[0]:dr,e?`safari-extension:${n}`:`safari-web-extension:${n}`]:[t,n]},Ir=1024,Dr="Breadcrumbs",Mr=(t={})=>{const n={console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:Dr,setupOnce(){},setup(t){var e;n.console&&function(t){const n="console";tt(n,t),nt(n,rt)}(function(t){return function(n){if(On()!==t)return;const e={category:"console",data:{arguments:n.args,logger:"console"},level:Wt(n.level),message:m(n.args," ")};if("assert"===n.level){if(!1!==n.args[0])return;e.message=`Assertion failed: ${m(n.args.slice(1)," ")||"console.assert"}`,e.data.arguments=n.args.slice(1)}Tn(e,{input:n.args,level:n.level})}}(t)),n.dom&&(e=function(t,n){return function(e){if(On()!==t)return;let r,i,o="object"==typeof n?n.serializeAttribute:void 0,s="object"==typeof n&&"number"==typeof n.maxStringLength?n.maxStringLength:void 0;s&&s>Ir&&(s=Ir),"string"==typeof o&&(o=[o]);try{const t=e.event,n=function(t){return!!t&&!!t.target}(t)?t.target:t;r=T(n,{keyAttrs:o,maxStringLength:s}),i=function(t){if(!k.HTMLElement)return null;let n=t;for(let t=0;t<5;t++){if(!n)return null;if(n instanceof HTMLElement&&n.dataset.sentryComponent)return n.dataset.sentryComponent;n=n.parentNode}return null}(n)}catch(t){r=""}if(0===r.length)return;const c={category:`ui.${e.name}`,message:r};i&&(c.data={"ui.component_name":i}),Tn(c,{event:e.event,name:e.name,global:e.global})}}(t,n.dom),tt("dom",e),nt("dom",mt)),n.xhr&&function(t){tt("xhr",t),nt("xhr",Rt)}(function(t){return function(n){if(On()!==t)return;const{startTimestamp:e,endTimestamp:r}=n,i=n.xhr.__sentry_xhr_v3__;if(!e||!r||!i)return;const{method:o,url:s,status_code:c,body:u}=i;Tn({category:"xhr",data:{method:o,url:s,status_code:c},type:"http"},{xhr:n.xhr,input:u,startTimestamp:e,endTimestamp:r})}}(t)),n.fetch&&function(t){const n="fetch";tt(n,t),nt(n,bt)}(function(t){return function(n){if(On()!==t)return;const{startTimestamp:e,endTimestamp:r}=n;if(r&&(!n.fetchData.url.match(/sentry_key/)||"POST"!==n.fetchData.method))if(n.error){Tn({category:"fetch",data:n.fetchData,level:"error",type:"http"},{data:n.error,input:n.args,startTimestamp:e,endTimestamp:r})}else{const t=n.response;Tn({category:"fetch",data:{...n.fetchData,status_code:t&&t.status},type:"http"},{input:n.args,response:t,startTimestamp:e,endTimestamp:r})}}}(t)),n.history&&It(function(t){return function(n){if(On()!==t)return;let e=n.from,r=n.to;const i=Ht(Ge.location.href);let o=e?Ht(e):void 0;const s=Ht(r);o&&o.path||(o=i),i.protocol===s.protocol&&i.host===s.host&&(r=s.relative),i.protocol===o.protocol&&i.host===o.host&&(e=o.relative),Tn({category:"navigation",data:{from:e,to:r}})}}(t)),n.sentry&&t.on&&t.on("beforeSendEvent",function(t){return function(n){On()===t&&Tn({category:"sentry."+("transaction"===n.type?"transaction":"event"),event_id:n.event_id,level:n.level,message:st(n)},{event:n})}}(t))}}},Rr=ge(Dr,Mr);const Cr="Dedupe",Ar=()=>{let t;return{name:Cr,setupOnce(){},processEvent(n){if(n.type)return n;try{if(function(t,n){if(!n)return!1;if(function(t,n){const e=t.message,r=n.message;if(!e&&!r)return!1;if(e&&!r||!e&&r)return!1;if(e!==r)return!1;if(!Pr(t,n))return!1;if(!Lr(t,n))return!1;return!0}(t,n))return!0;if(function(t,n){const e=Ur(n),r=Ur(t);if(!e||!r)return!1;if(e.type!==r.type||e.value!==r.value)return!1;if(!Pr(t,n))return!1;if(!Lr(t,n))return!1;return!0}(t,n))return!0;return!1}(n,t))return null}catch(t){}return t=n}}},Nr=ge(Cr,Ar);function Lr(t,n){let e=Br(t),r=Br(n);if(!e&&!r)return!0;if(e&&!r||!e&&r)return!1;if(e=e,r=r,r.length!==e.length)return!1;for(let t=0;t{const n={onerror:!0,onunhandledrejection:!0,...t};return{name:Fr,setupOnce(){Error.stackTraceLimit=50},setup(t){n.onerror&&function(t){!function(t){const n="error";tt(n,t),nt(n,St)}((n=>{const{stackParser:e,attachStacktrace:r}=zr();if(On()!==t||Ke())return;const{msg:o,url:c,line:u,column:a,error:f}=n,h=void 0===f&&s(o)?function(t,n,e,r){const o=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;let s=i(t)?t.message:t,c="Error";const u=s.match(o);u&&(c=u[1],s=u[2]);return Wr({exception:{values:[{type:c,value:s}]}},n,e,r)}(o,c,u,a):Wr(or(e,f||o,void 0,r,!1),c,u,a);h.level="error",kn(h,{originalException:f,mechanism:{handled:!1,type:"onerror"}})}))}(t),n.onunhandledrejection&&function(t){!function(t){const n="unhandledrejection";tt(n,t),nt(n,kt)}((n=>{const{stackParser:e,attachStacktrace:r}=zr();if(On()!==t||Ke())return;const i=function(t){if(u(t))return t;const n=t;try{if("reason"in n)return n.reason;if("detail"in n&&"reason"in n.detail)return n.detail.reason}catch(t){}return t}(n),o=u(i)?{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(i)}`}]}}:or(e,i,void 0,r,!0);o.level="error",kn(o,{originalException:i,mechanism:{handled:!1,type:"onunhandledrejection"}})}))}(t)}}},qr=ge(Fr,Hr);function Wr(t,n,e,r){const i=t.exception=t.exception||{},o=i.values=i.values||[],c=o[0]=o[0]||{},u=c.stacktrace=c.stacktrace||{},a=u.frames=u.frames||[],f=isNaN(parseInt(r,10))?void 0:r,h=isNaN(parseInt(e,10))?void 0:e,l=s(n)&&n.length>0?n:function(){try{return k.document.location.href}catch(t){return""}}();return 0===a.length&&a.push({colno:f,filename:l,function:"?",in_app:!0,lineno:h}),t}function zr(){const t=On();return t&&t.getOptions()||{stackParser:()=>[],attachStacktrace:!1}}const Xr="HttpContext",Gr=()=>({name:Xr,setupOnce(){},preprocessEvent(t){if(!Ge.navigator&&!Ge.location&&!Ge.document)return;const n=t.request&&t.request.url||Ge.location&&Ge.location.href,{referrer:e}=Ge.document||{},{userAgent:r}=Ge.navigator||{},i={...t.request&&t.request.headers,...e&&{Referer:e},...r&&{"User-Agent":r}},o={...t.request,...n&&{url:n},headers:i};t.request=o}}),Jr=ge(Xr,Gr),Kr="LinkedErrors",Vr=(t={})=>{const n=t.limit||5,e=t.key||"cause";return{name:Kr,setupOnce(){},preprocessEvent(t,r,i){const o=i.getOptions();v(Ze,o.stackParser,o.maxValueLength,e,n,t,r)}}},Yr=ge(Kr,Vr),Zr=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","BroadcastChannel","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","SharedWorker","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],Qr="TryCatch",ti=(t={})=>{const n={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,...t};return{name:Qr,setupOnce(){n.setTimeout&&P(Ge,"setTimeout",ei),n.setInterval&&P(Ge,"setInterval",ei),n.requestAnimationFrame&&P(Ge,"requestAnimationFrame",ri),n.XMLHttpRequest&&"XMLHttpRequest"in Ge&&P(XMLHttpRequest.prototype,"send",ii);const t=n.eventTarget;if(t){(Array.isArray(t)?t:Zr).forEach(oi)}}}},ni=ge(Qr,ti);function ei(t){return function(...n){const e=n[0];return n[0]=Ye(e,{mechanism:{data:{function:Y(t)},handled:!1,type:"instrument"}}),t.apply(this,n)}}function ri(t){return function(n){return t.apply(this,[Ye(n,{mechanism:{data:{function:"requestAnimationFrame",handler:Y(t)},handled:!1,type:"instrument"}})])}}function ii(t){return function(...n){const e=this;return["onload","onerror","onprogress","onreadystatechange"].forEach((t=>{t in e&&"function"==typeof e[t]&&P(e,t,(function(n){const e={mechanism:{data:{function:t,handler:Y(n)},handled:!1,type:"instrument"}},r=F(n);return r&&(e.mechanism.data.handler=Y(r)),Ye(n,e)}))})),t.apply(this,n)}}function oi(t){const n=Ge,e=n[t]&&n[t].prototype;e&&e.hasOwnProperty&&e.hasOwnProperty("addEventListener")&&(P(e,"addEventListener",(function(n){return function(e,r,i){try{"function"==typeof r.handleEvent&&(r.handleEvent=Ye(r.handleEvent,{mechanism:{data:{function:"handleEvent",handler:Y(r),target:t},handled:!1,type:"instrument"}}))}catch(t){}return n.apply(this,[e,Ye(r,{mechanism:{data:{function:"addEventListener",handler:Y(r),target:t},handled:!1,type:"instrument"}}),i])}})),P(e,"removeEventListener",(function(t){return function(n,e,r){const i=e;try{const e=i&&i.__sentry_wrapped__;e&&t.call(this,n,e,r)}catch(t){}return t.call(this,n,i,r)}})))}const si=[Ie(),Ne(),ti(),Mr(),Hr(),Vr(),Ar(),Gr()];function ci(t){return[...si]}var ui=Object.freeze({__proto__:null,GlobalHandlers:qr,TryCatch:ni,Breadcrumbs:Rr,LinkedErrors:Yr,HttpContext:Jr,Dedupe:Nr});let ai={};Ge.Sentry&&Ge.Sentry.Integrations&&(ai=Ge.Sentry.Integrations);const fi={...ai,...Xe,...ui};return fi.Replay=fn,fi.BrowserTracing=hn,t.Breadcrumbs=Rr,t.BrowserClient=ar,t.BrowserTracing=hn,t.Dedupe=Nr,t.Feedback=an,t.FunctionToString=Le,t.GlobalHandlers=qr,t.HttpContext=Jr,t.Hub=Gn,t.InboundFilters=De,t.Integrations=fi,t.LinkedErrors=Yr,t.Replay=fn,t.SDK_VERSION=Wn,t.SEMANTIC_ATTRIBUTE_SENTRY_OP="sentry.op",t.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN="sentry.origin",t.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE="sentry.sample_rate",t.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE="sentry.source",t.Scope=Hn,t.TryCatch=ni,t.WINDOW=Ge,t.addBreadcrumb=Tn,t.addEventProcessor=function(t){const n=On();n&&n.addEventProcessor&&n.addEventProcessor(t)},t.addGlobalEventProcessor=pn,t.addIntegration=function(t){const n=On();n&&n.addIntegration&&n.addIntegration(t)},t.addTracingExtensions=function(){},t.breadcrumbsIntegration=Mr,t.browserApiErrorsIntegration=ti,t.browserTracingIntegration=function(t){return new hn({})},t.captureEvent=kn,t.captureException=captureException,t.captureMessage=function(t,n){const e="string"==typeof n?n:void 0,r="string"!=typeof n?{captureContext:n}:void 0;return Vn().captureMessage(t,e,r)},t.captureSession=Cn,t.captureUserFeedback=function(t){const n=On();n&&n.captureUserFeedback(t)},t.chromeStackLineParser=gr,t.close=async function(t){const n=On();return n?n.close(t):Promise.resolve(!1)},t.configureScope=function(t){Vn().configureScope(t)},t.continueTrace=({sentryTrace:t,baggage:n},e)=>{const r=In(),{traceparentData:i,dynamicSamplingContext:o,propagationContext:s}=Vt(t,n);r.setPropagationContext(s);const c={...i,metadata:z({dynamicSamplingContext:o})};return e?Zn((()=>e(c))):c},t.createTransport=xe,t.createUserFeedbackEnvelope=ur,t.dedupeIntegration=Ar,t.defaultIntegrations=si,t.defaultStackLineParsers=Tr,t.defaultStackParser=jr,t.endSession=Mn,t.eventFromException=rr,t.eventFromMessage=ir,t.exceptionFromError=Ze,t.feedbackIntegration=function(t){return new an({})},t.flush=async function(t){const n=On();return n?n.flush(t):Promise.resolve(!1)},t.forceLoad=function(){},t.functionToStringIntegration=Ne,t.geckoStackLineParser=br,t.getActiveSpan=re,t.getClient=On,t.getCurrentHub=Vn,t.getCurrentScope=In,t.getDefaultIntegrations=ci,t.getHubFromCarrier=Qn,t.globalHandlersIntegration=Hr,t.httpContextIntegration=Gr,t.inboundFiltersIntegration=Ie,t.init=function(t={}){void 0===t.defaultIntegrations&&(t.defaultIntegrations=ci()),void 0===t.release&&("string"==typeof __SENTRY_RELEASE__&&(t.release=__SENTRY_RELEASE__),Ge.SENTRY_RELEASE&&Ge.SENTRY_RELEASE.id&&(t.release=Ge.SENTRY_RELEASE.id)),void 0===t.autoSessionTracking&&(t.autoSessionTracking=!0),void 0===t.sendClientReports&&(t.sendClientReports=!0);const n={...t,stackParser:(e=t.stackParser||jr,Array.isArray(e)?K(...e):e),integrations:pe(t),transport:t.transport||(vt()?hr:lr)};var e;!function(t,n){!0===n.debug&&D((()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),In().update(n.initialScope);const e=new t(n);Se(e),function(t){t.init?t.init():t.setupIntegrations&&t.setupIntegrations()}(e)}(ar,n),t.autoSessionTracking&&function(){if(void 0===Ge.document)return;Dn({ignoreDuration:!0}),Cn(),It((({from:t,to:n})=>{void 0!==t&&t!==n&&(Dn({ignoreDuration:!0}),Cn())}))}()},t.isInitialized=function(){return!!On()},t.lastEventId=function(){return Vn().lastEventId()},t.linkedErrorsIntegration=Vr,t.makeFetchTransport=hr,t.makeMain=Kn,t.makeXHRTransport=lr,t.metrics=ze,t.onLoad=function(t){t()},t.opera10StackLineParser=Sr,t.opera11StackLineParser=kr,t.parameterize=function(t,...n){const e=new String(String.raw(t,...n));return e.__sentry_template_string__=t.join("\0").replace(/%/g,"%%").replace(/\0/g,"%s"),e.__sentry_template_values__=n,e},t.replayIntegration=function(t){return new fn({})},t.setContext=function(t,n){Vn().setContext(t,n)},t.setCurrentClient=Se,t.setExtra=function(t,n){Vn().setExtra(t,n)},t.setExtras=function(t){Vn().setExtras(t)},t.setTag=function(t,n){Vn().setTag(t,n)},t.setTags=function(t){Vn().setTags(t)},t.setUser=function(t){Vn().setUser(t)},t.showReportDialog=(t={},n=Vn())=>{if(!Ge.document)return;const{client:e,scope:r}=n.getStackTop(),i=t.dsn||e&&e.getDsn();if(!i)return;r&&(t.user={...r.getUser(),...t.user}),t.eventId||(t.eventId=n.lastEventId());const o=Ge.document.createElement("script");o.async=!0,o.crossOrigin="anonymous",o.src=function(t,n){const e=N(t);if(!e)return"";const r=`${fe(e)}embed/error-page/`;let i=`dsn=${C(e)}`;for(const t in n)if("dsn"!==t&&"onClose"!==t)if("user"===t){const t=n.user;if(!t)continue;t.name&&(i+=`&name=${encodeURIComponent(t.name)}`),t.email&&(i+=`&email=${encodeURIComponent(t.email)}`)}else i+=`&${encodeURIComponent(t)}=${encodeURIComponent(n[t])}`;return`${r}?${i}`}(i,t),t.onLoad&&(o.onload=t.onLoad);const{onClose:s}=t;if(s){const t=n=>{if("__sentry_reportdialog_closed__"===n.data)try{s()}finally{Ge.removeEventListener("message",t)}};Ge.addEventListener("message",t)}const c=Ge.document.head||Ge.document.body;c&&c.appendChild(o)},t.startInactiveSpan=function(t){if(!ee())return;const n=oe(t),e=Vn(),r=t.scope?t.scope.getSpan():re();if(t.onlyIfParent&&!r)return;const i=Yn(),o=In();let s;if(r)s=r.startChild(n);else{const{traceId:t,dsc:r,parentSpanId:c,sampled:u}={...i.getPropagationContext(),...o.getPropagationContext()};s=e.startTransaction({traceId:t,parentSpanId:c,parentSampled:u,...n,metadata:{dynamicSamplingContext:r,...n.metadata}})}return se(s,o,i),s},t.startSession=Dn,t.startSpan=function(t,n){const e=oe(t);return Zn((()=>jn(t.scope,(r=>{const i=Vn(),o=r.getSpan(),s=t.onlyIfParent&&!o?void 0:ie(i,o,e);return r.setSpan(s),ne((()=>n(s)),(()=>{if(s){const{status:t}=En(s);t&&"ok"!==t||s.setStatus("internal_error")}}),(()=>s&&s.end()))}))))},t.startSpanManual=function(t,n){const e=oe(t);return Zn((()=>jn(t.scope,(r=>{const i=Vn(),o=r.getSpan(),s=t.onlyIfParent&&!o?void 0:ie(i,o,e);function c(){s&&s.end()}return r.setSpan(s),ne((()=>n(s,c)),(()=>{if(s&&s.isRecording()){const{status:t}=En(s);t&&"ok"!==t||s.setStatus("internal_error")}}))}))))},t.startTransaction=function(t,n){return Vn().startTransaction({...t},n)},t.winjsStackLineParser=wr,t.withIsolationScope=function(t){return Zn((()=>t(Yn())))},t.withScope=jn,t.wrap=function(t){return Ye(t)()},t}({}); //# sourceMappingURL=bundle.min.js.map diff --git a/oem/firstvoices/windows/src/xml/sentry.bundle.min.js b/oem/firstvoices/windows/src/xml/sentry.bundle.min.js index 262b9344894..c9aa7758e20 100644 --- a/oem/firstvoices/windows/src/xml/sentry.bundle.min.js +++ b/oem/firstvoices/windows/src/xml/sentry.bundle.min.js @@ -1,3 +1,3 @@ -/*! @sentry/browser 5.15.0 (3ce26d5c) | https://github.com/getsentry/sentry-javascript */ -var Sentry=function(n){var t=function(n,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var r in t)t.hasOwnProperty(r)&&(n[r]=t[r])})(n,r)};function r(n,r){function e(){this.constructor=n}t(n,r),n.prototype=null===r?Object.create(r):(e.prototype=r.prototype,new e)}var e=function(){return(e=Object.assign||function(n){for(var t,r=1,e=arguments.length;r=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}}}function o(n,t){var r="function"==typeof Symbol&&n[Symbol.iterator];if(!r)return n;var e,i,o=r.call(n),u=[];try{for(;(void 0===t||t-- >0)&&!(e=o.next()).done;)u.push(e.value)}catch(n){i={error:n}}finally{try{e&&!e.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return u}function u(){for(var n=[],t=0;t=400&&t<500)switch(t){case 401:return n.Unauthenticated;case 403:return n.PermissionDenied;case 404:return n.NotFound;case 409:return n.AlreadyExists;case 413:return n.FailedPrecondition;case 429:return n.ResourceExhausted;default:return n.InvalidArgument}if(t>=500&&t<600)switch(t){case 501:return n.Unimplemented;case 503:return n.Unavailable;case 504:return n.DeadlineExceeded;default:return n.InternalError}return n.UnknownError}}(s||(s={})),(f=n.Status||(n.Status={})).Unknown="unknown",f.Skipped="skipped",f.Success="success",f.RateLimit="rate_limit",f.Invalid="invalid",f.Failed="failed",function(n){n.fromHttpCode=function(t){return t>=200&&t<300?n.Success:429===t?n.RateLimit:t>=400&&t<500?n.Invalid:t>=500?n.Failed:n.Unknown}}(n.Status||(n.Status={}));var h=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(n,t){return n.__proto__=t,n}:function(n,t){for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r]);return n});var v=function(n){function t(t){var r=this.constructor,e=n.call(this,t)||this;return e.message=t,e.name=r.prototype.constructor.name,h(e,r.prototype),e}return r(t,n),t}(Error);function l(n){switch(Object.prototype.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return x(n,Error)}}function d(n){return"[object ErrorEvent]"===Object.prototype.toString.call(n)}function p(n){return"[object DOMError]"===Object.prototype.toString.call(n)}function y(n){return"[object String]"===Object.prototype.toString.call(n)}function m(n){return null===n||"object"!=typeof n&&"function"!=typeof n}function b(n){return"[object Object]"===Object.prototype.toString.call(n)}function w(n){return"undefined"!=typeof Event&&x(n,Event)}function g(n){return"undefined"!=typeof Element&&x(n,Element)}function E(n){return Boolean(n&&n.then&&"function"==typeof n.then)}function x(n,t){try{return n instanceof t}catch(n){return!1}}function j(n,t){return void 0===t&&(t=0),"string"!=typeof n||0===t?n:n.length<=t?n:n.substr(0,t)+"..."}function k(n,t){if(!Array.isArray(n))return"";for(var r=[],e=0;e"}return n.event_id||""}function C(n){var t=D();if(!("console"in t))return n();var r=t.console,e={};["debug","info","warn","error","log","assert"].forEach(function(n){n in t.console&&r[n].__sentry_original__&&(e[n]=r[n],r[n]=r[n].__sentry_original__)});var i=n();return Object.keys(e).forEach(function(n){r[n]=e[n]}),i}function M(n,t,r){n.exception=n.exception||{},n.exception.values=n.exception.values||[],n.exception.values[0]=n.exception.values[0]||{},n.exception.values[0].value=n.exception.values[0].value||t||"",n.exception.values[0].type=n.exception.values[0].type||r||"Error"}function A(n,t){void 0===t&&(t={});try{n.exception.values[0].mechanism=n.exception.values[0].mechanism||{},Object.keys(t).forEach(function(r){n.exception.values[0].mechanism[r]=t[r]})}catch(n){}}function U(n){try{for(var t=n,r=[],e=0,i=0,o=" > ".length,u=void 0;t&&e++<5&&!("html"===(u=q(t))||e>1&&i+r.length*o+u.length>=80);)r.push(u),i+=u.length,t=t.parentNode;return r.reverse().join(" > ")}catch(n){return""}}function q(n){var t,r,e,i,o,u=n,c=[];if(!u||!u.tagName)return"";if(c.push(u.tagName.toLowerCase()),u.id&&c.push("#"+u.id),(t=u.className)&&y(t))for(r=t.split(/\s+/),o=0;o"}try{o.currentTarget=g(i.currentTarget)?U(i.currentTarget):Object.prototype.toString.call(i.currentTarget)}catch(n){o.currentTarget=""}for(var e in"undefined"!=typeof CustomEvent&&x(n,CustomEvent)&&(o.detail=i.detail),i)Object.prototype.hasOwnProperty.call(i,e)&&(o[e]=i);return o}return n}function tn(n){return function(n){return~-encodeURI(n).split(/%..|./).length}(JSON.stringify(n))}function rn(n,t,r){void 0===t&&(t=3),void 0===r&&(r=102400);var e=un(n,t);return tn(e)>r?rn(n,t-1,r):e}function en(n,t){return"domain"===t&&n&&"object"==typeof n&&n.u?"[Domain]":"domainEmitter"===t?"[DomainEmitter]":"undefined"!=typeof global&&n===global?"[Global]":"undefined"!=typeof window&&n===window?"[Window]":"undefined"!=typeof document&&n===document?"[Document]":b(r=n)&&"nativeEvent"in r&&"preventDefault"in r&&"stopPropagation"in r?"[SyntheticEvent]":"number"==typeof n&&n!=n?"[NaN]":void 0===n?"[undefined]":"function"==typeof n?"[Function: "+G(n)+"]":n;var r}function on(n,t,r,e){if(void 0===r&&(r=1/0),void 0===e&&(e=new Y),0===r)return function(n){var t=Object.prototype.toString.call(n);if("string"==typeof n)return n;if("[object Object]"===t)return"[Object]";if("[object Array]"===t)return"[Array]";var r=en(n);return m(r)?r:t}(t);if(null!=t&&"function"==typeof t.toJSON)return t.toJSON();var i=en(t,n);if(m(i))return i;var o=nn(t),u=Array.isArray(t)?[]:{};if(e.memoize(t))return"[Circular ~]";for(var c in o)Object.prototype.hasOwnProperty.call(o,c)&&(u[c]=on(c,o[c],r-1,e));return e.unmemoize(t),u}function un(n,t){try{return JSON.parse(JSON.stringify(n,function(n,r){return on(n,r,t)}))}catch(n){return"**non-serializable**"}}function cn(n,t){void 0===t&&(t=40);var r=Object.keys(nn(n));if(r.sort(),!r.length)return"[object has no keys]";if(r[0].length>=t)return j(r[0],t);for(var e=r.length;e>0;e--){var i=r.slice(0,e).join(", ");if(!(i.length>t))return e===r.length?i:j(i,t)}return""}!function(n){n.PENDING="PENDING",n.RESOLVED="RESOLVED",n.REJECTED="REJECTED"}(K||(K={}));var an=function(){function n(n){var t=this;this.s=K.PENDING,this.h=[],this.v=function(n){t.l(K.RESOLVED,n)},this.p=function(n){t.l(K.REJECTED,n)},this.l=function(n,r){t.s===K.PENDING&&(E(r)?r.then(t.v,t.p):(t.s=n,t.m=r,t.g()))},this.j=function(n){t.h=t.h.concat(n),t.g()},this.g=function(){t.s!==K.PENDING&&(t.s===K.REJECTED?t.h.forEach(function(n){n.onrejected&&n.onrejected(t.m)}):t.h.forEach(function(n){n.onfulfilled&&n.onfulfilled(t.m)}),t.h=[])};try{n(this.v,this.p)}catch(n){this.p(n)}}return n.prototype.toString=function(){return"[object SyncPromise]"},n.resolve=function(t){return new n(function(n){n(t)})},n.reject=function(t){return new n(function(n,r){r(t)})},n.all=function(t){return new n(function(r,e){if(Array.isArray(t))if(0!==t.length){var i=t.length,o=[];t.forEach(function(t,u){n.resolve(t).then(function(n){o[u]=n,0===(i-=1)&&r(o)}).then(null,e)})}else r([]);else e(new TypeError("Promise.all requires an array as input."))})},n.prototype.then=function(t,r){var e=this;return new n(function(n,i){e.j({onfulfilled:function(r){if(t)try{return void n(t(r))}catch(n){return void i(n)}else n(r)},onrejected:function(t){if(r)try{return void n(r(t))}catch(n){return void i(n)}else i(t)}})})},n.prototype.catch=function(n){return this.then(function(n){return n},n)},n.prototype.finally=function(t){var r=this;return new n(function(n,e){var i,o;return r.then(function(n){o=!1,i=n,t&&t()},function(n){o=!0,i=n,t&&t()}).then(function(){o?e(i):n(i)})})},n}(),sn=function(){function n(n){this.k=n,this._=[]}return n.prototype.isReady=function(){return void 0===this.k||this.length()0&&r(!1)},n);an.all(t._).then(function(){clearTimeout(e),r(!0)}).then(null,function(){r(!0)})})},n}();function fn(){if(!("fetch"in D()))return!1;try{return new Headers,new Request(""),new Response,!0}catch(n){return!1}}function hn(n){return n&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(n.toString())}function vn(){if(!fn())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch(n){return!1}}var ln,dn=D(),pn={},yn={};function mn(n){if(!yn[n])switch(yn[n]=!0,n){case"console":!function(){if(!("console"in dn))return;["debug","info","warn","error","log","assert"].forEach(function(n){n in dn.console&&Z(dn.console,n,function(t){return function(){for(var r=[],e=0;e2?t[2]:void 0;if(e){var i=ln,o=String(e);ln=o,wn("history",{from:i,to:o})}return n.apply(this,t)}}dn.onpopstate=function(){for(var n=[],t=0;t1&&(h=d.slice(0,-1).join("/"),l=d.pop()),this.O({host:a,pass:c,path:h,projectId:l,port:f,protocol:e,user:i})},n.prototype.O=function(n){this.protocol=n.protocol,this.user=n.user,this.pass=n.pass||"",this.host=n.host,this.port=n.port||"",this.path=n.path||"",this.projectId=n.projectId},n.prototype.T=function(){var n=this;if(["protocol","user","host","projectId"].forEach(function(t){if(!n[t])throw new v("Invalid Dsn")}),"http"!==this.protocol&&"https"!==this.protocol)throw new v("Invalid Dsn");if(this.port&&isNaN(parseInt(this.port,10)))throw new v("Invalid Dsn")},n}(),In=function(){function n(){this.D=!1,this.R=[],this.N=[],this.I=[],this.C={},this.M={},this.A={},this.U={}}return n.prototype.addScopeListener=function(n){this.R.push(n)},n.prototype.addEventProcessor=function(n){return this.N.push(n),this},n.prototype.q=function(){var n=this;this.D||(this.D=!0,setTimeout(function(){n.R.forEach(function(t){t(n)}),n.D=!1}))},n.prototype.L=function(n,t,r,i){var o=this;return void 0===i&&(i=0),new an(function(u,c){var a=n[i];if(null===t||"function"!=typeof a)u(t);else{var s=a(e({},t),r);E(s)?s.then(function(t){return o.L(n,t,r,i+1).then(u)}).then(null,c):o.L(n,s,r,i+1).then(u).then(null,c)}})},n.prototype.setUser=function(n){return this.C=n||{},this.q(),this},n.prototype.setTags=function(n){return this.M=e({},this.M,n),this.q(),this},n.prototype.setTag=function(n,t){var r;return this.M=e({},this.M,((r={})[n]=t,r)),this.q(),this},n.prototype.setExtras=function(n){return this.A=e({},this.A,n),this.q(),this},n.prototype.setExtra=function(n,t){var r;return this.A=e({},this.A,((r={})[n]=t,r)),this.q(),this},n.prototype.setFingerprint=function(n){return this.H=n,this.q(),this},n.prototype.setLevel=function(n){return this.P=n,this.q(),this},n.prototype.setTransaction=function(n){return this.F=n,this.W&&(this.W.transaction=n),this.q(),this},n.prototype.setContext=function(n,t){var r;return this.U=e({},this.U,((r={})[n]=t,r)),this.q(),this},n.prototype.setSpan=function(n){return this.W=n,this.q(),this},n.prototype.getSpan=function(){return this.W},n.clone=function(t){var r=new n;return t&&(r.I=u(t.I),r.M=e({},t.M),r.A=e({},t.A),r.U=e({},t.U),r.C=t.C,r.P=t.P,r.W=t.W,r.F=t.F,r.H=t.H,r.N=u(t.N)),r},n.prototype.clear=function(){return this.I=[],this.M={},this.A={},this.C={},this.U={},this.P=void 0,this.F=void 0,this.H=void 0,this.W=void 0,this.q(),this},n.prototype.addBreadcrumb=function(n,t){var r=e({timestamp:W()},n);return this.I=void 0!==t&&t>=0?u(this.I,[r]).slice(-t):u(this.I,[r]),this.q(),this},n.prototype.clearBreadcrumbs=function(){return this.I=[],this.q(),this},n.prototype.X=function(n){n.fingerprint=n.fingerprint?Array.isArray(n.fingerprint)?n.fingerprint:[n.fingerprint]:[],this.H&&(n.fingerprint=n.fingerprint.concat(this.H)),n.fingerprint&&!n.fingerprint.length&&delete n.fingerprint},n.prototype.applyToEvent=function(n,t){return this.A&&Object.keys(this.A).length&&(n.extra=e({},this.A,n.extra)),this.M&&Object.keys(this.M).length&&(n.tags=e({},this.M,n.tags)),this.C&&Object.keys(this.C).length&&(n.user=e({},this.C,n.user)),this.U&&Object.keys(this.U).length&&(n.contexts=e({},this.U,n.contexts)),this.P&&(n.level=this.P),this.F&&(n.transaction=this.F),this.W&&(n.contexts=e({trace:this.W.getTraceContext()},n.contexts)),this.X(n),n.breadcrumbs=u(n.breadcrumbs||[],this.I),n.breadcrumbs=n.breadcrumbs.length>0?n.breadcrumbs:void 0,this.L(u(Cn(),this.N),n,t)},n}();function Cn(){var n=D();return n.__SENTRY__=n.__SENTRY__||{},n.__SENTRY__.globalEventProcessors=n.__SENTRY__.globalEventProcessors||[],n.__SENTRY__.globalEventProcessors}function Mn(n){Cn().push(n)}var An=3,Un=function(){function n(n,t,r){void 0===t&&(t=new In),void 0===r&&(r=An),this.B=r,this.$=[],this.$.push({client:n,scope:t})}return n.prototype.G=function(n){for(var t,r=[],e=1;e0?n[n.length-1].scope:void 0,r=In.clone(t);return this.getStack().push({client:this.getClient(),scope:r}),r},n.prototype.popScope=function(){return void 0!==this.getStack().pop()},n.prototype.withScope=function(n){var t=this.pushScope();try{n(t)}finally{this.popScope()}},n.prototype.getClient=function(){return this.getStackTop().client},n.prototype.getScope=function(){return this.getStackTop().scope},n.prototype.getStack=function(){return this.$},n.prototype.getStackTop=function(){return this.$[this.$.length-1]},n.prototype.captureException=function(n,t){var r=this.J=R(),i=t;if(!t){var o=void 0;try{throw new Error("Sentry syntheticException")}catch(n){o=n}i={originalException:n,syntheticException:o}}return this.G("captureException",n,e({},i,{event_id:r})),r},n.prototype.captureMessage=function(n,t,r){var i=this.J=R(),o=r;if(!r){var u=void 0;try{throw new Error(n)}catch(n){u=n}o={originalException:n,syntheticException:u}}return this.G("captureMessage",n,t,e({},o,{event_id:i})),i},n.prototype.captureEvent=function(n,t){var r=this.J=R();return this.G("captureEvent",n,e({},t,{event_id:r})),r},n.prototype.lastEventId=function(){return this.J},n.prototype.addBreadcrumb=function(n,t){var r=this.getStackTop();if(r.scope&&r.client){var i=r.client.getOptions&&r.client.getOptions()||{},o=i.beforeBreadcrumb,u=void 0===o?null:o,c=i.maxBreadcrumbs,a=void 0===c?100:c;if(!(a<=0)){var s=W(),f=e({timestamp:s},n),h=u?C(function(){return u(f,t)}):f;null!==h&&r.scope.addBreadcrumb(h,Math.min(a,100))}}},n.prototype.setUser=function(n){var t=this.getStackTop();t.scope&&t.scope.setUser(n)},n.prototype.setTags=function(n){var t=this.getStackTop();t.scope&&t.scope.setTags(n)},n.prototype.setExtras=function(n){var t=this.getStackTop();t.scope&&t.scope.setExtras(n)},n.prototype.setTag=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setTag(n,t)},n.prototype.setExtra=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setExtra(n,t)},n.prototype.setContext=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setContext(n,t)},n.prototype.configureScope=function(n){var t=this.getStackTop();t.scope&&t.client&&n(t.scope)},n.prototype.run=function(n){var t=Ln(this);try{n(this)}finally{Ln(t)}},n.prototype.getIntegration=function(n){var t=this.getClient();if(!t)return null;try{return t.getIntegration(n)}catch(t){return Q.warn("Cannot retrieve integration "+n.id+" from the current Hub"),null}},n.prototype.startSpan=function(n,t){return void 0===t&&(t=!1),this.V("startSpan",n,t)},n.prototype.traceHeaders=function(){return this.V("traceHeaders")},n.prototype.V=function(n){for(var t=[],r=1;r=n&&r({interval:i,ready:!1})):r({interval:i,ready:!0})},1)})},n.prototype.in=function(){return this.tn},n.prototype.cn=function(){return!1!==this.getOptions().enabled&&void 0!==this.en},n.prototype.an=function(n,t,r){var i=this,o=this.getOptions(),u=o.environment,c=o.release,a=o.dist,s=o.maxValueLength,f=void 0===s?250:s,h=o.normalizeDepth,v=void 0===h?3:h,l=e({},n);void 0===l.environment&&void 0!==u&&(l.environment=u),void 0===l.release&&void 0!==c&&(l.release=c),void 0===l.dist&&void 0!==a&&(l.dist=a),l.message&&(l.message=j(l.message,f));var d=l.exception&&l.exception.values&&l.exception.values[0];d&&d.value&&(d.value=j(d.value,f));var p=l.request;p&&p.url&&(p.url=j(p.url,f)),void 0===l.event_id&&(l.event_id=r&&r.event_id?r.event_id:R()),this.sn(l.sdk);var y=an.resolve(l);return t&&(y=t.applyToEvent(l,r)),y.then(function(n){return"number"==typeof v&&v>0?i.fn(n,v):n})},n.prototype.fn=function(n,t){return n?e({},n,n.breadcrumbs&&{breadcrumbs:n.breadcrumbs.map(function(n){return e({},n,n.data&&{data:un(n.data,t)})})},n.user&&{user:un(n.user,t)},n.contexts&&{contexts:un(n.contexts,t)},n.extra&&{extra:un(n.extra,t)}):null},n.prototype.sn=function(n){var t=Object.keys(this.Z);n&&t.length>0&&(n.integrations=t)},n.prototype.on=function(n,t,r){var e=this,i=this.getOptions(),o=i.beforeSend,u=i.sampleRate;return this.cn()?"number"==typeof u&&Math.random()>u?an.reject("This event has been sampled, will not send event."):new an(function(i,u){e.an(n,r,t).then(function(n){if(null!==n){var r=n;if(t&&t.data&&!0===t.data.__sentry__||!o)return e.in().sendEvent(r),void i(r);var c=o(n,t);if(void 0===c)Q.error("`beforeSend` method has to return `null` or a valid event.");else if(E(c))e.hn(c,i,u);else{if(null===(r=c))return Q.log("`beforeSend` returned `null`, will not send event."),void i(null);e.in().sendEvent(r),i(r)}}else u("An event processor returned null, will not send event.")}).then(null,function(n){e.captureException(n,{data:{__sentry__:!0},originalException:n}),u("Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: "+n)})}):an.reject("SDK not enabled, will not send event.")},n.prototype.hn=function(n,t,r){var e=this;n.then(function(n){null!==n?(e.in().sendEvent(n),t(n)):r("`beforeSend` returned `null`, will not send event.")}).then(null,function(n){r("beforeSend rejected with "+n)})},n}(),Kn=function(){function t(){}return t.prototype.sendEvent=function(t){return an.resolve({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:n.Status.Skipped})},t.prototype.close=function(n){return an.resolve(!0)},t}(),Qn=function(){function n(n){this.rn=n,this.rn.dsn||Q.warn("No DSN provided, backend will not do anything."),this.vn=this.ln()}return n.prototype.ln=function(){return new Kn},n.prototype.eventFromException=function(n,t){throw new v("Backend has to implement `eventFromException` method")},n.prototype.eventFromMessage=function(n,t,r){throw new v("Backend has to implement `eventFromMessage` method")},n.prototype.sendEvent=function(n){this.vn.sendEvent(n).then(null,function(n){Q.error("Error while sending event: "+n)})},n.prototype.getTransport=function(){return this.vn},n}();var Yn=function(){function n(){this.name=n.id}return n.prototype.setupOnce=function(){zn=Function.prototype.toString,Function.prototype.toString=function(){for(var n=[],t=0;t|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,it=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js))(?::(\d+))?(?::(\d+))?\s*$/i,ot=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,ut=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,ct=/\((\S*)(?::(\d+))(?::(\d+))\)/;function at(n){var t=null,r=n&&n.framesToPop;try{if(t=function(n){if(!n||!n.stacktrace)return null;for(var t,r=n.stacktrace,e=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,i=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,o=r.split("\n"),u=[],c=0;c eval")>-1&&(t=ut.exec(r[3]))?(r[1]=r[1]||"eval",r[3]=t[1],r[4]=t[2],r[5]=""):0!==u||r[5]||void 0===n.columnNumber||(i[0].column=n.columnNumber+1),e={url:r[3],func:r[1]||rt,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}!e.func&&e.line&&(e.func=rt),i.push(e)}if(!i.length)return null;return{message:ft(n),name:n.name,stack:i}}(n))return st(t,r)}catch(n){}return{message:ft(n),name:n&&n.name,stack:[],failed:!0}}function st(n,t){try{return e({},n,{stack:n.stack.slice(t)})}catch(t){return n}}function ft(n){var t=n&&n.message;return t?t.error&&"string"==typeof t.error.message?t.error.message:t:"No error message"}var ht=50;function vt(n){var t=dt(n.stack),r={type:n.name,value:n.message};return t&&t.length&&(r.stacktrace={frames:t}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function lt(n){return{exception:{values:[vt(n)]}}}function dt(n){if(!n||!n.length)return[];var t=n,r=t[0].func||"",e=t[t.length-1].func||"";return-1===r.indexOf("captureMessage")&&-1===r.indexOf("captureException")||(t=t.slice(1)),-1!==e.indexOf("sentryWrapped")&&(t=t.slice(0,-1)),t.map(function(n){return{colno:null===n.column?void 0:n.column,filename:n.url||t[0].url,function:n.func||"?",in_app:!0,lineno:null===n.line?void 0:n.line}}).slice(0,ht).reverse()}function pt(n,t,r){var e,i;if(void 0===r&&(r={}),d(n)&&n.error)return e=lt(at(n=n.error));if(p(n)||(i=n,"[object DOMException]"===Object.prototype.toString.call(i))){var o=n,u=o.name||(p(o)?"DOMError":"DOMException"),c=o.message?u+": "+o.message:u;return M(e=yt(c,t,r),c),e}return l(n)?e=lt(at(n)):b(n)||w(n)?(A(e=function(n,t,r){var e={exception:{values:[{type:w(n)?n.constructor.name:r?"UnhandledRejection":"Error",value:"Non-Error "+(r?"promise rejection":"exception")+" captured with keys: "+cn(n)}]},extra:{__serialized__:rn(n)}};if(t){var i=dt(at(t).stack);e.stacktrace={frames:i}}return e}(n,t,r.rejection),{synthetic:!0}),e):(M(e=yt(n,t,r),""+n,void 0),A(e,{synthetic:!0}),e)}function yt(n,t,r){void 0===r&&(r={});var e={message:n};if(r.attachStacktrace&&t){var i=dt(at(t).stack);e.stacktrace={frames:i}}return e}var mt=function(){function n(n){this.options=n,this._=new sn(30),this.url=new $n(this.options.dsn).getStoreEndpointWithUrlEncodedAuth()}return n.prototype.sendEvent=function(n){throw new v("Transport Class has to implement `sendEvent` method")},n.prototype.close=function(n){return this._.drain(n)},n}(),bt=D(),wt=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.xn=new Date(Date.now()),n}return r(e,t),e.prototype.sendEvent=function(t){var r=this;if(new Date(Date.now())0}function Ot(n,t,r){if(void 0===t&&(t={}),"function"!=typeof n)return n;try{if(n.__sentry__)return n;if(n.__sentry_wrapped__)return n.__sentry_wrapped__}catch(t){return n}var sentryWrapped=function(){var i=Array.prototype.slice.call(arguments);try{r&&"function"==typeof r&&r.apply(this,arguments);var o=i.map(function(n){return Ot(n,t)});return n.handleEvent?n.handleEvent.apply(this,o):n.apply(this,o)}catch(n){throw _t+=1,setTimeout(function(){_t-=1}),Bn(function(r){r.addEventProcessor(function(n){var r=e({},n);return t.mechanism&&(M(r,void 0,void 0),A(r,t.mechanism)),r.extra=e({},r.extra,{arguments:i}),r}),captureException(n)}),n}};try{for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(sentryWrapped[i]=n[i])}catch(n){}n.prototype=n.prototype||{},sentryWrapped.prototype=n.prototype,Object.defineProperty(n,"__sentry_wrapped__",{enumerable:!1,value:sentryWrapped}),Object.defineProperties(sentryWrapped,{__sentry__:{enumerable:!1,value:!0},__sentry_original__:{enumerable:!1,value:n}});try{Object.getOwnPropertyDescriptor(sentryWrapped,"name").configurable&&Object.defineProperty(sentryWrapped,"name",{get:function(){return n.name}})}catch(n){}return sentryWrapped}var Tt=function(){function t(n){this.name=t.id,this.jn=!1,this.kn=!1,this.rn=e({onerror:!0,onunhandledrejection:!0},n)}return t.prototype.setupOnce=function(){Error.stackTraceLimit=50,this.rn.onerror&&(Q.log("Global Handler attached: onerror"),this._n()),this.rn.onunhandledrejection&&(Q.log("Global Handler attached: onunhandledrejection"),this.Sn())},t.prototype._n=function(){var n=this;this.jn||(bn({callback:function(r){var e=r.error,i=Hn(),o=i.getIntegration(t),u=e&&!0===e.__sentry_own_request__;if(o&&!St()&&!u){var c=i.getClient(),a=m(e)?n.On(r.msg,r.url,r.line,r.column):n.Tn(pt(e,void 0,{attachStacktrace:c&&c.getOptions().attachStacktrace,rejection:!1}),r.url,r.line,r.column);A(a,{handled:!1,type:"onerror"}),i.captureEvent(a,{originalException:e})}},type:"error"}),this.jn=!0)},t.prototype.Sn=function(){var r=this;this.kn||(bn({callback:function(e){var i=e;try{"reason"in e?i=e.reason:"detail"in e&&"reason"in e.detail&&(i=e.detail.reason)}catch(n){}var o=Hn(),u=o.getIntegration(t),c=i&&!0===i.__sentry_own_request__;if(!u||St()||c)return!0;var a=o.getClient(),s=m(i)?r.Dn(i):pt(i,void 0,{attachStacktrace:a&&a.getOptions().attachStacktrace,rejection:!0});s.level=n.Severity.Error,A(s,{handled:!1,type:"onunhandledrejection"}),o.captureEvent(s,{originalException:i})},type:"unhandledrejection"}),this.kn=!0)},t.prototype.On=function(n,t,r,e){var i,o=d(n)?n.message:n;if(y(o)){var u=o.match(/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i);u&&(i=u[1],o=u[2])}var c={exception:{values:[{type:i||"Error",value:o}]}};return this.Tn(c,t,r,e)},t.prototype.Dn=function(n){return{exception:{values:[{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+n}]}}},t.prototype.Tn=function(n,t,r,e){n.exception=n.exception||{},n.exception.values=n.exception.values||[],n.exception.values[0]=n.exception.values[0]||{},n.exception.values[0].stacktrace=n.exception.values[0].stacktrace||{},n.exception.values[0].stacktrace.frames=n.exception.values[0].stacktrace.frames||[];var i=isNaN(parseInt(e,10))?void 0:e,o=isNaN(parseInt(r,10))?void 0:r,u=y(t)&&t.length>0?t:function(){try{return document.location.href}catch(n){return""}}();return 0===n.exception.values[0].stacktrace.frames.length&&n.exception.values[0].stacktrace.frames.push({colno:i,filename:u,function:"?",in_app:!0,lineno:o}),n},t.id="GlobalHandlers",t}(),Dt=function(){function n(){this.Rn=0,this.name=n.id}return n.prototype.Nn=function(n){return function(){for(var t=[],r=0;r"}0!==t.length&&Hn().addBreadcrumb({category:"ui."+n.name,message:t},{event:n.event,name:n.name})},t.prototype.qn=function(n){if(n.endTimestamp){if(n.xhr.__sentry_own_request__)return;Hn().addBreadcrumb({category:"xhr",data:n.xhr.__sentry_xhr__,type:"http"},{xhr:n.xhr})}else this.rn.sentry&&n.xhr.__sentry_own_request__&&Nt(n.args[0])},t.prototype.Ln=function(t){if(t.endTimestamp){var r=Hn().getClient(),i=r&&r.getDsn();if(this.rn.sentry&&i){var o=new $n(i).getStoreEndpoint();if(o&&-1!==t.fetchData.url.indexOf(o)&&"POST"===t.fetchData.method&&t.args[1]&&t.args[1].body)return void Nt(t.args[1].body)}t.error?Hn().addBreadcrumb({category:"fetch",data:e({},t.fetchData,{status_code:t.response.status}),level:n.Severity.Error,type:"http"},{data:t.error,input:t.args}):Hn().addBreadcrumb({category:"fetch",data:e({},t.fetchData,{status_code:t.response.status}),type:"http"},{input:t.args,response:t.response})}},t.prototype.Hn=function(n){var t=D(),r=n.from,e=n.to,i=N(t.location.href),o=N(r),u=N(e);o.path||(o=i),i.protocol===u.protocol&&i.host===u.host&&(e=u.relative),i.protocol===o.protocol&&i.host===o.host&&(r=o.relative),Hn().addBreadcrumb({category:"navigation",data:{from:r,to:e}})},t.prototype.setupOnce=function(){var n=this;this.rn.console&&bn({callback:function(){for(var t=[],r=0;r=this.k)return r;var e=vt(at(n[t]));return this.Wn(n[t],t,u([e],r))},n.id="LinkedErrors",n}(),At=D(),Ut=function(){function n(){this.name=n.id}return n.prototype.setupOnce=function(){Mn(function(t){if(Hn().getIntegration(n)){if(!At.navigator||!At.location)return t;var r=t.request||{};return r.url=r.url||At.location.href,r.headers=r.headers||{},r.headers["User-Agent"]=At.navigator.userAgent,e({},t,{request:r})}return t})},n.id="UserAgent",n}(),qt=Object.freeze({GlobalHandlers:Tt,TryCatch:Dt,Breadcrumbs:Rt,LinkedErrors:Mt,UserAgent:Ut}),Lt=[new nt,new Yn,new Dt,new Rt,new Tt,new Mt,new Ut];var Ht={},Pt=D();Pt.Sentry&&Pt.Sentry.Integrations&&(Ht=Pt.Sentry.Integrations);var Ft=e({},Ht,tt,qt);return n.BrowserClient=kt,n.Hub=Un,n.Integrations=Ft,n.SDK_NAME=jt,n.SDK_VERSION="5.15.0",n.Scope=In,n.Transports=Et,n.addBreadcrumb=function(n){Xn("addBreadcrumb",n)},n.addGlobalEventProcessor=Mn,n.captureEvent=function(n){return Xn("captureEvent",n)},n.captureException=captureException,n.captureMessage=function(n,t){var r;try{throw new Error(n)}catch(n){r=n}return Xn("captureMessage",n,t,{originalException:n,syntheticException:r})},n.close=function(n){var t=Hn().getClient();return t?t.close(n):an.reject(!1)},n.configureScope=function(n){Xn("configureScope",n)},n.defaultIntegrations=Lt,n.flush=function(n){var t=Hn().getClient();return t?t.flush(n):an.reject(!1)},n.forceLoad=function(){},n.getCurrentHub=Hn,n.getHubFromCarrier=Fn,n.init=function(n){if(void 0===n&&(n={}),void 0===n.defaultIntegrations&&(n.defaultIntegrations=Lt),void 0===n.release){var t=D();t.SENTRY_RELEASE&&t.SENTRY_RELEASE.id&&(n.release=t.SENTRY_RELEASE.id)}!function(n,t){!0===t.debug&&Q.enable();var r=Hn(),e=new n(t);r.bindClient(e)}(kt,n)},n.lastEventId=function(){return Hn().lastEventId()},n.onLoad=function(n){n()},n.setContext=function(n,t){Xn("setContext",n,t)},n.setExtra=function(n,t){Xn("setExtra",n,t)},n.setExtras=function(n){Xn("setExtras",n)},n.setTag=function(n,t){Xn("setTag",n,t)},n.setTags=function(n){Xn("setTags",n)},n.setUser=function(n){Xn("setUser",n)},n.showReportDialog=function(n){void 0===n&&(n={}),n.eventId||(n.eventId=Hn().lastEventId());var t=Hn().getClient();t&&t.showReportDialog(n)},n.withScope=Bn,n.wrap=function(n){return Ot(n)()},n}({}); +/*! @sentry/browser 7.102.0 (4c0fa37) | https://github.com/getsentry/sentry-javascript */ +var Sentry=function(t){const n=Object.prototype.toString;function e(t){switch(n.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return l(t,Error)}}function r(t,e){return n.call(t)===`[object ${e}]`}function i(t){return r(t,"ErrorEvent")}function o(t){return r(t,"DOMError")}function s(t){return r(t,"String")}function c(t){return"object"==typeof t&&null!==t&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function u(t){return null===t||c(t)||"object"!=typeof t&&"function"!=typeof t}function a(t){return r(t,"Object")}function f(t){return"undefined"!=typeof Event&&l(t,Event)}function h(t){return Boolean(t&&t.then&&"function"==typeof t.then)}function l(t,n){try{return t instanceof n}catch(t){return!1}}function d(t){return!("object"!=typeof t||null===t||!t.__isVue&&!t.t)}function p(t,n=0){return"string"!=typeof t||0===n||t.length<=n?t:`${t.slice(0,n)}...`}function m(t,n){if(!Array.isArray(t))return"";const e=[];for(let n=0;ny(t,n,e)))}function v(t,n,e=250,r,i,o,s){if(!(o.exception&&o.exception.values&&s&&l(s.originalException,Error)))return;const c=o.exception.values.length>0?o.exception.values[o.exception.values.length-1]:void 0;var u,a;c&&(o.exception.values=(u=_(t,n,i,s.originalException,r,o.exception.values,c,0),a=e,u.map((t=>(t.value&&(t.value=p(t.value,a)),t)))))}function _(t,n,e,r,i,o,s,c){if(o.length>=e+1)return o;let u=[...o];if(l(r[i],Error)){b(s,c);const o=t(n,r[i]),a=u.length;E(o,i,a,c),u=_(t,n,e,r[i],i,[o,...u],o,a)}return Array.isArray(r.errors)&&r.errors.forEach(((r,o)=>{if(l(r,Error)){b(s,c);const a=t(n,r),f=u.length;E(a,`errors[${o}]`,f,c),u=_(t,n,e,r,i,[a,...u],a,f)}})),u}function b(t,n){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,is_exception_group:!0,exception_id:n}}function E(t,n,e,r){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,type:"chained",source:n,exception_id:e,parent_id:r}}function w(t){return t&&t.Math==Math?t:void 0}const $="object"==typeof globalThis&&w(globalThis)||"object"==typeof window&&w(window)||"object"==typeof self&&w(self)||"object"==typeof global&&w(global)||function(){return this}()||{};function S(){return $}function x(t,n,e){const r=e||$,i=r.__SENTRY__=r.__SENTRY__||{};return i[t]||(i[t]=n())}const k=S();function T(t,n={}){if(!t)return"";try{let e=t;const r=5,i=[];let o=0,s=0;const c=" > ",u=c.length;let a;const f=Array.isArray(n)?n:n.keyAttrs,h=!Array.isArray(n)&&n.maxStringLength||80;for(;e&&o++1&&s+i.length*u+a.length>=h));)i.push(a),s+=a.length,e=e.parentNode;return i.reverse().join(c)}catch(t){return""}}function j(t,n){const e=t,r=[];let i,o,c,u,a;if(!e||!e.tagName)return"";if(k.HTMLElement&&e instanceof HTMLElement&&e.dataset&&e.dataset.sentryComponent)return e.dataset.sentryComponent;r.push(e.tagName.toLowerCase());const f=n&&n.length?n.filter((t=>e.getAttribute(t))).map((t=>[t,e.getAttribute(t)])):null;if(f&&f.length)f.forEach((t=>{r.push(`[${t[0]}="${t[1]}"]`)}));else if(e.id&&r.push(`#${e.id}`),i=e.className,i&&s(i))for(o=i.split(/\s+/),a=0;a{const r=I[t];e[t]=n[t],n[t]=r}));try{return t()}finally{r.forEach((t=>{n[t]=e[t]}))}}const M=function(){let t=!1;const n={enable:()=>{t=!0},disable:()=>{t=!1},isEnabled:()=>t};return O.forEach((t=>{n[t]=()=>{}})),n}(),R=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function C(t,n=!1){const{host:e,path:r,pass:i,port:o,projectId:s,protocol:c,publicKey:u}=t;return`${c}://${u}${n&&i?`:${i}`:""}@${e}${o?`:${o}`:""}/${r?`${r}/`:r}${s}`}function A(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function N(t){const n="string"==typeof t?function(t){const n=R.exec(t);if(!n)return void D((()=>{console.error(`Invalid Sentry Dsn: ${t}`)}));const[e,r,i="",o,s="",c]=n.slice(1);let u="",a=c;const f=a.split("/");if(f.length>1&&(u=f.slice(0,-1).join("/"),a=f.pop()),a){const t=a.match(/^\d+/);t&&(a=t[0])}return A({host:o,pass:i,path:u,projectId:a,port:s,protocol:e,publicKey:r})}(t):A(t);if(n)return n}class L extends Error{constructor(t,n="warn"){super(t),this.message=t,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=n}}function P(t,n,e){if(!(n in t))return;const r=t[n],i=e(r);"function"==typeof i&&B(i,r),t[n]=i}function U(t,n,e){try{Object.defineProperty(t,n,{value:e,writable:!0,configurable:!0})}catch(t){}}function B(t,n){try{const e=n.prototype||{};t.prototype=n.prototype=e,U(t,"__sentry_original__",n)}catch(t){}}function F(t){return t.__sentry_original__}function H(t){if(e(t))return{message:t.message,name:t.name,stack:t.stack,...W(t)};if(f(t)){const n={type:t.type,target:q(t.target),currentTarget:q(t.currentTarget),...W(t)};return"undefined"!=typeof CustomEvent&&l(t,CustomEvent)&&(n.detail=t.detail),n}return t}function q(t){try{return n=t,"undefined"!=typeof Element&&l(n,Element)?T(t):Object.prototype.toString.call(t)}catch(t){return""}var n}function W(t){if("object"==typeof t&&null!==t){const n={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n}return{}}function z(t){return X(t,new Map)}function X(t,n){if(function(t){if(!a(t))return!1;try{const n=Object.getPrototypeOf(t).constructor.name;return!n||"Object"===n}catch(t){return!0}}(t)){const e=n.get(t);if(void 0!==e)return e;const r={};n.set(t,r);for(const e of Object.keys(t))void 0!==t[e]&&(r[e]=X(t[e],n));return r}if(Array.isArray(t)){const e=n.get(t);if(void 0!==e)return e;const r=[];return n.set(t,r),t.forEach((t=>{r.push(X(t,n))})),r}return t}const G=/\(error: (.*)\)/,J=/captureMessage|captureException/;function K(...t){const n=t.sort(((t,n)=>t[0]-n[0])).map((t=>t[1]));return(t,e=0)=>{const r=[],i=t.split("\n");for(let t=e;t1024)continue;const o=G.test(e)?e.replace(G,"$1"):e;if(!o.match(/\S*Error: /)){for(const t of n){const n=t(o);if(n){r.push(n);break}}if(r.length>=50)break}}return function(t){if(!t.length)return[];const n=Array.from(t);/sentryWrapped/.test(n[n.length-1].function||"")&&n.pop();n.reverse(),J.test(n[n.length-1].function||"")&&(n.pop(),J.test(n[n.length-1].function||"")&&n.pop());return n.slice(0,50).map((t=>({...t,filename:t.filename||n[n.length-1].filename,function:t.function||"?"})))}(r)}}const V="";function Y(t){try{return t&&"function"==typeof t&&t.name||V}catch(t){return V}}const Z={},Q={};function tt(t,n){Z[t]=Z[t]||[],Z[t].push(n)}function nt(t,n){Q[t]||(n(),Q[t]=!0)}function et(t,n){const e=t&&Z[t];if(e)for(const t of e)try{t(n)}catch(t){}}function rt(){"console"in $&&O.forEach((function(t){t in $.console&&P($.console,t,(function(n){return I[t]=n,function(...n){et("console",{args:n,level:t});const e=I[t];e&&e.apply($.console,n)}}))}))}function it(){const t=$,n=t.crypto||t.msCrypto;let e=()=>16*Math.random();try{if(n&&n.randomUUID)return n.randomUUID().replace(/-/g,"");n&&n.getRandomValues&&(e=()=>{const t=new Uint8Array(1);return n.getRandomValues(t),t[0]})}catch(t){}return([1e7]+1e3+4e3+8e3+1e11).replace(/[018]/g,(t=>(t^(15&e())>>t/4).toString(16)))}function ot(t){return t.exception&&t.exception.values?t.exception.values[0]:void 0}function st(t){const{message:n,event_id:e}=t;if(n)return n;const r=ot(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||e||"":e||""}function ct(t,n,e){const r=t.exception=t.exception||{},i=r.values=r.values||[],o=i[0]=i[0]||{};o.value||(o.value=n||""),o.type||(o.type=e||"Error")}function ut(t,n){const e=ot(t);if(!e)return;const r=e.mechanism;if(e.mechanism={type:"generic",handled:!0,...r,...n},n&&"data"in n){const t={...r&&r.data,...n.data};e.mechanism.data=t}}function at(t){if(t&&t.__sentry_captured__)return!0;try{U(t,"__sentry_captured__",!0)}catch(t){}return!1}function ft(t){return Array.isArray(t)?t:[t]}const ht=$;let lt,dt,pt;function mt(){if(!ht.document)return;const t=et.bind(null,"dom"),n=yt(t,!0);ht.document.addEventListener("click",n,!1),ht.document.addEventListener("keypress",n,!1),["EventTarget","Node"].forEach((n=>{const e=ht[n]&&ht[n].prototype;e&&e.hasOwnProperty&&e.hasOwnProperty("addEventListener")&&(P(e,"addEventListener",(function(n){return function(e,r,i){if("click"===e||"keypress"==e)try{const r=this,o=r.__sentry_instrumentation_handlers__=r.__sentry_instrumentation_handlers__||{},s=o[e]=o[e]||{refCount:0};if(!s.handler){const r=yt(t);s.handler=r,n.call(this,e,r,i)}s.refCount++}catch(t){}return n.call(this,e,r,i)}})),P(e,"removeEventListener",(function(t){return function(n,e,r){if("click"===n||"keypress"==n)try{const e=this,i=e.__sentry_instrumentation_handlers__||{},o=i[n];o&&(o.refCount--,o.refCount<=0&&(t.call(this,n,o.handler,r),o.handler=void 0,delete i[n]),0===Object.keys(i).length&&delete e.__sentry_instrumentation_handlers__)}catch(t){}return t.call(this,n,e,r)}})))}))}function yt(t,n=!1){return e=>{if(!e||e._sentryCaptured)return;const r=function(t){try{return t.target}catch(t){return null}}(e);if(function(t,n){return"keypress"===t&&(!n||!n.tagName||"INPUT"!==n.tagName&&"TEXTAREA"!==n.tagName&&!n.isContentEditable)}(e.type,r))return;U(e,"_sentryCaptured",!0),r&&!r._sentryId&&U(r,"_sentryId",it());const i="keypress"===e.type?"input":e.type;if(!function(t){if(t.type!==dt)return!1;try{if(!t.target||t.target._sentryId!==pt)return!1}catch(t){}return!0}(e)){t({event:e,name:i,global:n}),dt=e.type,pt=r?r._sentryId:void 0}clearTimeout(lt),lt=ht.setTimeout((()=>{pt=void 0,dt=void 0}),1e3)}}const gt=S();function vt(){if(!("fetch"in gt))return!1;try{return new Headers,new Request("http://www.example.com"),new Response,!0}catch(t){return!1}}function _t(t){return t&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}function bt(){(function(){if("string"==typeof EdgeRuntime)return!0;if(!vt())return!1;if(_t(gt.fetch))return!0;let t=!1;const n=gt.document;if(n&&"function"==typeof n.createElement)try{const e=n.createElement("iframe");e.hidden=!0,n.head.appendChild(e),e.contentWindow&&e.contentWindow.fetch&&(t=_t(e.contentWindow.fetch)),n.head.removeChild(e)}catch(t){}return t})()&&P($,"fetch",(function(t){return function(...n){const{method:e,url:r}=function(t){if(0===t.length)return{method:"GET",url:""};if(2===t.length){const[n,e]=t;return{url:wt(n),method:Et(e,"method")?String(e.method).toUpperCase():"GET"}}const n=t[0];return{url:wt(n),method:Et(n,"method")?String(n.method).toUpperCase():"GET"}}(n),i={args:n,fetchData:{method:e,url:r},startTimestamp:Date.now()};return et("fetch",{...i}),t.apply($,n).then((t=>(et("fetch",{...i,endTimestamp:Date.now(),response:t}),t)),(t=>{throw et("fetch",{...i,endTimestamp:Date.now(),error:t}),t}))}}))}function Et(t,n){return!!t&&"object"==typeof t&&!!t[n]}function wt(t){return"string"==typeof t?t:t?Et(t,"url")?t.url:t.toString?t.toString():"":""}let $t=null;function St(){$t=$.onerror,$.onerror=function(t,n,e,r,i){const o={column:r,error:i,line:e,msg:t,url:n};return et("error",o),!(!$t||$t.__SENTRY_LOADER__)&&$t.apply(this,arguments)},$.onerror.__SENTRY_INSTRUMENTED__=!0}let xt=null;function kt(){xt=$.onunhandledrejection,$.onunhandledrejection=function(t){const n=t;return et("unhandledrejection",n),!(xt&&!xt.__SENTRY_LOADER__)||xt.apply(this,arguments)},$.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const Tt=S();const jt=$;let Ot;function It(t){const n="history";tt(n,t),nt(n,Dt)}function Dt(){if(!function(){const t=Tt.chrome,n=t&&t.app&&t.app.runtime,e="history"in Tt&&!!Tt.history.pushState&&!!Tt.history.replaceState;return!n&&e}())return;const t=jt.onpopstate;function n(t){return function(...n){const e=n.length>2?n[2]:void 0;if(e){const t=Ot,n=String(e);Ot=n;et("history",{from:t,to:n})}return t.apply(this,n)}}jt.onpopstate=function(...n){const e=jt.location.href,r=Ot;Ot=e;if(et("history",{from:r,to:e}),t)try{return t.apply(this,n)}catch(t){}},P(jt.history,"pushState",n),P(jt.history,"replaceState",n)}const Mt=$;function Rt(){if(!Mt.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;P(t,"open",(function(t){return function(...n){const e=Date.now(),r=s(n[0])?n[0].toUpperCase():void 0,i=function(t){if(s(t))return t;try{return t.toString()}catch(t){}return}(n[1]);if(!r||!i)return t.apply(this,n);this.__sentry_xhr_v3__={method:r,url:i,request_headers:{}},"POST"===r&&i.match(/sentry_key/)&&(this.__sentry_own_request__=!0);const o=()=>{const t=this.__sentry_xhr_v3__;if(t&&4===this.readyState){try{t.status_code=this.status}catch(t){}et("xhr",{args:[r,i],endTimestamp:Date.now(),startTimestamp:e,xhr:this})}};return"onreadystatechange"in this&&"function"==typeof this.onreadystatechange?P(this,"onreadystatechange",(function(t){return function(...n){return o(),t.apply(this,n)}})):this.addEventListener("readystatechange",o),P(this,"setRequestHeader",(function(t){return function(...n){const[e,r]=n,i=this.__sentry_xhr_v3__;return i&&s(e)&&s(r)&&(i.request_headers[e.toLowerCase()]=r),t.apply(this,n)}})),t.apply(this,n)}})),P(t,"send",(function(t){return function(...n){const e=this.__sentry_xhr_v3__;if(!e)return t.apply(this,n);void 0!==n[0]&&(e.body=n[0]);return et("xhr",{args:[e.method,e.url],startTimestamp:Date.now(),xhr:this}),t.apply(this,n)}}))}function Ct(t,n=100,e=1/0){try{return Nt("",t,n,e)}catch(t){return{ERROR:`**non-serializable** (${t})`}}}function At(t,n=3,e=102400){const r=Ct(t,n);return i=r,function(t){return~-encodeURI(t).split(/%..|./).length}(JSON.stringify(i))>e?At(t,n-1,e):r;var i}function Nt(t,n,e=1/0,r=1/0,i=function(){const t="function"==typeof WeakSet,n=t?new WeakSet:[];return[function(e){if(t)return!!n.has(e)||(n.add(e),!1);for(let t=0;t=r){l[t]="[MaxProperties ~]";break}const n=m[t];l[t]=Nt(t,n,f-1,r,i),p++}return s(n),l}var Lt;function Pt(t){return new Bt((n=>{n(t)}))}function Ut(t){return new Bt(((n,e)=>{e(t)}))}!function(t){t[t.PENDING=0]="PENDING";t[t.RESOLVED=1]="RESOLVED";t[t.REJECTED=2]="REJECTED"}(Lt||(Lt={}));class Bt{constructor(t){Bt.prototype.__init.call(this),Bt.prototype.__init2.call(this),Bt.prototype.__init3.call(this),Bt.prototype.__init4.call(this),this.o=Lt.PENDING,this.u=[];try{t(this.h,this.l)}catch(t){this.l(t)}}then(t,n){return new Bt(((e,r)=>{this.u.push([!1,n=>{if(t)try{e(t(n))}catch(t){r(t)}else e(n)},t=>{if(n)try{e(n(t))}catch(t){r(t)}else r(t)}]),this.p()}))}catch(t){return this.then((t=>t),t)}finally(t){return new Bt(((n,e)=>{let r,i;return this.then((n=>{i=!1,r=n,t&&t()}),(n=>{i=!0,r=n,t&&t()})).then((()=>{i?e(r):n(r)}))}))}__init(){this.h=t=>{this.m(Lt.RESOLVED,t)}}__init2(){this.l=t=>{this.m(Lt.REJECTED,t)}}__init3(){this.m=(t,n)=>{this.o===Lt.PENDING&&(h(n)?n.then(this.h,this.l):(this.o=t,this.v=n,this.p()))}}__init4(){this.p=()=>{if(this.o===Lt.PENDING)return;const t=this.u.slice();this.u=[],t.forEach((t=>{t[0]||(this.o===Lt.RESOLVED&&t[1](this.v),this.o===Lt.REJECTED&&t[2](this.v),t[0]=!0)}))}}}function Ft(t){const n=[];function e(t){return n.splice(n.indexOf(t),1)[0]}return{$:n,add:function(r){if(!(void 0===t||n.lengthe(i))).then(null,(()=>e(i).then(null,(()=>{})))),i},drain:function(t){return new Bt(((e,r)=>{let i=n.length;if(!i)return e(!0);const o=setTimeout((()=>{t&&t>0&&e(!1)}),t);n.forEach((t=>{Pt(t).then((()=>{--i||(clearTimeout(o),e(!0))}),r)}))}))}}}function Ht(t){if(!t)return{};const n=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!n)return{};const e=n[6]||"",r=n[8]||"";return{host:n[4],path:n[5],protocol:n[2],search:e,hash:r,relative:n[5]+e+r}}const qt=["fatal","error","warning","log","info","debug"];function Wt(t){return"warn"===t?"warning":qt.includes(t)?t:"log"}function zt(){return Date.now()/1e3}const Xt=function(){const{performance:t}=$;if(!t||!t.now)return zt;const n=Date.now()-t.now(),e=null==t.timeOrigin?n:t.timeOrigin;return()=>(e+t.now())/1e3}();(()=>{const{performance:t}=$;if(!t||!t.now)return;const n=36e5,e=t.now(),r=Date.now(),i=t.timeOrigin?Math.abs(t.timeOrigin+e-r):n,o=it.split("=").map((t=>decodeURIComponent(t.trim()))))).reduce(((t,[n,e])=>(t[n]=e,t)),{})}const Kt=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function Vt(t,n){const e=function(t){if(!t)return;const n=t.match(Kt);if(!n)return;let e;return"1"===n[3]?e=!0:"0"===n[3]&&(e=!1),{traceId:n[1],parentSampled:e,parentSpanId:n[2]}}(t),r=function(t){if(!s(t)&&!Array.isArray(t))return;let n={};if(Array.isArray(t))n=t.reduce(((t,n)=>{const e=Jt(n);for(const n of Object.keys(e))t[n]=e[n];return t}),{});else{if(!t)return;n=Jt(t)}const e=Object.entries(n).reduce(((t,[n,e])=>(n.match(Gt)&&(t[n.slice("sentry-".length)]=e),t)),{});return Object.keys(e).length>0?e:void 0}(n),{traceId:i,parentSpanId:o,parentSampled:c}=e||{};return e?{traceparentData:e,dynamicSamplingContext:r||{},propagationContext:{traceId:i||it(),parentSpanId:o||it().substring(16),spanId:it().substring(16),sampled:c,dsc:r||{}}}:{traceparentData:e,dynamicSamplingContext:void 0,propagationContext:{traceId:i||it(),spanId:it().substring(16)}}}function Yt(t,n=[]){return[t,n]}function Zt(t,n){const[e,r]=t;return[e,[...r,n]]}function Qt(t,n){const e=t[1];for(const t of e){if(n(t,t[0].type))return!0}return!1}function tn(t,n){return(n||new TextEncoder).encode(t)}function nn(t,n){const[e,r]=t;let i=JSON.stringify(e);function o(t){"string"==typeof i?i="string"==typeof t?i+t:[tn(i,n),t]:i.push("string"==typeof t?tn(t,n):t)}for(const t of r){const[n,e]=t;if(o(`\n${JSON.stringify(n)}\n`),"string"==typeof e||e instanceof Uint8Array)o(e);else{let t;try{t=JSON.stringify(e)}catch(n){t=JSON.stringify(Ct(e))}o(t)}}return"string"==typeof i?i:function(t){const n=t.reduce(((t,n)=>t+n.length),0),e=new Uint8Array(n);let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}(i)}function en(t,n){const e="string"==typeof t.data?tn(t.data,n):t.data;return[z({type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType}),e]}const rn={session:"session",sessions:"session",attachment:"attachment",transaction:"transaction",event:"error",client_report:"internal",user_report:"default",profile:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",feedback:"feedback",statsd:"unknown"};function on(t){return rn[t]}function sn(t){if(!t||!t.sdk)return;const{name:n,version:e}=t.sdk;return{name:n,version:e}}function cn(t,{statusCode:n,headers:e},r=Date.now()){const i={...t},o=e&&e["x-sentry-rate-limits"],s=e&&e["retry-after"];if(o)for(const t of o.trim().split(",")){const[n,e]=t.split(":",2),o=parseInt(n,10),s=1e3*(isNaN(o)?60:o);if(e)for(const t of e.split(";"))i[t]=r+s;else i.all=r+s}else s?i.all=r+function(t,n=Date.now()){const e=parseInt(`${t}`,10);if(!isNaN(e))return 1e3*e;const r=Date.parse(`${t}`);return isNaN(r)?6e4:r-n}(s,r):429===n&&(i.all=r+6e4);return i}function un(t,n){const e={type:n.name||n.constructor.name,value:n.message},r=function(t,n){return t(n.stack||"",1)}(t,n);return r.length&&(e.stacktrace={frames:r}),e}class an{static __initStatic(){this.id="Feedback"}constructor(t){this.name=an.id,D((()=>{console.warn("You are using new Feedback() even though this bundle does not include Feedback.")}))}setupOnce(){}openDialog(){}closeDialog(){}attachTo(){}createWidget(){}removeWidget(){}getWidget(){}remove(){}}an.__initStatic();class fn{static __initStatic(){this.id="Replay"}constructor(t){this.name=fn.id,D((()=>{console.warn("You are using new Replay() even though this bundle does not include replay.")}))}setupOnce(){}start(){}stop(){}flush(){}}fn.__initStatic();class hn{static __initStatic(){this.id="BrowserTracing"}constructor(t){this.name=hn.id,D((()=>{console.warn("You are using new BrowserTracing() even though this bundle does not include tracing.")}))}setupOnce(){}}hn.__initStatic();const ln="production";function dn(){return x("globalEventProcessors",(()=>[]))}function pn(t){dn().push(t)}function mn(t,n,e,r=0){return new Bt(((i,o)=>{const s=t[r];if(null===n||"function"!=typeof s)i(n);else{const c=s({...n},e);h(c)?c.then((n=>mn(t,n,e,r+1).then(i))).then(null,o):mn(t,c,e,r+1).then(i).then(null,o)}}))}function yn(t){const n=Xt(),e={sid:it(),init:!0,timestamp:n,started:n,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>function(t){return z({sid:`${t.sid}`,init:t.init,started:new Date(1e3*t.started).toISOString(),timestamp:new Date(1e3*t.timestamp).toISOString(),status:t.status,errors:t.errors,did:"number"==typeof t.did||"string"==typeof t.did?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}})}(e)};return t&&gn(e,t),e}function gn(t,n={}){if(n.user&&(!t.ipAddress&&n.user.ip_address&&(t.ipAddress=n.user.ip_address),t.did||n.did||(t.did=n.user.id||n.user.email||n.user.username)),t.timestamp=n.timestamp||Xt(),n.abnormal_mechanism&&(t.abnormal_mechanism=n.abnormal_mechanism),n.ignoreDuration&&(t.ignoreDuration=n.ignoreDuration),n.sid&&(t.sid=32===n.sid.length?n.sid:it()),void 0!==n.init&&(t.init=n.init),!t.did&&n.did&&(t.did=`${n.did}`),"number"==typeof n.started&&(t.started=n.started),t.ignoreDuration)t.duration=void 0;else if("number"==typeof n.duration)t.duration=n.duration;else{const n=t.timestamp-t.started;t.duration=n>=0?n:0}n.release&&(t.release=n.release),n.environment&&(t.environment=n.environment),!t.ipAddress&&n.ipAddress&&(t.ipAddress=n.ipAddress),!t.userAgent&&n.userAgent&&(t.userAgent=n.userAgent),"number"==typeof n.errors&&(t.errors=n.errors),n.status&&(t.status=n.status)}function vn(t,n){let e={};n?e={status:n}:"ok"===t.status&&(e={status:"exited"}),gn(t,e)}function _n(t){const{spanId:n,traceId:e}=t.spanContext(),{data:r,op:i,parent_span_id:o,status:s,tags:c,origin:u}=En(t);return z({data:r,op:i,parent_span_id:o,span_id:n,status:s,tags:c,trace_id:e,origin:u})}function bn(t){return t>9999999999?t/1e3:t}function En(t){return function(t){return"function"==typeof t.getSpanJSON}(t)?t.getSpanJSON():"function"==typeof t.toJSON?t.toJSON():{}}function wn(t,n,e,r,i,o){const{normalizeDepth:s=3,normalizeMaxBreadth:c=1e3}=t,u={...n,event_id:n.event_id||e.event_id||it(),timestamp:n.timestamp||zt()},a=e.integrations||t.integrations.map((t=>t.name));!function(t,n){const{environment:e,release:r,dist:i,maxValueLength:o=250}=n;"environment"in t||(t.environment="environment"in n?e:ln);void 0===t.release&&void 0!==r&&(t.release=r);void 0===t.dist&&void 0!==i&&(t.dist=i);t.message&&(t.message=p(t.message,o));const s=t.exception&&t.exception.values&&t.exception.values[0];s&&s.value&&(s.value=p(s.value,o));const c=t.request;c&&c.url&&(c.url=p(c.url,o))}(u,t),function(t,n){n.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...n])}(u,a),void 0===n.type&&function(t,n){const e=$._sentryDebugIds;if(!e)return;let r;const i=$n.get(n);i?r=i:(r=new Map,$n.set(n,r));const o=Object.keys(e).reduce(((t,i)=>{let o;const s=r.get(i);s?o=s:(o=n(i),r.set(i,o));for(let n=o.length-1;n>=0;n--){const r=o[n];if(r.filename){t[r.filename]=e[i];break}}return t}),{});try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.filename&&(t.debug_id=o[t.filename])}))}))}catch(t){}}(u,t.stackParser);const f=function(t,n){if(!n)return t;const e=t?t.clone():new Hn;return e.update(n),e}(r,e.captureContext);e.mechanism&&ut(u,e.mechanism);const h=i&&i.getEventProcessors?i.getEventProcessors():[],l=function(){Fn||(Fn=new Hn);return Fn}().getScopeData();if(o){Un(l,o.getScopeData())}if(f){Un(l,f.getScopeData())}const d=[...e.attachments||[],...l.attachments];d.length&&(e.attachments=d),Pn(u,l);return mn([...h,...dn(),...l.eventProcessors],u,e).then((t=>(t&&function(t){const n={};try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.debug_id&&(t.abs_path?n[t.abs_path]=t.debug_id:t.filename&&(n[t.filename]=t.debug_id),delete t.debug_id)}))}))}catch(t){}if(0===Object.keys(n).length)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const e=t.debug_meta.images;Object.keys(n).forEach((t=>{e.push({type:"sourcemap",code_file:t,debug_id:n[t]})}))}(t),"number"==typeof s&&s>0?function(t,n,e){if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map((t=>({...t,...t.data&&{data:Ct(t.data,n,e)}})))},...t.user&&{user:Ct(t.user,n,e)},...t.contexts&&{contexts:Ct(t.contexts,n,e)},...t.extra&&{extra:Ct(t.extra,n,e)}};t.contexts&&t.contexts.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=Ct(t.contexts.trace.data,n,e)));t.spans&&(r.spans=t.spans.map((t=>{const r=En(t).data;return r&&(t.data=Ct(r,n,e)),t})));return r}(t,s,c):t)))}const $n=new WeakMap;function Sn(t){if(t)return function(t){return t instanceof Hn||"function"==typeof t}(t)||function(t){return Object.keys(t).some((t=>xn.includes(t)))}(t)?{captureContext:t}:t}const xn=["user","level","extra","contexts","tags","fingerprint","requestSession","propagationContext"];function captureException(t,n){return Vn().captureException(t,Sn(n))}function kn(t,n){return Vn().captureEvent(t,n)}function Tn(t,n){Vn().addBreadcrumb(t,n)}function jn(...t){const n=Vn();if(2===t.length){const[e,r]=t;return e?n.withScope((()=>(n.getStackTop().scope=e,r(e)))):n.withScope(r)}return n.withScope(t[0])}function On(){return Vn().getClient()}function In(){return Vn().getScope()}function Dn(t){const n=On(),e=Yn(),r=In(),{release:i,environment:o=ln}=n&&n.getOptions()||{},{userAgent:s}=$.navigator||{},c=yn({release:i,environment:o,user:r.getUser()||e.getUser(),...s&&{userAgent:s},...t}),u=e.getSession();return u&&"ok"===u.status&&gn(u,{status:"exited"}),Mn(),e.setSession(c),r.setSession(c),c}function Mn(){const t=Yn(),n=In(),e=n.getSession()||t.getSession();e&&vn(e),Rn(),t.setSession(),n.setSession()}function Rn(){const t=Yn(),n=In(),e=On(),r=n.getSession()||t.getSession();r&&e&&e.captureSession&&e.captureSession(r)}function Cn(t=!1){t?Mn():Rn()}function An(t){return t.transaction}function Nn(t,n,e){const r=n.getOptions(),{publicKey:i}=n.getDsn()||{},{segment:o}=e&&e.getUser()||{},s=z({environment:r.environment||ln,release:r.release,user_segment:o,public_key:i,trace_id:t});return n.emit&&n.emit("createDsc",s),s}function Ln(t){const n=On();if(!n)return{};const e=Nn(En(t).trace_id||"",n,In()),r=An(t);if(!r)return e;const i=r&&r._frozenDynamicSamplingContext;if(i)return i;const{sampleRate:o,source:s}=r.metadata;null!=o&&(e.sample_rate=`${o}`);const c=En(r);return s&&"url"!==s&&(e.transaction=c.description),e.sampled=String(function(t){const{traceFlags:n}=t.spanContext();return Boolean(1&n)}(r)),n.emit&&n.emit("createDsc",e),e}function Pn(t,n){const{fingerprint:e,span:r,breadcrumbs:i,sdkProcessingMetadata:o}=n;!function(t,n){const{extra:e,tags:r,user:i,contexts:o,level:s,transactionName:c}=n,u=z(e);u&&Object.keys(u).length&&(t.extra={...u,...t.extra});const a=z(r);a&&Object.keys(a).length&&(t.tags={...a,...t.tags});const f=z(i);f&&Object.keys(f).length&&(t.user={...f,...t.user});const h=z(o);h&&Object.keys(h).length&&(t.contexts={...h,...t.contexts});s&&(t.level=s);c&&(t.transaction=c)}(t,n),r&&function(t,n){t.contexts={trace:_n(n),...t.contexts};const e=An(n);if(e){t.sdkProcessingMetadata={dynamicSamplingContext:Ln(n),...t.sdkProcessingMetadata};const r=En(e).description;r&&(t.tags={transaction:r,...t.tags})}}(t,r),function(t,n){t.fingerprint=t.fingerprint?ft(t.fingerprint):[],n&&(t.fingerprint=t.fingerprint.concat(n));t.fingerprint&&!t.fingerprint.length&&delete t.fingerprint}(t,e),function(t,n){const e=[...t.breadcrumbs||[],...n];t.breadcrumbs=e.length?e:void 0}(t,i),function(t,n){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...n}}(t,o)}function Un(t,n){const{extra:e,tags:r,user:i,contexts:o,level:s,sdkProcessingMetadata:c,breadcrumbs:u,fingerprint:a,eventProcessors:f,attachments:h,propagationContext:l,transactionName:d,span:p}=n;Bn(t,"extra",e),Bn(t,"tags",r),Bn(t,"user",i),Bn(t,"contexts",o),Bn(t,"sdkProcessingMetadata",c),s&&(t.level=s),d&&(t.transactionName=d),p&&(t.span=p),u.length&&(t.breadcrumbs=[...t.breadcrumbs,...u]),a.length&&(t.fingerprint=[...t.fingerprint,...a]),f.length&&(t.eventProcessors=[...t.eventProcessors,...f]),h.length&&(t.attachments=[...t.attachments,...h]),t.propagationContext={...t.propagationContext,...l}}function Bn(t,n,e){if(e&&Object.keys(e).length){t[n]={...t[n]};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[n][r]=e[r])}}let Fn;class Hn{constructor(){this._=!1,this.S=[],this.k=[],this.T=[],this.j=[],this.O={},this.I={},this.D={},this.M={},this.R={},this.C=qn()}static clone(t){return t?t.clone():new Hn}clone(){const t=new Hn;return t.T=[...this.T],t.I={...this.I},t.D={...this.D},t.M={...this.M},t.O=this.O,t.A=this.A,t.N=this.N,t.L=this.L,t.P=this.P,t.U=this.U,t.k=[...this.k],t.B=this.B,t.j=[...this.j],t.R={...this.R},t.C={...this.C},t.F=this.F,t}setClient(t){this.F=t}getClient(){return this.F}addScopeListener(t){this.S.push(t)}addEventProcessor(t){return this.k.push(t),this}setUser(t){return this.O=t||{email:void 0,id:void 0,ip_address:void 0,segment:void 0,username:void 0},this.L&&gn(this.L,{user:t}),this.H(),this}getUser(){return this.O}getRequestSession(){return this.B}setRequestSession(t){return this.B=t,this}setTags(t){return this.I={...this.I,...t},this.H(),this}setTag(t,n){return this.I={...this.I,[t]:n},this.H(),this}setExtras(t){return this.D={...this.D,...t},this.H(),this}setExtra(t,n){return this.D={...this.D,[t]:n},this.H(),this}setFingerprint(t){return this.U=t,this.H(),this}setLevel(t){return this.A=t,this.H(),this}setTransactionName(t){return this.P=t,this.H(),this}setContext(t,n){return null===n?delete this.M[t]:this.M[t]=n,this.H(),this}setSpan(t){return this.N=t,this.H(),this}getSpan(){return this.N}getTransaction(){const t=this.N;return t&&t.transaction}setSession(t){return t?this.L=t:delete this.L,this.H(),this}getSession(){return this.L}update(t){if(!t)return this;const n="function"==typeof t?t(this):t;if(n instanceof Hn){const t=n.getScopeData();this.I={...this.I,...t.tags},this.D={...this.D,...t.extra},this.M={...this.M,...t.contexts},t.user&&Object.keys(t.user).length&&(this.O=t.user),t.level&&(this.A=t.level),t.fingerprint.length&&(this.U=t.fingerprint),n.getRequestSession()&&(this.B=n.getRequestSession()),t.propagationContext&&(this.C=t.propagationContext)}else if(a(n)){const n=t;this.I={...this.I,...n.tags},this.D={...this.D,...n.extra},this.M={...this.M,...n.contexts},n.user&&(this.O=n.user),n.level&&(this.A=n.level),n.fingerprint&&(this.U=n.fingerprint),n.requestSession&&(this.B=n.requestSession),n.propagationContext&&(this.C=n.propagationContext)}return this}clear(){return this.T=[],this.I={},this.D={},this.O={},this.M={},this.A=void 0,this.P=void 0,this.U=void 0,this.B=void 0,this.N=void 0,this.L=void 0,this.H(),this.j=[],this.C=qn(),this}addBreadcrumb(t,n){const e="number"==typeof n?n:100;if(e<=0)return this;const r={timestamp:zt(),...t},i=this.T;return i.push(r),this.T=i.length>e?i.slice(-e):i,this.H(),this}getLastBreadcrumb(){return this.T[this.T.length-1]}clearBreadcrumbs(){return this.T=[],this.H(),this}addAttachment(t){return this.j.push(t),this}getAttachments(){return this.getScopeData().attachments}clearAttachments(){return this.j=[],this}getScopeData(){const{T:t,j:n,M:e,I:r,D:i,O:o,A:s,U:c,k:u,C:a,R:f,P:h,N:l}=this;return{breadcrumbs:t,attachments:n,contexts:e,tags:r,extra:i,user:o,level:s,fingerprint:c||[],eventProcessors:u,propagationContext:a,sdkProcessingMetadata:f,transactionName:h,span:l}}applyToEvent(t,n={},e=[]){Pn(t,this.getScopeData());return mn([...e,...dn(),...this.k],t,n)}setSDKProcessingMetadata(t){return this.R={...this.R,...t},this}setPropagationContext(t){return this.C=t,this}getPropagationContext(){return this.C}captureException(t,n){const e=n&&n.event_id?n.event_id:it();if(!this.F)return M.warn("No client configured on scope - will not capture exception!"),e;const r=new Error("Sentry syntheticException");return this.F.captureException(t,{originalException:t,syntheticException:r,...n,event_id:e},this),e}captureMessage(t,n,e){const r=e&&e.event_id?e.event_id:it();if(!this.F)return M.warn("No client configured on scope - will not capture message!"),r;const i=new Error(t);return this.F.captureMessage(t,n,{originalException:t,syntheticException:i,...e,event_id:r},this),r}captureEvent(t,n){const e=n&&n.event_id?n.event_id:it();return this.F?(this.F.captureEvent(t,{...n,event_id:e},this),e):(M.warn("No client configured on scope - will not capture event!"),e)}H(){this._||(this._=!0,this.S.forEach((t=>{t(this)})),this._=!1)}}function qn(){return{traceId:it(),spanId:it().substring(16)}}const Wn="7.102.0",zn=parseFloat(Wn),Xn=100;class Gn{constructor(t,n,e,r=zn){let i,o;this.q=r,n?i=n:(i=new Hn,i.setClient(t)),e?o=e:(o=new Hn,o.setClient(t)),this.W=[{scope:i}],t&&this.bindClient(t),this.X=o}isOlderThan(t){return this.q(this.popScope(),t)),(t=>{throw this.popScope(),t})):(this.popScope(),e)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this.X}getStack(){return this.W}getStackTop(){return this.W[this.W.length-1]}captureException(t,n){const e=this.G=n&&n.event_id?n.event_id:it(),r=new Error("Sentry syntheticException");return this.getScope().captureException(t,{originalException:t,syntheticException:r,...n,event_id:e}),e}captureMessage(t,n,e){const r=this.G=e&&e.event_id?e.event_id:it(),i=new Error(t);return this.getScope().captureMessage(t,n,{originalException:t,syntheticException:i,...e,event_id:r}),r}captureEvent(t,n){const e=n&&n.event_id?n.event_id:it();return t.type||(this.G=e),this.getScope().captureEvent(t,{...n,event_id:e}),e}lastEventId(){return this.G}addBreadcrumb(t,n){const{scope:e,client:r}=this.getStackTop();if(!r)return;const{beforeBreadcrumb:i=null,maxBreadcrumbs:o=Xn}=r.getOptions&&r.getOptions()||{};if(o<=0)return;const s={timestamp:zt(),...t},c=i?D((()=>i(s,n))):s;null!==c&&(r.emit&&r.emit("beforeAddBreadcrumb",c,n),e.addBreadcrumb(c,o))}setUser(t){this.getScope().setUser(t),this.getIsolationScope().setUser(t)}setTags(t){this.getScope().setTags(t),this.getIsolationScope().setTags(t)}setExtras(t){this.getScope().setExtras(t),this.getIsolationScope().setExtras(t)}setTag(t,n){this.getScope().setTag(t,n),this.getIsolationScope().setTag(t,n)}setExtra(t,n){this.getScope().setExtra(t,n),this.getIsolationScope().setExtra(t,n)}setContext(t,n){this.getScope().setContext(t,n),this.getIsolationScope().setContext(t,n)}configureScope(t){const{scope:n,client:e}=this.getStackTop();e&&t(n)}run(t){const n=Kn(this);try{t(this)}finally{Kn(n)}}getIntegration(t){const n=this.getClient();if(!n)return null;try{return n.getIntegration(t)}catch(t){return null}}startTransaction(t,n){const e=this.J("startTransaction",t,n);return e}traceHeaders(){return this.J("traceHeaders")}captureSession(t=!1){if(t)return this.endSession();this.K()}endSession(){const t=this.getStackTop().scope,n=t.getSession();n&&vn(n),this.K(),t.setSession()}startSession(t){const{scope:n,client:e}=this.getStackTop(),{release:r,environment:i=ln}=e&&e.getOptions()||{},{userAgent:o}=$.navigator||{},s=yn({release:r,environment:i,user:n.getUser(),...o&&{userAgent:o},...t}),c=n.getSession&&n.getSession();return c&&"ok"===c.status&&gn(c,{status:"exited"}),this.endSession(),n.setSession(s),s}shouldSendDefaultPii(){const t=this.getClient(),n=t&&t.getOptions();return Boolean(n&&n.sendDefaultPii)}K(){const{scope:t,client:n}=this.getStackTop(),e=t.getSession();e&&n&&n.captureSession&&n.captureSession(e)}J(t,...n){const e=Jn().__SENTRY__;if(e&&e.extensions&&"function"==typeof e.extensions[t])return e.extensions[t].apply(this,n)}}function Jn(){return $.__SENTRY__=$.__SENTRY__||{extensions:{},hub:void 0},$}function Kn(t){const n=Jn(),e=Qn(n);return te(n,t),e}function Vn(){const t=Jn();if(t.__SENTRY__&&t.__SENTRY__.acs){const n=t.__SENTRY__.acs.getCurrentHub();if(n)return n}return function(t=Jn()){n=t,n&&n.__SENTRY__&&n.__SENTRY__.hub&&!Qn(t).isOlderThan(zn)||te(t,new Gn);var n;return Qn(t)}(t)}function Yn(){return Vn().getIsolationScope()}function Zn(t,n={}){const e=Jn();return e.__SENTRY__&&e.__SENTRY__.acs?e.__SENTRY__.acs.runWithAsyncContext(t,n):t()}function Qn(t){return x("hub",(()=>new Gn),t)}function te(t,n){if(!t)return!1;return(t.__SENTRY__=t.__SENTRY__||{}).hub=n,!0}function ne(t,n,e=(()=>{})){let r;try{r=t()}catch(t){throw n(t),e(),t}return function(t,n,e){if(h(t))return t.then((t=>(e(),t)),(t=>{throw n(t),e(),t}));return e(),t}(r,n,e)}function ee(t){if("boolean"==typeof __SENTRY_TRACING__&&!__SENTRY_TRACING__)return!1;const n=On(),e=t||n&&n.getOptions();return!!e&&(e.enableTracing||"tracesSampleRate"in e||"tracesSampler"in e)}function re(){return In().getSpan()}function ie(t,n,e){if(!ee())return;const r=Yn(),i=In();let o;if(n)o=n.startChild(e);else{const{traceId:n,dsc:s,parentSpanId:c,sampled:u}={...r.getPropagationContext(),...i.getPropagationContext()};o=t.startTransaction({traceId:n,parentSpanId:c,parentSampled:u,...e,metadata:{dynamicSamplingContext:s,...e.metadata}})}return se(o,i,r),o}function oe(t){if(t.startTime){const e={...t};return e.startTimestamp="number"==typeof(n=t.startTime)?bn(n):Array.isArray(n)?n[0]+n[1]/1e9:n instanceof Date?bn(n.getTime()):Xt(),delete e.startTime,e}var n;return t}function se(t,n,e){t&&(U(t,"_sentryIsolationScope",e),U(t,"_sentryScope",n))}let ce;function ue(t,n,e,r,i,o){const s=re();if(s){const c=function(t){return ce?ce.get(t):void 0}(s)||new Map,u=`${t}:${n}@${r}`,a=c.get(o);if(a){const[,t]=a;c.set(o,[u,{min:Math.min(t.min,e),max:Math.max(t.max,e),count:t.count+=1,sum:t.sum+=e,tags:t.tags}])}else c.set(o,[u,{min:e,max:e,count:1,sum:e,tags:i}]);ce||(ce=new WeakMap),ce.set(s,c)}}function ae(t,n,e,r){const i=sn(e),o=t.type&&"replay_event"!==t.type?t.type:"event";!function(t,n){n&&(t.sdk=t.sdk||{},t.sdk.name=t.sdk.name||n.name,t.sdk.version=t.sdk.version||n.version,t.sdk.integrations=[...t.sdk.integrations||[],...n.integrations||[]],t.sdk.packages=[...t.sdk.packages||[],...n.packages||[]])}(t,e&&e.sdk);const s=function(t,n,e,r){const i=t.sdkProcessingMetadata&&t.sdkProcessingMetadata.dynamicSamplingContext;return{event_id:t.event_id,sent_at:(new Date).toISOString(),...n&&{sdk:n},...!!e&&r&&{dsn:C(r)},...i&&{trace:z({...i})}}}(t,i,r,n);delete t.sdkProcessingMetadata;return Yt(s,[[{type:o},t]])}function fe(t){const n=t.protocol?`${t.protocol}:`:"",e=t.port?`:${t.port}`:"";return`${n}//${t.host}${e}${t.path?`/${t.path}`:""}/api/`}function he(t,n){return e={sentry_key:t.publicKey,sentry_version:"7",...n&&{sentry_client:`${n.name}/${n.version}`}},Object.keys(e).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`)).join("&");var e}function le(t,n={}){const e="string"==typeof n?n:n.tunnel,r="string"!=typeof n&&n.V?n.V.sdk:void 0;return e||`${function(t){return`${fe(t)}${t.projectId}/envelope/`}(t)}?${he(t,r)}`}const de=[];function pe(t){const n=t.defaultIntegrations||[],e=t.integrations;let r;n.forEach((t=>{t.isDefaultInstance=!0})),r=Array.isArray(e)?[...n,...e]:"function"==typeof e?ft(e(n)):n;const i=function(t){const n={};return t.forEach((t=>{const{name:e}=t,r=n[e];r&&!r.isDefaultInstance&&t.isDefaultInstance||(n[e]=t)})),Object.keys(n).map((t=>n[t]))}(r),o=function(t,n){for(let e=0;e"Debug"===t.name));if(-1!==o){const[t]=i.splice(o,1);i.push(t)}return i}function me(t,n){for(const e of n)e&&e.afterAllSetup&&e.afterAllSetup(t)}function ye(t,n,e){if(!e[n.name]){if(e[n.name]=n,-1===de.indexOf(n.name)&&(n.setupOnce(pn,Vn),de.push(n.name)),n.setup&&"function"==typeof n.setup&&n.setup(t),t.on&&"function"==typeof n.preprocessEvent){const e=n.preprocessEvent.bind(n);t.on("preprocessEvent",((n,r)=>e(n,r,t)))}if(t.addEventProcessor&&"function"==typeof n.processEvent){const e=n.processEvent.bind(n),r=Object.assign(((n,r)=>e(n,r,t)),{id:n.name});t.addEventProcessor(r)}}}function ge(t,n){return Object.assign((function(...t){return n(...t)}),{id:t})}const ve=/[^a-zA-Z0-9_/.-]+/g,_e=/[^\w\d\s_:/@.{}[\]$-]+/g;function be(t,n,e,r){const i={sent_at:(new Date).toISOString()};e&&e.sdk&&(i.sdk={name:e.sdk.name,version:e.sdk.version}),r&&n&&(i.dsn=C(n));const o=function(t){const n=function(t){let n="";for(const e of t){const t=Object.entries(e.tags),r=t.length>0?`|#${t.map((([t,n])=>`${t}:${n}`)).join(",")}`:"";n+=`${e.name}@${e.unit}:${e.metric}|${e.metricType}${r}|T${e.timestamp}\n`}return n}(t);return[{type:"statsd",length:n.length},n]}(t);return Yt(i,[o])}function Ee(t){return void 0===t.type}function we(t){return"transaction"===t.type}const $e={c:class{constructor(t){this.v=t}get weight(){return 1}add(t){this.v+=t}toString(){return`${this.v}`}},g:class{constructor(t){this.Y=t,this.Z=t,this.tt=t,this.nt=t,this.et=1}get weight(){return 5}add(t){this.Y=t,tthis.tt&&(this.tt=t),this.nt+=t,this.et++}toString(){return`${this.Y}:${this.Z}:${this.tt}:${this.nt}:${this.et}`}},d:class{constructor(t){this.v=[t]}get weight(){return this.v.length}add(t){this.v.push(t)}toString(){return this.v.join(":")}},s:class{constructor(t){this.first=t,this.v=new Set([t])}get weight(){return this.v.size}add(t){this.v.add(t)}toString(){return Array.from(this.v).map((t=>"string"==typeof t?function(t){let n=0;for(let e=0;e>>0}(t):t)).join(":")}}};function Se(t){const n=Vn().getStackTop();n.client=t,n.scope.setClient(t)}function xe(t,n,e=Ft(t.bufferSize||30)){let r={};function i(i){const o=[];if(Qt(i,((n,e)=>{const i=on(e);if(function(t,n,e=Date.now()){return function(t,n){return t[n]||t.all||0}(t,n)>e}(r,i)){const r=ke(n,e);t.recordDroppedEvent("ratelimit_backoff",i,r)}else o.push(n)})),0===o.length)return Pt();const s=Yt(i[0],o),c=n=>{Qt(s,((e,r)=>{const i=ke(e,r);t.recordDroppedEvent(n,on(r),i)}))};return e.add((()=>n({body:nn(s,t.textEncoder)}).then((t=>(r=cn(r,t),t)),(t=>{throw c("network_error"),t})))).then((t=>t),(t=>{if(t instanceof L)return c("queue_overflow"),Pt();throw t}))}return i.__sentry__baseTransport__=!0,{send:i,flush:t=>e.drain(t)}}function ke(t,n){if("event"===n||"transaction"===n)return Array.isArray(t)?t[1]:void 0}const Te=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/],je=[/^.*\/healthcheck$/,/^.*\/healthy$/,/^.*\/live$/,/^.*\/ready$/,/^.*\/heartbeat$/,/^.*\/health$/,/^.*\/healthz$/],Oe="InboundFilters",Ie=(t={})=>({name:Oe,setupOnce(){},processEvent(n,e,r){const i=r.getOptions(),o=function(t={},n={}){return{allowUrls:[...t.allowUrls||[],...n.allowUrls||[]],denyUrls:[...t.denyUrls||[],...n.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...n.ignoreErrors||[],...t.disableErrorDefaults?[]:Te],ignoreTransactions:[...t.ignoreTransactions||[],...n.ignoreTransactions||[],...t.disableTransactionDefaults?[]:je],ignoreInternal:void 0===t.ignoreInternal||t.ignoreInternal}}(t,i);return function(t,n){if(n.ignoreInternal&&function(t){try{return"SentryError"===t.exception.values[0].type}catch(t){}return!1}(t))return!0;if(function(t,n){if(t.type||!n||!n.length)return!1;return function(t){const n=[];t.message&&n.push(t.message);let e;try{e=t.exception.values[t.exception.values.length-1]}catch(t){}e&&e.value&&(n.push(e.value),e.type&&n.push(`${e.type}: ${e.value}`));return n}(t).some((t=>g(t,n)))}(t,n.ignoreErrors))return!0;if(function(t,n){if("transaction"!==t.type||!n||!n.length)return!1;const e=t.transaction;return!!e&&g(e,n)}(t,n.ignoreTransactions))return!0;if(function(t,n){if(!n||!n.length)return!1;const e=Me(t);return!!e&&g(e,n)}(t,n.denyUrls))return!0;if(!function(t,n){if(!n||!n.length)return!0;const e=Me(t);return!e||g(e,n)}(t,n.allowUrls))return!0;return!1}(n,o)?null:n}}),De=ge(Oe,Ie);function Me(t){try{let n;try{n=t.exception.values[0].stacktrace.frames}catch(t){}return n?function(t=[]){for(let n=t.length-1;n>=0;n--){const e=t[n];if(e&&""!==e.filename&&"[native code]"!==e.filename)return e.filename||null}return null}(n):null}catch(t){return null}}let Re;const Ce="FunctionToString",Ae=new WeakMap,Ne=()=>({name:Ce,setupOnce(){Re=Function.prototype.toString;try{Function.prototype.toString=function(...t){const n=F(this),e=Ae.has(On())&&void 0!==n?n:this;return Re.apply(e,t)}}catch(t){}},setup(t){Ae.set(t,!0)}}),Le=ge(Ce,Ne),Pe="LinkedErrors",Ue=ge(Pe,((t={})=>{const n=t.limit||5,e=t.key||"cause";return{name:Pe,setupOnce(){},preprocessEvent(t,r,i){const o=i.getOptions();v(un,o.stackParser,o.maxValueLength,e,n,t,r)}}}));var Be=Object.freeze({__proto__:null,FunctionToString:Le,InboundFilters:De,LinkedErrors:Ue});class Fe{constructor(t){this.F=t,this.rt=new Map,this.it=setInterval((()=>this.flush()),5e3)}add(t,n,e,r="none",i={},o=Xt()){const s=Math.floor(o),c=n.replace(ve,"_"),u=function(t){const n={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e.replace(ve,"_")]=String(t[e]).replace(_e,""));return n}(i),a=function(t,n,e,r){return`${t}${n}${e}${Object.entries(z(r)).sort(((t,n)=>t[0].localeCompare(n[0])))}`}(t,c,r,u);let f=this.rt.get(a);const h=f&&"s"===t?f.metric.weight:0;f?(f.metric.add(e),f.timestampt));this.F.captureAggregateMetrics(t)}this.rt.clear()}}close(){clearInterval(this.it),this.flush()}}const He="MetricsAggregator",qe=()=>({name:He,setupOnce(){},setup(t){t.metricsAggregator=new Fe(t)}});function We(t,n,e,r={}){const i=On(),o=In();if(i){if(!i.metricsAggregator)return;const{unit:s,tags:c,timestamp:u}=r,{release:a,environment:f}=i.getOptions(),h=o.getTransaction(),l={};a&&(l.release=a),f&&(l.environment=f),h&&(l.transaction=En(h).description||""),i.metricsAggregator.add(t,n,e,s,{...l,...c},u)}}const ze={increment:function(t,n=1,e){We("c",t,n,e)},distribution:function(t,n,e){We("d",t,n,e)},set:function(t,n,e){We("s",t,n,e)},gauge:function(t,n,e){We("g",t,n,e)},MetricsAggregator:ge(He,qe),metricsAggregatorIntegration:qe},Xe=Be,Ge=$;let Je=0;function Ke(){return Je>0}function Ve(){Je++,setTimeout((()=>{Je--}))}function Ye(t,n={},e){if("function"!=typeof t)return t;try{const n=t.__sentry_wrapped__;if(n)return n;if(F(t))return t}catch(n){return t}const sentryWrapped=function(){const r=Array.prototype.slice.call(arguments);try{e&&"function"==typeof e&&e.apply(this,arguments);const i=r.map((t=>Ye(t,n)));return t.apply(this,i)}catch(t){throw Ve(),jn((e=>{e.addEventProcessor((t=>(n.mechanism&&(ct(t,void 0,void 0),ut(t,n.mechanism)),t.extra={...t.extra,arguments:r},t))),captureException(t)})),t}};try{for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&(sentryWrapped[n]=t[n])}catch(t){}B(sentryWrapped,t),U(t,"__sentry_wrapped__",sentryWrapped);try{Object.getOwnPropertyDescriptor(sentryWrapped,"name").configurable&&Object.defineProperty(sentryWrapped,"name",{get:()=>t.name})}catch(t){}return sentryWrapped}function Ze(t,n){const e=tr(t,n),r={type:n&&n.name,value:er(n)};return e.length&&(r.stacktrace={frames:e}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function Qe(t,n){return{exception:{values:[Ze(t,n)]}}}function tr(t,n){const e=n.stacktrace||n.stack||"",r=function(t){if(t){if("number"==typeof t.framesToPop)return t.framesToPop;if(nr.test(t.message))return 1}return 0}(n);try{return t(e,r)}catch(t){}return[]}const nr=/Minified React error #\d+;/i;function er(t){const n=t&&t.message;return n?n.error&&"string"==typeof n.error.message?n.error.message:n:"No error message"}function rr(t,n,e,r){const i=or(t,n,e&&e.syntheticException||void 0,r);return ut(i),i.level="error",e&&e.event_id&&(i.event_id=e.event_id),Pt(i)}function ir(t,n,e="info",r,i){const o=sr(t,n,r&&r.syntheticException||void 0,i);return o.level=e,r&&r.event_id&&(o.event_id=r.event_id),Pt(o)}function or(t,n,s,c,u){let h;if(i(n)&&n.error){return Qe(t,n.error)}if(o(n)||r(n,"DOMException")){const e=n;if("stack"in n)h=Qe(t,n);else{const n=e.name||(o(e)?"DOMError":"DOMException"),r=e.message?`${n}: ${e.message}`:n;h=sr(t,r,s,c),ct(h,r)}return"code"in e&&(h.tags={...h.tags,"DOMException.code":`${e.code}`}),h}if(e(n))return Qe(t,n);if(a(n)||f(n)){return h=function(t,n,e,r){const i=On(),o=i&&i.getOptions().normalizeDepth,s={exception:{values:[{type:f(n)?n.constructor.name:r?"UnhandledRejection":"Error",value:cr(n,{isUnhandledRejection:r})}]},extra:{__serialized__:At(n,o)}};if(e){const n=tr(t,e);n.length&&(s.exception.values[0].stacktrace={frames:n})}return s}(t,n,s,u),ut(h,{synthetic:!0}),h}return h=sr(t,n,s,c),ct(h,`${n}`,void 0),ut(h,{synthetic:!0}),h}function sr(t,n,e,r){const i={};if(r&&e){const r=tr(t,e);r.length&&(i.exception={values:[{value:n,stacktrace:{frames:r}}]})}if(c(n)){const{__sentry_template_string__:t,__sentry_template_values__:e}=n;return i.logentry={message:t,params:e},i}return i.message=n,i}function cr(t,{isUnhandledRejection:n}){const e=function(t,n=40){const e=Object.keys(H(t));if(e.sort(),!e.length)return"[object has no keys]";if(e[0].length>=n)return p(e[0],n);for(let t=e.length;t>0;t--){const r=e.slice(0,t).join(", ");if(!(r.length>n))return t===e.length?r:p(r,n)}return""}(t),r=n?"promise rejection":"exception";if(i(t))return`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``;if(f(t)){return`Event \`${function(t){try{const n=Object.getPrototypeOf(t);return n?n.constructor.name:void 0}catch(t){}}(t)}\` (type=${t.type}) captured as ${r}`}return`Object captured as ${r} with keys: ${e}`}function ur(t,{metadata:n,tunnel:e,dsn:r}){const i={event_id:t.event_id,sent_at:(new Date).toISOString(),...n&&n.sdk&&{sdk:{name:n.sdk.name,version:n.sdk.version}},...!!e&&!!r&&{dsn:C(r)}},o=function(t){return[{type:"user_report"},t]}(t);return Yt(i,[o])}class ar extends class{constructor(t){if(this.ot=t,this._integrations={},this.st=!1,this.ct=0,this.ut={},this.ft={},this.k=[],t.dsn&&(this.ht=N(t.dsn)),this.ht){const n=le(this.ht,t);this.lt=t.transport({recordDroppedEvent:this.recordDroppedEvent.bind(this),...t.transportOptions,url:n})}}captureException(t,n,e){if(at(t))return;let r=n&&n.event_id;return this.dt(this.eventFromException(t,n).then((t=>this.yt(t,n,e))).then((t=>{r=t}))),r}captureMessage(t,n,e,r){let i=e&&e.event_id;const o=c(t)?t:String(t),s=u(t)?this.eventFromMessage(o,n,e):this.eventFromException(t,e);return this.dt(s.then((t=>this.yt(t,e,r))).then((t=>{i=t}))),i}captureEvent(t,n,e){if(n&&n.originalException&&at(n.originalException))return;let r=n&&n.event_id;const i=(t.sdkProcessingMetadata||{}).capturedSpanScope;return this.dt(this.yt(t,n,i||e).then((t=>{r=t}))),r}captureSession(t){"string"!=typeof t.release||(this.sendSession(t),gn(t,{init:!1}))}getDsn(){return this.ht}getOptions(){return this.ot}getSdkMetadata(){return this.ot.V}getTransport(){return this.lt}flush(t){const n=this.lt;return n?(this.metricsAggregator&&this.metricsAggregator.flush(),this.gt(t).then((e=>n.flush(t).then((t=>e&&t))))):Pt(!0)}close(t){return this.flush(t).then((t=>(this.getOptions().enabled=!1,this.metricsAggregator&&this.metricsAggregator.close(),t)))}getEventProcessors(){return this.k}addEventProcessor(t){this.k.push(t)}setupIntegrations(t){(t&&!this.st||this.vt()&&!this.st)&&this._t()}init(){this.vt()&&this._t()}getIntegrationById(t){return this.getIntegrationByName(t)}getIntegrationByName(t){return this._integrations[t]}getIntegration(t){try{return this._integrations[t.id]||null}catch(t){return null}}addIntegration(t){const n=this._integrations[t.name];ye(this,t,this._integrations),n||me(this,[t])}sendEvent(t,n={}){this.emit("beforeSendEvent",t,n);let e=ae(t,this.ht,this.ot.V,this.ot.tunnel);for(const t of n.attachments||[])e=Zt(e,en(t,this.ot.transportOptions&&this.ot.transportOptions.textEncoder));const r=this.bt(e);r&&r.then((n=>this.emit("afterSendEvent",t,n)),null)}sendSession(t){const n=function(t,n,e,r){const i=sn(e);return Yt({sent_at:(new Date).toISOString(),...i&&{sdk:i},...!!r&&n&&{dsn:C(n)}},["aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()]])}(t,this.ht,this.ot.V,this.ot.tunnel);this.bt(n)}recordDroppedEvent(t,n,e){if(this.ot.sendClientReports){const e=`${t}:${n}`;this.ut[e]=this.ut[e]+1||1}}captureAggregateMetrics(t){const n=be(t,this.ht,this.ot.V,this.ot.tunnel);this.bt(n)}on(t,n){this.ft[t]||(this.ft[t]=[]),this.ft[t].push(n)}emit(t,...n){this.ft[t]&&this.ft[t].forEach((t=>t(...n)))}_t(){const{integrations:t}=this.ot;this._integrations=function(t,n){const e={};return n.forEach((n=>{n&&ye(t,n,e)})),e}(this,t),me(this,t),this.st=!0}Et(t,n){let e=!1,r=!1;const i=n.exception&&n.exception.values;if(i){r=!0;for(const t of i){const n=t.mechanism;if(n&&!1===n.handled){e=!0;break}}}const o="ok"===t.status;(o&&0===t.errors||o&&e)&&(gn(t,{...e&&{status:"crashed"},errors:t.errors||Number(r||e)}),this.captureSession(t))}gt(t){return new Bt((n=>{let e=0;const r=setInterval((()=>{0==this.ct?(clearInterval(r),n(!0)):(e+=1,t&&e>=t&&(clearInterval(r),n(!1)))}),1)}))}vt(){return!1!==this.getOptions().enabled&&void 0!==this.lt}wt(t,n,e,r=Yn()){const i=this.getOptions(),o=Object.keys(this._integrations);return!n.integrations&&o.length>0&&(n.integrations=o),this.emit("preprocessEvent",t,n),wn(i,t,n,e,this,r).then((t=>{if(null===t)return t;const n={...r.getPropagationContext(),...e?e.getPropagationContext():void 0};if(!(t.contexts&&t.contexts.trace)&&n){const{traceId:r,spanId:i,parentSpanId:o,dsc:s}=n;t.contexts={trace:{trace_id:r,span_id:i,parent_span_id:o},...t.contexts};const c=s||Nn(r,this,e);t.sdkProcessingMetadata={dynamicSamplingContext:c,...t.sdkProcessingMetadata}}return t}))}yt(t,n={},e){return this.$t(t,n,e).then((t=>t.event_id),(t=>{}))}$t(t,n,e){const r=this.getOptions(),{sampleRate:i}=r,o=we(t),s=Ee(t),c=t.type||"error",u=`before send for type \`${c}\``;if(s&&"number"==typeof i&&Math.random()>i)return this.recordDroppedEvent("sample_rate","error",t),Ut(new L(`Discarding event because it's not included in the random sample (sampling rate = ${i})`,"log"));const f="replay_event"===c?"replay":c,l=(t.sdkProcessingMetadata||{}).capturedSpanIsolationScope;return this.wt(t,n,e,l).then((e=>{if(null===e)throw this.recordDroppedEvent("event_processor",f,t),new L("An event processor returned `null`, will not send event.","log");if(n.data&&!0===n.data.__sentry__)return e;const i=function(t,n,e){const{beforeSend:r,beforeSendTransaction:i}=t;if(Ee(n)&&r)return r(n,e);if(we(n)&&i)return i(n,e);return n}(r,e,n);return function(t,n){const e=`${n} must return \`null\` or a valid event.`;if(h(t))return t.then((t=>{if(!a(t)&&null!==t)throw new L(e);return t}),(t=>{throw new L(`${n} rejected with ${t}`)}));if(!a(t)&&null!==t)throw new L(e);return t}(i,u)})).then((r=>{if(null===r)throw this.recordDroppedEvent("before_send",f,t),new L(`${u} returned \`null\`, will not send event.`,"log");const i=e&&e.getSession();!o&&i&&this.Et(i,r);const s=r.transaction_info;if(o&&s&&r.transaction!==t.transaction){const t="custom";r.transaction_info={...s,source:t}}return this.sendEvent(r,n),r})).then(null,(t=>{if(t instanceof L)throw t;throw this.captureException(t,{data:{__sentry__:!0},originalException:t}),new L(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ${t}`)}))}dt(t){this.ct++,t.then((t=>(this.ct--,t)),(t=>(this.ct--,t)))}bt(t){if(this.emit("beforeEnvelope",t),this.vt()&&this.lt)return this.lt.send(t).then(null,(t=>{}))}St(){const t=this.ut;return this.ut={},Object.keys(t).map((n=>{const[e,r]=n.split(":");return{reason:e,category:r,quantity:t[n]}}))}}{constructor(t){!function(t,n,e=[n],r="npm"){const i=t.V||{};i.sdk||(i.sdk={name:`sentry.javascript.${n}`,packages:e.map((t=>({name:`${r}:@sentry/${t}`,version:Wn}))),version:Wn}),t.V=i}(t,"browser",["browser"],Ge.SENTRY_SDK_SOURCE||"npm"),super(t),t.sendClientReports&&Ge.document&&Ge.document.addEventListener("visibilitychange",(()=>{"hidden"===Ge.document.visibilityState&&this.xt()}))}eventFromException(t,n){return rr(this.ot.stackParser,t,n,this.ot.attachStacktrace)}eventFromMessage(t,n="info",e){return ir(this.ot.stackParser,t,n,e,this.ot.attachStacktrace)}captureUserFeedback(t){if(!this.vt())return;const n=ur(t,{metadata:this.getSdkMetadata(),dsn:this.getDsn(),tunnel:this.getOptions().tunnel});this.bt(n)}wt(t,n,e){return t.platform=t.platform||"javascript",super.wt(t,n,e)}xt(){const t=this.St();if(0===t.length)return;if(!this.ht)return;const n=(e=t,Yt((r=this.ot.tunnel&&C(this.ht))?{dsn:r}:{},[[{type:"client_report"},{timestamp:i||zt(),discarded_events:e}]]));var e,r,i;this.bt(n)}}let fr;function hr(t,n=function(){if(fr)return fr;if(_t(Ge.fetch))return fr=Ge.fetch.bind(Ge);const t=Ge.document;let n=Ge.fetch;if(t&&"function"==typeof t.createElement)try{const e=t.createElement("iframe");e.hidden=!0,t.head.appendChild(e);const r=e.contentWindow;r&&r.fetch&&(n=r.fetch),t.head.removeChild(e)}catch(t){}return fr=n.bind(Ge)}()){let e=0,r=0;return xe(t,(function(i){const o=i.body.length;e+=o,r++;const s={body:i.body,method:"POST",referrerPolicy:"origin",headers:t.headers,keepalive:e<=6e4&&r<15,...t.fetchOptions};try{return n(t.url,s).then((t=>(e-=o,r--,{statusCode:t.status,headers:{"x-sentry-rate-limits":t.headers.get("X-Sentry-Rate-Limits"),"retry-after":t.headers.get("Retry-After")}})))}catch(t){return fr=void 0,e-=o,r--,Ut(t)}}))}function lr(t){return xe(t,(function(n){return new Bt(((e,r)=>{const i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=()=>{4===i.readyState&&e({statusCode:i.status,headers:{"x-sentry-rate-limits":i.getResponseHeader("X-Sentry-Rate-Limits"),"retry-after":i.getResponseHeader("Retry-After")}})},i.open("POST",t.url);for(const n in t.headers)Object.prototype.hasOwnProperty.call(t.headers,n)&&i.setRequestHeader(n,t.headers[n]);i.send(n.body)}))}))}const dr="?";function pr(t,n,e,r){const i={filename:t,function:n,in_app:!0};return void 0!==e&&(i.lineno=e),void 0!==r&&(i.colno=r),i}const mr=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,yr=/\((\S*)(?::(\d+))(?::(\d+))\)/,gr=[30,t=>{const n=mr.exec(t);if(n){if(n[2]&&0===n[2].indexOf("eval")){const t=yr.exec(n[2]);t&&(n[2]=t[1],n[3]=t[2],n[4]=t[3])}const[t,e]=Or(n[1]||dr,n[2]);return pr(e,t,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}}],vr=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,_r=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,br=[50,t=>{const n=vr.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){const t=_r.exec(n[3]);t&&(n[1]=n[1]||"eval",n[3]=t[1],n[4]=t[2],n[5]="")}let t=n[3],e=n[1]||dr;return[e,t]=Or(e,t),pr(t,e,n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}}],Er=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,wr=[40,t=>{const n=Er.exec(t);return n?pr(n[2],n[1]||dr,+n[3],n[4]?+n[4]:void 0):void 0}],$r=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Sr=[10,t=>{const n=$r.exec(t);return n?pr(n[2],n[3]||dr,+n[1]):void 0}],xr=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,kr=[20,t=>{const n=xr.exec(t);return n?pr(n[5],n[3]||n[4]||dr,+n[1],+n[2]):void 0}],Tr=[gr,br,wr],jr=K(...Tr),Or=(t,n)=>{const e=-1!==t.indexOf("safari-extension"),r=-1!==t.indexOf("safari-web-extension");return e||r?[-1!==t.indexOf("@")?t.split("@")[0]:dr,e?`safari-extension:${n}`:`safari-web-extension:${n}`]:[t,n]},Ir=1024,Dr="Breadcrumbs",Mr=(t={})=>{const n={console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:Dr,setupOnce(){},setup(t){var e;n.console&&function(t){const n="console";tt(n,t),nt(n,rt)}(function(t){return function(n){if(On()!==t)return;const e={category:"console",data:{arguments:n.args,logger:"console"},level:Wt(n.level),message:m(n.args," ")};if("assert"===n.level){if(!1!==n.args[0])return;e.message=`Assertion failed: ${m(n.args.slice(1)," ")||"console.assert"}`,e.data.arguments=n.args.slice(1)}Tn(e,{input:n.args,level:n.level})}}(t)),n.dom&&(e=function(t,n){return function(e){if(On()!==t)return;let r,i,o="object"==typeof n?n.serializeAttribute:void 0,s="object"==typeof n&&"number"==typeof n.maxStringLength?n.maxStringLength:void 0;s&&s>Ir&&(s=Ir),"string"==typeof o&&(o=[o]);try{const t=e.event,n=function(t){return!!t&&!!t.target}(t)?t.target:t;r=T(n,{keyAttrs:o,maxStringLength:s}),i=function(t){if(!k.HTMLElement)return null;let n=t;for(let t=0;t<5;t++){if(!n)return null;if(n instanceof HTMLElement&&n.dataset.sentryComponent)return n.dataset.sentryComponent;n=n.parentNode}return null}(n)}catch(t){r=""}if(0===r.length)return;const c={category:`ui.${e.name}`,message:r};i&&(c.data={"ui.component_name":i}),Tn(c,{event:e.event,name:e.name,global:e.global})}}(t,n.dom),tt("dom",e),nt("dom",mt)),n.xhr&&function(t){tt("xhr",t),nt("xhr",Rt)}(function(t){return function(n){if(On()!==t)return;const{startTimestamp:e,endTimestamp:r}=n,i=n.xhr.__sentry_xhr_v3__;if(!e||!r||!i)return;const{method:o,url:s,status_code:c,body:u}=i;Tn({category:"xhr",data:{method:o,url:s,status_code:c},type:"http"},{xhr:n.xhr,input:u,startTimestamp:e,endTimestamp:r})}}(t)),n.fetch&&function(t){const n="fetch";tt(n,t),nt(n,bt)}(function(t){return function(n){if(On()!==t)return;const{startTimestamp:e,endTimestamp:r}=n;if(r&&(!n.fetchData.url.match(/sentry_key/)||"POST"!==n.fetchData.method))if(n.error){Tn({category:"fetch",data:n.fetchData,level:"error",type:"http"},{data:n.error,input:n.args,startTimestamp:e,endTimestamp:r})}else{const t=n.response;Tn({category:"fetch",data:{...n.fetchData,status_code:t&&t.status},type:"http"},{input:n.args,response:t,startTimestamp:e,endTimestamp:r})}}}(t)),n.history&&It(function(t){return function(n){if(On()!==t)return;let e=n.from,r=n.to;const i=Ht(Ge.location.href);let o=e?Ht(e):void 0;const s=Ht(r);o&&o.path||(o=i),i.protocol===s.protocol&&i.host===s.host&&(r=s.relative),i.protocol===o.protocol&&i.host===o.host&&(e=o.relative),Tn({category:"navigation",data:{from:e,to:r}})}}(t)),n.sentry&&t.on&&t.on("beforeSendEvent",function(t){return function(n){On()===t&&Tn({category:"sentry."+("transaction"===n.type?"transaction":"event"),event_id:n.event_id,level:n.level,message:st(n)},{event:n})}}(t))}}},Rr=ge(Dr,Mr);const Cr="Dedupe",Ar=()=>{let t;return{name:Cr,setupOnce(){},processEvent(n){if(n.type)return n;try{if(function(t,n){if(!n)return!1;if(function(t,n){const e=t.message,r=n.message;if(!e&&!r)return!1;if(e&&!r||!e&&r)return!1;if(e!==r)return!1;if(!Pr(t,n))return!1;if(!Lr(t,n))return!1;return!0}(t,n))return!0;if(function(t,n){const e=Ur(n),r=Ur(t);if(!e||!r)return!1;if(e.type!==r.type||e.value!==r.value)return!1;if(!Pr(t,n))return!1;if(!Lr(t,n))return!1;return!0}(t,n))return!0;return!1}(n,t))return null}catch(t){}return t=n}}},Nr=ge(Cr,Ar);function Lr(t,n){let e=Br(t),r=Br(n);if(!e&&!r)return!0;if(e&&!r||!e&&r)return!1;if(e=e,r=r,r.length!==e.length)return!1;for(let t=0;t{const n={onerror:!0,onunhandledrejection:!0,...t};return{name:Fr,setupOnce(){Error.stackTraceLimit=50},setup(t){n.onerror&&function(t){!function(t){const n="error";tt(n,t),nt(n,St)}((n=>{const{stackParser:e,attachStacktrace:r}=zr();if(On()!==t||Ke())return;const{msg:o,url:c,line:u,column:a,error:f}=n,h=void 0===f&&s(o)?function(t,n,e,r){const o=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;let s=i(t)?t.message:t,c="Error";const u=s.match(o);u&&(c=u[1],s=u[2]);return Wr({exception:{values:[{type:c,value:s}]}},n,e,r)}(o,c,u,a):Wr(or(e,f||o,void 0,r,!1),c,u,a);h.level="error",kn(h,{originalException:f,mechanism:{handled:!1,type:"onerror"}})}))}(t),n.onunhandledrejection&&function(t){!function(t){const n="unhandledrejection";tt(n,t),nt(n,kt)}((n=>{const{stackParser:e,attachStacktrace:r}=zr();if(On()!==t||Ke())return;const i=function(t){if(u(t))return t;const n=t;try{if("reason"in n)return n.reason;if("detail"in n&&"reason"in n.detail)return n.detail.reason}catch(t){}return t}(n),o=u(i)?{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(i)}`}]}}:or(e,i,void 0,r,!0);o.level="error",kn(o,{originalException:i,mechanism:{handled:!1,type:"onunhandledrejection"}})}))}(t)}}},qr=ge(Fr,Hr);function Wr(t,n,e,r){const i=t.exception=t.exception||{},o=i.values=i.values||[],c=o[0]=o[0]||{},u=c.stacktrace=c.stacktrace||{},a=u.frames=u.frames||[],f=isNaN(parseInt(r,10))?void 0:r,h=isNaN(parseInt(e,10))?void 0:e,l=s(n)&&n.length>0?n:function(){try{return k.document.location.href}catch(t){return""}}();return 0===a.length&&a.push({colno:f,filename:l,function:"?",in_app:!0,lineno:h}),t}function zr(){const t=On();return t&&t.getOptions()||{stackParser:()=>[],attachStacktrace:!1}}const Xr="HttpContext",Gr=()=>({name:Xr,setupOnce(){},preprocessEvent(t){if(!Ge.navigator&&!Ge.location&&!Ge.document)return;const n=t.request&&t.request.url||Ge.location&&Ge.location.href,{referrer:e}=Ge.document||{},{userAgent:r}=Ge.navigator||{},i={...t.request&&t.request.headers,...e&&{Referer:e},...r&&{"User-Agent":r}},o={...t.request,...n&&{url:n},headers:i};t.request=o}}),Jr=ge(Xr,Gr),Kr="LinkedErrors",Vr=(t={})=>{const n=t.limit||5,e=t.key||"cause";return{name:Kr,setupOnce(){},preprocessEvent(t,r,i){const o=i.getOptions();v(Ze,o.stackParser,o.maxValueLength,e,n,t,r)}}},Yr=ge(Kr,Vr),Zr=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","BroadcastChannel","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","SharedWorker","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],Qr="TryCatch",ti=(t={})=>{const n={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,...t};return{name:Qr,setupOnce(){n.setTimeout&&P(Ge,"setTimeout",ei),n.setInterval&&P(Ge,"setInterval",ei),n.requestAnimationFrame&&P(Ge,"requestAnimationFrame",ri),n.XMLHttpRequest&&"XMLHttpRequest"in Ge&&P(XMLHttpRequest.prototype,"send",ii);const t=n.eventTarget;if(t){(Array.isArray(t)?t:Zr).forEach(oi)}}}},ni=ge(Qr,ti);function ei(t){return function(...n){const e=n[0];return n[0]=Ye(e,{mechanism:{data:{function:Y(t)},handled:!1,type:"instrument"}}),t.apply(this,n)}}function ri(t){return function(n){return t.apply(this,[Ye(n,{mechanism:{data:{function:"requestAnimationFrame",handler:Y(t)},handled:!1,type:"instrument"}})])}}function ii(t){return function(...n){const e=this;return["onload","onerror","onprogress","onreadystatechange"].forEach((t=>{t in e&&"function"==typeof e[t]&&P(e,t,(function(n){const e={mechanism:{data:{function:t,handler:Y(n)},handled:!1,type:"instrument"}},r=F(n);return r&&(e.mechanism.data.handler=Y(r)),Ye(n,e)}))})),t.apply(this,n)}}function oi(t){const n=Ge,e=n[t]&&n[t].prototype;e&&e.hasOwnProperty&&e.hasOwnProperty("addEventListener")&&(P(e,"addEventListener",(function(n){return function(e,r,i){try{"function"==typeof r.handleEvent&&(r.handleEvent=Ye(r.handleEvent,{mechanism:{data:{function:"handleEvent",handler:Y(r),target:t},handled:!1,type:"instrument"}}))}catch(t){}return n.apply(this,[e,Ye(r,{mechanism:{data:{function:"addEventListener",handler:Y(r),target:t},handled:!1,type:"instrument"}}),i])}})),P(e,"removeEventListener",(function(t){return function(n,e,r){const i=e;try{const e=i&&i.__sentry_wrapped__;e&&t.call(this,n,e,r)}catch(t){}return t.call(this,n,i,r)}})))}const si=[Ie(),Ne(),ti(),Mr(),Hr(),Vr(),Ar(),Gr()];function ci(t){return[...si]}var ui=Object.freeze({__proto__:null,GlobalHandlers:qr,TryCatch:ni,Breadcrumbs:Rr,LinkedErrors:Yr,HttpContext:Jr,Dedupe:Nr});let ai={};Ge.Sentry&&Ge.Sentry.Integrations&&(ai=Ge.Sentry.Integrations);const fi={...ai,...Xe,...ui};return fi.Replay=fn,fi.BrowserTracing=hn,t.Breadcrumbs=Rr,t.BrowserClient=ar,t.BrowserTracing=hn,t.Dedupe=Nr,t.Feedback=an,t.FunctionToString=Le,t.GlobalHandlers=qr,t.HttpContext=Jr,t.Hub=Gn,t.InboundFilters=De,t.Integrations=fi,t.LinkedErrors=Yr,t.Replay=fn,t.SDK_VERSION=Wn,t.SEMANTIC_ATTRIBUTE_SENTRY_OP="sentry.op",t.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN="sentry.origin",t.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE="sentry.sample_rate",t.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE="sentry.source",t.Scope=Hn,t.TryCatch=ni,t.WINDOW=Ge,t.addBreadcrumb=Tn,t.addEventProcessor=function(t){const n=On();n&&n.addEventProcessor&&n.addEventProcessor(t)},t.addGlobalEventProcessor=pn,t.addIntegration=function(t){const n=On();n&&n.addIntegration&&n.addIntegration(t)},t.addTracingExtensions=function(){},t.breadcrumbsIntegration=Mr,t.browserApiErrorsIntegration=ti,t.browserTracingIntegration=function(t){return new hn({})},t.captureEvent=kn,t.captureException=captureException,t.captureMessage=function(t,n){const e="string"==typeof n?n:void 0,r="string"!=typeof n?{captureContext:n}:void 0;return Vn().captureMessage(t,e,r)},t.captureSession=Cn,t.captureUserFeedback=function(t){const n=On();n&&n.captureUserFeedback(t)},t.chromeStackLineParser=gr,t.close=async function(t){const n=On();return n?n.close(t):Promise.resolve(!1)},t.configureScope=function(t){Vn().configureScope(t)},t.continueTrace=({sentryTrace:t,baggage:n},e)=>{const r=In(),{traceparentData:i,dynamicSamplingContext:o,propagationContext:s}=Vt(t,n);r.setPropagationContext(s);const c={...i,metadata:z({dynamicSamplingContext:o})};return e?Zn((()=>e(c))):c},t.createTransport=xe,t.createUserFeedbackEnvelope=ur,t.dedupeIntegration=Ar,t.defaultIntegrations=si,t.defaultStackLineParsers=Tr,t.defaultStackParser=jr,t.endSession=Mn,t.eventFromException=rr,t.eventFromMessage=ir,t.exceptionFromError=Ze,t.feedbackIntegration=function(t){return new an({})},t.flush=async function(t){const n=On();return n?n.flush(t):Promise.resolve(!1)},t.forceLoad=function(){},t.functionToStringIntegration=Ne,t.geckoStackLineParser=br,t.getActiveSpan=re,t.getClient=On,t.getCurrentHub=Vn,t.getCurrentScope=In,t.getDefaultIntegrations=ci,t.getHubFromCarrier=Qn,t.globalHandlersIntegration=Hr,t.httpContextIntegration=Gr,t.inboundFiltersIntegration=Ie,t.init=function(t={}){void 0===t.defaultIntegrations&&(t.defaultIntegrations=ci()),void 0===t.release&&("string"==typeof __SENTRY_RELEASE__&&(t.release=__SENTRY_RELEASE__),Ge.SENTRY_RELEASE&&Ge.SENTRY_RELEASE.id&&(t.release=Ge.SENTRY_RELEASE.id)),void 0===t.autoSessionTracking&&(t.autoSessionTracking=!0),void 0===t.sendClientReports&&(t.sendClientReports=!0);const n={...t,stackParser:(e=t.stackParser||jr,Array.isArray(e)?K(...e):e),integrations:pe(t),transport:t.transport||(vt()?hr:lr)};var e;!function(t,n){!0===n.debug&&D((()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),In().update(n.initialScope);const e=new t(n);Se(e),function(t){t.init?t.init():t.setupIntegrations&&t.setupIntegrations()}(e)}(ar,n),t.autoSessionTracking&&function(){if(void 0===Ge.document)return;Dn({ignoreDuration:!0}),Cn(),It((({from:t,to:n})=>{void 0!==t&&t!==n&&(Dn({ignoreDuration:!0}),Cn())}))}()},t.isInitialized=function(){return!!On()},t.lastEventId=function(){return Vn().lastEventId()},t.linkedErrorsIntegration=Vr,t.makeFetchTransport=hr,t.makeMain=Kn,t.makeXHRTransport=lr,t.metrics=ze,t.onLoad=function(t){t()},t.opera10StackLineParser=Sr,t.opera11StackLineParser=kr,t.parameterize=function(t,...n){const e=new String(String.raw(t,...n));return e.__sentry_template_string__=t.join("\0").replace(/%/g,"%%").replace(/\0/g,"%s"),e.__sentry_template_values__=n,e},t.replayIntegration=function(t){return new fn({})},t.setContext=function(t,n){Vn().setContext(t,n)},t.setCurrentClient=Se,t.setExtra=function(t,n){Vn().setExtra(t,n)},t.setExtras=function(t){Vn().setExtras(t)},t.setTag=function(t,n){Vn().setTag(t,n)},t.setTags=function(t){Vn().setTags(t)},t.setUser=function(t){Vn().setUser(t)},t.showReportDialog=(t={},n=Vn())=>{if(!Ge.document)return;const{client:e,scope:r}=n.getStackTop(),i=t.dsn||e&&e.getDsn();if(!i)return;r&&(t.user={...r.getUser(),...t.user}),t.eventId||(t.eventId=n.lastEventId());const o=Ge.document.createElement("script");o.async=!0,o.crossOrigin="anonymous",o.src=function(t,n){const e=N(t);if(!e)return"";const r=`${fe(e)}embed/error-page/`;let i=`dsn=${C(e)}`;for(const t in n)if("dsn"!==t&&"onClose"!==t)if("user"===t){const t=n.user;if(!t)continue;t.name&&(i+=`&name=${encodeURIComponent(t.name)}`),t.email&&(i+=`&email=${encodeURIComponent(t.email)}`)}else i+=`&${encodeURIComponent(t)}=${encodeURIComponent(n[t])}`;return`${r}?${i}`}(i,t),t.onLoad&&(o.onload=t.onLoad);const{onClose:s}=t;if(s){const t=n=>{if("__sentry_reportdialog_closed__"===n.data)try{s()}finally{Ge.removeEventListener("message",t)}};Ge.addEventListener("message",t)}const c=Ge.document.head||Ge.document.body;c&&c.appendChild(o)},t.startInactiveSpan=function(t){if(!ee())return;const n=oe(t),e=Vn(),r=t.scope?t.scope.getSpan():re();if(t.onlyIfParent&&!r)return;const i=Yn(),o=In();let s;if(r)s=r.startChild(n);else{const{traceId:t,dsc:r,parentSpanId:c,sampled:u}={...i.getPropagationContext(),...o.getPropagationContext()};s=e.startTransaction({traceId:t,parentSpanId:c,parentSampled:u,...n,metadata:{dynamicSamplingContext:r,...n.metadata}})}return se(s,o,i),s},t.startSession=Dn,t.startSpan=function(t,n){const e=oe(t);return Zn((()=>jn(t.scope,(r=>{const i=Vn(),o=r.getSpan(),s=t.onlyIfParent&&!o?void 0:ie(i,o,e);return r.setSpan(s),ne((()=>n(s)),(()=>{if(s){const{status:t}=En(s);t&&"ok"!==t||s.setStatus("internal_error")}}),(()=>s&&s.end()))}))))},t.startSpanManual=function(t,n){const e=oe(t);return Zn((()=>jn(t.scope,(r=>{const i=Vn(),o=r.getSpan(),s=t.onlyIfParent&&!o?void 0:ie(i,o,e);function c(){s&&s.end()}return r.setSpan(s),ne((()=>n(s,c)),(()=>{if(s&&s.isRecording()){const{status:t}=En(s);t&&"ok"!==t||s.setStatus("internal_error")}}))}))))},t.startTransaction=function(t,n){return Vn().startTransaction({...t},n)},t.winjsStackLineParser=wr,t.withIsolationScope=function(t){return Zn((()=>t(Yn())))},t.withScope=jn,t.wrap=function(t){return Ye(t)()},t}({}); //# sourceMappingURL=bundle.min.js.map diff --git a/windows/src/desktop/kmshell/xml/sentry.bundle.min.js b/windows/src/desktop/kmshell/xml/sentry.bundle.min.js index 262b9344894..c9aa7758e20 100644 --- a/windows/src/desktop/kmshell/xml/sentry.bundle.min.js +++ b/windows/src/desktop/kmshell/xml/sentry.bundle.min.js @@ -1,3 +1,3 @@ -/*! @sentry/browser 5.15.0 (3ce26d5c) | https://github.com/getsentry/sentry-javascript */ -var Sentry=function(n){var t=function(n,r){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,t){n.__proto__=t}||function(n,t){for(var r in t)t.hasOwnProperty(r)&&(n[r]=t[r])})(n,r)};function r(n,r){function e(){this.constructor=n}t(n,r),n.prototype=null===r?Object.create(r):(e.prototype=r.prototype,new e)}var e=function(){return(e=Object.assign||function(n){for(var t,r=1,e=arguments.length;r=n.length&&(n=void 0),{value:n&&n[r++],done:!n}}}}function o(n,t){var r="function"==typeof Symbol&&n[Symbol.iterator];if(!r)return n;var e,i,o=r.call(n),u=[];try{for(;(void 0===t||t-- >0)&&!(e=o.next()).done;)u.push(e.value)}catch(n){i={error:n}}finally{try{e&&!e.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return u}function u(){for(var n=[],t=0;t=400&&t<500)switch(t){case 401:return n.Unauthenticated;case 403:return n.PermissionDenied;case 404:return n.NotFound;case 409:return n.AlreadyExists;case 413:return n.FailedPrecondition;case 429:return n.ResourceExhausted;default:return n.InvalidArgument}if(t>=500&&t<600)switch(t){case 501:return n.Unimplemented;case 503:return n.Unavailable;case 504:return n.DeadlineExceeded;default:return n.InternalError}return n.UnknownError}}(s||(s={})),(f=n.Status||(n.Status={})).Unknown="unknown",f.Skipped="skipped",f.Success="success",f.RateLimit="rate_limit",f.Invalid="invalid",f.Failed="failed",function(n){n.fromHttpCode=function(t){return t>=200&&t<300?n.Success:429===t?n.RateLimit:t>=400&&t<500?n.Invalid:t>=500?n.Failed:n.Unknown}}(n.Status||(n.Status={}));var h=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(n,t){return n.__proto__=t,n}:function(n,t){for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r]);return n});var v=function(n){function t(t){var r=this.constructor,e=n.call(this,t)||this;return e.message=t,e.name=r.prototype.constructor.name,h(e,r.prototype),e}return r(t,n),t}(Error);function l(n){switch(Object.prototype.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return x(n,Error)}}function d(n){return"[object ErrorEvent]"===Object.prototype.toString.call(n)}function p(n){return"[object DOMError]"===Object.prototype.toString.call(n)}function y(n){return"[object String]"===Object.prototype.toString.call(n)}function m(n){return null===n||"object"!=typeof n&&"function"!=typeof n}function b(n){return"[object Object]"===Object.prototype.toString.call(n)}function w(n){return"undefined"!=typeof Event&&x(n,Event)}function g(n){return"undefined"!=typeof Element&&x(n,Element)}function E(n){return Boolean(n&&n.then&&"function"==typeof n.then)}function x(n,t){try{return n instanceof t}catch(n){return!1}}function j(n,t){return void 0===t&&(t=0),"string"!=typeof n||0===t?n:n.length<=t?n:n.substr(0,t)+"..."}function k(n,t){if(!Array.isArray(n))return"";for(var r=[],e=0;e"}return n.event_id||""}function C(n){var t=D();if(!("console"in t))return n();var r=t.console,e={};["debug","info","warn","error","log","assert"].forEach(function(n){n in t.console&&r[n].__sentry_original__&&(e[n]=r[n],r[n]=r[n].__sentry_original__)});var i=n();return Object.keys(e).forEach(function(n){r[n]=e[n]}),i}function M(n,t,r){n.exception=n.exception||{},n.exception.values=n.exception.values||[],n.exception.values[0]=n.exception.values[0]||{},n.exception.values[0].value=n.exception.values[0].value||t||"",n.exception.values[0].type=n.exception.values[0].type||r||"Error"}function A(n,t){void 0===t&&(t={});try{n.exception.values[0].mechanism=n.exception.values[0].mechanism||{},Object.keys(t).forEach(function(r){n.exception.values[0].mechanism[r]=t[r]})}catch(n){}}function U(n){try{for(var t=n,r=[],e=0,i=0,o=" > ".length,u=void 0;t&&e++<5&&!("html"===(u=q(t))||e>1&&i+r.length*o+u.length>=80);)r.push(u),i+=u.length,t=t.parentNode;return r.reverse().join(" > ")}catch(n){return""}}function q(n){var t,r,e,i,o,u=n,c=[];if(!u||!u.tagName)return"";if(c.push(u.tagName.toLowerCase()),u.id&&c.push("#"+u.id),(t=u.className)&&y(t))for(r=t.split(/\s+/),o=0;o"}try{o.currentTarget=g(i.currentTarget)?U(i.currentTarget):Object.prototype.toString.call(i.currentTarget)}catch(n){o.currentTarget=""}for(var e in"undefined"!=typeof CustomEvent&&x(n,CustomEvent)&&(o.detail=i.detail),i)Object.prototype.hasOwnProperty.call(i,e)&&(o[e]=i);return o}return n}function tn(n){return function(n){return~-encodeURI(n).split(/%..|./).length}(JSON.stringify(n))}function rn(n,t,r){void 0===t&&(t=3),void 0===r&&(r=102400);var e=un(n,t);return tn(e)>r?rn(n,t-1,r):e}function en(n,t){return"domain"===t&&n&&"object"==typeof n&&n.u?"[Domain]":"domainEmitter"===t?"[DomainEmitter]":"undefined"!=typeof global&&n===global?"[Global]":"undefined"!=typeof window&&n===window?"[Window]":"undefined"!=typeof document&&n===document?"[Document]":b(r=n)&&"nativeEvent"in r&&"preventDefault"in r&&"stopPropagation"in r?"[SyntheticEvent]":"number"==typeof n&&n!=n?"[NaN]":void 0===n?"[undefined]":"function"==typeof n?"[Function: "+G(n)+"]":n;var r}function on(n,t,r,e){if(void 0===r&&(r=1/0),void 0===e&&(e=new Y),0===r)return function(n){var t=Object.prototype.toString.call(n);if("string"==typeof n)return n;if("[object Object]"===t)return"[Object]";if("[object Array]"===t)return"[Array]";var r=en(n);return m(r)?r:t}(t);if(null!=t&&"function"==typeof t.toJSON)return t.toJSON();var i=en(t,n);if(m(i))return i;var o=nn(t),u=Array.isArray(t)?[]:{};if(e.memoize(t))return"[Circular ~]";for(var c in o)Object.prototype.hasOwnProperty.call(o,c)&&(u[c]=on(c,o[c],r-1,e));return e.unmemoize(t),u}function un(n,t){try{return JSON.parse(JSON.stringify(n,function(n,r){return on(n,r,t)}))}catch(n){return"**non-serializable**"}}function cn(n,t){void 0===t&&(t=40);var r=Object.keys(nn(n));if(r.sort(),!r.length)return"[object has no keys]";if(r[0].length>=t)return j(r[0],t);for(var e=r.length;e>0;e--){var i=r.slice(0,e).join(", ");if(!(i.length>t))return e===r.length?i:j(i,t)}return""}!function(n){n.PENDING="PENDING",n.RESOLVED="RESOLVED",n.REJECTED="REJECTED"}(K||(K={}));var an=function(){function n(n){var t=this;this.s=K.PENDING,this.h=[],this.v=function(n){t.l(K.RESOLVED,n)},this.p=function(n){t.l(K.REJECTED,n)},this.l=function(n,r){t.s===K.PENDING&&(E(r)?r.then(t.v,t.p):(t.s=n,t.m=r,t.g()))},this.j=function(n){t.h=t.h.concat(n),t.g()},this.g=function(){t.s!==K.PENDING&&(t.s===K.REJECTED?t.h.forEach(function(n){n.onrejected&&n.onrejected(t.m)}):t.h.forEach(function(n){n.onfulfilled&&n.onfulfilled(t.m)}),t.h=[])};try{n(this.v,this.p)}catch(n){this.p(n)}}return n.prototype.toString=function(){return"[object SyncPromise]"},n.resolve=function(t){return new n(function(n){n(t)})},n.reject=function(t){return new n(function(n,r){r(t)})},n.all=function(t){return new n(function(r,e){if(Array.isArray(t))if(0!==t.length){var i=t.length,o=[];t.forEach(function(t,u){n.resolve(t).then(function(n){o[u]=n,0===(i-=1)&&r(o)}).then(null,e)})}else r([]);else e(new TypeError("Promise.all requires an array as input."))})},n.prototype.then=function(t,r){var e=this;return new n(function(n,i){e.j({onfulfilled:function(r){if(t)try{return void n(t(r))}catch(n){return void i(n)}else n(r)},onrejected:function(t){if(r)try{return void n(r(t))}catch(n){return void i(n)}else i(t)}})})},n.prototype.catch=function(n){return this.then(function(n){return n},n)},n.prototype.finally=function(t){var r=this;return new n(function(n,e){var i,o;return r.then(function(n){o=!1,i=n,t&&t()},function(n){o=!0,i=n,t&&t()}).then(function(){o?e(i):n(i)})})},n}(),sn=function(){function n(n){this.k=n,this._=[]}return n.prototype.isReady=function(){return void 0===this.k||this.length()0&&r(!1)},n);an.all(t._).then(function(){clearTimeout(e),r(!0)}).then(null,function(){r(!0)})})},n}();function fn(){if(!("fetch"in D()))return!1;try{return new Headers,new Request(""),new Response,!0}catch(n){return!1}}function hn(n){return n&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(n.toString())}function vn(){if(!fn())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch(n){return!1}}var ln,dn=D(),pn={},yn={};function mn(n){if(!yn[n])switch(yn[n]=!0,n){case"console":!function(){if(!("console"in dn))return;["debug","info","warn","error","log","assert"].forEach(function(n){n in dn.console&&Z(dn.console,n,function(t){return function(){for(var r=[],e=0;e2?t[2]:void 0;if(e){var i=ln,o=String(e);ln=o,wn("history",{from:i,to:o})}return n.apply(this,t)}}dn.onpopstate=function(){for(var n=[],t=0;t1&&(h=d.slice(0,-1).join("/"),l=d.pop()),this.O({host:a,pass:c,path:h,projectId:l,port:f,protocol:e,user:i})},n.prototype.O=function(n){this.protocol=n.protocol,this.user=n.user,this.pass=n.pass||"",this.host=n.host,this.port=n.port||"",this.path=n.path||"",this.projectId=n.projectId},n.prototype.T=function(){var n=this;if(["protocol","user","host","projectId"].forEach(function(t){if(!n[t])throw new v("Invalid Dsn")}),"http"!==this.protocol&&"https"!==this.protocol)throw new v("Invalid Dsn");if(this.port&&isNaN(parseInt(this.port,10)))throw new v("Invalid Dsn")},n}(),In=function(){function n(){this.D=!1,this.R=[],this.N=[],this.I=[],this.C={},this.M={},this.A={},this.U={}}return n.prototype.addScopeListener=function(n){this.R.push(n)},n.prototype.addEventProcessor=function(n){return this.N.push(n),this},n.prototype.q=function(){var n=this;this.D||(this.D=!0,setTimeout(function(){n.R.forEach(function(t){t(n)}),n.D=!1}))},n.prototype.L=function(n,t,r,i){var o=this;return void 0===i&&(i=0),new an(function(u,c){var a=n[i];if(null===t||"function"!=typeof a)u(t);else{var s=a(e({},t),r);E(s)?s.then(function(t){return o.L(n,t,r,i+1).then(u)}).then(null,c):o.L(n,s,r,i+1).then(u).then(null,c)}})},n.prototype.setUser=function(n){return this.C=n||{},this.q(),this},n.prototype.setTags=function(n){return this.M=e({},this.M,n),this.q(),this},n.prototype.setTag=function(n,t){var r;return this.M=e({},this.M,((r={})[n]=t,r)),this.q(),this},n.prototype.setExtras=function(n){return this.A=e({},this.A,n),this.q(),this},n.prototype.setExtra=function(n,t){var r;return this.A=e({},this.A,((r={})[n]=t,r)),this.q(),this},n.prototype.setFingerprint=function(n){return this.H=n,this.q(),this},n.prototype.setLevel=function(n){return this.P=n,this.q(),this},n.prototype.setTransaction=function(n){return this.F=n,this.W&&(this.W.transaction=n),this.q(),this},n.prototype.setContext=function(n,t){var r;return this.U=e({},this.U,((r={})[n]=t,r)),this.q(),this},n.prototype.setSpan=function(n){return this.W=n,this.q(),this},n.prototype.getSpan=function(){return this.W},n.clone=function(t){var r=new n;return t&&(r.I=u(t.I),r.M=e({},t.M),r.A=e({},t.A),r.U=e({},t.U),r.C=t.C,r.P=t.P,r.W=t.W,r.F=t.F,r.H=t.H,r.N=u(t.N)),r},n.prototype.clear=function(){return this.I=[],this.M={},this.A={},this.C={},this.U={},this.P=void 0,this.F=void 0,this.H=void 0,this.W=void 0,this.q(),this},n.prototype.addBreadcrumb=function(n,t){var r=e({timestamp:W()},n);return this.I=void 0!==t&&t>=0?u(this.I,[r]).slice(-t):u(this.I,[r]),this.q(),this},n.prototype.clearBreadcrumbs=function(){return this.I=[],this.q(),this},n.prototype.X=function(n){n.fingerprint=n.fingerprint?Array.isArray(n.fingerprint)?n.fingerprint:[n.fingerprint]:[],this.H&&(n.fingerprint=n.fingerprint.concat(this.H)),n.fingerprint&&!n.fingerprint.length&&delete n.fingerprint},n.prototype.applyToEvent=function(n,t){return this.A&&Object.keys(this.A).length&&(n.extra=e({},this.A,n.extra)),this.M&&Object.keys(this.M).length&&(n.tags=e({},this.M,n.tags)),this.C&&Object.keys(this.C).length&&(n.user=e({},this.C,n.user)),this.U&&Object.keys(this.U).length&&(n.contexts=e({},this.U,n.contexts)),this.P&&(n.level=this.P),this.F&&(n.transaction=this.F),this.W&&(n.contexts=e({trace:this.W.getTraceContext()},n.contexts)),this.X(n),n.breadcrumbs=u(n.breadcrumbs||[],this.I),n.breadcrumbs=n.breadcrumbs.length>0?n.breadcrumbs:void 0,this.L(u(Cn(),this.N),n,t)},n}();function Cn(){var n=D();return n.__SENTRY__=n.__SENTRY__||{},n.__SENTRY__.globalEventProcessors=n.__SENTRY__.globalEventProcessors||[],n.__SENTRY__.globalEventProcessors}function Mn(n){Cn().push(n)}var An=3,Un=function(){function n(n,t,r){void 0===t&&(t=new In),void 0===r&&(r=An),this.B=r,this.$=[],this.$.push({client:n,scope:t})}return n.prototype.G=function(n){for(var t,r=[],e=1;e0?n[n.length-1].scope:void 0,r=In.clone(t);return this.getStack().push({client:this.getClient(),scope:r}),r},n.prototype.popScope=function(){return void 0!==this.getStack().pop()},n.prototype.withScope=function(n){var t=this.pushScope();try{n(t)}finally{this.popScope()}},n.prototype.getClient=function(){return this.getStackTop().client},n.prototype.getScope=function(){return this.getStackTop().scope},n.prototype.getStack=function(){return this.$},n.prototype.getStackTop=function(){return this.$[this.$.length-1]},n.prototype.captureException=function(n,t){var r=this.J=R(),i=t;if(!t){var o=void 0;try{throw new Error("Sentry syntheticException")}catch(n){o=n}i={originalException:n,syntheticException:o}}return this.G("captureException",n,e({},i,{event_id:r})),r},n.prototype.captureMessage=function(n,t,r){var i=this.J=R(),o=r;if(!r){var u=void 0;try{throw new Error(n)}catch(n){u=n}o={originalException:n,syntheticException:u}}return this.G("captureMessage",n,t,e({},o,{event_id:i})),i},n.prototype.captureEvent=function(n,t){var r=this.J=R();return this.G("captureEvent",n,e({},t,{event_id:r})),r},n.prototype.lastEventId=function(){return this.J},n.prototype.addBreadcrumb=function(n,t){var r=this.getStackTop();if(r.scope&&r.client){var i=r.client.getOptions&&r.client.getOptions()||{},o=i.beforeBreadcrumb,u=void 0===o?null:o,c=i.maxBreadcrumbs,a=void 0===c?100:c;if(!(a<=0)){var s=W(),f=e({timestamp:s},n),h=u?C(function(){return u(f,t)}):f;null!==h&&r.scope.addBreadcrumb(h,Math.min(a,100))}}},n.prototype.setUser=function(n){var t=this.getStackTop();t.scope&&t.scope.setUser(n)},n.prototype.setTags=function(n){var t=this.getStackTop();t.scope&&t.scope.setTags(n)},n.prototype.setExtras=function(n){var t=this.getStackTop();t.scope&&t.scope.setExtras(n)},n.prototype.setTag=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setTag(n,t)},n.prototype.setExtra=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setExtra(n,t)},n.prototype.setContext=function(n,t){var r=this.getStackTop();r.scope&&r.scope.setContext(n,t)},n.prototype.configureScope=function(n){var t=this.getStackTop();t.scope&&t.client&&n(t.scope)},n.prototype.run=function(n){var t=Ln(this);try{n(this)}finally{Ln(t)}},n.prototype.getIntegration=function(n){var t=this.getClient();if(!t)return null;try{return t.getIntegration(n)}catch(t){return Q.warn("Cannot retrieve integration "+n.id+" from the current Hub"),null}},n.prototype.startSpan=function(n,t){return void 0===t&&(t=!1),this.V("startSpan",n,t)},n.prototype.traceHeaders=function(){return this.V("traceHeaders")},n.prototype.V=function(n){for(var t=[],r=1;r=n&&r({interval:i,ready:!1})):r({interval:i,ready:!0})},1)})},n.prototype.in=function(){return this.tn},n.prototype.cn=function(){return!1!==this.getOptions().enabled&&void 0!==this.en},n.prototype.an=function(n,t,r){var i=this,o=this.getOptions(),u=o.environment,c=o.release,a=o.dist,s=o.maxValueLength,f=void 0===s?250:s,h=o.normalizeDepth,v=void 0===h?3:h,l=e({},n);void 0===l.environment&&void 0!==u&&(l.environment=u),void 0===l.release&&void 0!==c&&(l.release=c),void 0===l.dist&&void 0!==a&&(l.dist=a),l.message&&(l.message=j(l.message,f));var d=l.exception&&l.exception.values&&l.exception.values[0];d&&d.value&&(d.value=j(d.value,f));var p=l.request;p&&p.url&&(p.url=j(p.url,f)),void 0===l.event_id&&(l.event_id=r&&r.event_id?r.event_id:R()),this.sn(l.sdk);var y=an.resolve(l);return t&&(y=t.applyToEvent(l,r)),y.then(function(n){return"number"==typeof v&&v>0?i.fn(n,v):n})},n.prototype.fn=function(n,t){return n?e({},n,n.breadcrumbs&&{breadcrumbs:n.breadcrumbs.map(function(n){return e({},n,n.data&&{data:un(n.data,t)})})},n.user&&{user:un(n.user,t)},n.contexts&&{contexts:un(n.contexts,t)},n.extra&&{extra:un(n.extra,t)}):null},n.prototype.sn=function(n){var t=Object.keys(this.Z);n&&t.length>0&&(n.integrations=t)},n.prototype.on=function(n,t,r){var e=this,i=this.getOptions(),o=i.beforeSend,u=i.sampleRate;return this.cn()?"number"==typeof u&&Math.random()>u?an.reject("This event has been sampled, will not send event."):new an(function(i,u){e.an(n,r,t).then(function(n){if(null!==n){var r=n;if(t&&t.data&&!0===t.data.__sentry__||!o)return e.in().sendEvent(r),void i(r);var c=o(n,t);if(void 0===c)Q.error("`beforeSend` method has to return `null` or a valid event.");else if(E(c))e.hn(c,i,u);else{if(null===(r=c))return Q.log("`beforeSend` returned `null`, will not send event."),void i(null);e.in().sendEvent(r),i(r)}}else u("An event processor returned null, will not send event.")}).then(null,function(n){e.captureException(n,{data:{__sentry__:!0},originalException:n}),u("Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: "+n)})}):an.reject("SDK not enabled, will not send event.")},n.prototype.hn=function(n,t,r){var e=this;n.then(function(n){null!==n?(e.in().sendEvent(n),t(n)):r("`beforeSend` returned `null`, will not send event.")}).then(null,function(n){r("beforeSend rejected with "+n)})},n}(),Kn=function(){function t(){}return t.prototype.sendEvent=function(t){return an.resolve({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:n.Status.Skipped})},t.prototype.close=function(n){return an.resolve(!0)},t}(),Qn=function(){function n(n){this.rn=n,this.rn.dsn||Q.warn("No DSN provided, backend will not do anything."),this.vn=this.ln()}return n.prototype.ln=function(){return new Kn},n.prototype.eventFromException=function(n,t){throw new v("Backend has to implement `eventFromException` method")},n.prototype.eventFromMessage=function(n,t,r){throw new v("Backend has to implement `eventFromMessage` method")},n.prototype.sendEvent=function(n){this.vn.sendEvent(n).then(null,function(n){Q.error("Error while sending event: "+n)})},n.prototype.getTransport=function(){return this.vn},n}();var Yn=function(){function n(){this.name=n.id}return n.prototype.setupOnce=function(){zn=Function.prototype.toString,Function.prototype.toString=function(){for(var n=[],t=0;t|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,it=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js))(?::(\d+))?(?::(\d+))?\s*$/i,ot=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,ut=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,ct=/\((\S*)(?::(\d+))(?::(\d+))\)/;function at(n){var t=null,r=n&&n.framesToPop;try{if(t=function(n){if(!n||!n.stacktrace)return null;for(var t,r=n.stacktrace,e=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,i=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,o=r.split("\n"),u=[],c=0;c eval")>-1&&(t=ut.exec(r[3]))?(r[1]=r[1]||"eval",r[3]=t[1],r[4]=t[2],r[5]=""):0!==u||r[5]||void 0===n.columnNumber||(i[0].column=n.columnNumber+1),e={url:r[3],func:r[1]||rt,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}!e.func&&e.line&&(e.func=rt),i.push(e)}if(!i.length)return null;return{message:ft(n),name:n.name,stack:i}}(n))return st(t,r)}catch(n){}return{message:ft(n),name:n&&n.name,stack:[],failed:!0}}function st(n,t){try{return e({},n,{stack:n.stack.slice(t)})}catch(t){return n}}function ft(n){var t=n&&n.message;return t?t.error&&"string"==typeof t.error.message?t.error.message:t:"No error message"}var ht=50;function vt(n){var t=dt(n.stack),r={type:n.name,value:n.message};return t&&t.length&&(r.stacktrace={frames:t}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function lt(n){return{exception:{values:[vt(n)]}}}function dt(n){if(!n||!n.length)return[];var t=n,r=t[0].func||"",e=t[t.length-1].func||"";return-1===r.indexOf("captureMessage")&&-1===r.indexOf("captureException")||(t=t.slice(1)),-1!==e.indexOf("sentryWrapped")&&(t=t.slice(0,-1)),t.map(function(n){return{colno:null===n.column?void 0:n.column,filename:n.url||t[0].url,function:n.func||"?",in_app:!0,lineno:null===n.line?void 0:n.line}}).slice(0,ht).reverse()}function pt(n,t,r){var e,i;if(void 0===r&&(r={}),d(n)&&n.error)return e=lt(at(n=n.error));if(p(n)||(i=n,"[object DOMException]"===Object.prototype.toString.call(i))){var o=n,u=o.name||(p(o)?"DOMError":"DOMException"),c=o.message?u+": "+o.message:u;return M(e=yt(c,t,r),c),e}return l(n)?e=lt(at(n)):b(n)||w(n)?(A(e=function(n,t,r){var e={exception:{values:[{type:w(n)?n.constructor.name:r?"UnhandledRejection":"Error",value:"Non-Error "+(r?"promise rejection":"exception")+" captured with keys: "+cn(n)}]},extra:{__serialized__:rn(n)}};if(t){var i=dt(at(t).stack);e.stacktrace={frames:i}}return e}(n,t,r.rejection),{synthetic:!0}),e):(M(e=yt(n,t,r),""+n,void 0),A(e,{synthetic:!0}),e)}function yt(n,t,r){void 0===r&&(r={});var e={message:n};if(r.attachStacktrace&&t){var i=dt(at(t).stack);e.stacktrace={frames:i}}return e}var mt=function(){function n(n){this.options=n,this._=new sn(30),this.url=new $n(this.options.dsn).getStoreEndpointWithUrlEncodedAuth()}return n.prototype.sendEvent=function(n){throw new v("Transport Class has to implement `sendEvent` method")},n.prototype.close=function(n){return this._.drain(n)},n}(),bt=D(),wt=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.xn=new Date(Date.now()),n}return r(e,t),e.prototype.sendEvent=function(t){var r=this;if(new Date(Date.now())0}function Ot(n,t,r){if(void 0===t&&(t={}),"function"!=typeof n)return n;try{if(n.__sentry__)return n;if(n.__sentry_wrapped__)return n.__sentry_wrapped__}catch(t){return n}var sentryWrapped=function(){var i=Array.prototype.slice.call(arguments);try{r&&"function"==typeof r&&r.apply(this,arguments);var o=i.map(function(n){return Ot(n,t)});return n.handleEvent?n.handleEvent.apply(this,o):n.apply(this,o)}catch(n){throw _t+=1,setTimeout(function(){_t-=1}),Bn(function(r){r.addEventProcessor(function(n){var r=e({},n);return t.mechanism&&(M(r,void 0,void 0),A(r,t.mechanism)),r.extra=e({},r.extra,{arguments:i}),r}),captureException(n)}),n}};try{for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(sentryWrapped[i]=n[i])}catch(n){}n.prototype=n.prototype||{},sentryWrapped.prototype=n.prototype,Object.defineProperty(n,"__sentry_wrapped__",{enumerable:!1,value:sentryWrapped}),Object.defineProperties(sentryWrapped,{__sentry__:{enumerable:!1,value:!0},__sentry_original__:{enumerable:!1,value:n}});try{Object.getOwnPropertyDescriptor(sentryWrapped,"name").configurable&&Object.defineProperty(sentryWrapped,"name",{get:function(){return n.name}})}catch(n){}return sentryWrapped}var Tt=function(){function t(n){this.name=t.id,this.jn=!1,this.kn=!1,this.rn=e({onerror:!0,onunhandledrejection:!0},n)}return t.prototype.setupOnce=function(){Error.stackTraceLimit=50,this.rn.onerror&&(Q.log("Global Handler attached: onerror"),this._n()),this.rn.onunhandledrejection&&(Q.log("Global Handler attached: onunhandledrejection"),this.Sn())},t.prototype._n=function(){var n=this;this.jn||(bn({callback:function(r){var e=r.error,i=Hn(),o=i.getIntegration(t),u=e&&!0===e.__sentry_own_request__;if(o&&!St()&&!u){var c=i.getClient(),a=m(e)?n.On(r.msg,r.url,r.line,r.column):n.Tn(pt(e,void 0,{attachStacktrace:c&&c.getOptions().attachStacktrace,rejection:!1}),r.url,r.line,r.column);A(a,{handled:!1,type:"onerror"}),i.captureEvent(a,{originalException:e})}},type:"error"}),this.jn=!0)},t.prototype.Sn=function(){var r=this;this.kn||(bn({callback:function(e){var i=e;try{"reason"in e?i=e.reason:"detail"in e&&"reason"in e.detail&&(i=e.detail.reason)}catch(n){}var o=Hn(),u=o.getIntegration(t),c=i&&!0===i.__sentry_own_request__;if(!u||St()||c)return!0;var a=o.getClient(),s=m(i)?r.Dn(i):pt(i,void 0,{attachStacktrace:a&&a.getOptions().attachStacktrace,rejection:!0});s.level=n.Severity.Error,A(s,{handled:!1,type:"onunhandledrejection"}),o.captureEvent(s,{originalException:i})},type:"unhandledrejection"}),this.kn=!0)},t.prototype.On=function(n,t,r,e){var i,o=d(n)?n.message:n;if(y(o)){var u=o.match(/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i);u&&(i=u[1],o=u[2])}var c={exception:{values:[{type:i||"Error",value:o}]}};return this.Tn(c,t,r,e)},t.prototype.Dn=function(n){return{exception:{values:[{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+n}]}}},t.prototype.Tn=function(n,t,r,e){n.exception=n.exception||{},n.exception.values=n.exception.values||[],n.exception.values[0]=n.exception.values[0]||{},n.exception.values[0].stacktrace=n.exception.values[0].stacktrace||{},n.exception.values[0].stacktrace.frames=n.exception.values[0].stacktrace.frames||[];var i=isNaN(parseInt(e,10))?void 0:e,o=isNaN(parseInt(r,10))?void 0:r,u=y(t)&&t.length>0?t:function(){try{return document.location.href}catch(n){return""}}();return 0===n.exception.values[0].stacktrace.frames.length&&n.exception.values[0].stacktrace.frames.push({colno:i,filename:u,function:"?",in_app:!0,lineno:o}),n},t.id="GlobalHandlers",t}(),Dt=function(){function n(){this.Rn=0,this.name=n.id}return n.prototype.Nn=function(n){return function(){for(var t=[],r=0;r"}0!==t.length&&Hn().addBreadcrumb({category:"ui."+n.name,message:t},{event:n.event,name:n.name})},t.prototype.qn=function(n){if(n.endTimestamp){if(n.xhr.__sentry_own_request__)return;Hn().addBreadcrumb({category:"xhr",data:n.xhr.__sentry_xhr__,type:"http"},{xhr:n.xhr})}else this.rn.sentry&&n.xhr.__sentry_own_request__&&Nt(n.args[0])},t.prototype.Ln=function(t){if(t.endTimestamp){var r=Hn().getClient(),i=r&&r.getDsn();if(this.rn.sentry&&i){var o=new $n(i).getStoreEndpoint();if(o&&-1!==t.fetchData.url.indexOf(o)&&"POST"===t.fetchData.method&&t.args[1]&&t.args[1].body)return void Nt(t.args[1].body)}t.error?Hn().addBreadcrumb({category:"fetch",data:e({},t.fetchData,{status_code:t.response.status}),level:n.Severity.Error,type:"http"},{data:t.error,input:t.args}):Hn().addBreadcrumb({category:"fetch",data:e({},t.fetchData,{status_code:t.response.status}),type:"http"},{input:t.args,response:t.response})}},t.prototype.Hn=function(n){var t=D(),r=n.from,e=n.to,i=N(t.location.href),o=N(r),u=N(e);o.path||(o=i),i.protocol===u.protocol&&i.host===u.host&&(e=u.relative),i.protocol===o.protocol&&i.host===o.host&&(r=o.relative),Hn().addBreadcrumb({category:"navigation",data:{from:r,to:e}})},t.prototype.setupOnce=function(){var n=this;this.rn.console&&bn({callback:function(){for(var t=[],r=0;r=this.k)return r;var e=vt(at(n[t]));return this.Wn(n[t],t,u([e],r))},n.id="LinkedErrors",n}(),At=D(),Ut=function(){function n(){this.name=n.id}return n.prototype.setupOnce=function(){Mn(function(t){if(Hn().getIntegration(n)){if(!At.navigator||!At.location)return t;var r=t.request||{};return r.url=r.url||At.location.href,r.headers=r.headers||{},r.headers["User-Agent"]=At.navigator.userAgent,e({},t,{request:r})}return t})},n.id="UserAgent",n}(),qt=Object.freeze({GlobalHandlers:Tt,TryCatch:Dt,Breadcrumbs:Rt,LinkedErrors:Mt,UserAgent:Ut}),Lt=[new nt,new Yn,new Dt,new Rt,new Tt,new Mt,new Ut];var Ht={},Pt=D();Pt.Sentry&&Pt.Sentry.Integrations&&(Ht=Pt.Sentry.Integrations);var Ft=e({},Ht,tt,qt);return n.BrowserClient=kt,n.Hub=Un,n.Integrations=Ft,n.SDK_NAME=jt,n.SDK_VERSION="5.15.0",n.Scope=In,n.Transports=Et,n.addBreadcrumb=function(n){Xn("addBreadcrumb",n)},n.addGlobalEventProcessor=Mn,n.captureEvent=function(n){return Xn("captureEvent",n)},n.captureException=captureException,n.captureMessage=function(n,t){var r;try{throw new Error(n)}catch(n){r=n}return Xn("captureMessage",n,t,{originalException:n,syntheticException:r})},n.close=function(n){var t=Hn().getClient();return t?t.close(n):an.reject(!1)},n.configureScope=function(n){Xn("configureScope",n)},n.defaultIntegrations=Lt,n.flush=function(n){var t=Hn().getClient();return t?t.flush(n):an.reject(!1)},n.forceLoad=function(){},n.getCurrentHub=Hn,n.getHubFromCarrier=Fn,n.init=function(n){if(void 0===n&&(n={}),void 0===n.defaultIntegrations&&(n.defaultIntegrations=Lt),void 0===n.release){var t=D();t.SENTRY_RELEASE&&t.SENTRY_RELEASE.id&&(n.release=t.SENTRY_RELEASE.id)}!function(n,t){!0===t.debug&&Q.enable();var r=Hn(),e=new n(t);r.bindClient(e)}(kt,n)},n.lastEventId=function(){return Hn().lastEventId()},n.onLoad=function(n){n()},n.setContext=function(n,t){Xn("setContext",n,t)},n.setExtra=function(n,t){Xn("setExtra",n,t)},n.setExtras=function(n){Xn("setExtras",n)},n.setTag=function(n,t){Xn("setTag",n,t)},n.setTags=function(n){Xn("setTags",n)},n.setUser=function(n){Xn("setUser",n)},n.showReportDialog=function(n){void 0===n&&(n={}),n.eventId||(n.eventId=Hn().lastEventId());var t=Hn().getClient();t&&t.showReportDialog(n)},n.withScope=Bn,n.wrap=function(n){return Ot(n)()},n}({}); +/*! @sentry/browser 7.102.0 (4c0fa37) | https://github.com/getsentry/sentry-javascript */ +var Sentry=function(t){const n=Object.prototype.toString;function e(t){switch(n.call(t)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return l(t,Error)}}function r(t,e){return n.call(t)===`[object ${e}]`}function i(t){return r(t,"ErrorEvent")}function o(t){return r(t,"DOMError")}function s(t){return r(t,"String")}function c(t){return"object"==typeof t&&null!==t&&"__sentry_template_string__"in t&&"__sentry_template_values__"in t}function u(t){return null===t||c(t)||"object"!=typeof t&&"function"!=typeof t}function a(t){return r(t,"Object")}function f(t){return"undefined"!=typeof Event&&l(t,Event)}function h(t){return Boolean(t&&t.then&&"function"==typeof t.then)}function l(t,n){try{return t instanceof n}catch(t){return!1}}function d(t){return!("object"!=typeof t||null===t||!t.__isVue&&!t.t)}function p(t,n=0){return"string"!=typeof t||0===n||t.length<=n?t:`${t.slice(0,n)}...`}function m(t,n){if(!Array.isArray(t))return"";const e=[];for(let n=0;ny(t,n,e)))}function v(t,n,e=250,r,i,o,s){if(!(o.exception&&o.exception.values&&s&&l(s.originalException,Error)))return;const c=o.exception.values.length>0?o.exception.values[o.exception.values.length-1]:void 0;var u,a;c&&(o.exception.values=(u=_(t,n,i,s.originalException,r,o.exception.values,c,0),a=e,u.map((t=>(t.value&&(t.value=p(t.value,a)),t)))))}function _(t,n,e,r,i,o,s,c){if(o.length>=e+1)return o;let u=[...o];if(l(r[i],Error)){b(s,c);const o=t(n,r[i]),a=u.length;E(o,i,a,c),u=_(t,n,e,r[i],i,[o,...u],o,a)}return Array.isArray(r.errors)&&r.errors.forEach(((r,o)=>{if(l(r,Error)){b(s,c);const a=t(n,r),f=u.length;E(a,`errors[${o}]`,f,c),u=_(t,n,e,r,i,[a,...u],a,f)}})),u}function b(t,n){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,is_exception_group:!0,exception_id:n}}function E(t,n,e,r){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,type:"chained",source:n,exception_id:e,parent_id:r}}function w(t){return t&&t.Math==Math?t:void 0}const $="object"==typeof globalThis&&w(globalThis)||"object"==typeof window&&w(window)||"object"==typeof self&&w(self)||"object"==typeof global&&w(global)||function(){return this}()||{};function S(){return $}function x(t,n,e){const r=e||$,i=r.__SENTRY__=r.__SENTRY__||{};return i[t]||(i[t]=n())}const k=S();function T(t,n={}){if(!t)return"";try{let e=t;const r=5,i=[];let o=0,s=0;const c=" > ",u=c.length;let a;const f=Array.isArray(n)?n:n.keyAttrs,h=!Array.isArray(n)&&n.maxStringLength||80;for(;e&&o++1&&s+i.length*u+a.length>=h));)i.push(a),s+=a.length,e=e.parentNode;return i.reverse().join(c)}catch(t){return""}}function j(t,n){const e=t,r=[];let i,o,c,u,a;if(!e||!e.tagName)return"";if(k.HTMLElement&&e instanceof HTMLElement&&e.dataset&&e.dataset.sentryComponent)return e.dataset.sentryComponent;r.push(e.tagName.toLowerCase());const f=n&&n.length?n.filter((t=>e.getAttribute(t))).map((t=>[t,e.getAttribute(t)])):null;if(f&&f.length)f.forEach((t=>{r.push(`[${t[0]}="${t[1]}"]`)}));else if(e.id&&r.push(`#${e.id}`),i=e.className,i&&s(i))for(o=i.split(/\s+/),a=0;a{const r=I[t];e[t]=n[t],n[t]=r}));try{return t()}finally{r.forEach((t=>{n[t]=e[t]}))}}const M=function(){let t=!1;const n={enable:()=>{t=!0},disable:()=>{t=!1},isEnabled:()=>t};return O.forEach((t=>{n[t]=()=>{}})),n}(),R=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function C(t,n=!1){const{host:e,path:r,pass:i,port:o,projectId:s,protocol:c,publicKey:u}=t;return`${c}://${u}${n&&i?`:${i}`:""}@${e}${o?`:${o}`:""}/${r?`${r}/`:r}${s}`}function A(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function N(t){const n="string"==typeof t?function(t){const n=R.exec(t);if(!n)return void D((()=>{console.error(`Invalid Sentry Dsn: ${t}`)}));const[e,r,i="",o,s="",c]=n.slice(1);let u="",a=c;const f=a.split("/");if(f.length>1&&(u=f.slice(0,-1).join("/"),a=f.pop()),a){const t=a.match(/^\d+/);t&&(a=t[0])}return A({host:o,pass:i,path:u,projectId:a,port:s,protocol:e,publicKey:r})}(t):A(t);if(n)return n}class L extends Error{constructor(t,n="warn"){super(t),this.message=t,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=n}}function P(t,n,e){if(!(n in t))return;const r=t[n],i=e(r);"function"==typeof i&&B(i,r),t[n]=i}function U(t,n,e){try{Object.defineProperty(t,n,{value:e,writable:!0,configurable:!0})}catch(t){}}function B(t,n){try{const e=n.prototype||{};t.prototype=n.prototype=e,U(t,"__sentry_original__",n)}catch(t){}}function F(t){return t.__sentry_original__}function H(t){if(e(t))return{message:t.message,name:t.name,stack:t.stack,...W(t)};if(f(t)){const n={type:t.type,target:q(t.target),currentTarget:q(t.currentTarget),...W(t)};return"undefined"!=typeof CustomEvent&&l(t,CustomEvent)&&(n.detail=t.detail),n}return t}function q(t){try{return n=t,"undefined"!=typeof Element&&l(n,Element)?T(t):Object.prototype.toString.call(t)}catch(t){return""}var n}function W(t){if("object"==typeof t&&null!==t){const n={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n}return{}}function z(t){return X(t,new Map)}function X(t,n){if(function(t){if(!a(t))return!1;try{const n=Object.getPrototypeOf(t).constructor.name;return!n||"Object"===n}catch(t){return!0}}(t)){const e=n.get(t);if(void 0!==e)return e;const r={};n.set(t,r);for(const e of Object.keys(t))void 0!==t[e]&&(r[e]=X(t[e],n));return r}if(Array.isArray(t)){const e=n.get(t);if(void 0!==e)return e;const r=[];return n.set(t,r),t.forEach((t=>{r.push(X(t,n))})),r}return t}const G=/\(error: (.*)\)/,J=/captureMessage|captureException/;function K(...t){const n=t.sort(((t,n)=>t[0]-n[0])).map((t=>t[1]));return(t,e=0)=>{const r=[],i=t.split("\n");for(let t=e;t1024)continue;const o=G.test(e)?e.replace(G,"$1"):e;if(!o.match(/\S*Error: /)){for(const t of n){const n=t(o);if(n){r.push(n);break}}if(r.length>=50)break}}return function(t){if(!t.length)return[];const n=Array.from(t);/sentryWrapped/.test(n[n.length-1].function||"")&&n.pop();n.reverse(),J.test(n[n.length-1].function||"")&&(n.pop(),J.test(n[n.length-1].function||"")&&n.pop());return n.slice(0,50).map((t=>({...t,filename:t.filename||n[n.length-1].filename,function:t.function||"?"})))}(r)}}const V="";function Y(t){try{return t&&"function"==typeof t&&t.name||V}catch(t){return V}}const Z={},Q={};function tt(t,n){Z[t]=Z[t]||[],Z[t].push(n)}function nt(t,n){Q[t]||(n(),Q[t]=!0)}function et(t,n){const e=t&&Z[t];if(e)for(const t of e)try{t(n)}catch(t){}}function rt(){"console"in $&&O.forEach((function(t){t in $.console&&P($.console,t,(function(n){return I[t]=n,function(...n){et("console",{args:n,level:t});const e=I[t];e&&e.apply($.console,n)}}))}))}function it(){const t=$,n=t.crypto||t.msCrypto;let e=()=>16*Math.random();try{if(n&&n.randomUUID)return n.randomUUID().replace(/-/g,"");n&&n.getRandomValues&&(e=()=>{const t=new Uint8Array(1);return n.getRandomValues(t),t[0]})}catch(t){}return([1e7]+1e3+4e3+8e3+1e11).replace(/[018]/g,(t=>(t^(15&e())>>t/4).toString(16)))}function ot(t){return t.exception&&t.exception.values?t.exception.values[0]:void 0}function st(t){const{message:n,event_id:e}=t;if(n)return n;const r=ot(t);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||e||"":e||""}function ct(t,n,e){const r=t.exception=t.exception||{},i=r.values=r.values||[],o=i[0]=i[0]||{};o.value||(o.value=n||""),o.type||(o.type=e||"Error")}function ut(t,n){const e=ot(t);if(!e)return;const r=e.mechanism;if(e.mechanism={type:"generic",handled:!0,...r,...n},n&&"data"in n){const t={...r&&r.data,...n.data};e.mechanism.data=t}}function at(t){if(t&&t.__sentry_captured__)return!0;try{U(t,"__sentry_captured__",!0)}catch(t){}return!1}function ft(t){return Array.isArray(t)?t:[t]}const ht=$;let lt,dt,pt;function mt(){if(!ht.document)return;const t=et.bind(null,"dom"),n=yt(t,!0);ht.document.addEventListener("click",n,!1),ht.document.addEventListener("keypress",n,!1),["EventTarget","Node"].forEach((n=>{const e=ht[n]&&ht[n].prototype;e&&e.hasOwnProperty&&e.hasOwnProperty("addEventListener")&&(P(e,"addEventListener",(function(n){return function(e,r,i){if("click"===e||"keypress"==e)try{const r=this,o=r.__sentry_instrumentation_handlers__=r.__sentry_instrumentation_handlers__||{},s=o[e]=o[e]||{refCount:0};if(!s.handler){const r=yt(t);s.handler=r,n.call(this,e,r,i)}s.refCount++}catch(t){}return n.call(this,e,r,i)}})),P(e,"removeEventListener",(function(t){return function(n,e,r){if("click"===n||"keypress"==n)try{const e=this,i=e.__sentry_instrumentation_handlers__||{},o=i[n];o&&(o.refCount--,o.refCount<=0&&(t.call(this,n,o.handler,r),o.handler=void 0,delete i[n]),0===Object.keys(i).length&&delete e.__sentry_instrumentation_handlers__)}catch(t){}return t.call(this,n,e,r)}})))}))}function yt(t,n=!1){return e=>{if(!e||e._sentryCaptured)return;const r=function(t){try{return t.target}catch(t){return null}}(e);if(function(t,n){return"keypress"===t&&(!n||!n.tagName||"INPUT"!==n.tagName&&"TEXTAREA"!==n.tagName&&!n.isContentEditable)}(e.type,r))return;U(e,"_sentryCaptured",!0),r&&!r._sentryId&&U(r,"_sentryId",it());const i="keypress"===e.type?"input":e.type;if(!function(t){if(t.type!==dt)return!1;try{if(!t.target||t.target._sentryId!==pt)return!1}catch(t){}return!0}(e)){t({event:e,name:i,global:n}),dt=e.type,pt=r?r._sentryId:void 0}clearTimeout(lt),lt=ht.setTimeout((()=>{pt=void 0,dt=void 0}),1e3)}}const gt=S();function vt(){if(!("fetch"in gt))return!1;try{return new Headers,new Request("http://www.example.com"),new Response,!0}catch(t){return!1}}function _t(t){return t&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}function bt(){(function(){if("string"==typeof EdgeRuntime)return!0;if(!vt())return!1;if(_t(gt.fetch))return!0;let t=!1;const n=gt.document;if(n&&"function"==typeof n.createElement)try{const e=n.createElement("iframe");e.hidden=!0,n.head.appendChild(e),e.contentWindow&&e.contentWindow.fetch&&(t=_t(e.contentWindow.fetch)),n.head.removeChild(e)}catch(t){}return t})()&&P($,"fetch",(function(t){return function(...n){const{method:e,url:r}=function(t){if(0===t.length)return{method:"GET",url:""};if(2===t.length){const[n,e]=t;return{url:wt(n),method:Et(e,"method")?String(e.method).toUpperCase():"GET"}}const n=t[0];return{url:wt(n),method:Et(n,"method")?String(n.method).toUpperCase():"GET"}}(n),i={args:n,fetchData:{method:e,url:r},startTimestamp:Date.now()};return et("fetch",{...i}),t.apply($,n).then((t=>(et("fetch",{...i,endTimestamp:Date.now(),response:t}),t)),(t=>{throw et("fetch",{...i,endTimestamp:Date.now(),error:t}),t}))}}))}function Et(t,n){return!!t&&"object"==typeof t&&!!t[n]}function wt(t){return"string"==typeof t?t:t?Et(t,"url")?t.url:t.toString?t.toString():"":""}let $t=null;function St(){$t=$.onerror,$.onerror=function(t,n,e,r,i){const o={column:r,error:i,line:e,msg:t,url:n};return et("error",o),!(!$t||$t.__SENTRY_LOADER__)&&$t.apply(this,arguments)},$.onerror.__SENTRY_INSTRUMENTED__=!0}let xt=null;function kt(){xt=$.onunhandledrejection,$.onunhandledrejection=function(t){const n=t;return et("unhandledrejection",n),!(xt&&!xt.__SENTRY_LOADER__)||xt.apply(this,arguments)},$.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const Tt=S();const jt=$;let Ot;function It(t){const n="history";tt(n,t),nt(n,Dt)}function Dt(){if(!function(){const t=Tt.chrome,n=t&&t.app&&t.app.runtime,e="history"in Tt&&!!Tt.history.pushState&&!!Tt.history.replaceState;return!n&&e}())return;const t=jt.onpopstate;function n(t){return function(...n){const e=n.length>2?n[2]:void 0;if(e){const t=Ot,n=String(e);Ot=n;et("history",{from:t,to:n})}return t.apply(this,n)}}jt.onpopstate=function(...n){const e=jt.location.href,r=Ot;Ot=e;if(et("history",{from:r,to:e}),t)try{return t.apply(this,n)}catch(t){}},P(jt.history,"pushState",n),P(jt.history,"replaceState",n)}const Mt=$;function Rt(){if(!Mt.XMLHttpRequest)return;const t=XMLHttpRequest.prototype;P(t,"open",(function(t){return function(...n){const e=Date.now(),r=s(n[0])?n[0].toUpperCase():void 0,i=function(t){if(s(t))return t;try{return t.toString()}catch(t){}return}(n[1]);if(!r||!i)return t.apply(this,n);this.__sentry_xhr_v3__={method:r,url:i,request_headers:{}},"POST"===r&&i.match(/sentry_key/)&&(this.__sentry_own_request__=!0);const o=()=>{const t=this.__sentry_xhr_v3__;if(t&&4===this.readyState){try{t.status_code=this.status}catch(t){}et("xhr",{args:[r,i],endTimestamp:Date.now(),startTimestamp:e,xhr:this})}};return"onreadystatechange"in this&&"function"==typeof this.onreadystatechange?P(this,"onreadystatechange",(function(t){return function(...n){return o(),t.apply(this,n)}})):this.addEventListener("readystatechange",o),P(this,"setRequestHeader",(function(t){return function(...n){const[e,r]=n,i=this.__sentry_xhr_v3__;return i&&s(e)&&s(r)&&(i.request_headers[e.toLowerCase()]=r),t.apply(this,n)}})),t.apply(this,n)}})),P(t,"send",(function(t){return function(...n){const e=this.__sentry_xhr_v3__;if(!e)return t.apply(this,n);void 0!==n[0]&&(e.body=n[0]);return et("xhr",{args:[e.method,e.url],startTimestamp:Date.now(),xhr:this}),t.apply(this,n)}}))}function Ct(t,n=100,e=1/0){try{return Nt("",t,n,e)}catch(t){return{ERROR:`**non-serializable** (${t})`}}}function At(t,n=3,e=102400){const r=Ct(t,n);return i=r,function(t){return~-encodeURI(t).split(/%..|./).length}(JSON.stringify(i))>e?At(t,n-1,e):r;var i}function Nt(t,n,e=1/0,r=1/0,i=function(){const t="function"==typeof WeakSet,n=t?new WeakSet:[];return[function(e){if(t)return!!n.has(e)||(n.add(e),!1);for(let t=0;t=r){l[t]="[MaxProperties ~]";break}const n=m[t];l[t]=Nt(t,n,f-1,r,i),p++}return s(n),l}var Lt;function Pt(t){return new Bt((n=>{n(t)}))}function Ut(t){return new Bt(((n,e)=>{e(t)}))}!function(t){t[t.PENDING=0]="PENDING";t[t.RESOLVED=1]="RESOLVED";t[t.REJECTED=2]="REJECTED"}(Lt||(Lt={}));class Bt{constructor(t){Bt.prototype.__init.call(this),Bt.prototype.__init2.call(this),Bt.prototype.__init3.call(this),Bt.prototype.__init4.call(this),this.o=Lt.PENDING,this.u=[];try{t(this.h,this.l)}catch(t){this.l(t)}}then(t,n){return new Bt(((e,r)=>{this.u.push([!1,n=>{if(t)try{e(t(n))}catch(t){r(t)}else e(n)},t=>{if(n)try{e(n(t))}catch(t){r(t)}else r(t)}]),this.p()}))}catch(t){return this.then((t=>t),t)}finally(t){return new Bt(((n,e)=>{let r,i;return this.then((n=>{i=!1,r=n,t&&t()}),(n=>{i=!0,r=n,t&&t()})).then((()=>{i?e(r):n(r)}))}))}__init(){this.h=t=>{this.m(Lt.RESOLVED,t)}}__init2(){this.l=t=>{this.m(Lt.REJECTED,t)}}__init3(){this.m=(t,n)=>{this.o===Lt.PENDING&&(h(n)?n.then(this.h,this.l):(this.o=t,this.v=n,this.p()))}}__init4(){this.p=()=>{if(this.o===Lt.PENDING)return;const t=this.u.slice();this.u=[],t.forEach((t=>{t[0]||(this.o===Lt.RESOLVED&&t[1](this.v),this.o===Lt.REJECTED&&t[2](this.v),t[0]=!0)}))}}}function Ft(t){const n=[];function e(t){return n.splice(n.indexOf(t),1)[0]}return{$:n,add:function(r){if(!(void 0===t||n.lengthe(i))).then(null,(()=>e(i).then(null,(()=>{})))),i},drain:function(t){return new Bt(((e,r)=>{let i=n.length;if(!i)return e(!0);const o=setTimeout((()=>{t&&t>0&&e(!1)}),t);n.forEach((t=>{Pt(t).then((()=>{--i||(clearTimeout(o),e(!0))}),r)}))}))}}}function Ht(t){if(!t)return{};const n=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!n)return{};const e=n[6]||"",r=n[8]||"";return{host:n[4],path:n[5],protocol:n[2],search:e,hash:r,relative:n[5]+e+r}}const qt=["fatal","error","warning","log","info","debug"];function Wt(t){return"warn"===t?"warning":qt.includes(t)?t:"log"}function zt(){return Date.now()/1e3}const Xt=function(){const{performance:t}=$;if(!t||!t.now)return zt;const n=Date.now()-t.now(),e=null==t.timeOrigin?n:t.timeOrigin;return()=>(e+t.now())/1e3}();(()=>{const{performance:t}=$;if(!t||!t.now)return;const n=36e5,e=t.now(),r=Date.now(),i=t.timeOrigin?Math.abs(t.timeOrigin+e-r):n,o=it.split("=").map((t=>decodeURIComponent(t.trim()))))).reduce(((t,[n,e])=>(t[n]=e,t)),{})}const Kt=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function Vt(t,n){const e=function(t){if(!t)return;const n=t.match(Kt);if(!n)return;let e;return"1"===n[3]?e=!0:"0"===n[3]&&(e=!1),{traceId:n[1],parentSampled:e,parentSpanId:n[2]}}(t),r=function(t){if(!s(t)&&!Array.isArray(t))return;let n={};if(Array.isArray(t))n=t.reduce(((t,n)=>{const e=Jt(n);for(const n of Object.keys(e))t[n]=e[n];return t}),{});else{if(!t)return;n=Jt(t)}const e=Object.entries(n).reduce(((t,[n,e])=>(n.match(Gt)&&(t[n.slice("sentry-".length)]=e),t)),{});return Object.keys(e).length>0?e:void 0}(n),{traceId:i,parentSpanId:o,parentSampled:c}=e||{};return e?{traceparentData:e,dynamicSamplingContext:r||{},propagationContext:{traceId:i||it(),parentSpanId:o||it().substring(16),spanId:it().substring(16),sampled:c,dsc:r||{}}}:{traceparentData:e,dynamicSamplingContext:void 0,propagationContext:{traceId:i||it(),spanId:it().substring(16)}}}function Yt(t,n=[]){return[t,n]}function Zt(t,n){const[e,r]=t;return[e,[...r,n]]}function Qt(t,n){const e=t[1];for(const t of e){if(n(t,t[0].type))return!0}return!1}function tn(t,n){return(n||new TextEncoder).encode(t)}function nn(t,n){const[e,r]=t;let i=JSON.stringify(e);function o(t){"string"==typeof i?i="string"==typeof t?i+t:[tn(i,n),t]:i.push("string"==typeof t?tn(t,n):t)}for(const t of r){const[n,e]=t;if(o(`\n${JSON.stringify(n)}\n`),"string"==typeof e||e instanceof Uint8Array)o(e);else{let t;try{t=JSON.stringify(e)}catch(n){t=JSON.stringify(Ct(e))}o(t)}}return"string"==typeof i?i:function(t){const n=t.reduce(((t,n)=>t+n.length),0),e=new Uint8Array(n);let r=0;for(const n of t)e.set(n,r),r+=n.length;return e}(i)}function en(t,n){const e="string"==typeof t.data?tn(t.data,n):t.data;return[z({type:"attachment",length:e.length,filename:t.filename,content_type:t.contentType,attachment_type:t.attachmentType}),e]}const rn={session:"session",sessions:"session",attachment:"attachment",transaction:"transaction",event:"error",client_report:"internal",user_report:"default",profile:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",feedback:"feedback",statsd:"unknown"};function on(t){return rn[t]}function sn(t){if(!t||!t.sdk)return;const{name:n,version:e}=t.sdk;return{name:n,version:e}}function cn(t,{statusCode:n,headers:e},r=Date.now()){const i={...t},o=e&&e["x-sentry-rate-limits"],s=e&&e["retry-after"];if(o)for(const t of o.trim().split(",")){const[n,e]=t.split(":",2),o=parseInt(n,10),s=1e3*(isNaN(o)?60:o);if(e)for(const t of e.split(";"))i[t]=r+s;else i.all=r+s}else s?i.all=r+function(t,n=Date.now()){const e=parseInt(`${t}`,10);if(!isNaN(e))return 1e3*e;const r=Date.parse(`${t}`);return isNaN(r)?6e4:r-n}(s,r):429===n&&(i.all=r+6e4);return i}function un(t,n){const e={type:n.name||n.constructor.name,value:n.message},r=function(t,n){return t(n.stack||"",1)}(t,n);return r.length&&(e.stacktrace={frames:r}),e}class an{static __initStatic(){this.id="Feedback"}constructor(t){this.name=an.id,D((()=>{console.warn("You are using new Feedback() even though this bundle does not include Feedback.")}))}setupOnce(){}openDialog(){}closeDialog(){}attachTo(){}createWidget(){}removeWidget(){}getWidget(){}remove(){}}an.__initStatic();class fn{static __initStatic(){this.id="Replay"}constructor(t){this.name=fn.id,D((()=>{console.warn("You are using new Replay() even though this bundle does not include replay.")}))}setupOnce(){}start(){}stop(){}flush(){}}fn.__initStatic();class hn{static __initStatic(){this.id="BrowserTracing"}constructor(t){this.name=hn.id,D((()=>{console.warn("You are using new BrowserTracing() even though this bundle does not include tracing.")}))}setupOnce(){}}hn.__initStatic();const ln="production";function dn(){return x("globalEventProcessors",(()=>[]))}function pn(t){dn().push(t)}function mn(t,n,e,r=0){return new Bt(((i,o)=>{const s=t[r];if(null===n||"function"!=typeof s)i(n);else{const c=s({...n},e);h(c)?c.then((n=>mn(t,n,e,r+1).then(i))).then(null,o):mn(t,c,e,r+1).then(i).then(null,o)}}))}function yn(t){const n=Xt(),e={sid:it(),init:!0,timestamp:n,started:n,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>function(t){return z({sid:`${t.sid}`,init:t.init,started:new Date(1e3*t.started).toISOString(),timestamp:new Date(1e3*t.timestamp).toISOString(),status:t.status,errors:t.errors,did:"number"==typeof t.did||"string"==typeof t.did?`${t.did}`:void 0,duration:t.duration,abnormal_mechanism:t.abnormal_mechanism,attrs:{release:t.release,environment:t.environment,ip_address:t.ipAddress,user_agent:t.userAgent}})}(e)};return t&&gn(e,t),e}function gn(t,n={}){if(n.user&&(!t.ipAddress&&n.user.ip_address&&(t.ipAddress=n.user.ip_address),t.did||n.did||(t.did=n.user.id||n.user.email||n.user.username)),t.timestamp=n.timestamp||Xt(),n.abnormal_mechanism&&(t.abnormal_mechanism=n.abnormal_mechanism),n.ignoreDuration&&(t.ignoreDuration=n.ignoreDuration),n.sid&&(t.sid=32===n.sid.length?n.sid:it()),void 0!==n.init&&(t.init=n.init),!t.did&&n.did&&(t.did=`${n.did}`),"number"==typeof n.started&&(t.started=n.started),t.ignoreDuration)t.duration=void 0;else if("number"==typeof n.duration)t.duration=n.duration;else{const n=t.timestamp-t.started;t.duration=n>=0?n:0}n.release&&(t.release=n.release),n.environment&&(t.environment=n.environment),!t.ipAddress&&n.ipAddress&&(t.ipAddress=n.ipAddress),!t.userAgent&&n.userAgent&&(t.userAgent=n.userAgent),"number"==typeof n.errors&&(t.errors=n.errors),n.status&&(t.status=n.status)}function vn(t,n){let e={};n?e={status:n}:"ok"===t.status&&(e={status:"exited"}),gn(t,e)}function _n(t){const{spanId:n,traceId:e}=t.spanContext(),{data:r,op:i,parent_span_id:o,status:s,tags:c,origin:u}=En(t);return z({data:r,op:i,parent_span_id:o,span_id:n,status:s,tags:c,trace_id:e,origin:u})}function bn(t){return t>9999999999?t/1e3:t}function En(t){return function(t){return"function"==typeof t.getSpanJSON}(t)?t.getSpanJSON():"function"==typeof t.toJSON?t.toJSON():{}}function wn(t,n,e,r,i,o){const{normalizeDepth:s=3,normalizeMaxBreadth:c=1e3}=t,u={...n,event_id:n.event_id||e.event_id||it(),timestamp:n.timestamp||zt()},a=e.integrations||t.integrations.map((t=>t.name));!function(t,n){const{environment:e,release:r,dist:i,maxValueLength:o=250}=n;"environment"in t||(t.environment="environment"in n?e:ln);void 0===t.release&&void 0!==r&&(t.release=r);void 0===t.dist&&void 0!==i&&(t.dist=i);t.message&&(t.message=p(t.message,o));const s=t.exception&&t.exception.values&&t.exception.values[0];s&&s.value&&(s.value=p(s.value,o));const c=t.request;c&&c.url&&(c.url=p(c.url,o))}(u,t),function(t,n){n.length>0&&(t.sdk=t.sdk||{},t.sdk.integrations=[...t.sdk.integrations||[],...n])}(u,a),void 0===n.type&&function(t,n){const e=$._sentryDebugIds;if(!e)return;let r;const i=$n.get(n);i?r=i:(r=new Map,$n.set(n,r));const o=Object.keys(e).reduce(((t,i)=>{let o;const s=r.get(i);s?o=s:(o=n(i),r.set(i,o));for(let n=o.length-1;n>=0;n--){const r=o[n];if(r.filename){t[r.filename]=e[i];break}}return t}),{});try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.filename&&(t.debug_id=o[t.filename])}))}))}catch(t){}}(u,t.stackParser);const f=function(t,n){if(!n)return t;const e=t?t.clone():new Hn;return e.update(n),e}(r,e.captureContext);e.mechanism&&ut(u,e.mechanism);const h=i&&i.getEventProcessors?i.getEventProcessors():[],l=function(){Fn||(Fn=new Hn);return Fn}().getScopeData();if(o){Un(l,o.getScopeData())}if(f){Un(l,f.getScopeData())}const d=[...e.attachments||[],...l.attachments];d.length&&(e.attachments=d),Pn(u,l);return mn([...h,...dn(),...l.eventProcessors],u,e).then((t=>(t&&function(t){const n={};try{t.exception.values.forEach((t=>{t.stacktrace.frames.forEach((t=>{t.debug_id&&(t.abs_path?n[t.abs_path]=t.debug_id:t.filename&&(n[t.filename]=t.debug_id),delete t.debug_id)}))}))}catch(t){}if(0===Object.keys(n).length)return;t.debug_meta=t.debug_meta||{},t.debug_meta.images=t.debug_meta.images||[];const e=t.debug_meta.images;Object.keys(n).forEach((t=>{e.push({type:"sourcemap",code_file:t,debug_id:n[t]})}))}(t),"number"==typeof s&&s>0?function(t,n,e){if(!t)return null;const r={...t,...t.breadcrumbs&&{breadcrumbs:t.breadcrumbs.map((t=>({...t,...t.data&&{data:Ct(t.data,n,e)}})))},...t.user&&{user:Ct(t.user,n,e)},...t.contexts&&{contexts:Ct(t.contexts,n,e)},...t.extra&&{extra:Ct(t.extra,n,e)}};t.contexts&&t.contexts.trace&&r.contexts&&(r.contexts.trace=t.contexts.trace,t.contexts.trace.data&&(r.contexts.trace.data=Ct(t.contexts.trace.data,n,e)));t.spans&&(r.spans=t.spans.map((t=>{const r=En(t).data;return r&&(t.data=Ct(r,n,e)),t})));return r}(t,s,c):t)))}const $n=new WeakMap;function Sn(t){if(t)return function(t){return t instanceof Hn||"function"==typeof t}(t)||function(t){return Object.keys(t).some((t=>xn.includes(t)))}(t)?{captureContext:t}:t}const xn=["user","level","extra","contexts","tags","fingerprint","requestSession","propagationContext"];function captureException(t,n){return Vn().captureException(t,Sn(n))}function kn(t,n){return Vn().captureEvent(t,n)}function Tn(t,n){Vn().addBreadcrumb(t,n)}function jn(...t){const n=Vn();if(2===t.length){const[e,r]=t;return e?n.withScope((()=>(n.getStackTop().scope=e,r(e)))):n.withScope(r)}return n.withScope(t[0])}function On(){return Vn().getClient()}function In(){return Vn().getScope()}function Dn(t){const n=On(),e=Yn(),r=In(),{release:i,environment:o=ln}=n&&n.getOptions()||{},{userAgent:s}=$.navigator||{},c=yn({release:i,environment:o,user:r.getUser()||e.getUser(),...s&&{userAgent:s},...t}),u=e.getSession();return u&&"ok"===u.status&&gn(u,{status:"exited"}),Mn(),e.setSession(c),r.setSession(c),c}function Mn(){const t=Yn(),n=In(),e=n.getSession()||t.getSession();e&&vn(e),Rn(),t.setSession(),n.setSession()}function Rn(){const t=Yn(),n=In(),e=On(),r=n.getSession()||t.getSession();r&&e&&e.captureSession&&e.captureSession(r)}function Cn(t=!1){t?Mn():Rn()}function An(t){return t.transaction}function Nn(t,n,e){const r=n.getOptions(),{publicKey:i}=n.getDsn()||{},{segment:o}=e&&e.getUser()||{},s=z({environment:r.environment||ln,release:r.release,user_segment:o,public_key:i,trace_id:t});return n.emit&&n.emit("createDsc",s),s}function Ln(t){const n=On();if(!n)return{};const e=Nn(En(t).trace_id||"",n,In()),r=An(t);if(!r)return e;const i=r&&r._frozenDynamicSamplingContext;if(i)return i;const{sampleRate:o,source:s}=r.metadata;null!=o&&(e.sample_rate=`${o}`);const c=En(r);return s&&"url"!==s&&(e.transaction=c.description),e.sampled=String(function(t){const{traceFlags:n}=t.spanContext();return Boolean(1&n)}(r)),n.emit&&n.emit("createDsc",e),e}function Pn(t,n){const{fingerprint:e,span:r,breadcrumbs:i,sdkProcessingMetadata:o}=n;!function(t,n){const{extra:e,tags:r,user:i,contexts:o,level:s,transactionName:c}=n,u=z(e);u&&Object.keys(u).length&&(t.extra={...u,...t.extra});const a=z(r);a&&Object.keys(a).length&&(t.tags={...a,...t.tags});const f=z(i);f&&Object.keys(f).length&&(t.user={...f,...t.user});const h=z(o);h&&Object.keys(h).length&&(t.contexts={...h,...t.contexts});s&&(t.level=s);c&&(t.transaction=c)}(t,n),r&&function(t,n){t.contexts={trace:_n(n),...t.contexts};const e=An(n);if(e){t.sdkProcessingMetadata={dynamicSamplingContext:Ln(n),...t.sdkProcessingMetadata};const r=En(e).description;r&&(t.tags={transaction:r,...t.tags})}}(t,r),function(t,n){t.fingerprint=t.fingerprint?ft(t.fingerprint):[],n&&(t.fingerprint=t.fingerprint.concat(n));t.fingerprint&&!t.fingerprint.length&&delete t.fingerprint}(t,e),function(t,n){const e=[...t.breadcrumbs||[],...n];t.breadcrumbs=e.length?e:void 0}(t,i),function(t,n){t.sdkProcessingMetadata={...t.sdkProcessingMetadata,...n}}(t,o)}function Un(t,n){const{extra:e,tags:r,user:i,contexts:o,level:s,sdkProcessingMetadata:c,breadcrumbs:u,fingerprint:a,eventProcessors:f,attachments:h,propagationContext:l,transactionName:d,span:p}=n;Bn(t,"extra",e),Bn(t,"tags",r),Bn(t,"user",i),Bn(t,"contexts",o),Bn(t,"sdkProcessingMetadata",c),s&&(t.level=s),d&&(t.transactionName=d),p&&(t.span=p),u.length&&(t.breadcrumbs=[...t.breadcrumbs,...u]),a.length&&(t.fingerprint=[...t.fingerprint,...a]),f.length&&(t.eventProcessors=[...t.eventProcessors,...f]),h.length&&(t.attachments=[...t.attachments,...h]),t.propagationContext={...t.propagationContext,...l}}function Bn(t,n,e){if(e&&Object.keys(e).length){t[n]={...t[n]};for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[n][r]=e[r])}}let Fn;class Hn{constructor(){this._=!1,this.S=[],this.k=[],this.T=[],this.j=[],this.O={},this.I={},this.D={},this.M={},this.R={},this.C=qn()}static clone(t){return t?t.clone():new Hn}clone(){const t=new Hn;return t.T=[...this.T],t.I={...this.I},t.D={...this.D},t.M={...this.M},t.O=this.O,t.A=this.A,t.N=this.N,t.L=this.L,t.P=this.P,t.U=this.U,t.k=[...this.k],t.B=this.B,t.j=[...this.j],t.R={...this.R},t.C={...this.C},t.F=this.F,t}setClient(t){this.F=t}getClient(){return this.F}addScopeListener(t){this.S.push(t)}addEventProcessor(t){return this.k.push(t),this}setUser(t){return this.O=t||{email:void 0,id:void 0,ip_address:void 0,segment:void 0,username:void 0},this.L&&gn(this.L,{user:t}),this.H(),this}getUser(){return this.O}getRequestSession(){return this.B}setRequestSession(t){return this.B=t,this}setTags(t){return this.I={...this.I,...t},this.H(),this}setTag(t,n){return this.I={...this.I,[t]:n},this.H(),this}setExtras(t){return this.D={...this.D,...t},this.H(),this}setExtra(t,n){return this.D={...this.D,[t]:n},this.H(),this}setFingerprint(t){return this.U=t,this.H(),this}setLevel(t){return this.A=t,this.H(),this}setTransactionName(t){return this.P=t,this.H(),this}setContext(t,n){return null===n?delete this.M[t]:this.M[t]=n,this.H(),this}setSpan(t){return this.N=t,this.H(),this}getSpan(){return this.N}getTransaction(){const t=this.N;return t&&t.transaction}setSession(t){return t?this.L=t:delete this.L,this.H(),this}getSession(){return this.L}update(t){if(!t)return this;const n="function"==typeof t?t(this):t;if(n instanceof Hn){const t=n.getScopeData();this.I={...this.I,...t.tags},this.D={...this.D,...t.extra},this.M={...this.M,...t.contexts},t.user&&Object.keys(t.user).length&&(this.O=t.user),t.level&&(this.A=t.level),t.fingerprint.length&&(this.U=t.fingerprint),n.getRequestSession()&&(this.B=n.getRequestSession()),t.propagationContext&&(this.C=t.propagationContext)}else if(a(n)){const n=t;this.I={...this.I,...n.tags},this.D={...this.D,...n.extra},this.M={...this.M,...n.contexts},n.user&&(this.O=n.user),n.level&&(this.A=n.level),n.fingerprint&&(this.U=n.fingerprint),n.requestSession&&(this.B=n.requestSession),n.propagationContext&&(this.C=n.propagationContext)}return this}clear(){return this.T=[],this.I={},this.D={},this.O={},this.M={},this.A=void 0,this.P=void 0,this.U=void 0,this.B=void 0,this.N=void 0,this.L=void 0,this.H(),this.j=[],this.C=qn(),this}addBreadcrumb(t,n){const e="number"==typeof n?n:100;if(e<=0)return this;const r={timestamp:zt(),...t},i=this.T;return i.push(r),this.T=i.length>e?i.slice(-e):i,this.H(),this}getLastBreadcrumb(){return this.T[this.T.length-1]}clearBreadcrumbs(){return this.T=[],this.H(),this}addAttachment(t){return this.j.push(t),this}getAttachments(){return this.getScopeData().attachments}clearAttachments(){return this.j=[],this}getScopeData(){const{T:t,j:n,M:e,I:r,D:i,O:o,A:s,U:c,k:u,C:a,R:f,P:h,N:l}=this;return{breadcrumbs:t,attachments:n,contexts:e,tags:r,extra:i,user:o,level:s,fingerprint:c||[],eventProcessors:u,propagationContext:a,sdkProcessingMetadata:f,transactionName:h,span:l}}applyToEvent(t,n={},e=[]){Pn(t,this.getScopeData());return mn([...e,...dn(),...this.k],t,n)}setSDKProcessingMetadata(t){return this.R={...this.R,...t},this}setPropagationContext(t){return this.C=t,this}getPropagationContext(){return this.C}captureException(t,n){const e=n&&n.event_id?n.event_id:it();if(!this.F)return M.warn("No client configured on scope - will not capture exception!"),e;const r=new Error("Sentry syntheticException");return this.F.captureException(t,{originalException:t,syntheticException:r,...n,event_id:e},this),e}captureMessage(t,n,e){const r=e&&e.event_id?e.event_id:it();if(!this.F)return M.warn("No client configured on scope - will not capture message!"),r;const i=new Error(t);return this.F.captureMessage(t,n,{originalException:t,syntheticException:i,...e,event_id:r},this),r}captureEvent(t,n){const e=n&&n.event_id?n.event_id:it();return this.F?(this.F.captureEvent(t,{...n,event_id:e},this),e):(M.warn("No client configured on scope - will not capture event!"),e)}H(){this._||(this._=!0,this.S.forEach((t=>{t(this)})),this._=!1)}}function qn(){return{traceId:it(),spanId:it().substring(16)}}const Wn="7.102.0",zn=parseFloat(Wn),Xn=100;class Gn{constructor(t,n,e,r=zn){let i,o;this.q=r,n?i=n:(i=new Hn,i.setClient(t)),e?o=e:(o=new Hn,o.setClient(t)),this.W=[{scope:i}],t&&this.bindClient(t),this.X=o}isOlderThan(t){return this.q(this.popScope(),t)),(t=>{throw this.popScope(),t})):(this.popScope(),e)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this.X}getStack(){return this.W}getStackTop(){return this.W[this.W.length-1]}captureException(t,n){const e=this.G=n&&n.event_id?n.event_id:it(),r=new Error("Sentry syntheticException");return this.getScope().captureException(t,{originalException:t,syntheticException:r,...n,event_id:e}),e}captureMessage(t,n,e){const r=this.G=e&&e.event_id?e.event_id:it(),i=new Error(t);return this.getScope().captureMessage(t,n,{originalException:t,syntheticException:i,...e,event_id:r}),r}captureEvent(t,n){const e=n&&n.event_id?n.event_id:it();return t.type||(this.G=e),this.getScope().captureEvent(t,{...n,event_id:e}),e}lastEventId(){return this.G}addBreadcrumb(t,n){const{scope:e,client:r}=this.getStackTop();if(!r)return;const{beforeBreadcrumb:i=null,maxBreadcrumbs:o=Xn}=r.getOptions&&r.getOptions()||{};if(o<=0)return;const s={timestamp:zt(),...t},c=i?D((()=>i(s,n))):s;null!==c&&(r.emit&&r.emit("beforeAddBreadcrumb",c,n),e.addBreadcrumb(c,o))}setUser(t){this.getScope().setUser(t),this.getIsolationScope().setUser(t)}setTags(t){this.getScope().setTags(t),this.getIsolationScope().setTags(t)}setExtras(t){this.getScope().setExtras(t),this.getIsolationScope().setExtras(t)}setTag(t,n){this.getScope().setTag(t,n),this.getIsolationScope().setTag(t,n)}setExtra(t,n){this.getScope().setExtra(t,n),this.getIsolationScope().setExtra(t,n)}setContext(t,n){this.getScope().setContext(t,n),this.getIsolationScope().setContext(t,n)}configureScope(t){const{scope:n,client:e}=this.getStackTop();e&&t(n)}run(t){const n=Kn(this);try{t(this)}finally{Kn(n)}}getIntegration(t){const n=this.getClient();if(!n)return null;try{return n.getIntegration(t)}catch(t){return null}}startTransaction(t,n){const e=this.J("startTransaction",t,n);return e}traceHeaders(){return this.J("traceHeaders")}captureSession(t=!1){if(t)return this.endSession();this.K()}endSession(){const t=this.getStackTop().scope,n=t.getSession();n&&vn(n),this.K(),t.setSession()}startSession(t){const{scope:n,client:e}=this.getStackTop(),{release:r,environment:i=ln}=e&&e.getOptions()||{},{userAgent:o}=$.navigator||{},s=yn({release:r,environment:i,user:n.getUser(),...o&&{userAgent:o},...t}),c=n.getSession&&n.getSession();return c&&"ok"===c.status&&gn(c,{status:"exited"}),this.endSession(),n.setSession(s),s}shouldSendDefaultPii(){const t=this.getClient(),n=t&&t.getOptions();return Boolean(n&&n.sendDefaultPii)}K(){const{scope:t,client:n}=this.getStackTop(),e=t.getSession();e&&n&&n.captureSession&&n.captureSession(e)}J(t,...n){const e=Jn().__SENTRY__;if(e&&e.extensions&&"function"==typeof e.extensions[t])return e.extensions[t].apply(this,n)}}function Jn(){return $.__SENTRY__=$.__SENTRY__||{extensions:{},hub:void 0},$}function Kn(t){const n=Jn(),e=Qn(n);return te(n,t),e}function Vn(){const t=Jn();if(t.__SENTRY__&&t.__SENTRY__.acs){const n=t.__SENTRY__.acs.getCurrentHub();if(n)return n}return function(t=Jn()){n=t,n&&n.__SENTRY__&&n.__SENTRY__.hub&&!Qn(t).isOlderThan(zn)||te(t,new Gn);var n;return Qn(t)}(t)}function Yn(){return Vn().getIsolationScope()}function Zn(t,n={}){const e=Jn();return e.__SENTRY__&&e.__SENTRY__.acs?e.__SENTRY__.acs.runWithAsyncContext(t,n):t()}function Qn(t){return x("hub",(()=>new Gn),t)}function te(t,n){if(!t)return!1;return(t.__SENTRY__=t.__SENTRY__||{}).hub=n,!0}function ne(t,n,e=(()=>{})){let r;try{r=t()}catch(t){throw n(t),e(),t}return function(t,n,e){if(h(t))return t.then((t=>(e(),t)),(t=>{throw n(t),e(),t}));return e(),t}(r,n,e)}function ee(t){if("boolean"==typeof __SENTRY_TRACING__&&!__SENTRY_TRACING__)return!1;const n=On(),e=t||n&&n.getOptions();return!!e&&(e.enableTracing||"tracesSampleRate"in e||"tracesSampler"in e)}function re(){return In().getSpan()}function ie(t,n,e){if(!ee())return;const r=Yn(),i=In();let o;if(n)o=n.startChild(e);else{const{traceId:n,dsc:s,parentSpanId:c,sampled:u}={...r.getPropagationContext(),...i.getPropagationContext()};o=t.startTransaction({traceId:n,parentSpanId:c,parentSampled:u,...e,metadata:{dynamicSamplingContext:s,...e.metadata}})}return se(o,i,r),o}function oe(t){if(t.startTime){const e={...t};return e.startTimestamp="number"==typeof(n=t.startTime)?bn(n):Array.isArray(n)?n[0]+n[1]/1e9:n instanceof Date?bn(n.getTime()):Xt(),delete e.startTime,e}var n;return t}function se(t,n,e){t&&(U(t,"_sentryIsolationScope",e),U(t,"_sentryScope",n))}let ce;function ue(t,n,e,r,i,o){const s=re();if(s){const c=function(t){return ce?ce.get(t):void 0}(s)||new Map,u=`${t}:${n}@${r}`,a=c.get(o);if(a){const[,t]=a;c.set(o,[u,{min:Math.min(t.min,e),max:Math.max(t.max,e),count:t.count+=1,sum:t.sum+=e,tags:t.tags}])}else c.set(o,[u,{min:e,max:e,count:1,sum:e,tags:i}]);ce||(ce=new WeakMap),ce.set(s,c)}}function ae(t,n,e,r){const i=sn(e),o=t.type&&"replay_event"!==t.type?t.type:"event";!function(t,n){n&&(t.sdk=t.sdk||{},t.sdk.name=t.sdk.name||n.name,t.sdk.version=t.sdk.version||n.version,t.sdk.integrations=[...t.sdk.integrations||[],...n.integrations||[]],t.sdk.packages=[...t.sdk.packages||[],...n.packages||[]])}(t,e&&e.sdk);const s=function(t,n,e,r){const i=t.sdkProcessingMetadata&&t.sdkProcessingMetadata.dynamicSamplingContext;return{event_id:t.event_id,sent_at:(new Date).toISOString(),...n&&{sdk:n},...!!e&&r&&{dsn:C(r)},...i&&{trace:z({...i})}}}(t,i,r,n);delete t.sdkProcessingMetadata;return Yt(s,[[{type:o},t]])}function fe(t){const n=t.protocol?`${t.protocol}:`:"",e=t.port?`:${t.port}`:"";return`${n}//${t.host}${e}${t.path?`/${t.path}`:""}/api/`}function he(t,n){return e={sentry_key:t.publicKey,sentry_version:"7",...n&&{sentry_client:`${n.name}/${n.version}`}},Object.keys(e).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`)).join("&");var e}function le(t,n={}){const e="string"==typeof n?n:n.tunnel,r="string"!=typeof n&&n.V?n.V.sdk:void 0;return e||`${function(t){return`${fe(t)}${t.projectId}/envelope/`}(t)}?${he(t,r)}`}const de=[];function pe(t){const n=t.defaultIntegrations||[],e=t.integrations;let r;n.forEach((t=>{t.isDefaultInstance=!0})),r=Array.isArray(e)?[...n,...e]:"function"==typeof e?ft(e(n)):n;const i=function(t){const n={};return t.forEach((t=>{const{name:e}=t,r=n[e];r&&!r.isDefaultInstance&&t.isDefaultInstance||(n[e]=t)})),Object.keys(n).map((t=>n[t]))}(r),o=function(t,n){for(let e=0;e"Debug"===t.name));if(-1!==o){const[t]=i.splice(o,1);i.push(t)}return i}function me(t,n){for(const e of n)e&&e.afterAllSetup&&e.afterAllSetup(t)}function ye(t,n,e){if(!e[n.name]){if(e[n.name]=n,-1===de.indexOf(n.name)&&(n.setupOnce(pn,Vn),de.push(n.name)),n.setup&&"function"==typeof n.setup&&n.setup(t),t.on&&"function"==typeof n.preprocessEvent){const e=n.preprocessEvent.bind(n);t.on("preprocessEvent",((n,r)=>e(n,r,t)))}if(t.addEventProcessor&&"function"==typeof n.processEvent){const e=n.processEvent.bind(n),r=Object.assign(((n,r)=>e(n,r,t)),{id:n.name});t.addEventProcessor(r)}}}function ge(t,n){return Object.assign((function(...t){return n(...t)}),{id:t})}const ve=/[^a-zA-Z0-9_/.-]+/g,_e=/[^\w\d\s_:/@.{}[\]$-]+/g;function be(t,n,e,r){const i={sent_at:(new Date).toISOString()};e&&e.sdk&&(i.sdk={name:e.sdk.name,version:e.sdk.version}),r&&n&&(i.dsn=C(n));const o=function(t){const n=function(t){let n="";for(const e of t){const t=Object.entries(e.tags),r=t.length>0?`|#${t.map((([t,n])=>`${t}:${n}`)).join(",")}`:"";n+=`${e.name}@${e.unit}:${e.metric}|${e.metricType}${r}|T${e.timestamp}\n`}return n}(t);return[{type:"statsd",length:n.length},n]}(t);return Yt(i,[o])}function Ee(t){return void 0===t.type}function we(t){return"transaction"===t.type}const $e={c:class{constructor(t){this.v=t}get weight(){return 1}add(t){this.v+=t}toString(){return`${this.v}`}},g:class{constructor(t){this.Y=t,this.Z=t,this.tt=t,this.nt=t,this.et=1}get weight(){return 5}add(t){this.Y=t,tthis.tt&&(this.tt=t),this.nt+=t,this.et++}toString(){return`${this.Y}:${this.Z}:${this.tt}:${this.nt}:${this.et}`}},d:class{constructor(t){this.v=[t]}get weight(){return this.v.length}add(t){this.v.push(t)}toString(){return this.v.join(":")}},s:class{constructor(t){this.first=t,this.v=new Set([t])}get weight(){return this.v.size}add(t){this.v.add(t)}toString(){return Array.from(this.v).map((t=>"string"==typeof t?function(t){let n=0;for(let e=0;e>>0}(t):t)).join(":")}}};function Se(t){const n=Vn().getStackTop();n.client=t,n.scope.setClient(t)}function xe(t,n,e=Ft(t.bufferSize||30)){let r={};function i(i){const o=[];if(Qt(i,((n,e)=>{const i=on(e);if(function(t,n,e=Date.now()){return function(t,n){return t[n]||t.all||0}(t,n)>e}(r,i)){const r=ke(n,e);t.recordDroppedEvent("ratelimit_backoff",i,r)}else o.push(n)})),0===o.length)return Pt();const s=Yt(i[0],o),c=n=>{Qt(s,((e,r)=>{const i=ke(e,r);t.recordDroppedEvent(n,on(r),i)}))};return e.add((()=>n({body:nn(s,t.textEncoder)}).then((t=>(r=cn(r,t),t)),(t=>{throw c("network_error"),t})))).then((t=>t),(t=>{if(t instanceof L)return c("queue_overflow"),Pt();throw t}))}return i.__sentry__baseTransport__=!0,{send:i,flush:t=>e.drain(t)}}function ke(t,n){if("event"===n||"transaction"===n)return Array.isArray(t)?t[1]:void 0}const Te=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/],je=[/^.*\/healthcheck$/,/^.*\/healthy$/,/^.*\/live$/,/^.*\/ready$/,/^.*\/heartbeat$/,/^.*\/health$/,/^.*\/healthz$/],Oe="InboundFilters",Ie=(t={})=>({name:Oe,setupOnce(){},processEvent(n,e,r){const i=r.getOptions(),o=function(t={},n={}){return{allowUrls:[...t.allowUrls||[],...n.allowUrls||[]],denyUrls:[...t.denyUrls||[],...n.denyUrls||[]],ignoreErrors:[...t.ignoreErrors||[],...n.ignoreErrors||[],...t.disableErrorDefaults?[]:Te],ignoreTransactions:[...t.ignoreTransactions||[],...n.ignoreTransactions||[],...t.disableTransactionDefaults?[]:je],ignoreInternal:void 0===t.ignoreInternal||t.ignoreInternal}}(t,i);return function(t,n){if(n.ignoreInternal&&function(t){try{return"SentryError"===t.exception.values[0].type}catch(t){}return!1}(t))return!0;if(function(t,n){if(t.type||!n||!n.length)return!1;return function(t){const n=[];t.message&&n.push(t.message);let e;try{e=t.exception.values[t.exception.values.length-1]}catch(t){}e&&e.value&&(n.push(e.value),e.type&&n.push(`${e.type}: ${e.value}`));return n}(t).some((t=>g(t,n)))}(t,n.ignoreErrors))return!0;if(function(t,n){if("transaction"!==t.type||!n||!n.length)return!1;const e=t.transaction;return!!e&&g(e,n)}(t,n.ignoreTransactions))return!0;if(function(t,n){if(!n||!n.length)return!1;const e=Me(t);return!!e&&g(e,n)}(t,n.denyUrls))return!0;if(!function(t,n){if(!n||!n.length)return!0;const e=Me(t);return!e||g(e,n)}(t,n.allowUrls))return!0;return!1}(n,o)?null:n}}),De=ge(Oe,Ie);function Me(t){try{let n;try{n=t.exception.values[0].stacktrace.frames}catch(t){}return n?function(t=[]){for(let n=t.length-1;n>=0;n--){const e=t[n];if(e&&""!==e.filename&&"[native code]"!==e.filename)return e.filename||null}return null}(n):null}catch(t){return null}}let Re;const Ce="FunctionToString",Ae=new WeakMap,Ne=()=>({name:Ce,setupOnce(){Re=Function.prototype.toString;try{Function.prototype.toString=function(...t){const n=F(this),e=Ae.has(On())&&void 0!==n?n:this;return Re.apply(e,t)}}catch(t){}},setup(t){Ae.set(t,!0)}}),Le=ge(Ce,Ne),Pe="LinkedErrors",Ue=ge(Pe,((t={})=>{const n=t.limit||5,e=t.key||"cause";return{name:Pe,setupOnce(){},preprocessEvent(t,r,i){const o=i.getOptions();v(un,o.stackParser,o.maxValueLength,e,n,t,r)}}}));var Be=Object.freeze({__proto__:null,FunctionToString:Le,InboundFilters:De,LinkedErrors:Ue});class Fe{constructor(t){this.F=t,this.rt=new Map,this.it=setInterval((()=>this.flush()),5e3)}add(t,n,e,r="none",i={},o=Xt()){const s=Math.floor(o),c=n.replace(ve,"_"),u=function(t){const n={};for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e.replace(ve,"_")]=String(t[e]).replace(_e,""));return n}(i),a=function(t,n,e,r){return`${t}${n}${e}${Object.entries(z(r)).sort(((t,n)=>t[0].localeCompare(n[0])))}`}(t,c,r,u);let f=this.rt.get(a);const h=f&&"s"===t?f.metric.weight:0;f?(f.metric.add(e),f.timestampt));this.F.captureAggregateMetrics(t)}this.rt.clear()}}close(){clearInterval(this.it),this.flush()}}const He="MetricsAggregator",qe=()=>({name:He,setupOnce(){},setup(t){t.metricsAggregator=new Fe(t)}});function We(t,n,e,r={}){const i=On(),o=In();if(i){if(!i.metricsAggregator)return;const{unit:s,tags:c,timestamp:u}=r,{release:a,environment:f}=i.getOptions(),h=o.getTransaction(),l={};a&&(l.release=a),f&&(l.environment=f),h&&(l.transaction=En(h).description||""),i.metricsAggregator.add(t,n,e,s,{...l,...c},u)}}const ze={increment:function(t,n=1,e){We("c",t,n,e)},distribution:function(t,n,e){We("d",t,n,e)},set:function(t,n,e){We("s",t,n,e)},gauge:function(t,n,e){We("g",t,n,e)},MetricsAggregator:ge(He,qe),metricsAggregatorIntegration:qe},Xe=Be,Ge=$;let Je=0;function Ke(){return Je>0}function Ve(){Je++,setTimeout((()=>{Je--}))}function Ye(t,n={},e){if("function"!=typeof t)return t;try{const n=t.__sentry_wrapped__;if(n)return n;if(F(t))return t}catch(n){return t}const sentryWrapped=function(){const r=Array.prototype.slice.call(arguments);try{e&&"function"==typeof e&&e.apply(this,arguments);const i=r.map((t=>Ye(t,n)));return t.apply(this,i)}catch(t){throw Ve(),jn((e=>{e.addEventProcessor((t=>(n.mechanism&&(ct(t,void 0,void 0),ut(t,n.mechanism)),t.extra={...t.extra,arguments:r},t))),captureException(t)})),t}};try{for(const n in t)Object.prototype.hasOwnProperty.call(t,n)&&(sentryWrapped[n]=t[n])}catch(t){}B(sentryWrapped,t),U(t,"__sentry_wrapped__",sentryWrapped);try{Object.getOwnPropertyDescriptor(sentryWrapped,"name").configurable&&Object.defineProperty(sentryWrapped,"name",{get:()=>t.name})}catch(t){}return sentryWrapped}function Ze(t,n){const e=tr(t,n),r={type:n&&n.name,value:er(n)};return e.length&&(r.stacktrace={frames:e}),void 0===r.type&&""===r.value&&(r.value="Unrecoverable error caught"),r}function Qe(t,n){return{exception:{values:[Ze(t,n)]}}}function tr(t,n){const e=n.stacktrace||n.stack||"",r=function(t){if(t){if("number"==typeof t.framesToPop)return t.framesToPop;if(nr.test(t.message))return 1}return 0}(n);try{return t(e,r)}catch(t){}return[]}const nr=/Minified React error #\d+;/i;function er(t){const n=t&&t.message;return n?n.error&&"string"==typeof n.error.message?n.error.message:n:"No error message"}function rr(t,n,e,r){const i=or(t,n,e&&e.syntheticException||void 0,r);return ut(i),i.level="error",e&&e.event_id&&(i.event_id=e.event_id),Pt(i)}function ir(t,n,e="info",r,i){const o=sr(t,n,r&&r.syntheticException||void 0,i);return o.level=e,r&&r.event_id&&(o.event_id=r.event_id),Pt(o)}function or(t,n,s,c,u){let h;if(i(n)&&n.error){return Qe(t,n.error)}if(o(n)||r(n,"DOMException")){const e=n;if("stack"in n)h=Qe(t,n);else{const n=e.name||(o(e)?"DOMError":"DOMException"),r=e.message?`${n}: ${e.message}`:n;h=sr(t,r,s,c),ct(h,r)}return"code"in e&&(h.tags={...h.tags,"DOMException.code":`${e.code}`}),h}if(e(n))return Qe(t,n);if(a(n)||f(n)){return h=function(t,n,e,r){const i=On(),o=i&&i.getOptions().normalizeDepth,s={exception:{values:[{type:f(n)?n.constructor.name:r?"UnhandledRejection":"Error",value:cr(n,{isUnhandledRejection:r})}]},extra:{__serialized__:At(n,o)}};if(e){const n=tr(t,e);n.length&&(s.exception.values[0].stacktrace={frames:n})}return s}(t,n,s,u),ut(h,{synthetic:!0}),h}return h=sr(t,n,s,c),ct(h,`${n}`,void 0),ut(h,{synthetic:!0}),h}function sr(t,n,e,r){const i={};if(r&&e){const r=tr(t,e);r.length&&(i.exception={values:[{value:n,stacktrace:{frames:r}}]})}if(c(n)){const{__sentry_template_string__:t,__sentry_template_values__:e}=n;return i.logentry={message:t,params:e},i}return i.message=n,i}function cr(t,{isUnhandledRejection:n}){const e=function(t,n=40){const e=Object.keys(H(t));if(e.sort(),!e.length)return"[object has no keys]";if(e[0].length>=n)return p(e[0],n);for(let t=e.length;t>0;t--){const r=e.slice(0,t).join(", ");if(!(r.length>n))return t===e.length?r:p(r,n)}return""}(t),r=n?"promise rejection":"exception";if(i(t))return`Event \`ErrorEvent\` captured as ${r} with message \`${t.message}\``;if(f(t)){return`Event \`${function(t){try{const n=Object.getPrototypeOf(t);return n?n.constructor.name:void 0}catch(t){}}(t)}\` (type=${t.type}) captured as ${r}`}return`Object captured as ${r} with keys: ${e}`}function ur(t,{metadata:n,tunnel:e,dsn:r}){const i={event_id:t.event_id,sent_at:(new Date).toISOString(),...n&&n.sdk&&{sdk:{name:n.sdk.name,version:n.sdk.version}},...!!e&&!!r&&{dsn:C(r)}},o=function(t){return[{type:"user_report"},t]}(t);return Yt(i,[o])}class ar extends class{constructor(t){if(this.ot=t,this._integrations={},this.st=!1,this.ct=0,this.ut={},this.ft={},this.k=[],t.dsn&&(this.ht=N(t.dsn)),this.ht){const n=le(this.ht,t);this.lt=t.transport({recordDroppedEvent:this.recordDroppedEvent.bind(this),...t.transportOptions,url:n})}}captureException(t,n,e){if(at(t))return;let r=n&&n.event_id;return this.dt(this.eventFromException(t,n).then((t=>this.yt(t,n,e))).then((t=>{r=t}))),r}captureMessage(t,n,e,r){let i=e&&e.event_id;const o=c(t)?t:String(t),s=u(t)?this.eventFromMessage(o,n,e):this.eventFromException(t,e);return this.dt(s.then((t=>this.yt(t,e,r))).then((t=>{i=t}))),i}captureEvent(t,n,e){if(n&&n.originalException&&at(n.originalException))return;let r=n&&n.event_id;const i=(t.sdkProcessingMetadata||{}).capturedSpanScope;return this.dt(this.yt(t,n,i||e).then((t=>{r=t}))),r}captureSession(t){"string"!=typeof t.release||(this.sendSession(t),gn(t,{init:!1}))}getDsn(){return this.ht}getOptions(){return this.ot}getSdkMetadata(){return this.ot.V}getTransport(){return this.lt}flush(t){const n=this.lt;return n?(this.metricsAggregator&&this.metricsAggregator.flush(),this.gt(t).then((e=>n.flush(t).then((t=>e&&t))))):Pt(!0)}close(t){return this.flush(t).then((t=>(this.getOptions().enabled=!1,this.metricsAggregator&&this.metricsAggregator.close(),t)))}getEventProcessors(){return this.k}addEventProcessor(t){this.k.push(t)}setupIntegrations(t){(t&&!this.st||this.vt()&&!this.st)&&this._t()}init(){this.vt()&&this._t()}getIntegrationById(t){return this.getIntegrationByName(t)}getIntegrationByName(t){return this._integrations[t]}getIntegration(t){try{return this._integrations[t.id]||null}catch(t){return null}}addIntegration(t){const n=this._integrations[t.name];ye(this,t,this._integrations),n||me(this,[t])}sendEvent(t,n={}){this.emit("beforeSendEvent",t,n);let e=ae(t,this.ht,this.ot.V,this.ot.tunnel);for(const t of n.attachments||[])e=Zt(e,en(t,this.ot.transportOptions&&this.ot.transportOptions.textEncoder));const r=this.bt(e);r&&r.then((n=>this.emit("afterSendEvent",t,n)),null)}sendSession(t){const n=function(t,n,e,r){const i=sn(e);return Yt({sent_at:(new Date).toISOString(),...i&&{sdk:i},...!!r&&n&&{dsn:C(n)}},["aggregates"in t?[{type:"sessions"},t]:[{type:"session"},t.toJSON()]])}(t,this.ht,this.ot.V,this.ot.tunnel);this.bt(n)}recordDroppedEvent(t,n,e){if(this.ot.sendClientReports){const e=`${t}:${n}`;this.ut[e]=this.ut[e]+1||1}}captureAggregateMetrics(t){const n=be(t,this.ht,this.ot.V,this.ot.tunnel);this.bt(n)}on(t,n){this.ft[t]||(this.ft[t]=[]),this.ft[t].push(n)}emit(t,...n){this.ft[t]&&this.ft[t].forEach((t=>t(...n)))}_t(){const{integrations:t}=this.ot;this._integrations=function(t,n){const e={};return n.forEach((n=>{n&&ye(t,n,e)})),e}(this,t),me(this,t),this.st=!0}Et(t,n){let e=!1,r=!1;const i=n.exception&&n.exception.values;if(i){r=!0;for(const t of i){const n=t.mechanism;if(n&&!1===n.handled){e=!0;break}}}const o="ok"===t.status;(o&&0===t.errors||o&&e)&&(gn(t,{...e&&{status:"crashed"},errors:t.errors||Number(r||e)}),this.captureSession(t))}gt(t){return new Bt((n=>{let e=0;const r=setInterval((()=>{0==this.ct?(clearInterval(r),n(!0)):(e+=1,t&&e>=t&&(clearInterval(r),n(!1)))}),1)}))}vt(){return!1!==this.getOptions().enabled&&void 0!==this.lt}wt(t,n,e,r=Yn()){const i=this.getOptions(),o=Object.keys(this._integrations);return!n.integrations&&o.length>0&&(n.integrations=o),this.emit("preprocessEvent",t,n),wn(i,t,n,e,this,r).then((t=>{if(null===t)return t;const n={...r.getPropagationContext(),...e?e.getPropagationContext():void 0};if(!(t.contexts&&t.contexts.trace)&&n){const{traceId:r,spanId:i,parentSpanId:o,dsc:s}=n;t.contexts={trace:{trace_id:r,span_id:i,parent_span_id:o},...t.contexts};const c=s||Nn(r,this,e);t.sdkProcessingMetadata={dynamicSamplingContext:c,...t.sdkProcessingMetadata}}return t}))}yt(t,n={},e){return this.$t(t,n,e).then((t=>t.event_id),(t=>{}))}$t(t,n,e){const r=this.getOptions(),{sampleRate:i}=r,o=we(t),s=Ee(t),c=t.type||"error",u=`before send for type \`${c}\``;if(s&&"number"==typeof i&&Math.random()>i)return this.recordDroppedEvent("sample_rate","error",t),Ut(new L(`Discarding event because it's not included in the random sample (sampling rate = ${i})`,"log"));const f="replay_event"===c?"replay":c,l=(t.sdkProcessingMetadata||{}).capturedSpanIsolationScope;return this.wt(t,n,e,l).then((e=>{if(null===e)throw this.recordDroppedEvent("event_processor",f,t),new L("An event processor returned `null`, will not send event.","log");if(n.data&&!0===n.data.__sentry__)return e;const i=function(t,n,e){const{beforeSend:r,beforeSendTransaction:i}=t;if(Ee(n)&&r)return r(n,e);if(we(n)&&i)return i(n,e);return n}(r,e,n);return function(t,n){const e=`${n} must return \`null\` or a valid event.`;if(h(t))return t.then((t=>{if(!a(t)&&null!==t)throw new L(e);return t}),(t=>{throw new L(`${n} rejected with ${t}`)}));if(!a(t)&&null!==t)throw new L(e);return t}(i,u)})).then((r=>{if(null===r)throw this.recordDroppedEvent("before_send",f,t),new L(`${u} returned \`null\`, will not send event.`,"log");const i=e&&e.getSession();!o&&i&&this.Et(i,r);const s=r.transaction_info;if(o&&s&&r.transaction!==t.transaction){const t="custom";r.transaction_info={...s,source:t}}return this.sendEvent(r,n),r})).then(null,(t=>{if(t instanceof L)throw t;throw this.captureException(t,{data:{__sentry__:!0},originalException:t}),new L(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: ${t}`)}))}dt(t){this.ct++,t.then((t=>(this.ct--,t)),(t=>(this.ct--,t)))}bt(t){if(this.emit("beforeEnvelope",t),this.vt()&&this.lt)return this.lt.send(t).then(null,(t=>{}))}St(){const t=this.ut;return this.ut={},Object.keys(t).map((n=>{const[e,r]=n.split(":");return{reason:e,category:r,quantity:t[n]}}))}}{constructor(t){!function(t,n,e=[n],r="npm"){const i=t.V||{};i.sdk||(i.sdk={name:`sentry.javascript.${n}`,packages:e.map((t=>({name:`${r}:@sentry/${t}`,version:Wn}))),version:Wn}),t.V=i}(t,"browser",["browser"],Ge.SENTRY_SDK_SOURCE||"npm"),super(t),t.sendClientReports&&Ge.document&&Ge.document.addEventListener("visibilitychange",(()=>{"hidden"===Ge.document.visibilityState&&this.xt()}))}eventFromException(t,n){return rr(this.ot.stackParser,t,n,this.ot.attachStacktrace)}eventFromMessage(t,n="info",e){return ir(this.ot.stackParser,t,n,e,this.ot.attachStacktrace)}captureUserFeedback(t){if(!this.vt())return;const n=ur(t,{metadata:this.getSdkMetadata(),dsn:this.getDsn(),tunnel:this.getOptions().tunnel});this.bt(n)}wt(t,n,e){return t.platform=t.platform||"javascript",super.wt(t,n,e)}xt(){const t=this.St();if(0===t.length)return;if(!this.ht)return;const n=(e=t,Yt((r=this.ot.tunnel&&C(this.ht))?{dsn:r}:{},[[{type:"client_report"},{timestamp:i||zt(),discarded_events:e}]]));var e,r,i;this.bt(n)}}let fr;function hr(t,n=function(){if(fr)return fr;if(_t(Ge.fetch))return fr=Ge.fetch.bind(Ge);const t=Ge.document;let n=Ge.fetch;if(t&&"function"==typeof t.createElement)try{const e=t.createElement("iframe");e.hidden=!0,t.head.appendChild(e);const r=e.contentWindow;r&&r.fetch&&(n=r.fetch),t.head.removeChild(e)}catch(t){}return fr=n.bind(Ge)}()){let e=0,r=0;return xe(t,(function(i){const o=i.body.length;e+=o,r++;const s={body:i.body,method:"POST",referrerPolicy:"origin",headers:t.headers,keepalive:e<=6e4&&r<15,...t.fetchOptions};try{return n(t.url,s).then((t=>(e-=o,r--,{statusCode:t.status,headers:{"x-sentry-rate-limits":t.headers.get("X-Sentry-Rate-Limits"),"retry-after":t.headers.get("Retry-After")}})))}catch(t){return fr=void 0,e-=o,r--,Ut(t)}}))}function lr(t){return xe(t,(function(n){return new Bt(((e,r)=>{const i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=()=>{4===i.readyState&&e({statusCode:i.status,headers:{"x-sentry-rate-limits":i.getResponseHeader("X-Sentry-Rate-Limits"),"retry-after":i.getResponseHeader("Retry-After")}})},i.open("POST",t.url);for(const n in t.headers)Object.prototype.hasOwnProperty.call(t.headers,n)&&i.setRequestHeader(n,t.headers[n]);i.send(n.body)}))}))}const dr="?";function pr(t,n,e,r){const i={filename:t,function:n,in_app:!0};return void 0!==e&&(i.lineno=e),void 0!==r&&(i.colno=r),i}const mr=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,yr=/\((\S*)(?::(\d+))(?::(\d+))\)/,gr=[30,t=>{const n=mr.exec(t);if(n){if(n[2]&&0===n[2].indexOf("eval")){const t=yr.exec(n[2]);t&&(n[2]=t[1],n[3]=t[2],n[4]=t[3])}const[t,e]=Or(n[1]||dr,n[2]);return pr(e,t,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}}],vr=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,_r=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,br=[50,t=>{const n=vr.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){const t=_r.exec(n[3]);t&&(n[1]=n[1]||"eval",n[3]=t[1],n[4]=t[2],n[5]="")}let t=n[3],e=n[1]||dr;return[e,t]=Or(e,t),pr(t,e,n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}}],Er=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,wr=[40,t=>{const n=Er.exec(t);return n?pr(n[2],n[1]||dr,+n[3],n[4]?+n[4]:void 0):void 0}],$r=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Sr=[10,t=>{const n=$r.exec(t);return n?pr(n[2],n[3]||dr,+n[1]):void 0}],xr=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,kr=[20,t=>{const n=xr.exec(t);return n?pr(n[5],n[3]||n[4]||dr,+n[1],+n[2]):void 0}],Tr=[gr,br,wr],jr=K(...Tr),Or=(t,n)=>{const e=-1!==t.indexOf("safari-extension"),r=-1!==t.indexOf("safari-web-extension");return e||r?[-1!==t.indexOf("@")?t.split("@")[0]:dr,e?`safari-extension:${n}`:`safari-web-extension:${n}`]:[t,n]},Ir=1024,Dr="Breadcrumbs",Mr=(t={})=>{const n={console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...t};return{name:Dr,setupOnce(){},setup(t){var e;n.console&&function(t){const n="console";tt(n,t),nt(n,rt)}(function(t){return function(n){if(On()!==t)return;const e={category:"console",data:{arguments:n.args,logger:"console"},level:Wt(n.level),message:m(n.args," ")};if("assert"===n.level){if(!1!==n.args[0])return;e.message=`Assertion failed: ${m(n.args.slice(1)," ")||"console.assert"}`,e.data.arguments=n.args.slice(1)}Tn(e,{input:n.args,level:n.level})}}(t)),n.dom&&(e=function(t,n){return function(e){if(On()!==t)return;let r,i,o="object"==typeof n?n.serializeAttribute:void 0,s="object"==typeof n&&"number"==typeof n.maxStringLength?n.maxStringLength:void 0;s&&s>Ir&&(s=Ir),"string"==typeof o&&(o=[o]);try{const t=e.event,n=function(t){return!!t&&!!t.target}(t)?t.target:t;r=T(n,{keyAttrs:o,maxStringLength:s}),i=function(t){if(!k.HTMLElement)return null;let n=t;for(let t=0;t<5;t++){if(!n)return null;if(n instanceof HTMLElement&&n.dataset.sentryComponent)return n.dataset.sentryComponent;n=n.parentNode}return null}(n)}catch(t){r=""}if(0===r.length)return;const c={category:`ui.${e.name}`,message:r};i&&(c.data={"ui.component_name":i}),Tn(c,{event:e.event,name:e.name,global:e.global})}}(t,n.dom),tt("dom",e),nt("dom",mt)),n.xhr&&function(t){tt("xhr",t),nt("xhr",Rt)}(function(t){return function(n){if(On()!==t)return;const{startTimestamp:e,endTimestamp:r}=n,i=n.xhr.__sentry_xhr_v3__;if(!e||!r||!i)return;const{method:o,url:s,status_code:c,body:u}=i;Tn({category:"xhr",data:{method:o,url:s,status_code:c},type:"http"},{xhr:n.xhr,input:u,startTimestamp:e,endTimestamp:r})}}(t)),n.fetch&&function(t){const n="fetch";tt(n,t),nt(n,bt)}(function(t){return function(n){if(On()!==t)return;const{startTimestamp:e,endTimestamp:r}=n;if(r&&(!n.fetchData.url.match(/sentry_key/)||"POST"!==n.fetchData.method))if(n.error){Tn({category:"fetch",data:n.fetchData,level:"error",type:"http"},{data:n.error,input:n.args,startTimestamp:e,endTimestamp:r})}else{const t=n.response;Tn({category:"fetch",data:{...n.fetchData,status_code:t&&t.status},type:"http"},{input:n.args,response:t,startTimestamp:e,endTimestamp:r})}}}(t)),n.history&&It(function(t){return function(n){if(On()!==t)return;let e=n.from,r=n.to;const i=Ht(Ge.location.href);let o=e?Ht(e):void 0;const s=Ht(r);o&&o.path||(o=i),i.protocol===s.protocol&&i.host===s.host&&(r=s.relative),i.protocol===o.protocol&&i.host===o.host&&(e=o.relative),Tn({category:"navigation",data:{from:e,to:r}})}}(t)),n.sentry&&t.on&&t.on("beforeSendEvent",function(t){return function(n){On()===t&&Tn({category:"sentry."+("transaction"===n.type?"transaction":"event"),event_id:n.event_id,level:n.level,message:st(n)},{event:n})}}(t))}}},Rr=ge(Dr,Mr);const Cr="Dedupe",Ar=()=>{let t;return{name:Cr,setupOnce(){},processEvent(n){if(n.type)return n;try{if(function(t,n){if(!n)return!1;if(function(t,n){const e=t.message,r=n.message;if(!e&&!r)return!1;if(e&&!r||!e&&r)return!1;if(e!==r)return!1;if(!Pr(t,n))return!1;if(!Lr(t,n))return!1;return!0}(t,n))return!0;if(function(t,n){const e=Ur(n),r=Ur(t);if(!e||!r)return!1;if(e.type!==r.type||e.value!==r.value)return!1;if(!Pr(t,n))return!1;if(!Lr(t,n))return!1;return!0}(t,n))return!0;return!1}(n,t))return null}catch(t){}return t=n}}},Nr=ge(Cr,Ar);function Lr(t,n){let e=Br(t),r=Br(n);if(!e&&!r)return!0;if(e&&!r||!e&&r)return!1;if(e=e,r=r,r.length!==e.length)return!1;for(let t=0;t{const n={onerror:!0,onunhandledrejection:!0,...t};return{name:Fr,setupOnce(){Error.stackTraceLimit=50},setup(t){n.onerror&&function(t){!function(t){const n="error";tt(n,t),nt(n,St)}((n=>{const{stackParser:e,attachStacktrace:r}=zr();if(On()!==t||Ke())return;const{msg:o,url:c,line:u,column:a,error:f}=n,h=void 0===f&&s(o)?function(t,n,e,r){const o=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;let s=i(t)?t.message:t,c="Error";const u=s.match(o);u&&(c=u[1],s=u[2]);return Wr({exception:{values:[{type:c,value:s}]}},n,e,r)}(o,c,u,a):Wr(or(e,f||o,void 0,r,!1),c,u,a);h.level="error",kn(h,{originalException:f,mechanism:{handled:!1,type:"onerror"}})}))}(t),n.onunhandledrejection&&function(t){!function(t){const n="unhandledrejection";tt(n,t),nt(n,kt)}((n=>{const{stackParser:e,attachStacktrace:r}=zr();if(On()!==t||Ke())return;const i=function(t){if(u(t))return t;const n=t;try{if("reason"in n)return n.reason;if("detail"in n&&"reason"in n.detail)return n.detail.reason}catch(t){}return t}(n),o=u(i)?{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(i)}`}]}}:or(e,i,void 0,r,!0);o.level="error",kn(o,{originalException:i,mechanism:{handled:!1,type:"onunhandledrejection"}})}))}(t)}}},qr=ge(Fr,Hr);function Wr(t,n,e,r){const i=t.exception=t.exception||{},o=i.values=i.values||[],c=o[0]=o[0]||{},u=c.stacktrace=c.stacktrace||{},a=u.frames=u.frames||[],f=isNaN(parseInt(r,10))?void 0:r,h=isNaN(parseInt(e,10))?void 0:e,l=s(n)&&n.length>0?n:function(){try{return k.document.location.href}catch(t){return""}}();return 0===a.length&&a.push({colno:f,filename:l,function:"?",in_app:!0,lineno:h}),t}function zr(){const t=On();return t&&t.getOptions()||{stackParser:()=>[],attachStacktrace:!1}}const Xr="HttpContext",Gr=()=>({name:Xr,setupOnce(){},preprocessEvent(t){if(!Ge.navigator&&!Ge.location&&!Ge.document)return;const n=t.request&&t.request.url||Ge.location&&Ge.location.href,{referrer:e}=Ge.document||{},{userAgent:r}=Ge.navigator||{},i={...t.request&&t.request.headers,...e&&{Referer:e},...r&&{"User-Agent":r}},o={...t.request,...n&&{url:n},headers:i};t.request=o}}),Jr=ge(Xr,Gr),Kr="LinkedErrors",Vr=(t={})=>{const n=t.limit||5,e=t.key||"cause";return{name:Kr,setupOnce(){},preprocessEvent(t,r,i){const o=i.getOptions();v(Ze,o.stackParser,o.maxValueLength,e,n,t,r)}}},Yr=ge(Kr,Vr),Zr=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","BroadcastChannel","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","SharedWorker","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],Qr="TryCatch",ti=(t={})=>{const n={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,...t};return{name:Qr,setupOnce(){n.setTimeout&&P(Ge,"setTimeout",ei),n.setInterval&&P(Ge,"setInterval",ei),n.requestAnimationFrame&&P(Ge,"requestAnimationFrame",ri),n.XMLHttpRequest&&"XMLHttpRequest"in Ge&&P(XMLHttpRequest.prototype,"send",ii);const t=n.eventTarget;if(t){(Array.isArray(t)?t:Zr).forEach(oi)}}}},ni=ge(Qr,ti);function ei(t){return function(...n){const e=n[0];return n[0]=Ye(e,{mechanism:{data:{function:Y(t)},handled:!1,type:"instrument"}}),t.apply(this,n)}}function ri(t){return function(n){return t.apply(this,[Ye(n,{mechanism:{data:{function:"requestAnimationFrame",handler:Y(t)},handled:!1,type:"instrument"}})])}}function ii(t){return function(...n){const e=this;return["onload","onerror","onprogress","onreadystatechange"].forEach((t=>{t in e&&"function"==typeof e[t]&&P(e,t,(function(n){const e={mechanism:{data:{function:t,handler:Y(n)},handled:!1,type:"instrument"}},r=F(n);return r&&(e.mechanism.data.handler=Y(r)),Ye(n,e)}))})),t.apply(this,n)}}function oi(t){const n=Ge,e=n[t]&&n[t].prototype;e&&e.hasOwnProperty&&e.hasOwnProperty("addEventListener")&&(P(e,"addEventListener",(function(n){return function(e,r,i){try{"function"==typeof r.handleEvent&&(r.handleEvent=Ye(r.handleEvent,{mechanism:{data:{function:"handleEvent",handler:Y(r),target:t},handled:!1,type:"instrument"}}))}catch(t){}return n.apply(this,[e,Ye(r,{mechanism:{data:{function:"addEventListener",handler:Y(r),target:t},handled:!1,type:"instrument"}}),i])}})),P(e,"removeEventListener",(function(t){return function(n,e,r){const i=e;try{const e=i&&i.__sentry_wrapped__;e&&t.call(this,n,e,r)}catch(t){}return t.call(this,n,i,r)}})))}const si=[Ie(),Ne(),ti(),Mr(),Hr(),Vr(),Ar(),Gr()];function ci(t){return[...si]}var ui=Object.freeze({__proto__:null,GlobalHandlers:qr,TryCatch:ni,Breadcrumbs:Rr,LinkedErrors:Yr,HttpContext:Jr,Dedupe:Nr});let ai={};Ge.Sentry&&Ge.Sentry.Integrations&&(ai=Ge.Sentry.Integrations);const fi={...ai,...Xe,...ui};return fi.Replay=fn,fi.BrowserTracing=hn,t.Breadcrumbs=Rr,t.BrowserClient=ar,t.BrowserTracing=hn,t.Dedupe=Nr,t.Feedback=an,t.FunctionToString=Le,t.GlobalHandlers=qr,t.HttpContext=Jr,t.Hub=Gn,t.InboundFilters=De,t.Integrations=fi,t.LinkedErrors=Yr,t.Replay=fn,t.SDK_VERSION=Wn,t.SEMANTIC_ATTRIBUTE_SENTRY_OP="sentry.op",t.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN="sentry.origin",t.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE="sentry.sample_rate",t.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE="sentry.source",t.Scope=Hn,t.TryCatch=ni,t.WINDOW=Ge,t.addBreadcrumb=Tn,t.addEventProcessor=function(t){const n=On();n&&n.addEventProcessor&&n.addEventProcessor(t)},t.addGlobalEventProcessor=pn,t.addIntegration=function(t){const n=On();n&&n.addIntegration&&n.addIntegration(t)},t.addTracingExtensions=function(){},t.breadcrumbsIntegration=Mr,t.browserApiErrorsIntegration=ti,t.browserTracingIntegration=function(t){return new hn({})},t.captureEvent=kn,t.captureException=captureException,t.captureMessage=function(t,n){const e="string"==typeof n?n:void 0,r="string"!=typeof n?{captureContext:n}:void 0;return Vn().captureMessage(t,e,r)},t.captureSession=Cn,t.captureUserFeedback=function(t){const n=On();n&&n.captureUserFeedback(t)},t.chromeStackLineParser=gr,t.close=async function(t){const n=On();return n?n.close(t):Promise.resolve(!1)},t.configureScope=function(t){Vn().configureScope(t)},t.continueTrace=({sentryTrace:t,baggage:n},e)=>{const r=In(),{traceparentData:i,dynamicSamplingContext:o,propagationContext:s}=Vt(t,n);r.setPropagationContext(s);const c={...i,metadata:z({dynamicSamplingContext:o})};return e?Zn((()=>e(c))):c},t.createTransport=xe,t.createUserFeedbackEnvelope=ur,t.dedupeIntegration=Ar,t.defaultIntegrations=si,t.defaultStackLineParsers=Tr,t.defaultStackParser=jr,t.endSession=Mn,t.eventFromException=rr,t.eventFromMessage=ir,t.exceptionFromError=Ze,t.feedbackIntegration=function(t){return new an({})},t.flush=async function(t){const n=On();return n?n.flush(t):Promise.resolve(!1)},t.forceLoad=function(){},t.functionToStringIntegration=Ne,t.geckoStackLineParser=br,t.getActiveSpan=re,t.getClient=On,t.getCurrentHub=Vn,t.getCurrentScope=In,t.getDefaultIntegrations=ci,t.getHubFromCarrier=Qn,t.globalHandlersIntegration=Hr,t.httpContextIntegration=Gr,t.inboundFiltersIntegration=Ie,t.init=function(t={}){void 0===t.defaultIntegrations&&(t.defaultIntegrations=ci()),void 0===t.release&&("string"==typeof __SENTRY_RELEASE__&&(t.release=__SENTRY_RELEASE__),Ge.SENTRY_RELEASE&&Ge.SENTRY_RELEASE.id&&(t.release=Ge.SENTRY_RELEASE.id)),void 0===t.autoSessionTracking&&(t.autoSessionTracking=!0),void 0===t.sendClientReports&&(t.sendClientReports=!0);const n={...t,stackParser:(e=t.stackParser||jr,Array.isArray(e)?K(...e):e),integrations:pe(t),transport:t.transport||(vt()?hr:lr)};var e;!function(t,n){!0===n.debug&&D((()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),In().update(n.initialScope);const e=new t(n);Se(e),function(t){t.init?t.init():t.setupIntegrations&&t.setupIntegrations()}(e)}(ar,n),t.autoSessionTracking&&function(){if(void 0===Ge.document)return;Dn({ignoreDuration:!0}),Cn(),It((({from:t,to:n})=>{void 0!==t&&t!==n&&(Dn({ignoreDuration:!0}),Cn())}))}()},t.isInitialized=function(){return!!On()},t.lastEventId=function(){return Vn().lastEventId()},t.linkedErrorsIntegration=Vr,t.makeFetchTransport=hr,t.makeMain=Kn,t.makeXHRTransport=lr,t.metrics=ze,t.onLoad=function(t){t()},t.opera10StackLineParser=Sr,t.opera11StackLineParser=kr,t.parameterize=function(t,...n){const e=new String(String.raw(t,...n));return e.__sentry_template_string__=t.join("\0").replace(/%/g,"%%").replace(/\0/g,"%s"),e.__sentry_template_values__=n,e},t.replayIntegration=function(t){return new fn({})},t.setContext=function(t,n){Vn().setContext(t,n)},t.setCurrentClient=Se,t.setExtra=function(t,n){Vn().setExtra(t,n)},t.setExtras=function(t){Vn().setExtras(t)},t.setTag=function(t,n){Vn().setTag(t,n)},t.setTags=function(t){Vn().setTags(t)},t.setUser=function(t){Vn().setUser(t)},t.showReportDialog=(t={},n=Vn())=>{if(!Ge.document)return;const{client:e,scope:r}=n.getStackTop(),i=t.dsn||e&&e.getDsn();if(!i)return;r&&(t.user={...r.getUser(),...t.user}),t.eventId||(t.eventId=n.lastEventId());const o=Ge.document.createElement("script");o.async=!0,o.crossOrigin="anonymous",o.src=function(t,n){const e=N(t);if(!e)return"";const r=`${fe(e)}embed/error-page/`;let i=`dsn=${C(e)}`;for(const t in n)if("dsn"!==t&&"onClose"!==t)if("user"===t){const t=n.user;if(!t)continue;t.name&&(i+=`&name=${encodeURIComponent(t.name)}`),t.email&&(i+=`&email=${encodeURIComponent(t.email)}`)}else i+=`&${encodeURIComponent(t)}=${encodeURIComponent(n[t])}`;return`${r}?${i}`}(i,t),t.onLoad&&(o.onload=t.onLoad);const{onClose:s}=t;if(s){const t=n=>{if("__sentry_reportdialog_closed__"===n.data)try{s()}finally{Ge.removeEventListener("message",t)}};Ge.addEventListener("message",t)}const c=Ge.document.head||Ge.document.body;c&&c.appendChild(o)},t.startInactiveSpan=function(t){if(!ee())return;const n=oe(t),e=Vn(),r=t.scope?t.scope.getSpan():re();if(t.onlyIfParent&&!r)return;const i=Yn(),o=In();let s;if(r)s=r.startChild(n);else{const{traceId:t,dsc:r,parentSpanId:c,sampled:u}={...i.getPropagationContext(),...o.getPropagationContext()};s=e.startTransaction({traceId:t,parentSpanId:c,parentSampled:u,...n,metadata:{dynamicSamplingContext:r,...n.metadata}})}return se(s,o,i),s},t.startSession=Dn,t.startSpan=function(t,n){const e=oe(t);return Zn((()=>jn(t.scope,(r=>{const i=Vn(),o=r.getSpan(),s=t.onlyIfParent&&!o?void 0:ie(i,o,e);return r.setSpan(s),ne((()=>n(s)),(()=>{if(s){const{status:t}=En(s);t&&"ok"!==t||s.setStatus("internal_error")}}),(()=>s&&s.end()))}))))},t.startSpanManual=function(t,n){const e=oe(t);return Zn((()=>jn(t.scope,(r=>{const i=Vn(),o=r.getSpan(),s=t.onlyIfParent&&!o?void 0:ie(i,o,e);function c(){s&&s.end()}return r.setSpan(s),ne((()=>n(s,c)),(()=>{if(s&&s.isRecording()){const{status:t}=En(s);t&&"ok"!==t||s.setStatus("internal_error")}}))}))))},t.startTransaction=function(t,n){return Vn().startTransaction({...t},n)},t.winjsStackLineParser=wr,t.withIsolationScope=function(t){return Zn((()=>t(Yn())))},t.withScope=jn,t.wrap=function(t){return Ye(t)()},t}({}); //# sourceMappingURL=bundle.min.js.map From a886f2e93d7225161d9581abfa191da827600cba Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Thu, 22 Feb 2024 12:28:06 +0100 Subject: [PATCH 113/171] chore(linux): Be more explicit what to deploy - Add new `--stable` and `--beta` parameters to be more explicit about what to deploy - Restore current branch at the end - Output PR# if PR already exists --- linux/scripts/upload-to-debian.sh | 105 ++++++++++++++++-------------- 1 file changed, 56 insertions(+), 49 deletions(-) diff --git a/linux/scripts/upload-to-debian.sh b/linux/scripts/upload-to-debian.sh index 3631df93716..0d6d3252b87 100755 --- a/linux/scripts/upload-to-debian.sh +++ b/linux/scripts/upload-to-debian.sh @@ -7,12 +7,14 @@ usage() ${0} -k [-n] [--push] -Create source package for latest stable release and upload to Debian, +Create source package for latest stable or beta release and upload to Debian, and update (and optionally push) changelog file. -k The PGP key used to sign the source package -n Simulate upload --push Push changelog changes to GitHub + --beta Deploy beta release. Default: latest stable release. + --stable Deploy latest stable release. --debian-revision The debian revision to use. Default: 1 --help Display usage help @@ -40,11 +42,13 @@ NOOP= PUSH= DEBKEYID= REVISION=1 +IS_BETA=false +CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) while (( $# )); do case $1 in -k) shift - if [ ! $# -eq 0 ]; then + if [[ ! $# -eq 0 ]]; then DEBKEYID=$1 else builder_die "Error: The -k argument is missing a value. Exiting." @@ -52,9 +56,11 @@ while (( $# )); do -n) NOOP=: ;; --help) usage ; exit 0 ;; --push) PUSH=1 ;; + --beta) IS_BETA=true ;; + --stable) IS_BETA=false ;; --debian-revision) shift - if [ ! $# -eq 0 ]; then + if [[ ! $# -eq 0 ]]; then REVISION=$1 else builder_die "Error: The --debian-revision argument is missing a value. Exiting." @@ -64,7 +70,7 @@ while (( $# )); do shift || builder_die "Error: The last argument is missing a value. Exiting." done -if [ -z "$DEBKEYID" ]; then +if [[ -z ${DEBKEYID} ]]; then usage exit 2 fi @@ -73,74 +79,75 @@ if ! git diff --quiet; then builder_die "You have changed files in your git working directory. Exiting." fi -if [[ "$(cat TIER.md)" == "beta" ]]; then - ISBETA=true -else - ISBETA=false -fi - -builder_heading "Fetching latest changes" -git fetch -p origin -if ${ISBETA}; then - git checkout beta - git pull origin beta -else - stable_branch=$(git branch -r | grep origin/stable- | sort | tail -1) - stable_branch=${stable_branch##* } - # Checkout stable branch so that `scripts/debian.sh` picks up correct version - git checkout "${stable_branch#origin/}" - git pull origin "${stable_branch#origin/}" -fi - -cd "$KEYMAN_ROOT/linux" -builder_heading "Building source package" -DIST=unstable DEBREVISION=$REVISION scripts/debian.sh -cd debianpackage/ -builder_heading "Signing source package" -debsign -k"$DEBKEYID" --re-sign ./*.changes -builder_heading "Uploading packages to mentors.debian.net" -${NOOP} dput mentors ./*.changes -cd .. - -builder_heading "Updating changelog" -if ${ISBETA}; then - CLBRANCH=origin/beta -else - CLBRANCH="${stable_branch}" -fi +function get_latest_stable_branch_name() { + # Get the list of stable branches and take the one with the highest number. + # Extract `origin/stable-16.0` from ` origin/stable-16.0` + local branches stable_branch + branches=$(git branch -r | grep origin/stable-) + stable_branch=$(echo "${branches}" | sort | tail -1) + if [[ -z ${stable_branch} ]]; then + builder_die "Can't find stable-* branch" > /dev/stderr + exit 2 + fi + echo "${stable_branch##* }" +} function push_to_github_and_create_pr() { local BRANCH=$1 local BASE=$2 local COMMIT_MSG=$3 local PR_MSG=$4 + local pr_number if [[ -n "${PUSH}" ]]; then ${NOOP} git push --force-with-lease origin "${BRANCH}" - # shellcheck disable=2312 - if (( $(gh pr list --draft --search "${COMMIT_MSG}" --base "${BASE}" --json title --jq '.[].title' | wc -l) > 0)); then - builder_echo "PR already exists" + pr_number=$(gh pr list --draft --search "${COMMIT_MSG}" --base "${BASE}" --json number --jq '.[].number') + if [[ -n ${pr_number} ]]; then + builder_echo "PR #${pr_number} already exists" else ${NOOP} gh pr create --draft --base "${BASE}" --title "${PR_MSG}" --body "@keymanapp-test-bot skip" fi fi } +builder_heading "Fetching latest changes" +git fetch -p origin + +if ${IS_BETA}; then + DEPLOY_BRANCH=origin/beta +else + # shellcheck disable=2311 + DEPLOY_BRANCH=$(get_latest_stable_branch_name) +fi + +# Checkout stable/beta branch so that `scripts/debian.sh` picks up correct version +git checkout "${DEPLOY_BRANCH#origin/}" +git pull origin "${DEPLOY_BRANCH#origin/}" + +builder_heading "Building source package" +cd "${KEYMAN_ROOT}/linux" +DIST=unstable DEBREVISION=${REVISION} scripts/debian.sh +cd debianpackage/ +builder_heading "Signing source package" +debsign -k"${DEBKEYID}" --re-sign ./*.changes +builder_heading "Uploading packages to mentors.debian.net" +${NOOP} dput mentors ./*.changes +cd .. + +builder_heading "Updating changelog" + # base changelog branch on remote stable/beta branch -git checkout -B chore/linux/changelog "${CLBRANCH}" +git checkout -B chore/linux/changelog "${DEPLOY_BRANCH}" cp debianpackage/keyman-*/debian/changelog debian/ git add debian/changelog COMMIT_MESSAGE="chore(linux): Update debian changelog" git commit -m "${COMMIT_MESSAGE}" -push_to_github_and_create_pr chore/linux/changelog "${CLBRANCH#origin/}" "${COMMIT_MESSAGE}" "${COMMIT_MESSAGE}" +push_to_github_and_create_pr chore/linux/changelog "${DEPLOY_BRANCH#origin/}" "${COMMIT_MESSAGE}" "${COMMIT_MESSAGE}" +# Create cherry-pick on master branch git checkout -B chore/linux/cherry-pick/changelog origin/master git cherry-pick -x chore/linux/changelog push_to_github_and_create_pr chore/linux/cherry-pick/changelog master "${COMMIT_MESSAGE}" "${COMMIT_MESSAGE} 🍒" builder_heading "Finishing" -if ${ISBETA}; then - git checkout beta -else - git checkout master -fi +git checkout "${CURRENT_BRANCH}" From 8177180b48eebd825bc2af71dd620f1d3ba41d1d Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Thu, 22 Feb 2024 17:25:28 +0100 Subject: [PATCH 114/171] chore(linux): Fix API verification after adding SONAME Due to Debian policy the libkeymancore package will now include the SONAME (API version number) in the package name (PR #10800). This change adjusts the API verification checks to be able to cope with the modified .symbols file. --- linux/scripts/deb-packaging.sh | 14 +- linux/scripts/test/deb-packaging.tests.sh | 163 +++++++++++++++------- 2 files changed, 120 insertions(+), 57 deletions(-) diff --git a/linux/scripts/deb-packaging.sh b/linux/scripts/deb-packaging.sh index 2d244f228dc..a68e7531dc0 100755 --- a/linux/scripts/deb-packaging.sh +++ b/linux/scripts/deb-packaging.sh @@ -105,7 +105,7 @@ is_symbols_file_changed() { get_changes() { local WHAT_CHANGED - WHAT_CHANGED=$(git diff -I "^${PKG_NAME}.so" "$1".."$2" -- "debian/${PKG_NAME}.symbols" | diffstat -m -t | tail -n +2) + WHAT_CHANGED=$(git diff -I "^${LIB_NAME}.so" "$1".."$2" | diffstat -m -t | grep "${PKG_NAME}.symbols" ) IFS=',' read -r -a CHANGES <<< "${WHAT_CHANGED:-0,0,0}" } @@ -143,7 +143,7 @@ check_updated_version_number() { get_api_version_in_symbols_file() { # Retrieve symbols file at commit $1 and extract "1" from - # "libkeymancore.so.1 libkeymancore #MINVER#" + # "libkeymancore.so.1 libkeymancore1 #MINVER#" local firstline tmpfile local sha="$1" @@ -155,7 +155,7 @@ get_api_version_in_symbols_file() { fi firstline="$(head -1 "${tmpfile}")" - firstline="${firstline#"${PKG_NAME}".so.}" + firstline="${firstline#"${LIB_NAME}".so.}" firstline="${firstline%% *}" rm "${tmpfile}" @@ -164,7 +164,7 @@ get_api_version_in_symbols_file() { get_api_version_from_core() { # Retrieve CORE_API_VERSION.md from commit $1 and extract major version - # number from "1.0.0" + # number ("1") from "1.0.0" local api_version tmpfile local sha="$1" tmpfile=$(mktemp) @@ -284,10 +284,12 @@ check_for_api_version_consistency() { } verify_action() { - PKG_NAME=libkeymancore + local SONAME + SONAME=$(get_api_version_from_core "HEAD") LIB_NAME=libkeymancore + PKG_NAME="${LIB_NAME}${SONAME}" if [[ ! -f debian/${PKG_NAME}.symbols ]]; then - output_warning "Missing ${PKG_NAME}.symbols file" + output_error "Missing ${PKG_NAME}.symbols file" exit 0 fi diff --git a/linux/scripts/test/deb-packaging.tests.sh b/linux/scripts/test/deb-packaging.tests.sh index 5bc89aa66dd..fedb1e5daf4 100755 --- a/linux/scripts/test/deb-packaging.tests.sh +++ b/linux/scripts/test/deb-packaging.tests.sh @@ -26,7 +26,7 @@ createBase() { git init --initial-branch=master . git remote add origin "${remoteDir}" mkdir -p linux/debian - echo "libkeymancore.so.0 libkeymancore #MINVER# + echo "libkeymancore.so.1 libkeymancore1 #MINVER# * Build-Depends-Package: libkeymancore-dev km_core_actions_dispose@Base 17.0.197 @@ -34,13 +34,11 @@ createBase() { km_core_context_get@Base 17.0.195 km_core_context_item_list_size@Base 17.0.195 km_core_context_items_dispose@Base 17.0.195 -" > linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols +" > linux/debian/libkeymancore1.symbols + git add linux/debian/libkeymancore1.symbols mkdir -p core - # We never had a version 0.0.0 in CORE_API_VERSION.md, but since 0 is - # the default this will work - echo "0.0.0" > core/CORE_API_VERSION.md + echo "1.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md echo "16.0.145" > VERSION.md @@ -76,7 +74,7 @@ createBase() { git checkout -b chore - BINPKG_NAME=${tmpDir}/libkeymancore_17.0.257-1+noble1_amd64.deb + BINPKG_NAME=${tmpDir}/libkeymancore1_17.0.257-1+noble1_amd64.deb touch "${BINPKG_NAME}" } @@ -112,8 +110,8 @@ test_check_updated_version_number__NoChange_OK() { test_check_updated_version_number__LineAdded_OK() { createBase alpha - sed -i 's/ km_core_actions_dispose@Base 17.0.197/ km_core_actions_dispose@Base 17.0.197\n km_core_added@Base 17.0.255/' linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols + sed -i 's/ km_core_actions_dispose@Base 17.0.197/ km_core_actions_dispose@Base 17.0.197\n km_core_added@Base 17.0.255/' linux/debian/libkeymancore1.symbols + git add linux/debian/libkeymancore1.symbols git commit -m "API method added" echo "## Calling API verification" @@ -124,24 +122,26 @@ test_check_updated_version_number__LineAdded_OK() { test_check_updated_version_number__LineAddedWithoutVerUpd_ERROR() { createBase alpha - sed -i 's/ km_core_actions_dispose@Base 17.0.197/ km_core_actions_dispose@Base 17.0.197\n km_core_added@Base 17.0.197/' linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols + sed -i 's/ km_core_actions_dispose@Base 17.0.197/ km_core_actions_dispose@Base 17.0.197\n km_core_added@Base 17.0.197/' linux/debian/libkeymancore1.symbols + git add linux/debian/libkeymancore1.symbols git commit -m "API method added" echo "## Calling API verification" pwd output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify || true) echo "${output[*]}" # for logging - [[ "${output[*]}" == *"ERROR: libkeymancore.symbols file got changed without changing the package version number of the symbol"* ]] + [[ "${output[*]}" == *"ERROR: libkeymancore1.symbols file got changed without changing the package version number of the symbol"* ]] } test_check_updated_version_number__LineRemovedWithAPIUpd_OK() { createBase alpha echo "2.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md - sed -i 's/libkeymancore.so.0/libkeymancore.so.2/' linux/debian/libkeymancore.symbols - sed -i '6d' linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols + git mv linux/debian/libkeymancore{1,2}.symbols + sed -i 's/libkeymancore1/libkeymancore2/' linux/debian/libkeymancore2.symbols + sed -i 's/libkeymancore.so.1/libkeymancore.so.2/' linux/debian/libkeymancore2.symbols + sed -i '6d' linux/debian/libkeymancore2.symbols + git add linux/debian/libkeymancore2.symbols git commit -m "API method removed" echo "## Calling API verification" @@ -149,20 +149,69 @@ test_check_updated_version_number__LineRemovedWithAPIUpd_OK() { linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify } +test_check_updated_version_number__LineRemoved_OnlyCoreApiUpd_ERROR() { + createBase alpha + echo "2.0.0" > core/CORE_API_VERSION.md + git add core/CORE_API_VERSION.md + sed -i '6d' linux/debian/libkeymancore1.symbols + git add linux/debian/libkeymancore1.symbols + git commit -m "API method removed" + + echo "## Calling API verification" + pwd + output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify || true) + echo "${output[*]}" # for logging + [[ "${output[*]}" == *"ERROR: Missing libkeymancore2.symbols file"* ]] +} + +test_check_updated_version_number__LineRemoved_OnlySymbolsFileUpd_ERROR() { + createBase alpha + git mv linux/debian/libkeymancore{1,2}.symbols + sed -i 's/libkeymancore1/libkeymancore2/' linux/debian/libkeymancore2.symbols + sed -i 's/libkeymancore.so.1/libkeymancore.so.2/' linux/debian/libkeymancore2.symbols + sed -i '6d' linux/debian/libkeymancore2.symbols + git add linux/debian/libkeymancore2.symbols + git commit -m "API method removed" + + echo "## Calling API verification" + pwd + output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify || true) + echo "${output[*]}" # for logging + [[ "${output[*]}" == *"ERROR: Missing libkeymancore1.symbols file"* ]] +} + +test_check_updated_version_number__LineRemovedWithAPIUpd_NotMetadataUpd_ERROR() { + createBase alpha + echo "2.0.0" > core/CORE_API_VERSION.md + git add core/CORE_API_VERSION.md + git mv linux/debian/libkeymancore{1,2}.symbols + sed -i '6d' linux/debian/libkeymancore2.symbols + git add linux/debian/libkeymancore2.symbols + git commit -m "API method removed" + + echo "## Calling API verification" + pwd + output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify || true) + echo "${output[*]}" # for logging + [[ "${output[*]}" == *"ERROR: API version in .symbols file and in CORE_API_VERSION.md is different"* ]] +} + test_check_updated_version_number__LineRemoved_InAlpha_ChangedBefore_OK() { createBase alpha git checkout master # simulate a commit that already introduced an API version change echo "2.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md - sed -i 's/libkeymancore.so.0/libkeymancore.so.2/' linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols + git mv linux/debian/libkeymancore{1,2}.symbols + sed -i 's/libkeymancore1/libkeymancore2/' linux/debian/libkeymancore2.symbols + sed -i 's/libkeymancore.so.1/libkeymancore.so.2/' linux/debian/libkeymancore2.symbols + git add linux/debian/libkeymancore2.symbols git commit -m "API version change" git checkout chore git rebase master - sed -i '6d' linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols + sed -i '6d' linux/debian/libkeymancore2.symbols + git add linux/debian/libkeymancore2.symbols git commit -m "API method removed" echo "## Calling API verification" @@ -174,19 +223,22 @@ test_check_updated_version_number__LineRemoved_InAlpha_FileMissingInStable_ApiVe createBase alpha git checkout master # simulate a commit that renamed the .symbols file and updated the API version - git mv linux/debian/libkeymancore.symbols linux/debian/libfoo.symbols + git mv linux/debian/libkeymancore1.symbols linux/debian/libfoo2.symbols sed -i 's/libkeymancore/libfoo/' linux/scripts/deb-packaging.sh + # shellcheck disable=2016 # single quotes are intentional here + sed -i 's/${SONAME}/2/' linux/scripts/deb-packaging.sh git add linux/scripts/deb-packaging.sh - echo "1.0.0" > core/CORE_API_VERSION.md + echo "2.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md - sed -i 's/libkeymancore.so.0/libfoo.so.1/' linux/debian/libfoo.symbols - git add linux/debian/libfoo.symbols + sed -i 's/libkeymancore1/libfoo2/' linux/debian/libfoo2.symbols + sed -i 's/libkeymancore.so.1/libfoo.so.2/' linux/debian/libfoo2.symbols + git add linux/debian/libfoo2.symbols git commit -m "renamed library" git checkout chore git rebase master - sed -i '6d' linux/debian/libfoo.symbols - git add linux/debian/libfoo.symbols + sed -i '6d' linux/debian/libfoo2.symbols + git add linux/debian/libfoo2.symbols git commit -m "API method removed" echo "## Calling API verification" @@ -198,38 +250,38 @@ test_check_updated_version_number__LineRemoved_InAlpha_FileMissingInStable_ApiVe createBase alpha git checkout master # simulate a commit that renamed the .symbols file - git mv linux/debian/libkeymancore.symbols linux/debian/libfoo.symbols + git mv linux/debian/libkeymancore1.symbols linux/debian/libfoo1.symbols sed -i 's/libkeymancore/libfoo/' linux/scripts/deb-packaging.sh git add linux/scripts/deb-packaging.sh - sed -i 's/libkeymancore.so/libfoo.so/' linux/debian/libfoo.symbols - git add linux/debian/libfoo.symbols + sed -i 's/libkeymancore/libfoo/' linux/debian/libfoo1.symbols + git add linux/debian/libfoo1.symbols git commit -m "renamed library" git checkout chore git rebase master - sed -i '6d' linux/debian/libfoo.symbols - git add linux/debian/libfoo.symbols + sed -i '6d' linux/debian/libfoo1.symbols + git add linux/debian/libfoo1.symbols git commit -m "API method removed" echo "## Calling API verification" pwd output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify || true) echo "${output[*]}" # for logging - [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libfoo.symbols file"* ]] + [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libfoo1.symbols file"* ]] } test_check_updated_version_number__LineRemoved_InAlpha_ChangeFromStable_ERROR() { createBase alpha - sed -i '6d' linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols + sed -i '6d' linux/debian/libkeymancore1.symbols + git add linux/debian/libkeymancore1.symbols git commit -m "API method removed" echo "## Calling API verification" pwd output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base master verify || true) echo "${output[*]}" # for logging - [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libkeymancore.symbols file"* ]] + [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libkeymancore1.symbols file"* ]] } test_check_updated_version_number__LineRemoved_InBeta_ApiVerUnchanged_ERROR() { @@ -239,21 +291,23 @@ test_check_updated_version_number__LineRemoved_InBeta_ApiVerUnchanged_ERROR() { git checkout -b beta echo "2.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md - sed -i 's/libkeymancore.so.0/libkeymancore.so.2/' linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols + git mv linux/debian/libkeymancore{1,2}.symbols + sed -i 's/libkeymancore1/libkeymancore2/' linux/debian/libkeymancore2.symbols + sed -i 's/libkeymancore.so.1/libkeymancore.so.2/' linux/debian/libkeymancore2.symbols + git add linux/debian/libkeymancore2.symbols git commit -m "API version change" git checkout chore git rebase beta - sed -i '6d' linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols + sed -i '6d' linux/debian/libkeymancore2.symbols + git add linux/debian/libkeymancore2.symbols git commit -m "API method removed" echo "## Calling API verification" pwd output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base beta verify || true) echo "${output[*]}" # for logging - [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libkeymancore.symbols file"* ]] + [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libkeymancore2.symbols file"* ]] } test_check_updated_version_number__LineRemoved_InBeta_ApiVerChanged_OK() { @@ -263,17 +317,21 @@ test_check_updated_version_number__LineRemoved_InBeta_ApiVerChanged_OK() { git checkout -b beta echo "2.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md - sed -i 's/libkeymancore.so.0/libkeymancore.so.2/' linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols + git mv linux/debian/libkeymancore{1,2}.symbols + sed -i 's/libkeymancore1/libkeymancore2/' linux/debian/libkeymancore2.symbols + sed -i 's/libkeymancore.so.1/libkeymancore.so.2/' linux/debian/libkeymancore2.symbols + git add linux/debian/libkeymancore2.symbols git commit -m "API version change" git checkout chore git rebase beta echo "3.0.0" > core/CORE_API_VERSION.md git add core/CORE_API_VERSION.md - sed -i 's/libkeymancore.so.2/libkeymancore.so.3/' linux/debian/libkeymancore.symbols - sed -i '6d' linux/debian/libkeymancore.symbols - git add linux/debian/libkeymancore.symbols + git mv linux/debian/libkeymancore{2,3}.symbols + sed -i 's/libkeymancore2/libkeymancore3/' linux/debian/libkeymancore3.symbols + sed -i 's/libkeymancore.so.2/libkeymancore.so.3/' linux/debian/libkeymancore3.symbols + sed -i '6d' linux/debian/libkeymancore3.symbols + git add linux/debian/libkeymancore3.symbols git commit -m "API method removed" echo "## Calling API verification" @@ -285,24 +343,24 @@ test_check_updated_version_number__LineRemoved_InBeta_FileMissingInStable_ApiVer createBase alpha git checkout -b beta # simulate a commit that renamed the .symbols file - git mv linux/debian/libkeymancore.symbols linux/debian/libfoo.symbols + git mv linux/debian/libkeymancore1.symbols linux/debian/libfoo1.symbols sed -i 's/libkeymancore/libfoo/' linux/scripts/deb-packaging.sh - git add linux/scripts/deb-packaging.sh - sed -i 's/libkeymancore.so/libfoo.so/' linux/debian/libfoo.symbols - git add linux/debian/libfoo.symbols + git add linux/scripts/deb-packaging.sh + sed -i 's/libkeymancore/libfoo/' linux/debian/libfoo1.symbols + git add linux/debian/libfoo1.symbols git commit -m "renamed library" git checkout chore git rebase beta - sed -i '6d' linux/debian/libfoo.symbols - git add linux/debian/libfoo.symbols + sed -i '6d' linux/debian/libfoo1.symbols + git add linux/debian/libfoo1.symbols git commit -m "API method removed" echo "## Calling API verification" pwd output=$(linux/scripts/deb-packaging.sh --bin-pkg "${BINPKG_NAME}" --git-sha "$(git rev-parse HEAD)" --git-base beta verify || true) echo "${output[*]}" # for logging - [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libfoo.symbols file"* ]] + [[ "${output[*]}" == *" ERROR: Major API change without updating API version number in libfoo1.symbols file"* ]] } echo "(test logs are in /tmp/.log)" @@ -310,6 +368,9 @@ run_test test_check_updated_version_number__NoChange_OK run_test test_check_updated_version_number__LineAdded_OK run_test test_check_updated_version_number__LineAddedWithoutVerUpd_ERROR run_test test_check_updated_version_number__LineRemovedWithAPIUpd_OK +run_test test_check_updated_version_number__LineRemoved_OnlyCoreApiUpd_ERROR +run_test test_check_updated_version_number__LineRemoved_OnlySymbolsFileUpd_ERROR +run_test test_check_updated_version_number__LineRemovedWithAPIUpd_NotMetadataUpd_ERROR run_test test_check_updated_version_number__LineRemoved_InAlpha_ChangedBefore_OK run_test test_check_updated_version_number__LineRemoved_InAlpha_FileMissingInStable_ApiVerChanged_OK run_test test_check_updated_version_number__LineRemoved_InAlpha_FileMissingInStable_ApiVerUnchanged_ERROR From b747a600401f7beaab802cd7927ca89fb6cb2619 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Thu, 22 Feb 2024 17:55:10 +0100 Subject: [PATCH 115/171] chore(linux): Install quilt on GHA runner In order to be able to create the source package we need quilt. However, this is not needed to create the binary package and so it is not considered a build dependency belonging to build-depends. This change installs quilt on the GHA runner before building the source package. --- linux/scripts/deb-packaging.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/linux/scripts/deb-packaging.sh b/linux/scripts/deb-packaging.sh index 2d244f228dc..256b98d8d42 100755 --- a/linux/scripts/deb-packaging.sh +++ b/linux/scripts/deb-packaging.sh @@ -36,6 +36,10 @@ fi dependencies_action() { sudo mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control + # Additionally we need quilt to be able to create the source package. + # Since this is not needed to build the binary package, it is not + # (and should not be) included in `build-depends` in `debian/control`. + sudo DEBIAN_FRONTEND=noninteractive apt-get -q -y install quilt } source_action() { From ac8cd01efd3fe44f245fae15c402e23b3283b5ff Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Thu, 22 Feb 2024 18:20:30 +0100 Subject: [PATCH 116/171] docs(linux): Update how to build binary package with docker The previous command failed if there was more than one *.dsc file. This change now uses the one with the highest version number. --- docs/linux/packaging.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/linux/packaging.md b/docs/linux/packaging.md index c133575d049..bb2763d6861 100644 --- a/docs/linux/packaging.md +++ b/docs/linux/packaging.md @@ -112,8 +112,9 @@ You'll have to create the docker image. cd $KEYMAN_ROOT DIST=jammy docker run -v $(pwd):/source -i -t -w /source --platform=amd64 \ - --env INPUT_DIST=$DIST --env INPUT_SOURCEPACKAGE=$(ls keyman_*.dsc) \ - --env INPUT_SOURCE_DIR=. sillsdev/$DIST + --env INPUT_DIST=$DIST --env INPUT_SOURCE_DIR=. \ + --env INPUT_SOURCEPACKAGE=$(ls keyman_*.dsc | sort | tail -1) \ + sillsdev/$DIST ``` This will create the binary packages in `$KEYMAN_ROOT/artifacts`. From 60d07764f39181eb0d134c380d8c2f57b50360dc Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Thu, 22 Feb 2024 13:03:13 -0500 Subject: [PATCH 117/171] auto: increment beta version to 17.0.275 --- HISTORY.md | 11 +++++++++++ VERSION.md | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 538547da370..41ebe4544c4 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,16 @@ # Keyman Version History +## 17.0.274 beta 2024-02-22 + +* fix(android/engine): Remove logs for uninitialized default keyboard (#10782) +* refactor(android/app): Allow SystemKeyboard to install default keyboard and dictionary (#10794) +* chore(android/app): Remove logging for install referrer details (#10795) +* docs(android/app): Update tablet screenshots (again) (#10796) +* docs(android): Update screenshots for help (#10808) +* chore(web): proper reporting of errors from es5 KMW (#10807) +* fix(android): first keystroke when context is empty (#10809) +* chore(linux): Update Debian `control` file (#10787) + ## 17.0.273 beta 2024-02-21 * fix(developer): match kmc console formatting for messages in IDE (#10775) diff --git a/VERSION.md b/VERSION.md index fceaf9cdb31..22dcf675327 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.274 \ No newline at end of file +17.0.275 \ No newline at end of file From 993f5252e9d9022c36a10ceeeeedaabf8ce3501a Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Thu, 22 Feb 2024 13:15:46 -0600 Subject: [PATCH 118/171] chore(core): describe what is being tested in each stage Fixes: #10505 --- core/tests/unit/ldml/keyboards/ldml_test-test.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/tests/unit/ldml/keyboards/ldml_test-test.xml b/core/tests/unit/ldml/keyboards/ldml_test-test.xml index c9972c79269..f8d0b51a14b 100644 --- a/core/tests/unit/ldml/keyboards/ldml_test-test.xml +++ b/core/tests/unit/ldml/keyboards/ldml_test-test.xml @@ -4,59 +4,72 @@ + + + + + + + + + + + + + From b1d74ce8092bdfd2006101da6137c45a0afe38c0 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Thu, 22 Feb 2024 16:19:21 -0600 Subject: [PATCH 119/171] chore(core): describe what is being tested in each stage Fixes: #10505 --- .../unit/ldml/keyboards/ldml_test-test.xml | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/core/tests/unit/ldml/keyboards/ldml_test-test.xml b/core/tests/unit/ldml/keyboards/ldml_test-test.xml index f8d0b51a14b..a771562bda9 100644 --- a/core/tests/unit/ldml/keyboards/ldml_test-test.xml +++ b/core/tests/unit/ldml/keyboards/ldml_test-test.xml @@ -4,72 +4,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + From 05136e5dea165426275da6f58c70c9ea20ded1f8 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Fri, 23 Feb 2024 09:26:43 +0700 Subject: [PATCH 120/171] fix(developer): make sure scroll bar appears when needed in global welcome Fixes #10817. This fix is a patch rather than a rework to use grid or flex css, which would be better, but should not be done in beta. --- developer/src/tike/xml/project/project.css | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/developer/src/tike/xml/project/project.css b/developer/src/tike/xml/project/project.css index f47cbcf338c..c9486e4ac6e 100644 --- a/developer/src/tike/xml/project/project.css +++ b/developer/src/tike/xml/project/project.css @@ -121,7 +121,16 @@ table.io th { font: bold 8pt "Segoe UI" } -.pages { overflow-y: auto; padding-top: 12px; width: 100%; height: 100% } +.pages { + overflow-y: auto; + padding-top: 12px; + width: 100%; + height: 100%; +} + +#globalwelcome .pages { + max-height: calc(100% - 213px); /* 213px is height of the pageheader 201px + 12px padding-top; TODO: rework as grid */ +} .checkbox { background-image: url("chk_checkbox.gif");} .checked { background-image: url("chk_checked.gif"); } @@ -249,6 +258,7 @@ k\:menuitem.down { background: #6D6C6F; border: none; color: #dadddc; + height: 201px; } #globalwelcome #pageheader a { From 144456821bbf9f98ed70fdab56a8b29a119a4190 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Fri, 23 Feb 2024 10:38:45 +0700 Subject: [PATCH 121/171] chore(common): loosen .keyman-touch-layout schema layer id requirements Fixes #9843. --- common/schemas/keyman-touch-layout/README.md | 17 +++++++++++------ .../keyman-touch-layout.spec.json | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/common/schemas/keyman-touch-layout/README.md b/common/schemas/keyman-touch-layout/README.md index 8e1348f21e0..1276bed54c6 100644 --- a/common/schemas/keyman-touch-layout/README.md +++ b/common/schemas/keyman-touch-layout/README.md @@ -1,11 +1,11 @@ # keyman-touch-layout -Documentation at https://help.keyman.com/developer/...TODO... +Documentation at https://github.com/keymanapp/keyman/tree/master/common/schemas/keyman-touch-layout/README.md * Primary version: * https://github.com/keymanapp/keyman/tree/master/common/schemas/keyman-touch-layout * Deployed to: - * N/A + * https://github.com/keymanapp/api.keyman.com/tree/master/schemas/keyman-touch-layout # .keyman-touch-layout File Format @@ -117,7 +117,8 @@ affect the modifiers in any key events generated by keys on the layer. * `id` -: the string identifier of the layer. Required. There are a number of reserved +: the string identifier of the layer. Required. This should use alphanumeric, + hyphen, and underscore characters only. There are a number of reserved identifiers. The following identifiers are recommended for use: id | Modifier | Notes @@ -405,9 +406,9 @@ and `width`. user longpresses the base key without moving their finger. Only one subkey should be default; if multiple subkeys have the default field set, then behaviour is undefined. Given that cancel is not the preferred default - action for a longpress, the user can cancel the longpress default by - sliding outside the 'acceptance' area -- e.g. south of the key cap, - which would then unhighlight the default and indicate visually that + action for a longpress, the user can cancel the longpress default by + sliding outside the 'acceptance' area -- e.g. south of the key cap, + which would then unhighlight the default and indicate visually that no output would occur when they release their finger. ## `flick` object @@ -456,6 +457,10 @@ string") into the appropriate spec format. # .keyman-touch-layout version history +## 2024-02-23 2.1.1 stable +* Loosen `layer.id` requirements to any non-whitespace characters, recommend + only alphanumeric, -, _. clean spec enforces this recommendation. + ## 2023-08-08 2.1 stable * Add support for default on longpress (sk) keys. Aligns with Keyman 17.0. diff --git a/common/schemas/keyman-touch-layout/keyman-touch-layout.spec.json b/common/schemas/keyman-touch-layout/keyman-touch-layout.spec.json index 72fc16beb41..b1c63442d4f 100644 --- a/common/schemas/keyman-touch-layout/keyman-touch-layout.spec.json +++ b/common/schemas/keyman-touch-layout/keyman-touch-layout.spec.json @@ -44,7 +44,7 @@ "layer-id": { "type": "string", - "pattern": "^[a-zA-Z0-9_-]+$" + "pattern": "^[\\S]+$" }, "rows": { From 7b198eb4a4441becdab1462aa7393fa69d33c9db Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Fri, 23 Feb 2024 13:17:11 +0700 Subject: [PATCH 122/171] fix(developer): repeated options in kmc must now be fully specified Fixes #10396. Instead of `--message 20ae 5006`, which is ambiguous, because 5006 could be a filename, you must now specify the parameter option flag each time: `--message 20ae --message 5006` (or `-m 20ae -m 5006`). --- common/web/types/src/util/compiler-interfaces.ts | 2 +- developer/src/kmc/src/commands/build.ts | 3 ++- developer/src/kmc/src/messages/infrastructureMessages.ts | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/common/web/types/src/util/compiler-interfaces.ts b/common/web/types/src/util/compiler-interfaces.ts index a7e2fba8416..9101cf59653 100644 --- a/common/web/types/src/util/compiler-interfaces.ts +++ b/common/web/types/src/util/compiler-interfaces.ts @@ -89,7 +89,7 @@ export class CompilerError { * ``` */ static formatCode(code: number): string { - return 'KM' + CompilerError.error(code).toString(16).toUpperCase().padStart(5, '0'); + return Number.isInteger(code) ? 'KM' + CompilerError.error(code).toString(16).toUpperCase().padStart(5, '0') : 'KM?????'; } /** diff --git a/developer/src/kmc/src/commands/build.ts b/developer/src/kmc/src/commands/build.ts index 5150e76f339..8548d963173 100644 --- a/developer/src/kmc/src/commands/build.ts +++ b/developer/src/kmc/src/commands/build.ts @@ -26,7 +26,8 @@ export function declareBuild(program: Command) { .option('-d, --debug', 'Include debug information in output') .option('-w, --compiler-warnings-as-errors', 'Causes warnings to fail the build; overrides project-level warnings-as-errors option') .option('-W, --no-compiler-warnings-as-errors', 'Warnings do not fail the build; overrides project-level warnings-as-errors option') - .option('-m, --message ', 'Adjust severity of info, hint or warning message to Disable (default), Info, Hint, Warn or Error') + .option('-m, --message ', 'Adjust severity of info, hint or warning message to Disable (default), Info, Hint, Warn or Error (option can be repeated)', + (value, previous) => previous.concat([value]), []) .option('--no-compiler-version', 'Exclude compiler version metadata from output') .option('--no-warn-deprecated-code', 'Turn off warnings for deprecated code styles'); diff --git a/developer/src/kmc/src/messages/infrastructureMessages.ts b/developer/src/kmc/src/messages/infrastructureMessages.ts index 1288698e00a..5816dc815b6 100644 --- a/developer/src/kmc/src/messages/infrastructureMessages.ts +++ b/developer/src/kmc/src/messages/infrastructureMessages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m } from "@keymanapp/common-types"; +import { CompilerError, CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.Infrastructure; const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -101,15 +101,15 @@ export class InfrastructureMessages { static ERROR_InvalidMessageFormat = SevError | 0x0016; static Error_MessageNamespaceNotFound = (o:{code: number}) => m(this.ERROR_MessageNamespaceNotFound, - `Invalid parameter: --message KM${o.code?.toString(16)} does not have a recognized namespace`); + `Invalid parameter: --message ${CompilerError.formatCode(o.code)} does not have a recognized namespace`); static ERROR_MessageNamespaceNotFound = SevError | 0x0017; static Error_MessageCodeNotFound = (o:{code: number}) => m(this.ERROR_MessageCodeNotFound, - `Invalid parameter: --message KM${o.code?.toString(16)} is not a recognized code`); + `Invalid parameter: --message ${CompilerError.formatCode(o.code)} is not a recognized code`); static ERROR_MessageCodeNotFound = SevError | 0x0018; static Error_MessageCannotBeCoerced = (o:{code: number}) => m(this.ERROR_MessageCannotBeCoerced, - `Invalid parameter: --message KM${o.code?.toString(16)} is not a info, hint or warn message type and cannot be coerced`); + `Invalid parameter: --message ${CompilerError.formatCode(o.code)} is not of type 'info', 'hint' or 'warn', and cannot be coerced`); static ERROR_MessageCannotBeCoerced = SevError | 0x0019; } From b60fa299640e20440f6e549198244e038b3b2326 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Fri, 23 Feb 2024 12:11:06 +0000 Subject: [PATCH 123/171] chore(developer): remove duplicate ERROR_InvalidProjectFolder (invalid source folder) test --- developer/src/kmc/test/test-infrastructureMessages.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 6d8da21b315..b13782d2e20 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -79,16 +79,6 @@ describe('InfrastructureMessages', function () { 'ERROR_InvalidProjectFile not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); - // ERROR_InvalidProjectFolder (invalid source folder) - - it('should generate ERROR_InvalidProjectFolder if there are no valid file types in the source folder when generating a default project file', async function() { - const projectPath = makePathToFixture('invalid-source-folder', 'error_invalid_project_folder.kpj') - const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - loadProject(projectPath, ncb); - assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFolder), - `ERROR_FileTypeNotFound not generated, instead got: `+JSON.stringify(ncb.messages,null,2)); - }); - // ERROR_NotAProjectFile it('should generate ERROR_NotAProjectFile if a project file is not the correct type', async function() { From 9e9c6031dbf29e4f680a1509b1cc655b5eafe6a6 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Fri, 23 Feb 2024 16:04:56 +0000 Subject: [PATCH 124/171] chore(developer): add HINT_ProjectIsVersion10 unit test --- developer/src/kmc/test/fixtures/.gitignore | 2 + .../kpj-1.0/hint_project_is_version_10.kmn | 11 +++++ .../kpj-1.0/hint_project_is_version_10.kpj | 34 +++++++++++++++ .../kpj-1.0/hint_project_is_version_10.kps | 42 +++++++++++++++++++ .../kmc/test/test-infrastructureMessages.ts | 18 ++++++++ 5 files changed, 107 insertions(+) create mode 100644 developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kmn create mode 100644 developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kpj create mode 100644 developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kps diff --git a/developer/src/kmc/test/fixtures/.gitignore b/developer/src/kmc/test/fixtures/.gitignore index 7fd50f43862..26eb01112fa 100644 --- a/developer/src/kmc/test/fixtures/.gitignore +++ b/developer/src/kmc/test/fixtures/.gitignore @@ -2,3 +2,5 @@ relative_paths/*.kmp relative_paths/*.kmx compiler-warnings-as-errors/*.kmx +kpj-1.0/*.kmp +kpj-1.0/*.kmx diff --git a/developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kmn b/developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kmn new file mode 100644 index 00000000000..b1304c20c8c --- /dev/null +++ b/developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kmn @@ -0,0 +1,11 @@ +store(&NAME) '000 - null keyboard' +c Description: Tests null keyboard +c keys: [K_A][RALT K_B][SHIFT K_C] +c expected: aC +c context: + +store(&version) '6.0' + +begin Unicode > use(Main) + +group(Main) using keys diff --git a/developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kpj b/developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kpj new file mode 100644 index 00000000000..62e89243972 --- /dev/null +++ b/developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kpj @@ -0,0 +1,34 @@ + + + + $PROJECTPATH + False + False + False + keyboard + + + + hint_project_is_version_10_1 + hint_project_is_version_10.kmn + hint_project_is_version_10.kmn + 1.0 + .kmn +

+ hint_project_is_version_10 + Copyright (C) Keyman Team +
+ + + hint_project_is_version_10_2 + hint_project_is_version_10.kps + hint_project_is_version_10.kps + + .kps +
+ hint_project_is_version_10 + Copyright (C) Keyman Team +
+
+ + diff --git a/developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kps b/developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kps new file mode 100644 index 00000000000..f4162f9fb5e --- /dev/null +++ b/developer/src/kmc/test/fixtures/kpj-1.0/hint_project_is_version_10.kps @@ -0,0 +1,42 @@ + + + + 15.0 + 7.0 + + + + + + + + + + + + + hint_project_is_version_10 + Copyright (C) Keyman Team + Keyman Team + 0.0 + + + + hint_project_is_version_10.kmx + + 0 + .kmx + + + + + hint_project_is_version_10 + hint_project_is_version_10 + 1.0 + + English + + + + + diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index b13782d2e20..cef991cc72e 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -205,6 +205,24 @@ describe('InfrastructureMessages', function () { await unitTestEndpoints.build(filename, null, ncb, {compilerWarningsAsErrors: true}); assertMessagesEqual(ncb.messages, expectedMessages); }); + + // HINT_ProjectIsVersion10 + + it('should generate HINT_ProjectIsVersion10 if a project file is not version 2.0', async function() { + const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); + const filename = makePathToFixture('kpj-1.0', 'hint_project_is_version_10.kpj'); + const expectedMessages = [ + InfrastructureMessages.INFO_BuildingFile, + InfrastructureMessages.HINT_ProjectIsVersion10, + InfrastructureMessages.INFO_BuildingFile, //kmn + InfrastructureMessages.INFO_FileBuiltSuccessfully, + InfrastructureMessages.INFO_BuildingFile, //kps + InfrastructureMessages.INFO_FileBuiltSuccessfully, + InfrastructureMessages.INFO_ProjectBuiltSuccessfully + ]; + await unitTestEndpoints.build(filename, null, ncb, {}); + assertMessagesEqual(ncb.messages, expectedMessages); + }); }); function assertMessagesEqual(actualMessages: CompilerEvent[], expectedMessages: number[]) { From e473b489cd9e94d1ad0a36c42f231cd839e7ad03 Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Fri, 23 Feb 2024 13:03:36 -0500 Subject: [PATCH 125/171] auto: increment beta version to 17.0.276 --- HISTORY.md | 12 ++++++++++++ VERSION.md | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 41ebe4544c4..1e52dbd8269 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,17 @@ # Keyman Version History +## 17.0.275 beta 2024-02-23 + +* (#10791) +* fix(developer): publish keymancore-1.dll symbols (#10797) +* fix(developer): improve uploading of sourcemaps to sentry (#10798) +* fix(android/engine): Fix how keyboard picker menu exits (#10806) +* chore(linux): Fix `upload-to-debian.sh` script for beta releases (#10784) +* chore(linux): Fix API verification after adding SONAME (#10813) +* chore(linux): Address comments from Debian mailing list (#10800) +* docs(linux): Update how to build binary package with docker (#10814) +* chore(linux): Update debian changelog (#10785) + ## 17.0.274 beta 2024-02-22 * fix(android/engine): Remove logs for uninitialized default keyboard (#10782) diff --git a/VERSION.md b/VERSION.md index 22dcf675327..b750f8a6894 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.275 \ No newline at end of file +17.0.276 \ No newline at end of file From 661069c0c39f147d36b2454dd0658652b3d487a2 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 26 Feb 2024 11:37:32 +0700 Subject: [PATCH 126/171] feat(developer): add api-extractor and api-documenter and config Relates to #10207. Adds @microsoft/api-extractor and @microsoft/api-documenter NPM packages for validating and generating API documentation from Typescript modules. Adds basic configuration for each module that we will be publishing at this time. api-extractor's output will be emitted to /developer/docs/api/etc/, for future release comparisons. A baseline output will be committed separately. The build outputs will be in /developer/build/docs and the intermediate files will be in /developer/build/api. Note that at this time, we will not enable the checks and validations. That is a task for alpha rather than beta. The primary intent at this time is to select a solid, well-supported toolchain for generating the API documentation for kmc. --- developer/config/api-extractor.base.json | 427 ++++++++++++++++++ .../src/kmc-analyze/config/api-extractor.json | 12 + .../config/api-extractor.json | 12 + .../src/kmc-kmn/config/api-extractor.json | 12 + .../src/kmc-ldml/config/api-extractor.json | 12 + .../kmc-model-info/config/api-extractor.json | 12 + .../src/kmc-model/config/api-extractor.json | 12 + .../src/kmc-package/config/api-extractor.json | 12 + package-lock.json | 341 +++++++++++++- package.json | 2 + 10 files changed, 851 insertions(+), 3 deletions(-) create mode 100644 developer/config/api-extractor.base.json create mode 100644 developer/src/kmc-analyze/config/api-extractor.json create mode 100644 developer/src/kmc-keyboard-info/config/api-extractor.json create mode 100644 developer/src/kmc-kmn/config/api-extractor.json create mode 100644 developer/src/kmc-ldml/config/api-extractor.json create mode 100644 developer/src/kmc-model-info/config/api-extractor.json create mode 100644 developer/src/kmc-model/config/api-extractor.json create mode 100644 developer/src/kmc-package/config/api-extractor.json diff --git a/developer/config/api-extractor.base.json b/developer/config/api-extractor.base.json new file mode 100644 index 00000000000..2c11f6402db --- /dev/null +++ b/developer/config/api-extractor.base.json @@ -0,0 +1,427 @@ +/** + * Config file for API Extractor. For more info, please visit: https://api-extractor.com + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + + /** + * Optionally specifies another JSON config file that this file extends from. This provides a way for + * standard settings to be shared across multiple projects. + * + * If the path starts with "./" or "../", the path is resolved relative to the folder of the file that contains + * the "extends" field. Otherwise, the first path segment is interpreted as an NPM package name, and will be + * resolved using NodeJS require(). + * + * SUPPORTED TOKENS: none + * DEFAULT VALUE: "" + */ + // "extends": "./shared/api-extractor-base.json" + // "extends": "my-package/include/api-extractor-base.json" + + /** + * Determines the "" token that can be used with other config file settings. The project folder + * typically contains the tsconfig.json and package.json config files, but the path is user-defined. + * + * The path is resolved relative to the folder of the config file that contains the setting. + * + * The default value for "projectFolder" is the token "", which means the folder is determined by traversing + * parent folders, starting from the folder containing api-extractor.json, and stopping at the first folder + * that contains a tsconfig.json file. If a tsconfig.json file cannot be found in this way, then an error + * will be reported. + * + * SUPPORTED TOKENS: + * DEFAULT VALUE: "" + */ + // "projectFolder": "..", + + /** + * (REQUIRED) Specifies the .d.ts file to be used as the starting point for analysis. API Extractor + * analyzes the symbols exported by this module. + * + * The file extension must be ".d.ts" and not ".ts". + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + */ + // "mainEntryPointFilePath": "/build/src/index.d.ts", + + /** + * A list of NPM package names whose exports should be treated as part of this package. + * + * For example, suppose that Webpack is used to generate a distributed bundle for the project "library1", + * and another NPM package "library2" is embedded in this bundle. Some types from library2 may become part + * of the exported API for library1, but by default API Extractor would generate a .d.ts rollup that explicitly + * imports library2. To avoid this, we can specify: + * + * "bundledPackages": [ "library2" ], + * + * This would direct API Extractor to embed those types directly in the .d.ts rollup, as if they had been + * local files for library1. + */ + "bundledPackages": [], + + /** + * Specifies what type of newlines API Extractor should use when writing output files. By default, the output files + * will be written with Windows-style newlines. To use POSIX-style newlines, specify "lf" instead. + * To use the OS's default newline kind, specify "os". + * + * DEFAULT VALUE: "crlf" + */ + // "newlineKind": "crlf", + + /** + * Set to true when invoking API Extractor's test harness. When `testMode` is true, the `toolVersion` field in the + * .api.json file is assigned an empty string to prevent spurious diffs in output files tracked for tests. + * + * DEFAULT VALUE: "false" + */ + // "testMode": false, + + /** + * Specifies how API Extractor sorts members of an enum when generating the .api.json file. By default, the output + * files will be sorted alphabetically, which is "by-name". To keep the ordering in the source code, specify + * "preserve". + * + * DEFAULT VALUE: "by-name" + */ + // "enumMemberOrder": "by-name", + + /** + * Determines how the TypeScript compiler engine will be invoked by API Extractor. + */ + "compiler": { + /** + * Specifies the path to the tsconfig.json file to be used by API Extractor when analyzing the project. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * Note: This setting will be ignored if "overrideTsconfig" is used. + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "/tsconfig.json" + */ + // "tsconfigFilePath": "/tsconfig.json", + /** + * Provides a compiler configuration that will be used instead of reading the tsconfig.json file from disk. + * The object must conform to the TypeScript tsconfig schema: + * + * http://json.schemastore.org/tsconfig + * + * If omitted, then the tsconfig.json file will be read from the "projectFolder". + * + * DEFAULT VALUE: no overrideTsconfig section + */ + // "overrideTsconfig": { + // . . . + // } + /** + * This option causes the compiler to be invoked with the --skipLibCheck option. This option is not recommended + * and may cause API Extractor to produce incomplete or incorrect declarations, but it may be required when + * dependencies contain declarations that are incompatible with the TypeScript engine that API Extractor uses + * for its analysis. Where possible, the underlying issue should be fixed rather than relying on skipLibCheck. + * + * DEFAULT VALUE: false + */ + // "skipLibCheck": true, + }, + + /** + * Configures how the API report file (*.api.md) will be generated. + */ + "apiReport": { + /** + * (REQUIRED) Whether to generate an API report. + */ + "enabled": true, + + /** + * The filename for the API report files. It will be combined with "reportFolder" or "reportTempFolder" to produce + * a full file path. + * + * The file extension should be ".api.md", and the string should not contain a path separator such as "\" or "/". + * + * SUPPORTED TOKENS: , + * DEFAULT VALUE: ".api.md" + */ + // "reportFileName": ".api.md", + + /** + * Specifies the folder where the API report file is written. The file name portion is determined by + * the "reportFileName" setting. + * + * The API report file is normally tracked by Git. Changes to it can be used to trigger a branch policy, + * e.g. for an API review. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "/etc/" + */ + "reportFolder": "../docs/api/etc/", + + /** + * Specifies the folder where the temporary report file is written. The file name portion is determined by + * the "reportFileName" setting. + * + * After the temporary file is written to disk, it is compared with the file in the "reportFolder". + * If they are different, a production build will fail. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "/temp/" + */ + "reportTempFolder": "../build/api/", + + /** + * Whether "forgotten exports" should be included in the API report file. Forgotten exports are declarations + * flagged with `ae-forgotten-export` warnings. See https://api-extractor.com/pages/messages/ae-forgotten-export/ to + * learn more. + * + * DEFAULT VALUE: "false" + */ + // "includeForgottenExports": false + }, + + /** + * Configures how the doc model file (*.api.json) will be generated. + */ + "docModel": { + /** + * (REQUIRED) Whether to generate a doc model file. + */ + "enabled": true, + + /** + * The output path for the doc model file. The file extension should be ".api.json". + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "/build/temp/.api.json" + */ + "apiJsonFilePath": "../build/api/.api.json", + + /** + * Whether "forgotten exports" should be included in the doc model file. Forgotten exports are declarations + * flagged with `ae-forgotten-export` warnings. See https://api-extractor.com/pages/messages/ae-forgotten-export/ to + * learn more. + * + * DEFAULT VALUE: "false" + */ + // "includeForgottenExports": false, + + /** + * The base URL where the project's source code can be viewed on a website such as GitHub or + * Azure DevOps. This URL path corresponds to the `` path on disk. + * + * This URL is concatenated with the file paths serialized to the doc model to produce URL file paths to individual API items. + * For example, if the `projectFolderUrl` is "https://github.com/microsoft/rushstack/tree/main/apps/api-extractor" and an API + * item's file path is "api/ExtractorConfig.ts", the full URL file path would be + * "https://github.com/microsoft/rushstack/tree/main/apps/api-extractor/api/ExtractorConfig.js". + * + * Can be omitted if you don't need source code links in your API documentation reference. + * + * SUPPORTED TOKENS: none + * DEFAULT VALUE: "" + */ + // "projectFolderUrl": "http://github.com/keymanapp/keyman/tree/master/developer/src/kmc-analyze" + }, + + /** + * Configures how the .d.ts rollup file will be generated. + */ + "dtsRollup": { + /** + * (REQUIRED) Whether to generate the .d.ts rollup file. + */ + "enabled": false /* true <-- TODO enable this in v18 */ + + /** + * Specifies the output path for a .d.ts rollup file to be generated without any trimming. + * This file will include all declarations that are exported by the main entry point. + * + * If the path is an empty string, then this file will not be written. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "/dist/.d.ts" + */ + // "untrimmedFilePath": "/dist/.d.ts", + + /** + * Specifies the output path for a .d.ts rollup file to be generated with trimming for an "alpha" release. + * This file will include only declarations that are marked as "@public", "@beta", or "@alpha". + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "" + */ + // "alphaTrimmedFilePath": "/dist/-alpha.d.ts", + + /** + * Specifies the output path for a .d.ts rollup file to be generated with trimming for a "beta" release. + * This file will include only declarations that are marked as "@public" or "@beta". + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "" + */ + // "betaTrimmedFilePath": "/dist/-beta.d.ts", + + /** + * Specifies the output path for a .d.ts rollup file to be generated with trimming for a "public" release. + * This file will include only declarations that are marked as "@public". + * + * If the path is an empty string, then this file will not be written. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "" + */ + // "publicTrimmedFilePath": "/dist/-public.d.ts", + + /** + * When a declaration is trimmed, by default it will be replaced by a code comment such as + * "Excluded from this release type: exampleMember". Set "omitTrimmingComments" to true to remove the + * declaration completely. + * + * DEFAULT VALUE: false + */ + // "omitTrimmingComments": true + }, + + /** + * Configures how the tsdoc-metadata.json file will be generated. + */ + "tsdocMetadata": { + /** + * Whether to generate the tsdoc-metadata.json file. + * + * DEFAULT VALUE: true + */ + "enabled": false + /** + * Specifies where the TSDoc metadata file should be written. + * + * The path is resolved relative to the folder of the config file that contains the setting; to change this, + * prepend a folder token such as "". + * + * The default value is "", which causes the path to be automatically inferred from the "tsdocMetadata", + * "typings" or "main" fields of the project's package.json. If none of these fields are set, the lookup + * falls back to "tsdoc-metadata.json" in the package folder. + * + * SUPPORTED TOKENS: , , + * DEFAULT VALUE: "" + */ + // "tsdocMetadataFilePath": "/dist/tsdoc-metadata.json" + }, + + /** + * Configures how API Extractor reports error and warning messages produced during analysis. + * + * There are three sources of messages: compiler messages, API Extractor messages, and TSDoc messages. + */ + "messages": { + /** + * Configures handling of diagnostic messages reported by the TypeScript compiler engine while analyzing + * the input .d.ts files. + * + * TypeScript message identifiers start with "TS" followed by an integer. For example: "TS2551" + * + * DEFAULT VALUE: A single "default" entry with logLevel=warning. + */ + "compilerMessageReporting": { + /** + * Configures the default routing for messages that don't match an explicit rule in this table. + */ + "default": { + /** + * Specifies whether the message should be written to the the tool's output log. Note that + * the "addToApiReportFile" property may supersede this option. + * + * Possible values: "error", "warning", "none" + * + * Errors cause the build to fail and return a nonzero exit code. Warnings cause a production build fail + * and return a nonzero exit code. For a non-production build (e.g. when "api-extractor run" includes + * the "--local" option), the warning is displayed but the build will not fail. + * + * DEFAULT VALUE: "warning" + */ + "logLevel": "warning" + + /** + * When addToApiReportFile is true: If API Extractor is configured to write an API report file (.api.md), + * then the message will be written inside that file; otherwise, the message is instead logged according to + * the "logLevel" option. + * + * DEFAULT VALUE: false + */ + // "addToApiReportFile": false + } + + // "TS2551": { + // "logLevel": "warning", + // "addToApiReportFile": true + // }, + // + // . . . + }, + + /** + * Configures handling of messages reported by API Extractor during its analysis. + * + * API Extractor message identifiers start with "ae-". For example: "ae-extra-release-tag" + * + * DEFAULT VALUE: See api-extractor-defaults.json for the complete table of extractorMessageReporting mappings + */ + "extractorMessageReporting": { + "default": { + "logLevel": "warning" + // "addToApiReportFile": false + } + + // "ae-extra-release-tag": { + // "logLevel": "warning", + // "addToApiReportFile": true + // }, + // + // . . . + }, + + /** + * Configures handling of messages reported by the TSDoc parser when analyzing code comments. + * + * TSDoc message identifiers start with "tsdoc-". For example: "tsdoc-link-tag-unescaped-text" + * + * DEFAULT VALUE: A single "default" entry with logLevel=warning. + */ + "tsdocMessageReporting": { + "default": { + "logLevel": "warning" + // "addToApiReportFile": false + } + + // "tsdoc-link-tag-unescaped-text": { + // "logLevel": "warning", + // "addToApiReportFile": true + // }, + // + // . . . + } + } +} diff --git a/developer/src/kmc-analyze/config/api-extractor.json b/developer/src/kmc-analyze/config/api-extractor.json new file mode 100644 index 00000000000..855dc1f4471 --- /dev/null +++ b/developer/src/kmc-analyze/config/api-extractor.json @@ -0,0 +1,12 @@ +/** + * Config file for API Extractor. For more info, please visit: https://api-extractor.com + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "extends": "../../../config/api-extractor.base.json", + "mainEntryPointFilePath": "/build/src/index.d.ts", + "docModel": { + "enabled": true, + "projectFolderUrl": "http://github.com/keymanapp/keyman/tree/master/developer/src/kmc-analyze" + } +} diff --git a/developer/src/kmc-keyboard-info/config/api-extractor.json b/developer/src/kmc-keyboard-info/config/api-extractor.json new file mode 100644 index 00000000000..b98feb9963c --- /dev/null +++ b/developer/src/kmc-keyboard-info/config/api-extractor.json @@ -0,0 +1,12 @@ +/** + * Config file for API Extractor. For more info, please visit: https://api-extractor.com + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "extends": "../../../config/api-extractor.base.json", + "mainEntryPointFilePath": "/build/src/index.d.ts", + "docModel": { + "enabled": true, + "projectFolderUrl": "http://github.com/keymanapp/keyman/tree/master/developer/src/kmc-keyboard-info" + } +} diff --git a/developer/src/kmc-kmn/config/api-extractor.json b/developer/src/kmc-kmn/config/api-extractor.json new file mode 100644 index 00000000000..5df197da3e9 --- /dev/null +++ b/developer/src/kmc-kmn/config/api-extractor.json @@ -0,0 +1,12 @@ +/** + * Config file for API Extractor. For more info, please visit: https://api-extractor.com + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "extends": "../../../config/api-extractor.base.json", + "mainEntryPointFilePath": "/build/src/main.d.ts", + "docModel": { + "enabled": true, + "projectFolderUrl": "http://github.com/keymanapp/keyman/tree/master/developer/src/kmc-kmn" + } +} diff --git a/developer/src/kmc-ldml/config/api-extractor.json b/developer/src/kmc-ldml/config/api-extractor.json new file mode 100644 index 00000000000..9022460bf8a --- /dev/null +++ b/developer/src/kmc-ldml/config/api-extractor.json @@ -0,0 +1,12 @@ +/** + * Config file for API Extractor. For more info, please visit: https://api-extractor.com + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "extends": "../../../config/api-extractor.base.json", + "mainEntryPointFilePath": "/build/src/main.d.ts", + "docModel": { + "enabled": true, + "projectFolderUrl": "http://github.com/keymanapp/keyman/tree/master/developer/src/kmc-ldml" + } +} diff --git a/developer/src/kmc-model-info/config/api-extractor.json b/developer/src/kmc-model-info/config/api-extractor.json new file mode 100644 index 00000000000..73bd2798926 --- /dev/null +++ b/developer/src/kmc-model-info/config/api-extractor.json @@ -0,0 +1,12 @@ +/** + * Config file for API Extractor. For more info, please visit: https://api-extractor.com + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "extends": "../../../config/api-extractor.base.json", + "mainEntryPointFilePath": "/build/src/index.d.ts", + "docModel": { + "enabled": true, + "projectFolderUrl": "http://github.com/keymanapp/keyman/tree/master/developer/src/kmc-model-info" + } +} diff --git a/developer/src/kmc-model/config/api-extractor.json b/developer/src/kmc-model/config/api-extractor.json new file mode 100644 index 00000000000..de898e137df --- /dev/null +++ b/developer/src/kmc-model/config/api-extractor.json @@ -0,0 +1,12 @@ +/** + * Config file for API Extractor. For more info, please visit: https://api-extractor.com + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "extends": "../../../config/api-extractor.base.json", + "mainEntryPointFilePath": "/build/src/main.d.ts", + "docModel": { + "enabled": true, + "projectFolderUrl": "http://github.com/keymanapp/keyman/tree/master/developer/src/kmc-model" + } +} diff --git a/developer/src/kmc-package/config/api-extractor.json b/developer/src/kmc-package/config/api-extractor.json new file mode 100644 index 00000000000..6ba3ee01fd1 --- /dev/null +++ b/developer/src/kmc-package/config/api-extractor.json @@ -0,0 +1,12 @@ +/** + * Config file for API Extractor. For more info, please visit: https://api-extractor.com + */ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "extends": "../../../config/api-extractor.base.json", + "mainEntryPointFilePath": "/build/src/main.d.ts", + "docModel": { + "enabled": true, + "projectFolderUrl": "http://github.com/keymanapp/keyman/tree/master/developer/src/kmc-package" + } +} diff --git a/package-lock.json b/package-lock.json index f6a9e8a6928..3d0c7516807 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,6 +37,8 @@ "@keymanapp/ldml-keyboard-constants": "file:core/include/ldml" }, "devDependencies": { + "@microsoft/api-documenter": "^7.23.31", + "@microsoft/api-extractor": "^7.41.0", "@types/chai": "^4.3.5", "@typescript-eslint/eslint-plugin": "^5.59.1", "ajv": "^8.12.0", @@ -3282,6 +3284,146 @@ "resolved": "common/web/utils", "link": true }, + "node_modules/@microsoft/api-documenter": { + "version": "7.23.31", + "resolved": "https://registry.npmjs.org/@microsoft/api-documenter/-/api-documenter-7.23.31.tgz", + "integrity": "sha512-dHCoUN98ihW5+iro0q31tIOt6t5jwk4DKLq+GGDKlGvepwzP3X2XUkcq3zlh9OtxqLt320+9BvKMiJknZo4SXw==", + "dev": true, + "dependencies": { + "@microsoft/api-extractor-model": "7.28.13", + "@microsoft/tsdoc": "0.14.2", + "@rushstack/node-core-library": "4.0.2", + "@rushstack/terminal": "0.10.0", + "@rushstack/ts-command-line": "4.17.4", + "js-yaml": "~3.13.1", + "resolve": "~1.22.1" + }, + "bin": { + "api-documenter": "bin/api-documenter" + } + }, + "node_modules/@microsoft/api-documenter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@microsoft/api-documenter/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@microsoft/api-extractor": { + "version": "7.41.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.41.0.tgz", + "integrity": "sha512-Wk4fcSqO1i32FspStEm4ak+cfdo2xGsWk/K9uZoYIRQxjQH/roLU78waP+g+GhoAg5OxH63BfY37h6ISkNfQEQ==", + "dev": true, + "dependencies": { + "@microsoft/api-extractor-model": "7.28.13", + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "4.0.2", + "@rushstack/rig-package": "0.5.2", + "@rushstack/terminal": "0.10.0", + "@rushstack/ts-command-line": "4.17.4", + "lodash": "~4.17.15", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "source-map": "~0.6.1", + "typescript": "5.3.3" + }, + "bin": { + "api-extractor": "bin/api-extractor" + } + }, + "node_modules/@microsoft/api-extractor-model": { + "version": "7.28.13", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.13.tgz", + "integrity": "sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "4.0.2" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", + "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", + "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3508,6 +3650,133 @@ "@octokit/openapi-types": "^11.2.0" } }, + "node_modules/@rushstack/node-core-library": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.0.2.tgz", + "integrity": "sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==", + "dev": true, + "dependencies": { + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@rushstack/rig-package": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.2.tgz", + "integrity": "sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==", + "dev": true, + "dependencies": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/@rushstack/terminal": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.0.tgz", + "integrity": "sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==", + "dev": true, + "dependencies": { + "@rushstack/node-core-library": "4.0.2", + "supports-color": "~8.1.1" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/terminal/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@rushstack/ts-command-line": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.17.4.tgz", + "integrity": "sha512-XPQQDaxgFqRHFRgt7jjCKnr0vrC75s/+ISU6kGhWpDlGzWl4vig6ZfZTs3HgM6Kh1Bb3wUKSyKQOV+G36cyZfg==", + "dev": true, + "dependencies": { + "@rushstack/terminal": "0.10.0", + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "string-argv": "~0.3.1" + } + }, + "node_modules/@rushstack/ts-command-line/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@rushstack/ts-command-line/node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/@sentry-internal/tracing": { "version": "7.57.0", "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.57.0.tgz", @@ -3876,6 +4145,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true + }, "node_modules/@types/body-parser": { "version": "1.19.2", "dev": true, @@ -7975,6 +8250,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -8437,6 +8721,12 @@ "node": ">=8" } }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true + }, "node_modules/js-sdsl": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", @@ -8989,6 +9279,12 @@ "version": "4.4.2", "license": "MIT" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, "node_modules/lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", @@ -10840,9 +11136,9 @@ } }, "node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -11909,6 +12205,15 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "license": "MIT", @@ -12343,6 +12648,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } + }, + "node_modules/z-schema/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "resources/build/version": { "name": "@keymanapp/auto-history-action", "license": "MIT", diff --git a/package.json b/package.json index d7490161434..aab36c3bc10 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,8 @@ "name": "root", "private": true, "devDependencies": { + "@microsoft/api-documenter": "^7.23.31", + "@microsoft/api-extractor": "^7.41.0", "@types/chai": "^4.3.5", "@typescript-eslint/eslint-plugin": "^5.59.1", "ajv": "^8.12.0", From a8d0d8454ca7828926b9f063b5f7cb820f44ac25 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 26 Feb 2024 11:45:36 +0700 Subject: [PATCH 127/171] feat(developer): add api documentation to build Relates to #10207. Adds the `api` action to build.sh for each affected module. The `api` action for each module will generate the api metadata files, and then the markdown files are generated by /developer/build.sh api. Note that developer-utils, kmc, and kmcmplib have no api documentation at this time (and kmcmplib is not Typescript so would need separate tooling anyway). --- developer/build.sh | 10 +++++++++- developer/src/Makefile | 6 +++++- developer/src/common/web/utils/build.sh | 1 + developer/src/kmc-analyze/build.sh | 6 ++++-- developer/src/kmc-keyboard-info/build.sh | 5 ++++- developer/src/kmc-kmn/build.sh | 6 +++++- developer/src/kmc-ldml/build.sh | 6 +++++- developer/src/kmc-model-info/build.sh | 6 +++++- developer/src/kmc-model/build.sh | 5 ++++- developer/src/kmc-package/build.sh | 7 ++++++- developer/src/kmc/build.sh | 1 + developer/src/kmcmplib/build.sh | 1 + 12 files changed, 50 insertions(+), 10 deletions(-) diff --git a/developer/build.sh b/developer/build.sh index f0b1373dff6..72ea220d2d6 100755 --- a/developer/build.sh +++ b/developer/build.sh @@ -26,6 +26,7 @@ builder_describe \ clean \ configure \ build \ + "api analyze API and prepare API documentation" \ test \ ":utils=src/common/web/utils Developer utils" \ ":kmcmplib=src/kmcmplib Compiler - .kmn compiler" \ @@ -45,4 +46,11 @@ builder_describe_outputs \ builder_run_action configure cp "$KEYMAN_ROOT/common/resources/fonts/keymanweb-osk.ttf" "$KEYMAN_ROOT/developer/src/tike/xml/layoutbuilder/" -builder_run_child_actions clean configure build test +builder_run_child_actions clean configure build test api + +function build_docs() { + api-documenter markdown -i ./build/api -o ./build/docs + # TODO: Copy to help.keyman.com and open PR +} + +builder_run_action api build_docs diff --git a/developer/src/Makefile b/developer/src/Makefile index c62127437e3..9fbecbf0b4e 100644 --- a/developer/src/Makefile +++ b/developer/src/Makefile @@ -9,7 +9,7 @@ DELPHI_TARGETS= DELPHI_TARGETS=kmconvert tike setup inst !endif -TARGETS=build-tools kmcmplib kmanalyze $(DELPHI_TARGETS) kmdecomp samples server kmc +TARGETS=build-tools kmcmplib kmanalyze $(DELPHI_TARGETS) kmdecomp samples server kmc api EXCLUDEPATHDEFINES=1 MANIFESTS=tike setup @@ -96,6 +96,10 @@ kmc-package: .virtual cd $(DEVELOPER_ROOT)\src\kmc-package $(MAKE) $(TARGET) +api: .virtual + cd $(DEVELOPER_ROOT) + $(GIT_BASH_FOR_KEYMAN) build.sh api --no-deps + # ---------------------------------------------------------------------- ext: .virtual diff --git a/developer/src/common/web/utils/build.sh b/developer/src/common/web/utils/build.sh index 408e1b03ebf..d268e78ff18 100755 --- a/developer/src/common/web/utils/build.sh +++ b/developer/src/common/web/utils/build.sh @@ -15,6 +15,7 @@ builder_describe "Build Keyman Developer web utility module" \ "clean" \ "configure" \ "build" \ + "api analyze API and prepare API documentation (no-op for now)" \ "test" \ publish \ pack \ diff --git a/developer/src/kmc-analyze/build.sh b/developer/src/kmc-analyze/build.sh index 4d48b304313..40e6a1edc85 100755 --- a/developer/src/kmc-analyze/build.sh +++ b/developer/src/kmc-analyze/build.sh @@ -13,12 +13,13 @@ cd "$THIS_SCRIPT_PATH" builder_describe "Build Keyman Developer Compiler Analysis Tools" \ "@/common/web/types" \ "@/developer/src/kmc-kmn" \ - clean configure build test publish pack \ + clean configure build api test publish pack \ "--dry-run,-n don't actually publish, just dry run" builder_describe_outputs \ configure /node_modules \ - build /developer/src/kmc-analyze/build/src/index.js + build /developer/src/kmc-analyze/build/src/index.js \ + api /developer/build/api/kmc-analyze.api.json builder_parse "$@" @@ -35,6 +36,7 @@ function do_test() { builder_run_action clean rm -rf ./build/ builder_run_action configure verify_npm_setup builder_run_action build tsc --build +builder_run_action api api-extractor run --local --verbose builder_run_action test do_test builder_run_action publish builder_publish_to_npm builder_run_action pack builder_publish_to_pack diff --git a/developer/src/kmc-keyboard-info/build.sh b/developer/src/kmc-keyboard-info/build.sh index fb35c450197..223a3fb9b58 100755 --- a/developer/src/kmc-keyboard-info/build.sh +++ b/developer/src/kmc-keyboard-info/build.sh @@ -15,6 +15,7 @@ builder_describe "Build Keyman kmc keyboard-info Compiler module" \ "clean" \ "configure" \ "build" \ + "api analyze API and prepare API documentation" \ "test" \ "pack build a local .tgz pack for testing" \ "publish publish to npm" \ @@ -22,7 +23,8 @@ builder_describe "Build Keyman kmc keyboard-info Compiler module" \ builder_describe_outputs \ configure /developer/src/kmc-keyboard-info/src/imports/langtags.js \ - build /developer/src/kmc-keyboard-info/build/src/index.js + build /developer/src/kmc-keyboard-info/build/src/index.js \ + api /developer/build/api/kmc-keyboard-info.api.json builder_parse "$@" @@ -38,6 +40,7 @@ function do_configure() { builder_run_action clean rm -rf ./build/ ./tsconfig.tsbuildinfo builder_run_action configure do_configure builder_run_action build tsc --build +builder_run_action api api-extractor run --local --verbose #------------------------------------------------------------------------------------------------------------------- diff --git a/developer/src/kmc-kmn/build.sh b/developer/src/kmc-kmn/build.sh index b4ca1dd43bd..b58b84121a0 100755 --- a/developer/src/kmc-kmn/build.sh +++ b/developer/src/kmc-kmn/build.sh @@ -24,6 +24,7 @@ builder_describe "Build Keyman Developer Compiler Module for .kmn to .kmx" \ "configure" \ "build" \ "clean" \ + "api analyze API and prepare API documentation" \ "test" \ "pack build a local .tgz pack for testing" \ "publish publish to npm" \ @@ -31,7 +32,8 @@ builder_describe "Build Keyman Developer Compiler Module for .kmn to .kmx" \ builder_describe_outputs \ configure /node_modules \ - build /developer/src/kmc-kmn/build/src/main.js + build /developer/src/kmc-kmn/build/src/main.js \ + api /developer/build/api/kmc-kmn.api.json builder_parse "$@" @@ -64,6 +66,8 @@ if builder_start_action build; then builder_finish_action success build fi +builder_run_action api api-extractor run --local --verbose + #------------------------------------------------------------------------------------------------------------------- if builder_start_action test; then diff --git a/developer/src/kmc-ldml/build.sh b/developer/src/kmc-ldml/build.sh index 92116d8d6ac..f9ccca3909f 100755 --- a/developer/src/kmc-ldml/build.sh +++ b/developer/src/kmc-ldml/build.sh @@ -23,6 +23,7 @@ builder_describe "Build Keyman kmc Keyboard Compiler module" \ "@/developer/src/common/web/test-helpers" \ "configure" \ "build" \ + "api analyze API and prepare API documentation" \ "clean" \ "test" \ "build-fixtures builds test fixtures for manual examination" \ @@ -31,7 +32,8 @@ builder_describe "Build Keyman kmc Keyboard Compiler module" \ "--dry-run,-n don't actually publish, just dry run" builder_describe_outputs \ configure /node_modules \ - build /developer/src/kmc-ldml/build/src/main.js + build /developer/src/kmc-ldml/build/src/main.js \ + api /developer/build/api/kmc-ldml.api.json builder_parse "$@" @@ -71,6 +73,8 @@ if builder_start_action build-fixtures; then builder_finish_action success build-fixtures fi +builder_run_action api api-extractor run --local --verbose + #------------------------------------------------------------------------------------------------------------------- if builder_start_action test; then diff --git a/developer/src/kmc-model-info/build.sh b/developer/src/kmc-model-info/build.sh index 68dfc78fc29..772909c709b 100755 --- a/developer/src/kmc-model-info/build.sh +++ b/developer/src/kmc-model-info/build.sh @@ -15,6 +15,7 @@ builder_describe "Build Keyman kmc Lexical Model model-info Compiler module" \ "clean" \ "configure" \ "build" \ + "api analyze API and prepare API documentation" \ "test" \ "pack build a local .tgz pack for testing" \ "publish publish to npm" \ @@ -22,7 +23,8 @@ builder_describe "Build Keyman kmc Lexical Model model-info Compiler module" \ builder_describe_outputs \ configure /node_modules \ - build /developer/src/kmc-model-info/build/src/model-info-compiler.js + build /developer/src/kmc-model-info/build/src/model-info-compiler.js \ + api /developer/build/api/kmc-model-info.api.json builder_parse "$@" @@ -47,6 +49,8 @@ if builder_start_action build; then builder_finish_action success build fi +builder_run_action api api-extractor run --local --verbose + #------------------------------------------------------------------------------------------------------------------- if builder_start_action test; then diff --git a/developer/src/kmc-model/build.sh b/developer/src/kmc-model/build.sh index 2e73366b6b3..a4700d362ef 100755 --- a/developer/src/kmc-model/build.sh +++ b/developer/src/kmc-model/build.sh @@ -18,6 +18,7 @@ builder_describe "Build Keyman kmc Lexical Model Compiler module" \ "clean" \ "configure" \ "build" \ + "api analyze API and prepare API documentation" \ "test" \ "pack build a local .tgz pack for testing" \ "publish publish to npm" \ @@ -25,7 +26,8 @@ builder_describe "Build Keyman kmc Lexical Model Compiler module" \ builder_describe_outputs \ configure /node_modules \ - build /developer/src/kmc-model/build/src/main.js + build /developer/src/kmc-model/build/src/main.js \ + api /developer/build/api/kmc-model.api.json builder_parse "$@" @@ -38,6 +40,7 @@ function do_build() { builder_run_action clean rm -rf ./build/ ./tsconfig.tsbuildinfo builder_run_action configure verify_npm_setup builder_run_action build do_build +builder_run_action api api-extractor run --local --verbose builder_run_action test npm test builder_run_action publish builder_publish_to_npm builder_run_action pack builder_publish_to_pack diff --git a/developer/src/kmc-package/build.sh b/developer/src/kmc-package/build.sh index 3206f60fda3..ece6cfe779c 100755 --- a/developer/src/kmc-package/build.sh +++ b/developer/src/kmc-package/build.sh @@ -21,6 +21,7 @@ builder_describe "Build Keyman kmc Package Compiler module" \ "@/developer/src/common/web/test-helpers" \ "configure" \ "build" \ + "api analyze API and prepare API documentation" \ "clean" \ "test" \ "pack build a local .tgz pack for testing" \ @@ -28,7 +29,9 @@ builder_describe "Build Keyman kmc Package Compiler module" \ "--dry-run,-n don't actually publish, just dry run" builder_describe_outputs \ configure /node_modules \ - build /developer/src/kmc-package/build/src/main.js + build /developer/src/kmc-package/build/src/main.js \ + api /developer/build/api/kmc-package.api.json + builder_parse "$@" #------------------------------------------------------------------------------------------------------------------- @@ -52,6 +55,8 @@ if builder_start_action build; then builder_finish_action success build fi +builder_run_action api api-extractor run --local --verbose + #------------------------------------------------------------------------------------------------------------------- if builder_start_action test; then diff --git a/developer/src/kmc/build.sh b/developer/src/kmc/build.sh index a6bc22f2622..65e63ab9f75 100755 --- a/developer/src/kmc/build.sh +++ b/developer/src/kmc/build.sh @@ -32,6 +32,7 @@ builder_describe "Build Keyman Keyboard Compiler kmc" \ "build (default) builds kmc to build/" \ "clean cleans build/ folder" \ "bundle creates a bundled version of kmc" \ + "api analyze API and prepare API documentation (no-op for kmc)" \ "test run automated tests for kmc" \ "pack build a local .tgz pack for testing (note: all npm modules in the repo will be packed by this script)" \ "publish publish to npm (note: all npm modules in the repo will be published by this script)" \ diff --git a/developer/src/kmcmplib/build.sh b/developer/src/kmcmplib/build.sh index ce1c5eed1af..8fbb88bfae1 100755 --- a/developer/src/kmcmplib/build.sh +++ b/developer/src/kmcmplib/build.sh @@ -51,6 +51,7 @@ Libraries will be built in 'build///src'. "clean" \ "configure" \ "build" \ + "api" \ "test" \ "${archtargets[@]}" \ "--full-test also run expensive tests that rely on keyboards repo" \ From ec1238e35f83147a15ebbfe9481ce745e404efb1 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 26 Feb 2024 13:26:38 +0700 Subject: [PATCH 128/171] chore(developer): only build api on build target --- developer/src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developer/src/Makefile b/developer/src/Makefile index 9fbecbf0b4e..d7ee0e1199e 100644 --- a/developer/src/Makefile +++ b/developer/src/Makefile @@ -98,7 +98,7 @@ kmc-package: .virtual api: .virtual cd $(DEVELOPER_ROOT) - $(GIT_BASH_FOR_KEYMAN) build.sh api --no-deps + if $(TARGET) == build $(GIT_BASH_FOR_KEYMAN) build.sh api --no-deps # ---------------------------------------------------------------------- From 99e5b1951eade1285b2cad058e1f6633d4c6b5fa Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 26 Feb 2024 13:48:32 +0700 Subject: [PATCH 129/171] feat(developer): publish api documentation to help.keyman.com Relates to #10207. --- resources/build/help-keyman-com.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/resources/build/help-keyman-com.sh b/resources/build/help-keyman-com.sh index d9b515ba16a..4a0c737f30e 100755 --- a/resources/build/help-keyman-com.sh +++ b/resources/build/help-keyman-com.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# TODO: rewrite this script to builder reqs ## START STANDARD BUILD SCRIPT INCLUDE # adjust relative paths as necessary THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" @@ -41,7 +42,7 @@ function display_usage { echo "Usage: $0 [platform]" echo " $0 --help" echo - echo " platform should be one of: android, ios, linux, mac, windows." + echo " platform should be one of: android, ios, linux, mac, windows, developer." echo " --help displays this screen and exits" } @@ -67,6 +68,10 @@ fi function help_product_path { if [ $platform == 'ios' ]; then echo "products/iphone-and-ipad/$VERSION_RELEASE" + elif [ $platform == 'developer' ]; then + # developer/17.0/reference/api -- we only publish Typescript APIs here at present + # and this would need to change for future deployment if we do more on this repo + echo "developer/$VERSION_RELEASE/reference/api" else echo "products/$platform/$VERSION_RELEASE" fi @@ -107,6 +112,10 @@ function upload_keyman_help { # Note: `/windows/src/desktop/help/build.sh web` must be run first helppath=$KEYMAN_ROOT/windows/bin/help/md/desktop ;; + developer) + # Note: `/developer/build.sh api` must be run first + helppath="$KEYMAN_ROOT/developer/build/docs" + ;; *) display_usage esac @@ -142,7 +151,7 @@ while [[ $# -gt 0 ]] ; do display_usage exit 0 ;; - android | ios | linux | mac | windows) + android | ios | linux | mac | windows | developer) platform=$key ;; *) From 602b519057382648b2cc593d916b4fdd37dff583 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 26 Feb 2024 14:00:51 +0700 Subject: [PATCH 130/171] docs(developer): npm package readme files --- developer/src/kmc-analyze/README.md | 11 ++ developer/src/kmc-keyboard-info/README.md | 10 ++ developer/src/kmc-kmn/README.md | 9 + developer/src/kmc-ldml/README.md | 9 + developer/src/kmc-model-info/README.md | 10 ++ developer/src/kmc-model/README.md | 7 + developer/src/kmc-package/README.md | 9 + developer/src/kmc/README.md | 206 +++++++++++++++------- 8 files changed, 211 insertions(+), 60 deletions(-) create mode 100644 developer/src/kmc-analyze/README.md create mode 100644 developer/src/kmc-keyboard-info/README.md create mode 100644 developer/src/kmc-kmn/README.md create mode 100644 developer/src/kmc-ldml/README.md create mode 100644 developer/src/kmc-model-info/README.md create mode 100644 developer/src/kmc-model/README.md create mode 100644 developer/src/kmc-package/README.md diff --git a/developer/src/kmc-analyze/README.md b/developer/src/kmc-analyze/README.md new file mode 100644 index 00000000000..ed7729771f5 --- /dev/null +++ b/developer/src/kmc-analyze/README.md @@ -0,0 +1,11 @@ +# Keyman Developer - kmc-analyze + +This package provides Keyman keyboard analysis tools. It can be used from the +command line with [@keymanapp/kmc](https://npmjs.com/package/@keymanapp/kmc). + +Currently, the primary function of this package is to work with Keyman's +[`&displayMap` store](https://help.keyman.com/developer/language/reference/displaymap) for +rewriting the On Screen Keyboard with PUA characters, for consistent display of +diacritics and combining marks across all platforms. + +* [API Reference](https://help.keyman.com/developer/current-version/reference/api/kmc-analyze) diff --git a/developer/src/kmc-keyboard-info/README.md b/developer/src/kmc-keyboard-info/README.md new file mode 100644 index 00000000000..18e6cfcfe63 --- /dev/null +++ b/developer/src/kmc-keyboard-info/README.md @@ -0,0 +1,10 @@ +# Keyman Developer - kmc-keyboard-info + +This package builds a .keyboard_info file from a Keyman keyboard project. It can +be used from the command line with +[@keymanapp/kmc](https://npmjs.com/package/@keymanapp/kmc). + +This package is used only for preparing metadata files for deployment of +keyboards to the Keyman Cloud Keyboard Repository. + +* [API Reference](https://help.keyman.com/developer/current-version/reference/api/kmc-keyboard-info) diff --git a/developer/src/kmc-kmn/README.md b/developer/src/kmc-kmn/README.md new file mode 100644 index 00000000000..a74e4d004a9 --- /dev/null +++ b/developer/src/kmc-kmn/README.md @@ -0,0 +1,9 @@ +# Keyman Developer - kmc-kmn + +This package compiles .kmn keyboards into .kmx binary keyboard files. It can be +used from the command line with +[@keymanapp/kmc](https://npmjs.com/package/@keymanapp/kmc). + +Note: this package requires WASM support. + +* [API Reference](https://help.keyman.com/developer/current-version/reference/api/kmc-kmn) diff --git a/developer/src/kmc-ldml/README.md b/developer/src/kmc-ldml/README.md new file mode 100644 index 00000000000..a5843548548 --- /dev/null +++ b/developer/src/kmc-ldml/README.md @@ -0,0 +1,9 @@ +# Keyman Developer - kmc-ldml + +This package compiles LDML .xml keyboards into Keyman .kmx binary keyboard +files. It can be used from the command line with +[@keymanapp/kmc](https://npmjs.com/package/@keymanapp/kmc). + +Note: this package requires WASM support (for the uset parser). + +* [API Reference](https://help.keyman.com/developer/current-version/reference/api/kmc-ldml) diff --git a/developer/src/kmc-model-info/README.md b/developer/src/kmc-model-info/README.md new file mode 100644 index 00000000000..cd6e80704ae --- /dev/null +++ b/developer/src/kmc-model-info/README.md @@ -0,0 +1,10 @@ +# Keyman Developer - kmc-model-info + +This package builds a .model_info file from a Keyman lexical model project. It +can be used from the command line with +[@keymanapp/kmc](https://npmjs.com/package/@keymanapp/kmc). + +This package is used only for preparing metadata files for deployment of +lexical models to the Keyman Cloud Lexical Model Repository. + +* [API Reference](https://help.keyman.com/developer/current-version/reference/api/kmc-model-info) diff --git a/developer/src/kmc-model/README.md b/developer/src/kmc-model/README.md new file mode 100644 index 00000000000..66334cf3d7c --- /dev/null +++ b/developer/src/kmc-model/README.md @@ -0,0 +1,7 @@ +# Keyman Developer - kmc-model + +This package compiles .model.ts lexical models into .model.js files. It can be +used from the command line with +[@keymanapp/kmc](https://npmjs.com/package/@keymanapp/kmc). + +* [API Reference](https://help.keyman.com/developer/current-version/reference/api/kmc-model) diff --git a/developer/src/kmc-package/README.md b/developer/src/kmc-package/README.md new file mode 100644 index 00000000000..f60f18e9a83 --- /dev/null +++ b/developer/src/kmc-package/README.md @@ -0,0 +1,9 @@ +# Keyman Developer - kmc-package + +This package compiles .kps Keyman package source files into binary .kmp Keyman +package files. It can be used from the command line with +[@keymanapp/kmc](https://npmjs.com/package/@keymanapp/kmc). + +Note: .kmp files are .zip files internally. + +* [API Reference](https://help.keyman.com/developer/current-version/reference/api/kmc-package) diff --git a/developer/src/kmc/README.md b/developer/src/kmc/README.md index 31022383d0a..36477766506 100644 --- a/developer/src/kmc/README.md +++ b/developer/src/kmc/README.md @@ -1,105 +1,191 @@ -Keyman Developer - Next Generation Compiler +Keyman Developer - Command Line Compiler ================ -This package provides the following Keyman **command line tools**: +This package provides a command-line interface to the Keyman Developer compiler +toolchain, `kmc`. - - `kmc` — takes **LDML Keyboard .xml sources** and compiles them in to a - KMXPlus **.kmx** file. - - `kmlmc` — takes **lexical model sources** and compiles them in to a **.js** - file. - - `kmlmp` — uses a `.model.kmp` file to generate a redistributable **lexical - model package**. +## Install kmc -`kmlmc` is intended to be used standalone, or as part of a build system. `kmlmp` -is used only by command line tools. +`kmc` is available as: +* a part of Keyman Developer (Windows) +* an npm package, and +* a zip download -Note: `kmc` will in the future replace `kmlmc` and `kmlmp`. +Hint: Unlike previous versions of Keyman Developer, version 17 of kmc does not +require WINE to run the command line tools on Linux or macOS. -In order to build [lexical models][], these tools must be built and compiled. +### Keyman Developer integration (Windows only) -[lexical models]: https://github.com/keymanapp/lexical-models +kmc is included with a default installation of Keyman Developer, including a +runtime of node.js, and will be on the system path by default. No additional +configuration or installation is required. +### npm (Windows, macOS, and Linux) -Install -------- +kmc is also available as an npm package, +[@keymanapp/kmc](https://npmjs.com/package/@keymanapp/kmc). -Install `kmc` globally: +You'll need [node.js](https://nodejs.org/), version 18.0 or later. - npm install -g @keymanapp/kmc +```shell +npm install -g @keymanapp/kmc +``` + +### Zip download (Windows, macOS, and Linux) + +kmc is also available as a zip download from +[keyman.com/developer/download](https://keyman.com/developer/download), +or can be installed from the command line (`curl` and `unzip` required): + +```shell +# To build keyboards and packages: +mkdir kmc +cd kmc +# hint: the download is currently called 'kmcomp', although the +# compiler is now called 'kmc'. +curl -L https://keyman.com/go/download/kmcomp -o kmc.zip +unzip kmc.zip +# Optionally, add kmc to your PATH +``` -kmc Usage ---------- +## The five minute quick start -To compile an LDML keyboard from its `.xml` source, use `kmc`: +### 1. Download a sample keyboard project - kmc build my-keyboard.xml --outFile my-keyboard.kmx + -To see more command line options by using the `--help` option: +We'll download a sample project from GitHub for Khmer. If you do not have the +command-line git tools installed, you can visit the [repository +website](https://github.com/keyman-keyboards/khmer_angkor) and download it as a +zip file instead. - kmc --help +```shell +git clone https://github.com/keyman-keyboards/khmer_angkor +``` ---- +This will have created a new folder called `khmer_angkor/`. -To compile a lexical model from its `.model.ts` source, use `kmc`: +### 2. Build the project - kmc build my-lexical-model.model.ts --outFile my-lexical-model.model.js +Now, we'll build our keyboard project with kmc. -To see more command line options by using the `--help` option: +```shell +cd khmer_angkor +kmc build . +``` - kmc --help +And... that's it! We'll now have a compiled keyboard and package in the `build/` +subfolder. The file `build/khmer_angkor.kmp` can be installed into any of the +Keyman apps, and `build/khmer_angkor.js` can be added to KeymanWeb. ---- +### 3. Install the keyboard -kmc can now build package installers for Windows. Example usage (Bash on -Windows, using 'node .' instead of 'kmc' to run the local build): +**Windows**: we can install this keyboard using [`kmshell`][windows-install-keyboard]: +```cmd +"%ProgramFiles(x86)%\Keyman\Keyman Desktop\kmshell" -i build\khmer_angkor.kmp -s ``` -node . build windows-package-installer \ - $KEYMAN_ROOT/developer/src/kmc-package/test/fixtures/khmer_angkor/source/khmer_angkor.kps \ - --msi /c/Program\ Files\ \(x86\)/Common\ Files/Keyman/Cached\ Installer\ Files/keymandesktop.msi \ - --exe $KEYMAN_ROOT/windows/bin/desktop/setup-redist.exe \ - --license $KEYMAN_ROOT/LICENSE.md \ - --out-file ./khmer.exe + +Alternatively you can double-click the .kmp package file in Windows Explorer to +install it. + +**Linux**: we'd use the following +[`km-package-install`][linux-install-keyboard] +command: + +```shell +km-package-install -f build/khmer_angkor.kmp ``` -How to build from source ------------------------- +**macOS**: open Keyman Configuration and drop the package khmer_angkor.kmp file +onto the Keyman Configuration window. -Run `build.sh`: +**Android**: send khmer_angkor.kmp to your Android device, and install it from the +hamburger menu in the Keyman app. - ./build.sh configure build +**iOS**: send khmer_angkor.kmp to your iOS device, and install it from the +hamburger menu in the Keyman app. -or (less preferably -- build.sh is more efficient): +**Web**: copy khmer_angkor.js to your website, then [load it with KeymanWeb][load-keymanweb-keyboard]: - nmake configure build +```js +keyman.addKeyboards({ + id:'khmer_angkor', // The keyboard's unique identification code. + name:'Khmer Angkor', // The keyboard's user-readable name. + language:{ + id:'km', // A BCP 47 code uniquely identifying the language. + name:'Khmer' // The language's name. + }, + filename:'./khmer-angkor.js', +}); +``` -Once you have `configure`d once, you should not normally need to do it again -unless dependencies change or you clean the build folder. `./build.sh` without -parameters will do the default action, which is `build`. +## File layout + +See [file layout][file-layout] for details on the standard source file layout +that Keyman Developer works best with. + +## Reference and Examples + +### kmc - command line compiler + +[kmc][kmc] is the command line compiler. You can use it to compile +all Keyman files. -TODO: Note that kmc currently depends on kmc-* to have been configured; while -the build of kmc will do the typescript component of the build, it will not be -able to do any other build steps, so you may wish to build each of the -components separately, one time. +The most common command will be `kmc build`: -How to run the tests --------------------- +`kmc build project.kpj` +: Compile all components of a keyboard or model project named `project.kpj` +KMComp will respect the path settings within the project file. This is the +recommended way to build, as it will build keyboards, models and packages all in +one step. You can also call `kmc build ` to build the project in the +referenced folder, e.g. `kmc build .`. - ./build.sh test +* [kmc reference][kmc] +----- -How to prepare bundling for installation ----------------------------------------- +# Working with the source - ./build.sh bundle --build-path +## Building kmc + +Run `build.sh`: + +```shell +./build.sh configure build +``` + +Once you have run `configure` once, you should not normally need to do it again +unless dependencies change or you clean the build folder. `./build.sh` without +parameters will do the default action, which is `build`. + +## Testing kmc + +```shell +./build.sh test +``` + +## Bundling for installation + +```shell +./build.sh bundle --build-path +``` The temp_path must be a path outside the repository to avoid npm getting confused by the root package.json. This is called by inst/download.in.mak normally when building the Keyman Developer installer. -How to publish to NPM ---------------------- +## Publishing to NPM + +```shell +./build.sh publish [--dry-run] +``` + +Publishes the current release to NPM. This should only be run from CI. - ./build.sh publish [--dry-run] -Publishes the current release to NPM. This should only be run from CI. \ No newline at end of file +[kmc]: https://help.keyman.com/developer/current-version/reference/kmc/cli +[file-layout]: https://help.keyman.com/developer/current-version/reference/file-layout +[load-keymanweb-keyboard]: https://help.keyman.com/developer/engine/web/current-version/guide/adding-keyboards +[linux-install-keyboard]: https://help.keyman.com/products/linux/current-version/reference/km-package-install +[windows-install-keyboard]: https://help.keyman.com/knowledge-base/98 From ff421e04423dcb9c0b68615e3cadaf4fe73dd4ef Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 26 Feb 2024 14:03:25 +0700 Subject: [PATCH 131/171] chore(developer): baseline api report files for kmc modules --- developer/docs/api/etc/kmc-analyze.api.md | 52 ++ .../docs/api/etc/kmc-keyboard-info.api.md | 148 +++++ developer/docs/api/etc/kmc-kmn.api.md | 580 ++++++++++++++++++ developer/docs/api/etc/kmc-ldml.api.md | 336 ++++++++++ developer/docs/api/etc/kmc-model-info.api.md | 118 ++++ developer/docs/api/etc/kmc-model.api.md | 96 +++ developer/docs/api/etc/kmc-package.api.md | 266 ++++++++ 7 files changed, 1596 insertions(+) create mode 100644 developer/docs/api/etc/kmc-analyze.api.md create mode 100644 developer/docs/api/etc/kmc-keyboard-info.api.md create mode 100644 developer/docs/api/etc/kmc-kmn.api.md create mode 100644 developer/docs/api/etc/kmc-ldml.api.md create mode 100644 developer/docs/api/etc/kmc-model-info.api.md create mode 100644 developer/docs/api/etc/kmc-model.api.md create mode 100644 developer/docs/api/etc/kmc-package.api.md diff --git a/developer/docs/api/etc/kmc-analyze.api.md b/developer/docs/api/etc/kmc-analyze.api.md new file mode 100644 index 00000000000..c2b911a4506 --- /dev/null +++ b/developer/docs/api/etc/kmc-analyze.api.md @@ -0,0 +1,52 @@ +## API Report File for "@keymanapp/kmc-analyze" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CompilerCallbacks } from '@keymanapp/common-types'; +import { CompilerEvent } from '@keymanapp/common-types'; +import { Osk } from '@keymanapp/common-types'; + +// @public (undocumented) +export class AnalyzeOskCharacterUse { + // Warning: (ae-forgotten-export) The symbol "AnalyzeOskCharacterUseOptions" needs to be exported by the entry point index.d.ts + constructor(callbacks: CompilerCallbacks, options?: AnalyzeOskCharacterUseOptions); + analyze(file: string): Promise; + clear(): void; + getStrings(format?: '.txt' | '.md' | '.json'): string[]; +} + +// @public (undocumented) +export class AnalyzeOskRewritePua { + constructor(callbacks: CompilerCallbacks); + // (undocumented) + analyze(file: string, mapping: Osk.StringResult[]): Promise; + // (undocumented) + clear(): void; + // (undocumented) + get data(): { + [index: string]: Uint8Array; + }; +} + +// @public (undocumented) +export class AnalyzerMessages { + // (undocumented) + static FATAL_UnexpectedException: number; + // (undocumented) + static Fatal_UnexpectedException: (o: { + e: any; + }) => CompilerEvent; + // (undocumented) + static INFO_ScanningFile: number; + // (undocumented) + static Info_ScanningFile: (o: { + type: string; + name: string; + }) => CompilerEvent; +} + +// (No @packageDocumentation comment for this package) + +``` diff --git a/developer/docs/api/etc/kmc-keyboard-info.api.md b/developer/docs/api/etc/kmc-keyboard-info.api.md new file mode 100644 index 00000000000..93e652e9e3f --- /dev/null +++ b/developer/docs/api/etc/kmc-keyboard-info.api.md @@ -0,0 +1,148 @@ +## API Report File for "@keymanapp/kmc-keyboard-info" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CompilerCallbacks } from '@keymanapp/common-types'; +import { CompilerEvent } from '@keymanapp/common-types'; +import { CompilerOptions } from '@keymanapp/common-types'; +import { KeymanCompiler } from '@keymanapp/common-types'; +import { KeymanCompilerArtifact } from '@keymanapp/common-types'; +import { KeymanCompilerArtifacts } from '@keymanapp/common-types'; +import { KeymanCompilerResult } from '@keymanapp/common-types'; +import { KmpJsonFile } from '@keymanapp/common-types'; + +// @public (undocumented) +export class KeyboardInfoCompiler implements KeymanCompiler { + constructor(); + // Warning: (ae-forgotten-export) The symbol "KeyboardInfoFileLanguageFont" needs to be exported by the entry point index.d.ts + // + // (undocumented) + fontSourceToKeyboardInfoFont(kpsFilename: string, kmpJsonData: KmpJsonFile.KmpJsonFile, source: string[]): Promise; + // (undocumented) + init(callbacks: CompilerCallbacks, options: KeyboardInfoCompilerOptions): Promise; + run(inputFilename: string, outputFilename?: string): Promise; + // (undocumented) + write(artifacts: KeyboardInfoCompilerArtifacts): Promise; +} + +// @public (undocumented) +export interface KeyboardInfoCompilerArtifacts extends KeymanCompilerArtifacts { + // (undocumented) + keyboard_info: KeymanCompilerArtifact; +} + +// @public (undocumented) +export class KeyboardInfoCompilerMessages { + // (undocumented) + static ERROR_CannotBuildWithoutKmpFile: number; + // (undocumented) + static Error_CannotBuildWithoutKmpFile: () => CompilerEvent; + // (undocumented) + static ERROR_FileDoesNotExist: number; + // (undocumented) + static Error_FileDoesNotExist: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_FileIsNotValid: number; + // (undocumented) + static Error_FileIsNotValid: (o: { + filename: string; + e: any; + }) => CompilerEvent; + // (undocumented) + static ERROR_FontFileCannotBeRead: number; + // (undocumented) + static Error_FontFileCannotBeRead: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidAuthorEmail: number; + // (undocumented) + static Error_InvalidAuthorEmail: (o: { + email: string; + }) => CompilerEvent; + // (undocumented) + static Error_LicenseFileDoesNotExist: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_LicenseFileIsDamaged: number; + // (undocumented) + static Error_LicenseFileIsDamaged: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_LicenseFileIsMissing: number; + // (undocumented) + static ERROR_LicenseIsNotValid: number; + // (undocumented) + static Error_LicenseIsNotValid: (o: { + filename: string; + message: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_NoLicenseFound: number; + // (undocumented) + static Error_NoLicenseFound: () => CompilerEvent; + // (undocumented) + static ERROR_OutputValidation: number; + // (undocumented) + static Error_OutputValidation: (o: { + message: any; + }) => CompilerEvent; + // (undocumented) + static FATAL_UnexpectedException: number; + // (undocumented) + static Fatal_UnexpectedException: (o: { + e: any; + }) => CompilerEvent; + // (undocumented) + static HINT_OutputValidation: number; + // (undocumented) + static Hint_OutputValidation: (o: { + message: any; + }) => CompilerEvent; + // (undocumented) + static WARN_MetadataFieldInconsistent: number; + // (undocumented) + static Warn_MetadataFieldInconsistent: (o: { + field: string; + value: any; + expected: any; + }) => CompilerEvent; + // (undocumented) + static WARN_OutputValidation: number; + // (undocumented) + static Warn_OutputValidation: (o: { + message: any; + }) => CompilerEvent; +} + +// @public (undocumented) +export interface KeyboardInfoCompilerOptions extends CompilerOptions { + // (undocumented) + sources: KeyboardInfoSources; +} + +// @public (undocumented) +export interface KeyboardInfoCompilerResult extends KeymanCompilerResult { + // (undocumented) + artifacts: KeyboardInfoCompilerArtifacts; +} + +// @public (undocumented) +export interface KeyboardInfoSources { + forPublishing: boolean; + jsFilename?: string; + kmpFilename: string; + kpsFilename: string; + lastCommitDate?: string; + sourcePath: string; +} + +// (No @packageDocumentation comment for this package) + +``` diff --git a/developer/docs/api/etc/kmc-kmn.api.md b/developer/docs/api/etc/kmc-kmn.api.md new file mode 100644 index 00000000000..b1faead0839 --- /dev/null +++ b/developer/docs/api/etc/kmc-kmn.api.md @@ -0,0 +1,580 @@ +## API Report File for "@keymanapp/kmc-kmn" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CompilerCallbacks } from '@keymanapp/common-types'; +import { CompilerEvent } from '@keymanapp/common-types'; +import { CompilerOptions } from '@keymanapp/common-types'; +import { KeymanCompiler } from '@keymanapp/common-types'; +import { KeymanCompilerArtifactOptional } from '@keymanapp/common-types'; +import { KeymanCompilerArtifacts } from '@keymanapp/common-types'; +import { KeymanCompilerResult } from '@keymanapp/common-types'; +import { Osk } from '@keymanapp/common-types'; +import { UnicodeSet } from '@keymanapp/common-types'; +import { UnicodeSetParser } from '@keymanapp/common-types'; + +// @public (undocumented) +export class CompilerMessages { + // (undocumented) + static ERROR_FileNotFound: number; + // (undocumented) + static Error_FileNotFound: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidDisplayMapFile: number; + // (undocumented) + static Error_InvalidDisplayMapFile: (o: { + filename: string; + e: any; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidKvkFile: number; + // (undocumented) + static Error_InvalidKvkFile: (o: { + filename: string; + e: any; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidKvksFile: number; + // (undocumented) + static Error_InvalidKvksFile: (o: { + filename: string; + e: any; + }) => CompilerEvent; + // (undocumented) + static ERROR_UnicodeSetHasProperties: number; + // (undocumented) + static Error_UnicodeSetHasProperties: () => CompilerEvent; + // (undocumented) + static ERROR_UnicodeSetHasStrings: number; + // (undocumented) + static Error_UnicodeSetHasStrings: () => CompilerEvent; + // (undocumented) + static ERROR_UnicodeSetSyntaxError: number; + // (undocumented) + static Error_UnicodeSetSyntaxError: () => CompilerEvent; + // (undocumented) + static FATAL_CallbacksNotSet: number; + // (undocumented) + static Fatal_CallbacksNotSet: () => CompilerEvent; + // (undocumented) + static FATAL_MissingWasmModule: number; + // (undocumented) + static Fatal_MissingWasmModule: (o: { + e?: any; + }) => CompilerEvent; + // (undocumented) + static FATAL_UnableToSetCompilerOptions: number; + // (undocumented) + static Fatal_UnableToSetCompilerOptions: () => CompilerEvent; + // (undocumented) + static FATAL_UnexpectedException: number; + // (undocumented) + static Fatal_UnexpectedException: (o: { + e: any; + }) => CompilerEvent; + // (undocumented) + static FATAL_UnicodeSetOutOfRange: number; + // (undocumented) + static Fatal_UnicodeSetOutOfRange: () => CompilerEvent; + // (undocumented) + static WARN_InvalidVkeyInKvksFile: number; + // (undocumented) + static Warn_InvalidVkeyInKvksFile: (o: { + filename: string; + invalidVkey: string; + }) => CompilerEvent; +} + +// @public (undocumented) +export class KmnCompiler implements KeymanCompiler, UnicodeSetParser { + constructor(); + static fixNewPattern(pattern: string): string; + // Warning: (ae-forgotten-export) The symbol "KmnCompilerOptions" needs to be exported by the entry point main.d.ts + // + // (undocumented) + init(callbacks: CompilerCallbacks, options: KmnCompilerOptions): Promise; + // (undocumented) + parseUnicodeSet(pattern: string, rangeCount: number): UnicodeSet | null; + // Warning: (ae-forgotten-export) The symbol "KmnCompilerResult" needs to be exported by the entry point main.d.ts + // + // (undocumented) + run(infile: string, outfile: string): Promise; + // (undocumented) + sizeUnicodeSet(pattern: string): number; + // (undocumented) + testSentry(): any; + verifyInitialized(): boolean; + // Warning: (ae-forgotten-export) The symbol "KmnCompilerArtifacts" needs to be exported by the entry point main.d.ts + // + // (undocumented) + write(artifacts: KmnCompilerArtifacts): Promise; +} + +// @public +export class KmnCompilerMessages { + // (undocumented) + static ERROR_140FeatureOnlyContextAndNotAnyWeb: number; + // (undocumented) + static ERROR_501FeatureOnly_Call: number; + // (undocumented) + static ERROR_60FeatureOnly_Contextn: number; + // (undocumented) + static ERROR_60FeatureOnly_EthnologueCode: number; + // (undocumented) + static ERROR_60FeatureOnly_MnemonicLayout: number; + // (undocumented) + static ERROR_60FeatureOnly_NamedCodes: number; + // (undocumented) + static ERROR_60FeatureOnly_OldCharPosMatching: number; + // (undocumented) + static ERROR_60FeatureOnly_VirtualCharKey: number; + // (undocumented) + static ERROR_70FeatureOnly: number; + // (undocumented) + static ERROR_80FeatureOnly: number; + // (undocumented) + static ERROR_90FeatureOnly_IfSystemStores: number; + // (undocumented) + static ERROR_90FeatureOnly_SetSystemStores: number; + // (undocumented) + static ERROR_90FeatureOnlyEmbedCSS: number; + // (undocumented) + static ERROR_90FeatureOnlyKeyboardVersion: number; + // (undocumented) + static ERROR_90FeatureOnlyLayoutFile: number; + // (undocumented) + static ERROR_90FeatureOnlyTargets: number; + // (undocumented) + static ERROR_90FeatureOnlyVirtualKeyDictionary: number; + // (undocumented) + static ERROR_AnyInVirtualKeySection: number; + // (undocumented) + static ERROR_BeepInVirtualKeySection: number; + // (undocumented) + static ERROR_CallInVirtualKeySection: number; + // (undocumented) + static ERROR_CannotLoadIncludeFile: number; + // (undocumented) + static ERROR_CannotReadBitmapFile: number; + // (undocumented) + static ERROR_CannotReadInfile: number; + // (undocumented) + static ERROR_CannotUseReadWriteGroupFromReadonlyGroup: number; + // (undocumented) + static ERROR_CasedKeysMustContainOnlyVirtualKeys: number; + // (undocumented) + static ERROR_CasedKeysMustNotIncludeShiftStates: number; + // (undocumented) + static ERROR_CasedKeysNotSupportedWithMnemonicLayout: number; + // (undocumented) + static ERROR_CharacterExpansionMustBeFollowedByCharacter: number; + // (undocumented) + static ERROR_CodeInvalidInKeyStore: number; + // (undocumented) + static ERROR_CodeInvalidInThisSection: number; + // (undocumented) + static ERROR_ContextAndIndexInvalidInMatchNomatch: number; + // (undocumented) + static ERROR_ContextExHasInvalidOffset: number; + // (undocumented) + static ERROR_ContextInVirtualKeySection: number; + // (undocumented) + static ERROR_DuplicateGroup: number; + // (undocumented) + static ERROR_DuplicateStore: number; + // (undocumented) + static ERROR_ExpansionMustBePositive: number; + // (undocumented) + static ERROR_ExpansionMustFollowCharacterOrVKey: number; + // (undocumented) + static ERROR_GroupDoesNotExist: number; + // (undocumented) + static ERROR_IfSystemStore_NotFound: number; + // (undocumented) + static ERROR_IndexDoesNotPointToAny: number; + // (undocumented) + static ERROR_IndexInVirtualKeySection: number; + // (undocumented) + static ERROR_InfileNotExist: number; + // (undocumented) + static ERROR_InvalidAny: number; + // (undocumented) + static ERROR_InvalidBegin: number; + // (undocumented) + static ERROR_InvalidBitmapLine: number; + // (undocumented) + static ERROR_InvalidCall: number; + // (undocumented) + static ERROR_InvalidCharacter: number; + // (undocumented) + static ERROR_InvalidCodeInKeyPartOfRule: number; + // (undocumented) + static ERROR_InvalidCopyright: number; + // (undocumented) + static ERROR_InvalidDeadkey: number; + // (undocumented) + static ERROR_InvalidEthnologueCode: number; + // (undocumented) + static ERROR_InvalidGroupLine: number; + // (undocumented) + static ERROR_InvalidIf: number; + // (undocumented) + static ERROR_InvalidIndex: number; + // (undocumented) + static ERROR_InvalidInVirtualKeySection: number; + // (undocumented) + static ERROR_InvalidKeyCode: number; + // (undocumented) + static ERROR_InvalidLanguageLine: number; + // (undocumented) + static ERROR_InvalidLanguageName: number; + // (undocumented) + static ERROR_InvalidLayoutLine: number; + // (undocumented) + static ERROR_InvalidLineContinuation: number; + // (undocumented) + static ERROR_InvalidMessage: number; + // (undocumented) + static ERROR_InvalidName: number; + // (undocumented) + static ERROR_InvalidNamedCode: number; + // (undocumented) + static ERROR_InvalidOuts: number; + // (undocumented) + static ERROR_InvalidReset: number; + // (undocumented) + static ERROR_InvalidSave: number; + // (undocumented) + static ERROR_InvalidSet: number; + // (undocumented) + static ERROR_InvalidStoreLine: number; + // (undocumented) + static ERROR_InvalidSwitch: number; + // (undocumented) + static ERROR_InvalidSystemStore: number; + // (undocumented) + static ERROR_InvalidToken: number; + // (undocumented) + static ERROR_InvalidTouchLayoutFile: number; + // (undocumented) + static ERROR_InvalidUse: number; + // (undocumented) + static ERROR_InvalidValue: number; + // (undocumented) + static ERROR_InvalidVersion: number; + // (undocumented) + static ERROR_KeyboardVersionFormatInvalid: number; + // (undocumented) + static ERROR_LayoutButNoLanguage: number; + // (undocumented) + static ERROR_LineTooLong: number; + // (undocumented) + static ERROR_NewContextGroupMustBeReadonly: number; + // (undocumented) + static ERROR_NoTokensFound: number; + // (undocumented) + static ERROR_NotSupportedInKeymanWebContext: number; + // (undocumented) + static ERROR_NotSupportedInKeymanWebOutput: number; + // (undocumented) + static ERROR_NotSupportedInKeymanWebStore: number; + // (undocumented) + static ERROR_NoVersionLine: number; + // (undocumented) + static ERROR_OutputInReadonlyGroup: number; + // (undocumented) + static ERROR_OutsInVirtualKeySection: number; + // (undocumented) + static ERROR_PostKeystrokeGroupMustBeReadonly: number; + // (undocumented) + static ERROR_RepeatedBegin: number; + // (undocumented) + static ERROR_ReservedCharacter: number; + // (undocumented) + static ERROR_SetSystemStore_NotFound: number; + // (undocumented) + static ERROR_StatementNotPermittedInReadonlyGroup: number; + // (undocumented) + static ERROR_StoreDoesNotExist: number; + // (undocumented) + static ERROR_StringInVirtualKeySection: number; + // (undocumented) + static ERROR_TooManyIndexToKeyRefs: number; + // (undocumented) + static ERROR_TouchLayoutInvalidIdentifier: number; + // (undocumented) + static ERROR_UnterminatedString: number; + // (undocumented) + static ERROR_VersionAlreadyIncluded: number; + // (undocumented) + static ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb: number; + // (undocumented) + static ERROR_VirtualKeyInContext: number; + // (undocumented) + static ERROR_VirtualKeyNotAllowedHere: number; + // (undocumented) + static ERROR_VirtualKeysNotValidForMnemonicLayouts: number; + // (undocumented) + static ERROR_VKeyExpansionMustBeFollowedByVKey: number; + // (undocumented) + static ERROR_VKeyExpansionMustUseConsistentShift: number; + // (undocumented) + static ERROR_ZeroLengthString: number; + // (undocumented) + static FATAL_BadCallParams: number; + // (undocumented) + static FATAL_Break: number; + // (undocumented) + static FATAL_BufferOverflow: number; + // (undocumented) + static FATAL_CannotAllocateMemory: number; + // (undocumented) + static FATAL_CannotCreateTempfile: number; + // (undocumented) + static FATAL_SomewhereIGotItWrong: number; + // (undocumented) + static FATAL_UnableToWriteFully: number; + // (undocumented) + static HINT_NonUnicodeFile: number; + // (undocumented) + static HINT_UnreachableKeyCode: number; + // (undocumented) + static HINT_UnreachableRule: number; + // (undocumented) + static INFO_EndOfFile: number; + // (undocumented) + static INFO_Info: number; + // (undocumented) + static INFO_None: number; + // (undocumented) + static WARN_ANSIInUnicodeGroup: number; + // (undocumented) + static WARN_BitmapNotUsed: number; + // (undocumented) + static WARN_CouldNotCopyJsonFile: number; + // (undocumented) + static WARN_CustomLanguagesNotSupported: number; + // (undocumented) + static WARN_DontMixChiralAndNonChiralModifiers: number; + // (undocumented) + static WARN_EmbedJsFileMissing: number; + // (undocumented) + static WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb: number; + // (undocumented) + static WARN_HeaderStatementIsDeprecated: number; + // (undocumented) + static WARN_HelpFileMissing: number; + // (undocumented) + static WARN_HotkeyHasInvalidModifier: number; + // (undocumented) + static WARN_IfShouldBeAtStartOfContext: number; + // (undocumented) + static WARN_IndexStoreShort: number; + // (undocumented) + static WARN_InvalidJSONMetadataFile: number; + // (undocumented) + static WARN_JSONMetadataOSKFontShouldMatchTouchFont: number; + // (undocumented) + static WARN_KeyBadLength: number; + // (undocumented) + static WARN_KeyShouldIncludeNCaps: number; + // (undocumented) + static WARN_KVKFileIsInSourceFormat: number; + // (undocumented) + static WARN_LanguageHeadersDeprecatedInKeyman10: number; + // (undocumented) + static WARN_MixingLeftAndRightModifiers: number; + // (undocumented) + static WARN_NulNotFirstStatementInContext: number; + // (undocumented) + static WARN_OldVersion: number; + // (undocumented) + static WARN_OptionStoreNameInvalid: number; + // (undocumented) + static WARN_PlatformNotInTargets: number; + // (undocumented) + static WARN_PunctuationInEthnologueCode: number; + // (undocumented) + static WARN_ReservedCharacter: number; + // (undocumented) + static WARN_StoreAlreadyUsedAsOptionOrCall: number; + // (undocumented) + static WARN_StoreAlreadyUsedAsStoreOrCall: number; + // (undocumented) + static WARN_StoreAlreadyUsedAsStoreOrOption: number; + // (undocumented) + static WARN_TooManyErrorsOrWarnings: number; + // (undocumented) + static WARN_TooManyWarnings: number; + // (undocumented) + static WARN_TouchLayoutCustomKeyNotDefined: number; + // (undocumented) + static WARN_TouchLayoutFileMissing: number; + // (undocumented) + static WARN_TouchLayoutFontShouldBeSameForAllPlatforms: number; + // (undocumented) + static WARN_TouchLayoutMissingLayer: number; + // (undocumented) + static WARN_TouchLayoutMissingRequiredKeys: number; + // (undocumented) + static WARN_TouchLayoutSpecialLabelOnNormalKey: number; + // (undocumented) + static WARN_TouchLayoutUnidentifiedKey: number; + // (undocumented) + static WARN_UnicodeInANSIGroup: number; + // (undocumented) + static WARN_UnicodeSurrogateUsed: number; + // (undocumented) + static WARN_UseNotLastStatementInRule: number; + // (undocumented) + static WARN_VirtualCharKeyWithPositionalLayout: number; + // (undocumented) + static WARN_VirtualKeyInOutput: number; + // (undocumented) + static WARN_VirtualKeyWithMnemonicLayout: number; + // (undocumented) + static WARN_VisualKeyboardFileMissing: number; +} + +// @public (undocumented) +export class KmwCompilerMessages extends KmnCompilerMessages { + // (undocumented) + static Error_InvalidBegin: () => CompilerEvent; + // (undocumented) + static Error_InvalidKeyCode: (o: { + keyId: string; + }) => CompilerEvent; + // (undocumented) + static Error_InvalidTouchLayoutFile: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidTouchLayoutFileFormat: number; + // (undocumented) + static Error_InvalidTouchLayoutFileFormat: (o: { + msg: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_NotAnyRequiresVersion14: number; + // (undocumented) + static Error_NotAnyRequiresVersion14: (o: { + line: number; + }) => CompilerEvent; + // (undocumented) + static Error_NotSupportedInKeymanWebContext: (o: { + line: number; + code: String; + }) => CompilerEvent; + // (undocumented) + static Error_NotSupportedInKeymanWebOutput: (o: { + line: number; + code: string; + }) => CompilerEvent; + // (undocumented) + static Error_NotSupportedInKeymanWebStore: (o: { + code: string; + store: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_TouchLayoutFileDoesNotExist: number; + // (undocumented) + static Error_TouchLayoutFileDoesNotExist: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_TouchLayoutIdentifierRequires15: number; + // (undocumented) + static Error_TouchLayoutIdentifierRequires15: (o: { + keyId: string; + platformName: string; + layerId: string; + }) => CompilerEvent; + // (undocumented) + static Error_TouchLayoutInvalidIdentifier: (o: { + keyId: string; + platformName: string; + layerId: string; + }) => CompilerEvent; + // (undocumented) + static Error_VirtualCharacterKeysNotSupportedInKeymanWeb: (o: { + line: number; + }) => CompilerEvent; + // (undocumented) + static Error_VirtualKeysNotValidForMnemonicLayouts: (o: { + line: number; + }) => CompilerEvent; + // (undocumented) + static HINT_TouchLayoutUsesUnsupportedGesturesDownlevel: number; + // (undocumented) + static Hint_TouchLayoutUsesUnsupportedGesturesDownlevel: (o: { + keyId: string; + }) => CompilerEvent; + // (undocumented) + static Hint_UnreachableKeyCode: (o: { + line: number; + key: string; + }) => CompilerEvent; + // (undocumented) + static Warn_DontMixChiralAndNonChiralModifiers: () => CompilerEvent; + // (undocumented) + static Warn_EmbedJsFileMissing: (o: { + line: number; + jsFilename: string; + e: any; + }) => CompilerEvent; + // (undocumented) + static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb: (o: { + line: number; + flags: string; + }) => CompilerEvent; + // (undocumented) + static Warn_HelpFileMissing: (o: { + line: number; + helpFilename: string; + e: any; + }) => CompilerEvent; + // (undocumented) + static Warn_OptionStoreNameInvalid: (o: { + name: string; + }) => CompilerEvent; + // (undocumented) + static Warn_TouchLayoutCustomKeyNotDefined: (o: { + keyId: string; + platformName: string; + layerId: string; + }) => CompilerEvent; + // (undocumented) + static Warn_TouchLayoutFontShouldBeSameForAllPlatforms: () => CompilerEvent; + // (undocumented) + static Warn_TouchLayoutMissingLayer: (o: { + keyId: string; + platformName: string; + layerId: string; + nextLayer: string; + }) => CompilerEvent; + // (undocumented) + static Warn_TouchLayoutMissingRequiredKeys: (o: { + layerId: string; + platformName: string; + missingKeys: string; + }) => CompilerEvent; + // (undocumented) + static Warn_TouchLayoutSpecialLabelOnNormalKey: (o: { + keyId: string; + platformName: string; + layerId: string; + label: string; + }) => CompilerEvent; + // (undocumented) + static Warn_TouchLayoutUnidentifiedKey: (o: { + layerId: string; + }) => CompilerEvent; +} + +// (No @packageDocumentation comment for this package) + +``` diff --git a/developer/docs/api/etc/kmc-ldml.api.md b/developer/docs/api/etc/kmc-ldml.api.md new file mode 100644 index 00000000000..65ca6d30888 --- /dev/null +++ b/developer/docs/api/etc/kmc-ldml.api.md @@ -0,0 +1,336 @@ +## API Report File for "@keymanapp/kmc-ldml" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CompilerCallbacks } from '@keymanapp/common-types'; +import { CompilerEvent } from '@keymanapp/common-types'; +import { CompilerOptions } from '@keymanapp/common-types'; +import { KeymanCompiler } from '@keymanapp/common-types'; +import { KeymanCompilerArtifactOptional } from '@keymanapp/common-types'; +import { KeymanCompilerArtifacts } from '@keymanapp/common-types'; +import { KeymanCompilerResult } from '@keymanapp/common-types'; +import { KMXBuilder } from '@keymanapp/common-types'; +import { KMXPlus } from '@keymanapp/common-types'; +import { LDMLKeyboard } from '@keymanapp/common-types'; +import { LDMLKeyboardTestDataXMLSourceFile } from '@keymanapp/common-types'; +import { LDMLKeyboardXMLSourceFileReaderOptions } from '@keymanapp/common-types'; +import { SectionIdent } from '@keymanapp/ldml-keyboard-constants'; +import { TouchLayout } from '@keymanapp/common-types'; +import { UnicodeSet } from '@keymanapp/common-types'; +import { UnicodeSetParser } from '@keymanapp/common-types'; +import { VisualKeyboard } from '@keymanapp/common-types'; + +export { KMXBuilder } + +// @public (undocumented) +export class KMXPlusMetadataCompiler { + // Warning: (ae-forgotten-export) The symbol "KMXPlusData" needs to be exported by the entry point main.d.ts + // Warning: (ae-forgotten-export) The symbol "KEYBOARD" needs to be exported by the entry point main.d.ts + static addKmxMetadata(kmxplus: KMXPlusData, keyboard: KEYBOARD, options: LdmlCompilerOptions): void; +} + +// @public (undocumented) +export interface LdmlCompilerOptions extends CompilerOptions { + readerOptions: LDMLKeyboardXMLSourceFileReaderOptions; +} + +// @public (undocumented) +export class LdmlKeyboardCompiler implements KeymanCompiler { + compile(source: LDMLKeyboardXMLSourceFile, postValidate?: boolean): Promise; + getUsetParser(): Promise; + // (undocumented) + init(callbacks: CompilerCallbacks, options: LdmlCompilerOptions): Promise; + // Warning: (ae-forgotten-export) The symbol "LDMLKeyboardXMLSourceFile" needs to be exported by the entry point main.d.ts + load(filename: string): LDMLKeyboardXMLSourceFile | null; + loadTestData(filename: string): LDMLKeyboardTestDataXMLSourceFile | null; + // Warning: (ae-forgotten-export) The symbol "LdmlKeyboardCompilerResult" needs to be exported by the entry point main.d.ts + // + // (undocumented) + run(inputFilename: string, outputFilename?: string): Promise; + validate(source: LDMLKeyboardXMLSourceFile): Promise; + // Warning: (ae-forgotten-export) The symbol "LdmlKeyboardCompilerArtifacts" needs to be exported by the entry point main.d.ts + // + // (undocumented) + write(artifacts: LdmlKeyboardCompilerArtifacts): Promise; +} + +// @public (undocumented) +export class LdmlKeyboardCompilerMessages { + // (undocumented) + static ERROR_CantReferenceSetFromUnicodeSet: number; + // (undocumented) + static Error_CantReferenceSetFromUnicodeSet: (o: { + id: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_DisplayIsRepeated: number; + // (undocumented) + static Error_DisplayIsRepeated: (o: { + output?: string; + keyId?: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_DisplayNeedsToOrId: number; + // (undocumented) + static Error_DisplayNeedsToOrId: (o: { + output?: string; + keyId?: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_DuplicateTransformsType: number; + // (undocumented) + static Error_DuplicateTransformsType: (o: { + types: string[]; + }) => CompilerEvent; + // (undocumented) + static ERROR_DuplicateVariable: number; + // (undocumented) + static Error_DuplicateVariable: (o: { + ids: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_EmptyTransformGroup: number; + // (undocumented) + static Error_EmptyTransformGroup: () => CompilerEvent; + // (undocumented) + static ERROR_ExcessHardware: number; + // (undocumented) + static Error_ExcessHardware: (o: { + formId: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_GestureKeyNotFoundInKeyBag: number; + // (undocumented) + static Error_GestureKeyNotFoundInKeyBag: (o: { + keyId: string; + parentKeyId: string; + attribute: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_HardwareLayerHasTooManyRows: number; + // (undocumented) + static Error_HardwareLayerHasTooManyRows: () => CompilerEvent; + // (undocumented) + static ERROR_IllegalCharacters: number; + // (undocumented) + static Error_IllegalCharacters: (o: { + count: number; + lowestCh: number; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidFile: number; + // (undocumented) + static Error_InvalidFile: (o: { + errorText: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidHardware: number; + // (undocumented) + static Error_InvalidHardware: (o: { + formId: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidLocale: number; + // (undocumented) + static Error_InvalidLocale: (o: { + tag: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidModifier: number; + // (undocumented) + static Error_InvalidModifier: (o: { + layer: string; + modifiers: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidQuadEscape: number; + // (undocumented) + static Error_InvalidQuadEscape: (o: { + cp: number; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidScanCode: number; + // (undocumented) + static Error_InvalidScanCode: (o: { + form?: string; + codes?: string[]; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidTransformsType: number; + // (undocumented) + static Error_InvalidTransformsType: (o: { + types: string[]; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidVersion: number; + // (undocumented) + static Error_InvalidVersion: (o: { + version: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_KeyMissingToGapOrSwitch: number; + // (undocumented) + static Error_KeyMissingToGapOrSwitch: (o: { + keyId: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_KeyNotFoundInKeyBag: number; + // (undocumented) + static Error_KeyNotFoundInKeyBag: (o: { + keyId: string; + col: number; + row: number; + layer: string; + form: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_MissingFlicks: number; + // (undocumented) + static Error_MissingFlicks: (o: { + flickId: string; + id: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_MissingMarkers: number; + // (undocumented) + static Error_MissingMarkers: (o: { + ids: string[]; + }) => CompilerEvent; + // (undocumented) + static ERROR_MissingSetVariable: number; + // (undocumented) + static Error_MissingSetVariable: (o: { + id: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_MissingStringVariable: number; + // (undocumented) + static Error_MissingStringVariable: (o: { + id: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_MissingUnicodeSetVariable: number; + // (undocumented) + static Error_MissingUnicodeSetVariable: (o: { + id: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_MixedTransformGroup: number; + // (undocumented) + static Error_MixedTransformGroup: () => CompilerEvent; + // (undocumented) + static ERROR_MustBeAtLeastOneLayerElement: number; + // (undocumented) + static Error_MustBeAtLeastOneLayerElement: () => CompilerEvent; + // (undocumented) + static ERROR_NeedSpacesBetweenSetVariables: number; + // (undocumented) + static Error_NeedSpacesBetweenSetVariables: (o: { + item: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_RowOnHardwareLayerHasTooManyKeys: number; + // (undocumented) + static Error_RowOnHardwareLayerHasTooManyKeys: (o: { + row: number; + hardware: string; + modifiers: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_UnparseableReorderSet: number; + // (undocumented) + static Error_UnparseableReorderSet: (o: { + from: string; + set: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_UnparseableTransformFrom: number; + // (undocumented) + static Error_UnparseableTransformFrom: (o: { + from: string; + message: string; + }) => CompilerEvent; + // (undocumented) + static FATAL_SectionCompilerFailed: number; + // (undocumented) + static Fatal_SectionCompilerFailed: (o: { + sect: string; + }) => CompilerEvent; + // (undocumented) + static HINT_CharClassImplicitDenorm: number; + // (undocumented) + static Hint_CharClassImplicitDenorm: (o: { + lowestCh: number; + }) => CompilerEvent; + // (undocumented) + static HINT_LocaleIsNotMinimalAndClean: number; + // (undocumented) + static Hint_LocaleIsNotMinimalAndClean: (o: { + sourceLocale: string; + locale: string; + }) => CompilerEvent; + // (undocumented) + static HINT_NormalizationDisabled: number; + // (undocumented) + static Hint_NormalizationDisabled: () => CompilerEvent; + // (undocumented) + static HINT_OneOrMoreRepeatedLocales: number; + // (undocumented) + static Hint_OneOrMoreRepeatedLocales: () => CompilerEvent; + // (undocumented) + static HINT_PUACharacters: number; + // (undocumented) + static Hint_PUACharacters: (o: { + count: number; + lowestCh: number; + }) => CompilerEvent; + // (undocumented) + static WARN_CharClassExplicitDenorm: number; + // (undocumented) + static Warn_CharClassExplicitDenorm: (o: { + lowestCh: number; + }) => CompilerEvent; + // (undocumented) + static WARN_CustomForm: number; + // (undocumented) + static Warn_CustomForm: (o: { + id: string; + }) => CompilerEvent; + // (undocumented) + static WARN_UnassignedCharacters: number; + // (undocumented) + static Warn_UnassignedCharacters: (o: { + count: number; + lowestCh: number; + }) => CompilerEvent; +} + +// @public (undocumented) +export class LdmlKeyboardKeymanWebCompiler { + constructor(callbacks: CompilerCallbacks, options?: LdmlCompilerOptions); + // (undocumented) + compile(name: string, source: LDMLKeyboard.LDMLKeyboardXMLSourceFile): string; + // (undocumented) + compileTouchLayout(source: LDMLKeyboard.LDMLKeyboardXMLSourceFile): string; + // (undocumented) + compileVisualKeyboard(source: LDMLKeyboard.LDMLKeyboardXMLSourceFile): string; +} + +// @public (undocumented) +export class LdmlKeyboardVisualKeyboardCompiler { + constructor(callbacks: CompilerCallbacks); + // (undocumented) + compile(source: LDMLKeyboard.LDMLKeyboardXMLSourceFile): VisualKeyboard.VisualKeyboard; +} + +// @public (undocumented) +export class TouchLayoutCompiler { + // (undocumented) + compileToJavascript(source: LDMLKeyboard.LDMLKeyboardXMLSourceFile): TouchLayout.TouchLayoutFile; +} + +// (No @packageDocumentation comment for this package) + +``` diff --git a/developer/docs/api/etc/kmc-model-info.api.md b/developer/docs/api/etc/kmc-model-info.api.md new file mode 100644 index 00000000000..1c933be6691 --- /dev/null +++ b/developer/docs/api/etc/kmc-model-info.api.md @@ -0,0 +1,118 @@ +## API Report File for "@keymanapp/kmc-model-info" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CompilerCallbacks } from '@keymanapp/common-types'; +import { CompilerEvent } from '@keymanapp/common-types'; +import { CompilerOptions } from '@keymanapp/common-types'; +import { KeymanCompiler } from '@keymanapp/common-types'; +import { KeymanCompilerArtifact } from '@keymanapp/common-types'; +import { KeymanCompilerArtifacts } from '@keymanapp/common-types'; +import { KeymanCompilerResult } from '@keymanapp/common-types'; +import { KmpJsonFile } from '@keymanapp/common-types'; + +// @public (undocumented) +export class ModelInfoCompiler implements KeymanCompiler { + constructor(); + // (undocumented) + init(callbacks: CompilerCallbacks, options: ModelInfoCompilerOptions): Promise; + run(inputFilename: string, outputFilename?: string): Promise; + // (undocumented) + write(artifacts: ModelInfoCompilerArtifacts): Promise; +} + +// @public (undocumented) +export interface ModelInfoCompilerArtifacts extends KeymanCompilerArtifacts { + // (undocumented) + model_info: KeymanCompilerArtifact; +} + +// @public (undocumented) +export class ModelInfoCompilerMessages { + // (undocumented) + static ERROR_FileDoesNotExist: number; + // (undocumented) + static Error_FileDoesNotExist: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_FileIsNotValid: number; + // (undocumented) + static Error_FileIsNotValid: (o: { + filename: string; + e: any; + }) => CompilerEvent; + // (undocumented) + static ERROR_InvalidAuthorEmail: number; + // (undocumented) + static Error_InvalidAuthorEmail: (o: { + email: string; + }) => CompilerEvent; + // (undocumented) + static Error_LicenseFileDoesNotExist: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_LicenseFileIsDamaged: number; + // (undocumented) + static Error_LicenseFileIsDamaged: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_LicenseFileIsMissing: number; + // (undocumented) + static ERROR_LicenseIsNotValid: number; + // (undocumented) + static Error_LicenseIsNotValid: (o: { + filename: string; + message: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_NoLicenseFound: number; + // (undocumented) + static Error_NoLicenseFound: () => CompilerEvent; + // (undocumented) + static FATAL_UnexpectedException: number; + // (undocumented) + static Fatal_UnexpectedException: (o: { + e: any; + }) => CompilerEvent; + // (undocumented) + static WARN_MetadataFieldInconsistent: number; + // (undocumented) + static Warn_MetadataFieldInconsistent: (o: { + field: string; + value: any; + expected: any; + }) => CompilerEvent; +} + +// @public (undocumented) +export interface ModelInfoCompilerOptions extends CompilerOptions { + // (undocumented) + sources: ModelInfoSources; +} + +// @public (undocumented) +export interface ModelInfoCompilerResult extends KeymanCompilerResult { + // (undocumented) + artifacts: ModelInfoCompilerArtifacts; +} + +// @public (undocumented) +export class ModelInfoSources { + forPublishing: boolean; + kmpFileName: string; + kmpJsonData: KmpJsonFile.KmpJsonFile; + kpsFilename: string; + lastCommitDate?: string; + model_id: string; + modelFileName: string; + sourcePath: string; +} + +// (No @packageDocumentation comment for this package) + +``` diff --git a/developer/docs/api/etc/kmc-model.api.md b/developer/docs/api/etc/kmc-model.api.md new file mode 100644 index 00000000000..68ef0fd4eda --- /dev/null +++ b/developer/docs/api/etc/kmc-model.api.md @@ -0,0 +1,96 @@ +## API Report File for "@keymanapp/kmc-model" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +/// + +import { CompilerCallbacks } from '@keymanapp/common-types'; +import { CompilerEvent } from '@keymanapp/common-types'; +import { CompilerOptions } from '@keymanapp/common-types'; +import { KeymanCompiler } from '@keymanapp/common-types'; +import { KeymanCompilerArtifact } from '@keymanapp/common-types'; +import { KeymanCompilerArtifacts } from '@keymanapp/common-types'; +import { KeymanCompilerResult } from '@keymanapp/common-types'; + +// @public (undocumented) +export class LexicalModelCompiler implements KeymanCompiler { + generateLexicalModelCode(model_id: string, modelSource: LexicalModelSource, sourcePath: string): string; + // (undocumented) + init(callbacks: CompilerCallbacks, _options: CompilerOptions): Promise; + // Warning: (ae-forgotten-export) The symbol "LexicalModelSource" needs to be exported by the entry point main.d.ts + loadFromFilename(filename: string): LexicalModelSource; + // Warning: (ae-forgotten-export) The symbol "LexicalModelCompilerResult" needs to be exported by the entry point main.d.ts + // + // (undocumented) + run(inputFilename: string, outputFilename?: string): Promise; + // (undocumented) + transpileSources(sources: Array): Array; + // Warning: (ae-forgotten-export) The symbol "LexicalModelCompilerArtifacts" needs to be exported by the entry point main.d.ts + // + // (undocumented) + write(artifacts: LexicalModelCompilerArtifacts): Promise; +} + +// @public (undocumented) +export class ModelCompilerMessages { + // (undocumented) + static ERROR_NoDefaultExport: number; + // (undocumented) + static Error_NoDefaultExport: () => CompilerEvent; + // (undocumented) + static ERROR_SearchTermToKeyMustBeExplicitlySpecified: number; + // (undocumented) + static Error_SearchTermToKeyMustBeExplicitlySpecified: () => CompilerEvent; + // (undocumented) + static ERROR_UnimplementedModelFormat: number; + // (undocumented) + static Error_UnimplementedModelFormat: (o: { + format: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_UnknownModelFormat: number; + // (undocumented) + static Error_UnknownModelFormat: (o: { + format: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_UnknownWordBreaker: number; + // (undocumented) + static Error_UnknownWordBreaker: (o: { + spec: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_UnsupportedScriptOverride: number; + // (undocumented) + static Error_UnsupportedScriptOverride: (o: { + option: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_UTF16BEUnsupported: number; + // (undocumented) + static Error_UTF16BEUnsupported: () => CompilerEvent; + // (undocumented) + static FATAL_UnexpectedException: number; + // (undocumented) + static Fatal_UnexpectedException: (o: { + e: any; + }) => CompilerEvent; + // (undocumented) + static HINT_DuplicateWordInSameFile: number; + // (undocumented) + static Hint_DuplicateWordInSameFile: (o: { + wordform: string; + }) => CompilerEvent; + // (undocumented) + static HINT_MixedNormalizationForms: number; + // (undocumented) + static Hint_MixedNormalizationForms: (o: { + wordform: string; + }) => CompilerEvent; +} + +// (No @packageDocumentation comment for this package) + +``` diff --git a/developer/docs/api/etc/kmc-package.api.md b/developer/docs/api/etc/kmc-package.api.md new file mode 100644 index 00000000000..2601e38f3bd --- /dev/null +++ b/developer/docs/api/etc/kmc-package.api.md @@ -0,0 +1,266 @@ +## API Report File for "@keymanapp/kmc-package" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CompilerCallbacks } from '@keymanapp/common-types'; +import { CompilerEvent } from '@keymanapp/common-types'; +import { CompilerOptions } from '@keymanapp/common-types'; +import { KeymanCompiler } from '@keymanapp/common-types'; +import { KeymanCompilerArtifact } from '@keymanapp/common-types'; +import { KeymanCompilerArtifacts } from '@keymanapp/common-types'; +import { KeymanCompilerResult } from '@keymanapp/common-types'; +import { KmpJsonFile } from '@keymanapp/common-types'; +import { KpsFile } from '@keymanapp/common-types'; + +// @public (undocumented) +export class KmpCompiler implements KeymanCompiler { + buildKmpFile(kpsFilename: string, kmpJsonData: KmpJsonFile.KmpJsonFile): Promise; + // Warning: (ae-forgotten-export) The symbol "KmpCompilerOptions" needs to be exported by the entry point main.d.ts + // + // (undocumented) + init(callbacks: CompilerCallbacks, options: KmpCompilerOptions): Promise; + // (undocumented) + loadKpsFile(kpsFilename: string): KpsFile.KpsFile; + // Warning: (ae-forgotten-export) The symbol "KmpCompilerResult" needs to be exported by the entry point main.d.ts + // + // (undocumented) + run(inputFilename: string, outputFilename?: string): Promise; + // (undocumented) + transformKpsFileToKmpObject(kpsFilename: string, kps: KpsFile.KpsFile): KmpJsonFile.KmpJsonFile; + // (undocumented) + transformKpsToKmpObject(kpsFilename: string): KmpJsonFile.KmpJsonFile; + // Warning: (ae-forgotten-export) The symbol "KmpCompilerArtifacts" needs to be exported by the entry point main.d.ts + // + // (undocumented) + write(artifacts: KmpCompilerArtifacts): Promise; +} + +// @public (undocumented) +export class PackageCompilerMessages { + // (undocumented) + static ERROR_FileCouldNotBeRead: number; + // (undocumented) + static Error_FileCouldNotBeRead: (o: { + filename: string; + e: any; + }) => CompilerEvent; + // (undocumented) + static ERROR_FileDoesNotExist: number; + // (undocumented) + static Error_FileDoesNotExist: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_FollowKeyboardVersionButNoKeyboards: number; + // (undocumented) + static Error_FollowKeyboardVersionButNoKeyboards: () => CompilerEvent; + // (undocumented) + static ERROR_FollowKeyboardVersionNotAllowedForModelPackages: number; + // (undocumented) + static Error_FollowKeyboardVersionNotAllowedForModelPackages: () => CompilerEvent; + // (undocumented) + static ERROR_InvalidPackageFile: number; + // (undocumented) + static Error_InvalidPackageFile: (o: { + e: any; + }) => CompilerEvent; + // (undocumented) + static ERROR_KeyboardContentFileNotFound: number; + // (undocumented) + static Error_KeyboardContentFileNotFound: (o: { + id: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_KeyboardFileNotFound: number; + // (undocumented) + static Error_KeyboardFileNotFound: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_KeyboardFileNotValid: number; + // (undocumented) + static Error_KeyboardFileNotValid: (o: { + filename: string; + e: any; + }) => CompilerEvent; + // (undocumented) + static ERROR_LanguageTagIsNotValid: number; + // (undocumented) + static Error_LanguageTagIsNotValid: (o: { + resourceType: string; + id: string; + lang: string; + e: any; + }) => CompilerEvent; + // (undocumented) + static ERROR_ModelMustHaveAtLeastOneLanguage: number; + // (undocumented) + static Error_ModelMustHaveAtLeastOneLanguage: (o: { + id: string; + }) => CompilerEvent; + // (undocumented) + static ERROR_PackageCannotContainBothModelsAndKeyboards: number; + // (undocumented) + static Error_PackageCannotContainBothModelsAndKeyboards: () => CompilerEvent; + // (undocumented) + static ERROR_PackageMustContainAModelOrAKeyboard: number; + // (undocumented) + static Error_PackageMustContainAModelOrAKeyboard: () => CompilerEvent; + // (undocumented) + static ERROR_PackageNameCannotBeBlank: number; + // (undocumented) + static Error_PackageNameCannotBeBlank: () => CompilerEvent; + // (undocumented) + static FATAL_UnexpectedException: number; + // (undocumented) + static Fatal_UnexpectedException: (o: { + e: any; + }) => CompilerEvent; + // (undocumented) + static HINT_JsKeyboardFileHasNoTouchTargets: number; + // (undocumented) + static Hint_JsKeyboardFileHasNoTouchTargets: (o: { + id: string; + }) => CompilerEvent; + // (undocumented) + static HINT_LanguageTagIsNotMinimal: number; + // (undocumented) + static Hint_LanguageTagIsNotMinimal: (o: { + resourceType: string; + id: string; + actual: string; + expected: string; + }) => CompilerEvent; + // (undocumented) + static HINT_PackageContainsSourceFile: number; + // (undocumented) + static Hint_PackageContainsSourceFile: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static HINT_PackageShouldNotRepeatLanguages: number; + // (undocumented) + static Hint_PackageShouldNotRepeatLanguages: (o: { + resourceType: string; + id: string; + minimalTag: string; + firstTag: string; + secondTag: string; + }) => CompilerEvent; + // (undocumented) + static INFO_KeyboardFileHasNoKeyboardVersion: number; + // (undocumented) + static Info_KeyboardFileHasNoKeyboardVersion: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static WARN_AbsolutePath: number; + // (undocumented) + static Warn_AbsolutePath: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static WARN_DocFileDangerous: number; + // (undocumented) + static Warn_DocFileDangerous: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static WARN_FileInPackageDoesNotFollowFilenameConventions: number; + // (undocumented) + static Warn_FileInPackageDoesNotFollowFilenameConventions: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static WARN_FileIsNotABinaryKvkFile: number; + // (undocumented) + static Warn_FileIsNotABinaryKvkFile: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static WARN_JsKeyboardFileIsMissing: number; + // (undocumented) + static Warn_JsKeyboardFileIsMissing: (o: { + id: string; + }) => CompilerEvent; + // (undocumented) + static WARN_KeyboardShouldHaveAtLeastOneLanguage: number; + // (undocumented) + static Warn_KeyboardShouldHaveAtLeastOneLanguage: (o: { + id: string; + }) => CompilerEvent; + // (undocumented) + static WARN_KeyboardVersionsDoNotMatch: number; + // (undocumented) + static Warn_KeyboardVersionsDoNotMatch: (o: { + keyboard: string; + version: string; + firstKeyboard: string; + firstVersion: string; + }) => CompilerEvent; + // (undocumented) + static WARN_PackageNameDoesNotFollowKeyboardConventions: number; + // (undocumented) + static Warn_PackageNameDoesNotFollowKeyboardConventions: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static WARN_PackageNameDoesNotFollowLexicalModelConventions: number; + // (undocumented) + static Warn_PackageNameDoesNotFollowLexicalModelConventions: (o: { + filename: string; + }) => CompilerEvent; + // (undocumented) + static WARN_RedistFileShouldNotBeInPackage: number; + // (undocumented) + static Warn_RedistFileShouldNotBeInPackage: (o: { + filename: string; + }) => CompilerEvent; +} + +// @public (undocumented) +export class PackageValidation { + constructor(callbacks: CompilerCallbacks, options: CompilerOptions); + // (undocumented) + validate(filename: string, kmpJson: KmpJsonFile.KmpJsonFile): boolean; +} + +// @public (undocumented) +export class WindowsPackageInstallerCompiler implements KeymanCompiler { + // Warning: (ae-forgotten-export) The symbol "WindowsPackageInstallerCompilerOptions" needs to be exported by the entry point main.d.ts + // + // (undocumented) + init(callbacks: CompilerCallbacks, options: WindowsPackageInstallerCompilerOptions): Promise; + // Warning: (ae-forgotten-export) The symbol "WindowsPackageInstallerCompilerResult" needs to be exported by the entry point main.d.ts + // + // (undocumented) + run(inputFilename: string, outputFilename?: string): Promise; + // Warning: (ae-forgotten-export) The symbol "WindowsPackageInstallerCompilerArtifacts" needs to be exported by the entry point main.d.ts + // + // (undocumented) + write(artifacts: WindowsPackageInstallerCompilerArtifacts): Promise; +} + +// @public (undocumented) +export interface WindowsPackageInstallerSources { + // (undocumented) + appName?: string; + // (undocumented) + licenseFilename: string; + // (undocumented) + msiFilename: string; + // (undocumented) + setupExeFilename: string; + // (undocumented) + startDisabled: boolean; + // (undocumented) + startWithConfiguration: boolean; + // (undocumented) + titleImageFilename?: string; +} + +// (No @packageDocumentation comment for this package) + +``` From 70a50f0f6714dd4a1bed01ee1718cc54b5092bb2 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Mon, 26 Feb 2024 14:56:09 +0700 Subject: [PATCH 132/171] refactor(developer): move osk module from common-types to developer-utils This module is used only by Keyman Developer compiler. It was originally in common-types because we didn't have a shared module for Developer. Moving it to @keymanapp/developer-utils in order to improve its documentation. --- common/web/types/src/main.ts | 2 - developer/src/common/web/utils/index.ts | 1 + .../src/common/web/utils/src}/osk.ts | 37 ++++++++++++------- developer/src/kmc-analyze/package.json | 1 + .../src/osk-character-use/index.ts | 3 +- .../kmc-analyze/src/osk-rewrite-pua/index.ts | 3 +- developer/src/kmc-analyze/tsconfig.json | 2 + developer/src/kmc-kmn/package.json | 1 + .../src/kmc-kmn/src/compiler/compiler.ts | 3 +- .../src/kmw-compiler/validate-layout-file.ts | 4 +- developer/src/kmc-kmn/tsconfig.json | 2 + package-lock.json | 2 + 12 files changed, 40 insertions(+), 21 deletions(-) rename {common/web/types/src/osk => developer/src/common/web/utils/src}/osk.ts (58%) diff --git a/common/web/types/src/main.ts b/common/web/types/src/main.ts index d36c13a240d..b91671e87ef 100644 --- a/common/web/types/src/main.ts +++ b/common/web/types/src/main.ts @@ -54,7 +54,5 @@ export * as util from './util/util.js'; export * as KeymanFileTypes from './util/file-types.js'; -export * as Osk from './osk/osk.js'; - export * as Schemas from './schemas.js'; export * as SchemaValidators from './schema-validators.js'; \ No newline at end of file diff --git a/developer/src/common/web/utils/index.ts b/developer/src/common/web/utils/index.ts index f4414f1e44f..0241bd068c8 100644 --- a/developer/src/common/web/utils/index.ts +++ b/developer/src/common/web/utils/index.ts @@ -1,3 +1,4 @@ export { validateMITLicense } from './src/validate-mit-license.js'; export { KeymanSentry } from './src/KeymanSentry.js'; export { getOption, loadOptions, clearOptions } from './src/options.js'; +export * as Osk from './src/osk.js'; diff --git a/common/web/types/src/osk/osk.ts b/developer/src/common/web/utils/src/osk.ts similarity index 58% rename from common/web/types/src/osk/osk.ts rename to developer/src/common/web/utils/src/osk.ts index 07f9b05908c..8b39ca595cf 100644 --- a/common/web/types/src/osk/osk.ts +++ b/developer/src/common/web/utils/src/osk.ts @@ -1,6 +1,6 @@ -import { TouchLayoutFile, TouchLayoutFlick, TouchLayoutKey, TouchLayoutPlatform, TouchLayoutSubKey } from "../keyman-touch-layout/keyman-touch-layout-file.js"; -import { VisualKeyboard } from "../kvk/visual-keyboard.js"; -import SchemaValidators from "../schema-validators.js"; +import { TouchLayout } from "@keymanapp/common-types"; +import { VisualKeyboard } from "@keymanapp/common-types"; +import { SchemaValidators } from "@keymanapp/common-types"; export interface StringRefUsage { filename: string; @@ -12,20 +12,29 @@ export interface StringRef { usages: StringRefUsage[]; }; +/** + * Represents a single key cap found by `AnalyzeOskCharacterUse` + */ export interface StringResult { - str: string; // the key cap string - unicode: string; // unicode code points in for reference - pua: string; // hexadecimal single character in PUA range - usages: StringRefUsage[] | string[]; // files in which the string is referenced + /** the key cap string */ + str: string; + /** unicode code points in for reference, without 'U+' prefix, e.g. '0061 0301' */ + unicode: string; + /** hexadecimal single character in PUA range, without 'U+' prefix, e.g. 'F100' */ + pua: string; + /** files in which the string is referenced; will be an array of + * {@link StringRefUsage} if includeCounts is true, otherwise will be an array + * of strings listing files in which the key cap may be found */ + usages: StringRefUsage[] | string[]; }; export type PuaMap = {[index:string]: string}; export function parseMapping(mapping: any) { - if(!SchemaValidators.displayMap(mapping)) + if(!SchemaValidators.default.displayMap(mapping)) /* c8 ignore next 3 */ { - throw new Error(JSON.stringify((SchemaValidators.displayMap).errors)); + throw new Error(JSON.stringify((SchemaValidators.default.displayMap).errors)); } let map: PuaMap = {}; @@ -51,7 +60,7 @@ function remap(text: string, map: PuaMap) { return text; } -export function remapVisualKeyboard(vk: VisualKeyboard, map: PuaMap): boolean { +export function remapVisualKeyboard(vk: VisualKeyboard.VisualKeyboard, map: PuaMap): boolean { let dirty = false; for(let key of vk.keys) { if(!key.text) { @@ -64,9 +73,9 @@ export function remapVisualKeyboard(vk: VisualKeyboard, map: PuaMap): boolean { return dirty; } -export function remapTouchLayout(source: TouchLayoutFile, map: PuaMap) { +export function remapTouchLayout(source: TouchLayout.TouchLayoutFile, map: PuaMap) { let dirty = false; - const scanKey = (key: TouchLayoutKey | TouchLayoutSubKey) => { + const scanKey = (key: TouchLayout.TouchLayoutKey | TouchLayout.TouchLayoutSubKey) => { if(!key.text) { return; } @@ -79,7 +88,7 @@ export function remapTouchLayout(source: TouchLayoutFile, map: PuaMap) { key.text = text; } - const scanPlatform = (platform: TouchLayoutPlatform) => { + const scanPlatform = (platform: TouchLayout.TouchLayoutPlatform) => { if(!platform) { return; } @@ -87,7 +96,7 @@ export function remapTouchLayout(source: TouchLayoutFile, map: PuaMap) { for(let row of layer.row) { for(let key of row.key) { scanKey(key); - let f: keyof TouchLayoutFlick; + let f: keyof TouchLayout.TouchLayoutFlick; for(f in key.flick ?? {}) { scanKey(key.flick[f]); } diff --git a/developer/src/kmc-analyze/package.json b/developer/src/kmc-analyze/package.json index 971c4d579aa..73d77c4d0af 100644 --- a/developer/src/kmc-analyze/package.json +++ b/developer/src/kmc-analyze/package.json @@ -24,6 +24,7 @@ ], "dependencies": { "@keymanapp/common-types": "*", + "@keymanapp/developer-utils": "*", "@keymanapp/kmc-kmn": "*" }, "devDependencies": { diff --git a/developer/src/kmc-analyze/src/osk-character-use/index.ts b/developer/src/kmc-analyze/src/osk-character-use/index.ts index dd666d9a8e2..55832b25a13 100644 --- a/developer/src/kmc-analyze/src/osk-character-use/index.ts +++ b/developer/src/kmc-analyze/src/osk-character-use/index.ts @@ -1,5 +1,6 @@ -import { CompilerCallbacks, KeymanFileTypes, KvksFile, KvksFileReader, Osk, TouchLayout, TouchLayoutFileReader } from "@keymanapp/common-types"; +import { CompilerCallbacks, KeymanFileTypes, KvksFile, KvksFileReader, TouchLayout, TouchLayoutFileReader } from "@keymanapp/common-types"; import { CompilerMessages } from '@keymanapp/kmc-kmn'; +import { Osk } from '@keymanapp/developer-utils'; import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js"; import { AnalyzerMessages } from "../messages.js"; diff --git a/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts b/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts index 5cdd6345ee4..f748f80964f 100644 --- a/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts +++ b/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts @@ -1,4 +1,5 @@ -import { CompilerCallbacks, KeymanFileTypes, KvksFile, KvksFileReader, KvksFileWriter, Osk, TouchLayoutFileReader, TouchLayoutFileWriter } from "@keymanapp/common-types"; +import { CompilerCallbacks, KeymanFileTypes, KvksFile, KvksFileReader, KvksFileWriter, TouchLayoutFileReader, TouchLayoutFileWriter } from "@keymanapp/common-types"; +import { Osk } from '@keymanapp/developer-utils'; import { CompilerMessages } from '@keymanapp/kmc-kmn'; import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js"; import { AnalyzerMessages } from "../messages.js"; diff --git a/developer/src/kmc-analyze/tsconfig.json b/developer/src/kmc-analyze/tsconfig.json index 26a564d5b76..30b4149bcf9 100644 --- a/developer/src/kmc-analyze/tsconfig.json +++ b/developer/src/kmc-analyze/tsconfig.json @@ -8,6 +8,7 @@ "paths": { "@keymanapp/common-types": [ "../../../common/web/types/src/main" ], "@keymanapp/kmc-kmn": [ "../kmc-kmn/src/main" ], + "@keymanapp/developer-utils": ["../common/web/utils/index"], }, }, "include": [ @@ -16,5 +17,6 @@ "references": [ { "path": "../../../common/web/types" }, { "path": "../kmc-kmn" }, + { "path": "../common/web/utils/" }, ] } diff --git a/developer/src/kmc-kmn/package.json b/developer/src/kmc-kmn/package.json index b4b97cbfd45..7ce7f0f99d1 100644 --- a/developer/src/kmc-kmn/package.json +++ b/developer/src/kmc-kmn/package.json @@ -27,6 +27,7 @@ }, "dependencies": { "@keymanapp/keyman-version": "*", + "@keymanapp/developer-utils": "*", "@keymanapp/kmc-kmn": "*" }, "devDependencies": { diff --git a/developer/src/kmc-kmn/src/compiler/compiler.ts b/developer/src/kmc-kmn/src/compiler/compiler.ts index 8b1b76f0b41..c7a25f64e7c 100644 --- a/developer/src/kmc-kmn/src/compiler/compiler.ts +++ b/developer/src/kmc-kmn/src/compiler/compiler.ts @@ -6,8 +6,9 @@ TODO: implement additional interfaces: */ // TODO: rename wasm-host? -import { UnicodeSetParser, UnicodeSet, Osk, VisualKeyboard, KvkFileReader, KeymanCompiler, KeymanCompilerArtifacts, KeymanCompilerArtifactOptional, KeymanCompilerResult, KeymanCompilerArtifact } from '@keymanapp/common-types'; +import { UnicodeSetParser, UnicodeSet, VisualKeyboard, KvkFileReader, KeymanCompiler, KeymanCompilerArtifacts, KeymanCompilerArtifactOptional, KeymanCompilerResult, KeymanCompilerArtifact } from '@keymanapp/common-types'; import { CompilerCallbacks, CompilerEvent, CompilerOptions, KeymanFileTypes, KvkFileWriter, KvksFileReader } from '@keymanapp/common-types'; +import { Osk } from '@keymanapp/developer-utils'; import loadWasmHost from '../import/kmcmplib/wasm-host.js'; import { CompilerMessages, mapErrorFromKmcmplib } from './kmn-compiler-messages.js'; import { WriteCompiledKeyboard } from '../kmw-compiler/kmw-compiler.js'; diff --git a/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts b/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts index 86dd8cc82ac..a8005d2a46e 100644 --- a/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts +++ b/developer/src/kmc-kmn/src/kmw-compiler/validate-layout-file.ts @@ -1,10 +1,10 @@ -import { KMX, Osk, TouchLayout, TouchLayoutFileReader, TouchLayoutFileWriter } from "@keymanapp/common-types"; +import { KMX, TouchLayout, TouchLayoutFileReader, TouchLayoutFileWriter } from "@keymanapp/common-types"; import { callbacks, fk, IsKeyboardVersion14OrLater, IsKeyboardVersion15OrLater, IsKeyboardVersion17OrLater } from "./compiler-globals.js"; import { JavaScript_Key } from "./javascript-strings.js"; import { TRequiredKey, CRequiredKeys, CSpecialText, CSpecialText14Map, CSpecialText17Map, CSpecialTextMinVer, CSpecialTextMaxVer } from "./constants.js"; import { KeymanWebTouchStandardKeyNames, KMWAdditionalKeyNames, VKeyNames } from "./keymanweb-key-codes.js"; import { KmwCompilerMessages } from "./kmw-compiler-messages.js"; - +import { Osk } from '@keymanapp/developer-utils'; interface VLFOutput { output: string; diff --git a/developer/src/kmc-kmn/tsconfig.json b/developer/src/kmc-kmn/tsconfig.json index 98bdeda3ede..0aa22586108 100644 --- a/developer/src/kmc-kmn/tsconfig.json +++ b/developer/src/kmc-kmn/tsconfig.json @@ -9,6 +9,7 @@ "preserveConstEnums": true, "paths": { "@keymanapp/common-types": ["../../../common/web/types/src/main"], + "@keymanapp/developer-utils": ["../common/web/utils/index"], }, }, @@ -19,5 +20,6 @@ "references": [ { "path": "../../../common/web/keyman-version/tsconfig.json" }, { "path": "../../../common/web/types/" }, + { "path": "../common/web/utils/" }, ] } diff --git a/package-lock.json b/package-lock.json index 3d0c7516807..53210ea5537 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1012,6 +1012,7 @@ "license": "MIT", "dependencies": { "@keymanapp/common-types": "*", + "@keymanapp/developer-utils": "*", "@keymanapp/kmc-kmn": "*" }, "devDependencies": { @@ -1499,6 +1500,7 @@ "name": "@keymanapp/kmc-kmn", "license": "MIT", "dependencies": { + "@keymanapp/developer-utils": "*", "@keymanapp/keyman-version": "*", "@keymanapp/kmc-kmn": "*" }, From 1d18ed41e43bc84697ba717522aac06933919d73 Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Fri, 23 Feb 2024 11:49:37 +0100 Subject: [PATCH 133/171] chore(linux): Fix autopkg tests Recent changes removed the `km_core_context` struct which caused the autopkg tests to fail. --- linux/debian/tests/test-build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linux/debian/tests/test-build b/linux/debian/tests/test-build index cdd20dc68e6..22ff42a2efb 100644 --- a/linux/debian/tests/test-build +++ b/linux/debian/tests/test-build @@ -12,7 +12,7 @@ cd "$WORKDIR" # Test all include files are available cat < keymantest.c #include -km_core_context* c; +km_core_actions* c; EOF # shellcheck disable=SC2046 @@ -22,7 +22,7 @@ echo "build 1: OK" # Test pkg-config file - include without path cat < keymantest.c #include -km_core_context* c; +km_core_actions* c; EOF # shellcheck disable=SC2046 From 9b4673e8a920935494d93cb7a57fd6737ae3842a Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Fri, 23 Feb 2024 15:45:28 +0100 Subject: [PATCH 134/171] chore(linux): Update debian changelog --- linux/debian/changelog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/linux/debian/changelog b/linux/debian/changelog index 0f50fdc4c98..ae731603dc8 100644 --- a/linux/debian/changelog +++ b/linux/debian/changelog @@ -1,3 +1,11 @@ +keyman (17.0.274-1) unstable; urgency=medium + + * Fix autopkg tests + * New upstream release. + * Re-release to Debian + + -- Eberhard Beilharz Fri, 23 Feb 2024 15:45:13 +0100 + keyman (17.0.272-1) unstable; urgency=medium * New upstream release. From 5eb6eb54e1b4848bae4a653d2cb6c2d7d42a8f9d Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Mon, 26 Feb 2024 12:02:32 +0000 Subject: [PATCH 135/171] chore(developer): focus HINT_ProjectIsVersion10 test on just that message --- .../src/kmc/test/test-infrastructureMessages.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index cef991cc72e..672ecf31a75 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -211,17 +211,9 @@ describe('InfrastructureMessages', function () { it('should generate HINT_ProjectIsVersion10 if a project file is not version 2.0', async function() { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); const filename = makePathToFixture('kpj-1.0', 'hint_project_is_version_10.kpj'); - const expectedMessages = [ - InfrastructureMessages.INFO_BuildingFile, - InfrastructureMessages.HINT_ProjectIsVersion10, - InfrastructureMessages.INFO_BuildingFile, //kmn - InfrastructureMessages.INFO_FileBuiltSuccessfully, - InfrastructureMessages.INFO_BuildingFile, //kps - InfrastructureMessages.INFO_FileBuiltSuccessfully, - InfrastructureMessages.INFO_ProjectBuiltSuccessfully - ]; await unitTestEndpoints.build(filename, null, ncb, {}); - assertMessagesEqual(ncb.messages, expectedMessages); + assert.isTrue(ncb.hasMessage(InfrastructureMessages.HINT_ProjectIsVersion10), + 'HINT_ProjectIsVersion10 not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); }); From 5e64ddbf571bd910645e6f5d94987283b4cfa83c Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Mon, 26 Feb 2024 12:07:40 +0000 Subject: [PATCH 136/171] chore(developer): suppress code coverage check on Error_OutFileCanOnlyBeSpecifiedWithSingleInfile --- developer/src/kmc/src/commands/build.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/developer/src/kmc/src/commands/build.ts b/developer/src/kmc/src/commands/build.ts index 5150e76f339..9e73572795e 100644 --- a/developer/src/kmc/src/commands/build.ts +++ b/developer/src/kmc/src/commands/build.ts @@ -91,6 +91,8 @@ async function buildFile(filenames: string[], _options: any, commander: any) { filenames.push('.'); } + /* c8 ignore next 6 */ + // full test on console log of error message not justified; check with user test recommended if(filenames.length > 1 && commanderOptions.outFile) { // -o can only be specified with a single input file callbacks.reportMessage(InfrastructureMessages.Error_OutFileCanOnlyBeSpecifiedWithSingleInfile()); From edc73f35f0a15557b4c00c08aa8e9ca27c8395c0 Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Mon, 26 Feb 2024 13:04:04 -0500 Subject: [PATCH 137/171] auto: increment beta version to 17.0.277 --- HISTORY.md | 4 ++++ VERSION.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 1e52dbd8269..c2521f77e07 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,9 @@ # Keyman Version History +## 17.0.276 beta 2024-02-26 + +* chore(linux): Fix autopkg tests (#10824) + ## 17.0.275 beta 2024-02-23 * (#10791) diff --git a/VERSION.md b/VERSION.md index b750f8a6894..93b8a082a0d 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.276 \ No newline at end of file +17.0.277 \ No newline at end of file From 845a6fe501f400839c1c0478338d68a422d6e765 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Wed, 21 Feb 2024 18:50:44 -0600 Subject: [PATCH 138/171] fix(developer): exit kmc test data generation if any failure messages - check for failing messages in the callback, not just failing compiles (no output) Fixes: #10752 Co-authored-by: Marc Durdin --- developer/src/kmc/src/commands/buildTestData/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/developer/src/kmc/src/commands/buildTestData/index.ts b/developer/src/kmc/src/commands/buildTestData/index.ts index 2f19bf17a2e..6e598954c10 100644 --- a/developer/src/kmc/src/commands/buildTestData/index.ts +++ b/developer/src/kmc/src/commands/buildTestData/index.ts @@ -21,10 +21,10 @@ export async function buildTestData(infile: string, _options: any, commander: an } }; - const callbacks: CompilerCallbacks = new NodeCompilerCallbacks(options); + const callbacks = new NodeCompilerCallbacks(options); let testData = await loadTestData(infile, callbacks, compilerOptions); - if (!testData) { + if (!testData || callbacks.hasFailureMessage()) { await exitProcess(1); } From 4319d30ca3327207892cf9970919dd2c90dc687a Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 27 Feb 2024 15:28:19 +1100 Subject: [PATCH 139/171] chore: Update developer/src/kmc/README.md Co-authored-by: Darcy Wong --- developer/src/kmc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developer/src/kmc/README.md b/developer/src/kmc/README.md index 36477766506..2d00c8fa2f0 100644 --- a/developer/src/kmc/README.md +++ b/developer/src/kmc/README.md @@ -7,7 +7,7 @@ toolchain, `kmc`. ## Install kmc `kmc` is available as: -* a part of Keyman Developer (Windows) +* a part of Keyman Developer (Windows only) * an npm package, and * a zip download From 1fe67bbd2a97f738221ba8d5366760d580569f0b Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 27 Feb 2024 15:29:14 +1100 Subject: [PATCH 140/171] chore: Update developer/build.sh --- developer/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/developer/build.sh b/developer/build.sh index 72ea220d2d6..29a163016fb 100755 --- a/developer/build.sh +++ b/developer/build.sh @@ -48,9 +48,9 @@ builder_run_action configure cp "$KEYMAN_ROOT/common/resources/fonts/keymanweb-o builder_run_child_actions clean configure build test api -function build_docs() { +function build_api() { api-documenter markdown -i ./build/api -o ./build/docs # TODO: Copy to help.keyman.com and open PR } -builder_run_action api build_docs +builder_run_action api build_api From 212922dab624acc640463e23ebb1866d53dde27d Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 27 Feb 2024 15:33:38 +1100 Subject: [PATCH 141/171] chore: Update developer/src/kmc/README.md --- developer/src/kmc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/developer/src/kmc/README.md b/developer/src/kmc/README.md index 2d00c8fa2f0..5e5183bff5e 100644 --- a/developer/src/kmc/README.md +++ b/developer/src/kmc/README.md @@ -100,7 +100,7 @@ km-package-install -f build/khmer_angkor.kmp **macOS**: open Keyman Configuration and drop the package khmer_angkor.kmp file onto the Keyman Configuration window. -**Android**: send khmer_angkor.kmp to your Android device, and install it from the +**Android**: send khmer_angkor.kmp to your Android device, and [install it](https://help.keyman.com/products/android/current-version/basic/installing-custom-packages) from the hamburger menu in the Keyman app. **iOS**: send khmer_angkor.kmp to your iOS device, and install it from the From 413c26c9341b668d7615632e4d657c8c30888185 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 27 Feb 2024 12:06:11 +0700 Subject: [PATCH 142/171] docs(developer): add documentation for kmc-analyze Relates to #10207. --- developer/docs/api/etc/kmc-analyze.api.md | 31 +++++----- developer/docs/api/etc/kmc-kmn.api.md | 2 +- developer/src/kmc-analyze/src/index.ts | 5 +- developer/src/kmc-analyze/src/messages.ts | 18 +++++- .../src/osk-character-use/index.ts | 61 +++++++++++++++++++ .../kmc-analyze/src/osk-rewrite-pua/index.ts | 25 ++++++++ 6 files changed, 121 insertions(+), 21 deletions(-) diff --git a/developer/docs/api/etc/kmc-analyze.api.md b/developer/docs/api/etc/kmc-analyze.api.md index c2b911a4506..91fbf7f1f12 100644 --- a/developer/docs/api/etc/kmc-analyze.api.md +++ b/developer/docs/api/etc/kmc-analyze.api.md @@ -6,47 +6,46 @@ import { CompilerCallbacks } from '@keymanapp/common-types'; import { CompilerEvent } from '@keymanapp/common-types'; -import { Osk } from '@keymanapp/common-types'; +import { Osk } from '@keymanapp/developer-utils'; -// @public (undocumented) +// @public export class AnalyzeOskCharacterUse { - // Warning: (ae-forgotten-export) The symbol "AnalyzeOskCharacterUseOptions" needs to be exported by the entry point index.d.ts constructor(callbacks: CompilerCallbacks, options?: AnalyzeOskCharacterUseOptions); analyze(file: string): Promise; clear(): void; getStrings(format?: '.txt' | '.md' | '.json'): string[]; } -// @public (undocumented) +// @public +export interface AnalyzeOskCharacterUseOptions { + includeCounts?: boolean; + puaBase?: number; + stripDottedCircle?: boolean; +} + +// @public export class AnalyzeOskRewritePua { constructor(callbacks: CompilerCallbacks); - // (undocumented) analyze(file: string, mapping: Osk.StringResult[]): Promise; - // (undocumented) clear(): void; - // (undocumented) get data(): { [index: string]: Uint8Array; }; } -// @public (undocumented) +// @public export class AnalyzerMessages { - // (undocumented) - static FATAL_UnexpectedException: number; - // (undocumented) + static readonly FATAL_UnexpectedException: number; + // @internal (undocumented) static Fatal_UnexpectedException: (o: { e: any; }) => CompilerEvent; - // (undocumented) - static INFO_ScanningFile: number; - // (undocumented) + static readonly INFO_ScanningFile: number; + // @internal (undocumented) static Info_ScanningFile: (o: { type: string; name: string; }) => CompilerEvent; } -// (No @packageDocumentation comment for this package) - ``` diff --git a/developer/docs/api/etc/kmc-kmn.api.md b/developer/docs/api/etc/kmc-kmn.api.md index b1faead0839..5950430d0bf 100644 --- a/developer/docs/api/etc/kmc-kmn.api.md +++ b/developer/docs/api/etc/kmc-kmn.api.md @@ -11,7 +11,7 @@ import { KeymanCompiler } from '@keymanapp/common-types'; import { KeymanCompilerArtifactOptional } from '@keymanapp/common-types'; import { KeymanCompilerArtifacts } from '@keymanapp/common-types'; import { KeymanCompilerResult } from '@keymanapp/common-types'; -import { Osk } from '@keymanapp/common-types'; +import { Osk } from '@keymanapp/developer-utils'; import { UnicodeSet } from '@keymanapp/common-types'; import { UnicodeSetParser } from '@keymanapp/common-types'; diff --git a/developer/src/kmc-analyze/src/index.ts b/developer/src/kmc-analyze/src/index.ts index 6717654ee03..c0999f43160 100644 --- a/developer/src/kmc-analyze/src/index.ts +++ b/developer/src/kmc-analyze/src/index.ts @@ -1,7 +1,8 @@ /** - * osk-char-use - get list of characters used in on screen keyboard + touch layout + * @packageDocumentation + * kmc-analyze - keyboard analysis classes, including tools for `&displayMap`. */ -export { AnalyzeOskCharacterUse } from './osk-character-use/index.js'; +export { AnalyzeOskCharacterUse, AnalyzeOskCharacterUseOptions } from './osk-character-use/index.js'; export { AnalyzeOskRewritePua } from './osk-rewrite-pua/index.js'; export { AnalyzerMessages } from './messages.js'; \ No newline at end of file diff --git a/developer/src/kmc-analyze/src/messages.ts b/developer/src/kmc-analyze/src/messages.ts index a800fb944a0..d3596099d39 100644 --- a/developer/src/kmc-analyze/src/messages.ts +++ b/developer/src/kmc-analyze/src/messages.ts @@ -7,11 +7,25 @@ const SevInfo = CompilerErrorSeverity.Info | Namespace; // const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; +/** + * @public + * Compiler messages for `kmc analyze` + */ export class AnalyzerMessages { + /** @internal */ static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); - static FATAL_UnexpectedException = SevFatal | 0x0001; + /** + * Raised when the compiler experiences an internal error. These should be + * reported to the Keyman team for resolution via + * https://github.com/keymanapp/keyman/issues/new + */ + static readonly FATAL_UnexpectedException = SevFatal | 0x0001; + /** @internal */ static Info_ScanningFile = (o:{type: string, name: string}) => m(this.INFO_ScanningFile, `Scanning ${o.type} file ${o.name}`); - static INFO_ScanningFile = SevInfo | 0x0002; + /** + * Informative message reporting on the current file being scanned + */ + static readonly INFO_ScanningFile = SevInfo | 0x0002; }; diff --git a/developer/src/kmc-analyze/src/osk-character-use/index.ts b/developer/src/kmc-analyze/src/osk-character-use/index.ts index 55832b25a13..7ad1a76e563 100644 --- a/developer/src/kmc-analyze/src/osk-character-use/index.ts +++ b/developer/src/kmc-analyze/src/osk-character-use/index.ts @@ -7,9 +7,24 @@ import { AnalyzerMessages } from "../messages.js"; type StringRefUsageMap = {[index:string]: Osk.StringRefUsage[]}; +/** + * @public + * Options for character analysis + */ export interface AnalyzeOskCharacterUseOptions { + /** + * First character to use in PUA for remapping with &displayMap, defaults to + * U+F100 + */ puaBase?: number; + /** + * If true, strips U+25CC from the key cap before further analysis + */ stripDottedCircle?: boolean; + /** + * If true, reports number of references to each character found in each + * source file + */ includeCounts?: boolean; } @@ -19,6 +34,11 @@ const defaultOptions: AnalyzeOskCharacterUseOptions = { includeCounts: false, } +/** + * @public + * Analyze the characters used in On Screen Keyboard files (.kvks, + * .keyman-touch-layout) for use with `&displayMap`. + */ export class AnalyzeOskCharacterUse { private _strings: StringRefUsageMap = {}; private options: AnalyzeOskCharacterUseOptions; @@ -27,6 +47,10 @@ export class AnalyzeOskCharacterUse { this.options = {...defaultOptions, ...options}; } + /** + * Clears analysis data collected from previous calls to + * {@link AnalyzeOskCharacterUse.analyze} + */ public clear() { this._strings = {}; } @@ -35,6 +59,19 @@ export class AnalyzeOskCharacterUse { // Analyze a single file // + /** + * Analyzes a single source file for Unicode character usage. Can parse .kmn, + * .kvks, .keyman-touch-layout file formats. Can be called multiple times to + * collect results from more than one file. Use + * {@link AnalyzeOskCharacterUse.getStrings} to retrieve results. + * + * Note: `analyze()` collects key cap data, so calling this for a .kmn file + * will retrieve the key caps from the .kvks and .keyman-touch-layout files + * that it references, rather than key cap data from the .kmn file itself. + * + * @param file - relative or absolute path to a Keyman source file + * @returns true if the file is successfully loaded and parsed + */ public async analyze(file: string): Promise { switch(KeymanFileTypes.sourceTypeFromFilename(file)) { case KeymanFileTypes.Source.VisualKeyboard: { @@ -211,6 +248,30 @@ export class AnalyzeOskCharacterUse { return result; } + /** + * Returns the collected results from earlier calls to + * {@link AnalyzeOskCharacterUse.analyze}. This generates a mapping from a key + * cap (one or more characters) to a PUA code, for use with `&displayMap`. + * + * Three output formats are supported: + * + * - .txt: tab-separated string format, with three columns: PUA, Key Cap, and + * plain string. The PUA and Key Cap columns are formatted as Unicode Scalar + * Values, e.g. U+0061, and the plain string is the original key cap string. + * + * - .md: formatted for documentation purposes. Generates a Markdown table + * (GFM) with PUA, Key Cap, and plain string. The PUA and Key Cap columns + * are formatted as Unicode Scalar Values, e.g. U+0061, and the plain string + * is the original key cap string. + * + * - .json: returns the final aggregated data as an array of strings, which + * can be joined to form a JSON blob of an object with a single member, + * `map`, which is an array of {@link Osk.StringResult} objects. + * + * @param format - file format to return - can be '.txt', '.md', or '.json' + * @returns an array of strings, formatted according to the `format` + * parameter. + */ public getStrings(format?: '.txt'|'.md'|'.json'): string[] { const final = this.prepareResults(this._strings); switch(format) { diff --git a/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts b/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts index f748f80964f..2d246195460 100644 --- a/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts +++ b/developer/src/kmc-analyze/src/osk-rewrite-pua/index.ts @@ -4,12 +4,22 @@ import { CompilerMessages } from '@keymanapp/kmc-kmn'; import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js"; import { AnalyzerMessages } from "../messages.js"; +/** + * @public + * Rewrite On Screen Keyboard files (.kvks, .keyman-touch-layout) with PUA + * codepoints, based on analysis provided by {@link AnalyzeOskCharacterUse} + * class. + */ export class AnalyzeOskRewritePua { private _data: {[index:string]: Uint8Array} = {}; constructor(private callbacks: CompilerCallbacks) { } + /** + * Clears data collected from previous calls to + * {@link AnalyzeOskRewritePua.analyze} + */ public clear() { this._data = {}; } @@ -18,6 +28,17 @@ export class AnalyzeOskRewritePua { // Analyze a single file // + /** + * Analyze a keyboard file or files, and provide a remapped output. Accepts a + * .kmn, .kvks, .keyman-touch-layout file formats. For .kmn, will rewrite + * associated On Screen Keyboard file formats. Can be called multiple times to + * rewrite multiple files. Use the {@link AnalyzeOskRewritePua.data} property + * to retrieve the output file content for writing. This does not modify the + * source file. + * @param file - relative or absolute path to a Keyman source file + * @param mapping - OSK keycap map provided by {@link AnalyzeOskCharacterUse} + * @returns true if the file is successfully loaded and rewritten + */ public async analyze(file: string, mapping: Osk.StringResult[]): Promise { let map: Osk.PuaMap = Osk.parseMapping(mapping); @@ -50,6 +71,10 @@ export class AnalyzeOskRewritePua { return true; } + /** + * Returns the file data for OSK files rewritten with PUA characters, for use + * with `&displayMap`. + */ public get data() { return this._data; } From bfb2e5348169e869c4a8481690449714627cc9a2 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Tue, 27 Feb 2024 14:55:06 +0700 Subject: [PATCH 143/171] docs(developer): kmc-kmn api documentation and some message documentation Relates to #10207. Adds basic documentation for the API surfaces for kmc-kmn, and provides documentation for a small subset of compiler messages. --- developer/docs/api/etc/kmc-kmn.api.md | 179 +++++++++++------- developer/src/kmc-analyze/src/messages.ts | 6 +- .../src/kmc-kmn/src/compiler/compiler.ts | 87 +++++++-- .../src/compiler/kmn-compiler-messages.ts | 122 ++++++++++-- .../src/kmw-compiler/kmw-compiler-messages.ts | 30 +++ developer/src/kmc-kmn/src/main.ts | 6 +- 6 files changed, 328 insertions(+), 102 deletions(-) diff --git a/developer/docs/api/etc/kmc-kmn.api.md b/developer/docs/api/etc/kmc-kmn.api.md index 5950430d0bf..e14c9b80747 100644 --- a/developer/docs/api/etc/kmc-kmn.api.md +++ b/developer/docs/api/etc/kmc-kmn.api.md @@ -15,105 +15,113 @@ import { Osk } from '@keymanapp/developer-utils'; import { UnicodeSet } from '@keymanapp/common-types'; import { UnicodeSetParser } from '@keymanapp/common-types'; -// @public (undocumented) +// @public export class CompilerMessages { - // (undocumented) static ERROR_FileNotFound: number; - // (undocumented) + // @internal (undocumented) static Error_FileNotFound: (o: { filename: string; }) => CompilerEvent; - // (undocumented) static ERROR_InvalidDisplayMapFile: number; - // (undocumented) + // @internal (undocumented) static Error_InvalidDisplayMapFile: (o: { filename: string; e: any; }) => CompilerEvent; - // (undocumented) static ERROR_InvalidKvkFile: number; - // (undocumented) + // @internal (undocumented) static Error_InvalidKvkFile: (o: { filename: string; e: any; }) => CompilerEvent; - // (undocumented) static ERROR_InvalidKvksFile: number; - // (undocumented) + // @internal (undocumented) static Error_InvalidKvksFile: (o: { filename: string; e: any; }) => CompilerEvent; - // (undocumented) static ERROR_UnicodeSetHasProperties: number; - // (undocumented) + // @internal (undocumented) static Error_UnicodeSetHasProperties: () => CompilerEvent; - // (undocumented) static ERROR_UnicodeSetHasStrings: number; - // (undocumented) + // @internal (undocumented) static Error_UnicodeSetHasStrings: () => CompilerEvent; - // (undocumented) static ERROR_UnicodeSetSyntaxError: number; - // (undocumented) + // @internal (undocumented) static Error_UnicodeSetSyntaxError: () => CompilerEvent; - // (undocumented) static FATAL_CallbacksNotSet: number; - // (undocumented) + // @internal (undocumented) static Fatal_CallbacksNotSet: () => CompilerEvent; - // (undocumented) static FATAL_MissingWasmModule: number; - // (undocumented) + // @internal (undocumented) static Fatal_MissingWasmModule: (o: { e?: any; }) => CompilerEvent; - // (undocumented) - static FATAL_UnableToSetCompilerOptions: number; - // (undocumented) - static Fatal_UnableToSetCompilerOptions: () => CompilerEvent; - // (undocumented) static FATAL_UnexpectedException: number; - // (undocumented) + // @internal (undocumented) static Fatal_UnexpectedException: (o: { e: any; }) => CompilerEvent; - // (undocumented) static FATAL_UnicodeSetOutOfRange: number; - // (undocumented) + // @internal (undocumented) static Fatal_UnicodeSetOutOfRange: () => CompilerEvent; - // (undocumented) static WARN_InvalidVkeyInKvksFile: number; - // (undocumented) + // @internal (undocumented) static Warn_InvalidVkeyInKvksFile: (o: { filename: string; invalidVkey: string; }) => CompilerEvent; } -// @public (undocumented) +// Warning: (ae-internal-missing-underscore) The name "CompilerResultExtraGroup" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export interface CompilerResultExtraGroup { + // (undocumented) + isReadOnly: boolean; + // (undocumented) + name: string; +} + +// Warning: (ae-internal-missing-underscore) The name "CompilerResultExtraStore" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export interface CompilerResultExtraStore { + // (undocumented) + line: number; + // (undocumented) + name: string; + // (undocumented) + storeType: number; +} + +// @public export class KmnCompiler implements KeymanCompiler, UnicodeSetParser { constructor(); + // @internal static fixNewPattern(pattern: string): string; - // Warning: (ae-forgotten-export) The symbol "KmnCompilerOptions" needs to be exported by the entry point main.d.ts - // - // (undocumented) init(callbacks: CompilerCallbacks, options: KmnCompilerOptions): Promise; - // (undocumented) + // @internal (undocumented) parseUnicodeSet(pattern: string, rangeCount: number): UnicodeSet | null; - // Warning: (ae-forgotten-export) The symbol "KmnCompilerResult" needs to be exported by the entry point main.d.ts - // - // (undocumented) run(infile: string, outfile: string): Promise; - // (undocumented) + // @internal (undocumented) sizeUnicodeSet(pattern: string): number; - // (undocumented) + // @internal testSentry(): any; verifyInitialized(): boolean; - // Warning: (ae-forgotten-export) The symbol "KmnCompilerArtifacts" needs to be exported by the entry point main.d.ts - // - // (undocumented) write(artifacts: KmnCompilerArtifacts): Promise; } +// @public +export interface KmnCompilerArtifacts extends KeymanCompilerArtifacts { + // (undocumented) + js?: KeymanCompilerArtifactOptional; + // (undocumented) + kmx?: KeymanCompilerArtifactOptional; + // (undocumented) + kvk?: KeymanCompilerArtifactOptional; +} + // @public export class KmnCompilerMessages { // (undocumented) @@ -440,141 +448,170 @@ export class KmnCompilerMessages { static WARN_VisualKeyboardFileMissing: number; } -// @public (undocumented) -export class KmwCompilerMessages extends KmnCompilerMessages { +// @public +export interface KmnCompilerOptions extends CompilerOptions { +} + +// @public +export interface KmnCompilerResult extends KeymanCompilerResult { // (undocumented) - static Error_InvalidBegin: () => CompilerEvent; + artifacts: KmnCompilerArtifacts; + // (undocumented) + displayMap?: Osk.PuaMap; + // Warning: (ae-incompatible-release-tags) The symbol "extra" is marked as @public, but its signature references "KmnCompilerResultExtra" which is marked as @internal + // // (undocumented) + extra: KmnCompilerResultExtra; +} + +// Warning: (ae-internal-missing-underscore) The name "KmnCompilerResultExtra" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal +export interface KmnCompilerResultExtra { + // (undocumented) + displayMapFilename?: string; + // (undocumented) + groups: CompilerResultExtraGroup[]; + // (undocumented) + kvksFilename?: string; + // (undocumented) + stores: CompilerResultExtraStore[]; + targets: number; +} + +// @public +export class KmwCompilerMessages extends KmnCompilerMessages { + // @internal (undocumented) + static Error_InvalidBegin: () => CompilerEvent; + // @internal (undocumented) static Error_InvalidKeyCode: (o: { keyId: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Error_InvalidTouchLayoutFile: (o: { filename: string; }) => CompilerEvent; // (undocumented) static ERROR_InvalidTouchLayoutFileFormat: number; - // (undocumented) + // @internal (undocumented) static Error_InvalidTouchLayoutFileFormat: (o: { msg: string; }) => CompilerEvent; // (undocumented) static ERROR_NotAnyRequiresVersion14: number; - // (undocumented) + // @internal (undocumented) static Error_NotAnyRequiresVersion14: (o: { line: number; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Error_NotSupportedInKeymanWebContext: (o: { line: number; code: String; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Error_NotSupportedInKeymanWebOutput: (o: { line: number; code: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Error_NotSupportedInKeymanWebStore: (o: { code: string; store: string; }) => CompilerEvent; // (undocumented) static ERROR_TouchLayoutFileDoesNotExist: number; - // (undocumented) + // @internal (undocumented) static Error_TouchLayoutFileDoesNotExist: (o: { filename: string; }) => CompilerEvent; // (undocumented) static ERROR_TouchLayoutIdentifierRequires15: number; - // (undocumented) + // @internal (undocumented) static Error_TouchLayoutIdentifierRequires15: (o: { keyId: string; platformName: string; layerId: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Error_TouchLayoutInvalidIdentifier: (o: { keyId: string; platformName: string; layerId: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Error_VirtualCharacterKeysNotSupportedInKeymanWeb: (o: { line: number; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Error_VirtualKeysNotValidForMnemonicLayouts: (o: { line: number; }) => CompilerEvent; // (undocumented) static HINT_TouchLayoutUsesUnsupportedGesturesDownlevel: number; - // (undocumented) + // @internal (undocumented) static Hint_TouchLayoutUsesUnsupportedGesturesDownlevel: (o: { keyId: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Hint_UnreachableKeyCode: (o: { line: number; key: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_DontMixChiralAndNonChiralModifiers: () => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_EmbedJsFileMissing: (o: { line: number; jsFilename: string; e: any; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb: (o: { line: number; flags: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_HelpFileMissing: (o: { line: number; helpFilename: string; e: any; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_OptionStoreNameInvalid: (o: { name: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_TouchLayoutCustomKeyNotDefined: (o: { keyId: string; platformName: string; layerId: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_TouchLayoutFontShouldBeSameForAllPlatforms: () => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_TouchLayoutMissingLayer: (o: { keyId: string; platformName: string; layerId: string; nextLayer: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_TouchLayoutMissingRequiredKeys: (o: { layerId: string; platformName: string; missingKeys: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_TouchLayoutSpecialLabelOnNormalKey: (o: { keyId: string; platformName: string; layerId: string; label: string; }) => CompilerEvent; - // (undocumented) + // @internal (undocumented) static Warn_TouchLayoutUnidentifiedKey: (o: { layerId: string; }) => CompilerEvent; } -// (No @packageDocumentation comment for this package) - ``` diff --git a/developer/src/kmc-analyze/src/messages.ts b/developer/src/kmc-analyze/src/messages.ts index d3596099d39..3bc884ace13 100644 --- a/developer/src/kmc-analyze/src/messages.ts +++ b/developer/src/kmc-analyze/src/messages.ts @@ -15,9 +15,9 @@ export class AnalyzerMessages { /** @internal */ static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); /** - * Raised when the compiler experiences an internal error. These should be - * reported to the Keyman team for resolution via - * https://github.com/keymanapp/keyman/issues/new + * Raised when an analysis components experiences an internal error. If you + * experience this error, it should be reported to the Keyman team for + * resolution via https://github.com/keymanapp/keyman/issues/new */ static readonly FATAL_UnexpectedException = SevFatal | 0x0001; diff --git a/developer/src/kmc-kmn/src/compiler/compiler.ts b/developer/src/kmc-kmn/src/compiler/compiler.ts index c7a25f64e7c..ca107a584cb 100644 --- a/developer/src/kmc-kmn/src/compiler/compiler.ts +++ b/developer/src/kmc-kmn/src/compiler/compiler.ts @@ -24,12 +24,14 @@ export const STORETYPE_DEBUG = 0x08; export const STORETYPE_CALL = 0x10; export const STORETYPE__MASK = 0x1F; +/** @internal */ export interface CompilerResultExtraStore { storeType: number; // STORETYPE__MASK name: string; // when debug=false, the .kmx will not have store names line: number; // source line number where store is defined }; +/** @internal */ export interface CompilerResultExtraGroup { isReadOnly: boolean; name: string; @@ -40,7 +42,9 @@ export const COMPILETARGETS_JS = 0x02; export const COMPILETARGETS__MASK = 0x03; /** - * Data in CompilerResultExtra comes from kmcmplib + * @internal + * Data in CompilerResultExtra comes from kmcmplib. This is used by other + * compilers such as KmwCompiler and is not intended for external use. */ export interface KmnCompilerResultExtra { /** @@ -53,22 +57,30 @@ export interface KmnCompilerResultExtra { groups: CompilerResultExtraGroup[]; }; -// -// Internal in-memory result from a successful compilation -// - +/** + * @public + * Internal in-memory result from a successful compilation + */ export interface KmnCompilerArtifacts extends KeymanCompilerArtifacts { kmx?: KeymanCompilerArtifactOptional; kvk?: KeymanCompilerArtifactOptional; js?: KeymanCompilerArtifactOptional; }; +/** + * @public + * Build artifacts from the .kmn compiler + */ export interface KmnCompilerResult extends KeymanCompilerResult { artifacts: KmnCompilerArtifacts; extra: KmnCompilerResultExtra; displayMap?: Osk.PuaMap; }; +/** + * @public + * Options for the .kmn compiler + */ export interface KmnCompilerOptions extends CompilerOptions { }; @@ -97,6 +109,12 @@ interface MallocAndFree { let Module: any; +/** + * @public + * Compiles a .kmn file to a .kmx, .kvk, and/or .js. The compiler does not read + * or write from filesystem or network directly, but relies on callbacks for all + * external IO. + */ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser { private readonly callbackID: string; // a unique numeric id added to globals with prefixed names private callbacks: CompilerCallbacks; @@ -108,6 +126,13 @@ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser { callbackProcIdentifier++; } + /** + * Initialize the compiler, including loading the WASM host for kmcmplib. + * Copies options. + * @param callbacks - Callbacks for external interfaces, including message reporting and file io + * @param options - Compiler options + * @returns false if initialization fails + */ public async init(callbacks: CompilerCallbacks, options: KmnCompilerOptions): Promise { this.callbacks = callbacks; this.options = {...options}; @@ -142,6 +167,17 @@ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser { return true; } + /** + * Write artifacts from a successful compile to disk, via callbacks methods. + * The artifacts written may include: + * + * - .kmx file - binary keyboard used by Keyman on desktop platforms + * - .kvk file - binary on screen keyboard used by Keyman on desktop platforms + * - .js file - Javascript keyboard for web and touch platforms + * + * @param artifacts - object containing artifact binary data to write out + * @returns true on success + */ public async write(artifacts: KmnCompilerArtifacts): Promise { if(!artifacts) { throw Error('artifacts must be defined'); @@ -231,14 +267,27 @@ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser { * a stack trace). Thus, to ensure we don't trip over ourselves, we need to * copy the buffer. Fortunately, creating a `Uint8Array` from a `Uint8Array` * copies the data, and is pretty quick. - * @param offset Offset into the WASM memory space, in bytes - * @param size Size of the buffer to copy, in bytes - * @returns A _copy_ of the data in a new Uint8Array + * @param offset - Offset into the WASM memory space, in bytes. + * @param size - Size of the buffer to copy, in bytes. + * @returns A _copy_ of the data in a new Uint8Array. */ private copyWasmBuffer(offset: number, size: number): Uint8Array { return new Uint8Array(new Uint8Array(Module.HEAP8.buffer, offset, size)); } + /** + * Compiles a .kmn file to .kmx, .kvk, and/or .js files. Returns an object + * containing binary artifacts on succes. The files are passed in by name, and + * the compiler will use callbacks as passed to the {@link KmnCompiler.init} + * function to read any input files by disk. + * @param infile - Path to source file. Path will be parsed to find relative + * references in the .kmn file, such as icon or On Screen + * Keyboard file + * @param outfile - Path to output file. The file will not be written to, but + * will be included in the result for use by + * {@link KmnCompiler.write}. + * @returns Binary artifacts on success, null on failure. + */ public async run(infile: string, outfile: string): Promise { if(!this.verifyInitialized()) { /* c8 ignore next 2 */ @@ -438,6 +487,11 @@ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser { } } + /** + * @internal + * Generates an exception in kmcmplib to verify that Sentry error capture is + * working correctly + */ public testSentry() { if(!this.verifyInitialized()) { return null; @@ -446,7 +500,10 @@ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser { return Module.kmcmp_testSentry(); } - /** convert `\u{1234}` to `\u1234` etc */ + /** + * @internal + * convert `\u{1234}` to `\u1234` etc + */ public static fixNewPattern(pattern: string) : string { pattern = pattern.replaceAll(/\\u\{([0-9a-fA-F]{6})\}/g, `\\U00$1`); pattern = pattern.replaceAll(/\\u\{([0-9a-fA-F]{5})\}/g, `\\U000$1`); @@ -458,10 +515,10 @@ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser { } /** - * - * @param pattern UnicodeSet pattern such as `[a-z]` - * @param rangeCount number of ranges to allocate - * @returns UnicodeSet accessor object, or null on failure + * @internal + * @param pattern - UnicodeSet pattern such as `[a-z]` + * @param rangeCount - number of ranges to allocate + * @returns UnicodeSet accessor object, or null on failure */ public parseUnicodeSet(pattern: string, rangeCount: number) : UnicodeSet | null { if(!this.verifyInitialized()) { @@ -493,6 +550,10 @@ export class KmnCompiler implements KeymanCompiler, UnicodeSetParser { return null; } } + + /** + * @internal + */ public sizeUnicodeSet(pattern: string) : number { if(!this.verifyInitialized()) { /* c8 ignore next 2 */ diff --git a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts index 7c14eb57caa..dd8d10ad165 100644 --- a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts @@ -40,71 +40,165 @@ export const enum KmnCompilerMessageRanges { RANGE_CompilerMessage_Max = 0xFFF, // Highest available error code for kmc-kmn } -/* - The messages in this class share the namespace with messages from - kmn_compiler_errors.h, which are generated by kmcmplib, so values below 0x900 - are reserved for kmcmplib messages. -*/ +/** + * @public + * Error messages reported by the .kmn compiler. The messages in this class + * share the namespace with messages from kmn_compiler_errors.h, which are + * generated by kmcmplib, so values below 0x900 are reserved for kmcmplib + * messages. + */ export class CompilerMessages { + /** @internal */ static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); + /** + * Raised when KmnCompiler or one of its components experiences an internal + * error. If you experience this error, it should be reported to the Keyman + * team for resolution via https://github.com/keymanapp/keyman/issues/new + */ static FATAL_UnexpectedException = SevFatal | 0x900; + /** @internal */ static Fatal_MissingWasmModule = (o:{e?: any}) => m(this.FATAL_MissingWasmModule, `Could not instantiate WASM compiler module or initialization failed`, o.e ?? 'unknown error'); + /** + * Raised when the kmcmplib component could be instantiated. This may indicate + * a configuration or dependency issue. Make sure you are running a Javascript + * engine that supports WASM, and that use of WASM is enabled. + */ static FATAL_MissingWasmModule = SevFatal | 0x901; - // TODO: Is this now deprecated? - static Fatal_UnableToSetCompilerOptions = () => m(this.FATAL_UnableToSetCompilerOptions, null, `Unable to set compiler options`); - static FATAL_UnableToSetCompilerOptions = SevFatal | 0x902; + // Note: this is now unused + // static Fatal_UnableToSetCompilerOptions = () => m(this.FATAL_UnableToSetCompilerOptions, null, `Unable to set compiler options`); + // static FATAL_UnableToSetCompilerOptions = SevFatal | 0x902; + /** @internal */ static Fatal_CallbacksNotSet = () => m(this.FATAL_CallbacksNotSet, null, `Callbacks were not set with init`); + /** + * Raised when KmnCompiler or one of its components experiences an internal + * error. If you experience this error, it should be reported to the Keyman + * team for resolution via https://github.com/keymanapp/keyman/issues/new + */ static FATAL_CallbacksNotSet = SevFatal | 0x903; + /** @internal */ static Fatal_UnicodeSetOutOfRange = () => m(this.FATAL_UnicodeSetOutOfRange, null, `UnicodeSet buffer was too small`); + /** + * Raised when caller to UnicodeSet functions provides an invalid buffer. If + * you experience this error, it should be reported to the Keyman team for + * resolution via https://github.com/keymanapp/keyman/issues/new + */ static FATAL_UnicodeSetOutOfRange = SevFatal | 0x904; - static Error_UnicodeSetHasStrings = () => m(this.ERROR_UnicodeSetHasStrings, `UnicodeSet contains strings, not allowed`); + // TODO: rename the following functions to Error_UsetHasStrings etc + + /** @internal */ + static Error_UnicodeSetHasStrings = () => m(this.ERROR_UnicodeSetHasStrings, `uset contains strings, not allowed`); + /** + * The provided uset uses multi-character strings, (`{}` notation, e.g. + * `[żġħ{ie}{għ}]`. ). Although full UnicodeSets support strings, LDML + * keyboards do not support multi-character strings in usets. To resolve this, + * reformat the uset to avoid the use of multi-character strings. + * + * More on uset: + * https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset + */ static ERROR_UnicodeSetHasStrings = SevError | 0x905; - static Error_UnicodeSetHasProperties = () => m(this.ERROR_UnicodeSetHasProperties, `UnicodeSet contains properties, not allowed`); + /** @internal */ + static Error_UnicodeSetHasProperties = () => m(this.ERROR_UnicodeSetHasProperties, `uset contains properties, not allowed`); + /** + * The provided uset uses property notation (`\p{…}` or `[:…:]`). LDML + * keyboards do not support Unicode properties in usets, because that would + * make implementations dependent on a particular version of Unicode. To + * resolve this, reformat the uset to avoid the use of properties. + * + * More on uset: + * https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset + */ static ERROR_UnicodeSetHasProperties = SevError | 0x906; - static Error_UnicodeSetSyntaxError = () => m(this.ERROR_UnicodeSetSyntaxError, `UnicodeSet had a Syntax Error while parsing`); + /** @internal */ + static Error_UnicodeSetSyntaxError = () => m(this.ERROR_UnicodeSetSyntaxError, `uset had a Syntax Error while parsing`); + /** + * The provided uset has a syntax error and could not be parsed. Verify the + * format of the uset against the specification. + * + * More on uset: https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset + */ static ERROR_UnicodeSetSyntaxError = SevError | 0x907; + /** @internal */ static Error_InvalidKvksFile = (o:{filename: string, e: any}) => m(this.ERROR_InvalidKvksFile, `Error encountered parsing ${o.filename}: ${o.e ?? 'unknown error'}`); // Note, not fatal, not reporting to Sentry + /** + * The .kvks file could not be parsed because it was not a valid XML file. + * There may be additional information in the error message to help you + * resolve the error. + * + * More on .kvks file format: https://help.keyman.com/developer/current-version/reference/file-types/kvks + */ static ERROR_InvalidKvksFile = SevError | 0x908; + /** @internal */ static Warn_InvalidVkeyInKvksFile = (o:{filename: string, invalidVkey: string}) => m(this.WARN_InvalidVkeyInKvksFile, `Invalid virtual key ${o.invalidVkey} found in ${o.filename}`); + /** + * The .kvks file contained a virtual key that was not supported by + * Keyman. Remove this virtual key from the .kvks file. + * + * Supported virtual keys: https://help.keyman.com/developer/language/guide/virtual-keys#common-virtual-key-codes + */ static WARN_InvalidVkeyInKvksFile = SevWarn | 0x909; + /** @internal */ static Error_InvalidDisplayMapFile = (o:{filename: string, e: any}) => m(this.ERROR_InvalidDisplayMapFile, `Error encountered parsing display map ${o.filename}: ${o.e ?? 'unknown error'}`); // Note, not fatal, not reporting to Sentry + /** + * The displayMap file could not be parsed because it was not a valid JSON + * file. There may be additional information in the error message to help you + * resolve the error. + * + * More on displayMap: https://help.keyman.com/developer/language/reference/displaymap + */ static ERROR_InvalidDisplayMapFile = SevError | 0x90A; + /** @internal */ static Error_InvalidKvkFile = (o:{filename: string, e: any}) => m(this.ERROR_InvalidKvkFile, `Error encountered loading ${o.filename}: ${o.e ?? 'unknown error'}`); // Note, not fatal, not reporting to Sentry + /** + * The .kvk file could not be loaded because it was not a valid format. There + * may be additional information in the error message to help you resolve the + * error. + * + * More on .kvk files: https://help.keyman.com/developer/current-version/reference/file-types/kvk + */ static ERROR_InvalidKvkFile = SevError | 0x90B; + /** @internal */ static Error_FileNotFound = (o:{filename: string}) => m(this.ERROR_FileNotFound, `File ${o.filename} was not found`); + /** + * The file was not found on the disk. Verify that you have the correct path + * to the file. + */ static ERROR_FileNotFound = SevError | 0x90C; }; /** + * @public * This class defines messages from kmcmplib. They should correspond to codes in - * kmn_compiler_errors.h, exclusive severity bits. For example: + * kmn_compiler_errors.h, exclusive severity bits. Message text is defined by + * kmcmplib and passed through a callback. + * + * @example * * ``` * kmcmplib.CERR_BadCallParams = CERR_FATAL | 0x002 = 0x8002 * ERROR_BadCallParams = SevError | 0x0002 = 0x300000 | 0x2000 | 0x002 = 0x302002 * ``` * - * CERR_ messages that are actually fatals have been renamed to FATAL_. + * `CERR_` messages that are actually fatals have been renamed to `FATAL_`. * - * Message text is defined by kmcmplib and passed through a callback. */ export class KmnCompilerMessages { static INFO_None = SevInfo | 0x000; diff --git a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts index fe757d5bc33..e81b7dfdcc2 100644 --- a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts @@ -15,6 +15,10 @@ const m = (code: number, message: string, o?: {e?: any, filename?: string, line? line: o?.line, }); +/** + * @public + * Error messages reported by the KeymanWeb .kmn compiler. + */ export class KmwCompilerMessages extends KmnCompilerMessages { // Note: for legacy reasons, KMWCompilerMessages extends from // KMNCompilerMessages as they share the same error codes. This can be a @@ -24,89 +28,115 @@ export class KmwCompilerMessages extends KmnCompilerMessages { // the splitting of all KMW-specific error messages out of the // KmnCompilerMessages space. + /** @internal */ static Error_InvalidBegin = () => m(this.ERROR_InvalidBegin, `A "begin unicode" statement is required to compile a KeymanWeb keyboard`); + /** @internal */ static Error_InvalidTouchLayoutFile = (o:{filename:string}) => m(this.ERROR_InvalidTouchLayoutFile, `Touch layout file ${o.filename} is not valid`); + /** @internal */ static Warn_DontMixChiralAndNonChiralModifiers = () => m(this.WARN_DontMixChiralAndNonChiralModifiers, `This keyboard contains Ctrl,Alt and LCtrl,LAlt,RCtrl,RAlt sets of modifiers. Use only one or the other set for web target.`); + /** @internal */ static Warn_OptionStoreNameInvalid = (o:{name:string}) => m(this.WARN_OptionStoreNameInvalid, `The option store ${o.name} should be named with characters in the range A-Z, a-z, 0-9 and _ only.`); + /** @internal */ static Error_VirtualCharacterKeysNotSupportedInKeymanWeb = (o:{line:number}) => m(this.ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb, `Virtual character keys not currently supported in KeymanWeb`, o); + /** @internal */ static Error_VirtualKeysNotValidForMnemonicLayouts = (o:{line:number}) => m(this.ERROR_VirtualKeysNotValidForMnemonicLayouts, `Virtual keys are not valid for mnemonic layouts`, o); + /** @internal */ static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb = (o:{line:number,flags:string}) => m(this.WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb, `Extended shift flags ${o.flags} are not supported in KeymanWeb`, o); + /** @internal */ static Hint_UnreachableKeyCode = (o:{line:number,key:string}) => m(this.HINT_UnreachableKeyCode, `The rule will never be matched for key ${o.key} because its key code is never fired.`, o); + /** @internal */ static Error_NotSupportedInKeymanWebStore = (o:{code:string,store:string}) => m(this.ERROR_NotSupportedInKeymanWebStore, `'${o.code}' is not currently supported in store '${o.store}' when used by any or index for web and touch targets`); + /** @internal */ static Error_NotSupportedInKeymanWebContext = (o:{line:number, code:String}) => m(this.ERROR_NotSupportedInKeymanWebContext, `Statement '${o.code}' is not currently supported in context for web and touch targets`, o); + /** @internal */ static Error_NotSupportedInKeymanWebOutput = (o:{line:number, code:string}) => m(this.ERROR_NotSupportedInKeymanWebOutput, `Statement '${o.code}' is not currently supported in output for web and touch targets`, o); + /** @internal */ static Warn_HelpFileMissing = (o:{line:number, helpFilename:string, e:any}) => m(this.WARN_HelpFileMissing, `File ${o.helpFilename} could not be loaded: ${(o.e??'').toString()}`,o); + /** @internal */ static Warn_EmbedJsFileMissing = (o:{line:number, jsFilename: string, e:any}) => m(this.WARN_EmbedJsFileMissing, `File ${o.jsFilename} could not be loaded: ${(o.e??'').toString()}`, o); + /** @internal */ static Warn_TouchLayoutMissingLayer = (o:{keyId:string, platformName:string, layerId:string, nextLayer:string}) => m(this.WARN_TouchLayoutMissingLayer, `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}", references a missing layer "${o.nextLayer}"`); + /** @internal */ static Warn_TouchLayoutUnidentifiedKey = (o:{layerId:string}) => m(this.WARN_TouchLayoutUnidentifiedKey, `A key on layer "${o.layerId}" has no identifier.`); + /** @internal */ static Error_TouchLayoutInvalidIdentifier = (o:{keyId:string, platformName: string, layerId:string}) => m(this.ERROR_TouchLayoutInvalidIdentifier, `Key "${o.keyId}" on "${o.platformName}", layer "${o.layerId}" has an invalid identifier.`); + /** @internal */ static Warn_TouchLayoutCustomKeyNotDefined = (o:{keyId:string, platformName:string, layerId:string}) => m(this.WARN_TouchLayoutCustomKeyNotDefined, `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}", is a custom key but has no corresponding rule in the source.`); + /** @internal */ static Warn_TouchLayoutSpecialLabelOnNormalKey = (o:{keyId:string, platformName:string, layerId:string, label:string}) => m(this.WARN_TouchLayoutSpecialLabelOnNormalKey, `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}" does not have `+ `the key type "Special" or "Special (active)" but has the label "${o.label}". This feature is only supported in Keyman 14 or later`); + /** @internal */ static Error_InvalidKeyCode = (o:{keyId: string}) => m(this.ERROR_InvalidKeyCode, `Invalid key identifier "${o.keyId}"`); + /** @internal */ static Warn_TouchLayoutFontShouldBeSameForAllPlatforms = () => m(this.WARN_TouchLayoutFontShouldBeSameForAllPlatforms, `The touch layout font should be the same for all platforms.`); + /** @internal */ static Warn_TouchLayoutMissingRequiredKeys = (o:{layerId:string, platformName:string, missingKeys:string}) => m(this.WARN_TouchLayoutMissingRequiredKeys, `Layer "${o.layerId}" on platform "${o.platformName}" is missing the required key(s) '${o.missingKeys}'.`); // Following messages are kmw-compiler only, so use KmwCompiler error namespace + /** @internal */ static Error_NotAnyRequiresVersion14 = (o:{line: number}) => m(this.ERROR_NotAnyRequiresVersion14, `Statement notany in context() match requires version 14.0+ of KeymanWeb`, o); static ERROR_NotAnyRequiresVersion14 = SevError | 0x0001; + /** @internal */ static Error_TouchLayoutIdentifierRequires15 = (o:{keyId:string, platformName:string, layerId:string}) => m(this.ERROR_TouchLayoutIdentifierRequires15, `Key "${o.keyId}" on "${o.platformName}", layer "${o.layerId}" has a multi-part identifier which requires version 15.0 or newer.`); static ERROR_TouchLayoutIdentifierRequires15 = SevError | 0x0002; + /** @internal */ static Error_InvalidTouchLayoutFileFormat = (o:{msg: string}) => m(this.ERROR_InvalidTouchLayoutFileFormat, `Invalid touch layout file: ${o.msg}`); static ERROR_InvalidTouchLayoutFileFormat = SevError | 0x0003; + /** @internal */ static Error_TouchLayoutFileDoesNotExist = (o:{filename:string}) => m(this.ERROR_TouchLayoutFileDoesNotExist, `Touch layout file ${o.filename} does not exist`); static ERROR_TouchLayoutFileDoesNotExist = SevError | 0x0004; + /** @internal */ static Hint_TouchLayoutUsesUnsupportedGesturesDownlevel = (o:{keyId:string}) => m(this.HINT_TouchLayoutUsesUnsupportedGesturesDownlevel, `The touch layout uses a flick or multi-tap gesture on key ${o.keyId}, which is only available on version 17.0+ of Keyman`); static HINT_TouchLayoutUsesUnsupportedGesturesDownlevel = SevHint | 0x0005; diff --git a/developer/src/kmc-kmn/src/main.ts b/developer/src/kmc-kmn/src/main.ts index 27a4895da61..d09bca91b21 100644 --- a/developer/src/kmc-kmn/src/main.ts +++ b/developer/src/kmc-kmn/src/main.ts @@ -1,4 +1,8 @@ +/** + * @packageDocumentation + * kmc-kmn - Keyman keyboard compiler + */ -export { KmnCompiler } from './compiler/compiler.js'; +export { KmnCompiler, KmnCompilerOptions, KmnCompilerResult, KmnCompilerArtifacts, KmnCompilerResultExtra, CompilerResultExtraStore, CompilerResultExtraGroup } from './compiler/compiler.js'; export { KmnCompilerMessages, CompilerMessages } from './compiler/kmn-compiler-messages.js'; export { KmwCompilerMessages } from './kmw-compiler/kmw-compiler-messages.js'; From 6a3bba4a2ebd6e7d4fae63f18562910e6130207d Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Tue, 27 Feb 2024 16:42:55 +0700 Subject: [PATCH 144/171] fix(android/engine): Check selection indexes --- .../keyman/engine/KMKeyboardJSHandler.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java index 4815165910b..70deb91dd77 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java @@ -24,6 +24,7 @@ import com.keyman.engine.data.Keyboard; import com.keyman.engine.util.CharSequenceUtil; import com.keyman.engine.util.KMLog; +import com.keyman.engine.util.KMString; public class KMKeyboardJSHandler { private Context context; @@ -284,7 +285,17 @@ private static void performLeftDeletions(InputConnection ic, int dn) { // Chop dn+numPairs code points from the end of charsBackup // subSequence indices are start(inclusive) to end(exclusive) - CharSequence expectedChars = charsBackup.subSequence(0, charsBackup.length() - (dn + numPairs)); + int start = 0; + int end = charsBackup.length() - (dn + numPairs); + CharSequence expectedChars; + try { + expectedChars = charsBackup.subSequence(start, end); + } catch (IndexOutOfBoundsException e) { + KMLog.LogException(TAG, + KMString.format("Bad subSequence of start %d, end is %d, length %d, dn %d, numPairs %d", + start, end, charsBackup.length(), dn, numPairs), e); + expectedChars = charsBackup; + } ic.deleteSurroundingText(dn + numPairs, 0); CharSequence newContext = getCharacterSequence(ic, originalBufferLength - 2*dn); @@ -327,7 +338,15 @@ private static CharSequence getCharacterSequence(InputConnection ic, int length) if (Character.isLowSurrogate(sequence.charAt(0))) { // Adjust if the first char is also a split surrogate pair // subSequence indices are start(inclusive) to end(exclusive) - sequence = sequence.subSequence(1, sequence.length()); + int start = 1; + int end = sequence.length(); + try { + sequence = sequence.subSequence(start, end); + } catch (IndexOutOfBoundsException e) { + KMLog.LogException(TAG, + KMString.format("Bad subSequence of start %d, end is %d", + start, end), e); + } } return sequence; From f94650fd6aef7dc7af41e4c7236c71cae7b87b3c Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Tue, 27 Feb 2024 16:29:42 +0100 Subject: [PATCH 145/171] docs(linux): Updated whatsnew for Keyman for Linux 17 Closes #10715. --- linux/help/about/whatsnew.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/linux/help/about/whatsnew.md b/linux/help/about/whatsnew.md index 15fbf54339c..a6ea5095be3 100644 --- a/linux/help/about/whatsnew.md +++ b/linux/help/about/whatsnew.md @@ -4,3 +4,21 @@ title: What's New Here are some of the new features we have added to Keyman for Linux 17.0: +- Keyman for Linux now fully works with the Wayland compositor + ([#4273](https://github.com/keymanapp/keyman/issues/4273)). + Previously the full functionality only worked with the X11 display server. +- Slightly modified the UI of `km-config`. The new _Options_ tab allows + to disable automatic error reporting to keyman.com. +- Added Mon localization. +- It is now possible to specify an arbitrary language tag when installing + a keyboard package from the command line ([#8598](https://github.com/keymanapp/keyman/issues/8598)). + Previously this only worked for the language tags listed in the + keyboard package. +- Keyman for Linux now supports the upcoming Ubuntu 24.04 Noble LTS in + addition to Ubuntu 23.10 Mantic, Ubuntu 22.04 Jammy LTS and + Ubuntu 20.04 Focal LTS. Note: This will be last version that supports + Ubuntu 20.04 Focal. +- Keyman Core on Linux supports full normalization for LDML keyboard output + ([#10390](https://github.com/keymanapp/keyman/issues/10390)). +- Renamed the mysterious `libkmnkbp0-0` package to the clearer + `libkeymancore1`. Cleanup of the API. From 4d8623064cb41dd3b1aa9d6c8e2cd3cbd3eb410c Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Tue, 27 Feb 2024 13:05:11 -0500 Subject: [PATCH 146/171] auto: increment beta version to 17.0.278 --- HISTORY.md | 12 ++++++++++++ VERSION.md | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index c2521f77e07..0807c6a8e51 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,17 @@ # Keyman Version History +## 17.0.277 beta 2024-02-27 + +* fix(developer): exit kmc test data if any failure messages occurred (#10805) +* docs(windows): add whats new Keyman for Windows 17.0 (#10783) +* feat(developer): add api-extractor and api-documenter, config, and build integration (#10839) +* feat(developer): publish api documentation to help.keyman.com (#10841) +* docs(developer): npm package readme files (#10842) +* refactor(developer): move osk module from common-types to developer-utils (#10845) +* chore(linux): Update debian changelog (#10828) +* fix(developer): repeated options in kmc must now be fully specified (#10821) +* docs(developer): add documentation for kmc-analyze (#10854) + ## 17.0.276 beta 2024-02-26 * chore(linux): Fix autopkg tests (#10824) diff --git a/VERSION.md b/VERSION.md index 93b8a082a0d..380fa5a22fe 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.277 \ No newline at end of file +17.0.278 \ No newline at end of file From db32e409db5004f8a45f8c9db8bf47b16db42643 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Tue, 27 Feb 2024 17:23:53 -0600 Subject: [PATCH 147/171] chore(resources): update to latest LDML MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - maybe last 'techpreview' update Unblocks: chore(developer): support xmlns on keyboard3 files 🙀 #10803 Unblocks: chore(developer): rename unicodeSet to uset 🙀 #10657 For: #10803 --- .../ldml-keyboards/techpreview/3.0/bn.xml | 146 ++++++------ .../techpreview/3.0/fr-t-k0-azerty.xml | 5 +- .../techpreview/3.0/fr-t-k0-optimise-test.xml | 16 -- .../techpreview/3.0/fr-t-k0-optimise.xml | 200 ---------------- .../techpreview/3.0/fr-t-k0-test-test.xml | 22 -- .../techpreview/3.0/fr-t-k0-test.xml | 213 ----------------- .../techpreview/3.0/ja-Latn.xml | 3 +- .../techpreview/3.0/mt-t-k0-47key.xml | 3 +- .../ldml-keyboards/techpreview/3.0/mt.xml | 3 +- .../ldml-keyboards/techpreview/3.0/pcm.xml | 3 +- .../techpreview/3.0/pt-t-k0-abnt2.xml | 3 +- .../ldml-keyboards/techpreview/cldr_info.json | 6 +- .../techpreview/dtd/ldmlKeyboard3.dtd | 14 +- .../techpreview/dtd/ldmlKeyboard3.xsd | 215 +++++++++--------- .../techpreview/dtd/ldmlKeyboardTest3.dtd | 2 +- .../techpreview/dtd/ldmlKeyboardTest3.xsd | 2 +- .../techpreview/ldml-keyboard3.schema.json | 6 +- .../techpreview/test/bn-test.xml | 17 +- 18 files changed, 204 insertions(+), 675 deletions(-) delete mode 100644 resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-optimise-test.xml delete mode 100644 resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-optimise.xml delete mode 100644 resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-test-test.xml delete mode 100644 resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-test.xml diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/bn.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/bn.xml index a4b41335917..88f897ff4dc 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/bn.xml +++ b/resources/standards-data/ldml-keyboards/techpreview/3.0/bn.xml @@ -1,6 +1,5 @@ - - + + + + - - - - - @@ -32,86 +32,67 @@ - - - + + + + - - - - - - - - - + + - + - + + + + + + + - + + + + + + + + + - - - - - - - - - - - - - - - - - + + - - - - - - - + + + + - - + + + + - + + - - - - - - - - - - - - - - - - - - + + + + + + - + @@ -120,7 +101,7 @@ - + @@ -128,8 +109,8 @@ - - + + @@ -154,17 +135,34 @@ - - + + + + + + + + - + + + + + diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-azerty.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-azerty.xml index c969ecf5431..86ee027c239 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-azerty.xml +++ b/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-azerty.xml @@ -1,5 +1,4 @@ - - + @@ -52,7 +51,7 @@ diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-optimise-test.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-optimise-test.xml deleted file mode 100644 index 593b8bd2e72..00000000000 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-optimise-test.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-optimise.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-optimise.xml deleted file mode 100644 index b8c6f76b47d..00000000000 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-optimise.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-test-test.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-test-test.xml deleted file mode 100644 index c03ce54362a..00000000000 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-test-test.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-test.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-test.xml deleted file mode 100644 index 76b35304ef5..00000000000 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/fr-t-k0-test.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/ja-Latn.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/ja-Latn.xml index b5364c5f928..d48acb70b01 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/ja-Latn.xml +++ b/resources/standards-data/ldml-keyboards/techpreview/3.0/ja-Latn.xml @@ -1,6 +1,5 @@ - - + diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/mt-t-k0-47key.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/mt-t-k0-47key.xml index 62f90b47bce..788be91a296 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/mt-t-k0-47key.xml +++ b/resources/standards-data/ldml-keyboards/techpreview/3.0/mt-t-k0-47key.xml @@ -1,6 +1,5 @@ - - + diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/mt.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/mt.xml index 5dcc9ea5c35..64e29cc1dc8 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/mt.xml +++ b/resources/standards-data/ldml-keyboards/techpreview/3.0/mt.xml @@ -1,12 +1,11 @@ - - + diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/pcm.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/pcm.xml index 89994773f67..867e35ec4f2 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/pcm.xml +++ b/resources/standards-data/ldml-keyboards/techpreview/3.0/pcm.xml @@ -1,6 +1,5 @@ - - + diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/pt-t-k0-abnt2.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/pt-t-k0-abnt2.xml index 010f5150734..64977cd23bf 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/pt-t-k0-abnt2.xml +++ b/resources/standards-data/ldml-keyboards/techpreview/3.0/pt-t-k0-abnt2.xml @@ -1,6 +1,5 @@ - - + diff --git a/resources/standards-data/ldml-keyboards/techpreview/cldr_info.json b/resources/standards-data/ldml-keyboards/techpreview/cldr_info.json index 3eff296a319..b9e9c1fd35d 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/cldr_info.json +++ b/resources/standards-data/ldml-keyboards/techpreview/cldr_info.json @@ -1,5 +1,5 @@ { - "sha": "022ff3ce172735f4a251003b1f429528deab44b3", - "description": "release-44-beta3-18-g022ff3ce17", - "date": "Tue, 24 Oct 2023 13:00:38 +0000" + "sha": "60df7f18424258b91868901230c6f22cf00acb90", + "description": "release-45-alpha1-63-g60df7f1842", + "date": "Tue, 27 Feb 2024 23:18:40 +0000" } diff --git a/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboard3.dtd b/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboard3.dtd index ef577e98bf8..a5160c3119e 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboard3.dtd +++ b/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboard3.dtd @@ -1,5 +1,5 @@ + + + @@ -31,7 +34,6 @@ Please view the subcommittee page for the most recent information. - @@ -172,7 +174,7 @@ Please view the subcommittee page for the most recent information. - + @@ -191,10 +193,10 @@ Please view the subcommittee page for the most recent information. - - + + - + diff --git a/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboard3.xsd b/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboard3.xsd index 96a6f821e91..9a445135fc8 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboard3.xsd +++ b/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboard3.xsd @@ -5,13 +5,13 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file --> - - + + @@ -103,15 +102,15 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - - - - - - - - - + + + + + + + + + @@ -123,9 +122,9 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - - - + + + @@ -136,7 +135,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + @@ -144,24 +143,24 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - - - - - - - + + + + + + + - - - - + + + + - + @@ -171,7 +170,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + @@ -198,24 +197,24 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -234,18 +233,18 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - - + + - - - - + + + + @@ -255,7 +254,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + @@ -265,16 +264,16 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - - + + - - - + + + @@ -286,9 +285,9 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - - - + + + @@ -299,59 +298,59 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - - - + + + - - - - + + + + - + - + - - - - + + + + - - - - - + + + + + - - - + + + @@ -369,8 +368,8 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - - + + @@ -383,20 +382,20 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - + - - - - - - - + + + + + + + @@ -412,4 +411,4 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file - \ No newline at end of file + diff --git a/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboardTest3.dtd b/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboardTest3.dtd index 992e83a7559..ccb1078b81d 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboardTest3.dtd +++ b/resources/standards-data/ldml-keyboards/techpreview/dtd/ldmlKeyboardTest3.dtd @@ -1,5 +1,5 @@ - From 534d5ec64ffd7bcf0d90cb5522597459582db60b Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 28 Feb 2024 06:58:19 +0700 Subject: [PATCH 148/171] refactor(developer): cleanup kmn compiler message namespaces This is in preparation for message documentation. Moves all messages with the KmnCompiler namespace into KmnCompilerMessages. For now, keeps CompilerMessages class as a subclass of KmnCompilerMessages, for removal in 18.0. Moves messages with KmnCompiler namespace from kmw-compiler-messages.ts to kmn-compiler-messages.ts. This avoids confusion as to source of message, and should allow us in the future to split the classes entirely. --- .../src/compiler/kmn-compiler-messages.ts | 382 ++++++++++++++++-- .../src/kmw-compiler/kmw-compiler-messages.ts | 86 ---- developer/src/kmc-kmn/test/test-messages.ts | 6 +- 3 files changed, 359 insertions(+), 115 deletions(-) diff --git a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts index dd8d10ad165..eb04f858771 100644 --- a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts @@ -1,4 +1,5 @@ import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec as m } from "@keymanapp/common-types"; +import { kmnfile } from "../kmw-compiler/compiler-globals.js"; const Namespace = CompilerErrorNamespace.KmnCompiler; const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -7,6 +8,15 @@ const SevWarn = CompilerErrorSeverity.Warn | Namespace; const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; +// For messages from the KeymanWeb compiler, we need to construct our messages +// slightly differently. This could be refactored in the future, as it is not +// obvious which messages should use which function. +const mw = (code: number, message: string, o?: {e?: any, filename?: string, line?: number}) : CompilerEvent => ({ + ...m(code, message, o?.e), + filename: o?.filename ?? kmnfile, + line: o?.line, +}); + /** * LogLevel comes from kmn_compiler_errors.h, for legacy compiler error messages */ @@ -42,12 +52,33 @@ export const enum KmnCompilerMessageRanges { /** * @public + * * Error messages reported by the .kmn compiler. The messages in this class * share the namespace with messages from kmn_compiler_errors.h, which are * generated by kmcmplib, so values below 0x900 are reserved for kmcmplib * messages. + * + * The second half of this class defines the messages from kmcmplib. These + * messages should correspond to codes in kmn_compiler_errors.h, exclusive + * severity bits. Message text is defined by kmcmplib and passed through a + * callback at this time. The message text presented here is currently unused + * during the compilation process, but is used in the `kmc messages` tool and + * for documentation. + * + * `CERR_` messages that are actually fatals have been renamed to `FATAL_`. + * + * @example + * + * ``` + * kmcmplib.CERR_BadCallParams = CERR_FATAL | 0x002 = 0x8002 + * ERROR_BadCallParams = SevError | 0x0002 = 0x300000 | 0x2000 | 0x002 = 0x302002 + * ``` */ -export class CompilerMessages { +export class KmnCompilerMessages { + // TODO: v18.0 we should consider moving error message generation in kmcmplib to + // kmc-kmn, which would avoid a number of legacy issues. Questions about + // parameterisation. + /** @internal */ static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); /** @@ -182,226 +213,525 @@ export class CompilerMessages { * to the file. */ static ERROR_FileNotFound = SevError | 0x90C; -}; -/** - * @public - * This class defines messages from kmcmplib. They should correspond to codes in - * kmn_compiler_errors.h, exclusive severity bits. Message text is defined by - * kmcmplib and passed through a callback. - * - * @example - * - * ``` - * kmcmplib.CERR_BadCallParams = CERR_FATAL | 0x002 = 0x8002 - * ERROR_BadCallParams = SevError | 0x0002 = 0x300000 | 0x2000 | 0x002 = 0x302002 - * ``` - * - * `CERR_` messages that are actually fatals have been renamed to `FATAL_`. - * - */ -export class KmnCompilerMessages { - static INFO_None = SevInfo | 0x000; + // static INFO_None = SevInfo | 0x000; + + static Info_EndOfFile = () => m(this.INFO_EndOfFile, `(no error - reserved code)`); static INFO_EndOfFile = SevInfo | 0x001; + static Fatal_BadCallParams = () => m(this.FATAL_BadCallParams, `CompileKeyboardFile was called with bad parameters`); static FATAL_BadCallParams = SevFatal | 0x002; + + static Fatal_CannotAllocateMemory = () => m(this.FATAL_CannotAllocateMemory, `Out of memory`); static FATAL_CannotAllocateMemory = SevFatal | 0x004; + + static Error_InfileNotExist = () => m(this.ERROR_InfileNotExist, `Cannot find the input file`); static ERROR_InfileNotExist = SevError | 0x005; // #10678: reduced from fatal to error in 17.0 + + // static Error_CannotCreateOutfile = () => m(this.ERROR_CannotCreateOutfile, `Cannot open output file for writing`); unused // static ERROR_CannotCreateOutfile = SevError | 0x006; // #10678: reduced from fatal to error in 17.0, but unused + + static Fatal_UnableToWriteFully = () => m(this.FATAL_UnableToWriteFully, `Unable to write the file completely`); static FATAL_UnableToWriteFully = SevFatal | 0x007; + + static Error_CannotReadInfile = () => m(this.ERROR_CannotReadInfile, `Cannot read the input file`); static ERROR_CannotReadInfile = SevError | 0x008; // #10678: reduced from fatal to error in 17.0 + + static Fatal_SomewhereIGotItWrong = () => m(this.FATAL_SomewhereIGotItWrong, `Internal error: contact Keyman`); static FATAL_SomewhereIGotItWrong = SevFatal | 0x009; + static Error_InvalidToken = () => m(this.ERROR_InvalidToken, `Invalid token found`); static ERROR_InvalidToken = SevError | 0x00A; + + // kmcmplib: static Error_InvalidBegin = () => m(this.ERROR_InvalidBegin, `Invalid 'begin' command`); + static Error_InvalidBegin = () => mw(this.ERROR_InvalidBegin, + `A "begin unicode" statement is required to compile a KeymanWeb keyboard`); static ERROR_InvalidBegin = SevError | 0x00B; + + static Error_InvalidName = () => m(this.ERROR_InvalidName, `Invalid 'name' command`); static ERROR_InvalidName = SevError | 0x00C; + + static Error_InvalidVersion = () => m(this.ERROR_InvalidVersion, `Invalid 'version' command`); static ERROR_InvalidVersion = SevError | 0x00D; + + static Error_InvalidLanguageLine = () => m(this.ERROR_InvalidLanguageLine, `Invalid 'language' command`); static ERROR_InvalidLanguageLine = SevError | 0x00E; + + static Error_LayoutButNoLanguage = () => m(this.ERROR_LayoutButNoLanguage, `Layout command found but no language command`); static ERROR_LayoutButNoLanguage = SevError | 0x00F; + + static Error_InvalidLayoutLine = () => m(this.ERROR_InvalidLayoutLine, `Invalid 'layout' command`); static ERROR_InvalidLayoutLine = SevError | 0x010; + + static Error_NoVersionLine = () => m(this.ERROR_NoVersionLine, `No version line found for file`); static ERROR_NoVersionLine = SevError | 0x011; + + static Error_InvalidGroupLine = () => m(this.ERROR_InvalidGroupLine, `Invalid 'group' command`); static ERROR_InvalidGroupLine = SevError | 0x012; + + static Error_InvalidStoreLine = () => m(this.ERROR_InvalidStoreLine, `Invalid 'store' command`); static ERROR_InvalidStoreLine = SevError | 0x013; + + static Error_InvalidCodeInKeyPartOfRule = () => m(this.ERROR_InvalidCodeInKeyPartOfRule, `Invalid command or code found in key part of rule`); static ERROR_InvalidCodeInKeyPartOfRule = SevError | 0x014; + + static Error_InvalidDeadkey = () => m(this.ERROR_InvalidDeadkey, `Invalid 'deadkey' or 'dk' command`); static ERROR_InvalidDeadkey = SevError | 0x015; + + static Error_InvalidValue = () => m(this.ERROR_InvalidValue, `Invalid value in extended string`); static ERROR_InvalidValue = SevError | 0x016; + + static Error_ZeroLengthString = () => m(this.ERROR_ZeroLengthString, `A string of zero characters was found`); static ERROR_ZeroLengthString = SevError | 0x017; + + static Error_TooManyIndexToKeyRefs = () => m(this.ERROR_TooManyIndexToKeyRefs, `Too many index commands refering to key string`); static ERROR_TooManyIndexToKeyRefs = SevError | 0x018; + + static Error_UnterminatedString = () => m(this.ERROR_UnterminatedString, `Unterminated string in line`); static ERROR_UnterminatedString = SevError | 0x019; + + static Error_StringInVirtualKeySection = () => m(this.ERROR_StringInVirtualKeySection, `extend string illegal in virtual key section`); static ERROR_StringInVirtualKeySection = SevError | 0x01A; + + static Error_AnyInVirtualKeySection = () => m(this.ERROR_AnyInVirtualKeySection, `'any' command is illegal in virtual key section`); static ERROR_AnyInVirtualKeySection = SevError | 0x01B; + + static Error_InvalidAny = () => m(this.ERROR_InvalidAny, `Invalid 'any' command`); static ERROR_InvalidAny = SevError | 0x01C; + + static Error_StoreDoesNotExist = () => m(this.ERROR_StoreDoesNotExist, `Store referenced does not exist`); static ERROR_StoreDoesNotExist = SevError | 0x01D; + + static Error_BeepInVirtualKeySection = () => m(this.ERROR_BeepInVirtualKeySection, `'beep' command is illegal in virtual key section`); static ERROR_BeepInVirtualKeySection = SevError | 0x01E; + + static Error_IndexInVirtualKeySection = () => m(this.ERROR_IndexInVirtualKeySection, `'index' command is illegal in virtual key section`); static ERROR_IndexInVirtualKeySection = SevError | 0x01F; + + static Error_InvalidIndex = () => m(this.ERROR_InvalidIndex, `Invalid 'index' command`); static ERROR_InvalidIndex = SevError | 0x020; + + static Error_OutsInVirtualKeySection = () => m(this.ERROR_OutsInVirtualKeySection, `'outs' command is illegal in virtual key section`); static ERROR_OutsInVirtualKeySection = SevError | 0x021; + + static Error_InvalidOuts = () => m(this.ERROR_InvalidOuts, `Invalid 'outs' command`); static ERROR_InvalidOuts = SevError | 0x022; + + static Error_ContextInVirtualKeySection = () => m(this.ERROR_ContextInVirtualKeySection, `'context' command is illegal in virtual key section`); static ERROR_ContextInVirtualKeySection = SevError | 0x024; + + static Error_InvalidUse = () => m(this.ERROR_InvalidUse, `Invalid 'use' command`); static ERROR_InvalidUse = SevError | 0x025; + + static Error_GroupDoesNotExist = () => m(this.ERROR_GroupDoesNotExist, `Group does not exist`); static ERROR_GroupDoesNotExist = SevError | 0x026; + + static Error_VirtualKeyNotAllowedHere = () => m(this.ERROR_VirtualKeyNotAllowedHere, `Virtual key is not allowed here`); static ERROR_VirtualKeyNotAllowedHere = SevError | 0x027; + + static Error_InvalidSwitch = () => m(this.ERROR_InvalidSwitch, `Invalid 'switch' command`); static ERROR_InvalidSwitch = SevError | 0x028; + + static Error_NoTokensFound = () => m(this.ERROR_NoTokensFound, `No tokens found in line`); static ERROR_NoTokensFound = SevError | 0x029; + + static Error_InvalidLineContinuation = () => m(this.ERROR_InvalidLineContinuation, `Invalid line continuation`); static ERROR_InvalidLineContinuation = SevError | 0x02A; + + static Error_LineTooLong = () => m(this.ERROR_LineTooLong, `Line too long`); static ERROR_LineTooLong = SevError | 0x02B; + + static Error_InvalidCopyright = () => m(this.ERROR_InvalidCopyright, `Invalid 'copyright' command`); static ERROR_InvalidCopyright = SevError | 0x02C; + + static Error_CodeInvalidInThisSection = () => m(this.ERROR_CodeInvalidInThisSection, `This line is invalid in this section of the file`); static ERROR_CodeInvalidInThisSection = SevError | 0x02D; + + static Error_InvalidMessage = () => m(this.ERROR_InvalidMessage, `Invalid 'message' command`); static ERROR_InvalidMessage = SevError | 0x02E; + + static Error_InvalidLanguageName = () => m(this.ERROR_InvalidLanguageName, `Invalid 'languagename' command`); static ERROR_InvalidLanguageName = SevError | 0x02F; + + static Error_InvalidBitmapLine = () => m(this.ERROR_InvalidBitmapLine, `Invalid 'bitmaps' command`); static ERROR_InvalidBitmapLine = SevError | 0x030; + + static Error_CannotReadBitmapFile = () => m(this.ERROR_CannotReadBitmapFile, `Cannot open the bitmap or icon file for reading`); static ERROR_CannotReadBitmapFile = SevError | 0x031; + + static Error_IndexDoesNotPointToAny = () => m(this.ERROR_IndexDoesNotPointToAny, `An index() in the output does not have a corresponding any() statement`); static ERROR_IndexDoesNotPointToAny = SevError | 0x032; + + static Error_ReservedCharacter = () => m(this.ERROR_ReservedCharacter, `A reserved character was found`); static ERROR_ReservedCharacter = SevError | 0x033; + + static Error_InvalidCharacter = () => m(this.ERROR_InvalidCharacter, `A character was found that is outside the valid Unicode range (U+0000 - U+10FFFF)`); static ERROR_InvalidCharacter = SevError | 0x034; + + static Error_InvalidCall = () => m(this.ERROR_InvalidCall, `The 'call' command is invalid`); static ERROR_InvalidCall = SevError | 0x035; + + static Error_CallInVirtualKeySection = () => m(this.ERROR_CallInVirtualKeySection, `'call' command is illegal in virtual key section`); static ERROR_CallInVirtualKeySection = SevError | 0x036; + + static Error_CodeInvalidInKeyStore = () => m(this.ERROR_CodeInvalidInKeyStore, `The command is invalid inside a store that is used in a key part of the rule`); static ERROR_CodeInvalidInKeyStore = SevError | 0x037; + + static Error_CannotLoadIncludeFile = () => m(this.ERROR_CannotLoadIncludeFile, `Cannot load the included file: it is either invalid or does not exist`); static ERROR_CannotLoadIncludeFile = SevError | 0x038; + + static Error_60FeatureOnly_EthnologueCode = () => m(this.ERROR_60FeatureOnly_EthnologueCode, `EthnologueCode system store requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_EthnologueCode = SevError | 0x039; + + static Error_60FeatureOnly_MnemonicLayout = () => m(this.ERROR_60FeatureOnly_MnemonicLayout, `MnemonicLayout functionality requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_MnemonicLayout = SevError | 0x03A; + + static Error_60FeatureOnly_OldCharPosMatching = () => m(this.ERROR_60FeatureOnly_OldCharPosMatching, `OldCharPosMatching system store requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_OldCharPosMatching = SevError | 0x03B; + + static Error_60FeatureOnly_NamedCodes = () => m(this.ERROR_60FeatureOnly_NamedCodes, `Named character constants requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_NamedCodes = SevError | 0x03C; + + static Error_60FeatureOnly_Contextn = () => m(this.ERROR_60FeatureOnly_Contextn, `Context(n) requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_Contextn = SevError | 0x03D; + + static Error_501FeatureOnly_Call = () => m(this.ERROR_501FeatureOnly_Call, `Call() requires VERSION 5.01 or higher`); static ERROR_501FeatureOnly_Call = SevError | 0x03E; + static Error_InvalidNamedCode = () => m(this.ERROR_InvalidNamedCode, `Invalid named code constant`); static ERROR_InvalidNamedCode = SevError | 0x03F; + + static Error_InvalidSystemStore = () => m(this.ERROR_InvalidSystemStore, `Invalid system store name found`); static ERROR_InvalidSystemStore = SevError | 0x040; + static Error_60FeatureOnly_VirtualCharKey = () => m(this.ERROR_60FeatureOnly_VirtualCharKey, `Virtual character keys require VERSION 6.0 or higher`); static ERROR_60FeatureOnly_VirtualCharKey = SevError | 0x044; + static Error_VersionAlreadyIncluded = () => m(this.ERROR_VersionAlreadyIncluded, `Only one VERSION or store(version) line allowed in a source file.`); static ERROR_VersionAlreadyIncluded = SevError | 0x045; + static Error_70FeatureOnly = () => m(this.ERROR_70FeatureOnly, `This feature requires store(version) '7.0' or higher`); static ERROR_70FeatureOnly = SevError | 0x046; + static Error_80FeatureOnly = () => m(this.ERROR_80FeatureOnly, `This feature requires store(version) '8.0' or higher`); static ERROR_80FeatureOnly = SevError | 0x047; + + static Error_InvalidInVirtualKeySection = () => m(this.ERROR_InvalidInVirtualKeySection, `This statement is not valid in a virtual key section`); static ERROR_InvalidInVirtualKeySection = SevError | 0x048; + + static Error_InvalidIf = () => m(this.ERROR_InvalidIf, `The if() statement is not valid`); static ERROR_InvalidIf = SevError | 0x049; + + static Error_InvalidReset = () => m(this.ERROR_InvalidReset, `The reset() statement is not valid`); static ERROR_InvalidReset = SevError | 0x04A; + + static Error_InvalidSet = () => m(this.ERROR_InvalidSet, `The set() statement is not valid`); static ERROR_InvalidSet = SevError | 0x04B; + + static Error_InvalidSave = () => m(this.ERROR_InvalidSave, `The save() statement is not valid`); static ERROR_InvalidSave = SevError | 0x04C; + + static Error_InvalidEthnologueCode = () => m(this.ERROR_InvalidEthnologueCode, `Invalid ethnologuecode format`); static ERROR_InvalidEthnologueCode = SevError | 0x04D; + static Fatal_CannotCreateTempfile = () => m(this.FATAL_CannotCreateTempfile, `Cannot create temp file`); static FATAL_CannotCreateTempfile = SevFatal | 0x04E; + static Error_90FeatureOnly_IfSystemStores = () => m(this.ERROR_90FeatureOnly_IfSystemStores, `if(store) requires store(version) '9.0' or higher`); static ERROR_90FeatureOnly_IfSystemStores = SevError | 0x04F; + + static Error_IfSystemStore_NotFound = () => m(this.ERROR_IfSystemStore_NotFound, `System store in if() not found`); static ERROR_IfSystemStore_NotFound = SevError | 0x050; + + static Error_90FeatureOnly_SetSystemStores = () => m(this.ERROR_90FeatureOnly_SetSystemStores, `set(store) requires store(version) '9.0' or higher`); static ERROR_90FeatureOnly_SetSystemStores = SevError | 0x051; + + static Error_SetSystemStore_NotFound = () => m(this.ERROR_SetSystemStore_NotFound, `System store in set() not found`); static ERROR_SetSystemStore_NotFound = SevError | 0x052; + + static Error_90FeatureOnlyVirtualKeyDictionary = () => m(this.ERROR_90FeatureOnlyVirtualKeyDictionary, `Custom virtual key names require store(version) '9.0'`); static ERROR_90FeatureOnlyVirtualKeyDictionary = SevError | 0x053; + static Error_NotSupportedInKeymanWebContext = (o:{line:number, code:String}) => mw(this.ERROR_NotSupportedInKeymanWebContext, + `Statement '${o.code}' is not currently supported in context for web and touch targets`, o); static ERROR_NotSupportedInKeymanWebContext = SevError | 0x054; + + static Error_NotSupportedInKeymanWebOutput = (o:{line:number, code:string}) => mw(this.ERROR_NotSupportedInKeymanWebOutput, + `Statement '${o.code}' is not currently supported in output for web and touch targets`, o); static ERROR_NotSupportedInKeymanWebOutput = SevError | 0x055; + + static Error_NotSupportedInKeymanWebStore = (o:{code:string,store:string}) => mw(this.ERROR_NotSupportedInKeymanWebStore, + `'${o.code}' is not currently supported in store '${o.store}' when used by any or index for web and touch targets`); static ERROR_NotSupportedInKeymanWebStore = SevError | 0x056; + + static Error_VirtualCharacterKeysNotSupportedInKeymanWeb = (o:{line:number}) => mw(this.ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb, + `Virtual character keys not currently supported in KeymanWeb`, o); static ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb = SevError | 0x057; + + static Error_VirtualKeysNotValidForMnemonicLayouts = (o:{line:number}) => mw(this.ERROR_VirtualKeysNotValidForMnemonicLayouts, + `Virtual keys are not valid for mnemonic layouts`, o); static ERROR_VirtualKeysNotValidForMnemonicLayouts = SevError | 0x058; + + static Error_InvalidTouchLayoutFile = (o:{filename:string}) => mw(this.ERROR_InvalidTouchLayoutFile, + `Touch layout file ${o.filename} is not valid`); static ERROR_InvalidTouchLayoutFile = SevError | 0x059; + + static Error_TouchLayoutInvalidIdentifier = (o:{keyId:string, platformName: string, layerId:string}) => mw(this.ERROR_TouchLayoutInvalidIdentifier, + `Key "${o.keyId}" on "${o.platformName}", layer "${o.layerId}" has an invalid identifier.`); static ERROR_TouchLayoutInvalidIdentifier = SevError | 0x05A; + + static Error_InvalidKeyCode = (o:{keyId: string}) => mw(this.ERROR_InvalidKeyCode, + `Invalid key identifier "${o.keyId}"`); static ERROR_InvalidKeyCode = SevError | 0x05B; + + static Error_90FeatureOnlyLayoutFile = () => m(this.ERROR_90FeatureOnlyLayoutFile, `Touch layout file reference requires store(version) '9.0'or higher`); static ERROR_90FeatureOnlyLayoutFile = SevError | 0x05C; + + static Error_90FeatureOnlyKeyboardVersion = () => m(this.ERROR_90FeatureOnlyKeyboardVersion, `KeyboardVersion system store requires store(version) '9.0'or higher`); static ERROR_90FeatureOnlyKeyboardVersion = SevError | 0x05D; + + static Error_KeyboardVersionFormatInvalid = () => m(this.ERROR_KeyboardVersionFormatInvalid, `KeyboardVersion format is invalid, expecting dot-separated integers`); static ERROR_KeyboardVersionFormatInvalid = SevError | 0x05E; + + static Error_ContextExHasInvalidOffset = () => m(this.ERROR_ContextExHasInvalidOffset, `context() statement has offset out of range`); static ERROR_ContextExHasInvalidOffset = SevError | 0x05F; + + static Error_90FeatureOnlyEmbedCSS = () => m(this.ERROR_90FeatureOnlyEmbedCSS, `Embedding CSS requires store(version) '9.0'or higher`); static ERROR_90FeatureOnlyEmbedCSS = SevError | 0x060; + + static Error_90FeatureOnlyTargets = () => m(this.ERROR_90FeatureOnlyTargets, `TARGETS system store requires store(version) '9.0'or higher`); static ERROR_90FeatureOnlyTargets = SevError | 0x061; + + static Error_ContextAndIndexInvalidInMatchNomatch = () => m(this.ERROR_ContextAndIndexInvalidInMatchNomatch, `context and index statements cannot be used in a match or nomatch statement`); static ERROR_ContextAndIndexInvalidInMatchNomatch = SevError | 0x062; + + static Error_140FeatureOnlyContextAndNotAnyWeb = () => m(this.ERROR_140FeatureOnlyContextAndNotAnyWeb, `For web and touch platforms, context() statement referring to notany() requires store(version) '14.0'or higher`); static ERROR_140FeatureOnlyContextAndNotAnyWeb = SevError | 0x063; + + static Error_ExpansionMustFollowCharacterOrVKey = () => m(this.ERROR_ExpansionMustFollowCharacterOrVKey, `An expansion must follow a character or a virtual key`); static ERROR_ExpansionMustFollowCharacterOrVKey = SevError | 0x064; + + static Error_VKeyExpansionMustBeFollowedByVKey = () => m(this.ERROR_VKeyExpansionMustBeFollowedByVKey, `A virtual key expansion must be terminated by a virtual key`); static ERROR_VKeyExpansionMustBeFollowedByVKey = SevError | 0x065; + + static Error_CharacterExpansionMustBeFollowedByCharacter = () => m(this.ERROR_CharacterExpansionMustBeFollowedByCharacter, `A character expansion must be terminated by a character key`); static ERROR_CharacterExpansionMustBeFollowedByCharacter = SevError | 0x066; + + static Error_VKeyExpansionMustUseConsistentShift = () => m(this.ERROR_VKeyExpansionMustUseConsistentShift, `A virtual key expansion must use the same shift state for both terminators`); static ERROR_VKeyExpansionMustUseConsistentShift = SevError | 0x067; + + static Error_ExpansionMustBePositive = () => m(this.ERROR_ExpansionMustBePositive, `An expansion must have positive difference (i.e. A-Z, not Z-A)`); static ERROR_ExpansionMustBePositive = SevError | 0x068; + static Error_CasedKeysMustContainOnlyVirtualKeys = () => m(this.ERROR_CasedKeysMustContainOnlyVirtualKeys, `The &CasedKeys system store must contain only virtual keys or characters found on a US English keyboard`); static ERROR_CasedKeysMustContainOnlyVirtualKeys = SevError | 0x069; + + static Error_CasedKeysMustNotIncludeShiftStates = () => m(this.ERROR_CasedKeysMustNotIncludeShiftStates, `The &CasedKeys system store must not include shift states`); static ERROR_CasedKeysMustNotIncludeShiftStates = SevError | 0x06A; + + static Error_CasedKeysNotSupportedWithMnemonicLayout = () => m(this.ERROR_CasedKeysNotSupportedWithMnemonicLayout, `The &CasedKeys system store is not supported with mnemonic layouts`); static ERROR_CasedKeysNotSupportedWithMnemonicLayout = SevError | 0x06B; + static Error_CannotUseReadWriteGroupFromReadonlyGroup = () => m(this.ERROR_CannotUseReadWriteGroupFromReadonlyGroup, `Group used from a readonly group must also be readonly`); static ERROR_CannotUseReadWriteGroupFromReadonlyGroup = SevError | 0x06C; + + static Error_StatementNotPermittedInReadonlyGroup = () => m(this.ERROR_StatementNotPermittedInReadonlyGroup, `Statement is not permitted in output of readonly group`); static ERROR_StatementNotPermittedInReadonlyGroup = SevError | 0x06D; + + static Error_OutputInReadonlyGroup = () => m(this.ERROR_OutputInReadonlyGroup, `Output is not permitted in a readonly group`); static ERROR_OutputInReadonlyGroup = SevError | 0x06E; + + static Error_NewContextGroupMustBeReadonly = () => m(this.ERROR_NewContextGroupMustBeReadonly, `Group used in begin newContext must be readonly`); static ERROR_NewContextGroupMustBeReadonly = SevError | 0x06F; + + static Error_PostKeystrokeGroupMustBeReadonly = () => m(this.ERROR_PostKeystrokeGroupMustBeReadonly, `Group used in begin postKeystroke must be readonly`); static ERROR_PostKeystrokeGroupMustBeReadonly = SevError | 0x070; + static Error_DuplicateGroup = () => m(this.ERROR_DuplicateGroup, `A group with this name has already been defined.`); static ERROR_DuplicateGroup = SevError | 0x071; + + static Error_DuplicateStore = () => m(this.ERROR_DuplicateStore, `A store with this name has already been defined.`); static ERROR_DuplicateStore = SevError | 0x072; + + static Error_RepeatedBegin = () => m(this.ERROR_RepeatedBegin, `Begin has already been set`); static ERROR_RepeatedBegin = SevError | 0x073; + + static Error_VirtualKeyInContext = () => m(this.ERROR_VirtualKeyInContext, `Virtual keys are not permitted in context`); static ERROR_VirtualKeyInContext = SevError | 0x074; + static Warn_TooManyWarnings = () => m(this.WARN_TooManyWarnings, `Too many warnings or errors`); static WARN_TooManyWarnings = SevWarn | 0x080; + + static Warn_OldVersion = () => m(this.WARN_OldVersion, `The keyboard file is an old version`); static WARN_OldVersion = SevWarn | 0x081; + + static Warn_BitmapNotUsed = () => m(this.WARN_BitmapNotUsed, `The 'bitmaps' statement is obsolete and only the first bitmap referred to will be used, you should use 'bitmap'.`); static WARN_BitmapNotUsed = SevWarn | 0x082; + + static Warn_CustomLanguagesNotSupported = () => m(this.WARN_CustomLanguagesNotSupported, `Languages over 0x1FF, 0x1F are not supported correctly by Windows. You should use no LANGUAGE line instead.`); static WARN_CustomLanguagesNotSupported = SevWarn | 0x083; + + static Warn_KeyBadLength = () => m(this.WARN_KeyBadLength, `There are too many characters in the keystroke part of the rule.`); static WARN_KeyBadLength = SevWarn | 0x084; + + static Warn_IndexStoreShort = () => m(this.WARN_IndexStoreShort, `The store referenced in index() is shorter than the store referenced in any()`); static WARN_IndexStoreShort = SevWarn | 0x085; + + static Warn_UnicodeInANSIGroup = () => m(this.WARN_UnicodeInANSIGroup, `A Unicode character was found in an ANSI group`); static WARN_UnicodeInANSIGroup = SevWarn | 0x086; + + static Warn_ANSIInUnicodeGroup = () => m(this.WARN_ANSIInUnicodeGroup, `An ANSI character was found in a Unicode group`); static WARN_ANSIInUnicodeGroup = SevWarn | 0x087; + + static Warn_UnicodeSurrogateUsed = () => m(this.WARN_UnicodeSurrogateUsed, `A Unicode surrogate character was found. You should use Unicode scalar values to represent values > U+FFFF`); static WARN_UnicodeSurrogateUsed = SevWarn | 0x088; + + static Warn_ReservedCharacter = () => m(this.WARN_ReservedCharacter, `A Unicode character was found that should not be used`); static WARN_ReservedCharacter = SevWarn | 0x089; // Note: INFO_Info is called CWARN_Info in kmn_compiler_errors.h, but should have an "info" severity + static Info_Info = () => m(this.INFO_Info, `Information`); static INFO_Info = SevInfo | 0x08A; + + static Warn_VirtualKeyWithMnemonicLayout = () => m(this.WARN_VirtualKeyWithMnemonicLayout, `Virtual key used instead of virtual character key with a mnemonic layout`); static WARN_VirtualKeyWithMnemonicLayout = SevWarn | 0x08B; + + static Warn_VirtualCharKeyWithPositionalLayout = () => m(this.WARN_VirtualCharKeyWithPositionalLayout, `Virtual character key used with a positional layout instead of mnemonic layout`); static WARN_VirtualCharKeyWithPositionalLayout = SevWarn | 0x08C; + + static Warn_StoreAlreadyUsedAsOptionOrCall = () => m(this.WARN_StoreAlreadyUsedAsOptionOrCall, `Store already used as an option or in a call statement and should not be used as a normal store`); static WARN_StoreAlreadyUsedAsOptionOrCall = SevWarn | 0x08D; + + static Warn_StoreAlreadyUsedAsStoreOrCall = () => m(this.WARN_StoreAlreadyUsedAsStoreOrCall, `Store already used as a normal store or in a call statement and should not be used as an option`); static WARN_StoreAlreadyUsedAsStoreOrCall = SevWarn | 0x08E; + + static Warn_StoreAlreadyUsedAsStoreOrOption = () => m(this.WARN_StoreAlreadyUsedAsStoreOrOption, `Store already used as a normal store or as an option and should not be used in a call statement`); static WARN_StoreAlreadyUsedAsStoreOrOption = SevWarn | 0x08F; + + static Warn_PunctuationInEthnologueCode = () => m(this.WARN_PunctuationInEthnologueCode, `Punctuation should not be used to separate Ethnologue codes; instead use spaces`); static WARN_PunctuationInEthnologueCode = SevWarn | 0x090; + + static Warn_TouchLayoutMissingLayer = (o:{keyId:string, platformName:string, layerId:string, nextLayer:string}) => mw(this.WARN_TouchLayoutMissingLayer, + `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}", references a missing layer "${o.nextLayer}"`); static WARN_TouchLayoutMissingLayer = SevWarn | 0x091; + + static Warn_TouchLayoutCustomKeyNotDefined = (o:{keyId:string, platformName:string, layerId:string}) => mw(this.WARN_TouchLayoutCustomKeyNotDefined, + `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}", is a custom key but has no corresponding rule in the source.`); static WARN_TouchLayoutCustomKeyNotDefined = SevWarn | 0x092; + + static Warn_TouchLayoutMissingRequiredKeys = (o:{layerId:string, platformName:string, missingKeys:string}) => mw(this.WARN_TouchLayoutMissingRequiredKeys, + `Layer "${o.layerId}" on platform "${o.platformName}" is missing the required key(s) '${o.missingKeys}'.`); static WARN_TouchLayoutMissingRequiredKeys = SevWarn | 0x093; + + static Warn_HelpFileMissing = (o:{line:number, helpFilename:string, e:any}) => mw(this.WARN_HelpFileMissing, + `File ${o.helpFilename} could not be loaded: ${(o.e??'').toString()}`,o); static WARN_HelpFileMissing = SevWarn | 0x094; + + static Warn_EmbedJsFileMissing = (o:{line:number, jsFilename: string, e:any}) => mw(this.WARN_EmbedJsFileMissing, + `File ${o.jsFilename} could not be loaded: ${(o.e??'').toString()}`, o); static WARN_EmbedJsFileMissing = SevWarn | 0x095; - static WARN_TouchLayoutFileMissing = SevWarn | 0x096; - static WARN_VisualKeyboardFileMissing = SevWarn | 0x097; + + // static WARN_TouchLayoutFileMissing = SevWarn | 0x096; + // static WARN_VisualKeyboardFileMissing = SevWarn | 0x097; + + static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb = (o:{line:number,flags:string}) => mw(this.WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb, + `Extended shift flags ${o.flags} are not supported in KeymanWeb`, o); static WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb = SevWarn | 0x098; + + static Warn_TouchLayoutUnidentifiedKey = (o:{layerId:string}) => mw(this.WARN_TouchLayoutUnidentifiedKey, + `A key on layer "${o.layerId}" has no identifier.`); static WARN_TouchLayoutUnidentifiedKey = SevWarn | 0x099; + + static Hint_UnreachableKeyCode = (o:{line:number,key:string}) => mw(this.HINT_UnreachableKeyCode, + `The rule will never be matched for key ${o.key} because its key code is never fired.`, o); static HINT_UnreachableKeyCode = SevHint | 0x09A; - static WARN_CouldNotCopyJsonFile = SevWarn | 0x09B; + // static WARN_CouldNotCopyJsonFile = SevWarn | 0x09B; + + static Warn_PlatformNotInTargets = () => m(this.WARN_PlatformNotInTargets, `The specified platform is not a target platform`); static WARN_PlatformNotInTargets = SevWarn | 0x09C; + static Warn_HeaderStatementIsDeprecated = () => m(this.WARN_HeaderStatementIsDeprecated, `Header statements are deprecated; use instead the equivalent system store`); static WARN_HeaderStatementIsDeprecated = SevWarn | 0x09D; + + static Warn_UseNotLastStatementInRule = () => m(this.WARN_UseNotLastStatementInRule, `A rule with use() statements in the output should not have other content following the use() statements`); static WARN_UseNotLastStatementInRule = SevWarn | 0x09E; + static Warn_TouchLayoutFontShouldBeSameForAllPlatforms = () => mw(this.WARN_TouchLayoutFontShouldBeSameForAllPlatforms, + `The touch layout font should be the same for all platforms.`); static WARN_TouchLayoutFontShouldBeSameForAllPlatforms = SevWarn | 0x09F; - static WARN_InvalidJSONMetadataFile = SevWarn | 0x0A0; - static WARN_JSONMetadataOSKFontShouldMatchTouchFont = SevWarn | 0x0A1; + + // static WARN_InvalidJSONMetadataFile = SevWarn | 0x0A0; + // static WARN_JSONMetadataOSKFontShouldMatchTouchFont = SevWarn | 0x0A1; + + static Warn_KVKFileIsInSourceFormat = () => m(this.WARN_KVKFileIsInSourceFormat, `.kvk file should be binary but is an XML file`); static WARN_KVKFileIsInSourceFormat = SevWarn | 0x0A2; + // kmcmplib: static Warn_DontMixChiralAndNonChiralModifiers = () => m(this.WARN_DontMixChiralAndNonChiralModifiers, `Don't mix the use of left/right modifiers with non-left/right modifiers in the same platform`); + static Warn_DontMixChiralAndNonChiralModifiers = () => mw(this.WARN_DontMixChiralAndNonChiralModifiers, + `This keyboard contains Ctrl,Alt and LCtrl,LAlt,RCtrl,RAlt sets of modifiers. Use only one or the other set for web target.`); static WARN_DontMixChiralAndNonChiralModifiers = SevWarn | 0x0A3; + + static Warn_MixingLeftAndRightModifiers = () => m(this.WARN_MixingLeftAndRightModifiers, `Left and right modifiers should not both be used in the same rule`); static WARN_MixingLeftAndRightModifiers = SevWarn | 0x0A4; + static Warn_LanguageHeadersDeprecatedInKeyman10 = () => m(this.WARN_LanguageHeadersDeprecatedInKeyman10, `This language header has been deprecated in Keyman 10. Instead, add language metadata in the package file`); static WARN_LanguageHeadersDeprecatedInKeyman10 = SevWarn | 0x0A5; + static Hint_NonUnicodeFile = () => m(this.HINT_NonUnicodeFile, `Keyman Developer has detected that the file has ANSI encoding. Consider converting this file to UTF-8`); static HINT_NonUnicodeFile = SevHint | 0x0A6; - static WARN_TooManyErrorsOrWarnings = SevWarn | 0x0A7; + // static WARN_TooManyErrorsOrWarnings = SevWarn | 0x0A7; + static Warn_HotkeyHasInvalidModifier = () => m(this.WARN_HotkeyHasInvalidModifier, `Hotkey has modifiers that are not supported. Use only SHIFT, CTRL and ALT`); static WARN_HotkeyHasInvalidModifier = SevWarn | 0x0A8; + static Warn_TouchLayoutSpecialLabelOnNormalKey = (o:{keyId:string, platformName:string, layerId:string, label:string}) => + mw(this.WARN_TouchLayoutSpecialLabelOnNormalKey, + `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}" does not have `+ + `the key type "Special" or "Special (active)" but has the label "${o.label}". This feature is only supported in Keyman 14 or later`); static WARN_TouchLayoutSpecialLabelOnNormalKey = SevWarn | 0x0A9; + static Warn_OptionStoreNameInvalid = (o:{name:string}) => mw(this.WARN_OptionStoreNameInvalid, + `The option store ${o.name} should be named with characters in the range A-Z, a-z, 0-9 and _ only.`); static WARN_OptionStoreNameInvalid = SevWarn | 0x0AA; + static Warn_NulNotFirstStatementInContext = () => m(this.WARN_NulNotFirstStatementInContext, `nul must be the first statement in the context`); static WARN_NulNotFirstStatementInContext = SevWarn | 0x0AB; + + static Warn_IfShouldBeAtStartOfContext = () => m(this.WARN_IfShouldBeAtStartOfContext, `if, platform and baselayout should be at start of context (after nul, if present)`); static WARN_IfShouldBeAtStartOfContext = SevWarn | 0x0AC; + static Warn_KeyShouldIncludeNCaps = () => m(this.WARN_KeyShouldIncludeNCaps, `Other rules which reference this key include CAPS or NCAPS modifiers, so this rule must include NCAPS modifier to avoid inconsistent matches`); static WARN_KeyShouldIncludeNCaps = SevWarn | 0x0AD; + static Hint_UnreachableRule = () => m(this.HINT_UnreachableRule, `This rule will never be matched as another rule takes precedence`); static HINT_UnreachableRule = SevHint | 0x0AE; + static Warn_VirtualKeyInOutput = () => m(this.WARN_VirtualKeyInOutput, `Virtual keys are not supported in output`); static WARN_VirtualKeyInOutput = SevWarn | 0x0AF; + static Fatal_BufferOverflow = () => m(this.FATAL_BufferOverflow, `The compiler memory buffer overflowed`); static FATAL_BufferOverflow = SevFatal | 0x0C0; + + static Fatal_Break = () => m(this.FATAL_Break, `Compiler interrupted by user`); static FATAL_Break = SevFatal | 0x0C1; }; +/** + * @internal + * TODO: This class is here as a stopgap as we merged it with + * KmnCompilerMessages. It should be removed in v18.0. + */ +export class CompilerMessages extends KmnCompilerMessages { +} + export function mapErrorFromKmcmplib(line: number, code: number, msg: string): CompilerEvent { const severity = LogLevelToSeverity[code & LogLevel.LEVEL_MASK]; const baseCode = code & LogLevel.CODE_MASK; diff --git a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts index e81b7dfdcc2..5f9b0b869fc 100644 --- a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts @@ -28,92 +28,6 @@ export class KmwCompilerMessages extends KmnCompilerMessages { // the splitting of all KMW-specific error messages out of the // KmnCompilerMessages space. - /** @internal */ - static Error_InvalidBegin = () => m(this.ERROR_InvalidBegin, - `A "begin unicode" statement is required to compile a KeymanWeb keyboard`); - - /** @internal */ - static Error_InvalidTouchLayoutFile = (o:{filename:string}) => m(this.ERROR_InvalidTouchLayoutFile, - `Touch layout file ${o.filename} is not valid`); - - /** @internal */ - static Warn_DontMixChiralAndNonChiralModifiers = () => m(this.WARN_DontMixChiralAndNonChiralModifiers, - `This keyboard contains Ctrl,Alt and LCtrl,LAlt,RCtrl,RAlt sets of modifiers. Use only one or the other set for web target.`); - - /** @internal */ - static Warn_OptionStoreNameInvalid = (o:{name:string}) => m(this.WARN_OptionStoreNameInvalid, - `The option store ${o.name} should be named with characters in the range A-Z, a-z, 0-9 and _ only.`); - - /** @internal */ - static Error_VirtualCharacterKeysNotSupportedInKeymanWeb = (o:{line:number}) => m(this.ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb, - `Virtual character keys not currently supported in KeymanWeb`, o); - - /** @internal */ - static Error_VirtualKeysNotValidForMnemonicLayouts = (o:{line:number}) => m(this.ERROR_VirtualKeysNotValidForMnemonicLayouts, - `Virtual keys are not valid for mnemonic layouts`, o); - - /** @internal */ - static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb = (o:{line:number,flags:string}) => m(this.WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb, - `Extended shift flags ${o.flags} are not supported in KeymanWeb`, o); - - /** @internal */ - static Hint_UnreachableKeyCode = (o:{line:number,key:string}) => m(this.HINT_UnreachableKeyCode, - `The rule will never be matched for key ${o.key} because its key code is never fired.`, o); - - /** @internal */ - static Error_NotSupportedInKeymanWebStore = (o:{code:string,store:string}) => m(this.ERROR_NotSupportedInKeymanWebStore, - `'${o.code}' is not currently supported in store '${o.store}' when used by any or index for web and touch targets`); - - /** @internal */ - static Error_NotSupportedInKeymanWebContext = (o:{line:number, code:String}) => m(this.ERROR_NotSupportedInKeymanWebContext, - `Statement '${o.code}' is not currently supported in context for web and touch targets`, o); - - /** @internal */ - static Error_NotSupportedInKeymanWebOutput = (o:{line:number, code:string}) => m(this.ERROR_NotSupportedInKeymanWebOutput, - `Statement '${o.code}' is not currently supported in output for web and touch targets`, o); - - /** @internal */ - static Warn_HelpFileMissing = (o:{line:number, helpFilename:string, e:any}) => m(this.WARN_HelpFileMissing, - `File ${o.helpFilename} could not be loaded: ${(o.e??'').toString()}`,o); - - /** @internal */ - static Warn_EmbedJsFileMissing = (o:{line:number, jsFilename: string, e:any}) => m(this.WARN_EmbedJsFileMissing, - `File ${o.jsFilename} could not be loaded: ${(o.e??'').toString()}`, o); - - /** @internal */ - static Warn_TouchLayoutMissingLayer = (o:{keyId:string, platformName:string, layerId:string, nextLayer:string}) => m(this.WARN_TouchLayoutMissingLayer, - `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}", references a missing layer "${o.nextLayer}"`); - - /** @internal */ - static Warn_TouchLayoutUnidentifiedKey = (o:{layerId:string}) => m(this.WARN_TouchLayoutUnidentifiedKey, - `A key on layer "${o.layerId}" has no identifier.`); - - /** @internal */ - static Error_TouchLayoutInvalidIdentifier = (o:{keyId:string, platformName: string, layerId:string}) => m(this.ERROR_TouchLayoutInvalidIdentifier, - `Key "${o.keyId}" on "${o.platformName}", layer "${o.layerId}" has an invalid identifier.`); - - /** @internal */ - static Warn_TouchLayoutCustomKeyNotDefined = (o:{keyId:string, platformName:string, layerId:string}) => m(this.WARN_TouchLayoutCustomKeyNotDefined, - `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}", is a custom key but has no corresponding rule in the source.`); - - /** @internal */ - static Warn_TouchLayoutSpecialLabelOnNormalKey = (o:{keyId:string, platformName:string, layerId:string, label:string}) => - m(this.WARN_TouchLayoutSpecialLabelOnNormalKey, - `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}" does not have `+ - `the key type "Special" or "Special (active)" but has the label "${o.label}". This feature is only supported in Keyman 14 or later`); - - /** @internal */ - static Error_InvalidKeyCode = (o:{keyId: string}) => m(this.ERROR_InvalidKeyCode, - `Invalid key identifier "${o.keyId}"`); - - /** @internal */ - static Warn_TouchLayoutFontShouldBeSameForAllPlatforms = () => m(this.WARN_TouchLayoutFontShouldBeSameForAllPlatforms, - `The touch layout font should be the same for all platforms.`); - - /** @internal */ - static Warn_TouchLayoutMissingRequiredKeys = (o:{layerId:string, platformName:string, missingKeys:string}) => m(this.WARN_TouchLayoutMissingRequiredKeys, - `Layer "${o.layerId}" on platform "${o.platformName}" is missing the required key(s) '${o.missingKeys}'.`); - // Following messages are kmw-compiler only, so use KmwCompiler error namespace /** @internal */ diff --git a/developer/src/kmc-kmn/test/test-messages.ts b/developer/src/kmc-kmn/test/test-messages.ts index 92f8936f327..674dd17e344 100644 --- a/developer/src/kmc-kmn/test/test-messages.ts +++ b/developer/src/kmc-kmn/test/test-messages.ts @@ -6,11 +6,11 @@ import { makePathToFixture } from './helpers/index.js'; import { KmnCompiler } from '../src/main.js'; import { CompilerErrorNamespace } from '@keymanapp/common-types'; -describe('CompilerMessages', function () { +describe('KmnCompilerMessages', function () { const callbacks = new TestCompilerCallbacks(); - it('should have a valid CompilerMessages object', function() { - return verifyCompilerMessagesObject(CompilerMessages, CompilerErrorNamespace.KmnCompiler); + it('should have a valid KmnCompilerMessages object', function() { + return verifyCompilerMessagesObject(KmnCompilerMessages, CompilerErrorNamespace.KmnCompiler); }); // From 828369c8a99c06dc708b45d0a332e330dd0ab34f Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Tue, 27 Feb 2024 17:58:21 -0600 Subject: [PATCH 149/171] fix(resources): support xmlns on keyboard3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add xmlns to schema manually For: chore(developer): support xmlns on keyboard3 files 🙀 #10803 --- .../ldml-keyboards/techpreview/fixup-schema.js | 12 ++++++++++++ .../techpreview/ldml-keyboard3.schema.json | 3 +++ .../techpreview/ldml-keyboardtest3.schema.json | 3 +++ 3 files changed, 18 insertions(+) diff --git a/resources/standards-data/ldml-keyboards/techpreview/fixup-schema.js b/resources/standards-data/ldml-keyboards/techpreview/fixup-schema.js index e1a2d1f393a..4760d24db58 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/fixup-schema.js +++ b/resources/standards-data/ldml-keyboards/techpreview/fixup-schema.js @@ -51,8 +51,15 @@ function singleToArray(o) { if (data.title.endsWith('ldmlKeyboard3.xsd')) { if (data?.properties?.keyboard3) { data.properties.keyboard3.type = 'object'; + + // add the xmlns property as allowed + if (!data.properties.keyboard3?.properties?.xmlns) { + data.properties.keyboard3.properties.xmlns = { type: 'string' }; + } } + + arrayToSingle(data?.properties?.keyboard3?.properties?.vkeys); singleToArray(data?.definitions?.keys?.properties?.key); singleToArray(data?.definitions?.keys?.properties?.flicks); @@ -83,6 +90,11 @@ if (data.title.endsWith('ldmlKeyboard3.xsd')) { if (data.title.endsWith('ldmlKeyboardTest3.xsd')) { if (data?.properties?.keyboardTest3) { data.properties.keyboardTest3.type = 'object'; + + // support this proactively + if (!data.properties.keyboardTest3?.properties?.xmlns) { + data.properties.keyboardTest3.properties.xmlns = { type: 'string' }; + } } } diff --git a/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboard3.schema.json b/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboard3.schema.json index 451174050d7..b4861e6d7d9 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboard3.schema.json +++ b/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboard3.schema.json @@ -675,6 +675,9 @@ }, "version": { "$ref": "#/definitions/version" + }, + "xmlns": { + "type": "string" } }, "required": [ diff --git a/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboardtest3.schema.json b/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboardtest3.schema.json index 476574112be..f9edcd67474 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboardtest3.schema.json +++ b/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboardtest3.schema.json @@ -205,6 +205,9 @@ "$ref": "#/definitions/tests" }, "type": "array" + }, + "xmlns": { + "type": "string" } }, "required": [ From 209717a24a4f6b785853b58e3800f3305860d659 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Tue, 27 Feb 2024 18:11:18 -0600 Subject: [PATCH 150/171] chore(core,developer): rename unicodeSet to uset in xml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit chore(developer): rename unicodeSet to uset 🙀 #10657 --- core/tests/unit/ldml/keyboards/ldml_test.xml | 4 ++-- developer/src/kmc-ldml/test/fixtures/basic.xml | 2 +- .../src/kmc-ldml/test/fixtures/sections/strs/hint-pua.xml | 2 +- .../test/fixtures/sections/strs/invalid-illegal.xml | 2 +- .../test/fixtures/sections/strs/warn-unassigned.xml | 2 +- .../kmc-ldml/test/fixtures/sections/tran/tran-vars-nfc.xml | 6 +++--- .../src/kmc-ldml/test/fixtures/sections/tran/tran-vars.xml | 6 +++--- developer/src/kmc-ldml/test/fixtures/sections/vars/dup0.xml | 2 +- developer/src/kmc-ldml/test/fixtures/sections/vars/dup1.xml | 4 ++-- .../kmc-ldml/test/fixtures/sections/vars/fail-badref-2.xml | 2 +- .../kmc-ldml/test/fixtures/sections/vars/fail-badref-3.xml | 2 +- .../kmc-ldml/test/fixtures/sections/vars/fail-badref-5.xml | 2 +- .../test/fixtures/sections/vars/fail-uset-props1.xml | 2 +- .../test/fixtures/sections/vars/fail-uset-props2.xml | 2 +- .../test/fixtures/sections/vars/fail-uset-strings.xml | 2 +- .../test/fixtures/sections/vars/fail-uset-syntax.xml | 2 +- .../src/kmc-ldml/test/fixtures/sections/vars/maximal.xml | 4 ++-- .../src/kmc-ldml/test/fixtures/sections/vars/minimal.xml | 2 +- 18 files changed, 25 insertions(+), 25 deletions(-) diff --git a/core/tests/unit/ldml/keyboards/ldml_test.xml b/core/tests/unit/ldml/keyboards/ldml_test.xml index 17296a3c8a8..2885d6cc32d 100644 --- a/core/tests/unit/ldml/keyboards/ldml_test.xml +++ b/core/tests/unit/ldml/keyboards/ldml_test.xml @@ -61,8 +61,8 @@ - - + + diff --git a/developer/src/kmc-ldml/test/fixtures/basic.xml b/developer/src/kmc-ldml/test/fixtures/basic.xml index 275aa0f4371..568eb39cf85 100644 --- a/developer/src/kmc-ldml/test/fixtures/basic.xml +++ b/developer/src/kmc-ldml/test/fixtures/basic.xml @@ -33,7 +33,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/strs/hint-pua.xml b/developer/src/kmc-ldml/test/fixtures/sections/strs/hint-pua.xml index 355c5ef2b7b..450ee66a631 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/strs/hint-pua.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/strs/hint-pua.xml @@ -31,7 +31,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/strs/invalid-illegal.xml b/developer/src/kmc-ldml/test/fixtures/sections/strs/invalid-illegal.xml index 034d86b345d..0b76fbe1ce2 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/strs/invalid-illegal.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/strs/invalid-illegal.xml @@ -32,7 +32,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-unassigned.xml b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-unassigned.xml index 553795a0df9..62e1e781192 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-unassigned.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/strs/warn-unassigned.xml @@ -31,7 +31,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-vars-nfc.xml b/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-vars-nfc.xml index d72e209ed30..b99361915ca 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-vars-nfc.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-vars-nfc.xml @@ -13,9 +13,9 @@ - - - + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-vars.xml b/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-vars.xml index 38b6693b1b0..956cb616ecd 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-vars.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/tran/tran-vars.xml @@ -11,9 +11,9 @@ - - - + + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/dup0.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/dup0.xml index 1a93df13497..0ad3b3f7ad5 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/dup0.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/dup0.xml @@ -11,7 +11,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/dup1.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/dup1.xml index 91369d23911..5c2d4af4eee 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/dup1.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/dup1.xml @@ -12,8 +12,8 @@ - - + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-2.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-2.xml index c6bd3159c6f..b263b303659 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-2.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-2.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-3.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-3.xml index 956b8b4e2ea..d6d6349ec66 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-3.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-3.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-5.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-5.xml index 63c009c68cf..70e14736ee7 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-5.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-badref-5.xml @@ -9,7 +9,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-props1.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-props1.xml index c0cd2008db8..097912a7fba 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-props1.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-props1.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-props2.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-props2.xml index 43c6cca2136..aa8cbcb616c 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-props2.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-props2.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-strings.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-strings.xml index 1a4254898a7..129a6acfa52 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-strings.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-strings.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-syntax.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-syntax.xml index 50694739a43..a7313ad03b0 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-syntax.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/fail-uset-syntax.xml @@ -8,7 +8,7 @@ - + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/maximal.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/maximal.xml index 5f464ae7a25..a57b1042978 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/maximal.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/maximal.xml @@ -13,7 +13,7 @@ - - + + diff --git a/developer/src/kmc-ldml/test/fixtures/sections/vars/minimal.xml b/developer/src/kmc-ldml/test/fixtures/sections/vars/minimal.xml index a9ebc962ff4..a0ec80e4887 100644 --- a/developer/src/kmc-ldml/test/fixtures/sections/vars/minimal.xml +++ b/developer/src/kmc-ldml/test/fixtures/sections/vars/minimal.xml @@ -10,7 +10,7 @@ - + From 9c2a73a29079d17f46e6e7f794c0bc64988186b5 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Tue, 27 Feb 2024 18:15:57 -0600 Subject: [PATCH 151/171] chore(common,developer): rename unicodeSet to uset in code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: rename unicodeSet to uset 🙀 #10657 --- .../web/types/src/kmx/kmx-plus-builder/build-vars.ts | 2 +- common/web/types/src/kmx/kmx-plus.ts | 10 +++++----- .../src/ldml-keyboard/ldml-keyboard-xml-reader.ts | 2 +- .../web/types/src/ldml-keyboard/ldml-keyboard-xml.ts | 4 ++-- developer/src/kmc-ldml/src/compiler/vars.ts | 8 ++++---- developer/src/kmc-ldml/test/test-vars.ts | 10 +++++----- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/common/web/types/src/kmx/kmx-plus-builder/build-vars.ts b/common/web/types/src/kmx/kmx-plus-builder/build-vars.ts index daa0e4a46c2..8c09a169f68 100644 --- a/common/web/types/src/kmx/kmx-plus-builder/build-vars.ts +++ b/common/web/types/src/kmx/kmx-plus-builder/build-vars.ts @@ -38,7 +38,7 @@ export function build_vars(kmxplus: KMXPlusData, sect_strs: BUILDER_STRS, sect_e value: build_strs_index(sect_strs, v.value), elem: build_elem_index(sect_elem, v.items), }); - const uniSetVars = kmxplus.vars.unicodeSets.map(v => { + const uniSetVars = kmxplus.vars.usets.map(v => { type: constants.vars_entry_type_unicodeSet, id: build_strs_index(sect_strs, v.id), value: build_strs_index(sect_strs, v.value), diff --git a/common/web/types/src/kmx/kmx-plus.ts b/common/web/types/src/kmx/kmx-plus.ts index f94ff357f5d..6b485a2b2fe 100644 --- a/common/web/types/src/kmx/kmx-plus.ts +++ b/common/web/types/src/kmx/kmx-plus.ts @@ -228,19 +228,19 @@ export class Strs extends Section { */ export class Vars extends Section { totalCount() : number { - return this.strings.length + this.sets.length + this.unicodeSets.length; + return this.strings.length + this.sets.length + this.usets.length; } markers: ListItem; strings: StringVarItem[] = []; // ≠ StrsItem sets: SetVarItem[] = []; - unicodeSets: UnicodeSetItem[] = []; + usets: UnicodeSetItem[] = []; /** * * @returns false if any invalid variables */ valid() : boolean { - for (const t of [this.sets, this.strings, this.unicodeSets]) { + for (const t of [this.sets, this.strings, this.usets]) { for (const i of t) { if (!i.valid()) { return false; @@ -264,7 +264,7 @@ export class Vars extends Section { } substituteUnicodeSets(value: string, sections: DependencySections): string { return value.replaceAll(VariableParser.SET_REFERENCE, (_entire, id) => { - const v = Vars.findVariable(this.unicodeSets, id); + const v = Vars.findVariable(this.usets, id); if (v === null) { // Should have been caught during validation. throw Error(`Internal Error: reference to missing UnicodeSet variable ${id}`); @@ -297,7 +297,7 @@ export class Vars extends Section { } // try as unicodeset - const uset = Vars.findVariable(this.unicodeSets, id); + const uset = Vars.findVariable(this.usets, id); if (uset !== null) { const { unicodeSet } = uset; const inner = unicodeSet.ranges.map(([start, end]) => { diff --git a/common/web/types/src/ldml-keyboard/ldml-keyboard-xml-reader.ts b/common/web/types/src/ldml-keyboard/ldml-keyboard-xml-reader.ts index 8ff142693e1..5c58bd383e1 100644 --- a/common/web/types/src/ldml-keyboard/ldml-keyboard-xml-reader.ts +++ b/common/web/types/src/ldml-keyboard/ldml-keyboard-xml-reader.ts @@ -87,7 +87,7 @@ export class LDMLKeyboardXMLSourceFileReader { if(source?.keyboard3?.variables) { boxXmlArray(source?.keyboard3?.variables, 'set'); boxXmlArray(source?.keyboard3?.variables, 'string'); - boxXmlArray(source?.keyboard3?.variables, 'unicodeSet'); + boxXmlArray(source?.keyboard3?.variables, 'uset'); } if(source?.keyboard3?.transforms) { for(let transforms of source.keyboard3.transforms) { diff --git a/common/web/types/src/ldml-keyboard/ldml-keyboard-xml.ts b/common/web/types/src/ldml-keyboard/ldml-keyboard-xml.ts index abde61c4280..d47cb656198 100644 --- a/common/web/types/src/ldml-keyboard/ldml-keyboard-xml.ts +++ b/common/web/types/src/ldml-keyboard/ldml-keyboard-xml.ts @@ -124,7 +124,7 @@ export interface LKRow { export interface LKVariables { string?: LKString[]; set?: LKSet[]; - unicodeSet?: LKUnicodeSet[]; + uset?: LKUSet[]; }; /** @@ -137,7 +137,7 @@ export interface Variable { export interface LKString extends Variable {}; export interface LKSet extends Variable {}; -export interface LKUnicodeSet extends Variable {}; +export interface LKUSet extends Variable {}; export interface LKTransforms { type?: "simple" | "backspace"; diff --git a/developer/src/kmc-ldml/src/compiler/vars.ts b/developer/src/kmc-ldml/src/compiler/vars.ts index 4fe66233ada..dbbb07d06ed 100644 --- a/developer/src/kmc-ldml/src/compiler/vars.ts +++ b/developer/src/kmc-ldml/src/compiler/vars.ts @@ -95,7 +95,7 @@ export class VarsCompiler extends SectionCompiler { } } // UnicodeSets - for (const { id, value } of variables.unicodeSet) { + for (const { id, value } of variables.uset) { addId(id); allUnicodeSets.add(id); const stringrefs = VariableParser.allStringReferences(value); @@ -210,7 +210,7 @@ export class VarsCompiler extends SectionCompiler { this.addString(result, e, sections)); variables?.set?.forEach((e) => this.addSet(result, e, sections)); - variables?.unicodeSet?.forEach((e) => + variables?.uset?.forEach((e) => this.addUnicodeSet(result, e, sections)); // reload markers - TODO-LDML: double work! @@ -243,12 +243,12 @@ export class VarsCompiler extends SectionCompiler { const items : string[] = VariableParser.setSplitter(value); result.sets.push(new SetVarItem(id, items, sections)); } - addUnicodeSet(result: Vars, e: LDMLKeyboard.LKUnicodeSet, sections: DependencySections): void { + addUnicodeSet(result: Vars, e: LDMLKeyboard.LKUSet, sections: DependencySections): void { const { id } = e; let { value } = e; value = result.substituteStrings(value, sections); value = result.substituteUnicodeSets(value, sections); - result.unicodeSets.push(new UnicodeSetItem(id, value, sections, sections.usetparser)); + result.usets.push(new UnicodeSetItem(id, value, sections, sections.usetparser)); } // routines for using/substituting variables have been moved to the Vars class and its // properties diff --git a/developer/src/kmc-ldml/test/test-vars.ts b/developer/src/kmc-ldml/test/test-vars.ts index 4b053c30d23..e3ac53c4a92 100644 --- a/developer/src/kmc-ldml/test/test-vars.ts +++ b/developer/src/kmc-ldml/test/test-vars.ts @@ -32,7 +32,7 @@ describe('vars', function () { const vars = sect; assert.equal(1, vars.sets?.length); assert.equal(1, vars.strings?.length); - assert.equal(1, vars.unicodeSets?.length); + assert.equal(1, vars.usets?.length); const set0 = vars.sets[0]; assert.equal(set0.id.value, "upper"); assert.equal(set0.value.value, "A B C D E FF"); @@ -42,7 +42,7 @@ describe('vars', function () { const string0 = vars.strings[0]; assert.equal(string0.id.value, "y"); assert.equal(string0.value.value, "yes"); - const unicodeSet0 = vars.unicodeSets[0]; + const unicodeSet0 = vars.usets[0]; assert.equal(unicodeSet0.id.value, "consonants"); assert.equal(unicodeSet0.value.value, "[कसतनमह]"); assert.sameDeepOrderedMembers(unicodeSet0.unicodeSet.ranges, [ @@ -84,8 +84,8 @@ describe('vars', function () { "A", "B", "C", "D", "E", "FF", "Yes", "a", "b", "c", "Z", ]); - assert.equal(2, vars.unicodeSets?.length); - const unicodeSet0 = vars.unicodeSets[0]; + assert.equal(2, vars.usets?.length); + const unicodeSet0 = vars.usets[0]; assert.equal(unicodeSet0.id.value, "consonants"); assert.equal(unicodeSet0.value.value, "[कसतनमह]"); assert.sameDeepOrderedMembers(unicodeSet0.unicodeSet.ranges, [ @@ -96,7 +96,7 @@ describe('vars', function () { [cp('स'), cp('ह')], // range of 2 ]); - const unicodeSet1 = vars.unicodeSets[1]; + const unicodeSet1 = vars.usets[1]; assert.equal(unicodeSet1.id.value, "mixture"); assert.equal(unicodeSet1.value.value, "[[abc][कसतनमह]]"); // not canonicalized, just the raw expansion assert.sameDeepOrderedMembers(unicodeSet1.unicodeSet.ranges, [ From 36baa5845b285ad68f5c64ade3406f8bdb4c2bf7 Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 28 Feb 2024 09:47:57 +0700 Subject: [PATCH 152/171] chore(android/engine): Reduce toast notifications after installations Remove Toast notifications for: * Dictionary download is finished * Resources successfully updated --- .../cloud/impl/CloudLexicalPackageDownloadCallback.java | 3 --- .../java/com/keyman/engine/logic/ResourcesUpdateTool.java | 1 - android/KMEA/app/src/main/res/values/strings.xml | 4 ++-- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/cloud/impl/CloudLexicalPackageDownloadCallback.java b/android/KMEA/app/src/main/java/com/keyman/engine/cloud/impl/CloudLexicalPackageDownloadCallback.java index dac380b8cbb..e98b0e36d05 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/cloud/impl/CloudLexicalPackageDownloadCallback.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/cloud/impl/CloudLexicalPackageDownloadCallback.java @@ -2,7 +2,6 @@ import android.content.Context; import android.net.Uri; -import android.widget.Toast; import com.keyman.engine.BaseActivity; import com.keyman.engine.KMKeyboardDownloaderActivity; @@ -99,8 +98,6 @@ public CloudKeyboardDownloadReturns extractCloudResultFromDownloadSet( @Override public void applyCloudDownloadToModel(Context aContext, Void aModel, CloudKeyboardDownloadReturns aCloudResult) { - BaseActivity.makeToast(aContext, R.string.dictionary_download_finished, Toast.LENGTH_SHORT); - if(aCloudResult.installedResource != null) { KeyboardEventHandler.notifyListeners(KMKeyboardDownloaderActivity.getKbDownloadEventListeners(), diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/logic/ResourcesUpdateTool.java b/android/KMEA/app/src/main/java/com/keyman/engine/logic/ResourcesUpdateTool.java index bc749dc2650..18b29ceb764 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/logic/ResourcesUpdateTool.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/logic/ResourcesUpdateTool.java @@ -572,7 +572,6 @@ void tryFinalizeUpdate() { updateFailed = true; checkingUpdates = false; } else { - BaseActivity.makeToast(currentContext, R.string.update_success, Toast.LENGTH_SHORT); lastUpdateCheck = Calendar.getInstance(); SharedPreferences prefs = currentContext.getSharedPreferences(currentContext.getString(R.string.kma_prefs_name), Context.MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); diff --git a/android/KMEA/app/src/main/res/values/strings.xml b/android/KMEA/app/src/main/res/values/strings.xml index eceebd47be1..506626cd244 100644 --- a/android/KMEA/app/src/main/res/values/strings.xml +++ b/android/KMEA/app/src/main/res/values/strings.xml @@ -172,7 +172,7 @@ The selected dictionary is already downloading; please try again in a moment! - + Dictionary download is finished. @@ -190,7 +190,7 @@ One or more resources failed to update! - + Resources successfully updated! From 0fcbb84dfa83f2f387c23d44ca5804c2b49dc9cc Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Wed, 28 Feb 2024 10:15:37 +0700 Subject: [PATCH 153/171] fix(web): context save-state on reset --- android/KMEA/app/src/main/assets/android-host.js | 14 ++++++++++---- web/src/app/webview/src/contextManager.ts | 12 +++++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/android/KMEA/app/src/main/assets/android-host.js b/android/KMEA/app/src/main/assets/android-host.js index 8c4fd7da8fb..04a9ba44c19 100644 --- a/android/KMEA/app/src/main/assets/android-host.js +++ b/android/KMEA/app/src/main/assets/android-host.js @@ -1,4 +1,4 @@ -var _debug = 0; +var _debug = false; // Android harness attachment if(window.parent && window.parent.jsInterface && !window.jsInterface) { @@ -235,7 +235,7 @@ function updateKMText(text) { text = ''; } - console_debug('updateKMText(text='+text+') context.value='+keyman.context.getText()); + console_debug('updateKMText(text=' + text + ') with: ' + build_context_string(keyman.context)); if(text != keyman.context.getText()) { keyman.context.setText(text); @@ -249,11 +249,17 @@ function console_debug(s) { } } +function build_context_string(context) { + // Sadly, ES6-style "template strings" - strings with backticks - require Chrome 41+. + return 'preCaret: `' + context.getTextBeforeCaret() + '`\n' + + 'selected: `' + context.getSelectedText() + '`\n' + + 'postCaret: `' + context.getTextAfterCaret() + '`'; +} + function updateKMSelectionRange(start, end) { var context = keyman.context; - // console_debug('updateKMSelectionRange('+start+','+end+'): context.selStart='+ta.selectionStart+' '+ - // '['+ta._KeymanWebSelectionStart+'] context.selEnd='+ta.selectionEnd+' '+ta._KeymanWebSelectionEnd); + console_debug('updateKMSelectionRange(' + start + ', ' + end + ') with: ' + build_context_string(context)); if(start > end) { var e0 = end; diff --git a/web/src/app/webview/src/contextManager.ts b/web/src/app/webview/src/contextManager.ts index b887bac15c5..2f6cfd6ae7a 100644 --- a/web/src/app/webview/src/contextManager.ts +++ b/web/src/app/webview/src/contextManager.ts @@ -12,6 +12,7 @@ export class ContextHost extends Mock { constructor(oninserttext: OnInsertTextFunc) { super(); this.oninserttext = oninserttext; + this.saveState(); } apply(transform: Transform): void { @@ -45,6 +46,10 @@ export class ContextHost extends Mock { } // Save the current context state for use in future diffs. + this.saveState(); + } + + saveState() { this.savedState = Mock.from(this); } @@ -77,7 +82,7 @@ export class ContextHost extends Mock { this.setSelection(this.text._kmwLength()); } - this.savedState = Mock.from(this); + this.saveState(); return shouldResetContext; } @@ -183,4 +188,9 @@ export default class ContextManager extends ContextManagerBase Date: Wed, 28 Feb 2024 10:25:26 +0700 Subject: [PATCH 154/171] chore(android): minor debug-message format tweak --- android/KMEA/app/src/main/assets/android-host.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/KMEA/app/src/main/assets/android-host.js b/android/KMEA/app/src/main/assets/android-host.js index 04a9ba44c19..01d0a7f4608 100644 --- a/android/KMEA/app/src/main/assets/android-host.js +++ b/android/KMEA/app/src/main/assets/android-host.js @@ -235,7 +235,7 @@ function updateKMText(text) { text = ''; } - console_debug('updateKMText(text=' + text + ') with: ' + build_context_string(keyman.context)); + console_debug('updateKMText(text=' + text + ') with: \n' + build_context_string(keyman.context)); if(text != keyman.context.getText()) { keyman.context.setText(text); @@ -259,7 +259,7 @@ function build_context_string(context) { function updateKMSelectionRange(start, end) { var context = keyman.context; - console_debug('updateKMSelectionRange(' + start + ', ' + end + ') with: ' + build_context_string(context)); + console_debug('updateKMSelectionRange(' + start + ', ' + end + ') with: \n' + build_context_string(context)); if(start > end) { var e0 = end; From c7afed7201c1b6a87241b2856fa710bcd21f8602 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 28 Feb 2024 11:34:49 +0700 Subject: [PATCH 155/171] refactor(developer): split messages with callstacks into separate generator Relates to #10207. In order to include message detail in messages, it is helpful to split out the exception messages which have a separate parameter, so that parameter at the same position can be the message detail. Introduces the CompilerMessageSpecWithException function which takes an exceptionVar parameter to achieve this differentiation. --- common/web/types/src/main.ts | 2 +- common/web/types/src/util/compiler-interfaces.ts | 8 ++++++-- developer/src/common/web/utils/src/osk.ts | 16 ++++++++-------- developer/src/kmc-analyze/src/messages.ts | 4 ++-- .../src/keyboard-info-compiler-messages.ts | 4 ++-- .../src/compiler/kmn-compiler-messages.ts | 14 +++++++------- .../src/kmw-compiler/kmw-compiler-messages.ts | 4 ++-- developer/src/kmc-ldml/src/compiler/messages.ts | 4 ++-- .../src/model-info-compiler-messages.ts | 4 ++-- .../src/kmc-model/src/model-compiler-messages.ts | 14 ++++++++++---- .../src/compiler/package-compiler-messages.ts | 4 ++-- .../kmc/src/messages/infrastructureMessages.ts | 6 +++--- 12 files changed, 47 insertions(+), 37 deletions(-) diff --git a/common/web/types/src/main.ts b/common/web/types/src/main.ts index b91671e87ef..9feaaa52704 100644 --- a/common/web/types/src/main.ts +++ b/common/web/types/src/main.ts @@ -23,7 +23,7 @@ export * as Constants from './consts/virtual-key-constants.js'; export { defaultCompilerOptions, CompilerBaseOptions, CompilerCallbacks, CompilerOptions, CompilerEvent, CompilerErrorNamespace, CompilerErrorSeverity, CompilerPathCallbacks, CompilerFileSystemCallbacks, CompilerCallbackOptions, - CompilerError, CompilerMessageSpec, compilerErrorSeverity, CompilerErrorMask, CompilerFileCallbacks, compilerErrorSeverityName, + CompilerError, CompilerMessageSpec, CompilerMessageSpecWithException, compilerErrorSeverity, CompilerErrorMask, CompilerFileCallbacks, compilerErrorSeverityName, compilerExceptionToString, compilerErrorFormatCode, compilerLogLevelToSeverity, CompilerLogLevel, compilerEventFormat, ALL_COMPILER_LOG_LEVELS, ALL_COMPILER_LOG_FORMATS, CompilerLogFormat, diff --git a/common/web/types/src/util/compiler-interfaces.ts b/common/web/types/src/util/compiler-interfaces.ts index a7e2fba8416..f2e475fb831 100644 --- a/common/web/types/src/util/compiler-interfaces.ts +++ b/common/web/types/src/util/compiler-interfaces.ts @@ -528,14 +528,18 @@ export const defaultCompilerOptions: CompilerOptions = { * @param message * @returns */ -export const CompilerMessageSpec = (code: number, message: string, exceptionVar?: any) : CompilerEvent => ({ +export const CompilerMessageSpec = (code: number, message: string) : CompilerEvent => ({ + code, + message, +}); + +export const CompilerMessageSpecWithException = (code: number, message: string, exceptionVar: any) : CompilerEvent => ({ code, message: exceptionVar ? (message ?? `Unexpected exception`) + `: ${exceptionVar.toString()}\n\nCall stack:\n${(exceptionVar instanceof Error ? exceptionVar.stack : (new Error()).stack)}` : message, exceptionVar }); - /** * @deprecated use `CompilerError.exceptionToString` instead */ diff --git a/developer/src/common/web/utils/src/osk.ts b/developer/src/common/web/utils/src/osk.ts index 8b39ca595cf..f2216273e8e 100644 --- a/developer/src/common/web/utils/src/osk.ts +++ b/developer/src/common/web/utils/src/osk.ts @@ -37,8 +37,8 @@ export function parseMapping(mapping: any) { throw new Error(JSON.stringify((SchemaValidators.default.displayMap).errors)); } - let map: PuaMap = {}; - for (let item of mapping.map) { + const map: PuaMap = {}; + for (const item of mapping.map) { map[item.str] = String.fromCharCode(parseInt(item.pua, 16)); } return map; @@ -62,7 +62,7 @@ function remap(text: string, map: PuaMap) { export function remapVisualKeyboard(vk: VisualKeyboard.VisualKeyboard, map: PuaMap): boolean { let dirty = false; - for(let key of vk.keys) { + for(const key of vk.keys) { if(!key.text) { continue; } @@ -92,18 +92,18 @@ export function remapTouchLayout(source: TouchLayout.TouchLayoutFile, map: PuaMa if(!platform) { return; } - for(let layer of platform.layer) { - for(let row of layer.row) { - for(let key of row.key) { + for(const layer of platform.layer) { + for(const row of layer.row) { + for(const key of row.key) { scanKey(key); let f: keyof TouchLayout.TouchLayoutFlick; for(f in key.flick ?? {}) { scanKey(key.flick[f]); } - for(let sk of key.sk ?? []) { + for(const sk of key.sk ?? []) { scanKey(sk); } - for(let mt of key.multitap ?? []) { + for(const mt of key.multitap ?? []) { scanKey(mt); } } diff --git a/developer/src/kmc-analyze/src/messages.ts b/developer/src/kmc-analyze/src/messages.ts index 3bc884ace13..0dd52083032 100644 --- a/developer/src/kmc-analyze/src/messages.ts +++ b/developer/src/kmc-analyze/src/messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.Analyzer; const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -13,7 +13,7 @@ const SevFatal = CompilerErrorSeverity.Fatal | Namespace; */ export class AnalyzerMessages { /** @internal */ - static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); /** * Raised when an analysis components experiences an internal error. If you * experience this error, it should be reported to the Keyman team for diff --git a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts index 2bea6d4bd63..5034d06bcc9 100644 --- a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts +++ b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.KeyboardInfoCompiler; // const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -8,7 +8,7 @@ const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; export class KeyboardInfoCompilerMessages { - static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); static FATAL_UnexpectedException = SevFatal | 0x0001; static Error_FileDoesNotExist = (o:{filename: string}) => m(this.ERROR_FileDoesNotExist, `File ${o.filename} does not exist.`); diff --git a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts index eb04f858771..0e85e1f328b 100644 --- a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec as m } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; import { kmnfile } from "../kmw-compiler/compiler-globals.js"; const Namespace = CompilerErrorNamespace.KmnCompiler; @@ -11,8 +11,8 @@ const SevFatal = CompilerErrorSeverity.Fatal | Namespace; // For messages from the KeymanWeb compiler, we need to construct our messages // slightly differently. This could be refactored in the future, as it is not // obvious which messages should use which function. -const mw = (code: number, message: string, o?: {e?: any, filename?: string, line?: number}) : CompilerEvent => ({ - ...m(code, message, o?.e), +const mw = (code: number, message: string, o?: {filename?: string, line?: number}) : CompilerEvent => ({ + ...m(code, message), filename: o?.filename ?? kmnfile, line: o?.line, }); @@ -80,7 +80,7 @@ export class KmnCompilerMessages { // parameterisation. /** @internal */ - static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); /** * Raised when KmnCompiler or one of its components experiences an internal * error. If you experience this error, it should be reported to the Keyman @@ -89,7 +89,7 @@ export class KmnCompilerMessages { static FATAL_UnexpectedException = SevFatal | 0x900; /** @internal */ - static Fatal_MissingWasmModule = (o:{e?: any}) => m(this.FATAL_MissingWasmModule, + static Fatal_MissingWasmModule = (o:{e?: any}) => CompilerMessageSpecWithException(this.FATAL_MissingWasmModule, `Could not instantiate WASM compiler module or initialization failed`, o.e ?? 'unknown error'); /** * Raised when the kmcmplib component could be instantiated. This may indicate @@ -103,7 +103,7 @@ export class KmnCompilerMessages { // static FATAL_UnableToSetCompilerOptions = SevFatal | 0x902; /** @internal */ - static Fatal_CallbacksNotSet = () => m(this.FATAL_CallbacksNotSet, null, `Callbacks were not set with init`); + static Fatal_CallbacksNotSet = () => CompilerMessageSpecWithException(this.FATAL_CallbacksNotSet, null, `Callbacks were not set with init`); /** * Raised when KmnCompiler or one of its components experiences an internal * error. If you experience this error, it should be reported to the Keyman @@ -112,7 +112,7 @@ export class KmnCompilerMessages { static FATAL_CallbacksNotSet = SevFatal | 0x903; /** @internal */ - static Fatal_UnicodeSetOutOfRange = () => m(this.FATAL_UnicodeSetOutOfRange, null, `UnicodeSet buffer was too small`); + static Fatal_UnicodeSetOutOfRange = () => CompilerMessageSpecWithException(this.FATAL_UnicodeSetOutOfRange, null, `UnicodeSet buffer was too small`); /** * Raised when caller to UnicodeSet functions provides an invalid buffer. If * you experience this error, it should be reported to the Keyman team for diff --git a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts index 5f9b0b869fc..d94b51f42a9 100644 --- a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts @@ -9,8 +9,8 @@ const SevHint = CompilerErrorSeverity.Hint | Namespace; const SevError = CompilerErrorSeverity.Error | Namespace; // const SevFatal = CompilerErrorSeverity.Fatal | Namespace; -const m = (code: number, message: string, o?: {e?: any, filename?: string, line?: number}) : CompilerEvent => ({ - ...CompilerMessageSpec(code, message, o?.e), +const m = (code: number, message: string, o?: {filename?: string, line?: number}) : CompilerEvent => ({ + ...CompilerMessageSpec(code, message), filename: o?.filename ?? kmnfile, line: o?.line, }); diff --git a/developer/src/kmc-ldml/src/compiler/messages.ts b/developer/src/kmc-ldml/src/compiler/messages.ts index 1c015d53969..6790f9ec356 100644 --- a/developer/src/kmc-ldml/src/compiler/messages.ts +++ b/developer/src/kmc-ldml/src/compiler/messages.ts @@ -1,4 +1,4 @@ -import { util, CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m } from "@keymanapp/common-types"; +import { util, CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; // const SevInfo = CompilerErrorSeverity.Info | CompilerErrorNamespace.LdmlKeyboardCompiler; const SevHint = CompilerErrorSeverity.Hint | CompilerErrorNamespace.LdmlKeyboardCompiler; const SevWarn = CompilerErrorSeverity.Warn | CompilerErrorNamespace.LdmlKeyboardCompiler; @@ -57,7 +57,7 @@ export class CompilerMessages { static ERROR_MustBeAtLeastOneLayerElement = SevError | 0x000E; static Fatal_SectionCompilerFailed = (o:{sect: string}) => - m(this.FATAL_SectionCompilerFailed, null, `The compiler for '${o.sect}' failed unexpectedly.`); + CompilerMessageSpecWithException(this.FATAL_SectionCompilerFailed, null, `The compiler for '${o.sect}' failed unexpectedly.`); static FATAL_SectionCompilerFailed = SevFatal | 0x000F; /** annotate the to= or id= entry */ diff --git a/developer/src/kmc-model-info/src/model-info-compiler-messages.ts b/developer/src/kmc-model-info/src/model-info-compiler-messages.ts index 03dce78613a..847c98ab3ff 100644 --- a/developer/src/kmc-model-info/src/model-info-compiler-messages.ts +++ b/developer/src/kmc-model-info/src/model-info-compiler-messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.ModelInfoCompiler; // const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -8,7 +8,7 @@ const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; export class ModelInfoCompilerMessages { - static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); static FATAL_UnexpectedException = SevFatal | 0x0001; static Error_FileDoesNotExist = (o:{filename: string}) => m(this.ERROR_FileDoesNotExist, `File ${o.filename} does not exist.`); diff --git a/developer/src/kmc-model/src/model-compiler-messages.ts b/developer/src/kmc-model/src/model-compiler-messages.ts index 5d112eb96b6..aab2febff6d 100644 --- a/developer/src/kmc-model/src/model-compiler-messages.ts +++ b/developer/src/kmc-model/src/model-compiler-messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.ModelCompiler; // const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -7,8 +7,14 @@ const SevHint = CompilerErrorSeverity.Hint | Namespace; const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; -const m = (code: number, message: string, exceptionVar?: any) : CompilerEvent => ({ - ...CompilerMessageSpec(code, message, exceptionVar), +const m = (code: number, message: string) : CompilerEvent => ({ + ...CompilerMessageSpec(code, message), + line: ModelCompilerMessageContext.line, + filename: ModelCompilerMessageContext.filename, +}); + +const m_e = (code: number, message: string, exceptionVar: any) : CompilerEvent => ({ + ...CompilerMessageSpecWithException(code, message, exceptionVar), line: ModelCompilerMessageContext.line, filename: ModelCompilerMessageContext.filename, }); @@ -21,7 +27,7 @@ export class ModelCompilerMessageContext { export class ModelCompilerMessages { - static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); + static Fatal_UnexpectedException = (o:{e: any}) => m_e(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); static FATAL_UnexpectedException = SevFatal | 0x0001; static Hint_MixedNormalizationForms = (o:{wordform: string}) => m(this.HINT_MixedNormalizationForms, diff --git a/developer/src/kmc-package/src/compiler/package-compiler-messages.ts b/developer/src/kmc-package/src/compiler/package-compiler-messages.ts index cec733d3d84..c2b3dc6b30e 100644 --- a/developer/src/kmc-package/src/compiler/package-compiler-messages.ts +++ b/developer/src/kmc-package/src/compiler/package-compiler-messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.PackageCompiler; const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -8,7 +8,7 @@ const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; export class CompilerMessages { - static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); static FATAL_UnexpectedException = SevFatal | 0x0001; static Warn_AbsolutePath = (o:{filename: string}) => m(this.WARN_AbsolutePath, `File ${o.filename} has an absolute path, which is not portable.`); diff --git a/developer/src/kmc/src/messages/infrastructureMessages.ts b/developer/src/kmc/src/messages/infrastructureMessages.ts index 1288698e00a..0d8b0d76d2d 100644 --- a/developer/src/kmc/src/messages/infrastructureMessages.ts +++ b/developer/src/kmc/src/messages/infrastructureMessages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.Infrastructure; const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -8,7 +8,7 @@ const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; export class InfrastructureMessages { - static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); static FATAL_UnexpectedException = SevFatal | 0x0001; // For this message, we override the filename with the passed-in file. A bit of a hack but does the job @@ -76,7 +76,7 @@ export class InfrastructureMessages { `The build failed because option "treat warnings as errors" is enabled and there are one or more warnings.`); static INFO_WarningsHaveFailedBuild = SevInfo | 0x0010; - static Error_CannotCreateFolder = (o:{folderName:string, e: any}) => m(this.ERROR_CannotCreateFolder, null, + static Error_CannotCreateFolder = (o:{folderName:string, e: any}) => CompilerMessageSpecWithException(this.ERROR_CannotCreateFolder, null, `Unable to create folder ${o.folderName}: ${o.e ?? 'unknown error'}`); static ERROR_CannotCreateFolder = SevError | 0x0011; From 4211820c050bcaefa0896d07033ef650b45aa87d Mon Sep 17 00:00:00 2001 From: rc-swag <58423624+rc-swag@users.noreply.github.com> Date: Wed, 28 Feb 2024 15:20:55 +1000 Subject: [PATCH 156/171] feat(windows): Move code form dpr to unit The IDE would put strange indents into the main loop code in the dpr project file. This code has now been removed to the a new unit Keyman.Configuration.System.Main --- windows/src/desktop/kmshell/kmshell.dpr | 31 +++-------------------- windows/src/desktop/kmshell/kmshell.dproj | 9 ++++--- 2 files changed, 8 insertions(+), 32 deletions(-) diff --git a/windows/src/desktop/kmshell/kmshell.dpr b/windows/src/desktop/kmshell/kmshell.dpr index 722a277bf13..3726d81cd2d 100644 --- a/windows/src/desktop/kmshell/kmshell.dpr +++ b/windows/src/desktop/kmshell/kmshell.dpr @@ -176,7 +176,8 @@ uses TaskScheduler_TLB in '..\..\global\delphi\winapi\TaskScheduler_TLB.pas', Keyman.Configuration.System.HttpServer.App.TextEditorFonts in 'startup\help\Keyman.Configuration.System.HttpServer.App.TextEditorFonts.pas', Keyman.Configuration.System.HttpServer.App.Locale in 'web\Keyman.Configuration.System.HttpServer.App.Locale.pas', - Keyman.System.AndroidStringToKeymanLocaleString in '..\..\..\..\common\windows\delphi\general\Keyman.System.AndroidStringToKeymanLocaleString.pas'; + Keyman.System.AndroidStringToKeymanLocaleString in '..\..\..\..\common\windows\delphi\general\Keyman.System.AndroidStringToKeymanLocaleString.pas', + Keyman.Configuration.System.Main in 'main\Keyman.Configuration.System.Main.pas'; {$R VERSION.RES} {$R manifest.res} @@ -185,33 +186,7 @@ uses // If you don't add this flag the rederer process will crash when you try to load large images. {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} -const - LOGGER_DESKTOP_KMSHELL = TKeymanSentryClient.LOGGER_DESKTOP + '.kmshell'; begin - TKeymanSentryClient.Start(TSentryClientVcl, kscpDesktop, LOGGER_DESKTOP_KMSHELL, LoadKeymanDesktopSentryFlags); - try - CoInitFlags := COINIT_APARTMENTTHREADED; - FInitializeCEF := TCEFManager.Create; - try - if FInitializeCEF.Start then - try - Application.Initialize; - Application.Title := 'Keyman Configuration'; - Application.CreateForm(TmodWebHttpServer, modWebHttpServer); - try - Run; - finally - FreeAndNil(modWebHttpServer); - end; - except - on E:Exception do - SentryHandleException(E); - end; - finally - FInitializeCEF.Free; - end; - finally - TKeymanSentryClient.Stop; - end; + RunKeymanConfiguration; end. diff --git a/windows/src/desktop/kmshell/kmshell.dproj b/windows/src/desktop/kmshell/kmshell.dproj index 5d716d8c4a5..d5d3922e2a0 100644 --- a/windows/src/desktop/kmshell/kmshell.dproj +++ b/windows/src/desktop/kmshell/kmshell.dproj @@ -353,6 +353,7 @@ + Cfg_2 @@ -420,15 +421,15 @@ true - + - .\ + kmshell.exe true - + - kmshell.exe + .\ true From 220351aace8884be37445141de4459596d212635 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Wed, 28 Feb 2024 14:01:05 +0700 Subject: [PATCH 157/171] chore(android): per Darcy review comment --- android/KMEA/app/src/main/assets/android-host.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/android/KMEA/app/src/main/assets/android-host.js b/android/KMEA/app/src/main/assets/android-host.js index 01d0a7f4608..c1ab15b287a 100644 --- a/android/KMEA/app/src/main/assets/android-host.js +++ b/android/KMEA/app/src/main/assets/android-host.js @@ -240,6 +240,11 @@ function updateKMText(text) { if(text != keyman.context.getText()) { keyman.context.setText(text); keyman.resetContext(); + + + console_debug('result: \n' + build_context_string(keyman.context)); + } else { + console_debug('context unchanged'); } } @@ -270,6 +275,10 @@ function updateKMSelectionRange(start, end) { if(context.selStart != start || context.selEnd != end) { keyman.context.setSelection(start, end); keyman.resetContext(); + + console_debug('result:\n' + build_context_string(context)); + } else { + console.debug('range unchanged'); } } From 4bb9b39ba24345c8a91d6c5e3d9df11f63bd8f55 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 28 Feb 2024 16:00:02 +0700 Subject: [PATCH 158/171] refactor(developer): reorganize messages for adding details Moved the ERROR_Message line above the Error_Message line for every message in the compiler message files, as it makes the grouping clearer once we start adding message details. For example, see the start of the KmnCompilerMessages class. Also wraps potentially-undefined parameters to the messages with a new function `def`, shorthand for `CompilerMessageDef`, which converts the parameter to '' if it is undefined, which is helpful for documentation. --- common/web/types/src/main.ts | 2 +- common/web/types/src/util/common-events.ts | 30 +- .../web/types/src/util/compiler-interfaces.ts | 27 +- developer/src/kmc-analyze/src/messages.ts | 30 +- .../src/keyboard-info-compiler-messages.ts | 50 +- .../src/compiler/kmn-compiler-messages.ts | 555 +++++++++--------- .../src/kmw-compiler/kmw-compiler-messages.ts | 25 +- .../src/kmc-ldml/src/compiler/messages.ts | 138 ++--- .../src/model-info-compiler-messages.ts | 32 +- .../kmc-model/src/model-compiler-messages.ts | 34 +- .../src/compiler/package-compiler-messages.ts | 100 ++-- .../src/messages/infrastructureMessages.ts | 92 +-- 12 files changed, 555 insertions(+), 560 deletions(-) diff --git a/common/web/types/src/main.ts b/common/web/types/src/main.ts index 9feaaa52704..5c79ed67614 100644 --- a/common/web/types/src/main.ts +++ b/common/web/types/src/main.ts @@ -24,7 +24,7 @@ export * as Constants from './consts/virtual-key-constants.js'; export { defaultCompilerOptions, CompilerBaseOptions, CompilerCallbacks, CompilerOptions, CompilerEvent, CompilerErrorNamespace, CompilerErrorSeverity, CompilerPathCallbacks, CompilerFileSystemCallbacks, CompilerCallbackOptions, CompilerError, CompilerMessageSpec, CompilerMessageSpecWithException, compilerErrorSeverity, CompilerErrorMask, CompilerFileCallbacks, compilerErrorSeverityName, - compilerExceptionToString, compilerErrorFormatCode, + compilerErrorFormatCode, CompilerMessageDef, compilerLogLevelToSeverity, CompilerLogLevel, compilerEventFormat, ALL_COMPILER_LOG_LEVELS, ALL_COMPILER_LOG_FORMATS, CompilerLogFormat, CompilerMessageOverride, diff --git a/common/web/types/src/util/common-events.ts b/common/web/types/src/util/common-events.ts index 4fb78f7100e..eee8a6c84ca 100644 --- a/common/web/types/src/util/common-events.ts +++ b/common/web/types/src/util/common-events.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m } from './compiler-interfaces.js'; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageDef as def, CompilerMessageSpec as m } from './compiler-interfaces.js'; import { constants } from '@keymanapp/ldml-keyboard-constants'; const CommonTypesErrMask = CompilerErrorNamespace.CommonTypes; @@ -10,37 +10,37 @@ const SevError = CompilerErrorSeverity.Error | CommonTypesErrMask; export class CommonTypesMessages { // structured Ajv validation error - static Error_SchemaValidationError = (o:{instancePath:string, keyword:string, message: string, params: string}) => m(this.ERROR_SchemaValidationError, - `Error validating LDML XML file: ${o.instancePath}: ${o.keyword}: ${o.message} ${o.params}`); static ERROR_SchemaValidationError = SevError | 0x0001; + static Error_SchemaValidationError = (o:{instancePath:string, keyword:string, message: string, params: string}) => m(this.ERROR_SchemaValidationError, + `Error validating LDML XML file: ${def(o.instancePath)}: ${def(o.keyword)}: ${def(o.message)} ${def(o.params)}`); + static ERROR_ImportInvalidBase = SevError | 0x0002; static Error_ImportInvalidBase = (o: { base: string, path: string, subtag: string }) => m(this.ERROR_ImportInvalidBase, - `Import element with base ${o.base} is unsupported. Only ${constants.cldr_import_base} is supported.`); - static ERROR_ImportInvalidBase = SevError | 0x0002; + `Import element with base ${def(o.base)} is unsupported. Only ${constants.cldr_import_base} is supported.`); + static ERROR_ImportInvalidPath = SevError | 0x0003; static Error_ImportInvalidPath = (o: { base: string, path: string, subtag: string }) => m(this.ERROR_ImportInvalidPath, - `Import element with invalid path ${o.path}: expected the form '${constants.cldr_version_latest}/*.xml`); - static ERROR_ImportInvalidPath = SevError | 0x0003; + `Import element with invalid path ${def(o.path)}: expected the form '${constants.cldr_version_latest}/*.xml`); + static ERROR_ImportReadFail = SevError | 0x0004; static Error_ImportReadFail = (o: { base: string, path: string, subtag: string }) => m(this.ERROR_ImportReadFail, - `Import could not read data with path ${o.path}: expected the form '${constants.cldr_version_latest}/*.xml'`); - static ERROR_ImportReadFail = SevError | 0x0004; + `Import could not read data with path ${def(o.path)}: expected the form '${constants.cldr_version_latest}/*.xml'`); + static ERROR_ImportWrongRoot = SevError | 0x0005; static Error_ImportWrongRoot = (o: { base: string, path: string, subtag: string }) => m(this.ERROR_ImportWrongRoot, - `Invalid import file ${o.path}: expected ${o.subtag} as root element.`); - static ERROR_ImportWrongRoot = SevError | 0x0005; + `Invalid import file ${def(o.path)}: expected ${def(o.subtag)} as root element.`); + static ERROR_ImportMergeFail = SevError | 0x0006; static Error_ImportMergeFail = (o: { base: string, path: string, subtag: string, subsubtag: string }) => m(this.ERROR_ImportMergeFail, - `Problem importing ${o.path}: not sure how to handle non-array ${o.subtag}.${o.subsubtag}`); - static ERROR_ImportMergeFail = SevError | 0x0006; + `Problem importing ${def(o.path)}: not sure how to handle non-array ${def(o.subtag)}.${def(o.subsubtag)}`); + static ERROR_TestDataUnexpectedArray = SevError | 0x0007; static Error_TestDataUnexpectedArray = (o: {subtag: string}) => m(this.ERROR_TestDataUnexpectedArray, - `Problem reading test data: expected single ${o.subtag} element, found multiple`); - static ERROR_TestDataUnexpectedArray = SevError | 0x0007; + `Problem reading test data: expected single ${def(o.subtag)} element, found multiple`); }; diff --git a/common/web/types/src/util/compiler-interfaces.ts b/common/web/types/src/util/compiler-interfaces.ts index f2e475fb831..c6c349269d3 100644 --- a/common/web/types/src/util/compiler-interfaces.ts +++ b/common/web/types/src/util/compiler-interfaces.ts @@ -6,6 +6,11 @@ export interface CompilerEvent { line?: number; code: number; message: string; + /** + * detailed Markdown-formatted description of the error including + * references to documentation, remediation options. + */ + detail?: string; /** * an internal error occurred that should be captured with a stack trace * e.g. to the Keyman sentry instance by kmc @@ -524,28 +529,28 @@ export const defaultCompilerOptions: CompilerOptions = { /** * Convenience function for constructing CompilerEvents - * @param code - * @param message + * @param code Unique numeric value of the event + * @param message A short description of the error presented to the user + * @param detail Detailed Markdown-formatted description of the error + * including references to documentation, remediation options. * @returns */ -export const CompilerMessageSpec = (code: number, message: string) : CompilerEvent => ({ +export const CompilerMessageSpec = (code: number, message: string, detail?: string) : CompilerEvent => ({ code, message, + detail, }); -export const CompilerMessageSpecWithException = (code: number, message: string, exceptionVar: any) : CompilerEvent => ({ +export const CompilerMessageDef = (param: any) => String(param ?? ``); + +export const CompilerMessageSpecWithException = (code: number, message: string, exceptionVar: any, detail?: string) : CompilerEvent => ({ code, message: exceptionVar ? (message ?? `Unexpected exception`) + `: ${exceptionVar.toString()}\n\nCall stack:\n${(exceptionVar instanceof Error ? exceptionVar.stack : (new Error()).stack)}` : message, - exceptionVar + detail, + exceptionVar, }); -/** - * @deprecated use `CompilerError.exceptionToString` instead - */ -export function compilerExceptionToString(e?: any) : string { - return CompilerError.exceptionToString(e); -} /** * Compiler logging level and correspondence to severity diff --git a/developer/src/kmc-analyze/src/messages.ts b/developer/src/kmc-analyze/src/messages.ts index 0dd52083032..d8fa5632702 100644 --- a/developer/src/kmc-analyze/src/messages.ts +++ b/developer/src/kmc-analyze/src/messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.Analyzer; const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -8,24 +8,24 @@ const SevInfo = CompilerErrorSeverity.Info | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; /** - * @public + * @internal * Compiler messages for `kmc analyze` */ export class AnalyzerMessages { - /** @internal */ - static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); - /** - * Raised when an analysis components experiences an internal error. If you - * experience this error, it should be reported to the Keyman team for - * resolution via https://github.com/keymanapp/keyman/issues/new - */ static readonly FATAL_UnexpectedException = SevFatal | 0x0001; + static readonly Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException( + this.FATAL_UnexpectedException, + null, + o.e ?? 'unknown error', + `Raised when an analysis components experiences an internal error. If you + experience this error, it should be reported to the Keyman team for + resolution via https://github.com/keymanapp/keyman/issues/new` + ); - /** @internal */ - static Info_ScanningFile = (o:{type: string, name: string}) => m(this.INFO_ScanningFile, - `Scanning ${o.type} file ${o.name}`); - /** - * Informative message reporting on the current file being scanned - */ static readonly INFO_ScanningFile = SevInfo | 0x0002; + static readonly Info_ScanningFile = (o:{type: string, name: string}) => m( + this.INFO_ScanningFile, + `Scanning ${def(o.type)} file ${def(o.name)}`, + `Informative message reporting on the current file being scanned` + ); }; diff --git a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts index 5034d06bcc9..bd9e911e51c 100644 --- a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts +++ b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.KeyboardInfoCompiler; // const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -8,58 +8,58 @@ const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; export class KeyboardInfoCompilerMessages { - static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); static FATAL_UnexpectedException = SevFatal | 0x0001; + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); - static Error_FileDoesNotExist = (o:{filename: string}) => m(this.ERROR_FileDoesNotExist, `File ${o.filename} does not exist.`); static ERROR_FileDoesNotExist = SevError | 0x0002; + static Error_FileDoesNotExist = (o:{filename: string}) => m(this.ERROR_FileDoesNotExist, `File ${def(o.filename)} does not exist.`); - static Error_FileIsNotValid = (o:{filename: string; e: any}) => m(this.ERROR_FileIsNotValid, - `File ${o.filename} could not be parsed: ${(o.e ?? 'unknown error').toString()}.`); static ERROR_FileIsNotValid = SevError | 0x0003; + static Error_FileIsNotValid = (o:{filename: string; e: any}) => m(this.ERROR_FileIsNotValid, + `File ${def(o.filename)} could not be parsed: ${(o.e ?? 'unknown error').toString()}.`); - static Warn_MetadataFieldInconsistent = (o:{field:string, value:any, expected:any}) => m(this.WARN_MetadataFieldInconsistent, - `Warning: field ${o.field} value "${o.value}" does not match "${o.expected}" found in source file metadata.`); static WARN_MetadataFieldInconsistent = SevWarn | 0x0004; + static Warn_MetadataFieldInconsistent = (o:{field:string, value:any, expected:any}) => m(this.WARN_MetadataFieldInconsistent, + `Warning: field ${def(o.field)} value "${def(o.value)}" does not match "${def(o.expected)}" found in source file metadata.`); - static Error_InvalidAuthorEmail = (o:{email:string}) => m(this.ERROR_InvalidAuthorEmail, - `Invalid author email: ${o.email}`); static ERROR_InvalidAuthorEmail = SevError | 0x0005; + static Error_InvalidAuthorEmail = (o:{email:string}) => m(this.ERROR_InvalidAuthorEmail, + `Invalid author email: ${def(o.email)}`); - static Error_LicenseFileDoesNotExist = (o:{filename:string}) => m(this.ERROR_LicenseFileIsMissing, - `License file ${o.filename} does not exist.`); static ERROR_LicenseFileIsMissing = SevError | 0x0006; + static Error_LicenseFileDoesNotExist = (o:{filename:string}) => m(this.ERROR_LicenseFileIsMissing, + `License file ${def(o.filename)} does not exist.`); - static Error_LicenseFileIsDamaged = (o:{filename:string}) => m(this.ERROR_LicenseFileIsDamaged, - `License file ${o.filename} could not be loaded or decoded.`); static ERROR_LicenseFileIsDamaged = SevError | 0x0007; + static Error_LicenseFileIsDamaged = (o:{filename:string}) => m(this.ERROR_LicenseFileIsDamaged, + `License file ${def(o.filename)} could not be loaded or decoded.`); - static Error_LicenseIsNotValid = (o:{filename:string,message:string}) => m(this.ERROR_LicenseIsNotValid, - `An error was encountered parsing license file ${o.filename}: ${o.message}.`); static ERROR_LicenseIsNotValid = SevError | 0x0008; + static Error_LicenseIsNotValid = (o:{filename:string,message:string}) => m(this.ERROR_LicenseIsNotValid, + `An error was encountered parsing license file ${def(o.filename)}: ${def(o.message)}.`); + static ERROR_CannotBuildWithoutKmpFile = SevError | 0x0009; static Error_CannotBuildWithoutKmpFile = () => m(this.ERROR_CannotBuildWithoutKmpFile, `Compiling the .keyboard_info file requires a .kmp file for metadata.`); - static ERROR_CannotBuildWithoutKmpFile = SevError | 0x0009; + static ERROR_NoLicenseFound = SevError | 0x000A; static Error_NoLicenseFound = () => m(this.ERROR_NoLicenseFound, `No license for the keyboard was found. MIT license is required for publication to Keyman keyboards repository.`); - static ERROR_NoLicenseFound = SevError | 0x000A; - static Hint_OutputValidation = (o:{message: any}) => m(this.HINT_OutputValidation, - `Validating output: ${o.message}.`); static HINT_OutputValidation = SevHint | 0x000B; + static Hint_OutputValidation = (o:{message: any}) => m(this.HINT_OutputValidation, + `Validating output: ${def(o.message)}.`); - static Warn_OutputValidation = (o:{message: any}) => m(this.WARN_OutputValidation, - `Validating output: ${o.message}.`); static WARN_OutputValidation = SevWarn | 0x000C; + static Warn_OutputValidation = (o:{message: any}) => m(this.WARN_OutputValidation, + `Validating output: ${def(o.message)}.`); - static Error_OutputValidation = (o:{message: any}) => m(this.ERROR_OutputValidation, - `Validating output: ${o.message}.`); static ERROR_OutputValidation = SevError | 0x000D; + static Error_OutputValidation = (o:{message: any}) => m(this.ERROR_OutputValidation, + `Validating output: ${def(o.message)}.`); - static Error_FontFileCannotBeRead = (o:{filename: string}) => m(this.ERROR_FontFileCannotBeRead, - `Font ${o.filename} could not be parsed to extract a font family.`); static ERROR_FontFileCannotBeRead = SevError | 0x000E; + static Error_FontFileCannotBeRead = (o:{filename: string}) => m(this.ERROR_FontFileCannotBeRead, + `Font ${def(o.filename)} could not be parsed to extract a font family.`); } diff --git a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts index 0e85e1f328b..508be66297a 100644 --- a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types"; import { kmnfile } from "../kmw-compiler/compiler-globals.js"; const Namespace = CompilerErrorNamespace.KmnCompiler; @@ -51,7 +51,7 @@ export const enum KmnCompilerMessageRanges { } /** - * @public + * @internal * * Error messages reported by the .kmn compiler. The messages in this class * share the namespace with messages from kmn_compiler_errors.h, which are @@ -79,649 +79,644 @@ export class KmnCompilerMessages { // kmc-kmn, which would avoid a number of legacy issues. Questions about // parameterisation. - /** @internal */ - static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); - /** - * Raised when KmnCompiler or one of its components experiences an internal - * error. If you experience this error, it should be reported to the Keyman - * team for resolution via https://github.com/keymanapp/keyman/issues/new - */ static FATAL_UnexpectedException = SevFatal | 0x900; + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException( + this.FATAL_UnexpectedException, + null, + o.e ?? 'unknown error', + `Raised when KmnCompiler or one of its components hasan internal + error. If you experience this error, it should be reported to the Keyman + team for resolution via https://github.com/keymanapp/keyman/issues/new.` + ); - /** @internal */ - static Fatal_MissingWasmModule = (o:{e?: any}) => CompilerMessageSpecWithException(this.FATAL_MissingWasmModule, - `Could not instantiate WASM compiler module or initialization failed`, o.e ?? 'unknown error'); - /** - * Raised when the kmcmplib component could be instantiated. This may indicate - * a configuration or dependency issue. Make sure you are running a Javascript - * engine that supports WASM, and that use of WASM is enabled. - */ static FATAL_MissingWasmModule = SevFatal | 0x901; + static Fatal_MissingWasmModule = (o:{e?: any}) => CompilerMessageSpecWithException( + this.FATAL_MissingWasmModule, + `Could not instantiate WASM compiler module or initialization failed`, + o.e ?? 'unknown error', + `Raised when the kmcmplib component could be instantiated. This may indicate + a configuration or dependency issue. Make sure you are running a Javascript + engine that supports WASM, and that use of WASM is enabled.` + ); // Note: this is now unused - // static Fatal_UnableToSetCompilerOptions = () => m(this.FATAL_UnableToSetCompilerOptions, null, `Unable to set compiler options`); // static FATAL_UnableToSetCompilerOptions = SevFatal | 0x902; + // static Fatal_UnableToSetCompilerOptions = () => m(this.FATAL_UnableToSetCompilerOptions, null, `Unable to set compiler options`); - /** @internal */ - static Fatal_CallbacksNotSet = () => CompilerMessageSpecWithException(this.FATAL_CallbacksNotSet, null, `Callbacks were not set with init`); - /** - * Raised when KmnCompiler or one of its components experiences an internal - * error. If you experience this error, it should be reported to the Keyman - * team for resolution via https://github.com/keymanapp/keyman/issues/new - */ static FATAL_CallbacksNotSet = SevFatal | 0x903; + static Fatal_CallbacksNotSet = () => CompilerMessageSpecWithException( + this.FATAL_CallbacksNotSet, + null, + `Callbacks were not set with init`, + `Raised when KmnCompiler or one of its components experiences an internal + error. If you experience this error, it should be reported to the Keyman + team for resolution via https://github.com/keymanapp/keyman/issues/new.` + ); - /** @internal */ - static Fatal_UnicodeSetOutOfRange = () => CompilerMessageSpecWithException(this.FATAL_UnicodeSetOutOfRange, null, `UnicodeSet buffer was too small`); - /** - * Raised when caller to UnicodeSet functions provides an invalid buffer. If - * you experience this error, it should be reported to the Keyman team for - * resolution via https://github.com/keymanapp/keyman/issues/new - */ static FATAL_UnicodeSetOutOfRange = SevFatal | 0x904; + static Fatal_UnicodeSetOutOfRange = () => CompilerMessageSpecWithException( + this.FATAL_UnicodeSetOutOfRange, + null, + `UnicodeSet buffer was too small`, + `Raised when caller to UnicodeSet functions provides an invalid buffer. If + you experience this error, it should be reported to the Keyman team for + resolution via https://github.com/keymanapp/keyman/issues/new.` + ); // TODO: rename the following functions to Error_UsetHasStrings etc - /** @internal */ - static Error_UnicodeSetHasStrings = () => m(this.ERROR_UnicodeSetHasStrings, `uset contains strings, not allowed`); - /** - * The provided uset uses multi-character strings, (`{}` notation, e.g. - * `[żġħ{ie}{għ}]`. ). Although full UnicodeSets support strings, LDML - * keyboards do not support multi-character strings in usets. To resolve this, - * reformat the uset to avoid the use of multi-character strings. - * - * More on uset: - * https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset - */ static ERROR_UnicodeSetHasStrings = SevError | 0x905; + static Error_UnicodeSetHasStrings = () => m( + this.ERROR_UnicodeSetHasStrings, + `uset contains strings, not allowed`, + `The provided uset uses multi-character strings, (\`{}\` notation, e.g. + \`[żġħ{ie}{għ}]\`. ). Although full UnicodeSets support strings, LDML + keyboards do not support multi-character strings in usets. To resolve this, + reformat the uset to avoid the use of multi-character strings. + + More on uset: https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset` + ); - /** @internal */ - static Error_UnicodeSetHasProperties = () => m(this.ERROR_UnicodeSetHasProperties, `uset contains properties, not allowed`); - /** - * The provided uset uses property notation (`\p{…}` or `[:…:]`). LDML - * keyboards do not support Unicode properties in usets, because that would - * make implementations dependent on a particular version of Unicode. To - * resolve this, reformat the uset to avoid the use of properties. - * - * More on uset: - * https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset - */ static ERROR_UnicodeSetHasProperties = SevError | 0x906; + static Error_UnicodeSetHasProperties = () => m( + this.ERROR_UnicodeSetHasProperties, + `uset contains properties, not allowed`, + `The provided uset uses property notation (\`\\p{…}\` or \`[:…:]\`). LDML + keyboards do not support Unicode properties in usets, because that would + make implementations dependent on a particular version of Unicode. To + resolve this, reformat the uset to avoid the use of properties. + + More on uset: https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset` + ); - /** @internal */ - static Error_UnicodeSetSyntaxError = () => m(this.ERROR_UnicodeSetSyntaxError, `uset had a Syntax Error while parsing`); - /** - * The provided uset has a syntax error and could not be parsed. Verify the - * format of the uset against the specification. - * - * More on uset: https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset - */ static ERROR_UnicodeSetSyntaxError = SevError | 0x907; + static Error_UnicodeSetSyntaxError = () => m( + this.ERROR_UnicodeSetSyntaxError, + `uset had a Syntax Error while parsing`, + `The provided uset has a syntax error and could not be parsed. Verify the + format of the uset against the specification. + + More on uset: https://www.unicode.org/reports/tr35/tr35-keyboards.html#element-uset` + ); - /** @internal */ - static Error_InvalidKvksFile = (o:{filename: string, e: any}) => m(this.ERROR_InvalidKvksFile, - `Error encountered parsing ${o.filename}: ${o.e ?? 'unknown error'}`); // Note, not fatal, not reporting to Sentry - /** - * The .kvks file could not be parsed because it was not a valid XML file. - * There may be additional information in the error message to help you - * resolve the error. - * - * More on .kvks file format: https://help.keyman.com/developer/current-version/reference/file-types/kvks - */ static ERROR_InvalidKvksFile = SevError | 0x908; + static Error_InvalidKvksFile = (o:{filename: string, e: any}) => m( + this.ERROR_InvalidKvksFile, + `Error encountered parsing ${def(o.filename)}: ${o.e ?? 'unknown error'}`, // Note, not fatal, not reporting to Sentry + `The .kvks file could not be parsed because it was not a valid XML file. + There may be additional information in the error message to help you + resolve the error. + + More on .kvks file format: https://help.keyman.com/developer/current-version/reference/file-types/kvks` + ); - /** @internal */ - static Warn_InvalidVkeyInKvksFile = (o:{filename: string, invalidVkey: string}) => m(this.WARN_InvalidVkeyInKvksFile, - `Invalid virtual key ${o.invalidVkey} found in ${o.filename}`); - /** - * The .kvks file contained a virtual key that was not supported by - * Keyman. Remove this virtual key from the .kvks file. - * - * Supported virtual keys: https://help.keyman.com/developer/language/guide/virtual-keys#common-virtual-key-codes - */ static WARN_InvalidVkeyInKvksFile = SevWarn | 0x909; + static Warn_InvalidVkeyInKvksFile = (o:{filename: string, invalidVkey: string}) => m( + this.WARN_InvalidVkeyInKvksFile, + `Invalid virtual key ${def(o.invalidVkey)} found in ${def(o.filename)}`, + `The .kvks file contained a virtual key that was not supported by + Keyman. Remove this virtual key from the .kvks file. + + Supported virtual keys: https://help.keyman.com/developer/language/guide/virtual-keys#common-virtual-key-codes` + ); - /** @internal */ - static Error_InvalidDisplayMapFile = (o:{filename: string, e: any}) => m(this.ERROR_InvalidDisplayMapFile, - `Error encountered parsing display map ${o.filename}: ${o.e ?? 'unknown error'}`); // Note, not fatal, not reporting to Sentry - /** - * The displayMap file could not be parsed because it was not a valid JSON - * file. There may be additional information in the error message to help you - * resolve the error. - * - * More on displayMap: https://help.keyman.com/developer/language/reference/displaymap - */ static ERROR_InvalidDisplayMapFile = SevError | 0x90A; + static Error_InvalidDisplayMapFile = (o:{filename: string, e: any}) => m( + this.ERROR_InvalidDisplayMapFile, + `Error encountered parsing display map ${def(o.filename)}: ${o.e ?? 'unknown error'}`, // Note, not fatal, not reporting to Sentry + `The displayMap file could not be parsed because it was not a valid JSON + file. There may be additional information in the error message to help you + resolve the error. + + More on displayMap: https://help.keyman.com/developer/language/reference/displaymap` + ); - /** @internal */ - static Error_InvalidKvkFile = (o:{filename: string, e: any}) => m(this.ERROR_InvalidKvkFile, - `Error encountered loading ${o.filename}: ${o.e ?? 'unknown error'}`); // Note, not fatal, not reporting to Sentry - /** - * The .kvk file could not be loaded because it was not a valid format. There - * may be additional information in the error message to help you resolve the - * error. - * - * More on .kvk files: https://help.keyman.com/developer/current-version/reference/file-types/kvk - */ static ERROR_InvalidKvkFile = SevError | 0x90B; + static Error_InvalidKvkFile = (o:{filename: string, e: any}) => m( + this.ERROR_InvalidKvkFile, + `Error encountered loading ${def(o.filename)}: ${o.e ?? 'unknown error'}`, // Note, not fatal, not reporting to Sentry + `The .kvk file could not be loaded because it was not a valid format. There + may be additional information in the error message to help you resolve the + error. + + More on .kvk files: https://help.keyman.com/developer/current-version/reference/file-types/kvk` + ); - /** @internal */ - static Error_FileNotFound = (o:{filename: string}) => m(this.ERROR_FileNotFound, - `File ${o.filename} was not found`); - /** - * The file was not found on the disk. Verify that you have the correct path - * to the file. - */ static ERROR_FileNotFound = SevError | 0x90C; + static Error_FileNotFound = (o:{filename: string}) => m(this.ERROR_FileNotFound, + `File ${def(o.filename)} was not found`, + `The file was not found on the disk. Verify that you have the correct path + to the file.` + ); // static INFO_None = SevInfo | 0x000; - static Info_EndOfFile = () => m(this.INFO_EndOfFile, `(no error - reserved code)`); static INFO_EndOfFile = SevInfo | 0x001; + static Info_EndOfFile = () => m(this.INFO_EndOfFile, `(no error - reserved code)`); - static Fatal_BadCallParams = () => m(this.FATAL_BadCallParams, `CompileKeyboardFile was called with bad parameters`); static FATAL_BadCallParams = SevFatal | 0x002; + static Fatal_BadCallParams = () => m(this.FATAL_BadCallParams, `CompileKeyboardFile was called with bad parameters`); - static Fatal_CannotAllocateMemory = () => m(this.FATAL_CannotAllocateMemory, `Out of memory`); static FATAL_CannotAllocateMemory = SevFatal | 0x004; + static Fatal_CannotAllocateMemory = () => m(this.FATAL_CannotAllocateMemory, `Out of memory`); - static Error_InfileNotExist = () => m(this.ERROR_InfileNotExist, `Cannot find the input file`); static ERROR_InfileNotExist = SevError | 0x005; // #10678: reduced from fatal to error in 17.0 + static Error_InfileNotExist = () => m(this.ERROR_InfileNotExist, `Cannot find the input file`); - // static Error_CannotCreateOutfile = () => m(this.ERROR_CannotCreateOutfile, `Cannot open output file for writing`); unused // static ERROR_CannotCreateOutfile = SevError | 0x006; // #10678: reduced from fatal to error in 17.0, but unused + // static Error_CannotCreateOutfile = () => m(this.ERROR_CannotCreateOutfile, `Cannot open output file for writing`); unused - static Fatal_UnableToWriteFully = () => m(this.FATAL_UnableToWriteFully, `Unable to write the file completely`); static FATAL_UnableToWriteFully = SevFatal | 0x007; + static Fatal_UnableToWriteFully = () => m(this.FATAL_UnableToWriteFully, `Unable to write the file completely`); - static Error_CannotReadInfile = () => m(this.ERROR_CannotReadInfile, `Cannot read the input file`); static ERROR_CannotReadInfile = SevError | 0x008; // #10678: reduced from fatal to error in 17.0 + static Error_CannotReadInfile = () => m(this.ERROR_CannotReadInfile, `Cannot read the input file`); - static Fatal_SomewhereIGotItWrong = () => m(this.FATAL_SomewhereIGotItWrong, `Internal error: contact Keyman`); static FATAL_SomewhereIGotItWrong = SevFatal | 0x009; + static Fatal_SomewhereIGotItWrong = () => m(this.FATAL_SomewhereIGotItWrong, `Internal error: contact Keyman`); - static Error_InvalidToken = () => m(this.ERROR_InvalidToken, `Invalid token found`); static ERROR_InvalidToken = SevError | 0x00A; + static Error_InvalidToken = () => m(this.ERROR_InvalidToken, `Invalid token found`); // kmcmplib: static Error_InvalidBegin = () => m(this.ERROR_InvalidBegin, `Invalid 'begin' command`); + static ERROR_InvalidBegin = SevError | 0x00B; static Error_InvalidBegin = () => mw(this.ERROR_InvalidBegin, `A "begin unicode" statement is required to compile a KeymanWeb keyboard`); - static ERROR_InvalidBegin = SevError | 0x00B; - static Error_InvalidName = () => m(this.ERROR_InvalidName, `Invalid 'name' command`); static ERROR_InvalidName = SevError | 0x00C; + static Error_InvalidName = () => m(this.ERROR_InvalidName, `Invalid 'name' command`); - static Error_InvalidVersion = () => m(this.ERROR_InvalidVersion, `Invalid 'version' command`); static ERROR_InvalidVersion = SevError | 0x00D; + static Error_InvalidVersion = () => m(this.ERROR_InvalidVersion, `Invalid 'version' command`); - static Error_InvalidLanguageLine = () => m(this.ERROR_InvalidLanguageLine, `Invalid 'language' command`); static ERROR_InvalidLanguageLine = SevError | 0x00E; + static Error_InvalidLanguageLine = () => m(this.ERROR_InvalidLanguageLine, `Invalid 'language' command`); - static Error_LayoutButNoLanguage = () => m(this.ERROR_LayoutButNoLanguage, `Layout command found but no language command`); static ERROR_LayoutButNoLanguage = SevError | 0x00F; + static Error_LayoutButNoLanguage = () => m(this.ERROR_LayoutButNoLanguage, `Layout command found but no language command`); - static Error_InvalidLayoutLine = () => m(this.ERROR_InvalidLayoutLine, `Invalid 'layout' command`); static ERROR_InvalidLayoutLine = SevError | 0x010; + static Error_InvalidLayoutLine = () => m(this.ERROR_InvalidLayoutLine, `Invalid 'layout' command`); - static Error_NoVersionLine = () => m(this.ERROR_NoVersionLine, `No version line found for file`); static ERROR_NoVersionLine = SevError | 0x011; + static Error_NoVersionLine = () => m(this.ERROR_NoVersionLine, `No version line found for file`); - static Error_InvalidGroupLine = () => m(this.ERROR_InvalidGroupLine, `Invalid 'group' command`); static ERROR_InvalidGroupLine = SevError | 0x012; + static Error_InvalidGroupLine = () => m(this.ERROR_InvalidGroupLine, `Invalid 'group' command`); - static Error_InvalidStoreLine = () => m(this.ERROR_InvalidStoreLine, `Invalid 'store' command`); static ERROR_InvalidStoreLine = SevError | 0x013; + static Error_InvalidStoreLine = () => m(this.ERROR_InvalidStoreLine, `Invalid 'store' command`); - static Error_InvalidCodeInKeyPartOfRule = () => m(this.ERROR_InvalidCodeInKeyPartOfRule, `Invalid command or code found in key part of rule`); static ERROR_InvalidCodeInKeyPartOfRule = SevError | 0x014; + static Error_InvalidCodeInKeyPartOfRule = () => m(this.ERROR_InvalidCodeInKeyPartOfRule, `Invalid command or code found in key part of rule`); - static Error_InvalidDeadkey = () => m(this.ERROR_InvalidDeadkey, `Invalid 'deadkey' or 'dk' command`); static ERROR_InvalidDeadkey = SevError | 0x015; + static Error_InvalidDeadkey = () => m(this.ERROR_InvalidDeadkey, `Invalid 'deadkey' or 'dk' command`); - static Error_InvalidValue = () => m(this.ERROR_InvalidValue, `Invalid value in extended string`); static ERROR_InvalidValue = SevError | 0x016; + static Error_InvalidValue = () => m(this.ERROR_InvalidValue, `Invalid value in extended string`); - static Error_ZeroLengthString = () => m(this.ERROR_ZeroLengthString, `A string of zero characters was found`); static ERROR_ZeroLengthString = SevError | 0x017; + static Error_ZeroLengthString = () => m(this.ERROR_ZeroLengthString, `A string of zero characters was found`); - static Error_TooManyIndexToKeyRefs = () => m(this.ERROR_TooManyIndexToKeyRefs, `Too many index commands refering to key string`); static ERROR_TooManyIndexToKeyRefs = SevError | 0x018; + static Error_TooManyIndexToKeyRefs = () => m(this.ERROR_TooManyIndexToKeyRefs, `Too many index commands refering to key string`); - static Error_UnterminatedString = () => m(this.ERROR_UnterminatedString, `Unterminated string in line`); static ERROR_UnterminatedString = SevError | 0x019; + static Error_UnterminatedString = () => m(this.ERROR_UnterminatedString, `Unterminated string in line`); - static Error_StringInVirtualKeySection = () => m(this.ERROR_StringInVirtualKeySection, `extend string illegal in virtual key section`); static ERROR_StringInVirtualKeySection = SevError | 0x01A; + static Error_StringInVirtualKeySection = () => m(this.ERROR_StringInVirtualKeySection, `extend string illegal in virtual key section`); - static Error_AnyInVirtualKeySection = () => m(this.ERROR_AnyInVirtualKeySection, `'any' command is illegal in virtual key section`); static ERROR_AnyInVirtualKeySection = SevError | 0x01B; + static Error_AnyInVirtualKeySection = () => m(this.ERROR_AnyInVirtualKeySection, `'any' command is illegal in virtual key section`); - static Error_InvalidAny = () => m(this.ERROR_InvalidAny, `Invalid 'any' command`); static ERROR_InvalidAny = SevError | 0x01C; + static Error_InvalidAny = () => m(this.ERROR_InvalidAny, `Invalid 'any' command`); - static Error_StoreDoesNotExist = () => m(this.ERROR_StoreDoesNotExist, `Store referenced does not exist`); static ERROR_StoreDoesNotExist = SevError | 0x01D; + static Error_StoreDoesNotExist = () => m(this.ERROR_StoreDoesNotExist, `Store referenced does not exist`); - static Error_BeepInVirtualKeySection = () => m(this.ERROR_BeepInVirtualKeySection, `'beep' command is illegal in virtual key section`); static ERROR_BeepInVirtualKeySection = SevError | 0x01E; + static Error_BeepInVirtualKeySection = () => m(this.ERROR_BeepInVirtualKeySection, `'beep' command is illegal in virtual key section`); - static Error_IndexInVirtualKeySection = () => m(this.ERROR_IndexInVirtualKeySection, `'index' command is illegal in virtual key section`); static ERROR_IndexInVirtualKeySection = SevError | 0x01F; + static Error_IndexInVirtualKeySection = () => m(this.ERROR_IndexInVirtualKeySection, `'index' command is illegal in virtual key section`); - static Error_InvalidIndex = () => m(this.ERROR_InvalidIndex, `Invalid 'index' command`); static ERROR_InvalidIndex = SevError | 0x020; + static Error_InvalidIndex = () => m(this.ERROR_InvalidIndex, `Invalid 'index' command`); - static Error_OutsInVirtualKeySection = () => m(this.ERROR_OutsInVirtualKeySection, `'outs' command is illegal in virtual key section`); static ERROR_OutsInVirtualKeySection = SevError | 0x021; + static Error_OutsInVirtualKeySection = () => m(this.ERROR_OutsInVirtualKeySection, `'outs' command is illegal in virtual key section`); - static Error_InvalidOuts = () => m(this.ERROR_InvalidOuts, `Invalid 'outs' command`); static ERROR_InvalidOuts = SevError | 0x022; + static Error_InvalidOuts = () => m(this.ERROR_InvalidOuts, `Invalid 'outs' command`); - static Error_ContextInVirtualKeySection = () => m(this.ERROR_ContextInVirtualKeySection, `'context' command is illegal in virtual key section`); static ERROR_ContextInVirtualKeySection = SevError | 0x024; + static Error_ContextInVirtualKeySection = () => m(this.ERROR_ContextInVirtualKeySection, `'context' command is illegal in virtual key section`); - static Error_InvalidUse = () => m(this.ERROR_InvalidUse, `Invalid 'use' command`); static ERROR_InvalidUse = SevError | 0x025; + static Error_InvalidUse = () => m(this.ERROR_InvalidUse, `Invalid 'use' command`); - static Error_GroupDoesNotExist = () => m(this.ERROR_GroupDoesNotExist, `Group does not exist`); static ERROR_GroupDoesNotExist = SevError | 0x026; + static Error_GroupDoesNotExist = () => m(this.ERROR_GroupDoesNotExist, `Group does not exist`); - static Error_VirtualKeyNotAllowedHere = () => m(this.ERROR_VirtualKeyNotAllowedHere, `Virtual key is not allowed here`); static ERROR_VirtualKeyNotAllowedHere = SevError | 0x027; + static Error_VirtualKeyNotAllowedHere = () => m(this.ERROR_VirtualKeyNotAllowedHere, `Virtual key is not allowed here`); - static Error_InvalidSwitch = () => m(this.ERROR_InvalidSwitch, `Invalid 'switch' command`); static ERROR_InvalidSwitch = SevError | 0x028; + static Error_InvalidSwitch = () => m(this.ERROR_InvalidSwitch, `Invalid 'switch' command`); - static Error_NoTokensFound = () => m(this.ERROR_NoTokensFound, `No tokens found in line`); static ERROR_NoTokensFound = SevError | 0x029; + static Error_NoTokensFound = () => m(this.ERROR_NoTokensFound, `No tokens found in line`); - static Error_InvalidLineContinuation = () => m(this.ERROR_InvalidLineContinuation, `Invalid line continuation`); static ERROR_InvalidLineContinuation = SevError | 0x02A; + static Error_InvalidLineContinuation = () => m(this.ERROR_InvalidLineContinuation, `Invalid line continuation`); - static Error_LineTooLong = () => m(this.ERROR_LineTooLong, `Line too long`); static ERROR_LineTooLong = SevError | 0x02B; + static Error_LineTooLong = () => m(this.ERROR_LineTooLong, `Line too long`); - static Error_InvalidCopyright = () => m(this.ERROR_InvalidCopyright, `Invalid 'copyright' command`); static ERROR_InvalidCopyright = SevError | 0x02C; + static Error_InvalidCopyright = () => m(this.ERROR_InvalidCopyright, `Invalid 'copyright' command`); - static Error_CodeInvalidInThisSection = () => m(this.ERROR_CodeInvalidInThisSection, `This line is invalid in this section of the file`); static ERROR_CodeInvalidInThisSection = SevError | 0x02D; + static Error_CodeInvalidInThisSection = () => m(this.ERROR_CodeInvalidInThisSection, `This line is invalid in this section of the file`); - static Error_InvalidMessage = () => m(this.ERROR_InvalidMessage, `Invalid 'message' command`); static ERROR_InvalidMessage = SevError | 0x02E; + static Error_InvalidMessage = () => m(this.ERROR_InvalidMessage, `Invalid 'message' command`); - static Error_InvalidLanguageName = () => m(this.ERROR_InvalidLanguageName, `Invalid 'languagename' command`); static ERROR_InvalidLanguageName = SevError | 0x02F; + static Error_InvalidLanguageName = () => m(this.ERROR_InvalidLanguageName, `Invalid 'languagename' command`); - static Error_InvalidBitmapLine = () => m(this.ERROR_InvalidBitmapLine, `Invalid 'bitmaps' command`); static ERROR_InvalidBitmapLine = SevError | 0x030; + static Error_InvalidBitmapLine = () => m(this.ERROR_InvalidBitmapLine, `Invalid 'bitmaps' command`); - static Error_CannotReadBitmapFile = () => m(this.ERROR_CannotReadBitmapFile, `Cannot open the bitmap or icon file for reading`); static ERROR_CannotReadBitmapFile = SevError | 0x031; + static Error_CannotReadBitmapFile = () => m(this.ERROR_CannotReadBitmapFile, `Cannot open the bitmap or icon file for reading`); - static Error_IndexDoesNotPointToAny = () => m(this.ERROR_IndexDoesNotPointToAny, `An index() in the output does not have a corresponding any() statement`); static ERROR_IndexDoesNotPointToAny = SevError | 0x032; + static Error_IndexDoesNotPointToAny = () => m(this.ERROR_IndexDoesNotPointToAny, `An index() in the output does not have a corresponding any() statement`); - static Error_ReservedCharacter = () => m(this.ERROR_ReservedCharacter, `A reserved character was found`); static ERROR_ReservedCharacter = SevError | 0x033; + static Error_ReservedCharacter = () => m(this.ERROR_ReservedCharacter, `A reserved character was found`); - static Error_InvalidCharacter = () => m(this.ERROR_InvalidCharacter, `A character was found that is outside the valid Unicode range (U+0000 - U+10FFFF)`); static ERROR_InvalidCharacter = SevError | 0x034; + static Error_InvalidCharacter = () => m(this.ERROR_InvalidCharacter, `A character was found that is outside the valid Unicode range (U+0000 - U+10FFFF)`); - static Error_InvalidCall = () => m(this.ERROR_InvalidCall, `The 'call' command is invalid`); static ERROR_InvalidCall = SevError | 0x035; + static Error_InvalidCall = () => m(this.ERROR_InvalidCall, `The 'call' command is invalid`); - static Error_CallInVirtualKeySection = () => m(this.ERROR_CallInVirtualKeySection, `'call' command is illegal in virtual key section`); static ERROR_CallInVirtualKeySection = SevError | 0x036; + static Error_CallInVirtualKeySection = () => m(this.ERROR_CallInVirtualKeySection, `'call' command is illegal in virtual key section`); - static Error_CodeInvalidInKeyStore = () => m(this.ERROR_CodeInvalidInKeyStore, `The command is invalid inside a store that is used in a key part of the rule`); static ERROR_CodeInvalidInKeyStore = SevError | 0x037; + static Error_CodeInvalidInKeyStore = () => m(this.ERROR_CodeInvalidInKeyStore, `The command is invalid inside a store that is used in a key part of the rule`); - static Error_CannotLoadIncludeFile = () => m(this.ERROR_CannotLoadIncludeFile, `Cannot load the included file: it is either invalid or does not exist`); static ERROR_CannotLoadIncludeFile = SevError | 0x038; + static Error_CannotLoadIncludeFile = () => m(this.ERROR_CannotLoadIncludeFile, `Cannot load the included file: it is either invalid or does not exist`); - static Error_60FeatureOnly_EthnologueCode = () => m(this.ERROR_60FeatureOnly_EthnologueCode, `EthnologueCode system store requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_EthnologueCode = SevError | 0x039; + static Error_60FeatureOnly_EthnologueCode = () => m(this.ERROR_60FeatureOnly_EthnologueCode, `EthnologueCode system store requires VERSION 6.0 or higher`); - static Error_60FeatureOnly_MnemonicLayout = () => m(this.ERROR_60FeatureOnly_MnemonicLayout, `MnemonicLayout functionality requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_MnemonicLayout = SevError | 0x03A; + static Error_60FeatureOnly_MnemonicLayout = () => m(this.ERROR_60FeatureOnly_MnemonicLayout, `MnemonicLayout functionality requires VERSION 6.0 or higher`); - static Error_60FeatureOnly_OldCharPosMatching = () => m(this.ERROR_60FeatureOnly_OldCharPosMatching, `OldCharPosMatching system store requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_OldCharPosMatching = SevError | 0x03B; + static Error_60FeatureOnly_OldCharPosMatching = () => m(this.ERROR_60FeatureOnly_OldCharPosMatching, `OldCharPosMatching system store requires VERSION 6.0 or higher`); - static Error_60FeatureOnly_NamedCodes = () => m(this.ERROR_60FeatureOnly_NamedCodes, `Named character constants requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_NamedCodes = SevError | 0x03C; + static Error_60FeatureOnly_NamedCodes = () => m(this.ERROR_60FeatureOnly_NamedCodes, `Named character constants requires VERSION 6.0 or higher`); - static Error_60FeatureOnly_Contextn = () => m(this.ERROR_60FeatureOnly_Contextn, `Context(n) requires VERSION 6.0 or higher`); static ERROR_60FeatureOnly_Contextn = SevError | 0x03D; + static Error_60FeatureOnly_Contextn = () => m(this.ERROR_60FeatureOnly_Contextn, `Context(n) requires VERSION 6.0 or higher`); - static Error_501FeatureOnly_Call = () => m(this.ERROR_501FeatureOnly_Call, `Call() requires VERSION 5.01 or higher`); static ERROR_501FeatureOnly_Call = SevError | 0x03E; + static Error_501FeatureOnly_Call = () => m(this.ERROR_501FeatureOnly_Call, `Call() requires VERSION 5.01 or higher`); - static Error_InvalidNamedCode = () => m(this.ERROR_InvalidNamedCode, `Invalid named code constant`); static ERROR_InvalidNamedCode = SevError | 0x03F; + static Error_InvalidNamedCode = () => m(this.ERROR_InvalidNamedCode, `Invalid named code constant`); - static Error_InvalidSystemStore = () => m(this.ERROR_InvalidSystemStore, `Invalid system store name found`); static ERROR_InvalidSystemStore = SevError | 0x040; + static Error_InvalidSystemStore = () => m(this.ERROR_InvalidSystemStore, `Invalid system store name found`); - static Error_60FeatureOnly_VirtualCharKey = () => m(this.ERROR_60FeatureOnly_VirtualCharKey, `Virtual character keys require VERSION 6.0 or higher`); static ERROR_60FeatureOnly_VirtualCharKey = SevError | 0x044; + static Error_60FeatureOnly_VirtualCharKey = () => m(this.ERROR_60FeatureOnly_VirtualCharKey, `Virtual character keys require VERSION 6.0 or higher`); - static Error_VersionAlreadyIncluded = () => m(this.ERROR_VersionAlreadyIncluded, `Only one VERSION or store(version) line allowed in a source file.`); static ERROR_VersionAlreadyIncluded = SevError | 0x045; + static Error_VersionAlreadyIncluded = () => m(this.ERROR_VersionAlreadyIncluded, `Only one VERSION or store(version) line allowed in a source file.`); - static Error_70FeatureOnly = () => m(this.ERROR_70FeatureOnly, `This feature requires store(version) '7.0' or higher`); static ERROR_70FeatureOnly = SevError | 0x046; + static Error_70FeatureOnly = () => m(this.ERROR_70FeatureOnly, `This feature requires store(version) '7.0' or higher`); - static Error_80FeatureOnly = () => m(this.ERROR_80FeatureOnly, `This feature requires store(version) '8.0' or higher`); static ERROR_80FeatureOnly = SevError | 0x047; + static Error_80FeatureOnly = () => m(this.ERROR_80FeatureOnly, `This feature requires store(version) '8.0' or higher`); - static Error_InvalidInVirtualKeySection = () => m(this.ERROR_InvalidInVirtualKeySection, `This statement is not valid in a virtual key section`); static ERROR_InvalidInVirtualKeySection = SevError | 0x048; + static Error_InvalidInVirtualKeySection = () => m(this.ERROR_InvalidInVirtualKeySection, `This statement is not valid in a virtual key section`); - static Error_InvalidIf = () => m(this.ERROR_InvalidIf, `The if() statement is not valid`); static ERROR_InvalidIf = SevError | 0x049; + static Error_InvalidIf = () => m(this.ERROR_InvalidIf, `The if() statement is not valid`); - static Error_InvalidReset = () => m(this.ERROR_InvalidReset, `The reset() statement is not valid`); static ERROR_InvalidReset = SevError | 0x04A; + static Error_InvalidReset = () => m(this.ERROR_InvalidReset, `The reset() statement is not valid`); - static Error_InvalidSet = () => m(this.ERROR_InvalidSet, `The set() statement is not valid`); static ERROR_InvalidSet = SevError | 0x04B; + static Error_InvalidSet = () => m(this.ERROR_InvalidSet, `The set() statement is not valid`); - static Error_InvalidSave = () => m(this.ERROR_InvalidSave, `The save() statement is not valid`); static ERROR_InvalidSave = SevError | 0x04C; + static Error_InvalidSave = () => m(this.ERROR_InvalidSave, `The save() statement is not valid`); - static Error_InvalidEthnologueCode = () => m(this.ERROR_InvalidEthnologueCode, `Invalid ethnologuecode format`); static ERROR_InvalidEthnologueCode = SevError | 0x04D; + static Error_InvalidEthnologueCode = () => m(this.ERROR_InvalidEthnologueCode, `Invalid ethnologuecode format`); - static Fatal_CannotCreateTempfile = () => m(this.FATAL_CannotCreateTempfile, `Cannot create temp file`); static FATAL_CannotCreateTempfile = SevFatal | 0x04E; + static Fatal_CannotCreateTempfile = () => m(this.FATAL_CannotCreateTempfile, `Cannot create temp file`); - static Error_90FeatureOnly_IfSystemStores = () => m(this.ERROR_90FeatureOnly_IfSystemStores, `if(store) requires store(version) '9.0' or higher`); static ERROR_90FeatureOnly_IfSystemStores = SevError | 0x04F; + static Error_90FeatureOnly_IfSystemStores = () => m(this.ERROR_90FeatureOnly_IfSystemStores, `if(store) requires store(version) '9.0' or higher`); - static Error_IfSystemStore_NotFound = () => m(this.ERROR_IfSystemStore_NotFound, `System store in if() not found`); static ERROR_IfSystemStore_NotFound = SevError | 0x050; + static Error_IfSystemStore_NotFound = () => m(this.ERROR_IfSystemStore_NotFound, `System store in if() not found`); - static Error_90FeatureOnly_SetSystemStores = () => m(this.ERROR_90FeatureOnly_SetSystemStores, `set(store) requires store(version) '9.0' or higher`); static ERROR_90FeatureOnly_SetSystemStores = SevError | 0x051; + static Error_90FeatureOnly_SetSystemStores = () => m(this.ERROR_90FeatureOnly_SetSystemStores, `set(store) requires store(version) '9.0' or higher`); - static Error_SetSystemStore_NotFound = () => m(this.ERROR_SetSystemStore_NotFound, `System store in set() not found`); static ERROR_SetSystemStore_NotFound = SevError | 0x052; + static Error_SetSystemStore_NotFound = () => m(this.ERROR_SetSystemStore_NotFound, `System store in set() not found`); - static Error_90FeatureOnlyVirtualKeyDictionary = () => m(this.ERROR_90FeatureOnlyVirtualKeyDictionary, `Custom virtual key names require store(version) '9.0'`); static ERROR_90FeatureOnlyVirtualKeyDictionary = SevError | 0x053; + static Error_90FeatureOnlyVirtualKeyDictionary = () => m(this.ERROR_90FeatureOnlyVirtualKeyDictionary, `Custom virtual key names require store(version) '9.0'`); - static Error_NotSupportedInKeymanWebContext = (o:{line:number, code:String}) => mw(this.ERROR_NotSupportedInKeymanWebContext, - `Statement '${o.code}' is not currently supported in context for web and touch targets`, o); static ERROR_NotSupportedInKeymanWebContext = SevError | 0x054; + static Error_NotSupportedInKeymanWebContext = (o:{line:number, code:String}) => mw(this.ERROR_NotSupportedInKeymanWebContext, + `Statement '${def(o.code)}' is not currently supported in context for web and touch targets`, o); - static Error_NotSupportedInKeymanWebOutput = (o:{line:number, code:string}) => mw(this.ERROR_NotSupportedInKeymanWebOutput, - `Statement '${o.code}' is not currently supported in output for web and touch targets`, o); static ERROR_NotSupportedInKeymanWebOutput = SevError | 0x055; + static Error_NotSupportedInKeymanWebOutput = (o:{line:number, code:string}) => mw(this.ERROR_NotSupportedInKeymanWebOutput, + `Statement '${def(o.code)}' is not currently supported in output for web and touch targets`, o); - static Error_NotSupportedInKeymanWebStore = (o:{code:string,store:string}) => mw(this.ERROR_NotSupportedInKeymanWebStore, - `'${o.code}' is not currently supported in store '${o.store}' when used by any or index for web and touch targets`); static ERROR_NotSupportedInKeymanWebStore = SevError | 0x056; + static Error_NotSupportedInKeymanWebStore = (o:{code:string,store:string}) => mw(this.ERROR_NotSupportedInKeymanWebStore, + `'${def(o.code)}' is not currently supported in store '${def(o.store)}' when used by any or index for web and touch targets`); + static ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb = SevError | 0x057; static Error_VirtualCharacterKeysNotSupportedInKeymanWeb = (o:{line:number}) => mw(this.ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb, `Virtual character keys not currently supported in KeymanWeb`, o); - static ERROR_VirtualCharacterKeysNotSupportedInKeymanWeb = SevError | 0x057; + static ERROR_VirtualKeysNotValidForMnemonicLayouts = SevError | 0x058; static Error_VirtualKeysNotValidForMnemonicLayouts = (o:{line:number}) => mw(this.ERROR_VirtualKeysNotValidForMnemonicLayouts, `Virtual keys are not valid for mnemonic layouts`, o); - static ERROR_VirtualKeysNotValidForMnemonicLayouts = SevError | 0x058; - static Error_InvalidTouchLayoutFile = (o:{filename:string}) => mw(this.ERROR_InvalidTouchLayoutFile, - `Touch layout file ${o.filename} is not valid`); static ERROR_InvalidTouchLayoutFile = SevError | 0x059; + static Error_InvalidTouchLayoutFile = (o:{filename:string}) => mw(this.ERROR_InvalidTouchLayoutFile, + `Touch layout file ${def(o.filename)} is not valid`); - static Error_TouchLayoutInvalidIdentifier = (o:{keyId:string, platformName: string, layerId:string}) => mw(this.ERROR_TouchLayoutInvalidIdentifier, - `Key "${o.keyId}" on "${o.platformName}", layer "${o.layerId}" has an invalid identifier.`); static ERROR_TouchLayoutInvalidIdentifier = SevError | 0x05A; + static Error_TouchLayoutInvalidIdentifier = (o:{keyId:string, platformName: string, layerId:string}) => mw(this.ERROR_TouchLayoutInvalidIdentifier, + `Key "${def(o.keyId)}" on "${def(o.platformName)}", layer "${def(o.layerId)}" has an invalid identifier.`); - static Error_InvalidKeyCode = (o:{keyId: string}) => mw(this.ERROR_InvalidKeyCode, - `Invalid key identifier "${o.keyId}"`); static ERROR_InvalidKeyCode = SevError | 0x05B; + static Error_InvalidKeyCode = (o:{keyId: string}) => mw(this.ERROR_InvalidKeyCode, + `Invalid key identifier "${def(o.keyId)}"`); - static Error_90FeatureOnlyLayoutFile = () => m(this.ERROR_90FeatureOnlyLayoutFile, `Touch layout file reference requires store(version) '9.0'or higher`); static ERROR_90FeatureOnlyLayoutFile = SevError | 0x05C; + static Error_90FeatureOnlyLayoutFile = () => m(this.ERROR_90FeatureOnlyLayoutFile, `Touch layout file reference requires store(version) '9.0'or higher`); - static Error_90FeatureOnlyKeyboardVersion = () => m(this.ERROR_90FeatureOnlyKeyboardVersion, `KeyboardVersion system store requires store(version) '9.0'or higher`); static ERROR_90FeatureOnlyKeyboardVersion = SevError | 0x05D; + static Error_90FeatureOnlyKeyboardVersion = () => m(this.ERROR_90FeatureOnlyKeyboardVersion, `KeyboardVersion system store requires store(version) '9.0'or higher`); - static Error_KeyboardVersionFormatInvalid = () => m(this.ERROR_KeyboardVersionFormatInvalid, `KeyboardVersion format is invalid, expecting dot-separated integers`); static ERROR_KeyboardVersionFormatInvalid = SevError | 0x05E; + static Error_KeyboardVersionFormatInvalid = () => m(this.ERROR_KeyboardVersionFormatInvalid, `KeyboardVersion format is invalid, expecting dot-separated integers`); - static Error_ContextExHasInvalidOffset = () => m(this.ERROR_ContextExHasInvalidOffset, `context() statement has offset out of range`); static ERROR_ContextExHasInvalidOffset = SevError | 0x05F; + static Error_ContextExHasInvalidOffset = () => m(this.ERROR_ContextExHasInvalidOffset, `context() statement has offset out of range`); - static Error_90FeatureOnlyEmbedCSS = () => m(this.ERROR_90FeatureOnlyEmbedCSS, `Embedding CSS requires store(version) '9.0'or higher`); static ERROR_90FeatureOnlyEmbedCSS = SevError | 0x060; + static Error_90FeatureOnlyEmbedCSS = () => m(this.ERROR_90FeatureOnlyEmbedCSS, `Embedding CSS requires store(version) '9.0'or higher`); - static Error_90FeatureOnlyTargets = () => m(this.ERROR_90FeatureOnlyTargets, `TARGETS system store requires store(version) '9.0'or higher`); static ERROR_90FeatureOnlyTargets = SevError | 0x061; + static Error_90FeatureOnlyTargets = () => m(this.ERROR_90FeatureOnlyTargets, `TARGETS system store requires store(version) '9.0'or higher`); - static Error_ContextAndIndexInvalidInMatchNomatch = () => m(this.ERROR_ContextAndIndexInvalidInMatchNomatch, `context and index statements cannot be used in a match or nomatch statement`); static ERROR_ContextAndIndexInvalidInMatchNomatch = SevError | 0x062; + static Error_ContextAndIndexInvalidInMatchNomatch = () => m(this.ERROR_ContextAndIndexInvalidInMatchNomatch, `context and index statements cannot be used in a match or nomatch statement`); - static Error_140FeatureOnlyContextAndNotAnyWeb = () => m(this.ERROR_140FeatureOnlyContextAndNotAnyWeb, `For web and touch platforms, context() statement referring to notany() requires store(version) '14.0'or higher`); static ERROR_140FeatureOnlyContextAndNotAnyWeb = SevError | 0x063; + static Error_140FeatureOnlyContextAndNotAnyWeb = () => m(this.ERROR_140FeatureOnlyContextAndNotAnyWeb, `For web and touch platforms, context() statement referring to notany() requires store(version) '14.0'or higher`); - static Error_ExpansionMustFollowCharacterOrVKey = () => m(this.ERROR_ExpansionMustFollowCharacterOrVKey, `An expansion must follow a character or a virtual key`); static ERROR_ExpansionMustFollowCharacterOrVKey = SevError | 0x064; + static Error_ExpansionMustFollowCharacterOrVKey = () => m(this.ERROR_ExpansionMustFollowCharacterOrVKey, `An expansion must follow a character or a virtual key`); - static Error_VKeyExpansionMustBeFollowedByVKey = () => m(this.ERROR_VKeyExpansionMustBeFollowedByVKey, `A virtual key expansion must be terminated by a virtual key`); static ERROR_VKeyExpansionMustBeFollowedByVKey = SevError | 0x065; + static Error_VKeyExpansionMustBeFollowedByVKey = () => m(this.ERROR_VKeyExpansionMustBeFollowedByVKey, `A virtual key expansion must be terminated by a virtual key`); - static Error_CharacterExpansionMustBeFollowedByCharacter = () => m(this.ERROR_CharacterExpansionMustBeFollowedByCharacter, `A character expansion must be terminated by a character key`); static ERROR_CharacterExpansionMustBeFollowedByCharacter = SevError | 0x066; + static Error_CharacterExpansionMustBeFollowedByCharacter = () => m(this.ERROR_CharacterExpansionMustBeFollowedByCharacter, `A character expansion must be terminated by a character key`); - static Error_VKeyExpansionMustUseConsistentShift = () => m(this.ERROR_VKeyExpansionMustUseConsistentShift, `A virtual key expansion must use the same shift state for both terminators`); static ERROR_VKeyExpansionMustUseConsistentShift = SevError | 0x067; + static Error_VKeyExpansionMustUseConsistentShift = () => m(this.ERROR_VKeyExpansionMustUseConsistentShift, `A virtual key expansion must use the same shift state for both terminators`); - static Error_ExpansionMustBePositive = () => m(this.ERROR_ExpansionMustBePositive, `An expansion must have positive difference (i.e. A-Z, not Z-A)`); static ERROR_ExpansionMustBePositive = SevError | 0x068; + static Error_ExpansionMustBePositive = () => m(this.ERROR_ExpansionMustBePositive, `An expansion must have positive difference (i.e. A-Z, not Z-A)`); - static Error_CasedKeysMustContainOnlyVirtualKeys = () => m(this.ERROR_CasedKeysMustContainOnlyVirtualKeys, `The &CasedKeys system store must contain only virtual keys or characters found on a US English keyboard`); static ERROR_CasedKeysMustContainOnlyVirtualKeys = SevError | 0x069; + static Error_CasedKeysMustContainOnlyVirtualKeys = () => m(this.ERROR_CasedKeysMustContainOnlyVirtualKeys, `The &CasedKeys system store must contain only virtual keys or characters found on a US English keyboard`); - static Error_CasedKeysMustNotIncludeShiftStates = () => m(this.ERROR_CasedKeysMustNotIncludeShiftStates, `The &CasedKeys system store must not include shift states`); static ERROR_CasedKeysMustNotIncludeShiftStates = SevError | 0x06A; + static Error_CasedKeysMustNotIncludeShiftStates = () => m(this.ERROR_CasedKeysMustNotIncludeShiftStates, `The &CasedKeys system store must not include shift states`); - static Error_CasedKeysNotSupportedWithMnemonicLayout = () => m(this.ERROR_CasedKeysNotSupportedWithMnemonicLayout, `The &CasedKeys system store is not supported with mnemonic layouts`); static ERROR_CasedKeysNotSupportedWithMnemonicLayout = SevError | 0x06B; + static Error_CasedKeysNotSupportedWithMnemonicLayout = () => m(this.ERROR_CasedKeysNotSupportedWithMnemonicLayout, `The &CasedKeys system store is not supported with mnemonic layouts`); - static Error_CannotUseReadWriteGroupFromReadonlyGroup = () => m(this.ERROR_CannotUseReadWriteGroupFromReadonlyGroup, `Group used from a readonly group must also be readonly`); static ERROR_CannotUseReadWriteGroupFromReadonlyGroup = SevError | 0x06C; + static Error_CannotUseReadWriteGroupFromReadonlyGroup = () => m(this.ERROR_CannotUseReadWriteGroupFromReadonlyGroup, `Group used from a readonly group must also be readonly`); - static Error_StatementNotPermittedInReadonlyGroup = () => m(this.ERROR_StatementNotPermittedInReadonlyGroup, `Statement is not permitted in output of readonly group`); static ERROR_StatementNotPermittedInReadonlyGroup = SevError | 0x06D; + static Error_StatementNotPermittedInReadonlyGroup = () => m(this.ERROR_StatementNotPermittedInReadonlyGroup, `Statement is not permitted in output of readonly group`); - static Error_OutputInReadonlyGroup = () => m(this.ERROR_OutputInReadonlyGroup, `Output is not permitted in a readonly group`); static ERROR_OutputInReadonlyGroup = SevError | 0x06E; + static Error_OutputInReadonlyGroup = () => m(this.ERROR_OutputInReadonlyGroup, `Output is not permitted in a readonly group`); - static Error_NewContextGroupMustBeReadonly = () => m(this.ERROR_NewContextGroupMustBeReadonly, `Group used in begin newContext must be readonly`); static ERROR_NewContextGroupMustBeReadonly = SevError | 0x06F; + static Error_NewContextGroupMustBeReadonly = () => m(this.ERROR_NewContextGroupMustBeReadonly, `Group used in begin newContext must be readonly`); - static Error_PostKeystrokeGroupMustBeReadonly = () => m(this.ERROR_PostKeystrokeGroupMustBeReadonly, `Group used in begin postKeystroke must be readonly`); static ERROR_PostKeystrokeGroupMustBeReadonly = SevError | 0x070; + static Error_PostKeystrokeGroupMustBeReadonly = () => m(this.ERROR_PostKeystrokeGroupMustBeReadonly, `Group used in begin postKeystroke must be readonly`); - static Error_DuplicateGroup = () => m(this.ERROR_DuplicateGroup, `A group with this name has already been defined.`); static ERROR_DuplicateGroup = SevError | 0x071; + static Error_DuplicateGroup = () => m(this.ERROR_DuplicateGroup, `A group with this name has already been defined.`); - static Error_DuplicateStore = () => m(this.ERROR_DuplicateStore, `A store with this name has already been defined.`); static ERROR_DuplicateStore = SevError | 0x072; + static Error_DuplicateStore = () => m(this.ERROR_DuplicateStore, `A store with this name has already been defined.`); - static Error_RepeatedBegin = () => m(this.ERROR_RepeatedBegin, `Begin has already been set`); static ERROR_RepeatedBegin = SevError | 0x073; + static Error_RepeatedBegin = () => m(this.ERROR_RepeatedBegin, `Begin has already been set`); - static Error_VirtualKeyInContext = () => m(this.ERROR_VirtualKeyInContext, `Virtual keys are not permitted in context`); static ERROR_VirtualKeyInContext = SevError | 0x074; + static Error_VirtualKeyInContext = () => m(this.ERROR_VirtualKeyInContext, `Virtual keys are not permitted in context`); - static Warn_TooManyWarnings = () => m(this.WARN_TooManyWarnings, `Too many warnings or errors`); static WARN_TooManyWarnings = SevWarn | 0x080; + static Warn_TooManyWarnings = () => m(this.WARN_TooManyWarnings, `Too many warnings or errors`); - static Warn_OldVersion = () => m(this.WARN_OldVersion, `The keyboard file is an old version`); static WARN_OldVersion = SevWarn | 0x081; + static Warn_OldVersion = () => m(this.WARN_OldVersion, `The keyboard file is an old version`); - static Warn_BitmapNotUsed = () => m(this.WARN_BitmapNotUsed, `The 'bitmaps' statement is obsolete and only the first bitmap referred to will be used, you should use 'bitmap'.`); static WARN_BitmapNotUsed = SevWarn | 0x082; + static Warn_BitmapNotUsed = () => m(this.WARN_BitmapNotUsed, `The 'bitmaps' statement is obsolete and only the first bitmap referred to will be used, you should use 'bitmap'.`); - static Warn_CustomLanguagesNotSupported = () => m(this.WARN_CustomLanguagesNotSupported, `Languages over 0x1FF, 0x1F are not supported correctly by Windows. You should use no LANGUAGE line instead.`); static WARN_CustomLanguagesNotSupported = SevWarn | 0x083; + static Warn_CustomLanguagesNotSupported = () => m(this.WARN_CustomLanguagesNotSupported, `Languages over 0x1FF, 0x1F are not supported correctly by Windows. You should use no LANGUAGE line instead.`); - static Warn_KeyBadLength = () => m(this.WARN_KeyBadLength, `There are too many characters in the keystroke part of the rule.`); static WARN_KeyBadLength = SevWarn | 0x084; + static Warn_KeyBadLength = () => m(this.WARN_KeyBadLength, `There are too many characters in the keystroke part of the rule.`); - static Warn_IndexStoreShort = () => m(this.WARN_IndexStoreShort, `The store referenced in index() is shorter than the store referenced in any()`); static WARN_IndexStoreShort = SevWarn | 0x085; + static Warn_IndexStoreShort = () => m(this.WARN_IndexStoreShort, `The store referenced in index() is shorter than the store referenced in any()`); - static Warn_UnicodeInANSIGroup = () => m(this.WARN_UnicodeInANSIGroup, `A Unicode character was found in an ANSI group`); static WARN_UnicodeInANSIGroup = SevWarn | 0x086; + static Warn_UnicodeInANSIGroup = () => m(this.WARN_UnicodeInANSIGroup, `A Unicode character was found in an ANSI group`); - static Warn_ANSIInUnicodeGroup = () => m(this.WARN_ANSIInUnicodeGroup, `An ANSI character was found in a Unicode group`); static WARN_ANSIInUnicodeGroup = SevWarn | 0x087; + static Warn_ANSIInUnicodeGroup = () => m(this.WARN_ANSIInUnicodeGroup, `An ANSI character was found in a Unicode group`); - static Warn_UnicodeSurrogateUsed = () => m(this.WARN_UnicodeSurrogateUsed, `A Unicode surrogate character was found. You should use Unicode scalar values to represent values > U+FFFF`); static WARN_UnicodeSurrogateUsed = SevWarn | 0x088; + static Warn_UnicodeSurrogateUsed = () => m(this.WARN_UnicodeSurrogateUsed, `A Unicode surrogate character was found. You should use Unicode scalar values to represent values > U+FFFF`); - static Warn_ReservedCharacter = () => m(this.WARN_ReservedCharacter, `A Unicode character was found that should not be used`); static WARN_ReservedCharacter = SevWarn | 0x089; + static Warn_ReservedCharacter = () => m(this.WARN_ReservedCharacter, `A Unicode character was found that should not be used`); // Note: INFO_Info is called CWARN_Info in kmn_compiler_errors.h, but should have an "info" severity - static Info_Info = () => m(this.INFO_Info, `Information`); static INFO_Info = SevInfo | 0x08A; + static Info_Info = () => m(this.INFO_Info, `Information`); - static Warn_VirtualKeyWithMnemonicLayout = () => m(this.WARN_VirtualKeyWithMnemonicLayout, `Virtual key used instead of virtual character key with a mnemonic layout`); static WARN_VirtualKeyWithMnemonicLayout = SevWarn | 0x08B; + static Warn_VirtualKeyWithMnemonicLayout = () => m(this.WARN_VirtualKeyWithMnemonicLayout, `Virtual key used instead of virtual character key with a mnemonic layout`); - static Warn_VirtualCharKeyWithPositionalLayout = () => m(this.WARN_VirtualCharKeyWithPositionalLayout, `Virtual character key used with a positional layout instead of mnemonic layout`); static WARN_VirtualCharKeyWithPositionalLayout = SevWarn | 0x08C; + static Warn_VirtualCharKeyWithPositionalLayout = () => m(this.WARN_VirtualCharKeyWithPositionalLayout, `Virtual character key used with a positional layout instead of mnemonic layout`); - static Warn_StoreAlreadyUsedAsOptionOrCall = () => m(this.WARN_StoreAlreadyUsedAsOptionOrCall, `Store already used as an option or in a call statement and should not be used as a normal store`); static WARN_StoreAlreadyUsedAsOptionOrCall = SevWarn | 0x08D; + static Warn_StoreAlreadyUsedAsOptionOrCall = () => m(this.WARN_StoreAlreadyUsedAsOptionOrCall, `Store already used as an option or in a call statement and should not be used as a normal store`); - static Warn_StoreAlreadyUsedAsStoreOrCall = () => m(this.WARN_StoreAlreadyUsedAsStoreOrCall, `Store already used as a normal store or in a call statement and should not be used as an option`); static WARN_StoreAlreadyUsedAsStoreOrCall = SevWarn | 0x08E; + static Warn_StoreAlreadyUsedAsStoreOrCall = () => m(this.WARN_StoreAlreadyUsedAsStoreOrCall, `Store already used as a normal store or in a call statement and should not be used as an option`); - static Warn_StoreAlreadyUsedAsStoreOrOption = () => m(this.WARN_StoreAlreadyUsedAsStoreOrOption, `Store already used as a normal store or as an option and should not be used in a call statement`); static WARN_StoreAlreadyUsedAsStoreOrOption = SevWarn | 0x08F; + static Warn_StoreAlreadyUsedAsStoreOrOption = () => m(this.WARN_StoreAlreadyUsedAsStoreOrOption, `Store already used as a normal store or as an option and should not be used in a call statement`); - static Warn_PunctuationInEthnologueCode = () => m(this.WARN_PunctuationInEthnologueCode, `Punctuation should not be used to separate Ethnologue codes; instead use spaces`); static WARN_PunctuationInEthnologueCode = SevWarn | 0x090; + static Warn_PunctuationInEthnologueCode = () => m(this.WARN_PunctuationInEthnologueCode, `Punctuation should not be used to separate Ethnologue codes; instead use spaces`); - static Warn_TouchLayoutMissingLayer = (o:{keyId:string, platformName:string, layerId:string, nextLayer:string}) => mw(this.WARN_TouchLayoutMissingLayer, - `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}", references a missing layer "${o.nextLayer}"`); static WARN_TouchLayoutMissingLayer = SevWarn | 0x091; + static Warn_TouchLayoutMissingLayer = (o:{keyId:string, platformName:string, layerId:string, nextLayer:string}) => mw(this.WARN_TouchLayoutMissingLayer, + `Key "${def(o.keyId)}" on platform "${def(o.platformName)}", layer "${def(o.layerId)}", references a missing layer "${def(o.nextLayer)}"`); - static Warn_TouchLayoutCustomKeyNotDefined = (o:{keyId:string, platformName:string, layerId:string}) => mw(this.WARN_TouchLayoutCustomKeyNotDefined, - `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}", is a custom key but has no corresponding rule in the source.`); static WARN_TouchLayoutCustomKeyNotDefined = SevWarn | 0x092; + static Warn_TouchLayoutCustomKeyNotDefined = (o:{keyId:string, platformName:string, layerId:string}) => mw(this.WARN_TouchLayoutCustomKeyNotDefined, + `Key "${def(o.keyId)}" on platform "${def(o.platformName)}", layer "${def(o.layerId)}", is a custom key but has no corresponding rule in the source.`); - static Warn_TouchLayoutMissingRequiredKeys = (o:{layerId:string, platformName:string, missingKeys:string}) => mw(this.WARN_TouchLayoutMissingRequiredKeys, - `Layer "${o.layerId}" on platform "${o.platformName}" is missing the required key(s) '${o.missingKeys}'.`); static WARN_TouchLayoutMissingRequiredKeys = SevWarn | 0x093; + static Warn_TouchLayoutMissingRequiredKeys = (o:{layerId:string, platformName:string, missingKeys:string}) => mw(this.WARN_TouchLayoutMissingRequiredKeys, + `Layer "${def(o.layerId)}" on platform "${def(o.platformName)}" is missing the required key(s) '${def(o.missingKeys)}'.`); - static Warn_HelpFileMissing = (o:{line:number, helpFilename:string, e:any}) => mw(this.WARN_HelpFileMissing, - `File ${o.helpFilename} could not be loaded: ${(o.e??'').toString()}`,o); static WARN_HelpFileMissing = SevWarn | 0x094; + static Warn_HelpFileMissing = (o:{line:number, helpFilename:string, e:any}) => mw(this.WARN_HelpFileMissing, + `File ${def(o.helpFilename)} could not be loaded: ${(o.e??'').toString()}`,o); - static Warn_EmbedJsFileMissing = (o:{line:number, jsFilename: string, e:any}) => mw(this.WARN_EmbedJsFileMissing, - `File ${o.jsFilename} could not be loaded: ${(o.e??'').toString()}`, o); static WARN_EmbedJsFileMissing = SevWarn | 0x095; + static Warn_EmbedJsFileMissing = (o:{line:number, jsFilename: string, e:any}) => mw(this.WARN_EmbedJsFileMissing, + `File ${def(o.jsFilename)} could not be loaded: ${(o.e??'').toString()}`, o); // static WARN_TouchLayoutFileMissing = SevWarn | 0x096; // static WARN_VisualKeyboardFileMissing = SevWarn | 0x097; - static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb = (o:{line:number,flags:string}) => mw(this.WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb, - `Extended shift flags ${o.flags} are not supported in KeymanWeb`, o); static WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb = SevWarn | 0x098; + static Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb = (o:{line:number,flags:string}) => mw(this.WARN_ExtendedShiftFlagsNotSupportedInKeymanWeb, + `Extended shift flags ${def(o.flags)} are not supported in KeymanWeb`, o); - static Warn_TouchLayoutUnidentifiedKey = (o:{layerId:string}) => mw(this.WARN_TouchLayoutUnidentifiedKey, - `A key on layer "${o.layerId}" has no identifier.`); static WARN_TouchLayoutUnidentifiedKey = SevWarn | 0x099; + static Warn_TouchLayoutUnidentifiedKey = (o:{layerId:string}) => mw(this.WARN_TouchLayoutUnidentifiedKey, + `A key on layer "${def(o.layerId)}" has no identifier.`); - static Hint_UnreachableKeyCode = (o:{line:number,key:string}) => mw(this.HINT_UnreachableKeyCode, - `The rule will never be matched for key ${o.key} because its key code is never fired.`, o); static HINT_UnreachableKeyCode = SevHint | 0x09A; + static Hint_UnreachableKeyCode = (o:{line:number,key:string}) => mw(this.HINT_UnreachableKeyCode, + `The rule will never be matched for key ${def(o.key)} because its key code is never fired.`, o); // static WARN_CouldNotCopyJsonFile = SevWarn | 0x09B; - static Warn_PlatformNotInTargets = () => m(this.WARN_PlatformNotInTargets, `The specified platform is not a target platform`); static WARN_PlatformNotInTargets = SevWarn | 0x09C; + static Warn_PlatformNotInTargets = () => m(this.WARN_PlatformNotInTargets, `The specified platform is not a target platform`); - static Warn_HeaderStatementIsDeprecated = () => m(this.WARN_HeaderStatementIsDeprecated, `Header statements are deprecated; use instead the equivalent system store`); static WARN_HeaderStatementIsDeprecated = SevWarn | 0x09D; + static Warn_HeaderStatementIsDeprecated = () => m(this.WARN_HeaderStatementIsDeprecated, `Header statements are deprecated; use instead the equivalent system store`); - static Warn_UseNotLastStatementInRule = () => m(this.WARN_UseNotLastStatementInRule, `A rule with use() statements in the output should not have other content following the use() statements`); static WARN_UseNotLastStatementInRule = SevWarn | 0x09E; + static Warn_UseNotLastStatementInRule = () => m(this.WARN_UseNotLastStatementInRule, `A rule with use() statements in the output should not have other content following the use() statements`); + static WARN_TouchLayoutFontShouldBeSameForAllPlatforms = SevWarn | 0x09F; static Warn_TouchLayoutFontShouldBeSameForAllPlatforms = () => mw(this.WARN_TouchLayoutFontShouldBeSameForAllPlatforms, `The touch layout font should be the same for all platforms.`); - static WARN_TouchLayoutFontShouldBeSameForAllPlatforms = SevWarn | 0x09F; // static WARN_InvalidJSONMetadataFile = SevWarn | 0x0A0; // static WARN_JSONMetadataOSKFontShouldMatchTouchFont = SevWarn | 0x0A1; - static Warn_KVKFileIsInSourceFormat = () => m(this.WARN_KVKFileIsInSourceFormat, `.kvk file should be binary but is an XML file`); static WARN_KVKFileIsInSourceFormat = SevWarn | 0x0A2; + static Warn_KVKFileIsInSourceFormat = () => m(this.WARN_KVKFileIsInSourceFormat, `.kvk file should be binary but is an XML file`); // kmcmplib: static Warn_DontMixChiralAndNonChiralModifiers = () => m(this.WARN_DontMixChiralAndNonChiralModifiers, `Don't mix the use of left/right modifiers with non-left/right modifiers in the same platform`); + static WARN_DontMixChiralAndNonChiralModifiers = SevWarn | 0x0A3; static Warn_DontMixChiralAndNonChiralModifiers = () => mw(this.WARN_DontMixChiralAndNonChiralModifiers, `This keyboard contains Ctrl,Alt and LCtrl,LAlt,RCtrl,RAlt sets of modifiers. Use only one or the other set for web target.`); - static WARN_DontMixChiralAndNonChiralModifiers = SevWarn | 0x0A3; - static Warn_MixingLeftAndRightModifiers = () => m(this.WARN_MixingLeftAndRightModifiers, `Left and right modifiers should not both be used in the same rule`); static WARN_MixingLeftAndRightModifiers = SevWarn | 0x0A4; + static Warn_MixingLeftAndRightModifiers = () => m(this.WARN_MixingLeftAndRightModifiers, `Left and right modifiers should not both be used in the same rule`); - static Warn_LanguageHeadersDeprecatedInKeyman10 = () => m(this.WARN_LanguageHeadersDeprecatedInKeyman10, `This language header has been deprecated in Keyman 10. Instead, add language metadata in the package file`); static WARN_LanguageHeadersDeprecatedInKeyman10 = SevWarn | 0x0A5; + static Warn_LanguageHeadersDeprecatedInKeyman10 = () => m(this.WARN_LanguageHeadersDeprecatedInKeyman10, `This language header has been deprecated in Keyman 10. Instead, add language metadata in the package file`); - static Hint_NonUnicodeFile = () => m(this.HINT_NonUnicodeFile, `Keyman Developer has detected that the file has ANSI encoding. Consider converting this file to UTF-8`); static HINT_NonUnicodeFile = SevHint | 0x0A6; + static Hint_NonUnicodeFile = () => m(this.HINT_NonUnicodeFile, `Keyman Developer has detected that the file has ANSI encoding. Consider converting this file to UTF-8`); // static WARN_TooManyErrorsOrWarnings = SevWarn | 0x0A7; - static Warn_HotkeyHasInvalidModifier = () => m(this.WARN_HotkeyHasInvalidModifier, `Hotkey has modifiers that are not supported. Use only SHIFT, CTRL and ALT`); static WARN_HotkeyHasInvalidModifier = SevWarn | 0x0A8; + static Warn_HotkeyHasInvalidModifier = () => m(this.WARN_HotkeyHasInvalidModifier, `Hotkey has modifiers that are not supported. Use only SHIFT, CTRL and ALT`); + static WARN_TouchLayoutSpecialLabelOnNormalKey = SevWarn | 0x0A9; static Warn_TouchLayoutSpecialLabelOnNormalKey = (o:{keyId:string, platformName:string, layerId:string, label:string}) => mw(this.WARN_TouchLayoutSpecialLabelOnNormalKey, - `Key "${o.keyId}" on platform "${o.platformName}", layer "${o.layerId}" does not have `+ - `the key type "Special" or "Special (active)" but has the label "${o.label}". This feature is only supported in Keyman 14 or later`); - static WARN_TouchLayoutSpecialLabelOnNormalKey = SevWarn | 0x0A9; + `Key "${def(o.keyId)}" on platform "${def(o.platformName)}", layer "${def(o.layerId)}" does not have `+ + `the key type "Special" or "Special (active)" but has the label "${def(o.label)}". This feature is only supported in Keyman 14 or later`); - static Warn_OptionStoreNameInvalid = (o:{name:string}) => mw(this.WARN_OptionStoreNameInvalid, - `The option store ${o.name} should be named with characters in the range A-Z, a-z, 0-9 and _ only.`); static WARN_OptionStoreNameInvalid = SevWarn | 0x0AA; + static Warn_OptionStoreNameInvalid = (o:{name:string}) => mw(this.WARN_OptionStoreNameInvalid, + `The option store ${def(o.name)} should be named with characters in the range A-Z, a-z, 0-9 and _ only.`); - static Warn_NulNotFirstStatementInContext = () => m(this.WARN_NulNotFirstStatementInContext, `nul must be the first statement in the context`); static WARN_NulNotFirstStatementInContext = SevWarn | 0x0AB; + static Warn_NulNotFirstStatementInContext = () => m(this.WARN_NulNotFirstStatementInContext, `nul must be the first statement in the context`); - static Warn_IfShouldBeAtStartOfContext = () => m(this.WARN_IfShouldBeAtStartOfContext, `if, platform and baselayout should be at start of context (after nul, if present)`); static WARN_IfShouldBeAtStartOfContext = SevWarn | 0x0AC; + static Warn_IfShouldBeAtStartOfContext = () => m(this.WARN_IfShouldBeAtStartOfContext, `if, platform and baselayout should be at start of context (after nul, if present)`); - static Warn_KeyShouldIncludeNCaps = () => m(this.WARN_KeyShouldIncludeNCaps, `Other rules which reference this key include CAPS or NCAPS modifiers, so this rule must include NCAPS modifier to avoid inconsistent matches`); static WARN_KeyShouldIncludeNCaps = SevWarn | 0x0AD; + static Warn_KeyShouldIncludeNCaps = () => m(this.WARN_KeyShouldIncludeNCaps, `Other rules which reference this key include CAPS or NCAPS modifiers, so this rule must include NCAPS modifier to avoid inconsistent matches`); - static Hint_UnreachableRule = () => m(this.HINT_UnreachableRule, `This rule will never be matched as another rule takes precedence`); static HINT_UnreachableRule = SevHint | 0x0AE; + static Hint_UnreachableRule = () => m(this.HINT_UnreachableRule, `This rule will never be matched as another rule takes precedence`); - static Warn_VirtualKeyInOutput = () => m(this.WARN_VirtualKeyInOutput, `Virtual keys are not supported in output`); static WARN_VirtualKeyInOutput = SevWarn | 0x0AF; + static Warn_VirtualKeyInOutput = () => m(this.WARN_VirtualKeyInOutput, `Virtual keys are not supported in output`); - static Fatal_BufferOverflow = () => m(this.FATAL_BufferOverflow, `The compiler memory buffer overflowed`); static FATAL_BufferOverflow = SevFatal | 0x0C0; + static Fatal_BufferOverflow = () => m(this.FATAL_BufferOverflow, `The compiler memory buffer overflowed`); - static Fatal_Break = () => m(this.FATAL_Break, `Compiler interrupted by user`); static FATAL_Break = SevFatal | 0x0C1; + static Fatal_Break = () => m(this.FATAL_Break, `Compiler interrupted by user`); }; /** diff --git a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts index d94b51f42a9..b5bb31f1023 100644 --- a/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/kmw-compiler/kmw-compiler-messages.ts @@ -1,5 +1,5 @@ import { KmnCompilerMessages } from "../compiler/kmn-compiler-messages.js"; -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageDef as def, CompilerMessageSpec } from "@keymanapp/common-types"; import { kmnfile } from "./compiler-globals.js"; const Namespace = CompilerErrorNamespace.KmwCompiler; @@ -30,28 +30,23 @@ export class KmwCompilerMessages extends KmnCompilerMessages { // Following messages are kmw-compiler only, so use KmwCompiler error namespace - /** @internal */ + static ERROR_NotAnyRequiresVersion14 = SevError | 0x0001; static Error_NotAnyRequiresVersion14 = (o:{line: number}) => m(this.ERROR_NotAnyRequiresVersion14, `Statement notany in context() match requires version 14.0+ of KeymanWeb`, o); - static ERROR_NotAnyRequiresVersion14 = SevError | 0x0001; - /** @internal */ - static Error_TouchLayoutIdentifierRequires15 = (o:{keyId:string, platformName:string, layerId:string}) => m(this.ERROR_TouchLayoutIdentifierRequires15, - `Key "${o.keyId}" on "${o.platformName}", layer "${o.layerId}" has a multi-part identifier which requires version 15.0 or newer.`); static ERROR_TouchLayoutIdentifierRequires15 = SevError | 0x0002; + static Error_TouchLayoutIdentifierRequires15 = (o:{keyId:string, platformName:string, layerId:string}) => m(this.ERROR_TouchLayoutIdentifierRequires15, + `Key "${def(o.keyId)}" on "${def(o.platformName)}", layer "${def(o.layerId)}" has a multi-part identifier which requires version 15.0 or newer.`); - /** @internal */ - static Error_InvalidTouchLayoutFileFormat = (o:{msg: string}) => m(this.ERROR_InvalidTouchLayoutFileFormat, - `Invalid touch layout file: ${o.msg}`); static ERROR_InvalidTouchLayoutFileFormat = SevError | 0x0003; + static Error_InvalidTouchLayoutFileFormat = (o:{msg: string}) => m(this.ERROR_InvalidTouchLayoutFileFormat, + `Invalid touch layout file: ${def(o.msg)}`); - /** @internal */ - static Error_TouchLayoutFileDoesNotExist = (o:{filename:string}) => m(this.ERROR_TouchLayoutFileDoesNotExist, - `Touch layout file ${o.filename} does not exist`); static ERROR_TouchLayoutFileDoesNotExist = SevError | 0x0004; + static Error_TouchLayoutFileDoesNotExist = (o:{filename:string}) => m(this.ERROR_TouchLayoutFileDoesNotExist, + `Touch layout file ${def(o.filename)} does not exist`); - /** @internal */ - static Hint_TouchLayoutUsesUnsupportedGesturesDownlevel = (o:{keyId:string}) => m(this.HINT_TouchLayoutUsesUnsupportedGesturesDownlevel, - `The touch layout uses a flick or multi-tap gesture on key ${o.keyId}, which is only available on version 17.0+ of Keyman`); static HINT_TouchLayoutUsesUnsupportedGesturesDownlevel = SevHint | 0x0005; + static Hint_TouchLayoutUsesUnsupportedGesturesDownlevel = (o:{keyId:string}) => m(this.HINT_TouchLayoutUsesUnsupportedGesturesDownlevel, + `The touch layout uses a flick or multi-tap gesture on key ${def(o.keyId)}, which is only available on version 17.0+ of Keyman`); }; diff --git a/developer/src/kmc-ldml/src/compiler/messages.ts b/developer/src/kmc-ldml/src/compiler/messages.ts index 6790f9ec356..710a58b74e5 100644 --- a/developer/src/kmc-ldml/src/compiler/messages.ts +++ b/developer/src/kmc-ldml/src/compiler/messages.ts @@ -1,4 +1,4 @@ -import { util, CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; +import { util, CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types"; // const SevInfo = CompilerErrorSeverity.Info | CompilerErrorNamespace.LdmlKeyboardCompiler; const SevHint = CompilerErrorSeverity.Hint | CompilerErrorNamespace.LdmlKeyboardCompiler; const SevWarn = CompilerErrorSeverity.Warn | CompilerErrorNamespace.LdmlKeyboardCompiler; @@ -6,59 +6,59 @@ const SevError = CompilerErrorSeverity.Error | CompilerErrorNamespace.LdmlKeyboa const SevFatal = CompilerErrorSeverity.Fatal | CompilerErrorNamespace.LdmlKeyboardCompiler; export class CompilerMessages { - static Hint_NormalizationDisabled = () => m(this.HINT_NormalizationDisabled, `normalization=disabled is not recommended.`); static HINT_NormalizationDisabled = SevHint | 0x0001; + static Hint_NormalizationDisabled = () => m(this.HINT_NormalizationDisabled, `normalization=disabled is not recommended.`); - static Error_InvalidLocale = (o:{tag: string}) => m(this.ERROR_InvalidLocale, `Invalid BCP 47 locale form '${o.tag}'`); static ERROR_InvalidLocale = SevError | 0x0002; + static Error_InvalidLocale = (o:{tag: string}) => m(this.ERROR_InvalidLocale, `Invalid BCP 47 locale form '${def(o.tag)}'`); - static Error_HardwareLayerHasTooManyRows = () => m(this.ERROR_HardwareLayerHasTooManyRows, `'hardware' layer has too many rows`); static ERROR_HardwareLayerHasTooManyRows = SevError | 0x0003; + static Error_HardwareLayerHasTooManyRows = () => m(this.ERROR_HardwareLayerHasTooManyRows, `'hardware' layer has too many rows`); - static Error_RowOnHardwareLayerHasTooManyKeys = (o:{row: number, hardware: string, modifiers: string}) => m(this.ERROR_RowOnHardwareLayerHasTooManyKeys, `Row #${o.row} on 'hardware' ${o.hardware} layer for modifier ${o.modifiers || 'none'} has too many keys`); static ERROR_RowOnHardwareLayerHasTooManyKeys = SevError | 0x0004; + static Error_RowOnHardwareLayerHasTooManyKeys = (o:{row: number, hardware: string, modifiers: string}) => m(this.ERROR_RowOnHardwareLayerHasTooManyKeys, `Row #${def(o.row)} on 'hardware' ${def(o.hardware)} layer for modifier ${o.modifiers || 'none'} has too many keys`); - static Error_KeyNotFoundInKeyBag = (o:{keyId: string, col: number, row: number, layer: string, form: string}) => - m(this.ERROR_KeyNotFoundInKeyBag, `Key '${o.keyId}' in position #${o.col} on row #${o.row} of layer ${o.layer}, form '${o.form}' not found in key bag`); static ERROR_KeyNotFoundInKeyBag = SevError | 0x0005; + static Error_KeyNotFoundInKeyBag = (o:{keyId: string, col: number, row: number, layer: string, form: string}) => + m(this.ERROR_KeyNotFoundInKeyBag, `Key '${def(o.keyId)}' in position #${def(o.col)} on row #${def(o.row)} of layer ${def(o.layer)}, form '${def(o.form)}' not found in key bag`); + static HINT_OneOrMoreRepeatedLocales = SevHint | 0x0006; static Hint_OneOrMoreRepeatedLocales = () => m(this.HINT_OneOrMoreRepeatedLocales, `After minimization, one or more locales is repeated and has been removed`); - static HINT_OneOrMoreRepeatedLocales = SevHint | 0x0006; - static Error_InvalidFile = (o:{errorText: string}) => - m(this.ERROR_InvalidFile, `The source file has an invalid structure: ${o.errorText}`); static ERROR_InvalidFile = SevError | 0x0007; + static Error_InvalidFile = (o:{errorText: string}) => + m(this.ERROR_InvalidFile, `The source file has an invalid structure: ${def(o.errorText)}`); - static Hint_LocaleIsNotMinimalAndClean = (o:{sourceLocale: string, locale: string}) => - m(this.HINT_LocaleIsNotMinimalAndClean, `Locale '${o.sourceLocale}' is not minimal or correctly formatted and should be '${o.locale}'`); static HINT_LocaleIsNotMinimalAndClean = SevHint | 0x0008; + static Hint_LocaleIsNotMinimalAndClean = (o:{sourceLocale: string, locale: string}) => + m(this.HINT_LocaleIsNotMinimalAndClean, `Locale '${def(o.sourceLocale)}' is not minimal or correctly formatted and should be '${def(o.locale)}'`); - static Error_InvalidScanCode = (o:{form?: string, codes?: string[]}) => - m(this.ERROR_InvalidScanCode, `Form '${o.form}' has invalid/unknown scancodes '${o.codes?.join(' ')}'`); static ERROR_InvalidScanCode = SevError | 0x0009; + static Error_InvalidScanCode = (o:{form?: string, codes?: string[]}) => + m(this.ERROR_InvalidScanCode, `Form '${def(o.form)}' has invalid/unknown scancodes '${def(o.codes?.join(' '))}'`); - static Warn_CustomForm = (o:{id: string}) => - m(this.WARN_CustomForm, `Custom
element. Key layout may not be as expected.`); static WARN_CustomForm = SevWarn | 0x000A; + static Warn_CustomForm = (o:{id: string}) => + m(this.WARN_CustomForm, `Custom element. Key layout may not be as expected.`); - static Error_GestureKeyNotFoundInKeyBag = (o:{keyId: string, parentKeyId: string, attribute: string}) => - m(this.ERROR_GestureKeyNotFoundInKeyBag, `Key '${o.keyId}' not found in key bag, referenced from other '${o.parentKeyId}' in ${o.attribute}`); static ERROR_GestureKeyNotFoundInKeyBag = SevError | 0x000B; + static Error_GestureKeyNotFoundInKeyBag = (o:{keyId: string, parentKeyId: string, attribute: string}) => + m(this.ERROR_GestureKeyNotFoundInKeyBag, `Key '${def(o.keyId)}' not found in key bag, referenced from other '${def(o.parentKeyId)}' in ${def(o.attribute)}`); // 0x000C - available - static Error_InvalidVersion = (o:{version: string}) => - m(this.ERROR_InvalidVersion, `Version number '${o.version}' must be a semantic version format string.`); static ERROR_InvalidVersion = SevError | 0x000D; + static Error_InvalidVersion = (o:{version: string}) => + m(this.ERROR_InvalidVersion, `Version number '${def(o.version)}' must be a semantic version format string.`); + static ERROR_MustBeAtLeastOneLayerElement = SevError | 0x000E; static Error_MustBeAtLeastOneLayerElement = () => m(this.ERROR_MustBeAtLeastOneLayerElement, `The source file must contain at least one layer element.`); - static ERROR_MustBeAtLeastOneLayerElement = SevError | 0x000E; - static Fatal_SectionCompilerFailed = (o:{sect: string}) => - CompilerMessageSpecWithException(this.FATAL_SectionCompilerFailed, null, `The compiler for '${o.sect}' failed unexpectedly.`); static FATAL_SectionCompilerFailed = SevFatal | 0x000F; + static Fatal_SectionCompilerFailed = (o:{sect: string}) => + CompilerMessageSpecWithException(this.FATAL_SectionCompilerFailed, null, `The compiler for '${def(o.sect)}' failed unexpectedly.`); /** annotate the to= or id= entry */ private static outputOrKeyId(o:{output?: string, keyId?: string}) { @@ -73,110 +73,110 @@ export class CompilerMessages { } } + static ERROR_DisplayIsRepeated = SevError | 0x0010; static Error_DisplayIsRepeated = (o:{output?: string, keyId?: string}) => m(this.ERROR_DisplayIsRepeated, `display ${CompilerMessages.outputOrKeyId(o)} has more than one display entry.`); - static ERROR_DisplayIsRepeated = SevError | 0x0010; - static Error_KeyMissingToGapOrSwitch = (o:{keyId: string}) => - m(this.ERROR_KeyMissingToGapOrSwitch, `key id='${o.keyId}' must have either output=, gap=, or layerId=.`); static ERROR_KeyMissingToGapOrSwitch = SevError | 0x0011; + static Error_KeyMissingToGapOrSwitch = (o:{keyId: string}) => + m(this.ERROR_KeyMissingToGapOrSwitch, `key id='${def(o.keyId)}' must have either output=, gap=, or layerId=.`); - static Error_ExcessHardware = (o:{formId: string}) => m(this.ERROR_ExcessHardware, - `layers formId=${o.formId}: Can only have one non-'touch' element`); static ERROR_ExcessHardware = SevError | 0x0012; + static Error_ExcessHardware = (o:{formId: string}) => m(this.ERROR_ExcessHardware, + `layers formId=${def(o.formId)}: Can only have one non-'touch' element`); - static Error_InvalidHardware = (o:{formId: string}) => m(this.ERROR_InvalidHardware, - `layers has invalid value formId=${o.formId}`); static ERROR_InvalidHardware = SevError | 0x0013; + static Error_InvalidHardware = (o:{formId: string}) => m(this.ERROR_InvalidHardware, + `layers has invalid value formId=${def(o.formId)}`); - static Error_InvalidModifier = (o:{layer: string, modifiers: string}) => m(this.ERROR_InvalidModifier, - `layer has invalid modifiers='${o.modifiers}' on layer id=${o.layer}`); static ERROR_InvalidModifier = SevError | 0x0014; + static Error_InvalidModifier = (o:{layer: string, modifiers: string}) => m(this.ERROR_InvalidModifier, + `layer has invalid modifiers='${def(o.modifiers)}' on layer id=${def(o.layer)}`); - static Error_MissingFlicks = (o:{flickId: string, id: string}) => m(this.ERROR_MissingFlicks, - `key id=${o.id} refers to missing flickId=${o.flickId}`); static ERROR_MissingFlicks = SevError | 0x0015; + static Error_MissingFlicks = (o:{flickId: string, id: string}) => m(this.ERROR_MissingFlicks, + `key id=${def(o.id)} refers to missing flickId=${def(o.flickId)}`); - static Error_DuplicateVariable = (o:{ids: string}) => m(this.ERROR_DuplicateVariable, - `duplicate variables: id=${o.ids}`); static ERROR_DuplicateVariable = SevError | 0x0016; + static Error_DuplicateVariable = (o:{ids: string}) => m(this.ERROR_DuplicateVariable, + `duplicate variables: id=${def(o.ids)}`); // Not hit due to XML parsing - static Error_InvalidTransformsType = (o:{types: string[]}) => - m(this.ERROR_InvalidTransformsType, `Invalid transforms types: '${o.types?.join(',')}'`); static ERROR_InvalidTransformsType = SevError | 0x0018; + static Error_InvalidTransformsType = (o:{types: string[]}) => + m(this.ERROR_InvalidTransformsType, `Invalid transforms types: '${def(o.types?.join(','))}'`); - static Error_DuplicateTransformsType = (o:{types: string[]}) => - m(this.ERROR_DuplicateTransformsType, `Duplicate transforms types: '${o.types?.join(',')}'`); static ERROR_DuplicateTransformsType = SevError | 0x0019; + static Error_DuplicateTransformsType = (o:{types: string[]}) => + m(this.ERROR_DuplicateTransformsType, `Duplicate transforms types: '${def(o.types?.join(','))}'`); + static ERROR_MixedTransformGroup = SevError | 0x001A; static Error_MixedTransformGroup = () => m(this.ERROR_MixedTransformGroup, `transformGroup cannot contain both reorder and transform elements`); - static ERROR_MixedTransformGroup = SevError | 0x001A; + static ERROR_EmptyTransformGroup = SevError | 0x001B; static Error_EmptyTransformGroup = () => m(this.ERROR_EmptyTransformGroup, `transformGroup must have either reorder or transform elements`); - static ERROR_EmptyTransformGroup = SevError | 0x001B; - static Error_MissingStringVariable = (o:{id: string}) => - m(this.ERROR_MissingStringVariable, `Reference to undefined string variable: \${${o.id}}`); static ERROR_MissingStringVariable = SevError | 0x001C; + static Error_MissingStringVariable = (o:{id: string}) => + m(this.ERROR_MissingStringVariable, `Reference to undefined string variable: \${${def(o.id)}}`); - static Error_MissingSetVariable = (o:{id: string}) => - m(this.ERROR_MissingSetVariable, `Reference to undefined set variable: \$[${o.id}]`); static ERROR_MissingSetVariable = SevError | 0x001D; + static Error_MissingSetVariable = (o:{id: string}) => + m(this.ERROR_MissingSetVariable, `Reference to undefined set variable: \$[${def(o.id)}]`); - static Error_MissingUnicodeSetVariable = (o:{id: string}) => - m(this.ERROR_MissingUnicodeSetVariable, `Reference to undefined UnicodeSet variable: \$[${o.id}]`); static ERROR_MissingUnicodeSetVariable = SevError | 0x001E; + static Error_MissingUnicodeSetVariable = (o:{id: string}) => + m(this.ERROR_MissingUnicodeSetVariable, `Reference to undefined UnicodeSet variable: \$[${def(o.id)}]`); - static Error_NeedSpacesBetweenSetVariables = (o:{item: string}) => - m(this.ERROR_NeedSpacesBetweenSetVariables, `Need spaces between set variables: ${o.item}`); static ERROR_NeedSpacesBetweenSetVariables = SevError | 0x001F; + static Error_NeedSpacesBetweenSetVariables = (o:{item: string}) => + m(this.ERROR_NeedSpacesBetweenSetVariables, `Need spaces between set variables: ${def(o.item)}`); - static Error_CantReferenceSetFromUnicodeSet = (o:{id: string}) => - m(this.ERROR_CantReferenceSetFromUnicodeSet, `Illegal use of set variable from within UnicodeSet: \$[${o.id}]`); static ERROR_CantReferenceSetFromUnicodeSet = SevError | 0x0020; + static Error_CantReferenceSetFromUnicodeSet = (o:{id: string}) => + m(this.ERROR_CantReferenceSetFromUnicodeSet, `Illegal use of set variable from within UnicodeSet: \$[${def(o.id)}]`); - static Error_MissingMarkers = (o: { ids: string[] }) => - m(this.ERROR_MissingMarkers, `Markers used for matching but not defined: ${o.ids?.join(',')}`); static ERROR_MissingMarkers = SevError | 0x0021; + static Error_MissingMarkers = (o: { ids: string[] }) => + m(this.ERROR_MissingMarkers, `Markers used for matching but not defined: ${def(o.ids?.join(','))}`); + static ERROR_DisplayNeedsToOrId = SevError | 0x0022; static Error_DisplayNeedsToOrId = (o:{output?: string, keyId?: string}) => m(this.ERROR_DisplayNeedsToOrId, `display ${CompilerMessages.outputOrKeyId(o)} needs output= or keyId=, but not both`); - static ERROR_DisplayNeedsToOrId = SevError | 0x0022; - static Hint_PUACharacters = (o: { count: number, lowestCh: number }) => - m(this.HINT_PUACharacters, `File contains ${o.count} PUA character(s), including ${util.describeCodepoint(o.lowestCh)}`); static HINT_PUACharacters = SevHint | 0x0023; + static Hint_PUACharacters = (o: { count: number, lowestCh: number }) => + m(this.HINT_PUACharacters, `File contains ${def(o.count)} PUA character(s), including ${util.describeCodepoint(o.lowestCh)}`); - static Warn_UnassignedCharacters = (o: { count: number, lowestCh: number }) => - m(this.WARN_UnassignedCharacters, `File contains ${o.count} unassigned character(s), including ${util.describeCodepoint(o.lowestCh)}`); static WARN_UnassignedCharacters = SevWarn | 0x0024; + static Warn_UnassignedCharacters = (o: { count: number, lowestCh: number }) => + m(this.WARN_UnassignedCharacters, `File contains ${def(o.count)} unassigned character(s), including ${util.describeCodepoint(o.lowestCh)}`); - static Error_IllegalCharacters = (o: { count: number, lowestCh: number }) => - m(this.ERROR_IllegalCharacters, `File contains ${o.count} illegal character(s), including ${util.describeCodepoint(o.lowestCh)}`); static ERROR_IllegalCharacters = SevError | 0x0025; + static Error_IllegalCharacters = (o: { count: number, lowestCh: number }) => + m(this.ERROR_IllegalCharacters, `File contains ${def(o.count)} illegal character(s), including ${util.describeCodepoint(o.lowestCh)}`); + static HINT_CharClassImplicitDenorm = SevHint | 0x0026; static Hint_CharClassImplicitDenorm = (o: { lowestCh: number }) => m(this.HINT_CharClassImplicitDenorm, `File has character classes which span non-NFD character(s), including ${util.describeCodepoint(o.lowestCh)}. These will not match any text.`); - static HINT_CharClassImplicitDenorm = SevHint | 0x0026; + static WARN_CharClassExplicitDenorm = SevWarn | 0x0027; static Warn_CharClassExplicitDenorm = (o: { lowestCh: number }) => m(this.WARN_CharClassExplicitDenorm, `File has character classes which include non-NFD characters(s), including ${util.describeCodepoint(o.lowestCh)}. These will not match any text.`); - static WARN_CharClassExplicitDenorm = SevWarn | 0x0027; - static Error_UnparseableReorderSet = (o: { from: string, set: string }) => - m(this.ERROR_UnparseableReorderSet, `Illegal UnicodeSet "${o.set}" in reorder "${o.from}`); static ERROR_UnparseableReorderSet = SevError | 0x0028; + static Error_UnparseableReorderSet = (o: { from: string, set: string }) => + m(this.ERROR_UnparseableReorderSet, `Illegal UnicodeSet "${def(o.set)}" in reorder "${def(o.from)}`); - static Error_UnparseableTransformFrom = (o: { from: string, message: string }) => - m(this.ERROR_UnparseableTransformFrom, `Invalid transfom from "${o.from}": "${o.message}`); static ERROR_UnparseableTransformFrom = SevError | 0x0029; + static Error_UnparseableTransformFrom = (o: { from: string, message: string }) => + m(this.ERROR_UnparseableTransformFrom, `Invalid transfom from "${def(o.from)}": "${def(o.message)}"`); - static Error_InvalidQuadEscape = (o: { cp: number }) => - m(this.ERROR_InvalidQuadEscape, `Invalid escape "\\u${util.hexQuad(o?.cp || 0)}", use "\\u{${o?.cp?.toString(16)}}" instead.`); static ERROR_InvalidQuadEscape = SevError | 0x0030; + static Error_InvalidQuadEscape = (o: { cp: number }) => + m(this.ERROR_InvalidQuadEscape, `Invalid escape "\\u${util.hexQuad(o?.cp || 0)}", use "\\u{${def(o?.cp?.toString(16))}}" instead.`); } diff --git a/developer/src/kmc-model-info/src/model-info-compiler-messages.ts b/developer/src/kmc-model-info/src/model-info-compiler-messages.ts index 847c98ab3ff..1736630d3df 100644 --- a/developer/src/kmc-model-info/src/model-info-compiler-messages.ts +++ b/developer/src/kmc-model-info/src/model-info-compiler-messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.ModelInfoCompiler; // const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -8,38 +8,38 @@ const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; export class ModelInfoCompilerMessages { - static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); static FATAL_UnexpectedException = SevFatal | 0x0001; + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); - static Error_FileDoesNotExist = (o:{filename: string}) => m(this.ERROR_FileDoesNotExist, `File ${o.filename} does not exist.`); static ERROR_FileDoesNotExist = SevError | 0x0002; + static Error_FileDoesNotExist = (o:{filename: string}) => m(this.ERROR_FileDoesNotExist, `File ${def(o.filename)} does not exist.`); - static Error_FileIsNotValid = (o:{filename: string; e: any}) => m(this.ERROR_FileIsNotValid, - `File ${o.filename} could not be parsed: ${(o.e ?? 'unknown error').toString()}.`); static ERROR_FileIsNotValid = SevError | 0x0003; + static Error_FileIsNotValid = (o:{filename: string; e: any}) => m(this.ERROR_FileIsNotValid, + `File ${def(o.filename)} could not be parsed: ${(o.e ?? 'unknown error').toString()}.`); - static Warn_MetadataFieldInconsistent = (o:{field:string, value:any, expected:any}) => m(this.WARN_MetadataFieldInconsistent, - `Warning: field ${o.field} value "${o.value}" does not match "${o.expected}" found in source file metadata.`); static WARN_MetadataFieldInconsistent = SevWarn | 0x0004; + static Warn_MetadataFieldInconsistent = (o:{field:string, value:any, expected:any}) => m(this.WARN_MetadataFieldInconsistent, + `Warning: field ${def(o.field)} value "${def(o.value)}" does not match "${def(o.expected)}" found in source file metadata.`); - static Error_InvalidAuthorEmail = (o:{email:string}) => m(this.ERROR_InvalidAuthorEmail, - `Invalid author email: ${o.email}`); static ERROR_InvalidAuthorEmail = SevError | 0x0005; + static Error_InvalidAuthorEmail = (o:{email:string}) => m(this.ERROR_InvalidAuthorEmail, + `Invalid author email: ${def(o.email)}`); - static Error_LicenseFileDoesNotExist = (o:{filename:string}) => m(this.ERROR_LicenseFileIsMissing, - `License file ${o.filename} does not exist.`); static ERROR_LicenseFileIsMissing = SevError | 0x0006; + static Error_LicenseFileDoesNotExist = (o:{filename:string}) => m(this.ERROR_LicenseFileIsMissing, + `License file ${def(o.filename)} does not exist.`); - static Error_LicenseFileIsDamaged = (o:{filename:string}) => m(this.ERROR_LicenseFileIsDamaged, - `License file ${o.filename} could not be loaded or decoded.`); static ERROR_LicenseFileIsDamaged = SevError | 0x0007; + static Error_LicenseFileIsDamaged = (o:{filename:string}) => m(this.ERROR_LicenseFileIsDamaged, + `License file ${def(o.filename)} could not be loaded or decoded.`); - static Error_LicenseIsNotValid = (o:{filename:string,message:string}) => m(this.ERROR_LicenseIsNotValid, - `An error was encountered parsing license file ${o.filename}: ${o.message}.`); static ERROR_LicenseIsNotValid = SevError | 0x0008; + static Error_LicenseIsNotValid = (o:{filename:string,message:string}) => m(this.ERROR_LicenseIsNotValid, + `An error was encountered parsing license file ${def(o.filename)}: ${def(o.message)}.`); + static ERROR_NoLicenseFound = SevError | 0x0009; static Error_NoLicenseFound = () => m(this.ERROR_NoLicenseFound, `No license for the model was found. MIT license is required for publication to Keyman lexical-models repository.`); - static ERROR_NoLicenseFound = SevError | 0x0009; } diff --git a/developer/src/kmc-model/src/model-compiler-messages.ts b/developer/src/kmc-model/src/model-compiler-messages.ts index aab2febff6d..40f4157210f 100644 --- a/developer/src/kmc-model/src/model-compiler-messages.ts +++ b/developer/src/kmc-model/src/model-compiler-messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec, CompilerMessageSpecWithException } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerEvent, CompilerMessageSpec, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.ModelCompiler; // const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -27,43 +27,43 @@ export class ModelCompilerMessageContext { export class ModelCompilerMessages { - static Fatal_UnexpectedException = (o:{e: any}) => m_e(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); static FATAL_UnexpectedException = SevFatal | 0x0001; + static Fatal_UnexpectedException = (o:{e: any}) => m_e(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); - static Hint_MixedNormalizationForms = (o:{wordform: string}) => m(this.HINT_MixedNormalizationForms, - `“${o.wordform}” is not in Unicode NFC. Automatically converting to NFC.`); static HINT_MixedNormalizationForms = SevHint | 0x0002; + static Hint_MixedNormalizationForms = (o:{wordform: string}) => m(this.HINT_MixedNormalizationForms, + `“${def(o.wordform)}” is not in Unicode NFC. Automatically converting to NFC.`); - static Hint_DuplicateWordInSameFile = (o:{wordform: string}) => m(this.HINT_DuplicateWordInSameFile, - `duplicate word “${o.wordform}” found in same file; summing counts`); static HINT_DuplicateWordInSameFile = SevHint | 0x0003; + static Hint_DuplicateWordInSameFile = (o:{wordform: string}) => m(this.HINT_DuplicateWordInSameFile, + `duplicate word “${def(o.wordform)}” found in same file; summing counts`); - static Error_UnimplementedModelFormat = (o:{format: string}) => m(this.ERROR_UnimplementedModelFormat, - `Unimplemented model format: ${o.format}`); static ERROR_UnimplementedModelFormat = SevError | 0x0004; + static Error_UnimplementedModelFormat = (o:{format: string}) => m(this.ERROR_UnimplementedModelFormat, + `Unimplemented model format: ${def(o.format)}`); - static Error_UnknownModelFormat = (o:{format: string}) => m(this.ERROR_UnknownModelFormat, - `Unimplemented model format: ${o.format}`); static ERROR_UnknownModelFormat = SevError | 0x0005; + static Error_UnknownModelFormat = (o:{format: string}) => m(this.ERROR_UnknownModelFormat, + `Unimplemented model format: ${def(o.format)}`); + static ERROR_NoDefaultExport = SevError | 0x0006; static Error_NoDefaultExport = () => m(this.ERROR_NoDefaultExport, `Model source does have a default export. Did you remember to write \`export default source;\`?`); - static ERROR_NoDefaultExport = SevError | 0x0006; + static ERROR_SearchTermToKeyMustBeExplicitlySpecified = SevError | 0x0007; static Error_SearchTermToKeyMustBeExplicitlySpecified = () => m(this.ERROR_SearchTermToKeyMustBeExplicitlySpecified, "searchTermToKey must be explicitly specified"); - static ERROR_SearchTermToKeyMustBeExplicitlySpecified = SevError | 0x0007; - static Error_UTF16BEUnsupported = () => m(this.ERROR_UTF16BEUnsupported, 'UTF-16BE is unsupported'); static ERROR_UTF16BEUnsupported = SevError | 0x0008; + static Error_UTF16BEUnsupported = () => m(this.ERROR_UTF16BEUnsupported, 'UTF-16BE is unsupported'); - static Error_UnknownWordBreaker = (o:{spec:string}) => m(this.ERROR_UnknownWordBreaker, - `Unknown word breaker: ${o.spec}`); static ERROR_UnknownWordBreaker = SevError | 0x0009; + static Error_UnknownWordBreaker = (o:{spec:string}) => m(this.ERROR_UnknownWordBreaker, + `Unknown word breaker: ${def(o.spec)}`); - static Error_UnsupportedScriptOverride = (o:{option:string}) => m(this.ERROR_UnsupportedScriptOverride, - `Unsupported script override: ${o.option}`); static ERROR_UnsupportedScriptOverride = SevError | 0x000A; + static Error_UnsupportedScriptOverride = (o:{option:string}) => m(this.ERROR_UnsupportedScriptOverride, + `Unsupported script override: ${def(o.option)}`); }; /** diff --git a/developer/src/kmc-package/src/compiler/package-compiler-messages.ts b/developer/src/kmc-package/src/compiler/package-compiler-messages.ts index c2b3dc6b30e..2f522889167 100644 --- a/developer/src/kmc-package/src/compiler/package-compiler-messages.ts +++ b/developer/src/kmc-package/src/compiler/package-compiler-messages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.PackageCompiler; const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -8,124 +8,124 @@ const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; export class CompilerMessages { - static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); static FATAL_UnexpectedException = SevFatal | 0x0001; + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); - static Warn_AbsolutePath = (o:{filename: string}) => m(this.WARN_AbsolutePath, `File ${o.filename} has an absolute path, which is not portable.`); static WARN_AbsolutePath = SevWarn | 0x0002; + static Warn_AbsolutePath = (o:{filename: string}) => m(this.WARN_AbsolutePath, `File ${def(o.filename)} has an absolute path, which is not portable.`); - static Error_FileDoesNotExist = (o:{filename: string}) => m(this.ERROR_FileDoesNotExist, `File ${o.filename} does not exist.`); static ERROR_FileDoesNotExist = SevError | 0x0003; + static Error_FileDoesNotExist = (o:{filename: string}) => m(this.ERROR_FileDoesNotExist, `File ${def(o.filename)} does not exist.`); - static Error_FileCouldNotBeRead = (o:{filename: string; e: any}) => m(this.ERROR_FileCouldNotBeRead, - `File ${o.filename} could not be read: ${(o.e ?? 'unknown error').toString()}.`); static ERROR_FileCouldNotBeRead = SevError | 0x0004; + static Error_FileCouldNotBeRead = (o:{filename: string; e: any}) => m(this.ERROR_FileCouldNotBeRead, + `File ${def(o.filename)} could not be read: ${(o.e ?? 'unknown error').toString()}.`); + static WARN_FileIsNotABinaryKvkFile = SevWarn | 0x0005; static Warn_FileIsNotABinaryKvkFile = (o:{filename: string}) => m(this.WARN_FileIsNotABinaryKvkFile, - `File ${o.filename} does not appear to be a valid binary .kvk file; this may be an old package that includes an xml-format .kvk file. `+ + `File ${def(o.filename)} does not appear to be a valid binary .kvk file; this may be an old package that includes an xml-format .kvk file. `+ `You must update the package to include the compiled .kvk file in the package.`); - static WARN_FileIsNotABinaryKvkFile = SevWarn | 0x0005; + static ERROR_FollowKeyboardVersionNotAllowedForModelPackages = SevError | 0x0006; static Error_FollowKeyboardVersionNotAllowedForModelPackages = () => m(this.ERROR_FollowKeyboardVersionNotAllowedForModelPackages, `FollowKeyboardVersion is not allowed in model packages`); - static ERROR_FollowKeyboardVersionNotAllowedForModelPackages = SevError | 0x0006; + static ERROR_FollowKeyboardVersionButNoKeyboards = SevError | 0x0007; static Error_FollowKeyboardVersionButNoKeyboards = () => m(this.ERROR_FollowKeyboardVersionButNoKeyboards, `FollowKeyboardVersion is set, but the package contains no keyboards`); - static ERROR_FollowKeyboardVersionButNoKeyboards = SevError | 0x0007; - static Error_KeyboardContentFileNotFound = (o:{id:string}) => m(this.ERROR_KeyboardContentFileNotFound, - `Keyboard ${o.id} was listed in but a corresponding .kmx file was not found in `); static ERROR_KeyboardContentFileNotFound = SevError | 0x0008; + static Error_KeyboardContentFileNotFound = (o:{id:string}) => m(this.ERROR_KeyboardContentFileNotFound, + `Keyboard ${def(o.id)} was listed in but a corresponding .kmx file was not found in `); - static Error_KeyboardFileNotValid = (o:{filename:string, e:any}) => m(this.ERROR_KeyboardFileNotValid, - `Keyboard file ${o.filename} is not a valid .kmx file: ${(o.e ?? 'unknown error').toString()}`); static ERROR_KeyboardFileNotValid = SevError | 0x0009; + static Error_KeyboardFileNotValid = (o:{filename:string, e:any}) => m(this.ERROR_KeyboardFileNotValid, + `Keyboard file ${def(o.filename)} is not a valid .kmx file: ${(o.e ?? 'unknown error').toString()}`); - static Info_KeyboardFileHasNoKeyboardVersion = (o:{filename:string}) => m(this.INFO_KeyboardFileHasNoKeyboardVersion, - `Keyboard file ${o.filename} has no &KeyboardVersion store, using default '0.0'`); static INFO_KeyboardFileHasNoKeyboardVersion = SevInfo | 0x000A; + static Info_KeyboardFileHasNoKeyboardVersion = (o:{filename:string}) => m(this.INFO_KeyboardFileHasNoKeyboardVersion, + `Keyboard file ${def(o.filename)} has no &KeyboardVersion store, using default '0.0'`); + static ERROR_PackageCannotContainBothModelsAndKeyboards = SevError | 0x000B; static Error_PackageCannotContainBothModelsAndKeyboards = () => m(this.ERROR_PackageCannotContainBothModelsAndKeyboards, `The package contains both lexical models and keyboards, which is not permitted.`); - static ERROR_PackageCannotContainBothModelsAndKeyboards = SevError | 0x000B; - static Hint_PackageShouldNotRepeatLanguages = (o:{resourceType: string, id: string, minimalTag: string, firstTag: string, secondTag: string}) => m(this.HINT_PackageShouldNotRepeatLanguages, - `Two language tags in ${o.resourceType} ${o.id}, '${o.firstTag}' and '${o.secondTag}', reduce to the same minimal tag '${o.minimalTag}'.`); static HINT_PackageShouldNotRepeatLanguages = SevHint | 0x000C; + static Hint_PackageShouldNotRepeatLanguages = (o:{resourceType: string, id: string, minimalTag: string, firstTag: string, secondTag: string}) => m(this.HINT_PackageShouldNotRepeatLanguages, + `Two language tags in ${def(o.resourceType)} ${def(o.id)}, '${def(o.firstTag)}' and '${def(o.secondTag)}', reduce to the same minimal tag '${def(o.minimalTag)}'.`); + static WARN_PackageNameDoesNotFollowLexicalModelConventions = SevWarn | 0x000D; static Warn_PackageNameDoesNotFollowLexicalModelConventions = (o:{filename: string}) => m(this.WARN_PackageNameDoesNotFollowLexicalModelConventions, - `The package file ${o.filename} does not follow the recommended model filename conventions. The name should be all lower case, `+ + `The package file ${def(o.filename)} does not follow the recommended model filename conventions. The name should be all lower case, `+ `include only alphanumeric characters and underscore (_), not start with a digit, and should have the structure `+ `...model.kps.`); - static WARN_PackageNameDoesNotFollowLexicalModelConventions = SevWarn | 0x000D; + static WARN_PackageNameDoesNotFollowKeyboardConventions = SevWarn | 0x000E; static Warn_PackageNameDoesNotFollowKeyboardConventions = (o:{filename: string}) => m(this.WARN_PackageNameDoesNotFollowKeyboardConventions, - `The package file ${o.filename} does not follow the recommended keyboard filename conventions. The name should be all lower case, `+ + `The package file ${def(o.filename)} does not follow the recommended keyboard filename conventions. The name should be all lower case, `+ `include only alphanumeric characters and underscore (_), and not start with a digit.`); - static WARN_PackageNameDoesNotFollowKeyboardConventions = SevWarn | 0x000E; + static WARN_FileInPackageDoesNotFollowFilenameConventions = SevWarn | 0x000F; static Warn_FileInPackageDoesNotFollowFilenameConventions = (o:{filename: string}) => m(this.WARN_FileInPackageDoesNotFollowFilenameConventions, - `The file ${o.filename} does not follow the recommended filename conventions. The extension should be all lower case, `+ + `The file ${def(o.filename)} does not follow the recommended filename conventions. The extension should be all lower case, `+ `and the filename should include only alphanumeric characters, -, _, + and .`); - static WARN_FileInPackageDoesNotFollowFilenameConventions = SevWarn | 0x000F; + static ERROR_PackageNameCannotBeBlank = SevError | 0x0010; static Error_PackageNameCannotBeBlank = () => m(this.ERROR_PackageNameCannotBeBlank, `Package name cannot be an empty string.`); - static ERROR_PackageNameCannotBeBlank = SevError | 0x0010; - static Error_KeyboardFileNotFound = (o:{filename:string}) => m(this.ERROR_KeyboardFileNotFound, - `Keyboard file ${o.filename} was not found. Has it been compiled?`); static ERROR_KeyboardFileNotFound = SevError | 0x0011; + static Error_KeyboardFileNotFound = (o:{filename:string}) => m(this.ERROR_KeyboardFileNotFound, + `Keyboard file ${def(o.filename)} was not found. Has it been compiled?`); - static Warn_KeyboardVersionsDoNotMatch = (o: {keyboard:string, version:string, firstKeyboard:string, firstVersion:string}) => m(this.WARN_KeyboardVersionsDoNotMatch, - `Keyboard ${o.keyboard} version ${o.version} does not match keyboard ${o.firstKeyboard} version ${o.firstVersion}.`); static WARN_KeyboardVersionsDoNotMatch = SevWarn | 0x0012; + static Warn_KeyboardVersionsDoNotMatch = (o: {keyboard:string, version:string, firstKeyboard:string, firstVersion:string}) => m(this.WARN_KeyboardVersionsDoNotMatch, + `Keyboard ${def(o.keyboard)} version ${def(o.version)} does not match keyboard ${def(o.firstKeyboard)} version ${def(o.firstVersion)}.`); // 0x0013 was WARN_KeyboardVersionsDoNotMatchPackageVersion - static Error_LanguageTagIsNotValid = (o: {resourceType: string, id:string, lang:string, e:any}) => m(this.ERROR_LanguageTagIsNotValid, - `Language tag '${o.lang}' in ${o.resourceType} ${o.id} is invalid.`); static ERROR_LanguageTagIsNotValid = SevError | 0x0014; + static Error_LanguageTagIsNotValid = (o: {resourceType: string, id:string, lang:string, e:any}) => m(this.ERROR_LanguageTagIsNotValid, + `Language tag '${def(o.lang)}' in ${def(o.resourceType)} ${def(o.id)} is invalid.`); - static Hint_LanguageTagIsNotMinimal = (o: {resourceType: string, id:string, actual:string, expected:string}) => m(this.HINT_LanguageTagIsNotMinimal, - `Language tag '${o.actual}' in ${o.resourceType} ${o.id} is not minimal, and should be '${o.expected}'.`); static HINT_LanguageTagIsNotMinimal = SevHint | 0x0015; + static Hint_LanguageTagIsNotMinimal = (o: {resourceType: string, id:string, actual:string, expected:string}) => m(this.HINT_LanguageTagIsNotMinimal, + `Language tag '${def(o.actual)}' in ${def(o.resourceType)} ${def(o.id)} is not minimal, and should be '${def(o.expected)}'.`); - static Error_ModelMustHaveAtLeastOneLanguage = (o:{id:string}) => m(this.ERROR_ModelMustHaveAtLeastOneLanguage, - `The lexical model ${o.id} must have at least one language specified.`); static ERROR_ModelMustHaveAtLeastOneLanguage = SevError | 0x0016; + static Error_ModelMustHaveAtLeastOneLanguage = (o:{id:string}) => m(this.ERROR_ModelMustHaveAtLeastOneLanguage, + `The lexical model ${def(o.id)} must have at least one language specified.`); - static Warn_RedistFileShouldNotBeInPackage = (o:{filename:string}) => m(this.WARN_RedistFileShouldNotBeInPackage, - `The Keyman system file '${o.filename}' should not be compiled into the package.`); static WARN_RedistFileShouldNotBeInPackage = SevWarn | 0x0017; + static Warn_RedistFileShouldNotBeInPackage = (o:{filename:string}) => m(this.WARN_RedistFileShouldNotBeInPackage, + `The Keyman system file '${def(o.filename)}' should not be compiled into the package.`); - static Warn_DocFileDangerous = (o:{filename:string}) => m(this.WARN_DocFileDangerous, - `Microsoft Word .doc or .docx files ('${o.filename}') are not portable. You should instead use HTML or PDF format.`); static WARN_DocFileDangerous = SevWarn | 0x0018; + static Warn_DocFileDangerous = (o:{filename:string}) => m(this.WARN_DocFileDangerous, + `Microsoft Word .doc or .docx files ('${def(o.filename)}') are not portable. You should instead use HTML or PDF format.`); + static ERROR_PackageMustContainAModelOrAKeyboard = SevError | 0x0019; static Error_PackageMustContainAModelOrAKeyboard = () => m(this.ERROR_PackageMustContainAModelOrAKeyboard, `Package must contain a lexical model or a keyboard.`); - static ERROR_PackageMustContainAModelOrAKeyboard = SevError | 0x0019; - static Warn_JsKeyboardFileIsMissing = (o:{id: string}) => m(this.WARN_JsKeyboardFileIsMissing, - `Keyboard ${o.id} targets touch devices but corresponding ${o.id}.js file is not in the package.`); static WARN_JsKeyboardFileIsMissing = SevWarn | 0x001A; + static Warn_JsKeyboardFileIsMissing = (o:{id: string}) => m(this.WARN_JsKeyboardFileIsMissing, + `Keyboard ${def(o.id)} targets touch devices but corresponding ${def(o.id)}.js file is not in the package.`); - static Warn_KeyboardShouldHaveAtLeastOneLanguage = (o:{id:string}) => m(this.WARN_KeyboardShouldHaveAtLeastOneLanguage, - `The keyboard ${o.id} should have at least one language specified.`); static WARN_KeyboardShouldHaveAtLeastOneLanguage = SevWarn | 0x001B; + static Warn_KeyboardShouldHaveAtLeastOneLanguage = (o:{id:string}) => m(this.WARN_KeyboardShouldHaveAtLeastOneLanguage, + `The keyboard ${def(o.id)} should have at least one language specified.`); - static Hint_JsKeyboardFileHasNoTouchTargets = (o:{id:string}) => m(this.HINT_JsKeyboardFileHasNoTouchTargets, - `The keyboard ${o.id} has been included for touch platforms, but does not include a touch layout.`); static HINT_JsKeyboardFileHasNoTouchTargets = SevHint | 0x001C; + static Hint_JsKeyboardFileHasNoTouchTargets = (o:{id:string}) => m(this.HINT_JsKeyboardFileHasNoTouchTargets, + `The keyboard ${def(o.id)} has been included for touch platforms, but does not include a touch layout.`); - static Hint_PackageContainsSourceFile = (o:{filename:string}) => m(this.HINT_PackageContainsSourceFile, - `The source file ${o.filename} should not be included in the package; instead include the compiled result.`); static HINT_PackageContainsSourceFile = SevHint | 0x001D; + static Hint_PackageContainsSourceFile = (o:{filename:string}) => m(this.HINT_PackageContainsSourceFile, + `The source file ${def(o.filename)} should not be included in the package; instead include the compiled result.`); + static ERROR_InvalidPackageFile = SevError | 0x001E; static Error_InvalidPackageFile = (o:{e:any}) => m(this.ERROR_InvalidPackageFile, `Package source file is invalid: ${(o.e ?? 'unknown error').toString()}`); - static ERROR_InvalidPackageFile = SevError | 0x001E; } diff --git a/developer/src/kmc/src/messages/infrastructureMessages.ts b/developer/src/kmc/src/messages/infrastructureMessages.ts index 0d8b0d76d2d..845cb0632f2 100644 --- a/developer/src/kmc/src/messages/infrastructureMessages.ts +++ b/developer/src/kmc/src/messages/infrastructureMessages.ts @@ -1,4 +1,4 @@ -import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageSpecWithException } from "@keymanapp/common-types"; +import { CompilerErrorNamespace, CompilerErrorSeverity, CompilerMessageSpec as m, CompilerMessageDef as def, CompilerMessageSpecWithException } from "@keymanapp/common-types"; const Namespace = CompilerErrorNamespace.Infrastructure; const SevInfo = CompilerErrorSeverity.Info | Namespace; @@ -8,108 +8,108 @@ const SevError = CompilerErrorSeverity.Error | Namespace; const SevFatal = CompilerErrorSeverity.Fatal | Namespace; export class InfrastructureMessages { - static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); static FATAL_UnexpectedException = SevFatal | 0x0001; + static Fatal_UnexpectedException = (o:{e: any}) => CompilerMessageSpecWithException(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); // For this message, we override the filename with the passed-in file. A bit of a hack but does the job - static Info_BuildingFile = (o:{filename:string,relativeFilename:string}) => ({filename:o.filename, ...m(this.INFO_BuildingFile, - `Building ${o.relativeFilename}`)}); static INFO_BuildingFile = SevInfo | 0x0002; + static Info_BuildingFile = (o:{filename:string,relativeFilename:string}) => ({filename:o.filename, ...m(this.INFO_BuildingFile, + `Building ${def(o.relativeFilename)}`)}); - static Error_FileDoesNotExist = (o:{filename:string}) => m(this.ERROR_FileDoesNotExist, - `File ${o.filename} does not exist`); static ERROR_FileDoesNotExist = SevError | 0x0003; + static Error_FileDoesNotExist = (o:{filename:string}) => m(this.ERROR_FileDoesNotExist, + `File ${def(o.filename)} does not exist`); - static Error_FileTypeNotRecognized = (o:{filename: string, extensions: string}) => m(this.ERROR_FileTypeNotRecognized, - `Unrecognised input file ${o.filename}, expecting ${o.extensions}, or project folder`); static ERROR_FileTypeNotRecognized = SevError | 0x0004; + static Error_FileTypeNotRecognized = (o:{filename: string, extensions: string}) => m(this.ERROR_FileTypeNotRecognized, + `Unrecognised input file ${def(o.filename)}, expecting ${def(o.extensions)}, or project folder`); + static ERROR_OutFileNotValidForProjects = SevError | 0x0005; static Error_OutFileNotValidForProjects = () => m(this.ERROR_OutFileNotValidForProjects, `--out-file should not be specified for project builds`); - static ERROR_OutFileNotValidForProjects = SevError | 0x0005; // For this message, we override the filename with the passed-in file. A bit of a hack but does the job - static Info_FileBuiltSuccessfully = (o:{filename:string,relativeFilename:string}) => ({filename:o.filename, ...m(this.INFO_FileBuiltSuccessfully, - `${o.relativeFilename} built successfully.`)}); static INFO_FileBuiltSuccessfully = SevInfo | 0x0006; + static Info_FileBuiltSuccessfully = (o:{filename:string,relativeFilename:string}) => ({filename:o.filename, ...m(this.INFO_FileBuiltSuccessfully, + `${def(o.relativeFilename)} built successfully.`)}); // For this message, we override the filename with the passed-in file. A bit of a hack but does the job - static Info_FileNotBuiltSuccessfully = (o:{filename:string,relativeFilename:string}) => ({filename:o.filename, ...m(this.INFO_FileNotBuiltSuccessfully, - `${o.relativeFilename} failed to build.`)}); static INFO_FileNotBuiltSuccessfully = SevInfo | 0x0007; + static Info_FileNotBuiltSuccessfully = (o:{filename:string,relativeFilename:string}) => ({filename:o.filename, ...m(this.INFO_FileNotBuiltSuccessfully, + `${def(o.relativeFilename)} failed to build.`)}); - static Error_InvalidProjectFile = (o:{message:string}) => m(this.ERROR_InvalidProjectFile, - `Project file is not valid: ${o.message}`); static ERROR_InvalidProjectFile = SevError | 0x0008; + static Error_InvalidProjectFile = (o:{message:string}) => m(this.ERROR_InvalidProjectFile, + `Project file is not valid: ${def(o.message)}`); - static Hint_FilenameHasDifferingCase = (o:{reference:string, filename:string}) => m(this.HINT_FilenameHasDifferingCase, - `File on disk '${o.filename}' does not match case of '${o.reference}' in source file; this is an error on platforms with case-sensitive filesystems.`); static HINT_FilenameHasDifferingCase = SevHint | 0x0009; + static Hint_FilenameHasDifferingCase = (o:{reference:string, filename:string}) => m(this.HINT_FilenameHasDifferingCase, + `File on disk '${def(o.filename)}' does not match case of '${def(o.reference)}' in source file; this is an error on platforms with case-sensitive filesystems.`); - static Error_UnknownFileFormat = (o:{format:string}) => m(this.ERROR_UnknownFileFormat, - `Unknown file format ${o.format}; only Markdown (.md), JSON (.json), and Text (.txt) are supported.`); static ERROR_UnknownFileFormat = SevError | 0x000A; + static Error_UnknownFileFormat = (o:{format:string}) => m(this.ERROR_UnknownFileFormat, + `Unknown file format ${def(o.format)}; only Markdown (.md), JSON (.json), and Text (.txt) are supported.`); // For this message, we override the filename with the passed-in file. A bit of a hack but does the job - static Info_ProjectBuiltSuccessfully = (o:{filename:string,relativeFilename:string}) => ({filename:o.filename, ...m(this.INFO_ProjectBuiltSuccessfully, - `Project ${o.relativeFilename} built successfully.`)}); static INFO_ProjectBuiltSuccessfully = SevInfo | 0x000B; + static Info_ProjectBuiltSuccessfully = (o:{filename:string,relativeFilename:string}) => ({filename:o.filename, ...m(this.INFO_ProjectBuiltSuccessfully, + `Project ${def(o.relativeFilename)} built successfully.`)}); // For this message, we override the filename with the passed-in file. A bit of a hack but does the job - static Info_ProjectNotBuiltSuccessfully = (o:{filename:string,relativeFilename:string}) => ({filename:o.filename, ...m(this.INFO_ProjectNotBuiltSuccessfully, - `Project ${o.relativeFilename} failed to build.`)}); static INFO_ProjectNotBuiltSuccessfully = SevInfo | 0x000C; + static Info_ProjectNotBuiltSuccessfully = (o:{filename:string,relativeFilename:string}) => ({filename:o.filename, ...m(this.INFO_ProjectNotBuiltSuccessfully, + `Project ${def(o.relativeFilename)} failed to build.`)}); - static Info_TooManyMessages = (o:{count:number}) => m(this.INFO_TooManyMessages, - `More than ${o.count} warnings or errors received; suppressing further messages.`); static INFO_TooManyMessages = SevInfo | 0x000D; + static Info_TooManyMessages = (o:{count:number}) => m(this.INFO_TooManyMessages, + `More than ${def(o.count)} warnings or errors received; suppressing further messages.`); - static Error_FileTypeNotFound = (o:{ext:string}) => m(this.ERROR_FileTypeNotFound, - `A file of type ${o.ext} was not found in the project.`); static ERROR_FileTypeNotFound = SevError | 0x000E; + static Error_FileTypeNotFound = (o:{ext:string}) => m(this.ERROR_FileTypeNotFound, + `A file of type ${def(o.ext)} was not found in the project.`); - static Error_NotAProjectFile = (o:{filename:string}) => m(this.ERROR_NotAProjectFile, - `File ${o.filename} must have a .kpj extension to be treated as a project.`); static ERROR_NotAProjectFile = SevError | 0x000F; + static Error_NotAProjectFile = (o:{filename:string}) => m(this.ERROR_NotAProjectFile, + `File ${def(o.filename)} must have a .kpj extension to be treated as a project.`); + static INFO_WarningsHaveFailedBuild = SevInfo | 0x0010; static Info_WarningsHaveFailedBuild = () => m(this.INFO_WarningsHaveFailedBuild, `The build failed because option "treat warnings as errors" is enabled and there are one or more warnings.`); - static INFO_WarningsHaveFailedBuild = SevInfo | 0x0010; - static Error_CannotCreateFolder = (o:{folderName:string, e: any}) => CompilerMessageSpecWithException(this.ERROR_CannotCreateFolder, null, - `Unable to create folder ${o.folderName}: ${o.e ?? 'unknown error'}`); static ERROR_CannotCreateFolder = SevError | 0x0011; + static Error_CannotCreateFolder = (o:{folderName:string, e: any}) => CompilerMessageSpecWithException(this.ERROR_CannotCreateFolder, null, + `Unable to create folder ${def(o.folderName)}: ${o.e ?? 'unknown error'}`); - static Error_InvalidProjectFolder = (o:{folderName:string}) => m(this.ERROR_InvalidProjectFolder, - `The folder ${o.folderName} does not appear to be a Keyman Developer project.`); static ERROR_InvalidProjectFolder = SevError | 0x0012; + static Error_InvalidProjectFolder = (o:{folderName:string}) => m(this.ERROR_InvalidProjectFolder, + `The folder ${def(o.folderName)} does not appear to be a Keyman Developer project.`); - static Error_UnsupportedProjectVersion = (o:{version:string}) => m(this.ERROR_UnsupportedProjectVersion, - `Project version ${o.version} is not supported by this version of Keyman Developer.`); static ERROR_UnsupportedProjectVersion = SevError | 0x0013; + static Error_UnsupportedProjectVersion = (o:{version:string}) => m(this.ERROR_UnsupportedProjectVersion, + `Project version ${def(o.version)} is not supported by this version of Keyman Developer.`); + static HINT_ProjectIsVersion10 = SevHint | 0x0014; static Hint_ProjectIsVersion10 = () => m(this.HINT_ProjectIsVersion10, `The project file is an older version and can be upgraded to version 17.0`); - static HINT_ProjectIsVersion10 = SevHint | 0x0014; + static ERROR_OutFileCanOnlyBeSpecifiedWithSingleInfile = SevError | 0x0015; static Error_OutFileCanOnlyBeSpecifiedWithSingleInfile = () => m(this.ERROR_OutFileCanOnlyBeSpecifiedWithSingleInfile, `Parameter --out-file can only be used with a single input file.`); - static ERROR_OutFileCanOnlyBeSpecifiedWithSingleInfile = SevError | 0x0015; - static Error_InvalidMessageFormat = (o:{message:string}) => m(this.ERROR_InvalidMessageFormat, - `Invalid parameter: --message ${o.message} must match format '[KM]#####[:Disable|Info|Hint|Warn|Error]'`); static ERROR_InvalidMessageFormat = SevError | 0x0016; + static Error_InvalidMessageFormat = (o:{message:string}) => m(this.ERROR_InvalidMessageFormat, + `Invalid parameter: --message ${def(o.message)} must match format '[KM]#####[:Disable|Info|Hint|Warn|Error]'`); - static Error_MessageNamespaceNotFound = (o:{code: number}) => m(this.ERROR_MessageNamespaceNotFound, - `Invalid parameter: --message KM${o.code?.toString(16)} does not have a recognized namespace`); static ERROR_MessageNamespaceNotFound = SevError | 0x0017; + static Error_MessageNamespaceNotFound = (o:{code: number}) => m(this.ERROR_MessageNamespaceNotFound, + `Invalid parameter: --message KM${def(o.code?.toString(16))} does not have a recognized namespace`); - static Error_MessageCodeNotFound = (o:{code: number}) => m(this.ERROR_MessageCodeNotFound, - `Invalid parameter: --message KM${o.code?.toString(16)} is not a recognized code`); static ERROR_MessageCodeNotFound = SevError | 0x0018; + static Error_MessageCodeNotFound = (o:{code: number}) => m(this.ERROR_MessageCodeNotFound, + `Invalid parameter: --message KM${def(o.code?.toString(16))} is not a recognized code`); - static Error_MessageCannotBeCoerced = (o:{code: number}) => m(this.ERROR_MessageCannotBeCoerced, - `Invalid parameter: --message KM${o.code?.toString(16)} is not a info, hint or warn message type and cannot be coerced`); static ERROR_MessageCannotBeCoerced = SevError | 0x0019; + static Error_MessageCannotBeCoerced = (o:{code: number}) => m(this.ERROR_MessageCannotBeCoerced, + `Invalid parameter: --message KM${def(o.code?.toString(16))} is not a info, hint or warn message type and cannot be coerced`); } From 664b5e0d542f7f492d3aef253bb1b62f39a10ded Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Wed, 28 Feb 2024 10:15:45 +0100 Subject: [PATCH 159/171] Update linux/help/about/whatsnew.md Co-authored-by: Darcy Wong --- linux/help/about/whatsnew.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/help/about/whatsnew.md b/linux/help/about/whatsnew.md index a6ea5095be3..5d786c5fe99 100644 --- a/linux/help/about/whatsnew.md +++ b/linux/help/about/whatsnew.md @@ -9,7 +9,7 @@ Here are some of the new features we have added to Keyman for Linux 17.0: Previously the full functionality only worked with the X11 display server. - Slightly modified the UI of `km-config`. The new _Options_ tab allows to disable automatic error reporting to keyman.com. -- Added Mon localization. +- Added Mon localization ([#9550](https://github.com/keymanapp/keyman/pull/9550)). - It is now possible to specify an arbitrary language tag when installing a keyboard package from the command line ([#8598](https://github.com/keymanapp/keyman/issues/8598)). Previously this only worked for the language tags listed in the From ef2a78610e39ae7ac6ee9e56fbafa4229c15caab Mon Sep 17 00:00:00 2001 From: Darcy Wong Date: Wed, 28 Feb 2024 21:26:00 +0700 Subject: [PATCH 160/171] Update android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java Co-authored-by: Joshua Horton --- .../src/main/java/com/keyman/engine/KMKeyboardJSHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java index 70deb91dd77..b85353e2e16 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboardJSHandler.java @@ -294,7 +294,7 @@ private static void performLeftDeletions(InputConnection ic, int dn) { KMLog.LogException(TAG, KMString.format("Bad subSequence of start %d, end is %d, length %d, dn %d, numPairs %d", start, end, charsBackup.length(), dn, numPairs), e); - expectedChars = charsBackup; + expectedChars = ""; } ic.deleteSurroundingText(dn + numPairs, 0); CharSequence newContext = getCharacterSequence(ic, originalBufferLength - 2*dn); From 973af61495ea0def240f28a1ebed2292bea0733d Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Wed, 28 Feb 2024 17:56:37 +0100 Subject: [PATCH 161/171] fix(linux): Fix libkeymancore-dev dependencies This change adds `libicu-dev` as a dependency for `libkeymancore-dev`. While it is possible to dynamically build without ICU it is required when doing a static build. Closes #10864 and [Debian bug #1064915]( https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1064915). --- linux/debian/changelog | 6 ++++ linux/debian/control | 1 + linux/debian/tests/control | 1 - linux/debian/tests/test-build | 56 +++++++++++++++++++++++++++++++---- 4 files changed, 57 insertions(+), 7 deletions(-) mode change 100644 => 100755 linux/debian/tests/test-build diff --git a/linux/debian/changelog b/linux/debian/changelog index ae731603dc8..59c20d7c90f 100644 --- a/linux/debian/changelog +++ b/linux/debian/changelog @@ -1,3 +1,9 @@ +keyman (17.0.274-2) UNRELEASED; urgency=medium + + * Add libicu-dev dependency to libkeymancore-dev (closes: #1064915) + + -- Eberhard Beilharz Wed, 28 Feb 2024 17:54:58 +0100 + keyman (17.0.274-1) unstable; urgency=medium * Fix autopkg tests diff --git a/linux/debian/control b/linux/debian/control index 5e4ca9870c2..ff457d8473d 100644 --- a/linux/debian/control +++ b/linux/debian/control @@ -111,6 +111,7 @@ Package: libkeymancore-dev Architecture: amd64 arm64 armel armhf i386 loong64 mipsel mips64el ppc64el riscv64 Section: libdevel Depends: + libicu-dev, libkeymancore1 (= ${binary:Version}), ${misc:Depends}, Conflicts: libkmnkbp-dev diff --git a/linux/debian/tests/control b/linux/debian/tests/control index 0a939f73743..71c228c089e 100644 --- a/linux/debian/tests/control +++ b/linux/debian/tests/control @@ -1,6 +1,5 @@ Tests: test-build Depends: @, build-essential, - libicu-dev, pkg-config, Architecture: amd64 arm64 armel armhf i386 loong64 mips64el mipsel ppc64el riscv64 diff --git a/linux/debian/tests/test-build b/linux/debian/tests/test-build old mode 100644 new mode 100755 index 22ff42a2efb..9a48325793c --- a/linux/debian/tests/test-build +++ b/linux/debian/tests/test-build @@ -6,25 +6,69 @@ set -e WORKDIR=$(mktemp -d) -trap "rm -rf $WORKDIR" 0 INT QUIT ABRT PIPE TERM -cd "$WORKDIR" +# shellcheck disable=SC2064 +trap "rm -rf ${WORKDIR}" 0 INT QUIT ABRT PIPE TERM +cd "${WORKDIR}" +# # Test all include files are available cat < keymantest.c #include -km_core_actions* c; +km_core_actions* a; EOF -# shellcheck disable=SC2046 +# shellcheck disable=SC2046 disable=SC2312 gcc -c keymantest.c $(pkg-config --cflags --libs keyman_core) echo "build 1: OK" +# # Test pkg-config file - include without path cat < keymantest.c #include -km_core_actions* c; +km_core_actions* a; EOF -# shellcheck disable=SC2046 +# shellcheck disable=SC2046 disable=SC2312 gcc -c keymantest.c $(pkg-config --cflags --libs keyman_core) echo "build 2: OK" + +# +# Test dynamic linking +cat < keymantest.c +#include + +int main(int argc, char *argv[]) { + km_core_option_item opts[] = {KM_CORE_OPTIONS_END}; + km_core_keyboard *kb = NULL; + km_core_state *state = NULL; + km_core_keyboard_load(NULL, &kb); + km_core_state_create(kb, opts, &state); + km_core_actions const *a = km_core_state_get_actions(state); +} +EOF + +# shellcheck disable=SC2046 disable=SC2312 +g++ keymantest.c $(pkg-config --cflags --libs keyman_core) +echo "build 3: OK" + +# It would be nice to test static linking, but that results in a warning +# which causes autopkgtest to report the tests as FAILED. See #10882. +# # +# # Test static linking +# cat < keymantest.c +# #include + +# int main(int argc, char *argv[]) { +# km_core_option_item opts[] = {KM_CORE_OPTIONS_END}; +# km_core_keyboard *kb = NULL; +# km_core_state *state = NULL; +# km_core_keyboard_load(NULL, &kb); +# km_core_state_create(kb, opts, &state); +# km_core_actions const *a = km_core_state_get_actions(state); +# } +# EOF + +# # shellcheck disable=SC2046 disable=SC2312 +# g++ keymantest.c -static $(pkg-config --cflags --libs keyman_core) \ +# $(pkg-config --cflags --libs icu-uc) $(pkg-config --cflags --libs icu-i18n) +# echo "build 4: OK" From 5da309630a857812ed4bcb3a6d910b92c0b5eed0 Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Wed, 28 Feb 2024 13:04:21 -0500 Subject: [PATCH 162/171] auto: increment beta version to 17.0.279 --- HISTORY.md | 7 +++++++ VERSION.md | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 0807c6a8e51..f4a3f99c0ba 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,12 @@ # Keyman Version History +## 17.0.278 beta 2024-02-28 + +* docs(linux): Updated whatsnew for Keyman for Linux 17 (#10858) +* (#10869) +* chore(android/engine): Reduce toast notifications after installations (#10868) +* fix(android/engine): Check selection indexes (#10857) + ## 17.0.277 beta 2024-02-27 * fix(developer): exit kmc test data if any failure messages occurred (#10805) diff --git a/VERSION.md b/VERSION.md index 380fa5a22fe..0c8c2d956b2 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.278 \ No newline at end of file +17.0.279 \ No newline at end of file From e7776b74a7cbbfe8be08d5d9ef577508f08bb632 Mon Sep 17 00:00:00 2001 From: rc-swag <58423624+rc-swag@users.noreply.github.com> Date: Thu, 29 Feb 2024 09:05:47 +1000 Subject: [PATCH 163/171] feat(windows): oops checkin in new system-main-pas --- .../main/Keyman.Configuration.System.Main.pas | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 windows/src/desktop/kmshell/main/Keyman.Configuration.System.Main.pas diff --git a/windows/src/desktop/kmshell/main/Keyman.Configuration.System.Main.pas b/windows/src/desktop/kmshell/main/Keyman.Configuration.System.Main.pas new file mode 100644 index 00000000000..f03c74cfd1b --- /dev/null +++ b/windows/src/desktop/kmshell/main/Keyman.Configuration.System.Main.pas @@ -0,0 +1,56 @@ +unit Keyman.Configuration.System.Main; + +interface + +uses + comobj, + Forms, + SysUtils, + ActiveX, + + Keyman.System.CEFManager, + + Keyman.System.KeymanSentryClient, + Sentry.Client, + Sentry.Client.Vcl, + Keyman.Configuration.System.UmodWebHttpServer, + initprog; + +procedure RunKeymanConfiguration; + +implementation + +const + LOGGER_DESKTOP_KMSHELL = TKeymanSentryClient.LOGGER_DESKTOP + '.kmshell'; + +procedure RunKeymanConfiguration; +begin + TKeymanSentryClient.Start(TSentryClientVcl, kscpDesktop, LOGGER_DESKTOP_KMSHELL, LoadKeymanDesktopSentryFlags); + try + CoInitFlags := COINIT_APARTMENTTHREADED; + FInitializeCEF := TCEFManager.Create; + try + if FInitializeCEF.Start then + try + Application.Initialize; + Application.Title := 'Keyman Configuration'; + Application.CreateForm(TmodWebHttpServer, modWebHttpServer); + try + Run; + finally + FreeAndNil(modWebHttpServer); + end; + except + on E:Exception do + SentryHandleException(E); + end; + finally + FInitializeCEF.Free; + end; + finally + TKeymanSentryClient.Stop; + end; +end; + + +end. From f4328866b7879765870ff1096fd3791dad732d5d Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Wed, 28 Feb 2024 17:22:30 -0600 Subject: [PATCH 164/171] fix(resources): patch to bn.xml data --- .../standards-data/ldml-keyboards/techpreview/3.0/bn.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/standards-data/ldml-keyboards/techpreview/3.0/bn.xml b/resources/standards-data/ldml-keyboards/techpreview/3.0/bn.xml index 88f897ff4dc..e9260520672 100644 --- a/resources/standards-data/ldml-keyboards/techpreview/3.0/bn.xml +++ b/resources/standards-data/ldml-keyboards/techpreview/3.0/bn.xml @@ -34,7 +34,7 @@ - + @@ -101,7 +101,7 @@ - + @@ -109,7 +109,7 @@ - + From 7ed5ae407daca82e31e0ddcc0b43a150fd9c8a5b Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Thu, 29 Feb 2024 08:49:00 +0700 Subject: [PATCH 165/171] fix(android): selection range indexing --- .../java/com/keyman/engine/KMKeyboard.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java index d17c3316971..8a477a644b0 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java @@ -17,6 +17,7 @@ import com.keyman.engine.KMManager.KeyboardType; import com.keyman.engine.KeyboardEventHandler.EventType; import com.keyman.engine.KeyboardEventHandler.OnKeyboardEventListener; +import com.keyman.engine.util.CharSequenceUtil; import com.keyman.engine.util.DependencyUtil; import com.keyman.engine.util.DependencyUtil.LibraryType; import com.keyman.engine.util.FileUtils; @@ -167,9 +168,29 @@ protected boolean updateSelectionRange(int selStart, int selEnd) { InputConnection ic = KMManager.getInputConnection(this.keyboardType); if (ic != null) { ExtractedText icText = ic.getExtractedText(new ExtractedTextRequest(), 0); + String rawText = icText.text.toString(); if (icText != null) { - updateText(icText.text.toString()); + updateText(rawText.toString()); } + + /* + The values of selStart & selEnd provided by the system are in code units, + not code-points. We need to account for surrogate pairs here. + + Fortunately, it uses UCS-2 encoding... just like JS. + + References: + - https://stackoverflow.com/a/23980211 + - https://android.googlesource.com/platform/frameworks/base/+/152944f/core/java/android/view/inputmethod/InputConnection.java#326 + */ + + // Count the number of characters which are surrogate pairs. + int pairsAtStart = CharSequenceUtil.countSurrogatePairs(rawText.substring(0, selStart), rawText.length()); + String selectedText = rawText.substring(selStart, selEnd); + int pairsSelected = CharSequenceUtil.countSurrogatePairs(selectedText, selectedText.length()); + + selStart -= pairsAtStart; + selEnd -= (pairsAtStart + pairsSelected); } this.loadJavascript(KMString.format("updateKMSelectionRange(%d,%d)", selStart, selEnd)); result = true; From 5062bbad984760a40e5ee3d012b65d54d805db1d Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Thu, 29 Feb 2024 11:05:27 +0700 Subject: [PATCH 166/171] feat(developer): adds kmc message command Realtes to #10207. Adds a new `kmc message` command which prints detailed information about any or all compiler messages, in JSON, text, or markdown formats. Markdown format is emitted to file in a structured way to be deployed to the help site automatically (coming in a subsequent commit). --- developer/src/common/web/utils/index.ts | 1 + .../src/common/web/utils/src/markdown.ts | 21 ++ .../src/osk-character-use/index.ts | 18 +- .../src/keyboard-info-compiler-messages.ts | 2 +- .../src/keyboard-info-compiler.ts | 2 +- .../test-keyboard-info-compiler-messages.ts | 10 + .../src/compiler/kmn-compiler-messages.ts | 7 +- .../src/model-info-compiler-messages.ts | 2 +- .../kmc-model-info/src/model-info-compiler.ts | 2 +- .../test/test-model-info-compiler-messages.ts | 10 + .../src/kmc/src/commands/messageCommand.ts | 290 ++++++++++++++++++ developer/src/kmc/src/kmc.ts | 2 + .../src/messages/infrastructureMessages.ts | 25 ++ .../src/kmc/src/messages/messageNamespaces.ts | 21 +- .../kmc/src/util/extendedCompilerOptions.ts | 55 ++-- 15 files changed, 424 insertions(+), 44 deletions(-) create mode 100644 developer/src/common/web/utils/src/markdown.ts create mode 100644 developer/src/kmc-keyboard-info/test/test-keyboard-info-compiler-messages.ts create mode 100644 developer/src/kmc-model-info/test/test-model-info-compiler-messages.ts create mode 100644 developer/src/kmc/src/commands/messageCommand.ts diff --git a/developer/src/common/web/utils/index.ts b/developer/src/common/web/utils/index.ts index 0241bd068c8..08836a2f5c9 100644 --- a/developer/src/common/web/utils/index.ts +++ b/developer/src/common/web/utils/index.ts @@ -2,3 +2,4 @@ export { validateMITLicense } from './src/validate-mit-license.js'; export { KeymanSentry } from './src/KeymanSentry.js'; export { getOption, loadOptions, clearOptions } from './src/options.js'; export * as Osk from './src/osk.js'; +export { escapeMarkdownChar } from './src/markdown.js'; diff --git a/developer/src/common/web/utils/src/markdown.ts b/developer/src/common/web/utils/src/markdown.ts new file mode 100644 index 00000000000..0f08e044e69 --- /dev/null +++ b/developer/src/common/web/utils/src/markdown.ts @@ -0,0 +1,21 @@ + +export function escapeMarkdownChar(s: string, whiteSpace: boolean) { + // note: could replace with a common lib but too much baggage to be worth it for now + // commonmark 2.4: all punct can be escaped + // const punct = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'; + // Per ParsedownExtra https://github.com/erusev/parsedown/blob/f5aa6fd1caf5ffb41af2e85d3ef1a51263a31545/Parsedown.php#L1964 + // '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', '~' + // and add < for start of HTML tag (hyphen moved to end to prevent range match!) + s = s.replace(/&/g, '&').replace(//g, '>'); + s = s.replace(/[\\`*_{}\[\]()#+.!|~-]/g, '\\$&'); + // Per commonmark: s = s.replace(/[!"#$%&'()*+,-./:;<=>?@\[\\\]^_`{|}~]/g, '\\$&'); + if(whiteSpace) { + // replace whitepsace + s = s.replace(/[\n]/g, '\\n'); + s = s.replace(/[\r]/g, '\\r'); + s = s.replace(/[\t]/g, '\\t'); + s = s.replace(/ /g, ' '); + s = s.replace(/\u00a0/g, ' '); + } + return s; +} diff --git a/developer/src/kmc-analyze/src/osk-character-use/index.ts b/developer/src/kmc-analyze/src/osk-character-use/index.ts index 7ad1a76e563..64a496f65bd 100644 --- a/developer/src/kmc-analyze/src/osk-character-use/index.ts +++ b/developer/src/kmc-analyze/src/osk-character-use/index.ts @@ -1,6 +1,6 @@ import { CompilerCallbacks, KeymanFileTypes, KvksFile, KvksFileReader, TouchLayout, TouchLayoutFileReader } from "@keymanapp/common-types"; import { CompilerMessages } from '@keymanapp/kmc-kmn'; -import { Osk } from '@keymanapp/developer-utils'; +import { escapeMarkdownChar, Osk } from '@keymanapp/developer-utils'; import { getOskFromKmnFile } from "../util/get-osk-from-kmn-file.js"; import { AnalyzerMessages } from "../messages.js"; @@ -303,7 +303,7 @@ export class AnalyzeOskCharacterUse { lines.push('-------|-------------|---------'); for(let s of strings) { const ux = this.stringToUnicodeSequence(s.str); - lines.push('U+'+s.pua + ' | ' + ux + ' | ' + this.escapeMarkdownChar(s.str)); + lines.push('U+'+s.pua + ' | ' + ux + ' | ' + escapeMarkdownChar(s.str, true)); } return lines; } @@ -314,20 +314,6 @@ export class AnalyzeOskCharacterUse { return JSON.stringify(map, null, 2).split('\n'); } - private static escapeMarkdownChar(s: string) { - // note: could replace with a common lib but too much baggage to be worth it for now - // commonmark 2.4: all punct can be escaped - // const punct = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'; - s = s.replace(/[!"#$%&'()*+,-./:;<=>?@\[\\\]^_`{|}~]/g, '\\$0'); - // replace whitepsace - s = s.replace(/[\n]/g, '\\n'); - s = s.replace(/[\r]/g, '\\r'); - s = s.replace(/[\t]/g, '\\t'); - s = s.replace(/ /g, ' '); - s = s.replace(/\u00a0/g, ' '); - return s; - } - private static stringToUnicodeSequence(s: string, addUPlusPrefix: boolean = true): string { let result = []; for(let ch of s) { diff --git a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts index bd9e911e51c..192dc76970a 100644 --- a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts +++ b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler-messages.ts @@ -27,7 +27,7 @@ export class KeyboardInfoCompilerMessages { `Invalid author email: ${def(o.email)}`); static ERROR_LicenseFileIsMissing = SevError | 0x0006; - static Error_LicenseFileDoesNotExist = (o:{filename:string}) => m(this.ERROR_LicenseFileIsMissing, + static Error_LicenseFileIsMissing = (o:{filename:string}) => m(this.ERROR_LicenseFileIsMissing, `License file ${def(o.filename)} does not exist.`); static ERROR_LicenseFileIsDamaged = SevError | 0x0007; diff --git a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler.ts b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler.ts index d6a9842f7ff..fdee45599b7 100644 --- a/developer/src/kmc-keyboard-info/src/keyboard-info-compiler.ts +++ b/developer/src/kmc-keyboard-info/src/keyboard-info-compiler.ts @@ -374,7 +374,7 @@ export class KeyboardInfoCompiler implements KeymanCompiler { private isLicenseMIT(filename: string) { const data = this.callbacks.loadFile(filename); if(!data) { - this.callbacks.reportMessage(KeyboardInfoCompilerMessages.Error_LicenseFileDoesNotExist({filename})); + this.callbacks.reportMessage(KeyboardInfoCompilerMessages.Error_LicenseFileIsMissing({filename})); return false; } diff --git a/developer/src/kmc-keyboard-info/test/test-keyboard-info-compiler-messages.ts b/developer/src/kmc-keyboard-info/test/test-keyboard-info-compiler-messages.ts new file mode 100644 index 00000000000..28fe5713546 --- /dev/null +++ b/developer/src/kmc-keyboard-info/test/test-keyboard-info-compiler-messages.ts @@ -0,0 +1,10 @@ +import 'mocha'; +import { KeyboardInfoCompilerMessages } from '../src/keyboard-info-compiler-messages.js'; +import { verifyCompilerMessagesObject } from '@keymanapp/developer-test-helpers'; +import { CompilerErrorNamespace } from '@keymanapp/common-types'; + +describe('KeyboardInfoCompilerMessages', function () { + it('should have a valid KeyboardInfoCompilerMessages object', function() { + return verifyCompilerMessagesObject(KeyboardInfoCompilerMessages, CompilerErrorNamespace.KeyboardInfoCompiler); + }); +}); diff --git a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts index 508be66297a..3e42b91240a 100644 --- a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts @@ -84,7 +84,7 @@ export class KmnCompilerMessages { this.FATAL_UnexpectedException, null, o.e ?? 'unknown error', - `Raised when KmnCompiler or one of its components hasan internal + `Raised when KmnCompiler or one of its components has an internal error. If you experience this error, it should be reported to the Keyman team for resolution via https://github.com/keymanapp/keyman/issues/new.` ); @@ -94,7 +94,7 @@ export class KmnCompilerMessages { this.FATAL_MissingWasmModule, `Could not instantiate WASM compiler module or initialization failed`, o.e ?? 'unknown error', - `Raised when the kmcmplib component could be instantiated. This may indicate + `Raised when the kmcmplib component could not be instantiated. This may indicate a configuration or dependency issue. Make sure you are running a Javascript engine that supports WASM, and that use of WASM is enabled.` ); @@ -203,7 +203,8 @@ export class KmnCompilerMessages { ); static ERROR_FileNotFound = SevError | 0x90C; - static Error_FileNotFound = (o:{filename: string}) => m(this.ERROR_FileNotFound, + static Error_FileNotFound = (o:{filename: string}) => m( + this.ERROR_FileNotFound, `File ${def(o.filename)} was not found`, `The file was not found on the disk. Verify that you have the correct path to the file.` diff --git a/developer/src/kmc-model-info/src/model-info-compiler-messages.ts b/developer/src/kmc-model-info/src/model-info-compiler-messages.ts index 1736630d3df..1799ab2e5b6 100644 --- a/developer/src/kmc-model-info/src/model-info-compiler-messages.ts +++ b/developer/src/kmc-model-info/src/model-info-compiler-messages.ts @@ -27,7 +27,7 @@ export class ModelInfoCompilerMessages { `Invalid author email: ${def(o.email)}`); static ERROR_LicenseFileIsMissing = SevError | 0x0006; - static Error_LicenseFileDoesNotExist = (o:{filename:string}) => m(this.ERROR_LicenseFileIsMissing, + static Error_LicenseFileIsMissing = (o:{filename:string}) => m(this.ERROR_LicenseFileIsMissing, `License file ${def(o.filename)} does not exist.`); static ERROR_LicenseFileIsDamaged = SevError | 0x0007; diff --git a/developer/src/kmc-model-info/src/model-info-compiler.ts b/developer/src/kmc-model-info/src/model-info-compiler.ts index 1a973ca3515..68ea924e15b 100644 --- a/developer/src/kmc-model-info/src/model-info-compiler.ts +++ b/developer/src/kmc-model-info/src/model-info-compiler.ts @@ -213,7 +213,7 @@ export class ModelInfoCompiler implements KeymanCompiler { private isLicenseMIT(filename: string) { const data = this.callbacks.loadFile(filename); if(!data) { - this.callbacks.reportMessage(ModelInfoCompilerMessages.Error_LicenseFileDoesNotExist({filename})); + this.callbacks.reportMessage(ModelInfoCompilerMessages.Error_LicenseFileIsMissing({filename})); return false; } diff --git a/developer/src/kmc-model-info/test/test-model-info-compiler-messages.ts b/developer/src/kmc-model-info/test/test-model-info-compiler-messages.ts new file mode 100644 index 00000000000..4dd1de538f3 --- /dev/null +++ b/developer/src/kmc-model-info/test/test-model-info-compiler-messages.ts @@ -0,0 +1,10 @@ +import 'mocha'; +import { ModelInfoCompilerMessages } from '../src/model-info-compiler-messages.js'; +import { verifyCompilerMessagesObject } from '@keymanapp/developer-test-helpers'; +import { CompilerErrorNamespace } from '@keymanapp/common-types'; + +describe('ModelInfoCompilerMessages', function () { + it('should have a valid ModelInfoCompilerMessages object', function() { + return verifyCompilerMessagesObject(ModelInfoCompilerMessages, CompilerErrorNamespace.ModelInfoCompiler); + }); +}); diff --git a/developer/src/kmc/src/commands/messageCommand.ts b/developer/src/kmc/src/commands/messageCommand.ts new file mode 100644 index 00000000000..9dbf5907a5f --- /dev/null +++ b/developer/src/kmc/src/commands/messageCommand.ts @@ -0,0 +1,290 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +import { CompilerBaseOptions, CompilerCallbacks, CompilerError, CompilerErrorNamespace, CompilerEvent } from '@keymanapp/common-types'; +import { Command, Option } from 'commander'; +import { CompilerMessageSource, messageNamespaceKeys, messageSources } from '../messages/messageNamespaces.js'; +import { NodeCompilerCallbacks } from '../util/NodeCompilerCallbacks.js'; +import { exitProcess } from '../util/sysexits.js'; +import { InfrastructureMessages } from '../messages/infrastructureMessages.js'; +import { CompilerMessageDetail, findMessageDetails } from '../util/extendedCompilerOptions.js'; +import { escapeMarkdownChar } from '@keymanapp/developer-utils'; + +type MessageFormat = 'text'|'markdown'|'json'; + +interface MessageOptions extends CompilerBaseOptions { + /** + * Output format + */ + format?: MessageFormat; + /** + * Output path, which must exist + */ + outPath?: string; + /** + * Emit descriptions for all messages + */ + allMessages?: boolean; +}; + +export function declareMessage(program: Command) { + program + .command('message [messages...]') + .description(`Describe one or more compiler messages. Note: Markdown format is always written to files on disk.`) + .addOption(new Option('-f, --format ', 'Output format').choices(['text', 'markdown', 'json']).default('text')) + .option('-o, --out-path ', 'Output path for Markdown files; output filename for text and json formats') + .option('-a, --all-messages', 'Emit descriptions for all messages (text, json)') + .action(messageCommand); +} + +async function messageCommand(messages: string[], _options: any, commander: any) { + const commanderOptions = commander.optsWithGlobals(); + const options = initialize(commanderOptions); + if(!options) { + await exitProcess(1); + } + const callbacks = new NodeCompilerCallbacks(options); + + let result: boolean = false; + + if(options.format == 'markdown') { + result = messageCommandMarkdown(messages, options, callbacks); + } else { // json or text format + if(messages.length == 0 && !options.allMessages) { + console.error('Must specify at least one message code or -a for all messages'); + callbacks.reportMessage(InfrastructureMessages.Error_MustSpecifyMessageCode()) + await exitProcess(1); + } + + const messageDetails = messages.length + ? messages.map(message => translateMessageInputToCode(message, callbacks)) + : allMessageDetails(); + + if(callbacks.messageCount > 0) { + await exitProcess(1); + } + + let text: string = null; + + if(options.format == 'json') { + const data = getMessagesAsArrayForJson(messageDetails); + if(data) { + text = JSON.stringify(data, null, 2); + } + } else { + text = getMessagesAsText(messageDetails); + } + + result = text != null; + if(result) { + if(options.outPath) { + fs.writeFileSync(options.outPath, text, 'utf-8'); + } else { + process.stdout.write(text); + } + } + } + + if(!result) { + await exitProcess(1); + } +} + +// We have a redirect pattern for https://help.keyman.com/go/km<#####> to +// the corresponding compiler message reference document in +// /developer/latest-version/reference/errors/km<#####> +const helpUrl = (code:any) => `https://help.keyman.com/go/${CompilerError.formatCode(code).toLowerCase()}`; +const getModuleName = (ms: CompilerMessageSource) => `${ms.module}.${ms.class.name}`; + +function translateMessageInputToCode(message: string, callbacks: CompilerCallbacks): CompilerMessageDetail { + const pattern = /^(KM)?([0-9a-f]+)$/i; + const result = message.match(pattern); + if(!result) { + callbacks.reportMessage(InfrastructureMessages.Error_UnrecognizedMessageCode({message})); + return null; + } + + const code = Number.parseInt(result[2], 16); + return findMessageDetails(code, callbacks); +} + +function initialize(options: any): MessageOptions { + // We don't want to rename command line options to match the precise + // properties that we have in CompilerOptions, but nor do we want to rename + // CompilerOptions properties... + return { + // CompilerBaseOptions + logLevel: options.logLevel, + logFormat: options.logFormat, + color: options.color, + // MessageOptions + format: options.format ?? 'text', + outPath: options.outPath + } +} + +const getMessageIdentifiersSorted = (cls: any) => + Object.keys(cls) + .filter(id => typeof cls[id] == 'number') + .sort((a,b) => CompilerError.error(cls[a])-CompilerError.error(cls[b])); + +function allMessageDetails(): CompilerMessageDetail[] { + let result: CompilerMessageDetail[] = []; + messageNamespaceKeys.forEach((namespace: CompilerErrorNamespace) => { + const ms = messageSources[namespace] as CompilerMessageSource; + + const ids = getMessageIdentifiersSorted(ms.class); + for(const id of ids) { + const code = ms.class[id]; + if(typeof code != 'number') { + continue; + } + result.push({ + code, + id, + class: ms.class, + module: ms.module + }); + } + }); + return result; +} + +const toTitleCase = (s: string) => s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase(); + +function getMessageDetail(cls: any, id: string, escapeMarkdown: boolean): CompilerEvent { + const o = /^(INFO|HINT|WARN|ERROR|FATAL)_([A-Za-z0-9_]+)$/.exec(id); + if(!o) { + throw new Error(`Unexpected compiler message ${id}, does not match message error format`); + } + + const f = toTitleCase(o[1]) + '_' + o[2]; + const event = cls[f]?.({} /* ignore arguments*/); + if(!event) { + throw new Error(`Call to ${cls.name}.${f} returned null`); + } + + event.detail = (event.detail ?? '').replace(/^[ ]+/gm, ''); // TODO(lowpri): dedent may be too naive? + event.message = event.message ?? ''; + event.message = event?.exceptionVar + ? 'This is an internal error; the message will vary' + : (escapeMarkdown ? `${escapeMarkdownChar(event.message, false)}` : event.message); + + return event; +} + +/*--------------------------------------------------------------------------- + * Get messages in text format + *---------------------------------------------------------------------------*/ + +function getMessagesAsText(messages: CompilerMessageDetail[]) { + const result = messages.reduce((prev, message) => { + return prev + '\n' + formatMessageAsText(getModuleName({class: message.class, module: message.module}), message.class, message.code, message.id); + }, ''); + return result; +} + +function formatMessageAsText(moduleName: string, cls: any, code: number, id: string) { + const message = getMessageDetail(cls, id, false); + return `${id} +* Code: ${CompilerError.formatCode(code)} +* Module: ${moduleName} +* Message: ${message.message} +* Reference: ${helpUrl(code)} + +${message.detail} +`; +} + +/*--------------------------------------------------------------------------- + * Get messages as array of objects, for export to JSON + *---------------------------------------------------------------------------*/ + +function getMessagesAsArrayForJson(messages: CompilerMessageDetail[]) { + return messages.map(message => ({ + code: CompilerError.formatCode(message.code), + id: message.id, + class: message.class.name, + module: message.module, + detail: (() => getMessageDetail(message.class, message.id, false).detail)() + })); +} + +/*--------------------------------------------------------------------------- + * Export as Markdown + *---------------------------------------------------------------------------*/ + +function messageCommandMarkdown(messages: string[], options: MessageOptions, callbacks: CompilerCallbacks) { + if(messages.length) { + callbacks.reportMessage(InfrastructureMessages.Error_MessagesCannotBeFilteredForMarkdownFormat()); + return false; + } + if(!options.outPath) { + callbacks.reportMessage(InfrastructureMessages.Error_OutputPathMustBeSpecifiedForMarkdownFormat()); + return false; + } + if(!fs.existsSync(options.outPath) || !fs.statSync(options.outPath)?.isDirectory()) { + callbacks.reportMessage(InfrastructureMessages.Error_OutputPathMustExistAndBeADirectory({outPath:options.outPath})); + return false; + } + exportAllMessagesAsMarkdown(options.outPath); + return true; +} + +function exportAllMessagesAsMarkdown(outPath: string) { + let index = +`--- +title: Compiler Messages Reference +--- + +`; + + messageNamespaceKeys.forEach((namespace: CompilerErrorNamespace) => { + const ms = messageSources[namespace] as CompilerMessageSource; + const moduleName = getModuleName(ms); + index += `* [${moduleName}](${moduleName.toLowerCase()})\n`; + exportModuleMessagesAsMarkdown(moduleName, ms, outPath); + }); + + fs.writeFileSync(path.join(outPath, 'index.md'), index, 'utf-8'); +} + +function exportModuleMessagesAsMarkdown(moduleName: string, ms: CompilerMessageSource, outPath: string) { + const cls = ms.class; + + let index = +`--- +title: Compiler Messages Reference for @keymanapp/${ms.module} +--- + + Code | Identifier | Message +------|------------|--------- +`; + + const ids = getMessageIdentifiersSorted(cls); + for(const id of ids) { + const code = cls[id]; + const filename = CompilerError.formatCode(code).toLowerCase(); + const message = getMessageDetail(cls, id, true); + const content = formatMessageAsMarkdown(moduleName, id, message); + index += `[${CompilerError.formatCode(code)}](${filename}) | \`${id}\` | ${message.message}\n`; + fs.writeFileSync(path.join(outPath, filename + '.md'), content, 'utf-8'); + } + + fs.writeFileSync(path.join(outPath, moduleName + '.md'), index, 'utf-8'); +} + +function formatMessageAsMarkdown(moduleName: string, id: string, message: CompilerEvent) { + return `--- +title: ${CompilerError.formatCode(message.code)}: ${id} +--- + +| | | +|------------|---------- | +| Message | ${message.message} | +| Module | [${moduleName}](${moduleName.toLowerCase()}) | +| Identifier | \`${id}\` | + +${message.detail} +` +} diff --git a/developer/src/kmc/src/kmc.ts b/developer/src/kmc/src/kmc.ts index 92b25c765b3..9726d8dd997 100644 --- a/developer/src/kmc/src/kmc.ts +++ b/developer/src/kmc/src/kmc.ts @@ -10,6 +10,7 @@ import { KeymanSentry, loadOptions } from '@keymanapp/developer-utils'; import KEYMAN_VERSION from "@keymanapp/keyman-version"; import { TestKeymanSentry } from './util/TestKeymanSentry.js'; import { exitProcess } from './util/sysexits.js'; +import { declareMessage } from './commands/messageCommand.js'; await TestKeymanSentry.runTestIfCLRequested(); if(KeymanSentry.isEnabled()) { @@ -47,6 +48,7 @@ async function run() { declareBuild(program); declareAnalyze(program); + declareMessage(program); /* Future commands: declareClean(program); diff --git a/developer/src/kmc/src/messages/infrastructureMessages.ts b/developer/src/kmc/src/messages/infrastructureMessages.ts index 845cb0632f2..5b18a2f6e51 100644 --- a/developer/src/kmc/src/messages/infrastructureMessages.ts +++ b/developer/src/kmc/src/messages/infrastructureMessages.ts @@ -111,5 +111,30 @@ export class InfrastructureMessages { static ERROR_MessageCannotBeCoerced = SevError | 0x0019; static Error_MessageCannotBeCoerced = (o:{code: number}) => m(this.ERROR_MessageCannotBeCoerced, `Invalid parameter: --message KM${def(o.code?.toString(16))} is not a info, hint or warn message type and cannot be coerced`); + + static ERROR_UnrecognizedMessageCode = SevError | 0x001a; + static Error_UnrecognizedMessageCode = (o:{message:string}) => m( + this.ERROR_UnrecognizedMessageCode, + `Invalid parameter: message identifier '${def(o.message)}' must match format '[KM]#####'`); + + static ERROR_MustSpecifyMessageCode = SevError | 0x001b; + static Error_MustSpecifyMessageCode = () => m( + this.ERROR_MustSpecifyMessageCode, + `Must specify at least one message code or -a for all messages`); + + static ERROR_MessagesCannotBeFilteredForMarkdownFormat = SevError | 0x001c; + static Error_MessagesCannotBeFilteredForMarkdownFormat = () => m( + this.ERROR_MessagesCannotBeFilteredForMarkdownFormat, + `Messages cannot be filtered for markdown format`); + + static ERROR_OutputPathMustBeSpecifiedForMarkdownFormat = SevError | 0x001d; + static Error_OutputPathMustBeSpecifiedForMarkdownFormat = () => m( + this.ERROR_OutputPathMustBeSpecifiedForMarkdownFormat, + `Output path must be specified with -o for markdown output format`); + + static ERROR_OutputPathMustExistAndBeADirectory = SevError | 0x001e; + static Error_OutputPathMustExistAndBeADirectory = (o:{outPath:string}) => m( + this.ERROR_OutputPathMustExistAndBeADirectory, + `Output path ${def(o.outPath)} must exist and must be a folder`); } diff --git a/developer/src/kmc/src/messages/messageNamespaces.ts b/developer/src/kmc/src/messages/messageNamespaces.ts index a99c98504cf..242c83c5b70 100644 --- a/developer/src/kmc/src/messages/messageNamespaces.ts +++ b/developer/src/kmc/src/messages/messageNamespaces.ts @@ -9,7 +9,7 @@ import { PackageCompilerMessages } from '@keymanapp/kmc-package'; import { InfrastructureMessages } from './infrastructureMessages.js'; // Maps every compiler error namespace to the corresponding implementation -export const messageNamespaces: Record = { +const messageNamespaces: Record = { [CompilerErrorNamespace.LdmlKeyboardCompiler]: LdmlKeyboardCompilerMessages, [CompilerErrorNamespace.CommonTypes]: CommonTypesMessages, [CompilerErrorNamespace.KmnCompiler]: KmnCompilerMessages, @@ -25,3 +25,22 @@ export const messageNamespaces: Record = { // This works around pain points in enumerating enum members in Typescript // ref https://www.totaltypescript.com/iterate-over-object-keys-in-typescript export const messageNamespaceKeys = Object.keys(messageNamespaces).map(v => Number.parseInt(v)); + +export type CompilerMessageSource = { + module: string; + class: any; +}; + +// TODO: consolidate with messageNamespaces above +export const messageSources: Record = { + [CompilerErrorNamespace.LdmlKeyboardCompiler]: { module: 'kmc-ldml', class: LdmlKeyboardCompilerMessages }, + [CompilerErrorNamespace.CommonTypes]: { module: 'common-types', class: CommonTypesMessages }, + [CompilerErrorNamespace.KmnCompiler]: { module: 'kmc-kmn', class: KmnCompilerMessages }, + [CompilerErrorNamespace.ModelCompiler]: { module: 'kmc-model', class: ModelCompilerMessages }, + [CompilerErrorNamespace.PackageCompiler]: { module: 'kmc-package', class: PackageCompilerMessages }, + [CompilerErrorNamespace.Infrastructure]: { module: 'kmc', class: InfrastructureMessages }, + [CompilerErrorNamespace.Analyzer]: { module: 'kmc-analyze', class: AnalyzerMessages }, + [CompilerErrorNamespace.KmwCompiler]: { module: 'kmc-kmn', class: KmwCompilerMessages }, + [CompilerErrorNamespace.ModelInfoCompiler]: { module: 'kmc-model-info', class: ModelInfoCompilerMessages }, + [CompilerErrorNamespace.KeyboardInfoCompiler]: { module: 'kmc-keyboard-info', class: KeyboardInfoCompilerMessages }, +}; \ No newline at end of file diff --git a/developer/src/kmc/src/util/extendedCompilerOptions.ts b/developer/src/kmc/src/util/extendedCompilerOptions.ts index 63a4047be17..77fcceddd6b 100644 --- a/developer/src/kmc/src/util/extendedCompilerOptions.ts +++ b/developer/src/kmc/src/util/extendedCompilerOptions.ts @@ -1,6 +1,6 @@ import { CompilerCallbacks, CompilerError, CompilerErrorSeverity, CompilerMessageOverride, CompilerMessageOverrideMap, CompilerOptions } from '@keymanapp/common-types'; import { InfrastructureMessages } from '../messages/infrastructureMessages.js'; -import { messageNamespaceKeys, messageNamespaces } from '../messages/messageNamespaces.js'; +import { messageNamespaceKeys, messageSources } from '../messages/messageNamespaces.js'; export interface ExtendedCompilerOptions extends CompilerOptions { /** @@ -66,37 +66,52 @@ function commandOptionsMessagesToCompilerOptionsMessages(messages: any, callback return result; } -/** - * Verifies that a given message is valid and that the severity is allowed to be - * modified (Info, Hint and Warn only -- Error and Fatal cannot be modified) - * @param override - * @param callbacks - * @returns true if the message can be overridden - */ -function checkMessageOverride(override: CompilerMessageOverride, callbacks: CompilerCallbacks) { - const namespace = CompilerError.namespace(override.code); +export interface CompilerMessageDetail { + code: number; + id: any; + module: string; + class: any; +} + +export function findMessageDetails(code: number, callbacks: CompilerCallbacks): CompilerMessageDetail { + const namespace = CompilerError.namespace(code); if(!messageNamespaceKeys.includes(namespace)) { - callbacks.reportMessage(InfrastructureMessages.Error_MessageNamespaceNotFound({code:override.code})); - return false; + callbacks.reportMessage(InfrastructureMessages.Error_MessageNamespaceNotFound({code})); + return null; } - const source = messageNamespaces[namespace]; + const source = messageSources[namespace]; if(!source) { - throw new Error(`Unexpected missing namespace for code ${override.code.toString(16)}`); + throw new Error(`Unexpected missing namespace for code ${code.toString(16)}`); } // For the given namespace object, iterate through the members to find the matching value - const keys = Object.keys(source); - const m = source as Record; - const key = keys.find(key => typeof m[key] == 'number' && CompilerError.error(m[key]) === override.code); - if(!key) { - callbacks.reportMessage(InfrastructureMessages.Error_MessageCodeNotFound({code:override.code})); + const keys = Object.keys(source.class); + const m = source.class as Record; + const id = keys.find(key => typeof m[key] == 'number' && CompilerError.error(m[key]) === code); + if(!id) { + callbacks.reportMessage(InfrastructureMessages.Error_MessageCodeNotFound({code})); + return null; + } + return {code: m[id], id, module: source.module, class: source.class}; +} + +/** + * Verifies that a given message is valid and that the severity is allowed to be + * modified (Info, Hint and Warn only -- Error and Fatal cannot be modified) + * @param override + * @param callbacks + * @returns true if the message can be overridden + */ +function checkMessageOverride(override: CompilerMessageOverride, callbacks: CompilerCallbacks) { + const details = findMessageDetails(override.code, callbacks); + if(!details) { return false; } const validSeverityMasks = [CompilerErrorSeverity.Info,CompilerErrorSeverity.Hint,CompilerErrorSeverity.Warn]; - if(!validSeverityMasks.includes(CompilerError.severity(m[key]))) { + if(!validSeverityMasks.includes(CompilerError.severity(details.code))) { callbacks.reportMessage(InfrastructureMessages.Error_MessageCannotBeCoerced({code:override.code})); return false; } From 944e668d3710f43b7068513e657920b3c729ebd8 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Thu, 29 Feb 2024 13:31:19 +0700 Subject: [PATCH 167/171] fix(android): icText null check --- .../app/src/main/java/com/keyman/engine/KMKeyboard.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java index 8a477a644b0..bdd0f4f65c4 100644 --- a/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java +++ b/android/KMEA/app/src/main/java/com/keyman/engine/KMKeyboard.java @@ -168,11 +168,13 @@ protected boolean updateSelectionRange(int selStart, int selEnd) { InputConnection ic = KMManager.getInputConnection(this.keyboardType); if (ic != null) { ExtractedText icText = ic.getExtractedText(new ExtractedTextRequest(), 0); - String rawText = icText.text.toString(); - if (icText != null) { - updateText(rawText.toString()); + if (icText == null) { + return false; } + String rawText = icText.text.toString(); + updateText(rawText.toString()); + /* The values of selStart & selEnd provided by the system are in code units, not code-points. We need to account for surrogate pairs here. From 7ea3b503c16a4bfeaa674db8f4d1f2d1a83a0164 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Thu, 29 Feb 2024 18:03:52 +1100 Subject: [PATCH 168/171] chore: Apply suggestions from code review Co-authored-by: Steven R. Loomis --- developer/src/kmc-analyze/src/messages.ts | 2 +- .../src/kmc-kmn/src/compiler/kmn-compiler-messages.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/developer/src/kmc-analyze/src/messages.ts b/developer/src/kmc-analyze/src/messages.ts index 3bc884ace13..e09aa92e33a 100644 --- a/developer/src/kmc-analyze/src/messages.ts +++ b/developer/src/kmc-analyze/src/messages.ts @@ -15,7 +15,7 @@ export class AnalyzerMessages { /** @internal */ static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); /** - * Raised when an analysis components experiences an internal error. If you + * Raised when an analysis component has an internal error. If you * experience this error, it should be reported to the Keyman team for * resolution via https://github.com/keymanapp/keyman/issues/new */ diff --git a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts index dd8d10ad165..280209139ee 100644 --- a/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts +++ b/developer/src/kmc-kmn/src/compiler/kmn-compiler-messages.ts @@ -42,16 +42,16 @@ export const enum KmnCompilerMessageRanges { /** * @public - * Error messages reported by the .kmn compiler. The messages in this class - * share the namespace with messages from kmn_compiler_errors.h, which are - * generated by kmcmplib, so values below 0x900 are reserved for kmcmplib + * Error messages reported by the .kmn compiler. The error codes in this class + * share an address space with messages from kmn_compiler_errors.h, which are + * generated by kmcmplib, so codes below 0x900 are reserved for kmcmplib * messages. */ export class CompilerMessages { /** @internal */ static Fatal_UnexpectedException = (o:{e: any}) => m(this.FATAL_UnexpectedException, null, o.e ?? 'unknown error'); /** - * Raised when KmnCompiler or one of its components experiences an internal + * Raised when KmnCompiler or one of its components has an internal * error. If you experience this error, it should be reported to the Keyman * team for resolution via https://github.com/keymanapp/keyman/issues/new */ From c6ae4b183d012dee6d57897d648d415f50f202c6 Mon Sep 17 00:00:00 2001 From: "Dr Mark C. Sinclair" Date: Thu, 29 Feb 2024 09:39:36 +0000 Subject: [PATCH 169/171] chore(developer): change empty strings for nulls in unneeded outfile parameter for consistency --- .../src/kmc/test/test-infrastructureMessages.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/developer/src/kmc/test/test-infrastructureMessages.ts b/developer/src/kmc/test/test-infrastructureMessages.ts index 672ecf31a75..bd39a0a65ba 100644 --- a/developer/src/kmc/test/test-infrastructureMessages.ts +++ b/developer/src/kmc/test/test-infrastructureMessages.ts @@ -44,7 +44,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_FileDoesNotExist if a file does not exist', async function() { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'Error_File_Does_Not_Exist.kmn'), '', ncb, {}); + await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'Error_File_Does_Not_Exist.kmn'), null, ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileDoesNotExist), 'ERROR_FileDoesNotExist not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); @@ -53,7 +53,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_FileTypeNotRecognized if a file is not a recognized type', async function() { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'error_file_type_not_recognized.xxx'), '', ncb, {}); + await unitTestEndpoints.build(makePathToFixture('invalid-keyboards', 'error_file_type_not_recognized.xxx'), null, ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotRecognized), 'ERROR_FileTypeNotRecognized not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); @@ -74,7 +74,7 @@ describe('InfrastructureMessages', function () { it('should generate ERROR_InvalidProjectFile if a project file is invalid', async function() { const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await unitTestEndpoints.build(makePathToFixture('invalid-projects', 'error_invalid_project_file.kpj'), '', ncb, {}); + await unitTestEndpoints.build(makePathToFixture('invalid-projects', 'error_invalid_project_file.kpj'), null, ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_InvalidProjectFile), 'ERROR_InvalidProjectFile not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); @@ -105,7 +105,7 @@ describe('InfrastructureMessages', function () { const buildKeyboardInfo = new BuildKeyboardInfo(); const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found__keyboard.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await buildKeyboardInfo.build(projectPath, '', ncb, {}); + await buildKeyboardInfo.build(projectPath, null, ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), 'ERROR_FileTypeNotFound not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); }); @@ -116,7 +116,7 @@ describe('InfrastructureMessages', function () { const buildModelInfo = new BuildModelInfo(); const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found__model_ts.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await buildModelInfo.build(projectPath, '', ncb, {}); + await buildModelInfo.build(projectPath, null, ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), 'ERROR_FileTypeNotFound not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); assert.isTrue(nodeCompilerMessage(ncb, InfrastructureMessages.ERROR_FileTypeNotFound).includes(KeymanFileTypes.Source.Model), @@ -129,7 +129,7 @@ describe('InfrastructureMessages', function () { const buildModelInfo = new BuildModelInfo(); const projectPath = makePathToFixture('invalid-projects', 'error_file_type_not_found__model_kps.kpj') const ncb = new NodeCompilerCallbacks({logLevel: 'silent'}); - await buildModelInfo.build(projectPath, '', ncb, {}); + await buildModelInfo.build(projectPath, null, ncb, {}); assert.isTrue(ncb.hasMessage(InfrastructureMessages.ERROR_FileTypeNotFound), 'ERROR_FileTypeNotFound not generated, instead got: '+JSON.stringify(ncb.messages,null,2)); assert.isTrue(nodeCompilerMessage(ncb, InfrastructureMessages.ERROR_FileTypeNotFound).includes(KeymanFileTypes.Source.Package), From f30573d15f7870e7bb1d842ee1370d3ce46fb7d1 Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Thu, 29 Feb 2024 13:04:09 -0500 Subject: [PATCH 170/171] auto: increment beta version to 17.0.280 --- HISTORY.md | 5 +++++ VERSION.md | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index f4a3f99c0ba..7ae1696dcdf 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,10 @@ # Keyman Version History +## 17.0.279 beta 2024-02-29 + +* fix(linux): Fix libkeymancore-dev dependencies (#10880) +* chore(resources): update to latest ldml: xmlns, uset (#10865) + ## 17.0.278 beta 2024-02-28 * docs(linux): Updated whatsnew for Keyman for Linux 17 (#10858) diff --git a/VERSION.md b/VERSION.md index 0c8c2d956b2..3065797f00a 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.279 \ No newline at end of file +17.0.280 \ No newline at end of file From 4ccb2bb70d842066e4564a03857fbd7dd59bb2d9 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Fri, 1 Mar 2024 13:36:32 +0700 Subject: [PATCH 171/171] chore: revert tier and version --- TIER.md | 2 +- VERSION.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/TIER.md b/TIER.md index 65b2df87f7d..4a58007052a 100644 --- a/TIER.md +++ b/TIER.md @@ -1 +1 @@ -beta +alpha diff --git a/VERSION.md b/VERSION.md index 3065797f00a..fee4da9f584 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -17.0.280 \ No newline at end of file +18.0.8 \ No newline at end of file
Source FilesSource FilesSource Files   Outputs