diff --git a/.github/labeler.yml b/.github/labeler.yml
index e0abc29f2f..d831af12b6 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -5,15 +5,15 @@
# common ones. The others are commented out. There is still some variance between
# folder names and labels; consider this documentation of that ;-)
+docs: docs/**
+
#
# Add labels based on changed files using actions/labeler
#
android/: android/**
android/app/: android/KMAPro/**
-#android/browser/:
android/engine/: android/KMEA/**
-#android/resources/:
android/samples/: android/Samples/**
common/:
@@ -33,41 +33,34 @@ core/:
developer/:
- developer/**
- - windows/src/developer/**
developer/compilers/:
- - windows/src/developer/kmcomp/**
- - developer/src/kmlmc/**
+ - developer/src/kmcomp/**
+ - developer/src/kmcmpdll/**
+ - developer/src/kmc/**
+ - developer/src/kmc-*/**
developer/ide/:
- - windows/src/developer/TIKE/**
+ - developer/src/server/**
+ - developer/src/tike/**
-# developer/resources/
-# developer/tools/
ios/: ios/**
ios/app/: ios/keyman/**
-# ios/browser/
ios/engine/: ios/engine/**
-# ios/resources/
ios/samples/: ios/samples/**
linux/: linux/**
linux/config/: linux/keyman-config/**
linux/engine/:
- linux/ibus-keyman/**
- - linux/ibus-kmfl/**
- - linux/kmflcomp/**
- - linux/libkmfl/**
- - linux/scim_kmfl_imengine/**
-# linux/resources/
-# linux/samples/
+ - linux/legacy/ibus-kmfl/**
+ - linux/legacy/kmflcomp/**
+ - linux/legacy/libkmfl/**
mac/: mac/**
# mac/config/:
-mac/engine/: mac/**
-# mac/resources/
-# mac/samples/
+# mac/engine/: mac/**
oem/: oem/**
oem/fv/: oem/firstvoices/**
@@ -78,15 +71,9 @@ oem/fv/windows/: oem/firstvoices/windows/**
web/: web/**
# web/bookmarklet/
web/engine/: web/source/**
-# web/resources/
web/ui/: web/source/kmwui*
web/samples/: web/samples/**
-# Somewhat messy since we try and exclude Developer :)
-windows/:
-- any: ['windows/**', '!windows/src/developer/**']
-
+windows/: windows/**
windows/config/: windows/src/desktop/**
windows/engine/: windows/src/engine/**
-# windows/resources/
-# windows/samples/
diff --git a/.gitignore b/.gitignore
index cc536b78a0..10e0178496 100644
--- a/.gitignore
+++ b/.gitignore
@@ -165,6 +165,7 @@ resources/environment.sh
/core/VERSION.md
**/node_modules/
+tsconfig.tsbuildinfo
# Windows system files
Thumbs.db
@@ -172,3 +173,8 @@ Thumbs.db
# Temporary file for logging scripts in xcode runs, see build-utils.sh for
# details
/xcodebuild-scripts.log
+
+#
+# Code coverage tools for JS/TS - nyc and c8
+#
+.nyc_output/
diff --git a/.nycrc.json b/.nycrc.json
new file mode 100644
index 0000000000..ee788b8046
--- /dev/null
+++ b/.nycrc.json
@@ -0,0 +1,6 @@
+{
+ "check-coverage": true,
+ "temp-directory": ".nyc_output",
+ "lines": 90,
+ "reporter": "text"
+}
diff --git a/common/web/input-processor/package.json b/common/web/input-processor/package.json
index 9c9fc2d3ab..53ea4b1cae 100644
--- a/common/web/input-processor/package.json
+++ b/common/web/input-processor/package.json
@@ -17,7 +17,7 @@
},
"homepage": "https://github.com/keymanapp/keyman#readme",
"devDependencies": {
- "@keymanapp/lexical-model-compiler": "*",
+ "@keymanapp/kmc": "*",
"@keymanapp/resources-gosh": "*",
"@types/node": "^11.9.4",
"chai": "^4.3.4",
diff --git a/common/web/input-processor/test.sh b/common/web/input-processor/test.sh
index 85a1b36103..0d93754c7e 100755
--- a/common/web/input-processor/test.sh
+++ b/common/web/input-processor/test.sh
@@ -61,8 +61,8 @@ if [ $FETCH_DEPS = true ]; then
fi
# Ensures that the lexical model compiler has been built locally.
-echo_heading "Preparing Lexical Model Compiler for test use"
-pushd "$KEYMAN_ROOT/developer/src/kmlmc/"
+echo_heading "Preparing Lexical Model Compiler (kmc-model) for test use"
+pushd "$KEYMAN_ROOT/developer/src/kmc-model/"
./build.sh
popd
diff --git a/common/web/input-processor/tests/cases/languageProcessor.js b/common/web/input-processor/tests/cases/languageProcessor.js
index 13d9839811..c3e02a9762 100644
--- a/common/web/input-processor/tests/cases/languageProcessor.js
+++ b/common/web/input-processor/tests/cases/languageProcessor.js
@@ -6,7 +6,8 @@ var vm = require("vm");
* Unit tests for the Dummy prediction model.
*/
-var LexicalModelCompiler = require('../../../../../developer/src/kmlmc/dist/lexical-model-compiler/lexical-model-compiler').default;
+// TODO: this relies on esbuild output for lexical-model-compiler; later should use import
+var LexicalModelCompiler = require('../../../../../developer/src/kmc-model/build/cjs-src/lexical-model-compiler.cjs').default;
var path = require('path');
let InputProcessor = require('../../build/index.bundled.js');
@@ -49,7 +50,7 @@ describe('LanguageProcessor', function() {
describe('.predict', function() {
let compiler = new LexicalModelCompiler();
const MODEL_ID = 'example.qaa.trivial';
- const PATH = path.join(__dirname, '../../../../../developer/src/kmlmc/tests/fixtures', MODEL_ID);
+ const PATH = path.join(__dirname, '../../../../../developer/src/kmc-model/test/fixtures', MODEL_ID);
describe('using angle brackets for quotes', function() {
let modelCode = compiler.generateLexicalModelCode(MODEL_ID, {
diff --git a/common/web/keyman-version/.gitignore b/common/web/keyman-version/.gitignore
index 3e3464001b..7cedcbd35d 100644
--- a/common/web/keyman-version/.gitignore
+++ b/common/web/keyman-version/.gitignore
@@ -1,2 +1,5 @@
# version.inc.ts is generated during the build
-version.inc.ts
\ No newline at end of file
+version.inc.ts
+
+# keyman-version.mts (esm clone of version.inc.ts) is generated during the build
+keyman-version.mts
\ No newline at end of file
diff --git a/common/web/keyman-version/build.sh b/common/web/keyman-version/build.sh
index f3f6193926..7a31b762e5 100755
--- a/common/web/keyman-version/build.sh
+++ b/common/web/keyman-version/build.sh
@@ -37,7 +37,24 @@ if builder_has_action clean; then
fi
if builder_has_action build; then
- # Generate index.ts
+ # Generate keyman-version.mts
+ echo "
+ // Generated by common/web/keyman-version/build.sh
+ export default class KEYMAN_VERSION {
+ static readonly VERSION = \"$VERSION\";
+ static readonly VERSION_RELEASE =\"$VERSION_RELEASE\";
+ static readonly VERSION_MAJOR = \"$VERSION_MAJOR\";
+ static readonly VERSION_MINOR = \"$VERSION_MINOR\";
+ static readonly VERSION_PATCH = \"$VERSION_PATCH\";
+ static readonly TIER =\"$TIER\";
+ static readonly VERSION_TAG = \"$VERSION_TAG\";
+ static readonly VERSION_WITH_TAG = \"$VERSION_WITH_TAG\";
+ static readonly VERSION_ENVIRONMENT = \"$VERSION_ENVIRONMENT\";
+ static readonly SENTRY_RELEASE = \"release-$VERSION_WITH_TAG\";
+ }
+ " > ./keyman-version.mts
+
+ # Generate version.inc.ts -- used by TypeScript code that isn't yet modular
echo "
// Generated by common/web/keyman-version/build.sh
namespace com.keyman {
diff --git a/common/web/keyman-version/package.json b/common/web/keyman-version/package.json
index 2d81703ab6..ee72ffecd2 100644
--- a/common/web/keyman-version/package.json
+++ b/common/web/keyman-version/package.json
@@ -2,7 +2,10 @@
"name": "@keymanapp/keyman-version",
"description": "Keyman global version data",
"main": "./build/index.js",
- "exports": "./build/index.js",
+ "exports": {
+ ".": "./build/index.js",
+ "./keyman-version.mjs": "./build/keyman-version.mjs"
+ },
"scripts": {
"build": "echo 'Building @keymanapp/keyman-version' && tsc -b",
"clean": "tsc -b --clean"
diff --git a/common/web/keyman-version/tsconfig.esm.json b/common/web/keyman-version/tsconfig.esm.json
new file mode 100644
index 0000000000..1e72269873
--- /dev/null
+++ b/common/web/keyman-version/tsconfig.esm.json
@@ -0,0 +1,18 @@
+{
+ "extends": "../../../tsconfig-base.json",
+
+ "compilerOptions": {
+ "allowJs": false,
+ "declaration": true,
+ "module": "es2020",
+ "outDir": "./build/",
+ "baseUrl": ".",
+ "rootDir": ".",
+ "sourceMap": true,
+ "lib": ["es6"],
+ "target": "es6",
+ },
+ "include": [
+ "keyman-version.mts"
+ ]
+}
diff --git a/common/windows/cef-checkout.sh b/common/windows/cef-checkout.sh
old mode 100644
new mode 100755
diff --git a/common/windows/mkver.sh b/common/windows/mkver.sh
old mode 100644
new mode 100755
diff --git a/core/tests/unit/ldml/keyboards/meson.build b/core/tests/unit/ldml/keyboards/meson.build
index 1cb28d6cff..f833e2a4be 100644
--- a/core/tests/unit/ldml/keyboards/meson.build
+++ b/core/tests/unit/ldml/keyboards/meson.build
@@ -25,7 +25,7 @@ foreach kbd : tests
)
configure_file(
- command: kmc_cmd + ['@INPUT@', '--outFile', '@OUTPUT@'],
+ command: kmc_cmd + ['@INPUT@', '--out-file', '@OUTPUT@'],
output: kbd + '.kmx',
input: kbd + '.xml'
)
diff --git a/developer/src/.gitignore b/developer/src/.gitignore
index bbb1d73409..5e1280d2ca 100644
--- a/developer/src/.gitignore
+++ b/developer/src/.gitignore
@@ -31,7 +31,6 @@ inst/setup.inf
inst/setup.zip
inst/templates.wxs
inst/xml.wxs
-inst/kmlmc.wxs
inst/kmc.wxs
# /developer/TIKE/
@@ -87,7 +86,8 @@ tds_file.txt
# Breakpad files generated for Sentry
**/*.sym
-
-
+# All kmc projects have build/ folders
+kmc/build/
+kmc-*/build/
diff --git a/developer/src/Defines.mak b/developer/src/Defines.mak
index d534bc79b2..0a92bee695 100644
--- a/developer/src/Defines.mak
+++ b/developer/src/Defines.mak
@@ -12,10 +12,6 @@ DEVELOPER_PROGRAM=$(DEVELOPER_ROOT)\bin
DEVELOPER_OUTLIB=$(DEVELOPER_ROOT)\lib
DEVELOPER_DEBUGPATH=$(DEVELOPER_ROOT)\debug
-KEYMAN_MODELCOMPILER_ROOT=$(DEVELOPER_ROOT)\src\kmlmc
-KEYMAN_LDMLKEYBOARDCOMPILER_ROOT=$(DEVELOPER_ROOT)\src\kmc
-
-
DEVELOPER_DELPHIDPKPARAMS=-Q -B -GD -VT -^$C+ -^$D+ -^$J+ -^$L+ -^$O+ -^$Q- -^$R- -^$W+ -^$Y+ -E. $(DELPHIWARNINGS) -I$(DELPHIINCLUDES) -U$(DELPHIINCLUDES) -R$(DELPHIINCLUDES) -NSVcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Web;Soap;Winapi;System.Win -LE$(DEVELOPER_OUTLIB) -LN$(DEVELOPER_OUTLIB) -NSData -NUobj\Win32\$(TARGET_PATH)
DEVELOPER_DCC32DPK=cmd /c "$(DCC32PATH)\dcc32.exe" $(DEVELOPER_DELPHIDPKPARAMS)
diff --git a/developer/src/Makefile b/developer/src/Makefile
index 400c858ecb..b2059a0cd9 100644
--- a/developer/src/Makefile
+++ b/developer/src/Makefile
@@ -3,9 +3,9 @@
#
!ifdef NODELPHI
-TARGETS=build-tools kmcmpdll kmanalyze kmdecomp server kmlmc kmc
+TARGETS=build-tools kmcmpdll kmanalyze kmdecomp server kmc
!else
-TARGETS=build-tools kmcmpdll kmcomp kmanalyze kmconvert tike samples setup inst kmdecomp server kmlmc kmc
+TARGETS=build-tools kmcmpdll kmcomp kmanalyze kmconvert tike samples setup inst kmdecomp server kmc
!endif
EXCLUDEPATHDEFINES=1
@@ -65,12 +65,24 @@ server: .virtual
cd $(DEVELOPER_ROOT)\src\server
$(MAKE) $(TARGET)
-kmlmc: .virtual
- cd $(DEVELOPER_ROOT)\src\kmlmc
+kmc: kmc-keyboard kmc-model kmc-model-info kmc-package
+ cd $(DEVELOPER_ROOT)\src\kmc
$(MAKE) $(TARGET)
-kmc: .virtual
- cd $(DEVELOPER_ROOT)\src\kmc
+kmc-keyboard: .virtual
+ cd $(DEVELOPER_ROOT)\src\kmc-keyboard
+ $(MAKE) $(TARGET)
+
+kmc-model: .virtual
+ cd $(DEVELOPER_ROOT)\src\kmc-model
+ $(MAKE) $(TARGET)
+
+kmc-model-info: .virtual
+ cd $(DEVELOPER_ROOT)\src\kmc-model-info
+ $(MAKE) $(TARGET)
+
+kmc-package: .virtual
+ cd $(DEVELOPER_ROOT)\src\kmc-package
$(MAKE) $(TARGET)
# ----------------------------------------------------------------------
diff --git a/developer/src/README.md b/developer/src/README.md
index 6054cd5a61..e4de6c1328 100644
--- a/developer/src/README.md
+++ b/developer/src/README.md
@@ -27,10 +27,10 @@ Building and signing of the installation archive keymandeveloper.msi.
### src/inst/node
-Contains a minimal distribution of node.js intended just for compiling lexical
-models. If more dependencies are required, then the developer will be expected
-to install node.js themselves; this gets users going without requiring a large
-installer or a full node.js install.
+Contains a minimal distribution of node.js intended just for running kmc. If
+more dependencies are required, then the developer will be expected to install
+node.js themselves; this gets users going without requiring a large installer or
+a full node.js install.
## src/kmanalyze - kmanalyze.exe
@@ -66,27 +66,33 @@ Unsupported utility decompiles a Keyman .kmx keyboard. It will produce a .kmn
source file and optionally a .ico or .bmp image. see kmdecomp/kmdecomp.md for
details.
-## src/kmlmc
+## src/kmc
-node-based compilers for lexical models
+node-based next generation compiler, hosts kmc, kmlmi, kmlmc, kmlmp
-### src/kmlmc/kmlmc - Lexical Model Compiler
+### src/kmc-keyboard - LDML Keyboard Compiler
+
+Next Generation keyboard compiler package - LDML keyboards only at present.
+Command line access through kmc.
+
+### src/kmc-model - Lexical Model Compiler
The Lexical Model Compiler, kmlmc, runs on nodeJS on all supported desktop
-platforms.
+platforms. Command line access through kmc/kmlmc.
-### src/kmlmc/kmlmp - Package Compiler
+### src/kmc-package - Package Compiler
The package compiler is broadly compatible with the kmcomp .kps package
compiler. However at this stage it is only tested with lexical models, and use
with keyboards (either .js or .kmx) is not tested or supported. It is likely in
the future that the kmcomp .kps compiler will be deprecated in favour of this
-one.
+one. Command line access through kmc/kmlmp.
-### src/kmlmc/kmlmi - Model Info Compiler
+### src/kmc-model-info - Model Info Compiler
-Merges .model_info files for use on the Keyman Cloud lexical model repository
-at https://github.com/keymanapp/lexical-models.
+Merges .model_info files for use on the Keyman Cloud lexical model repository at
+https://github.com/keymanapp/lexical-models. Command line access through
+kmc/kmlmi.
## src/samples
diff --git a/developer/src/common/delphi/lexicalmodels/Keyman.System.LexicalModelUtils.pas b/developer/src/common/delphi/lexicalmodels/Keyman.System.LexicalModelUtils.pas
index b7e461b078..c367331eee 100644
--- a/developer/src/common/delphi/lexicalmodels/Keyman.System.LexicalModelUtils.pas
+++ b/developer/src/common/delphi/lexicalmodels/Keyman.System.LexicalModelUtils.pas
@@ -49,7 +49,7 @@ uses
const
SLexicalModelExtension = '.model.js';
- // The model ID SHOULD adhere to this pattern (see also developer/src/kmlmc/index.ts):
+ // The model ID SHOULD adhere to this pattern (see also developer/src/kmc-model):
// author .bcp47 .uniq
MODEL_ID_PATTERN_JS = '^[a-z_][a-z0-9_]*\.[a-z_][a-z0-9_-]*\.[a-z_][a-z0-9_]*\.model\.js$';
MODEL_ID_PATTERN_TS = '^[a-z_][a-z0-9_]*\.[a-z_][a-z0-9_-]*\.[a-z_][a-z0-9_]*\.model\.ts$';
@@ -70,7 +70,7 @@ end;
class function TLexicalModelUtils.DoesPackageFilenameFollowLexicalModelConventions(
const Name: string): Boolean;
-// The model ID SHOULD adhere to this pattern (see also developer/src/kmlmc/index.ts):
+// The model ID SHOULD adhere to this pattern (see also developer/src/kmc-model):
// author .bcp47 .uniq
begin
Result := TRegEx.IsMatch(ExtractFileName(Name), MODEL_ID_PATTERN_PACKAGE);
diff --git a/developer/src/inst/Makefile b/developer/src/inst/Makefile
index 4d12470399..ae2e328c82 100644
--- a/developer/src/inst/Makefile
+++ b/developer/src/inst/Makefile
@@ -6,7 +6,7 @@
# ----------------------------------------------------------------------
-DEVELOPER_FILES=kmdev.wixobj xml.wixobj cef.wixobj templates.wixobj kmlmc.wixobj server.wixobj kmc.wixobj
+DEVELOPER_FILES=kmdev.wixobj xml.wixobj cef.wixobj templates.wixobj server.wixobj kmc.wixobj
setup:
#
@@ -60,7 +60,7 @@ clean:
-del /Q xml.wxs
-del /Q cef.wxs
-del /Q templates.wxs
- -del /Q kmlmc.wxs
+ -del /Q kmc.wxs
test-releaseexists:
cd $(DEVELOPER_ROOT)\src\inst
diff --git a/developer/src/inst/download.in.mak b/developer/src/inst/download.in.mak
index 7e6625970b..2f27a2ee03 100644
--- a/developer/src/inst/download.in.mak
+++ b/developer/src/inst/download.in.mak
@@ -16,8 +16,7 @@ KEYMAN_WIX_TEMP_BASE=$(TEMP)\keyman_wix_build
KEYMAN_WIX_TEMP_XML=$(TEMP)\keyman_wix_build\xml
KEYMAN_WIX_TEMP_CEF=$(TEMP)\keyman_wix_build\cef
KEYMAN_WIX_TEMP_TEMPLATES=$(TEMP)\keyman_wix_build\templates
-KEYMAN_WIX_TEMP_MODELCOMPILER=$(TEMP)\keyman_wix_build\ModelCompiler
-KEYMAN_WIX_TEMP_LDMLKEYBOARDCOMPILER=$(TEMP)\keyman_wix_build\LDMLKeyboardCompiler
+KEYMAN_WIX_TEMP_KMC=$(TEMP)\keyman_wix_build\kmc
KEYMAN_WIX_TEMP_SERVER=$(TEMP)\keyman_wix_build\Server
KEYMAN_WIX_KMDEV_SERVER=$(DEVELOPER_ROOT)\bin\server
@@ -31,16 +30,15 @@ copykmdev: makeinstaller make-kmcomp-install-zip
test-releaseexists:
if exist $(DEVELOPER_ROOT)\release\$Version\keymandeveloper*.msi echo. & echo Release $Version already exists. Delete it or update VERSION.md and try again & exit 1
-candle: heat-cef heat-xml heat-templates heat-model-compiler heat-server heat-ldml-keyboard-compiler
+candle: heat-cef heat-xml heat-templates heat-server heat-kmc
$(WIXCANDLE) -dVERSION=$VersionWin -dRELEASE=$VersionRelease kmdev.wxs
$(WIXCANDLE) -dVERSION=$VersionWin -dRELEASE=$VersionRelease -dXmlSourceDir=$(DEVELOPER_ROOT)\src\tike\xml xml.wxs
$(WIXCANDLE) -dVERSION=$VersionWin -dRELEASE=$VersionRelease -dCefSourceDir=$(KEYMAN_CEF4DELPHI_ROOT) cef.wxs
$(WIXCANDLE) -dVERSION=$VersionWin -dRELEASE=$VersionRelease -dTemplatesSourceDir=$(KEYMAN_DEVELOPER_TEMPLATES_ROOT) templates.wxs
- $(WIXCANDLE) -dVERSION=$VersionWin -dRELEASE=$VersionRelease -dModelCompilerSourceDir=$(KEYMAN_WIX_TEMP_MODELCOMPILER) kmlmc.wxs
- $(WIXCANDLE) -dVERSION=$VersionWin -dRELEASE=$VersionRelease -dLDMLKeyboardCompilerSourceDir=$(KEYMAN_WIX_TEMP_LDMLKEYBOARDCOMPILER) kmc.wxs
+ $(WIXCANDLE) -dVERSION=$VersionWin -dRELEASE=$VersionRelease -dkmcSourceDir=$(KEYMAN_WIX_TEMP_KMC) kmc.wxs
$(WIXCANDLE) -dVERSION=$VersionWin -dRELEASE=$VersionRelease -dServerSourceDir=$(KEYMAN_WIX_KMDEV_SERVER) server.wxs
-clean-heat: clean-heat-model-compiler clean-heat-ldml-keyboard-compiler
+clean-heat: clean-heat-kmc
heat-xml:
# We copy the files to a temp folder in order to exclude thumbs.db, .vs, etc from harvesting
@@ -81,33 +79,20 @@ heat-server:
# When we candle/light build, we can grab the source files from the proper root so go ahead and delete the temp folder again
-rmdir /s/q $(KEYMAN_WIX_TEMP_SERVER)
-heat-ldml-keyboard-compiler:
- cd $(KEYMAN_LDMLKEYBOARDCOMPILER_ROOT)
+heat-kmc:
+ cd $(DEVELOPER_ROOT)\src\kmc
# Build the distributable package
- $(GIT_BASH_FOR_KEYMAN) build.sh bundle --build-path "$(KEYMAN_WIX_TEMP_BASE)"
+ mkdir $(KEYMAN_WIX_TEMP_KMC)
+ $(GIT_BASH_FOR_KEYMAN) build.sh bundle --build-path "$(KEYMAN_WIX_TEMP_KMC)"
# Build the .wxs file
cd $(DEVELOPER_ROOT)\src\inst
- $(WIXHEAT) dir $(KEYMAN_WIX_TEMP_LDMLKEYBOARDCOMPILER) -o kmc.wxs -ag -cg LDMLKeyboardCompiler -dr INSTALLDIR -var var.LDMLKeyboardCompilerSourceDir -wx -nologo
+ $(WIXHEAT) dir $(KEYMAN_WIX_TEMP_KMC) -o kmc.wxs -ag -cg kmc -dr INSTALLDIR -var var.kmcSourceDir -wx -nologo
-clean-heat-ldml-keyboard-compiler:
+clean-heat-kmc:
# the production build generates files that are not in source, e.g. .ps1 scripts
# When we candle/light build, we can grab the source files from the proper root so go ahead and delete the temp folder again
- -rmdir /s/q $(KEYMAN_WIX_TEMP_LDMLKEYBOARDCOMPILER)
-
-heat-model-compiler:
- cd $(KEYMAN_MODELCOMPILER_ROOT)
-# Build the distributable package
- $(GIT_BASH_FOR_KEYMAN) bundle.sh --build-path "$(KEYMAN_WIX_TEMP_BASE)"
-
-# Build the .wxs file
- cd $(DEVELOPER_ROOT)\src\inst
- $(WIXHEAT) dir $(KEYMAN_WIX_TEMP_MODELCOMPILER) -o kmlmc.wxs -ag -cg ModelCompiler -dr INSTALLDIR -var var.ModelCompilerSourceDir -wx -nologo
-
-clean-heat-model-compiler:
-# the production build generates files that are not in source, e.g. .ps1 scripts
-# When we candle/light build, we can grab the source files from the proper root so go ahead and delete the temp folder again
- -rmdir /s/q $(KEYMAN_WIX_TEMP_MODELCOMPILER)
+ -rmdir /s/q $(KEYMAN_WIX_TEMP_KMC)
makeinstaller:
cd $(DEVELOPER_ROOT)\src\inst
diff --git a/developer/src/inst/kmdev.wxs b/developer/src/inst/kmdev.wxs
index 7c57f013db..c7c26104e5 100644
--- a/developer/src/inst/kmdev.wxs
+++ b/developer/src/inst/kmdev.wxs
@@ -363,8 +363,7 @@
-
-
+
diff --git a/developer/src/inst/node/kmc.cmd b/developer/src/inst/node/kmc.cmd
index 31e473ae92..4392fdd1cc 100644
--- a/developer/src/inst/node/kmc.cmd
+++ b/developer/src/inst/node/kmc.cmd
@@ -1,4 +1,4 @@
@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).
-@"%~dp0\node.js\node.exe" "%~dp0\LDMLKeyboardCompiler\build\kmc.js" %*
+@"%~dp0\node.js\node.exe" "%~dp0\kmc\kmc.cjs" %*
diff --git a/developer/src/inst/node/kmlmc.cmd b/developer/src/inst/node/kmlmc.cmd
index a2d6a012e9..ce83b9d046 100644
--- a/developer/src/inst/node/kmlmc.cmd
+++ b/developer/src/inst/node/kmlmc.cmd
@@ -1,4 +1,4 @@
@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).
-@"%~dp0\node.js\node.exe" "%~dp0\ModelCompiler\dist\kmlmc.js" %*
+@"%~dp0\node.js\node.exe" "%~dp0\kmc\kmlmc.cjs" %*
diff --git a/developer/src/inst/node/kmlmi.cmd b/developer/src/inst/node/kmlmi.cmd
index fe8c4457de..153e94a21a 100644
--- a/developer/src/inst/node/kmlmi.cmd
+++ b/developer/src/inst/node/kmlmi.cmd
@@ -1,4 +1,4 @@
@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).
-@"%~dp0\node.js\node.exe" "%~dp0\ModelCompiler\dist\kmlmi.js" %*
+@"%~dp0\node.js\node.exe" "%~dp0\kmc\kmlmi.cjs" %*
diff --git a/developer/src/inst/node/kmlmp.cmd b/developer/src/inst/node/kmlmp.cmd
index 7eeb0c2586..25fab7bf04 100644
--- a/developer/src/inst/node/kmlmp.cmd
+++ b/developer/src/inst/node/kmlmp.cmd
@@ -1,4 +1,4 @@
@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).
-@"%~dp0\node.js\node.exe" "%~dp0\ModelCompiler\dist\kmlmp.js" %*
+@"%~dp0\node.js\node.exe" "%~dp0\kmc\kmlmp.cjs" %*
diff --git a/developer/src/kmc-keyboard/Makefile b/developer/src/kmc-keyboard/Makefile
new file mode 100644
index 0000000000..3cf3ac055a
--- /dev/null
+++ b/developer/src/kmc-keyboard/Makefile
@@ -0,0 +1,39 @@
+#
+# Keyman Developer - kmc Keyboard Compiler Makefile
+#
+
+!include ..\Defines.mak
+
+# We do configure here because parent Makefile calls this first; other
+# kmc and kmc-* makefiles don't do it
+build: configure .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh build
+
+configure: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh configure
+
+clean: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh clean
+
+test: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh test
+
+# build.sh bundle must be run from shell as it requires a temp folder to be
+# passed in. See inst/download.in.mak for instantiation.
+
+publish: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh publish
+
+signcode:
+ @rem nothing to do
+
+wrap-symbols:
+ @rem nothing to do
+
+test-manifest:
+ @rem nothing to do
+
+install:
+ @rem nothing to do
+
+!include ..\Target.mak
diff --git a/developer/src/kmc-keyboard/build.sh b/developer/src/kmc-keyboard/build.sh
new file mode 100755
index 0000000000..9fef8f8b68
--- /dev/null
+++ b/developer/src/kmc-keyboard/build.sh
@@ -0,0 +1,83 @@
+#!/usr/bin/env bash
+#
+# Compiles the kmc keyboard compiler.
+#
+
+# Exit on command failure and when using unset variables:
+set -eu
+
+## START STANDARD BUILD SCRIPT INCLUDE
+# adjust relative paths as necessary
+THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
+. "$(dirname "$THIS_SCRIPT")/../../../resources/build/build-utils.sh"
+## END STANDARD BUILD SCRIPT INCLUDE
+
+cd "$THIS_SCRIPT_PATH"
+
+. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
+
+builder_describe "Build Keyman kmc Keyboard Compiler module" \
+ "configure" \
+ "build" \
+ "clean" \
+ "test" \
+ "build-fixtures builds test fixtures for manual examination" \
+ "publish publish to npm" \
+ "--dry-run,-n don't actually publish, just dry run"
+
+builder_parse "$@"
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action clean; then
+ rm -rf ./build/ ./tsconfig.tsbuildinfo
+ builder_report success clean
+else
+ # We need the schema file at runtime and bundled, so always copy it for all actions except `clean`
+ mkdir -p "$THIS_SCRIPT_PATH/build/src/"
+ cp "$KEYMAN_ROOT/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboard.schema.json" "$THIS_SCRIPT_PATH/build/src/"
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action configure; then
+ verify_npm_setup
+ builder_report success configure
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action build; then
+ npm run build
+ builder_report success build
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action build-fixtures; then
+ # Build basic.kmx and emit its checksum
+ mkdir -p ./build/test/fixtures
+ node . ./test/fixtures/basic.xml --no-compiler-version --debug --out-file ./build/test/fixtures/basic-xml.kmx
+ printf "${COLOR_GREY}Checksum for basic-xml.kmx: ${COLOR_PURPLE}%s${COLOR_RESET}\n" \
+ "$(xxd -g 1 -l 12 ./build/test/fixtures/basic-xml.kmx | cut -d' ' -f 10-13)"
+
+ # Generate a binary file from basic.txt for comparison purposes
+ node ../../../common/tools/hextobin/build/hextobin.js ./test/fixtures/basic.txt ./build/test/fixtures/basic-txt.kmx
+
+ builder_report success build-fixtures
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action test; then
+ npm test
+ builder_report success test
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action publish; then
+ . "$KEYMAN_ROOT/resources/build/npm-publish.inc.sh"
+ npm_publish
+ builder_report success publish
+fi
diff --git a/developer/src/kmc-keyboard/package.json b/developer/src/kmc-keyboard/package.json
new file mode 100644
index 0000000000..5f60402f3d
--- /dev/null
+++ b/developer/src/kmc-keyboard/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "@keymanapp/kmc-keyboard",
+ "description": "Keyman Developer keyboard compiler",
+ "keywords": [
+ "keyboard",
+ "keyman",
+ "ldml",
+ "unicode"
+ ],
+ "type": "module",
+ "exports": {
+ ".": "./build/src/main.js"
+ },
+ "scripts": {
+ "build": "tsc -b",
+ "test": "cd test && tsc -b && cd .. && c8 mocha",
+ "prepublishOnly": "npm run build"
+ },
+ "author": "Marc Durdin (https://github.com/mcdurdin)",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/keymanapp/keyman/issues"
+ },
+ "dependencies": {
+ "@keymanapp/keyman-version": "*",
+ "ajv": "^8.11.0",
+ "crc-32": "^1.2.2",
+ "restructure": "^3.0.0",
+ "semver": "^7.3.7",
+ "xml2js": "^0.4.19"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.1.7",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.14.6",
+ "@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
+ "chai": "^4.3.4",
+ "chalk": "^2.4.2",
+ "mocha": "^8.4.0",
+ "ts-node": "^9.1.1",
+ "typescript": "^4.5.4"
+ },
+ "mocha": {
+ "spec": "build/test/**/test-*.js",
+ "require": [
+ "source-map-support/register"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/keymanapp/keyman.git"
+ }
+}
diff --git a/developer/src/kmc/src/keyman/compiler/bksp.ts b/developer/src/kmc-keyboard/src/compiler/bksp.ts
similarity index 94%
rename from developer/src/kmc/src/keyman/compiler/bksp.ts
rename to developer/src/kmc-keyboard/src/compiler/bksp.ts
index 865d648f34..dfda27f479 100644
--- a/developer/src/kmc/src/keyman/compiler/bksp.ts
+++ b/developer/src/kmc-keyboard/src/compiler/bksp.ts
@@ -1,7 +1,7 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { Bksp, BkspItem, BkspItemFlags, GlobalSections } from "../kmx/kmx-plus";
-import { LKBackspace, LKBackspaces } from "../ldml-keyboard/ldml-keyboard-xml";
-import { SectionCompiler } from "./section-compiler";
+import { Bksp, BkspItem, BkspItemFlags, GlobalSections } from "../kmx/kmx-plus.js";
+import { LKBackspace, LKBackspaces } from "../ldml-keyboard/ldml-keyboard-xml.js";
+import { SectionCompiler } from "./section-compiler.js";
export class BkspCompiler extends SectionCompiler {
diff --git a/developer/src/kmc/src/keyman/compiler/callbacks.ts b/developer/src/kmc-keyboard/src/compiler/callbacks.ts
similarity index 100%
rename from developer/src/kmc/src/keyman/compiler/callbacks.ts
rename to developer/src/kmc-keyboard/src/compiler/callbacks.ts
diff --git a/developer/src/kmc/src/keyman/compiler/compiler-options.ts b/developer/src/kmc-keyboard/src/compiler/compiler-options.ts
similarity index 100%
rename from developer/src/kmc/src/keyman/compiler/compiler-options.ts
rename to developer/src/kmc-keyboard/src/compiler/compiler-options.ts
diff --git a/developer/src/kmc/src/keyman/compiler/compiler.ts b/developer/src/kmc-keyboard/src/compiler/compiler.ts
similarity index 82%
rename from developer/src/kmc/src/keyman/compiler/compiler.ts
rename to developer/src/kmc-keyboard/src/compiler/compiler.ts
index c78ab5db54..12e1010c81 100644
--- a/developer/src/kmc/src/keyman/compiler/compiler.ts
+++ b/developer/src/kmc-keyboard/src/compiler/compiler.ts
@@ -1,17 +1,17 @@
-import KMXPlusFile, { Elem, Strs } from '../kmx/kmx-plus';
-import LDMLKeyboardXMLSourceFile from '../ldml-keyboard/ldml-keyboard-xml';
-import LDMLKeyboardXMLSourceFileReader from '../ldml-keyboard/ldml-keyboard-xml-reader';
-import { BkspCompiler } from './bksp';
-import CompilerCallbacks from './callbacks';
-import CompilerOptions from './compiler-options';
-import { KeysCompiler } from './keys';
-import { LocaCompiler } from './loca';
-import { CompilerMessages } from './messages';
-import { MetaCompiler } from './meta';
-import { NameCompiler } from './name';
-import { OrdrCompiler } from './ordr';
-import { FinlCompiler, TranCompiler } from './tran';
-import { VkeyCompiler } from './vkey';
+import KMXPlusFile, { Elem, Strs } from '../kmx/kmx-plus.js';
+import LDMLKeyboardXMLSourceFile from '../ldml-keyboard/ldml-keyboard-xml.js';
+import LDMLKeyboardXMLSourceFileReader from '../ldml-keyboard/ldml-keyboard-xml-reader.js';
+import { BkspCompiler } from './bksp.js';
+import CompilerCallbacks from './callbacks.js';
+import CompilerOptions from './compiler-options.js';
+import { KeysCompiler } from './keys.js';
+import { LocaCompiler } from './loca.js';
+import { CompilerMessages } from './messages.js';
+import { MetaCompiler } from './meta.js';
+import { NameCompiler } from './name.js';
+import { OrdrCompiler } from './ordr.js';
+import { FinlCompiler, TranCompiler } from './tran.js';
+import { VkeyCompiler } from './vkey.js';
const SECTION_COMPILERS = [
BkspCompiler,
diff --git a/developer/src/kmc/src/keyman/compiler/keys.ts b/developer/src/kmc-keyboard/src/compiler/keys.ts
similarity index 94%
rename from developer/src/kmc/src/keyman/compiler/keys.ts
rename to developer/src/kmc-keyboard/src/compiler/keys.ts
index bbadd5a75d..b5fdad37b4 100644
--- a/developer/src/kmc/src/keyman/compiler/keys.ts
+++ b/developer/src/kmc-keyboard/src/compiler/keys.ts
@@ -1,10 +1,10 @@
import { constants } from '@keymanapp/ldml-keyboard-constants';
-import { GlobalSections, Keys } from '../kmx/kmx-plus';
-import * as LDMLKeyboard from '../ldml-keyboard/ldml-keyboard-xml';
-import { USVirtualKeyMap } from "../ldml-keyboard/virtual-key-constants";
-import { CompilerMessages } from './messages';
+import { GlobalSections, Keys } from '../kmx/kmx-plus.js';
+import * as LDMLKeyboard from '../ldml-keyboard/ldml-keyboard-xml.js';
+import { USVirtualKeyMap } from "../ldml-keyboard/virtual-key-constants.js";
+import { CompilerMessages } from './messages.js';
-import { SectionCompiler } from "./section-compiler";
+import { SectionCompiler } from "./section-compiler.js";
export class KeysCompiler extends SectionCompiler {
diff --git a/developer/src/kmc/src/keyman/compiler/loca.ts b/developer/src/kmc-keyboard/src/compiler/loca.ts
similarity index 89%
rename from developer/src/kmc/src/keyman/compiler/loca.ts
rename to developer/src/kmc-keyboard/src/compiler/loca.ts
index 01836634a7..09894a329c 100644
--- a/developer/src/kmc/src/keyman/compiler/loca.ts
+++ b/developer/src/kmc-keyboard/src/compiler/loca.ts
@@ -1,8 +1,8 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { GlobalSections, Loca } from "../kmx/kmx-plus";
-import { SectionCompiler } from "./section-compiler";
-import { CompilerMessages } from "./messages";
-import { LKKeyboard } from "../ldml-keyboard/ldml-keyboard-xml";
+import { GlobalSections, Loca } from "../kmx/kmx-plus.js";
+import { SectionCompiler } from "./section-compiler.js";
+import { CompilerMessages } from "./messages.js";
+import { LKKeyboard } from "../ldml-keyboard/ldml-keyboard-xml.js";
export class LocaCompiler extends SectionCompiler {
diff --git a/developer/src/kmc/src/keyman/compiler/messages.ts b/developer/src/kmc-keyboard/src/compiler/messages.ts
similarity index 100%
rename from developer/src/kmc/src/keyman/compiler/messages.ts
rename to developer/src/kmc-keyboard/src/compiler/messages.ts
diff --git a/developer/src/kmc/src/keyman/compiler/meta.ts b/developer/src/kmc-keyboard/src/compiler/meta.ts
similarity index 91%
rename from developer/src/kmc/src/keyman/compiler/meta.ts
rename to developer/src/kmc-keyboard/src/compiler/meta.ts
index cb57dd6cad..174ac1af92 100644
--- a/developer/src/kmc/src/keyman/compiler/meta.ts
+++ b/developer/src/kmc-keyboard/src/compiler/meta.ts
@@ -1,9 +1,9 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { GlobalSections, KeyboardSettings, Meta, Meta_NormalizationForm } from "../kmx/kmx-plus";
-import { isValidEnumValue } from "../util/util";
-import { CompilerMessages } from "./messages";
-import { SectionCompiler } from "./section-compiler";
-import * as semver from "semver";
+import { GlobalSections, KeyboardSettings, Meta, Meta_NormalizationForm } from "../kmx/kmx-plus.js";
+import { isValidEnumValue } from "../util/util.js";
+import { CompilerMessages } from "./messages.js";
+import { SectionCompiler } from "./section-compiler.js";
+import semver from "semver";
export class MetaCompiler extends SectionCompiler {
diff --git a/developer/src/kmc/src/keyman/compiler/metadata-compiler.ts b/developer/src/kmc-keyboard/src/compiler/metadata-compiler.ts
similarity index 88%
rename from developer/src/kmc/src/keyman/compiler/metadata-compiler.ts
rename to developer/src/kmc-keyboard/src/compiler/metadata-compiler.ts
index b1d50c6ed1..c17d4deab3 100644
--- a/developer/src/kmc/src/keyman/compiler/metadata-compiler.ts
+++ b/developer/src/kmc-keyboard/src/compiler/metadata-compiler.ts
@@ -1,8 +1,7 @@
-import KMXFile, { KEYBOARD } from "../kmx/kmx";
-import { KMXPlusData } from "../kmx/kmx-plus";
-import CompilerOptions from "./compiler-options";
-
-const KEYMAN_VERSION = require("@keymanapp/keyman-version").KEYMAN_VERSION;
+import KMXFile, { KEYBOARD } from "../kmx/kmx.js";
+import { KMXPlusData } from "../kmx/kmx-plus.js";
+import CompilerOptions from "./compiler-options.js";
+import KEYMAN_VERSION from "@keymanapp/keyman-version/keyman-version.mjs";
export default class KMXPlusMetadataCompiler {
/**
diff --git a/developer/src/kmc/src/keyman/compiler/name.ts b/developer/src/kmc-keyboard/src/compiler/name.ts
similarity index 81%
rename from developer/src/kmc/src/keyman/compiler/name.ts
rename to developer/src/kmc-keyboard/src/compiler/name.ts
index f209aacb7f..29d91fbab7 100644
--- a/developer/src/kmc/src/keyman/compiler/name.ts
+++ b/developer/src/kmc-keyboard/src/compiler/name.ts
@@ -1,6 +1,6 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { GlobalSections, Name } from "../kmx/kmx-plus";
-import { SectionCompiler } from "./section-compiler";
+import { GlobalSections, Name } from "../kmx/kmx-plus.js";
+import { SectionCompiler } from "./section-compiler.js";
export class NameCompiler extends SectionCompiler {
diff --git a/developer/src/kmc/src/keyman/compiler/ordr.ts b/developer/src/kmc-keyboard/src/compiler/ordr.ts
similarity index 90%
rename from developer/src/kmc/src/keyman/compiler/ordr.ts
rename to developer/src/kmc-keyboard/src/compiler/ordr.ts
index 7ea5f19921..398e44ad86 100644
--- a/developer/src/kmc/src/keyman/compiler/ordr.ts
+++ b/developer/src/kmc-keyboard/src/compiler/ordr.ts
@@ -1,7 +1,7 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { GlobalSections, Ordr, OrdrItem } from "../kmx/kmx-plus";
-import { LKReorder, LKReorders } from "../ldml-keyboard/ldml-keyboard-xml";
-import { SectionCompiler } from "./section-compiler";
+import { GlobalSections, Ordr, OrdrItem } from "../kmx/kmx-plus.js";
+import { LKReorder, LKReorders } from "../ldml-keyboard/ldml-keyboard-xml.js";
+import { SectionCompiler } from "./section-compiler.js";
export class OrdrCompiler extends SectionCompiler {
diff --git a/developer/src/kmc/src/keyman/compiler/section-compiler.ts b/developer/src/kmc-keyboard/src/compiler/section-compiler.ts
similarity index 82%
rename from developer/src/kmc/src/keyman/compiler/section-compiler.ts
rename to developer/src/kmc-keyboard/src/compiler/section-compiler.ts
index 9b8fd87ae4..1b0107f788 100644
--- a/developer/src/kmc/src/keyman/compiler/section-compiler.ts
+++ b/developer/src/kmc-keyboard/src/compiler/section-compiler.ts
@@ -1,6 +1,6 @@
-import { GlobalSections, Section } from "../kmx/kmx-plus";
-import LDMLKeyboardXMLSourceFile, { LKKeyboard } from "../ldml-keyboard/ldml-keyboard-xml";
-import CompilerCallbacks from "./callbacks";
+import { GlobalSections, Section } from "../kmx/kmx-plus.js";
+import LDMLKeyboardXMLSourceFile, { LKKeyboard } from "../ldml-keyboard/ldml-keyboard-xml.js";
+import CompilerCallbacks from "./callbacks.js";
import { SectionIdent } from '@keymanapp/ldml-keyboard-constants';
/* istanbul ignore next */
diff --git a/developer/src/kmc/src/keyman/compiler/tran.ts b/developer/src/kmc-keyboard/src/compiler/tran.ts
similarity index 93%
rename from developer/src/kmc/src/keyman/compiler/tran.ts
rename to developer/src/kmc-keyboard/src/compiler/tran.ts
index 804c549902..1d72082f3b 100644
--- a/developer/src/kmc/src/keyman/compiler/tran.ts
+++ b/developer/src/kmc-keyboard/src/compiler/tran.ts
@@ -1,8 +1,8 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { Finl, FinlItem, GlobalSections, Tran, TranItem, TranItemFlags } from "../kmx/kmx-plus";
-import LDMLKeyboardXMLSourceFile, { LKTransform, LKTransforms } from "../ldml-keyboard/ldml-keyboard-xml";
-import CompilerCallbacks from "./callbacks";
-import { SectionCompiler } from "./section-compiler";
+import { Finl, FinlItem, GlobalSections, Tran, TranItem, TranItemFlags } from "../kmx/kmx-plus.js";
+import LDMLKeyboardXMLSourceFile, { LKTransform, LKTransforms } from "../ldml-keyboard/ldml-keyboard-xml.js";
+import CompilerCallbacks from "./callbacks.js";
+import { SectionCompiler } from "./section-compiler.js";
type TransformCompilerType = 'simple' | 'final';
diff --git a/developer/src/kmc/src/keyman/compiler/vkey.ts b/developer/src/kmc-keyboard/src/compiler/vkey.ts
similarity index 92%
rename from developer/src/kmc/src/keyman/compiler/vkey.ts
rename to developer/src/kmc-keyboard/src/compiler/vkey.ts
index 8f06a10d89..026b626d10 100644
--- a/developer/src/kmc/src/keyman/compiler/vkey.ts
+++ b/developer/src/kmc-keyboard/src/compiler/vkey.ts
@@ -1,8 +1,8 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { Vkey } from "../kmx/kmx-plus";
-import { LdmlVkeyNames } from "../ldml-keyboard/virtual-key-constants";
-import { CompilerMessages } from "./messages";
-import { SectionCompiler } from "./section-compiler";
+import { Vkey } from "../kmx/kmx-plus.js";
+import { LdmlVkeyNames } from "../ldml-keyboard/virtual-key-constants.js";
+import { CompilerMessages } from "./messages.js";
+import { SectionCompiler } from "./section-compiler.js";
export class VkeyCompiler extends SectionCompiler {
diff --git a/developer/src/kmc/src/keyman/kmx/element-string.ts b/developer/src/kmc-keyboard/src/kmx/element-string.ts
similarity index 98%
rename from developer/src/kmc/src/keyman/kmx/element-string.ts
rename to developer/src/kmc-keyboard/src/kmx/element-string.ts
index e0c35d3823..581ab683cd 100644
--- a/developer/src/kmc/src/keyman/kmx/element-string.ts
+++ b/developer/src/kmc-keyboard/src/kmx/element-string.ts
@@ -1,5 +1,5 @@
import { constants } from '@keymanapp/ldml-keyboard-constants';
-import { Strs, StrsItem } from './kmx-plus';
+import { Strs, StrsItem } from './kmx-plus.js';
export enum ElemElementFlags {
none = 0,
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-builder.ts b/developer/src/kmc-keyboard/src/kmx/kmx-builder.ts
similarity index 97%
rename from developer/src/kmc/src/keyman/kmx/kmx-builder.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-builder.ts
index f8d8eea1ef..1b955246f9 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-builder.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-builder.ts
@@ -1,8 +1,8 @@
import * as r from 'restructure';
-import * as crc32 from 'crc-32';
-import KMXFile, { GROUP, KEY, STORE } from './kmx';
-import KMXPlusFile from './kmx-plus';
-import KMXPlusBuilder from './kmx-plus-builder/kmx-plus-builder';
+import crc32 from 'crc-32';
+import KMXFile, { GROUP, KEY, STORE } from './kmx.js';
+import KMXPlusFile from './kmx-plus.js';
+import KMXPlusBuilder from './kmx-plus-builder/kmx-plus-builder.js';
// These type-checking structures are here to ensure that
// we match the structures from kmx.ts in the generator
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-elem.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-elem.ts
similarity index 93%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-elem.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-elem.ts
index 3f7bd0216a..6ee5d4e4b2 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-elem.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-elem.ts
@@ -1,8 +1,8 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { ElementString } from "../element-string";
-import { Elem } from "../kmx-plus";
-import { build_strs_index, BUILDER_STRS } from "./build-strs";
-import { BUILDER_SECTION } from "./builder-section";
+import { ElementString } from "../element-string.js";
+import { Elem } from "../kmx-plus.js";
+import { build_strs_index, BUILDER_STRS } from "./build-strs.js";
+import { BUILDER_SECTION } from "./builder-section.js";
/* ------------------------------------------------------------------
* elem section
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-keys.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-keys.ts
similarity index 87%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-keys.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-keys.ts
index fc94f6dbaa..aa09263076 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-keys.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-keys.ts
@@ -1,8 +1,8 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { KeyFlags, KMXPlusData } from "../kmx-plus";
-import { build_strs_index, BUILDER_STRS } from "./build-strs";
-import { BUILDER_SECTION } from "./builder-section";
+import { KeyFlags, KMXPlusData } from "../kmx-plus.js";
+import { build_strs_index, BUILDER_STRS } from "./build-strs.js";
+import { BUILDER_SECTION } from "./builder-section.js";
/* ------------------------------------------------------------------
* keys section
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-loca.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-loca.ts
similarity index 83%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-loca.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-loca.ts
index 95f060c034..c0f08c8bf8 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-loca.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-loca.ts
@@ -4,9 +4,9 @@
------------------------------------------------------------------ */
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { KMXPlusData } from "../kmx-plus";
-import { build_strs_index, BUILDER_STRS } from "./build-strs";
-import { BUILDER_SECTION } from "./builder-section";
+import { KMXPlusData } from "../kmx-plus.js";
+import { build_strs_index, BUILDER_STRS } from "./build-strs.js";
+import { BUILDER_SECTION } from "./builder-section.js";
/**
* Builder for the 'loca' section
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-meta.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-meta.ts
similarity index 87%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-meta.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-meta.ts
index ac8228814f..5c60472f35 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-meta.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-meta.ts
@@ -4,9 +4,9 @@
------------------------------------------------------------------ */
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { KMXPlusData } from "../kmx-plus";
-import { build_strs_index, BUILDER_STRS } from "./build-strs";
-import { BUILDER_SECTION } from "./builder-section";
+import { KMXPlusData } from "../kmx-plus.js";
+import { build_strs_index, BUILDER_STRS } from "./build-strs.js";
+import { BUILDER_SECTION } from "./builder-section.js";
/**
* Builder for the 'meta' section
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-name.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-name.ts
similarity index 84%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-name.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-name.ts
index d24a30c9fa..423dcccaf0 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-name.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-name.ts
@@ -4,9 +4,9 @@
------------------------------------------------------------------ */
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { KMXPlusData } from "../kmx-plus";
-import { build_strs_index, BUILDER_STRS } from "./build-strs";
-import { BUILDER_SECTION } from "./builder-section";
+import { KMXPlusData } from "../kmx-plus.js";
+import { build_strs_index, BUILDER_STRS } from "./build-strs.js";
+import { BUILDER_SECTION } from "./builder-section.js";
/**
* Builder for the 'name' section
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-ordr.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-ordr.ts
similarity index 83%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-ordr.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-ordr.ts
index 9588ea444a..d83b33d5e2 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-ordr.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-ordr.ts
@@ -1,8 +1,8 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { KMXPlusData } from "../kmx-plus";
-import { build_elem_index, BUILDER_ELEM } from "./build-elem";
-import { BUILDER_STRS } from "./build-strs";
-import { BUILDER_SECTION } from "./builder-section";
+import { KMXPlusData } from "../kmx-plus.js";
+import { build_elem_index, BUILDER_ELEM } from "./build-elem.js";
+import { BUILDER_STRS } from "./build-strs.js";
+import { BUILDER_SECTION } from "./builder-section.js";
/* ------------------------------------------------------------------
* ordr section
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-sect.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-sect.ts
similarity index 93%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-sect.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-sect.ts
index 809c219bfd..b97555d6de 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-sect.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-sect.ts
@@ -1,5 +1,5 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { BUILDER_SECTION } from "./builder-section";
+import { BUILDER_SECTION } from "./builder-section.js";
/* ------------------------------------------------------------------
* sect section
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-strs.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-strs.ts
similarity index 95%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-strs.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-strs.ts
index 4b84e6c022..7cb931fbaa 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-strs.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-strs.ts
@@ -1,6 +1,6 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { Strs, StrsItem } from "../kmx-plus";
-import { BUILDER_SECTION } from "./builder-section";
+import { Strs, StrsItem } from "../kmx-plus.js";
+import { BUILDER_SECTION } from "./builder-section.js";
/* ------------------------------------------------------------------
* strs section
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-tran.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-tran.ts
similarity index 84%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-tran.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-tran.ts
index 7af98a2966..36f0dd0379 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-tran.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-tran.ts
@@ -1,9 +1,9 @@
import { constants } from "@keymanapp/ldml-keyboard-constants";
-import { Bksp, Finl, Tran } from "../kmx-plus";
-import { build_elem_index, BUILDER_ELEM } from "./build-elem";
-import { build_strs_index, BUILDER_STRS } from "./build-strs";
-import { BUILDER_SECTION } from "./builder-section";
+import { Bksp, Finl, Tran } from "../kmx-plus.js";
+import { build_elem_index, BUILDER_ELEM } from "./build-elem.js";
+import { build_strs_index, BUILDER_STRS } from "./build-strs.js";
+import { BUILDER_SECTION } from "./builder-section.js";
/* ------------------------------------------------------------------
* tran section
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-vkey.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-vkey.ts
similarity index 90%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-vkey.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-vkey.ts
index 3bbdb38682..1bf1b877b2 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/build-vkey.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/build-vkey.ts
@@ -1,6 +1,6 @@
import { constants } from '@keymanapp/ldml-keyboard-constants';
-import { KMXPlusData } from "../kmx-plus";
-import { BUILDER_SECTION } from './builder-section';
+import { KMXPlusData } from "../kmx-plus.js";
+import { BUILDER_SECTION } from './builder-section.js';
/* ------------------------------------------------------------------
* vkey section
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/builder-section.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/builder-section.ts
similarity index 100%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/builder-section.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/builder-section.ts
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/kmx-plus-builder.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/kmx-plus-builder.ts
similarity index 89%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus-builder/kmx-plus-builder.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/kmx-plus-builder.ts
index 73c06e98d7..47e5d6745d 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus-builder/kmx-plus-builder.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus-builder/kmx-plus-builder.ts
@@ -1,17 +1,17 @@
import * as r from 'restructure';
-import KMXPlusFile from "../kmx-plus";
+import KMXPlusFile from "../kmx-plus.js";
import { constants } from '@keymanapp/ldml-keyboard-constants';
-import { BUILDER_SECTION } from './builder-section';
-import { BUILDER_SECT, build_sect } from './build-sect';
-import { BUILDER_KEYS, build_keys } from './build-keys';
-import { BUILDER_LOCA, build_loca } from './build-loca';
-import { BUILDER_META, build_meta } from './build-meta';
-import { BUILDER_NAME, build_name } from './build-name';
-import { BUILDER_STRS, build_strs } from './build-strs';
-import { BUILDER_VKEY, build_vkey } from './build-vkey';
-import { BUILDER_TRAN, build_tran } from './build-tran';
-import { BUILDER_ELEM, build_elem } from './build-elem';
-import { BUILDER_ORDR, build_ordr } from './build-ordr';
+import { BUILDER_SECTION } from './builder-section.js';
+import { BUILDER_SECT, build_sect } from './build-sect.js';
+import { BUILDER_KEYS, build_keys } from './build-keys.js';
+import { BUILDER_LOCA, build_loca } from './build-loca.js';
+import { BUILDER_META, build_meta } from './build-meta.js';
+import { BUILDER_NAME, build_name } from './build-name.js';
+import { BUILDER_STRS, build_strs } from './build-strs.js';
+import { BUILDER_VKEY, build_vkey } from './build-vkey.js';
+import { BUILDER_TRAN, build_tran } from './build-tran.js';
+import { BUILDER_ELEM, build_elem } from './build-elem.js';
+import { BUILDER_ORDR, build_ordr } from './build-ordr.js';
type BUILDER_BKSP = BUILDER_TRAN;
type BUILDER_FINL = BUILDER_TRAN;
diff --git a/developer/src/kmc/src/keyman/kmx/kmx-plus.ts b/developer/src/kmc-keyboard/src/kmx/kmx-plus.ts
similarity index 99%
rename from developer/src/kmc/src/keyman/kmx/kmx-plus.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx-plus.ts
index c866ef5f13..2813c6c850 100644
--- a/developer/src/kmc/src/keyman/kmx/kmx-plus.ts
+++ b/developer/src/kmc-keyboard/src/kmx/kmx-plus.ts
@@ -1,8 +1,8 @@
import { constants } from '@keymanapp/ldml-keyboard-constants';
import * as r from 'restructure';
-import { ElementString } from './element-string';
+import { ElementString } from './element-string.js';
-import KMXFile from './kmx';
+import KMXFile from './kmx.js';
// Implementation of file structures from /core/src/ldml/C7043_ldml.md
// Writer in kmx-builder.ts
diff --git a/developer/src/kmc/src/keyman/kmx/kmx.ts b/developer/src/kmc-keyboard/src/kmx/kmx.ts
similarity index 100%
rename from developer/src/kmc/src/keyman/kmx/kmx.ts
rename to developer/src/kmc-keyboard/src/kmx/kmx.ts
diff --git a/developer/src/kmc/src/keyman/ldml-keyboard/ldml-keyboard-xml-reader.ts b/developer/src/kmc-keyboard/src/ldml-keyboard/ldml-keyboard-xml-reader.ts
similarity index 93%
rename from developer/src/kmc/src/keyman/ldml-keyboard/ldml-keyboard-xml-reader.ts
rename to developer/src/kmc-keyboard/src/ldml-keyboard/ldml-keyboard-xml-reader.ts
index e7ac2b2e86..43cafdb340 100644
--- a/developer/src/kmc/src/keyman/ldml-keyboard/ldml-keyboard-xml-reader.ts
+++ b/developer/src/kmc-keyboard/src/ldml-keyboard/ldml-keyboard-xml-reader.ts
@@ -1,8 +1,8 @@
import * as xml2js from 'xml2js';
-import LDMLKeyboardXMLSourceFile from './ldml-keyboard-xml';
-import CompilerCallbacks from '../compiler/callbacks';
+import LDMLKeyboardXMLSourceFile from './ldml-keyboard-xml.js';
+import CompilerCallbacks from '../compiler/callbacks.js';
import Ajv from 'ajv';
-import { CompilerMessages } from '../compiler/messages';
+import { CompilerMessages } from '../compiler/messages.js';
export default class LDMLKeyboardXMLSourceFileReader {
private readonly callbacks: CompilerCallbacks;
diff --git a/developer/src/kmc/src/keyman/ldml-keyboard/ldml-keyboard-xml.ts b/developer/src/kmc-keyboard/src/ldml-keyboard/ldml-keyboard-xml.ts
similarity index 100%
rename from developer/src/kmc/src/keyman/ldml-keyboard/ldml-keyboard-xml.ts
rename to developer/src/kmc-keyboard/src/ldml-keyboard/ldml-keyboard-xml.ts
diff --git a/developer/src/kmc/src/keyman/ldml-keyboard/virtual-key-constants.ts b/developer/src/kmc-keyboard/src/ldml-keyboard/virtual-key-constants.ts
similarity index 100%
rename from developer/src/kmc/src/keyman/ldml-keyboard/virtual-key-constants.ts
rename to developer/src/kmc-keyboard/src/ldml-keyboard/virtual-key-constants.ts
diff --git a/developer/src/kmc-keyboard/src/main.ts b/developer/src/kmc-keyboard/src/main.ts
new file mode 100644
index 0000000000..476d263057
--- /dev/null
+++ b/developer/src/kmc-keyboard/src/main.ts
@@ -0,0 +1,7 @@
+
+export { default as Compiler } from './compiler/compiler.js';
+export { CompilerEvent, default as CompilerCallbacks } from './compiler/callbacks.js';
+export { default as CompilerOptions } from './compiler/compiler-options.js';
+export { CompilerMessages, CompilerErrorSeverity } from './compiler/messages.js';
+export { default as KMXPlusMetadataCompiler } from './compiler/metadata-compiler.js';
+export { default as KMXBuilder } from './kmx/kmx-builder.js';
diff --git a/developer/src/kmc/src/restructure.d.ts b/developer/src/kmc-keyboard/src/restructure.d.ts
similarity index 100%
rename from developer/src/kmc/src/restructure.d.ts
rename to developer/src/kmc-keyboard/src/restructure.d.ts
diff --git a/developer/src/kmc/src/keyman/util/util.ts b/developer/src/kmc-keyboard/src/util/util.ts
similarity index 100%
rename from developer/src/kmc/src/keyman/util/util.ts
rename to developer/src/kmc-keyboard/src/util/util.ts
diff --git a/developer/src/kmc/test/README.md b/developer/src/kmc-keyboard/test/README.md
similarity index 100%
rename from developer/src/kmc/test/README.md
rename to developer/src/kmc-keyboard/test/README.md
diff --git a/developer/src/kmc/test/fixtures/basic.txt b/developer/src/kmc-keyboard/test/fixtures/basic.txt
similarity index 100%
rename from developer/src/kmc/test/fixtures/basic.txt
rename to developer/src/kmc-keyboard/test/fixtures/basic.txt
diff --git a/developer/src/kmc/test/fixtures/basic.xml b/developer/src/kmc-keyboard/test/fixtures/basic.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/basic.xml
rename to developer/src/kmc-keyboard/test/fixtures/basic.xml
diff --git a/developer/src/kmc/test/fixtures/invalid-conforms-to.xml b/developer/src/kmc-keyboard/test/fixtures/invalid-conforms-to.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/invalid-conforms-to.xml
rename to developer/src/kmc-keyboard/test/fixtures/invalid-conforms-to.xml
diff --git a/developer/src/kmc/test/fixtures/invalid-structure-per-dtd.xml b/developer/src/kmc-keyboard/test/fixtures/invalid-structure-per-dtd.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/invalid-structure-per-dtd.xml
rename to developer/src/kmc-keyboard/test/fixtures/invalid-structure-per-dtd.xml
diff --git a/developer/src/kmc/test/fixtures/sections/bksp/minimal.xml b/developer/src/kmc-keyboard/test/fixtures/sections/bksp/minimal.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/bksp/minimal.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/bksp/minimal.xml
diff --git a/developer/src/kmc/test/fixtures/sections/finl/minimal.xml b/developer/src/kmc-keyboard/test/fixtures/sections/finl/minimal.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/finl/minimal.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/finl/minimal.xml
diff --git a/developer/src/kmc/test/fixtures/sections/keys/hardware.xml b/developer/src/kmc-keyboard/test/fixtures/sections/keys/hardware.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/keys/hardware.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/keys/hardware.xml
diff --git a/developer/src/kmc/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml b/developer/src/kmc-keyboard/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/keys/invalid-hardware-too-many-keys.xml
diff --git a/developer/src/kmc/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml b/developer/src/kmc-keyboard/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/keys/invalid-hardware-too-many-rows.xml
diff --git a/developer/src/kmc/test/fixtures/sections/keys/invalid-missing-layer.xml b/developer/src/kmc-keyboard/test/fixtures/sections/keys/invalid-missing-layer.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/keys/invalid-missing-layer.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/keys/invalid-missing-layer.xml
diff --git a/developer/src/kmc/test/fixtures/sections/keys/invalid-undefined-key.xml b/developer/src/kmc-keyboard/test/fixtures/sections/keys/invalid-undefined-key.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/keys/invalid-undefined-key.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/keys/invalid-undefined-key.xml
diff --git a/developer/src/kmc/test/fixtures/sections/keys/minimal.xml b/developer/src/kmc-keyboard/test/fixtures/sections/keys/minimal.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/keys/minimal.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/keys/minimal.xml
diff --git a/developer/src/kmc/test/fixtures/sections/loca/invalid-locale.xml b/developer/src/kmc-keyboard/test/fixtures/sections/loca/invalid-locale.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/loca/invalid-locale.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/loca/invalid-locale.xml
diff --git a/developer/src/kmc/test/fixtures/sections/loca/minimal.xml b/developer/src/kmc-keyboard/test/fixtures/sections/loca/minimal.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/loca/minimal.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/loca/minimal.xml
diff --git a/developer/src/kmc/test/fixtures/sections/loca/multiple.xml b/developer/src/kmc-keyboard/test/fixtures/sections/loca/multiple.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/loca/multiple.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/loca/multiple.xml
diff --git a/developer/src/kmc/test/fixtures/sections/meta/invalid-normalization.xml b/developer/src/kmc-keyboard/test/fixtures/sections/meta/invalid-normalization.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/meta/invalid-normalization.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/meta/invalid-normalization.xml
diff --git a/developer/src/kmc/test/fixtures/sections/meta/invalid-version-1.0.xml b/developer/src/kmc-keyboard/test/fixtures/sections/meta/invalid-version-1.0.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/meta/invalid-version-1.0.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/meta/invalid-version-1.0.xml
diff --git a/developer/src/kmc/test/fixtures/sections/meta/invalid-version-v1.0.3.xml b/developer/src/kmc-keyboard/test/fixtures/sections/meta/invalid-version-v1.0.3.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/meta/invalid-version-v1.0.3.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/meta/invalid-version-v1.0.3.xml
diff --git a/developer/src/kmc/test/fixtures/sections/meta/maximal.xml b/developer/src/kmc-keyboard/test/fixtures/sections/meta/maximal.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/meta/maximal.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/meta/maximal.xml
diff --git a/developer/src/kmc/test/fixtures/sections/meta/minimal.xml b/developer/src/kmc-keyboard/test/fixtures/sections/meta/minimal.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/meta/minimal.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/meta/minimal.xml
diff --git a/developer/src/kmc/test/fixtures/sections/name/minimal.xml b/developer/src/kmc-keyboard/test/fixtures/sections/name/minimal.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/name/minimal.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/name/minimal.xml
diff --git a/developer/src/kmc/test/fixtures/sections/name/multiple.xml b/developer/src/kmc-keyboard/test/fixtures/sections/name/multiple.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/name/multiple.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/name/multiple.xml
diff --git a/developer/src/kmc/test/fixtures/sections/ordr/minimal.xml b/developer/src/kmc-keyboard/test/fixtures/sections/ordr/minimal.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/ordr/minimal.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/ordr/minimal.xml
diff --git a/developer/src/kmc/test/fixtures/sections/tran/minimal.xml b/developer/src/kmc-keyboard/test/fixtures/sections/tran/minimal.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/tran/minimal.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/tran/minimal.xml
diff --git a/developer/src/kmc/test/fixtures/sections/vkey/invalid-from-vkey.xml b/developer/src/kmc-keyboard/test/fixtures/sections/vkey/invalid-from-vkey.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/vkey/invalid-from-vkey.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/vkey/invalid-from-vkey.xml
diff --git a/developer/src/kmc/test/fixtures/sections/vkey/invalid-repeated-vkey.xml b/developer/src/kmc-keyboard/test/fixtures/sections/vkey/invalid-repeated-vkey.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/vkey/invalid-repeated-vkey.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/vkey/invalid-repeated-vkey.xml
diff --git a/developer/src/kmc/test/fixtures/sections/vkey/invalid-to-vkey.xml b/developer/src/kmc-keyboard/test/fixtures/sections/vkey/invalid-to-vkey.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/vkey/invalid-to-vkey.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/vkey/invalid-to-vkey.xml
diff --git a/developer/src/kmc/test/fixtures/sections/vkey/minimal.xml b/developer/src/kmc-keyboard/test/fixtures/sections/vkey/minimal.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/vkey/minimal.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/vkey/minimal.xml
diff --git a/developer/src/kmc/test/fixtures/sections/vkey/redundant.xml b/developer/src/kmc-keyboard/test/fixtures/sections/vkey/redundant.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/vkey/redundant.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/vkey/redundant.xml
diff --git a/developer/src/kmc/test/fixtures/sections/vkey/same-target.xml b/developer/src/kmc-keyboard/test/fixtures/sections/vkey/same-target.xml
similarity index 100%
rename from developer/src/kmc/test/fixtures/sections/vkey/same-target.xml
rename to developer/src/kmc-keyboard/test/fixtures/sections/vkey/same-target.xml
diff --git a/developer/src/kmc/test/helpers/index.ts b/developer/src/kmc-keyboard/test/helpers/index.ts
similarity index 76%
rename from developer/src/kmc/test/helpers/index.ts
rename to developer/src/kmc-keyboard/test/helpers/index.ts
index 7cec75a3b7..0b4e0dc740 100644
--- a/developer/src/kmc/test/helpers/index.ts
+++ b/developer/src/kmc-keyboard/test/helpers/index.ts
@@ -3,14 +3,15 @@
*/
import * as path from 'path';
import * as fs from 'fs';
-import { SectionCompiler } from '../../src/keyman/compiler/section-compiler';
-import KMXPlusFile, { Elem, GlobalSections, Section, Strs } from '../../src/keyman/kmx/kmx-plus';
-import LDMLKeyboardXMLSourceFileReader from '../../src/keyman/ldml-keyboard/ldml-keyboard-xml-reader';
-import { CompilerEvent } from '../../src/keyman/compiler/callbacks';
-import Compiler from '../../src/keyman/compiler/compiler';
+import { fileURLToPath } from 'url';
+import { SectionCompiler } from '../../src/compiler/section-compiler.js';
+import KMXPlusFile, { Elem, GlobalSections, Section, Strs } from '../../src/kmx/kmx-plus.js';
+import LDMLKeyboardXMLSourceFileReader from '../../src/ldml-keyboard/ldml-keyboard-xml-reader.js';
+import { CompilerEvent } from '../../src/compiler/callbacks.js';
+import Compiler from '../../src/compiler/compiler.js';
import { assert } from 'chai';
-import KMXPlusMetadataCompiler from '../../src/keyman/compiler/metadata-compiler';
-import CompilerOptions from '../../src/keyman/compiler/compiler-options';
+import KMXPlusMetadataCompiler from '../../src/compiler/metadata-compiler.js';
+import CompilerOptions from '../../src/compiler/compiler-options.js';
/**
* Builds a path to the fixture with the given path components.
@@ -20,7 +21,7 @@ import CompilerOptions from '../../src/keyman/compiler/compiler-options';
* @param components One or more path components.
*/
export function makePathToFixture(...components: string[]): string {
- return path.join(__dirname, '..', '..', '..', 'test', 'fixtures', ...components);
+ return fileURLToPath(new URL(path.join('..', '..', '..', 'test', 'fixtures', ...components), import.meta.url));
}
@@ -34,7 +35,7 @@ export class CompilerCallbacks {
this.messages.push(event);
}
loadLdmlKeyboardSchema(): Buffer {
- return fs.readFileSync(path.join(__dirname, '..', '..', 'src', 'ldml-keyboard.schema.json'));
+ return fs.readFileSync(new URL(path.join('..', '..', 'src', 'ldml-keyboard.schema.json'), import.meta.url));
}
}
diff --git a/developer/src/kmc/test/ldml-keyboard/test-ldml-keyboard-xml-reader.ts b/developer/src/kmc-keyboard/test/ldml-keyboard/test-ldml-keyboard-xml-reader.ts
similarity index 88%
rename from developer/src/kmc/test/ldml-keyboard/test-ldml-keyboard-xml-reader.ts
rename to developer/src/kmc-keyboard/test/ldml-keyboard/test-ldml-keyboard-xml-reader.ts
index d39f1c4eb8..ecd04762ba 100644
--- a/developer/src/kmc/test/ldml-keyboard/test-ldml-keyboard-xml-reader.ts
+++ b/developer/src/kmc-keyboard/test/ldml-keyboard/test-ldml-keyboard-xml-reader.ts
@@ -1,8 +1,8 @@
import 'mocha';
import {assert} from 'chai';
-import {CompilerCallbacks, makePathToFixture} from '../helpers/index';
-import LDMLKeyboardXMLSourceFileReader from '../../src/keyman/ldml-keyboard/ldml-keyboard-xml-reader';
-import { CompilerMessages } from '../../src/keyman/compiler/messages';
+import {CompilerCallbacks, makePathToFixture} from '../helpers/index.js';
+import LDMLKeyboardXMLSourceFileReader from '../../src/ldml-keyboard/ldml-keyboard-xml-reader.js';
+import { CompilerMessages } from '../../src/compiler/messages.js';
describe('ldml keyboard xml reader tests', function() {
this.slow(500); // 0.5 sec -- json schema validation takes a while
diff --git a/developer/src/kmc/test/test-base.ts b/developer/src/kmc-keyboard/test/test-base.ts
similarity index 100%
rename from developer/src/kmc/test/test-base.ts
rename to developer/src/kmc-keyboard/test/test-base.ts
diff --git a/developer/src/kmc/test/test-bksp.ts b/developer/src/kmc-keyboard/test/test-bksp.ts
similarity index 87%
rename from developer/src/kmc/test/test-bksp.ts
rename to developer/src/kmc-keyboard/test/test-bksp.ts
index 4426341848..d6b234f3a2 100644
--- a/developer/src/kmc/test/test-bksp.ts
+++ b/developer/src/kmc-keyboard/test/test-bksp.ts
@@ -1,8 +1,8 @@
import 'mocha';
import { assert } from 'chai';
-import { BkspCompiler } from '../src/keyman/compiler/bksp';
-import { CompilerCallbacks, loadSectionFixture } from './helpers';
-import { Bksp, BkspItemFlags } from '../src/keyman/kmx/kmx-plus';
+import { BkspCompiler } from '../src/compiler/bksp.js';
+import { CompilerCallbacks, loadSectionFixture } from './helpers/index.js';
+import { Bksp, BkspItemFlags } from '../src/kmx/kmx-plus.js';
//import { CompilerMessages } from './keyman/compiler/messages';
describe('bksp', function () {
diff --git a/developer/src/kmc/test/test-compiler-e2e.ts b/developer/src/kmc-keyboard/test/test-compiler-e2e.ts
similarity index 81%
rename from developer/src/kmc/test/test-compiler-e2e.ts
rename to developer/src/kmc-keyboard/test/test-compiler-e2e.ts
index c59792bfdd..91508ee986 100644
--- a/developer/src/kmc/test/test-compiler-e2e.ts
+++ b/developer/src/kmc-keyboard/test/test-compiler-e2e.ts
@@ -1,8 +1,11 @@
import 'mocha';
import {assert} from 'chai';
-import hextobin from '@keymanapp/hextobin';
-import KMXBuilder from '../src/keyman/kmx/kmx-builder';
-import {checkMessages, compileKeyboard, CompilerCallbacks, makePathToFixture} from './helpers/index';
+import x_hextobin from '@keymanapp/hextobin';
+import KMXBuilder from '../src/kmx/kmx-builder.js';
+import {checkMessages, compileKeyboard, CompilerCallbacks, makePathToFixture} from './helpers/index.js';
+
+// const __filename = fileURLToPath(import.meta.url);
+const hextobin = (x_hextobin as any).default;
describe('compiler-tests', function() {
this.slow(500); // 0.5 sec -- json schema validation takes a while
diff --git a/developer/src/kmc/test/test-finl.ts b/developer/src/kmc-keyboard/test/test-finl.ts
similarity index 87%
rename from developer/src/kmc/test/test-finl.ts
rename to developer/src/kmc-keyboard/test/test-finl.ts
index a50cbdad1a..ad4749e574 100644
--- a/developer/src/kmc/test/test-finl.ts
+++ b/developer/src/kmc-keyboard/test/test-finl.ts
@@ -1,8 +1,8 @@
import 'mocha';
import { assert } from 'chai';
-import { FinlCompiler } from '../src/keyman/compiler/tran';
-import { CompilerCallbacks, loadSectionFixture } from './helpers';
-import { Finl, FinlItemFlags } from '../src/keyman/kmx/kmx-plus';
+import { FinlCompiler } from '../src/compiler/tran.js';
+import { CompilerCallbacks, loadSectionFixture } from './helpers/index.js';
+import { Finl, FinlItemFlags } from '../src/kmx/kmx-plus.js';
//import { CompilerMessages } from './keyman/compiler/messages';
describe('finl', function () {
diff --git a/developer/src/kmc/test/test-keys.ts b/developer/src/kmc-keyboard/test/test-keys.ts
similarity index 93%
rename from developer/src/kmc/test/test-keys.ts
rename to developer/src/kmc-keyboard/test/test-keys.ts
index cbe3995dd5..90d8c06a41 100644
--- a/developer/src/kmc/test/test-keys.ts
+++ b/developer/src/kmc-keyboard/test/test-keys.ts
@@ -1,9 +1,9 @@
import 'mocha';
import { assert } from 'chai';
-import { KeysCompiler } from '../src/keyman/compiler/keys';
-import { CompilerCallbacks, loadSectionFixture } from './helpers';
-import { Keys } from '../src/keyman/kmx/kmx-plus';
-import { CompilerMessages } from '../src/keyman/compiler/messages';
+import { KeysCompiler } from '../src/compiler/keys.js';
+import { CompilerCallbacks, loadSectionFixture } from './helpers/index.js';
+import { Keys } from '../src/kmx/kmx-plus.js';
+import { CompilerMessages } from '../src/compiler/messages.js';
describe('keys', function () {
this.slow(500); // 0.5 sec -- json schema validation takes a while
diff --git a/developer/src/kmc/test/test-loca.ts b/developer/src/kmc-keyboard/test/test-loca.ts
similarity index 93%
rename from developer/src/kmc/test/test-loca.ts
rename to developer/src/kmc-keyboard/test/test-loca.ts
index d2bbf6158f..5baa334718 100644
--- a/developer/src/kmc/test/test-loca.ts
+++ b/developer/src/kmc-keyboard/test/test-loca.ts
@@ -1,9 +1,9 @@
import 'mocha';
import { assert } from 'chai';
-import { LocaCompiler } from '../src/keyman/compiler/loca';
-import { CompilerCallbacks, loadSectionFixture } from './helpers';
-import { Loca } from '../src/keyman/kmx/kmx-plus';
-import { CompilerMessages } from '../src/keyman/compiler/messages';
+import { LocaCompiler } from '../src/compiler/loca.js';
+import { CompilerCallbacks, loadSectionFixture } from './helpers/index.js';
+import { Loca } from '../src/kmx/kmx-plus.js';
+import { CompilerMessages } from '../src/compiler/messages.js';
describe('loca', function () {
this.slow(500); // 0.5 sec -- json schema validation takes a while
diff --git a/developer/src/kmc/test/test-messages.ts b/developer/src/kmc-keyboard/test/test-messages.ts
similarity index 99%
rename from developer/src/kmc/test/test-messages.ts
rename to developer/src/kmc-keyboard/test/test-messages.ts
index 831bb1e758..9f548c8ce4 100644
--- a/developer/src/kmc/test/test-messages.ts
+++ b/developer/src/kmc-keyboard/test/test-messages.ts
@@ -1,6 +1,6 @@
import 'mocha';
import {assert, expect} from 'chai';
-import { CompilerErrorSeverity, CompilerMessages } from '../src/keyman/compiler/messages';
+import { CompilerErrorSeverity, CompilerMessages } from '../src/compiler/messages.js';
const toTitleCase = (s: string) => s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
diff --git a/developer/src/kmc/test/test-meta.ts b/developer/src/kmc-keyboard/test/test-meta.ts
similarity index 93%
rename from developer/src/kmc/test/test-meta.ts
rename to developer/src/kmc-keyboard/test/test-meta.ts
index 74175baaef..ffbc0c1dab 100644
--- a/developer/src/kmc/test/test-meta.ts
+++ b/developer/src/kmc-keyboard/test/test-meta.ts
@@ -1,9 +1,9 @@
import 'mocha';
import {assert} from 'chai';
-import { MetaCompiler } from '../src/keyman/compiler/meta';
-import { CompilerCallbacks, loadSectionFixture } from './helpers';
-import { KeyboardSettings, Meta } from '../src/keyman/kmx/kmx-plus';
-import { CompilerMessages } from '../src/keyman/compiler/messages';
+import { MetaCompiler } from '../src/compiler/meta.js';
+import { CompilerCallbacks, loadSectionFixture } from './helpers/index.js';
+import { KeyboardSettings, Meta } from '../src/kmx/kmx-plus.js';
+import { CompilerMessages } from '../src/compiler/messages.js';
describe('meta', function () {
this.slow(500); // 0.5 sec -- json schema validation takes a while
diff --git a/developer/src/kmc/test/test-metadata-compiler.ts b/developer/src/kmc-keyboard/test/test-metadata-compiler.ts
similarity index 94%
rename from developer/src/kmc/test/test-metadata-compiler.ts
rename to developer/src/kmc-keyboard/test/test-metadata-compiler.ts
index 1bb451faae..5cfb9678e3 100644
--- a/developer/src/kmc/test/test-metadata-compiler.ts
+++ b/developer/src/kmc-keyboard/test/test-metadata-compiler.ts
@@ -1,9 +1,8 @@
import 'mocha';
import {assert} from 'chai';
-import { checkMessages, compileKeyboard, CompilerCallbacks, makePathToFixture } from './helpers';
-import KMXFile from '../src/keyman/kmx/kmx';
-
-const KEYMAN_VERSION = require("@keymanapp/keyman-version").KEYMAN_VERSION;
+import { checkMessages, compileKeyboard, CompilerCallbacks, makePathToFixture } from './helpers/index.js';
+import KMXFile from '../src/kmx/kmx.js';
+import KEYMAN_VERSION from '@keymanapp/keyman-version/keyman-version.mjs';
describe('kmx metadata compiler', function () {
this.slow(500); // 0.5 sec -- json schema validation takes a while
diff --git a/developer/src/kmc/test/test-name.ts b/developer/src/kmc-keyboard/test/test-name.ts
similarity index 91%
rename from developer/src/kmc/test/test-name.ts
rename to developer/src/kmc-keyboard/test/test-name.ts
index edb4770baf..e3c80b0022 100644
--- a/developer/src/kmc/test/test-name.ts
+++ b/developer/src/kmc-keyboard/test/test-name.ts
@@ -1,8 +1,8 @@
import 'mocha';
import { assert } from 'chai';
-import { NameCompiler } from '../src/keyman/compiler/name';
-import { CompilerCallbacks, loadSectionFixture } from './helpers';
-import { Name } from '../src/keyman/kmx/kmx-plus';
+import { NameCompiler } from '../src/compiler/name.js';
+import { CompilerCallbacks, loadSectionFixture } from './helpers/index.js';
+import { Name } from '../src/kmx/kmx-plus.js';
//import { CompilerMessages } from './keyman/compiler/messages';
describe('name', function () {
diff --git a/developer/src/kmc/test/test-ordr.ts b/developer/src/kmc-keyboard/test/test-ordr.ts
similarity index 91%
rename from developer/src/kmc/test/test-ordr.ts
rename to developer/src/kmc-keyboard/test/test-ordr.ts
index 2cc8e4f7ca..9e54d06e4b 100644
--- a/developer/src/kmc/test/test-ordr.ts
+++ b/developer/src/kmc-keyboard/test/test-ordr.ts
@@ -1,8 +1,8 @@
import 'mocha';
import { assert } from 'chai';
-import { OrdrCompiler } from '../src/keyman/compiler/ordr';
-import { CompilerCallbacks, loadSectionFixture } from './helpers';
-import { Ordr } from '../src/keyman/kmx/kmx-plus';
+import { OrdrCompiler } from '../src/compiler/ordr.js';
+import { CompilerCallbacks, loadSectionFixture } from './helpers/index.js';
+import { Ordr } from '../src/kmx/kmx-plus.js';
//import { CompilerMessages } from './keyman/compiler/messages';
describe('ordr', function () {
diff --git a/developer/src/kmc/test/test-tran.ts b/developer/src/kmc-keyboard/test/test-tran.ts
similarity index 87%
rename from developer/src/kmc/test/test-tran.ts
rename to developer/src/kmc-keyboard/test/test-tran.ts
index 966c4555ba..5004d5e876 100644
--- a/developer/src/kmc/test/test-tran.ts
+++ b/developer/src/kmc-keyboard/test/test-tran.ts
@@ -1,8 +1,8 @@
import 'mocha';
import { assert } from 'chai';
-import { TranCompiler } from '../src/keyman/compiler/tran';
-import { CompilerCallbacks, loadSectionFixture } from './helpers';
-import { Tran, TranItemFlags } from '../src/keyman/kmx/kmx-plus';
+import { TranCompiler } from '../src/compiler/tran.js';
+import { CompilerCallbacks, loadSectionFixture } from './helpers/index.js';
+import { Tran, TranItemFlags } from '../src/kmx/kmx-plus.js';
//import { CompilerMessages } from './keyman/compiler/messages';
describe('tran', function () {
diff --git a/developer/src/kmc/test/test-virtual-key-constants.ts b/developer/src/kmc-keyboard/test/test-virtual-key-constants.ts
similarity index 94%
rename from developer/src/kmc/test/test-virtual-key-constants.ts
rename to developer/src/kmc-keyboard/test/test-virtual-key-constants.ts
index dc4d694218..ea16a19fb4 100644
--- a/developer/src/kmc/test/test-virtual-key-constants.ts
+++ b/developer/src/kmc-keyboard/test/test-virtual-key-constants.ts
@@ -1,5 +1,5 @@
import { expect } from 'chai';
-import { LdmlVkeyNames } from '../src/keyman/ldml-keyboard/virtual-key-constants';
+import { LdmlVkeyNames } from '../src/ldml-keyboard/virtual-key-constants.js';
describe('virtual key constants', function () {
diff --git a/developer/src/kmc/test/test-vkey.ts b/developer/src/kmc-keyboard/test/test-vkey.ts
similarity index 91%
rename from developer/src/kmc/test/test-vkey.ts
rename to developer/src/kmc-keyboard/test/test-vkey.ts
index f597239490..9c8dd49ffa 100644
--- a/developer/src/kmc/test/test-vkey.ts
+++ b/developer/src/kmc-keyboard/test/test-vkey.ts
@@ -1,10 +1,10 @@
import 'mocha';
import { assert } from 'chai';
-import { VkeyCompiler } from '../src/keyman/compiler/vkey';
-import { CompilerCallbacks, loadSectionFixture } from './helpers';
-import { Vkey } from '../src/keyman/kmx/kmx-plus';
-import { CompilerMessages } from '../src/keyman/compiler/messages';
-import { USVirtualKeyCodes } from '../src/keyman/ldml-keyboard/virtual-key-constants';
+import { VkeyCompiler } from '../src/compiler/vkey.js';
+import { CompilerCallbacks, loadSectionFixture } from './helpers/index.js';
+import { Vkey } from '../src/kmx/kmx-plus.js';
+import { CompilerMessages } from '../src/compiler/messages.js';
+import { USVirtualKeyCodes } from '../src/ldml-keyboard/virtual-key-constants.js';
describe('vkey compiler', function () {
this.slow(500); // 0.5 sec -- json schema validation takes a while
diff --git a/developer/src/kmc-keyboard/test/tsconfig.json b/developer/src/kmc-keyboard/test/tsconfig.json
new file mode 100644
index 0000000000..1576a71da8
--- /dev/null
+++ b/developer/src/kmc-keyboard/test/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "extends": "../../kmc/tsconfig.kmc-base.json",
+
+ "compilerOptions": {
+ "rootDir": ".",
+ "rootDirs": ["./", "../src/"],
+ "outDir": "../build/test",
+ "baseUrl": ".",
+ "strictNullChecks": false, // TODO: get rid of this as some point
+ },
+ "include": [
+ "**/test-*.ts",
+ "./helpers/index.ts"
+ ],
+ "references": [
+ { "path": "../../../../common/web/keyman-version/tsconfig.esm.json" },
+ { "path": "../" }
+ ]
+}
\ No newline at end of file
diff --git a/developer/src/kmc-keyboard/tsconfig.json b/developer/src/kmc-keyboard/tsconfig.json
new file mode 100644
index 0000000000..46df6cf5c7
--- /dev/null
+++ b/developer/src/kmc-keyboard/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "extends": "../kmc/tsconfig.kmc-base.json",
+
+ "compilerOptions": {
+ "outDir": "build/src/",
+ "rootDir": "src/",
+ "baseUrl": ".",
+ "allowSyntheticDefaultImports": true // for ajv
+ },
+ "include": [
+ "src/**/*.ts"
+ ],
+ "references": [
+ { "path": "../../../common/web/keyman-version/tsconfig.esm.json" },
+ { "path": "../../../core/include/ldml/"}
+ ]
+}
diff --git a/developer/src/kmc-model-info/Makefile b/developer/src/kmc-model-info/Makefile
new file mode 100644
index 0000000000..f3e73efd12
--- /dev/null
+++ b/developer/src/kmc-model-info/Makefile
@@ -0,0 +1,38 @@
+#
+# Keyman Developer - kmc Model-Info Compiler Makefile
+#
+
+!include ..\Defines.mak
+
+# We don't depend on configure here because kmc-keyboard does that already
+build: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh build
+
+configure: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh configure
+
+clean: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh clean
+
+test: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh test
+
+# build.sh bundle must be run from shell as it requires a temp folder to be
+# passed in. See inst/download.in.mak for instantiation.
+
+publish: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh publish
+
+signcode:
+ @rem nothing to do
+
+wrap-symbols:
+ @rem nothing to do
+
+test-manifest:
+ @rem nothing to do
+
+install:
+ @rem nothing to do
+
+!include ..\Target.mak
diff --git a/developer/src/kmc-model-info/build.sh b/developer/src/kmc-model-info/build.sh
new file mode 100755
index 0000000000..b7f1b6c3b2
--- /dev/null
+++ b/developer/src/kmc-model-info/build.sh
@@ -0,0 +1,63 @@
+#!/usr/bin/env bash
+#
+# Compiles the kmc lexical model model-info compiler.
+#
+
+# Exit on command failure and when using unset variables:
+set -eu
+
+## START STANDARD BUILD SCRIPT INCLUDE
+# adjust relative paths as necessary
+THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
+. "$(dirname "$THIS_SCRIPT")/../../../resources/build/build-utils.sh"
+## END STANDARD BUILD SCRIPT INCLUDE
+
+cd "$THIS_SCRIPT_PATH"
+
+. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
+
+builder_describe "Build Keyman kmc Lexical Model model-info Compiler module" \
+ "configure" \
+ "build" \
+ "clean" \
+ "test" \
+ "publish publish to npm" \
+ "--dry-run,-n don't actually publish, just dry run"
+
+builder_parse "$@"
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action clean; then
+ rm -rf ./build/ ./tsconfig.tsbuildinfo
+ builder_report success clean
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action configure; then
+ verify_npm_setup
+ builder_report success configure
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action build; then
+ npm run build
+ builder_report success build
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action test; then
+ #npm test - no tests as yet
+ builder_report success test
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action publish; then
+ . "$KEYMAN_ROOT/resources/build/npm-publish.inc.sh"
+ npm_publish
+ builder_report success publish
+fi
diff --git a/developer/src/kmc-model-info/package.json b/developer/src/kmc-model-info/package.json
new file mode 100644
index 0000000000..2ab327ac09
--- /dev/null
+++ b/developer/src/kmc-model-info/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@keymanapp/kmc-model-info",
+ "description": "Keyman Developer .model_info compiler",
+ "keywords": [
+ "keyboard",
+ "keyman",
+ "unicode",
+ "lexical-model",
+ "predictive-text"
+ ],
+ "type": "module",
+ "exports": {
+ ".": "./build/src/model-info-compiler.js"
+ },
+ "scripts": {
+ "build": "tsc -b",
+ "test": "cd test && tsc -b && cd .. && c8 mocha",
+ "prepublishOnly": "npm run build"
+ },
+ "author": "Marc Durdin (https://github.com/mcdurdin)",
+ "contributors": [
+ "Eddie Antonio Santos ",
+ "Joshua Horton"
+ ],
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/keymanapp/keyman/issues"
+ },
+ "dependencies": {
+ "@keymanapp/keyman-version": "*",
+ "@keymanapp/kmc-package": "*",
+ "@keymanapp/models-types": "*"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.1.7",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.14.6",
+ "@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
+ "chai": "^4.3.4",
+ "chalk": "^2.4.2",
+ "mocha": "^8.4.0",
+ "ts-node": "^9.1.1",
+ "typescript": "^4.5.4"
+ },
+ "mocha": {
+ "spec": "build/test/**/test-*.js",
+ "require": [
+ "source-map-support/register"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/keymanapp/keyman.git"
+ }
+}
diff --git a/developer/src/kmlmc/source/util/min-keyman-version.ts b/developer/src/kmc-model-info/src/min-keyman-version.ts
similarity index 100%
rename from developer/src/kmlmc/source/util/min-keyman-version.ts
rename to developer/src/kmc-model-info/src/min-keyman-version.ts
diff --git a/developer/src/kmlmc/source/model-info-compiler/model-info-compiler.ts b/developer/src/kmc-model-info/src/model-info-compiler.ts
similarity index 93%
rename from developer/src/kmlmc/source/model-info-compiler/model-info-compiler.ts
rename to developer/src/kmc-model-info/src/model-info-compiler.ts
index e8606b0dc6..8c9b10db4d 100644
--- a/developer/src/kmlmc/source/model-info-compiler/model-info-compiler.ts
+++ b/developer/src/kmc-model-info/src/model-info-compiler.ts
@@ -3,14 +3,13 @@
* compiled files to produce a comprehensive .model_info file.
*/
-///
-///
+///
+///
import * as fs from "fs";
import * as path from "path";
-import { minKeymanVersion } from "../util/min-keyman-version";
-import {SysExits} from "../util/sysexits";
-
+import { minKeymanVersion } from "./min-keyman-version.js";
+// import KmpJsonFile from "@keymanapp/kmc-package/kmp-json-file";
export class ModelInfoOptions {
/** The identifier for the model */
@@ -96,8 +95,7 @@ export function writeMergedModelMetadataFile(
// we strip the mailto: from the .kps file for the .model_info
let match = author.url.match(/^(mailto\:)?(.+)$/);
if (match === null) {
- console.error(`Invalid author email: ${author.url}`);
- process.exit(SysExits.EX_DATAERR);
+ throw new Error(`Invalid author email: ${author.url}`);
}
let email = match[2];
diff --git a/developer/src/kmlmc/source/lexical-model-compiler/model-info-file.ts b/developer/src/kmc-model-info/src/model-info-file.ts
similarity index 100%
rename from developer/src/kmlmc/source/lexical-model-compiler/model-info-file.ts
rename to developer/src/kmc-model-info/src/model-info-file.ts
diff --git a/developer/src/kmc-model-info/tsconfig.json b/developer/src/kmc-model-info/tsconfig.json
new file mode 100644
index 0000000000..1609623edf
--- /dev/null
+++ b/developer/src/kmc-model-info/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "extends": "../kmc/tsconfig.kmc-base.json",
+
+ "compilerOptions": {
+ "outDir": "build/src/",
+ "rootDir": "src/",
+ "baseUrl": ".",
+ "paths": {
+ }
+ },
+ "include": [
+ "src/**/*.ts"
+ ],
+ "references": [
+ { "path": "../kmc-package" } // can we eliminate this in future?
+ ]
+}
diff --git a/developer/src/kmc-model/Makefile b/developer/src/kmc-model/Makefile
new file mode 100644
index 0000000000..353d923bd4
--- /dev/null
+++ b/developer/src/kmc-model/Makefile
@@ -0,0 +1,38 @@
+#
+# Keyman Developer - kmc Model Compiler Makefile
+#
+
+!include ..\Defines.mak
+
+# We don't depend on configure here because kmc-keyboard does that already
+build: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh build
+
+configure: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh configure
+
+clean: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh clean
+
+test: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh test
+
+# build.sh bundle must be run from shell as it requires a temp folder to be
+# passed in. See inst/download.in.mak for instantiation.
+
+publish: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh publish
+
+signcode:
+ @rem nothing to do
+
+wrap-symbols:
+ @rem nothing to do
+
+test-manifest:
+ @rem nothing to do
+
+install:
+ @rem nothing to do
+
+!include ..\Target.mak
diff --git a/developer/src/kmc-model/build.sh b/developer/src/kmc-model/build.sh
new file mode 100755
index 0000000000..5833db2c37
--- /dev/null
+++ b/developer/src/kmc-model/build.sh
@@ -0,0 +1,67 @@
+#!/usr/bin/env bash
+#
+# Compiles the kmc lexical model compiler.
+#
+
+# Exit on command failure and when using unset variables:
+set -eu
+
+## START STANDARD BUILD SCRIPT INCLUDE
+# adjust relative paths as necessary
+THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
+. "$(dirname "$THIS_SCRIPT")/../../../resources/build/build-utils.sh"
+## END STANDARD BUILD SCRIPT INCLUDE
+
+cd "$THIS_SCRIPT_PATH"
+
+. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
+
+builder_describe "Build Keyman kmc Lexical Model Compiler module" \
+ "configure" \
+ "build" \
+ "clean" \
+ "test" \
+ "publish publish to npm" \
+ "--dry-run,-n don't actually publish, just dry run"
+
+builder_parse "$@"
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action clean; then
+ rm -rf ./build/ ./tsconfig.tsbuildinfo
+ builder_report success clean
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action configure; then
+ verify_npm_setup
+ builder_report success configure
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action build; then
+ # Note: build-cjs only emits lexical-model-compiler.cjs at this time, as that
+ # is the only file required by other non-ES modules
+ # (common/web/input-processor tests)
+ mkdir -p build/cjs-src
+ npm run build
+ builder_report success build
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action test; then
+ npm test
+ builder_report success test
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action publish; then
+ . "$KEYMAN_ROOT/resources/build/npm-publish.inc.sh"
+ npm_publish
+ builder_report success publish
+fi
diff --git a/developer/src/kmlmc/package.json b/developer/src/kmc-model/package.json
similarity index 55%
rename from developer/src/kmlmc/package.json
rename to developer/src/kmc-model/package.json
index 91b2583b72..54d6ce78fd 100644
--- a/developer/src/kmlmc/package.json
+++ b/developer/src/kmc-model/package.json
@@ -1,21 +1,22 @@
{
- "name": "@keymanapp/lexical-model-compiler",
+ "name": "@keymanapp/kmc-model",
"description": "Keyman Developer lexical model compiler",
"keywords": [
"keyboard",
- "predictive-text",
"keyman",
+ "unicode",
"lexical-model",
- "unicode"
+ "predictive-text"
],
- "scripts": {
- "build": "tsc -b",
- "test": "cd tests && tsc -b && cd .. && mocha",
- "prepublishOnly": "npm run build"
+ "type": "module",
+ "exports": {
+ ".": "./build/src/main.js"
},
- "repository": {
- "type": "git",
- "url": "https://github.com/keymanapp/keyman"
+ "scripts": {
+ "build": "tsc -b && npm run build-cjs",
+ "build-cjs": "esbuild build/src/lexical-model-compiler.js --bundle --platform=node --external:./node_modules/* > build/cjs-src/lexical-model-compiler.cjs",
+ "test": "cd test && tsc -b && cd .. && c8 mocha",
+ "prepublishOnly": "npm run build"
},
"author": "Marc Durdin (https://github.com/mcdurdin)",
"contributors": [
@@ -26,36 +27,31 @@
"bugs": {
"url": "https://github.com/keymanapp/keyman/issues"
},
- "homepage": "https://github.com/keymanapp/keyman/tree/master/common/predictive-text#readme",
- "bin": {
- "kmlmc": "dist/kmlmc.js",
- "kmlmp": "dist/kmlmp.js",
- "kmlmi": "dist/kmlmi.js"
- },
- "engines": {
- "node": ">=16.0.0"
- },
"dependencies": {
+ "@keymanapp/keyman-version": "*",
"@keymanapp/models-types": "*",
- "commander": "^3.0.0",
- "typescript": "^4.5.4",
- "xml2js": "^0.4.19"
+ "typescript": "^4.8.3"
},
"devDependencies": {
- "@keymanapp/models-templates": "*",
- "@keymanapp/models-wordbreakers": "*",
- "@keymanapp/keyman-version": "*",
"@types/chai": "^4.1.7",
"@types/mocha": "^5.2.7",
"@types/node": "^10.14.6",
"@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
"chai": "^4.3.4",
"chalk": "^2.4.2",
- "jszip": "^3.7.0",
- "mocha": "^8.4.0",
+ "esbuild": "^0.15.7",
+ "mocha": "^10.0.0",
"ts-node": "^9.1.1"
},
"mocha": {
- "spec": "dist-tests/**/test-*.js"
+ "spec": "build/test/**/test-*.js",
+ "require": [
+ "source-map-support/register"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/keymanapp/keyman.git"
}
}
diff --git a/developer/src/kmlmc/source/lexical-model-compiler/build-trie.ts b/developer/src/kmc-model/src/build-trie.ts
similarity index 99%
rename from developer/src/kmlmc/source/lexical-model-compiler/build-trie.ts
rename to developer/src/kmc-model/src/build-trie.ts
index 8bf49a5124..75dc2db592 100644
--- a/developer/src/kmlmc/source/lexical-model-compiler/build-trie.ts
+++ b/developer/src/kmc-model/src/build-trie.ts
@@ -1,5 +1,5 @@
import { readFileSync } from "fs";
-import { log, KeymanCompilerError } from "../errors";
+import { log, KeymanCompilerError } from "./model-compiler-errors.js";
// Supports LF or CRLF line terminators.
const NEWLINE_SEPARATOR = /\u000d?\u000a/;
diff --git a/developer/src/kmlmc/source/lexical-model-compiler/join-word-breaker-decorator.ts b/developer/src/kmc-model/src/join-word-breaker-decorator.ts
similarity index 100%
rename from developer/src/kmlmc/source/lexical-model-compiler/join-word-breaker-decorator.ts
rename to developer/src/kmc-model/src/join-word-breaker-decorator.ts
diff --git a/developer/src/kmlmc/source/lexical-model-compiler/lexical-model-compiler.ts b/developer/src/kmc-model/src/lexical-model-compiler.ts
similarity index 95%
rename from developer/src/kmlmc/source/lexical-model-compiler/lexical-model-compiler.ts
rename to developer/src/kmc-model/src/lexical-model-compiler.ts
index 6e9cdf2676..17101b9dd7 100644
--- a/developer/src/kmlmc/source/lexical-model-compiler/lexical-model-compiler.ts
+++ b/developer/src/kmc-model/src/lexical-model-compiler.ts
@@ -3,15 +3,15 @@
*/
///
-///
import * as ts from "typescript";
import * as fs from "fs";
import * as path from "path";
-import { createTrieDataStructure } from "./build-trie";
-import { ModelDefinitions } from "./model-definitions";
-import {decorateWithJoin} from "./join-word-breaker-decorator";
-import {decorateWithScriptOverrides} from "./script-overrides-decorator";
+import { createTrieDataStructure } from "./build-trie.js";
+import { ModelDefinitions } from "./model-definitions.js";
+import {decorateWithJoin} from "./join-word-breaker-decorator.js";
+import {decorateWithScriptOverrides} from "./script-overrides-decorator.js";
+import { LexicalModelSource, WordBreakerSpec, SimpleWordBreakerSpec } from "./lexical-model.js";
export default class LexicalModelCompiler {
@@ -51,7 +51,7 @@ export default class LexicalModelCompiler {
let filenames = modelSource.sources.map(filename => path.join(sourcePath, filename));
let definitions = new ModelDefinitions(modelSource);
-
+
func += definitions.compileDefinitions();
// Needs the actual searchTermToKey closure...
diff --git a/developer/src/kmlmc/source/lexical-model-compiler/lexical-model.ts b/developer/src/kmc-model/src/lexical-model.ts
similarity index 87%
rename from developer/src/kmlmc/source/lexical-model-compiler/lexical-model.ts
rename to developer/src/kmc-model/src/lexical-model.ts
index e1b55266d0..794d7763b2 100644
--- a/developer/src/kmlmc/source/lexical-model-compiler/lexical-model.ts
+++ b/developer/src/kmc-model/src/lexical-model.ts
@@ -3,7 +3,7 @@
* the LMLayer's internal worker code, so we provide those definitions too.
*/
-interface LexicalModelDeclaration {
+export interface LexicalModelDeclaration {
readonly format: 'trie-1.0'|'fst-foma-1.0'|'custom-1.0',
//... metadata ...
}
@@ -16,7 +16,7 @@ interface LexicalModelDeclaration {
*
* @since 14.0
*/
-interface WordBreakerSpec {
+ export interface WordBreakerSpec {
readonly use: SimpleWordBreakerSpec;
/**
* If present, joins words that were split by the word breaker
@@ -43,27 +43,27 @@ interface WordBreakerSpec {
*
* @since 11.0
*/
-type SimpleWordBreakerSpec = 'default' | 'ascii' | WordBreakingFunction;
+ export type SimpleWordBreakerSpec = 'default' | 'ascii' | WordBreakingFunction;
/**
* Simplifies input text to facilitate finding entries within a lexical model's
* lexicon.
* @since 11.0
*/
-type SimpleWordformToKeySpec = (term: string) => string;
+ export type SimpleWordformToKeySpec = (term: string) => string;
/**
* Simplifies input text to facilitate finding entries within a lexical model's
* lexicon, using the model's `applyCasing` function to assist in the keying process.
* @since 14.0
*/
- type CasedWordformToKeySpec = (term: string, applyCasing?: CasingFunction) => string;
+export type CasedWordformToKeySpec = (term: string, applyCasing?: CasingFunction) => string;
/**
* Simplifies input text to facilitate finding entries within a lexical model's
* lexicon.
*/
-type WordformToKeySpec = SimpleWordformToKeySpec | CasedWordformToKeySpec;
+ export type WordformToKeySpec = SimpleWordformToKeySpec | CasedWordformToKeySpec;
/**
* Override the default word breaking behaviour for some scripts.
@@ -89,10 +89,10 @@ type WordformToKeySpec = SimpleWordformToKeySpec | CasedWordformToKeySpec;
*
* @since 14.0
*/
-type OverrideScriptDefaults = 'break-words-at-spaces';
+export type OverrideScriptDefaults = 'break-words-at-spaces';
-interface LexicalModelSource extends LexicalModelDeclaration {
+export interface LexicalModelSource extends LexicalModelDeclaration {
readonly sources: Array;
/**
* The name of the type to instantiate (without parameters) as the base object for a custom predictive model.
@@ -114,7 +114,7 @@ interface LexicalModelSource extends LexicalModelDeclaration {
* - 'initial' -- a version preserving the input casing aside from the initial character,
* which is uppercased (like with proper nouns and sentence-initial words in English
* sentences.)
- *
+ *
* This is only utilized if `languageUsesCasing` is defined and set to `true`.
* @since 14.0
*/
@@ -145,6 +145,6 @@ interface LexicalModelSource extends LexicalModelDeclaration {
readonly punctuation?: LexicalModelPunctuation;
}
-interface LexicalModelCompiled extends LexicalModelDeclaration {
+export interface LexicalModelCompiled extends LexicalModelDeclaration {
readonly id: string;
}
diff --git a/developer/src/kmlmc/source/util/util.ts b/developer/src/kmc-model/src/main.ts
similarity index 78%
rename from developer/src/kmlmc/source/util/util.ts
rename to developer/src/kmc-model/src/main.ts
index c2d45b1fb5..d5f34b95e9 100644
--- a/developer/src/kmlmc/source/util/util.ts
+++ b/developer/src/kmc-model/src/main.ts
@@ -1,11 +1,9 @@
-// TODO: this file is really only for lexical model compiler tests. Find a good name.
-//
import * as fs from 'fs';
import * as path from 'path';
-import * as ts from 'typescript';
+import ts from 'typescript';
-import { SysExits } from "./sysexits";
-import LexicalModelCompiler from '../lexical-model-compiler/lexical-model-compiler';
+import LexicalModelCompiler from './lexical-model-compiler.js';
+import { LexicalModelSource } from './lexical-model.js';
/**
* Compiles a model.ts file, using paths relative to its location.
@@ -54,9 +52,7 @@ export function loadFromFilename(filename: string): LexicalModelSource {
module(moduleExports);
if (!moduleExports['__esModule'] || !moduleExports['default']) {
- console.error(`Model source '${filename}' does have a default export. Did you remember to write \`export default source;\`?`);
- // TODO: throw an Error instead.
- process.exit(SysExits.EX_DATAERR);
+ throw new Error(`Model source '${filename}' does have a default export. Did you remember to write \`export default source;\`?`);
}
return moduleExports['default'] as LexicalModelSource;
diff --git a/developer/src/kmlmc/source/errors.ts b/developer/src/kmc-model/src/model-compiler-errors.ts
similarity index 99%
rename from developer/src/kmlmc/source/errors.ts
rename to developer/src/kmc-model/src/model-compiler-errors.ts
index f58c2df91b..20aa02d8e8 100644
--- a/developer/src/kmlmc/source/errors.ts
+++ b/developer/src/kmc-model/src/model-compiler-errors.ts
@@ -1,3 +1,4 @@
+// TODO: merge with kmc keyboard-compiler errors
/**
* Log levels.
*
diff --git a/developer/src/kmlmc/source/lexical-model-compiler/model-defaults.ts b/developer/src/kmc-model/src/model-defaults.ts
similarity index 100%
rename from developer/src/kmlmc/source/lexical-model-compiler/model-defaults.ts
rename to developer/src/kmc-model/src/model-defaults.ts
diff --git a/developer/src/kmlmc/source/lexical-model-compiler/model-definitions.ts b/developer/src/kmc-model/src/model-definitions.ts
similarity index 97%
rename from developer/src/kmlmc/source/lexical-model-compiler/model-definitions.ts
rename to developer/src/kmc-model/src/model-definitions.ts
index 4ab6fcad1e..9a9f325eb2 100644
--- a/developer/src/kmlmc/source/lexical-model-compiler/model-definitions.ts
+++ b/developer/src/kmc-model/src/model-definitions.ts
@@ -1,9 +1,10 @@
import { defaultApplyCasing,
defaultCasedSearchTermToKey,
defaultSearchTermToKey
- } from "./model-defaults";
+ } from "./model-defaults.js";
-const KEYMAN_VERSION = require("@keymanapp/keyman-version").KEYMAN_VERSION;
+import KEYMAN_VERSION from "@keymanapp/keyman-version/keyman-version.mjs";
+import { LexicalModelSource, WordformToKeySpec } from "./lexical-model.js";
/**
* Processes certain defined model behaviors in such a way that the needed closures
diff --git a/developer/src/kmlmc/source/lexical-model-compiler/script-overrides-decorator.ts b/developer/src/kmc-model/src/script-overrides-decorator.ts
similarity index 94%
rename from developer/src/kmlmc/source/lexical-model-compiler/script-overrides-decorator.ts
rename to developer/src/kmc-model/src/script-overrides-decorator.ts
index f53851146f..59a425620c 100644
--- a/developer/src/kmlmc/source/lexical-model-compiler/script-overrides-decorator.ts
+++ b/developer/src/kmc-model/src/script-overrides-decorator.ts
@@ -1,4 +1,4 @@
-///
+import { OverrideScriptDefaults } from "./lexical-model";
export function decorateWithScriptOverrides(breaker: WordBreakingFunction, option: OverrideScriptDefaults) {
if (option !== 'break-words-at-spaces') {
@@ -9,7 +9,7 @@ export function decorateWithScriptOverrides(breaker: WordBreakingFunction, optio
* Matches if when a span contains a Southeast-Asian letter or mark anywhere.
* This makes it a candidate for joining.
*
- * See: libexec/create-override-script-regexp.ts for how this RegExp was
+ * See: tools/create-override-script-regexp.ts for how this RegExp was
* generated.
*
* Last updated for Unicode 13.0.0.
diff --git a/developer/src/kmlmc/tests/README.md b/developer/src/kmc-model/test/README.md
similarity index 100%
rename from developer/src/kmlmc/tests/README.md
rename to developer/src/kmc-model/test/README.md
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.joinwordbreaker/example.qaa.joinwordbreaker.model.ts b/developer/src/kmc-model/test/fixtures/example.qaa.joinwordbreaker/example.qaa.joinwordbreaker.model.ts
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.joinwordbreaker/example.qaa.joinwordbreaker.model.ts
rename to developer/src/kmc-model/test/fixtures/example.qaa.joinwordbreaker/example.qaa.joinwordbreaker.model.ts
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.joinwordbreaker/wordlist.tsv b/developer/src/kmc-model/test/fixtures/example.qaa.joinwordbreaker/wordlist.tsv
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.joinwordbreaker/wordlist.tsv
rename to developer/src/kmc-model/test/fixtures/example.qaa.joinwordbreaker/wordlist.tsv
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.scriptusesspaces/example.qaa.scriptusesspaces.model.ts b/developer/src/kmc-model/test/fixtures/example.qaa.scriptusesspaces/example.qaa.scriptusesspaces.model.ts
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.scriptusesspaces/example.qaa.scriptusesspaces.model.ts
rename to developer/src/kmc-model/test/fixtures/example.qaa.scriptusesspaces/example.qaa.scriptusesspaces.model.ts
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.scriptusesspaces/wordlist.tsv b/developer/src/kmc-model/test/fixtures/example.qaa.scriptusesspaces/wordlist.tsv
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.scriptusesspaces/wordlist.tsv
rename to developer/src/kmc-model/test/fixtures/example.qaa.scriptusesspaces/wordlist.tsv
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kmp.json b/developer/src/kmc-model/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kmp.json
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kmp.json
rename to developer/src/kmc-model/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kmp.json
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kps b/developer/src/kmc-model/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kps
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kps
rename to developer/src/kmc-model/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kps
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.ts b/developer/src/kmc-model/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.ts
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.ts
rename to developer/src/kmc-model/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.ts
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.sencoten/wordlist.tsv b/developer/src/kmc-model/test/fixtures/example.qaa.sencoten/wordlist.tsv
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.sencoten/wordlist.tsv
rename to developer/src/kmc-model/test/fixtures/example.qaa.sencoten/wordlist.tsv
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.smp/example.qaa.smp.model.ts b/developer/src/kmc-model/test/fixtures/example.qaa.smp/example.qaa.smp.model.ts
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.smp/example.qaa.smp.model.ts
rename to developer/src/kmc-model/test/fixtures/example.qaa.smp/example.qaa.smp.model.ts
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.smp/wordlist.tsv b/developer/src/kmc-model/test/fixtures/example.qaa.smp/wordlist.tsv
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.smp/wordlist.tsv
rename to developer/src/kmc-model/test/fixtures/example.qaa.smp/wordlist.tsv
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.trivial/example.qaa.trivial.model.ts b/developer/src/kmc-model/test/fixtures/example.qaa.trivial/example.qaa.trivial.model.ts
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.trivial/example.qaa.trivial.model.ts
rename to developer/src/kmc-model/test/fixtures/example.qaa.trivial/example.qaa.trivial.model.ts
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.trivial/wordlist.tsv b/developer/src/kmc-model/test/fixtures/example.qaa.trivial/wordlist.tsv
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.trivial/wordlist.tsv
rename to developer/src/kmc-model/test/fixtures/example.qaa.trivial/wordlist.tsv
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.utf16be/example.qaa.utf16be.model.ts b/developer/src/kmc-model/test/fixtures/example.qaa.utf16be/example.qaa.utf16be.model.ts
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.utf16be/example.qaa.utf16be.model.ts
rename to developer/src/kmc-model/test/fixtures/example.qaa.utf16be/example.qaa.utf16be.model.ts
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.utf16be/wordlist.txt b/developer/src/kmc-model/test/fixtures/example.qaa.utf16be/wordlist.txt
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.utf16be/wordlist.txt
rename to developer/src/kmc-model/test/fixtures/example.qaa.utf16be/wordlist.txt
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.utf16le/example.qaa.utf16le.model.ts b/developer/src/kmc-model/test/fixtures/example.qaa.utf16le/example.qaa.utf16le.model.ts
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.utf16le/example.qaa.utf16le.model.ts
rename to developer/src/kmc-model/test/fixtures/example.qaa.utf16le/example.qaa.utf16le.model.ts
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.utf16le/wordlist.txt b/developer/src/kmc-model/test/fixtures/example.qaa.utf16le/wordlist.txt
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.utf16le/wordlist.txt
rename to developer/src/kmc-model/test/fixtures/example.qaa.utf16le/wordlist.txt
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.wordbreaker/example.qaa.wordbreaker.model.ts b/developer/src/kmc-model/test/fixtures/example.qaa.wordbreaker/example.qaa.wordbreaker.model.ts
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.wordbreaker/example.qaa.wordbreaker.model.ts
rename to developer/src/kmc-model/test/fixtures/example.qaa.wordbreaker/example.qaa.wordbreaker.model.ts
diff --git a/developer/src/kmlmc/tests/fixtures/example.qaa.wordbreaker/wordlist.tsv b/developer/src/kmc-model/test/fixtures/example.qaa.wordbreaker/wordlist.tsv
similarity index 100%
rename from developer/src/kmlmc/tests/fixtures/example.qaa.wordbreaker/wordlist.tsv
rename to developer/src/kmc-model/test/fixtures/example.qaa.wordbreaker/wordlist.tsv
diff --git a/developer/src/kmlmc/tests/helpers/index.ts b/developer/src/kmc-model/test/helpers/index.ts
similarity index 94%
rename from developer/src/kmlmc/tests/helpers/index.ts
rename to developer/src/kmc-model/test/helpers/index.ts
index f09f438e2f..cc6affa693 100644
--- a/developer/src/kmlmc/tests/helpers/index.ts
+++ b/developer/src/kmc-model/test/helpers/index.ts
@@ -4,8 +4,9 @@
* Helpers and utilities for the Mocha tests.
*/
import * as path from 'path';
+import { fileURLToPath } from 'url';
import {assert} from 'chai';
-import {LogMessage, KeymanCompilerError, redirectLogMessagesTo, resetLogMessageHandler, LogLevel} from '../../dist/errors';
+import {LogMessage, KeymanCompilerError, redirectLogMessagesTo, resetLogMessageHandler, LogLevel} from '../../src/model-compiler-errors.js';
export interface CompilationResult {
hasSyntaxError: boolean;
@@ -22,8 +23,8 @@ export interface CompilationResult {
*
* @param components One or more path components.
*/
-export function makePathToFixture(...components: string[]): string {
- return path.join(__dirname, '..', '..', 'tests', 'fixtures', ...components);
+ export function makePathToFixture(...components: string[]): string {
+ return fileURLToPath(new URL(path.join('..', '..', '..', 'test', 'fixtures', ...components), import.meta.url));
}
/**
diff --git a/developer/src/kmlmc/tests/test-compile-model-with-pseudoclosure.ts b/developer/src/kmc-model/test/test-compile-model-with-pseudoclosure.ts
similarity index 98%
rename from developer/src/kmlmc/tests/test-compile-model-with-pseudoclosure.ts
rename to developer/src/kmc-model/test/test-compile-model-with-pseudoclosure.ts
index 391cbbae37..95b8ee3722 100644
--- a/developer/src/kmlmc/tests/test-compile-model-with-pseudoclosure.ts
+++ b/developer/src/kmc-model/test/test-compile-model-with-pseudoclosure.ts
@@ -1,9 +1,8 @@
-import LexicalModelCompiler from '../dist/lexical-model-compiler/lexical-model-compiler';
+import LexicalModelCompiler from '../src/lexical-model-compiler.js';
import {assert} from 'chai';
import 'mocha';
-import { compileModelSourceCode } from './helpers';
-import { makePathToFixture } from './helpers';
+import { makePathToFixture, compileModelSourceCode } from './helpers/index.js';
describe('LexicalModelCompiler - pseudoclosure compilation + use', function () {
const MODEL_ID = 'example.qaa.trivial';
diff --git a/developer/src/kmlmc/tests/test-compile-model.ts b/developer/src/kmc-model/test/test-compile-model.ts
similarity index 92%
rename from developer/src/kmlmc/tests/test-compile-model.ts
rename to developer/src/kmc-model/test/test-compile-model.ts
index 9003ac1330..d98f0e8668 100644
--- a/developer/src/kmlmc/tests/test-compile-model.ts
+++ b/developer/src/kmc-model/test/test-compile-model.ts
@@ -1,8 +1,8 @@
import 'mocha';
import {assert} from 'chai';
-import {compileModel} from '../dist/util/util';
-import {makePathToFixture, compileModelSourceCode, CompilationResult} from './helpers';
+import {compileModel} from '../src/main.js';
+import {makePathToFixture, compileModelSourceCode, CompilationResult} from './helpers/index.js';
describe('compileModel', function () {
// Try to compile ALL of the correct models.
diff --git a/developer/src/kmlmc/tests/test-compile-trie.ts b/developer/src/kmc-model/test/test-compile-trie.ts
similarity index 96%
rename from developer/src/kmlmc/tests/test-compile-trie.ts
rename to developer/src/kmc-model/test/test-compile-trie.ts
index b487d055b3..d02b24eddf 100644
--- a/developer/src/kmlmc/tests/test-compile-trie.ts
+++ b/developer/src/kmc-model/test/test-compile-trie.ts
@@ -1,9 +1,9 @@
-import LexicalModelCompiler from '../dist/lexical-model-compiler/lexical-model-compiler';
+import LexicalModelCompiler from '../src/lexical-model-compiler.js';
import {assert} from 'chai';
import 'mocha';
-import {makePathToFixture, compileModelSourceCode} from './helpers';
-import { createTrieDataStructure } from '../dist/lexical-model-compiler/build-trie';
+import {makePathToFixture, compileModelSourceCode} from './helpers/index.js';
+import { createTrieDataStructure } from '../src/build-trie.js';
describe('LexicalModelCompiler', function () {
describe('#generateLexicalModelCode', function () {
@@ -100,7 +100,7 @@ describe('LexicalModelCompiler', function () {
} else if(code.charCodeAt(i) >= 0xDC00 && code.charCodeAt(i) < 0xE000) {
assert.isTrue((code.charCodeAt(i-1) >= 0xD800 && code.charCodeAt(i-1) < 0xDC00),
'Unpaired trail surrogate U+'+code.charCodeAt(i).toString(16)+' at position '+i+' of \''+code+'\'');
- }
+ }
}
// Sanity check: the word list has three total unweighted words, with a
diff --git a/developer/src/kmlmc/tests/test-default-apply-case.ts b/developer/src/kmc-model/test/test-default-apply-case.ts
similarity index 97%
rename from developer/src/kmlmc/tests/test-default-apply-case.ts
rename to developer/src/kmc-model/test/test-default-apply-case.ts
index a408c73014..09d1f49d7a 100644
--- a/developer/src/kmlmc/tests/test-default-apply-case.ts
+++ b/developer/src/kmc-model/test/test-default-apply-case.ts
@@ -1,7 +1,7 @@
import 'mocha';
import { assert } from 'chai';
-import { defaultApplyCasing } from '../dist/lexical-model-compiler/model-defaults';
+import { defaultApplyCasing } from '../src/model-defaults.js';
describe('The default applyCasing() function', function () {
// // --------
@@ -11,7 +11,7 @@ describe('The default applyCasing() function', function () {
// let u = function(code: number): string {
// var H = Math.floor((code - 0x10000) / 0x400) + 0xD800;
// var L = (code - 0x10000) % 0x400 + 0xDC00;
-
+
// return String.fromCharCode(H, L);
// }
@@ -37,7 +37,7 @@ describe('The default applyCasing() function', function () {
// Note: not written the Turkish way. Turns out 'İ'.toLowerCase() decomposes the result,
// which would have made for a fairly yucky test.
['Istanbul', 'istanbul'],
-
+
// The DEFAULT function is NOT responsible for understanding the Turkish
// case regarding the lowercasing of:
// 'I' U+0048 LATIN CAPITAL LETTER I to 'ı' U+0131 LATIN SMALL LETTER DOTLESS I
@@ -47,16 +47,16 @@ describe('The default applyCasing() function', function () {
// full-width romaji has corresponding capitalized versions:
['AESTHETIC', 'aesthetic'],
-
+
// "skýlos" is Greek for dog 🇬🇷🐶
// starts with an 's' and ends with an 's'
// which are DIFFERENT CHARACTERS in lowercased Greek!
['ΣΚΥΛΟΣ', 'σκυλος'],
-
+
// Uncased syntax and numbers should pass through unscathed:
['1234.?!', '1234.?!']
];
-
+
for (let [input, expected] of testCases) {
it(`should lowercase '${input}' as '${expected}'`, function() {
assert.equal(defaultApplyCasing('lower', input), expected);
@@ -68,7 +68,7 @@ describe('The default applyCasing() function', function () {
const testCases: [string, string][] = [
// Inverse of the corresponding 'lower' test.
['istanbul', 'ISTANBUL'],
-
+
// The DEFAULT function is NOT responsible for understanding the Turkish
// case regarding the uppercasing of:
// 'ı' U+0131 LATIN SMALL LETTER DOTLESS I to 'I' U+0048 LATIN CAPITAL LETTER I
@@ -78,16 +78,16 @@ describe('The default applyCasing() function', function () {
// full-width romaji has corresponding capitalized versions:
['aesthetic', 'AESTHETIC'],
-
+
// "skýlos" is Greek for dog 🇬🇷🐶
// starts with an 's' and ends with an 's'
// which are DIFFERENT CHARACTERS in lowercased Greek!
['σκυλος', 'ΣΚΥΛΟΣ'],
-
+
// Uncased syntax and numbers should pass through unscathed:
['1234.?!', '1234.?!']
];
-
+
for (let [input, expected] of testCases) {
it(`should uppercase '${input}' as '${expected}'`, function() {
assert.equal(defaultApplyCasing('upper', input), expected);
@@ -99,14 +99,14 @@ describe('The default applyCasing() function', function () {
const testCases: [string, string][] = [
// Inverse of the corresponding 'lower' test.
['istanbul', 'Istanbul'],
-
+
// The DEFAULT function is NOT responsible for understanding the Turkish
// case regarding the uppercasing of:
// 'ı' U+0131 LATIN SMALL LETTER DOTLESS I to 'I' U+0048 LATIN CAPITAL LETTER I
// For Turkic languages, the recommendation is to make a
// custom applyCasing function:
['diyarbakır', 'Diyarbakır'], // The 'i̇' is the decomposed result alluded to for the previous case.
-
+
// full-width romaji has corresponding capitalized versions:
['aesthetic', 'Aesthetic'],
@@ -114,11 +114,11 @@ describe('The default applyCasing() function', function () {
// starts with an 's' and ends with an 's'
// which are DIFFERENT CHARACTERS in lowercased Greek!
['σκυλος', 'Σκυλος'],
-
+
// Uncased syntax and numbers should pass through unscathed:
['1234.?!', '1234.?!']
];
-
+
for (let [input, expected] of testCases) {
it(`should initial-case '${input}' as '${expected}'`, function() {
assert.equal(defaultApplyCasing('initial', input), expected);
diff --git a/developer/src/kmlmc/tests/test-default-search-term-to-key.ts b/developer/src/kmc-model/test/test-default-search-term-to-key.ts
similarity index 95%
rename from developer/src/kmlmc/tests/test-default-search-term-to-key.ts
rename to developer/src/kmc-model/test/test-default-search-term-to-key.ts
index 5b90b0e48c..b777c7c79c 100644
--- a/developer/src/kmlmc/tests/test-default-search-term-to-key.ts
+++ b/developer/src/kmc-model/test/test-default-search-term-to-key.ts
@@ -1,9 +1,9 @@
import 'mocha';
import {assert} from 'chai';
-import { defaultSearchTermToKey,
+import { defaultSearchTermToKey,
defaultCasedSearchTermToKey,
- defaultApplyCasing } from '../dist/lexical-model-compiler/model-defaults';
+ defaultApplyCasing } from '../src/model-defaults.js';
describe('The default searchTermToKey() function', function () {
@@ -12,28 +12,28 @@ describe('The default searchTermToKey() function', function () {
// "İstanbul" has a U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE.
// Without any casing operations, only the I should be altered.
['İstanbul', 'Istanbul'],
-
+
// Similarly...
['DİYARBAKIR', 'DIYARBAKIR'],
-
+
// "skýlos" is Greek for dog 🇬🇷🐶
// starts with an 's' and ends with an 's'
// which are DIFFERENT CHARACTERS in lowercased Greek!
['σκύλος', 'σκυλος'],
['ΣΚΥΛΟΣ', 'ΣΚΥΛΟΣ'],
-
+
// full-width romaji is compatibility-canonical with ASCII characters:
['aesthetic', 'aesthetic'],
-
+
// U+212B ANGSTROM SIGN (Å)
// U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE (Å)
// and should both normalize to 'A'
['\u212B', 'A'],
['\u00C5', 'A'],
-
+
// We should not fall for U+037E GREEK QUESTION MARK's trolling:
['\u037e', ';'],
-
+
// Test presentational forms of Arabic:
// U+FE8D ARABIC LETTER ALEF ISOLATED FORM -> U+0627 ARABIC LETTER ALEF
// U+FEDF ARABIC LETTER LAM INITIAL FORM -> U+0644 ARABIC LETTER LAM
@@ -42,12 +42,12 @@ describe('The default searchTermToKey() function', function () {
// U+FEEE ARABIC LETTER WAW FINAL FORM -> U+0648 ARABIC LETTER WAW
// U+FE93 ARABIC LETTER TEH MARBUTA ISOLATED FORM -> U+0629 ARABIC LETTER TEH MARBUTA
['\uFE8D\uFEDF\uFED8\uFEEC\uFEEE\uFE93', '\u0627\u0644\u0642\u0647\u0648\u0629'],
-
+
// Combine both NFKD **AND** knocking off diacritics:
// U+01C4 LATIN CAPITAL LETTER DZ WITH CARON (DŽ) -> (dz)
['DŽ', 'DZ'],
];
-
+
for (let [input, expected] of testCases) {
it(`should normalize '${input}' to '${expected}'`, function() {
assert.equal(defaultSearchTermToKey(input), expected);
@@ -64,25 +64,25 @@ describe('The default searchTermToKey() function', function () {
// custom searchTermToKey function.
['İstanbul', 'ISTANBUL'],
['DİYARBAKIR', 'DIYARBAKIR'],
-
+
// "skýlos" is Greek for dog 🇬🇷🐶
// starts with an 's' and ends with an 's'
// which are DIFFERENT CHARACTERS in lowercased Greek!
['σκύλος', 'ΣΚΥΛΟΣ'],
['σκυλοσ', 'ΣΚΥΛΟΣ'],
-
+
// full-width romaji is compatibility-canonical with ASCII characters:
['aesthetic', 'AESTHETIC'],
-
+
// U+212B ANGSTROM SIGN (Å)
// U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE (Å)
// and should both normalize to 'a'
['\u212B', 'A'],
['\u00C5', 'A'],
-
+
// We should not fall for U+037E GREEK QUESTION MARK's trolling:
['\u037e', ';'],
-
+
// Test presentational forms of Arabic:
// U+FE8D ARABIC LETTER ALEF ISOLATED FORM -> U+0627 ARABIC LETTER ALEF
// U+FEDF ARABIC LETTER LAM INITIAL FORM -> U+0644 ARABIC LETTER LAM
@@ -91,7 +91,7 @@ describe('The default searchTermToKey() function', function () {
// U+FEEE ARABIC LETTER WAW FINAL FORM -> U+0648 ARABIC LETTER WAW
// U+FE93 ARABIC LETTER TEH MARBUTA ISOLATED FORM -> U+0629 ARABIC LETTER TEH MARBUTA
['\uFE8D\uFEDF\uFED8\uFEEC\uFEEE\uFE93', '\u0627\u0644\u0642\u0647\u0648\u0629'],
-
+
// Combine both NFKD **AND** knocking off diacritics:
// U+01C4 LATIN CAPITAL LETTER DZ WITH CARON (DŽ) -> (dz)
['DŽ', 'DZ'],
@@ -101,8 +101,8 @@ describe('The default searchTermToKey() function', function () {
// as U+0130's default handling is... not ideal in Turkish.
//
// Instead, we can get a simple-enough test with inverted casing.
- let customCasing = function(caseToApply: CasingForm,
- text: string,
+ let customCasing = function(caseToApply: CasingForm,
+ text: string,
defaultApplyCasing: CasingFunction): string {
switch(caseToApply) {
case 'lower':
@@ -110,7 +110,7 @@ describe('The default searchTermToKey() function', function () {
case 'upper':
return text.toLowerCase();
case 'initial':
- return customCasing('upper', text.charAt(0), defaultApplyCasing) + text.substr(1);
+ return customCasing('upper', text.charAt(0), defaultApplyCasing) + text.substr(1);
default:
return text;
}
@@ -119,7 +119,7 @@ describe('The default searchTermToKey() function', function () {
let customCasingClosure = function(caseToApply: CasingForm, text: string): string {
return customCasing(caseToApply, text, defaultApplyCasing);
}
-
+
for (let [input, expected] of testCases) {
it(`should normalize '${input}' to '${expected}'`, function() {
assert.equal(defaultCasedSearchTermToKey(input, customCasingClosure as CasingFunction), expected);
@@ -132,32 +132,32 @@ describe('The default searchTermToKey() function', function () {
// "İstanbul" has a U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE.
// This should be lowercased.
['İstanbul', 'istanbul'],
-
+
// The DEFAULT function is NOT responsible for understanding the Turkish
// case regarding the lowercasing of:
// 'I' U+0048 LATIN CAPITAL LETTER I to 'ı' U+0131 LATIN SMALL LETTER DOTLESS I
// For Turkic languages, the recommendation is to make a
// custom searchTermToKey function:
['DİYARBAKIR', 'diyarbakir'],
-
+
// "skýlos" is Greek for dog 🇬🇷🐶
// starts with an 's' and ends with an 's'
// which are DIFFERENT CHARACTERS in lowercased Greek!
['σκύλος', 'σκυλος'],
['ΣΚΥΛΟΣ', 'σκυλοσ'],
-
+
// full-width romaji is compatibility-canonical with ASCII characters:
['aesthetic', 'aesthetic'],
-
+
// U+212B ANGSTROM SIGN (Å)
// U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE (Å)
// and should both normalize to 'a'
['\u212B', 'a'],
['\u00C5', 'a'],
-
+
// We should not fall for U+037E GREEK QUESTION MARK's trolling:
['\u037e', ';'],
-
+
// Test presentational forms of Arabic:
// U+FE8D ARABIC LETTER ALEF ISOLATED FORM -> U+0627 ARABIC LETTER ALEF
// U+FEDF ARABIC LETTER LAM INITIAL FORM -> U+0644 ARABIC LETTER LAM
@@ -166,12 +166,12 @@ describe('The default searchTermToKey() function', function () {
// U+FEEE ARABIC LETTER WAW FINAL FORM -> U+0648 ARABIC LETTER WAW
// U+FE93 ARABIC LETTER TEH MARBUTA ISOLATED FORM -> U+0629 ARABIC LETTER TEH MARBUTA
['\uFE8D\uFEDF\uFED8\uFEEC\uFEEE\uFE93', '\u0627\u0644\u0642\u0647\u0648\u0629'],
-
+
// Combine both NFKD **AND** knocking off diacritics:
// U+01C4 LATIN CAPITAL LETTER DZ WITH CARON (DŽ) -> (dz)
['DŽ', 'dz'],
];
-
+
for (let [input, expected] of testCases) {
it(`should normalize '${input}' to '${expected}'`, function() {
assert.equal(defaultCasedSearchTermToKey(input, defaultApplyCasing), expected);
diff --git a/developer/src/kmlmc/tests/test-error-logger.ts b/developer/src/kmc-model/test/test-error-logger.ts
similarity index 86%
rename from developer/src/kmlmc/tests/test-error-logger.ts
rename to developer/src/kmc-model/test/test-error-logger.ts
index ad0a3cbadb..fa57d3df57 100644
--- a/developer/src/kmlmc/tests/test-error-logger.ts
+++ b/developer/src/kmc-model/test/test-error-logger.ts
@@ -1,6 +1,6 @@
-import { MAX_MESSAGES, KeymanCompilerError, log } from "../dist/errors"
-import { LogHoarder } from "./helpers"
-import { assert } from "chai"
+import { MAX_MESSAGES, KeymanCompilerError, log } from "../src/model-compiler-errors.js";
+import { LogHoarder } from "./helpers/index.js";
+import { assert } from "chai";
describe('error logger', function () {
beforeEach(function () {
diff --git a/developer/src/kmlmc/tests/test-join-word-breaker.ts b/developer/src/kmc-model/test/test-join-word-breaker.ts
similarity index 92%
rename from developer/src/kmlmc/tests/test-join-word-breaker.ts
rename to developer/src/kmc-model/test/test-join-word-breaker.ts
index 9a2ad54e63..d06bc7a6ef 100644
--- a/developer/src/kmlmc/tests/test-join-word-breaker.ts
+++ b/developer/src/kmc-model/test/test-join-word-breaker.ts
@@ -1,8 +1,6 @@
-var assert = require('chai').assert;
-
-const defaultWordBreaker = require('../../../../common/models/wordbreakers/build').wordBreakers['default'];
-import {decorateWithJoin} from '../dist/lexical-model-compiler/join-word-breaker-decorator';
-
+import { assert } from "chai";
+import defaultWordBreaker from './wordbreakers/default-wordbreaker-esm.js';
+import {decorateWithJoin} from '../src/join-word-breaker-decorator.js';
describe('The join word breaker decorator', function () {
it('should decorate an existing word breaker', function () {
diff --git a/developer/src/kmlmc/tests/test-model-definitions.ts b/developer/src/kmc-model/test/test-model-definitions.ts
similarity index 98%
rename from developer/src/kmlmc/tests/test-model-definitions.ts
rename to developer/src/kmc-model/test/test-model-definitions.ts
index 67b49859b4..efea5b02f1 100644
--- a/developer/src/kmlmc/tests/test-model-definitions.ts
+++ b/developer/src/kmc-model/test/test-model-definitions.ts
@@ -1,6 +1,7 @@
import 'mocha';
import { assert } from 'chai';
-import { ModelDefinitions } from '../dist/lexical-model-compiler/model-definitions';
+import { ModelDefinitions } from '../src/model-definitions.js';
+import { LexicalModelSource } from '../src/lexical-model.js';
describe('Model definition pseudoclosures', function () {
describe('14.0 defaults', function() {
diff --git a/developer/src/kmlmc/tests/test-override-script-defaults.ts b/developer/src/kmc-model/test/test-override-script-defaults.ts
similarity index 84%
rename from developer/src/kmlmc/tests/test-override-script-defaults.ts
rename to developer/src/kmc-model/test/test-override-script-defaults.ts
index 5f25e69a2d..909f52c298 100644
--- a/developer/src/kmlmc/tests/test-override-script-defaults.ts
+++ b/developer/src/kmc-model/test/test-override-script-defaults.ts
@@ -1,7 +1,6 @@
-var assert = require('chai').assert;
-
-const defaultWordBreaker = require('../../../../common/models/wordbreakers/build').wordBreakers['default'];
-import {decorateWithScriptOverrides} from '../dist/lexical-model-compiler/script-overrides-decorator';
+import { assert } from "chai";
+import defaultWordBreaker from './wordbreakers/default-wordbreaker-esm.js';
+import {decorateWithScriptOverrides} from '../src/script-overrides-decorator.js';
const THIN_SPACE = "\u2009";
diff --git a/developer/src/kmlmc/tests/test-parse-wordlist.ts b/developer/src/kmc-model/test/test-parse-wordlist.ts
similarity index 96%
rename from developer/src/kmlmc/tests/test-parse-wordlist.ts
rename to developer/src/kmc-model/test/test-parse-wordlist.ts
index 3d0c7a565b..6f5be70ca7 100644
--- a/developer/src/kmlmc/tests/test-parse-wordlist.ts
+++ b/developer/src/kmc-model/test/test-parse-wordlist.ts
@@ -1,8 +1,8 @@
-import {parseWordListFromContents, parseWordListFromFilename, WordList} from '../dist/lexical-model-compiler/build-trie';
+import {parseWordListFromContents, parseWordListFromFilename, WordList} from '../src/build-trie.js';
import {assert} from 'chai';
import 'mocha';
-import { makePathToFixture, LogHoarder } from './helpers';
-import { KeymanCompilerError } from '../dist/errors';
+import { makePathToFixture, LogHoarder } from './helpers/index.js';
+import { KeymanCompilerError } from '../src/model-compiler-errors.js';
const BOM = '\ufeff';
const SENCOTEN_WORDLIST = {
@@ -100,7 +100,7 @@ describe('parsing a word list', function () {
parseWordListFromContents(repeatedWords, file);
assert.deepEqual(repeatedWords, expected);
-
+
assert.isTrue(this.logHoarder.hasSeenWarnings());
// hello has been seen multiple times:
assert.isTrue(this.logHoarder.hasSeenCode(KeymanCompilerError.CWARN_DuplicateWordInSameFile));
diff --git a/developer/src/kmlmc/tests/test-punctuation.ts b/developer/src/kmc-model/test/test-punctuation.ts
similarity index 85%
rename from developer/src/kmlmc/tests/test-punctuation.ts
rename to developer/src/kmc-model/test/test-punctuation.ts
index 925a01bd8e..34dbafca32 100644
--- a/developer/src/kmlmc/tests/test-punctuation.ts
+++ b/developer/src/kmc-model/test/test-punctuation.ts
@@ -1,10 +1,8 @@
-import LexicalModelCompiler from '../dist/lexical-model-compiler/lexical-model-compiler';
+import LexicalModelCompiler from '../src/lexical-model-compiler.js';
import {assert} from 'chai';
import 'mocha';
-import { compileModelSourceCode } from './helpers';
-import { makePathToFixture } from './helpers';
-
+import { makePathToFixture, compileModelSourceCode } from './helpers/index.js';
describe('LexicalModelCompiler', function () {
describe('specifying punctuation', function () {
diff --git a/developer/src/kmc-model/test/tsconfig.json b/developer/src/kmc-model/test/tsconfig.json
new file mode 100644
index 0000000000..fd7f672037
--- /dev/null
+++ b/developer/src/kmc-model/test/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "extends": "../../kmc/tsconfig.kmc-base.json",
+
+ "compilerOptions": {
+ "rootDir": ".",
+ "rootDirs": ["./", "../src/"],
+ "outDir": "../build/test",
+ "esModuleInterop": true,
+ "moduleResolution": "node16",
+ "allowSyntheticDefaultImports": true,
+ "baseUrl": ".",
+ },
+ "include": [
+ "**/test-*.ts",
+ "*.ts",
+ "helpers/*.ts",
+ "wordbreakers/*.ts"
+ ],
+ "references": [
+ { "path": "../" },
+ ]
+}
\ No newline at end of file
diff --git a/developer/src/kmc-model/test/wordbreakers/README.md b/developer/src/kmc-model/test/wordbreakers/README.md
new file mode 100644
index 0000000000..d204b51c6a
--- /dev/null
+++ b/developer/src/kmc-model/test/wordbreakers/README.md
@@ -0,0 +1,3 @@
+Wordbreakers ES Module format
+
+TODO: once we move common/models/wordbreakers to ESM, eliminate this.
diff --git a/developer/src/kmc-model/test/wordbreakers/data.ts b/developer/src/kmc-model/test/wordbreakers/data.ts
new file mode 100644
index 0000000000..5622bf5c03
--- /dev/null
+++ b/developer/src/kmc-model/test/wordbreakers/data.ts
@@ -0,0 +1,1776 @@
+// TEMP: esm version of /common/models/wordbreakers/default/data.ts
+// Hand updated version of automatically generated file.
+/**
+ * Valid values for a word break property.
+ */
+export enum WordBreakProperty {
+ Other,
+ LF,
+ Newline,
+ CR,
+ WSegSpace,
+ Double_Quote,
+ Single_Quote,
+ MidNum,
+ MidNumLet,
+ Numeric,
+ MidLetter,
+ ALetter,
+ ExtendNumLet,
+ Format,
+ Extend,
+ Hebrew_Letter,
+ ZWJ,
+ Katakana,
+ Regional_Indicator,
+ sot,
+ eot
+};
+
+/**
+ * Constants for indexing values in WORD_BREAK_PROPERTY.
+ */
+export enum I {
+ Start = 0,
+ Value = 1
+}
+
+export const WORD_BREAK_PROPERTY: [number, WordBreakProperty][] = [
+ [/*start*/ 0x0, WordBreakProperty.Other],
+ [/*start*/ 0xA, WordBreakProperty.LF],
+ [/*start*/ 0xB, WordBreakProperty.Newline],
+ [/*start*/ 0xD, WordBreakProperty.CR],
+ [/*start*/ 0xE, WordBreakProperty.Other],
+ [/*start*/ 0x20, WordBreakProperty.WSegSpace],
+ [/*start*/ 0x21, WordBreakProperty.Other],
+ [/*start*/ 0x22, WordBreakProperty.Double_Quote],
+ [/*start*/ 0x23, WordBreakProperty.Other],
+ [/*start*/ 0x27, WordBreakProperty.Single_Quote],
+ [/*start*/ 0x28, WordBreakProperty.Other],
+ [/*start*/ 0x2C, WordBreakProperty.MidNum],
+ [/*start*/ 0x2D, WordBreakProperty.Other],
+ [/*start*/ 0x2E, WordBreakProperty.MidNumLet],
+ [/*start*/ 0x2F, WordBreakProperty.Other],
+ [/*start*/ 0x30, WordBreakProperty.Numeric],
+ [/*start*/ 0x3A, WordBreakProperty.MidLetter],
+ [/*start*/ 0x3B, WordBreakProperty.MidNum],
+ [/*start*/ 0x3C, WordBreakProperty.Other],
+ [/*start*/ 0x41, WordBreakProperty.ALetter],
+ [/*start*/ 0x5B, WordBreakProperty.Other],
+ [/*start*/ 0x5F, WordBreakProperty.ExtendNumLet],
+ [/*start*/ 0x60, WordBreakProperty.Other],
+ [/*start*/ 0x61, WordBreakProperty.ALetter],
+ [/*start*/ 0x7B, WordBreakProperty.Other],
+ [/*start*/ 0x85, WordBreakProperty.Newline],
+ [/*start*/ 0x86, WordBreakProperty.Other],
+ [/*start*/ 0xAA, WordBreakProperty.ALetter],
+ [/*start*/ 0xAB, WordBreakProperty.Other],
+ [/*start*/ 0xAD, WordBreakProperty.Format],
+ [/*start*/ 0xAE, WordBreakProperty.Other],
+ [/*start*/ 0xB5, WordBreakProperty.ALetter],
+ [/*start*/ 0xB6, WordBreakProperty.Other],
+ [/*start*/ 0xB7, WordBreakProperty.MidLetter],
+ [/*start*/ 0xB8, WordBreakProperty.Other],
+ [/*start*/ 0xBA, WordBreakProperty.ALetter],
+ [/*start*/ 0xBB, WordBreakProperty.Other],
+ [/*start*/ 0xC0, WordBreakProperty.ALetter],
+ [/*start*/ 0xD7, WordBreakProperty.Other],
+ [/*start*/ 0xD8, WordBreakProperty.ALetter],
+ [/*start*/ 0xF7, WordBreakProperty.Other],
+ [/*start*/ 0xF8, WordBreakProperty.ALetter],
+ [/*start*/ 0x2D8, WordBreakProperty.Other],
+ [/*start*/ 0x2DE, WordBreakProperty.ALetter],
+ [/*start*/ 0x300, WordBreakProperty.Extend],
+ [/*start*/ 0x370, WordBreakProperty.ALetter],
+ [/*start*/ 0x375, WordBreakProperty.Other],
+ [/*start*/ 0x376, WordBreakProperty.ALetter],
+ [/*start*/ 0x378, WordBreakProperty.Other],
+ [/*start*/ 0x37A, WordBreakProperty.ALetter],
+ [/*start*/ 0x37E, WordBreakProperty.MidNum],
+ [/*start*/ 0x37F, WordBreakProperty.ALetter],
+ [/*start*/ 0x380, WordBreakProperty.Other],
+ [/*start*/ 0x386, WordBreakProperty.ALetter],
+ [/*start*/ 0x387, WordBreakProperty.MidLetter],
+ [/*start*/ 0x388, WordBreakProperty.ALetter],
+ [/*start*/ 0x38B, WordBreakProperty.Other],
+ [/*start*/ 0x38C, WordBreakProperty.ALetter],
+ [/*start*/ 0x38D, WordBreakProperty.Other],
+ [/*start*/ 0x38E, WordBreakProperty.ALetter],
+ [/*start*/ 0x3A2, WordBreakProperty.Other],
+ [/*start*/ 0x3A3, WordBreakProperty.ALetter],
+ [/*start*/ 0x3F6, WordBreakProperty.Other],
+ [/*start*/ 0x3F7, WordBreakProperty.ALetter],
+ [/*start*/ 0x482, WordBreakProperty.Other],
+ [/*start*/ 0x483, WordBreakProperty.Extend],
+ [/*start*/ 0x48A, WordBreakProperty.ALetter],
+ [/*start*/ 0x530, WordBreakProperty.Other],
+ [/*start*/ 0x531, WordBreakProperty.ALetter],
+ [/*start*/ 0x557, WordBreakProperty.Other],
+ [/*start*/ 0x559, WordBreakProperty.ALetter],
+ [/*start*/ 0x55D, WordBreakProperty.Other],
+ [/*start*/ 0x55E, WordBreakProperty.ALetter],
+ [/*start*/ 0x55F, WordBreakProperty.MidLetter],
+ [/*start*/ 0x560, WordBreakProperty.ALetter],
+ [/*start*/ 0x589, WordBreakProperty.MidNum],
+ [/*start*/ 0x58A, WordBreakProperty.ALetter],
+ [/*start*/ 0x58B, WordBreakProperty.Other],
+ [/*start*/ 0x591, WordBreakProperty.Extend],
+ [/*start*/ 0x5BE, WordBreakProperty.Other],
+ [/*start*/ 0x5BF, WordBreakProperty.Extend],
+ [/*start*/ 0x5C0, WordBreakProperty.Other],
+ [/*start*/ 0x5C1, WordBreakProperty.Extend],
+ [/*start*/ 0x5C3, WordBreakProperty.Other],
+ [/*start*/ 0x5C4, WordBreakProperty.Extend],
+ [/*start*/ 0x5C6, WordBreakProperty.Other],
+ [/*start*/ 0x5C7, WordBreakProperty.Extend],
+ [/*start*/ 0x5C8, WordBreakProperty.Other],
+ [/*start*/ 0x5D0, WordBreakProperty.Hebrew_Letter],
+ [/*start*/ 0x5EB, WordBreakProperty.Other],
+ [/*start*/ 0x5EF, WordBreakProperty.Hebrew_Letter],
+ [/*start*/ 0x5F3, WordBreakProperty.ALetter],
+ [/*start*/ 0x5F4, WordBreakProperty.MidLetter],
+ [/*start*/ 0x5F5, WordBreakProperty.Other],
+ [/*start*/ 0x600, WordBreakProperty.Format],
+ [/*start*/ 0x606, WordBreakProperty.Other],
+ [/*start*/ 0x60C, WordBreakProperty.MidNum],
+ [/*start*/ 0x60E, WordBreakProperty.Other],
+ [/*start*/ 0x610, WordBreakProperty.Extend],
+ [/*start*/ 0x61B, WordBreakProperty.Other],
+ [/*start*/ 0x61C, WordBreakProperty.Format],
+ [/*start*/ 0x61D, WordBreakProperty.Other],
+ [/*start*/ 0x620, WordBreakProperty.ALetter],
+ [/*start*/ 0x64B, WordBreakProperty.Extend],
+ [/*start*/ 0x660, WordBreakProperty.Numeric],
+ [/*start*/ 0x66A, WordBreakProperty.Other],
+ [/*start*/ 0x66B, WordBreakProperty.Numeric],
+ [/*start*/ 0x66C, WordBreakProperty.MidNum],
+ [/*start*/ 0x66D, WordBreakProperty.Other],
+ [/*start*/ 0x66E, WordBreakProperty.ALetter],
+ [/*start*/ 0x670, WordBreakProperty.Extend],
+ [/*start*/ 0x671, WordBreakProperty.ALetter],
+ [/*start*/ 0x6D4, WordBreakProperty.Other],
+ [/*start*/ 0x6D5, WordBreakProperty.ALetter],
+ [/*start*/ 0x6D6, WordBreakProperty.Extend],
+ [/*start*/ 0x6DD, WordBreakProperty.Format],
+ [/*start*/ 0x6DE, WordBreakProperty.Other],
+ [/*start*/ 0x6DF, WordBreakProperty.Extend],
+ [/*start*/ 0x6E5, WordBreakProperty.ALetter],
+ [/*start*/ 0x6E7, WordBreakProperty.Extend],
+ [/*start*/ 0x6E9, WordBreakProperty.Other],
+ [/*start*/ 0x6EA, WordBreakProperty.Extend],
+ [/*start*/ 0x6EE, WordBreakProperty.ALetter],
+ [/*start*/ 0x6F0, WordBreakProperty.Numeric],
+ [/*start*/ 0x6FA, WordBreakProperty.ALetter],
+ [/*start*/ 0x6FD, WordBreakProperty.Other],
+ [/*start*/ 0x6FF, WordBreakProperty.ALetter],
+ [/*start*/ 0x700, WordBreakProperty.Other],
+ [/*start*/ 0x70F, WordBreakProperty.Format],
+ [/*start*/ 0x710, WordBreakProperty.ALetter],
+ [/*start*/ 0x711, WordBreakProperty.Extend],
+ [/*start*/ 0x712, WordBreakProperty.ALetter],
+ [/*start*/ 0x730, WordBreakProperty.Extend],
+ [/*start*/ 0x74B, WordBreakProperty.Other],
+ [/*start*/ 0x74D, WordBreakProperty.ALetter],
+ [/*start*/ 0x7A6, WordBreakProperty.Extend],
+ [/*start*/ 0x7B1, WordBreakProperty.ALetter],
+ [/*start*/ 0x7B2, WordBreakProperty.Other],
+ [/*start*/ 0x7C0, WordBreakProperty.Numeric],
+ [/*start*/ 0x7CA, WordBreakProperty.ALetter],
+ [/*start*/ 0x7EB, WordBreakProperty.Extend],
+ [/*start*/ 0x7F4, WordBreakProperty.ALetter],
+ [/*start*/ 0x7F6, WordBreakProperty.Other],
+ [/*start*/ 0x7F8, WordBreakProperty.MidNum],
+ [/*start*/ 0x7F9, WordBreakProperty.Other],
+ [/*start*/ 0x7FA, WordBreakProperty.ALetter],
+ [/*start*/ 0x7FB, WordBreakProperty.Other],
+ [/*start*/ 0x7FD, WordBreakProperty.Extend],
+ [/*start*/ 0x7FE, WordBreakProperty.Other],
+ [/*start*/ 0x800, WordBreakProperty.ALetter],
+ [/*start*/ 0x816, WordBreakProperty.Extend],
+ [/*start*/ 0x81A, WordBreakProperty.ALetter],
+ [/*start*/ 0x81B, WordBreakProperty.Extend],
+ [/*start*/ 0x824, WordBreakProperty.ALetter],
+ [/*start*/ 0x825, WordBreakProperty.Extend],
+ [/*start*/ 0x828, WordBreakProperty.ALetter],
+ [/*start*/ 0x829, WordBreakProperty.Extend],
+ [/*start*/ 0x82E, WordBreakProperty.Other],
+ [/*start*/ 0x840, WordBreakProperty.ALetter],
+ [/*start*/ 0x859, WordBreakProperty.Extend],
+ [/*start*/ 0x85C, WordBreakProperty.Other],
+ [/*start*/ 0x860, WordBreakProperty.ALetter],
+ [/*start*/ 0x86B, WordBreakProperty.Other],
+ [/*start*/ 0x8A0, WordBreakProperty.ALetter],
+ [/*start*/ 0x8B5, WordBreakProperty.Other],
+ [/*start*/ 0x8B6, WordBreakProperty.ALetter],
+ [/*start*/ 0x8C8, WordBreakProperty.Other],
+ [/*start*/ 0x8D3, WordBreakProperty.Extend],
+ [/*start*/ 0x8E2, WordBreakProperty.Format],
+ [/*start*/ 0x8E3, WordBreakProperty.Extend],
+ [/*start*/ 0x904, WordBreakProperty.ALetter],
+ [/*start*/ 0x93A, WordBreakProperty.Extend],
+ [/*start*/ 0x93D, WordBreakProperty.ALetter],
+ [/*start*/ 0x93E, WordBreakProperty.Extend],
+ [/*start*/ 0x950, WordBreakProperty.ALetter],
+ [/*start*/ 0x951, WordBreakProperty.Extend],
+ [/*start*/ 0x958, WordBreakProperty.ALetter],
+ [/*start*/ 0x962, WordBreakProperty.Extend],
+ [/*start*/ 0x964, WordBreakProperty.Other],
+ [/*start*/ 0x966, WordBreakProperty.Numeric],
+ [/*start*/ 0x970, WordBreakProperty.Other],
+ [/*start*/ 0x971, WordBreakProperty.ALetter],
+ [/*start*/ 0x981, WordBreakProperty.Extend],
+ [/*start*/ 0x984, WordBreakProperty.Other],
+ [/*start*/ 0x985, WordBreakProperty.ALetter],
+ [/*start*/ 0x98D, WordBreakProperty.Other],
+ [/*start*/ 0x98F, WordBreakProperty.ALetter],
+ [/*start*/ 0x991, WordBreakProperty.Other],
+ [/*start*/ 0x993, WordBreakProperty.ALetter],
+ [/*start*/ 0x9A9, WordBreakProperty.Other],
+ [/*start*/ 0x9AA, WordBreakProperty.ALetter],
+ [/*start*/ 0x9B1, WordBreakProperty.Other],
+ [/*start*/ 0x9B2, WordBreakProperty.ALetter],
+ [/*start*/ 0x9B3, WordBreakProperty.Other],
+ [/*start*/ 0x9B6, WordBreakProperty.ALetter],
+ [/*start*/ 0x9BA, WordBreakProperty.Other],
+ [/*start*/ 0x9BC, WordBreakProperty.Extend],
+ [/*start*/ 0x9BD, WordBreakProperty.ALetter],
+ [/*start*/ 0x9BE, WordBreakProperty.Extend],
+ [/*start*/ 0x9C5, WordBreakProperty.Other],
+ [/*start*/ 0x9C7, WordBreakProperty.Extend],
+ [/*start*/ 0x9C9, WordBreakProperty.Other],
+ [/*start*/ 0x9CB, WordBreakProperty.Extend],
+ [/*start*/ 0x9CE, WordBreakProperty.ALetter],
+ [/*start*/ 0x9CF, WordBreakProperty.Other],
+ [/*start*/ 0x9D7, WordBreakProperty.Extend],
+ [/*start*/ 0x9D8, WordBreakProperty.Other],
+ [/*start*/ 0x9DC, WordBreakProperty.ALetter],
+ [/*start*/ 0x9DE, WordBreakProperty.Other],
+ [/*start*/ 0x9DF, WordBreakProperty.ALetter],
+ [/*start*/ 0x9E2, WordBreakProperty.Extend],
+ [/*start*/ 0x9E4, WordBreakProperty.Other],
+ [/*start*/ 0x9E6, WordBreakProperty.Numeric],
+ [/*start*/ 0x9F0, WordBreakProperty.ALetter],
+ [/*start*/ 0x9F2, WordBreakProperty.Other],
+ [/*start*/ 0x9FC, WordBreakProperty.ALetter],
+ [/*start*/ 0x9FD, WordBreakProperty.Other],
+ [/*start*/ 0x9FE, WordBreakProperty.Extend],
+ [/*start*/ 0x9FF, WordBreakProperty.Other],
+ [/*start*/ 0xA01, WordBreakProperty.Extend],
+ [/*start*/ 0xA04, WordBreakProperty.Other],
+ [/*start*/ 0xA05, WordBreakProperty.ALetter],
+ [/*start*/ 0xA0B, WordBreakProperty.Other],
+ [/*start*/ 0xA0F, WordBreakProperty.ALetter],
+ [/*start*/ 0xA11, WordBreakProperty.Other],
+ [/*start*/ 0xA13, WordBreakProperty.ALetter],
+ [/*start*/ 0xA29, WordBreakProperty.Other],
+ [/*start*/ 0xA2A, WordBreakProperty.ALetter],
+ [/*start*/ 0xA31, WordBreakProperty.Other],
+ [/*start*/ 0xA32, WordBreakProperty.ALetter],
+ [/*start*/ 0xA34, WordBreakProperty.Other],
+ [/*start*/ 0xA35, WordBreakProperty.ALetter],
+ [/*start*/ 0xA37, WordBreakProperty.Other],
+ [/*start*/ 0xA38, WordBreakProperty.ALetter],
+ [/*start*/ 0xA3A, WordBreakProperty.Other],
+ [/*start*/ 0xA3C, WordBreakProperty.Extend],
+ [/*start*/ 0xA3D, WordBreakProperty.Other],
+ [/*start*/ 0xA3E, WordBreakProperty.Extend],
+ [/*start*/ 0xA43, WordBreakProperty.Other],
+ [/*start*/ 0xA47, WordBreakProperty.Extend],
+ [/*start*/ 0xA49, WordBreakProperty.Other],
+ [/*start*/ 0xA4B, WordBreakProperty.Extend],
+ [/*start*/ 0xA4E, WordBreakProperty.Other],
+ [/*start*/ 0xA51, WordBreakProperty.Extend],
+ [/*start*/ 0xA52, WordBreakProperty.Other],
+ [/*start*/ 0xA59, WordBreakProperty.ALetter],
+ [/*start*/ 0xA5D, WordBreakProperty.Other],
+ [/*start*/ 0xA5E, WordBreakProperty.ALetter],
+ [/*start*/ 0xA5F, WordBreakProperty.Other],
+ [/*start*/ 0xA66, WordBreakProperty.Numeric],
+ [/*start*/ 0xA70, WordBreakProperty.Extend],
+ [/*start*/ 0xA72, WordBreakProperty.ALetter],
+ [/*start*/ 0xA75, WordBreakProperty.Extend],
+ [/*start*/ 0xA76, WordBreakProperty.Other],
+ [/*start*/ 0xA81, WordBreakProperty.Extend],
+ [/*start*/ 0xA84, WordBreakProperty.Other],
+ [/*start*/ 0xA85, WordBreakProperty.ALetter],
+ [/*start*/ 0xA8E, WordBreakProperty.Other],
+ [/*start*/ 0xA8F, WordBreakProperty.ALetter],
+ [/*start*/ 0xA92, WordBreakProperty.Other],
+ [/*start*/ 0xA93, WordBreakProperty.ALetter],
+ [/*start*/ 0xAA9, WordBreakProperty.Other],
+ [/*start*/ 0xAAA, WordBreakProperty.ALetter],
+ [/*start*/ 0xAB1, WordBreakProperty.Other],
+ [/*start*/ 0xAB2, WordBreakProperty.ALetter],
+ [/*start*/ 0xAB4, WordBreakProperty.Other],
+ [/*start*/ 0xAB5, WordBreakProperty.ALetter],
+ [/*start*/ 0xABA, WordBreakProperty.Other],
+ [/*start*/ 0xABC, WordBreakProperty.Extend],
+ [/*start*/ 0xABD, WordBreakProperty.ALetter],
+ [/*start*/ 0xABE, WordBreakProperty.Extend],
+ [/*start*/ 0xAC6, WordBreakProperty.Other],
+ [/*start*/ 0xAC7, WordBreakProperty.Extend],
+ [/*start*/ 0xACA, WordBreakProperty.Other],
+ [/*start*/ 0xACB, WordBreakProperty.Extend],
+ [/*start*/ 0xACE, WordBreakProperty.Other],
+ [/*start*/ 0xAD0, WordBreakProperty.ALetter],
+ [/*start*/ 0xAD1, WordBreakProperty.Other],
+ [/*start*/ 0xAE0, WordBreakProperty.ALetter],
+ [/*start*/ 0xAE2, WordBreakProperty.Extend],
+ [/*start*/ 0xAE4, WordBreakProperty.Other],
+ [/*start*/ 0xAE6, WordBreakProperty.Numeric],
+ [/*start*/ 0xAF0, WordBreakProperty.Other],
+ [/*start*/ 0xAF9, WordBreakProperty.ALetter],
+ [/*start*/ 0xAFA, WordBreakProperty.Extend],
+ [/*start*/ 0xB00, WordBreakProperty.Other],
+ [/*start*/ 0xB01, WordBreakProperty.Extend],
+ [/*start*/ 0xB04, WordBreakProperty.Other],
+ [/*start*/ 0xB05, WordBreakProperty.ALetter],
+ [/*start*/ 0xB0D, WordBreakProperty.Other],
+ [/*start*/ 0xB0F, WordBreakProperty.ALetter],
+ [/*start*/ 0xB11, WordBreakProperty.Other],
+ [/*start*/ 0xB13, WordBreakProperty.ALetter],
+ [/*start*/ 0xB29, WordBreakProperty.Other],
+ [/*start*/ 0xB2A, WordBreakProperty.ALetter],
+ [/*start*/ 0xB31, WordBreakProperty.Other],
+ [/*start*/ 0xB32, WordBreakProperty.ALetter],
+ [/*start*/ 0xB34, WordBreakProperty.Other],
+ [/*start*/ 0xB35, WordBreakProperty.ALetter],
+ [/*start*/ 0xB3A, WordBreakProperty.Other],
+ [/*start*/ 0xB3C, WordBreakProperty.Extend],
+ [/*start*/ 0xB3D, WordBreakProperty.ALetter],
+ [/*start*/ 0xB3E, WordBreakProperty.Extend],
+ [/*start*/ 0xB45, WordBreakProperty.Other],
+ [/*start*/ 0xB47, WordBreakProperty.Extend],
+ [/*start*/ 0xB49, WordBreakProperty.Other],
+ [/*start*/ 0xB4B, WordBreakProperty.Extend],
+ [/*start*/ 0xB4E, WordBreakProperty.Other],
+ [/*start*/ 0xB55, WordBreakProperty.Extend],
+ [/*start*/ 0xB58, WordBreakProperty.Other],
+ [/*start*/ 0xB5C, WordBreakProperty.ALetter],
+ [/*start*/ 0xB5E, WordBreakProperty.Other],
+ [/*start*/ 0xB5F, WordBreakProperty.ALetter],
+ [/*start*/ 0xB62, WordBreakProperty.Extend],
+ [/*start*/ 0xB64, WordBreakProperty.Other],
+ [/*start*/ 0xB66, WordBreakProperty.Numeric],
+ [/*start*/ 0xB70, WordBreakProperty.Other],
+ [/*start*/ 0xB71, WordBreakProperty.ALetter],
+ [/*start*/ 0xB72, WordBreakProperty.Other],
+ [/*start*/ 0xB82, WordBreakProperty.Extend],
+ [/*start*/ 0xB83, WordBreakProperty.ALetter],
+ [/*start*/ 0xB84, WordBreakProperty.Other],
+ [/*start*/ 0xB85, WordBreakProperty.ALetter],
+ [/*start*/ 0xB8B, WordBreakProperty.Other],
+ [/*start*/ 0xB8E, WordBreakProperty.ALetter],
+ [/*start*/ 0xB91, WordBreakProperty.Other],
+ [/*start*/ 0xB92, WordBreakProperty.ALetter],
+ [/*start*/ 0xB96, WordBreakProperty.Other],
+ [/*start*/ 0xB99, WordBreakProperty.ALetter],
+ [/*start*/ 0xB9B, WordBreakProperty.Other],
+ [/*start*/ 0xB9C, WordBreakProperty.ALetter],
+ [/*start*/ 0xB9D, WordBreakProperty.Other],
+ [/*start*/ 0xB9E, WordBreakProperty.ALetter],
+ [/*start*/ 0xBA0, WordBreakProperty.Other],
+ [/*start*/ 0xBA3, WordBreakProperty.ALetter],
+ [/*start*/ 0xBA5, WordBreakProperty.Other],
+ [/*start*/ 0xBA8, WordBreakProperty.ALetter],
+ [/*start*/ 0xBAB, WordBreakProperty.Other],
+ [/*start*/ 0xBAE, WordBreakProperty.ALetter],
+ [/*start*/ 0xBBA, WordBreakProperty.Other],
+ [/*start*/ 0xBBE, WordBreakProperty.Extend],
+ [/*start*/ 0xBC3, WordBreakProperty.Other],
+ [/*start*/ 0xBC6, WordBreakProperty.Extend],
+ [/*start*/ 0xBC9, WordBreakProperty.Other],
+ [/*start*/ 0xBCA, WordBreakProperty.Extend],
+ [/*start*/ 0xBCE, WordBreakProperty.Other],
+ [/*start*/ 0xBD0, WordBreakProperty.ALetter],
+ [/*start*/ 0xBD1, WordBreakProperty.Other],
+ [/*start*/ 0xBD7, WordBreakProperty.Extend],
+ [/*start*/ 0xBD8, WordBreakProperty.Other],
+ [/*start*/ 0xBE6, WordBreakProperty.Numeric],
+ [/*start*/ 0xBF0, WordBreakProperty.Other],
+ [/*start*/ 0xC00, WordBreakProperty.Extend],
+ [/*start*/ 0xC05, WordBreakProperty.ALetter],
+ [/*start*/ 0xC0D, WordBreakProperty.Other],
+ [/*start*/ 0xC0E, WordBreakProperty.ALetter],
+ [/*start*/ 0xC11, WordBreakProperty.Other],
+ [/*start*/ 0xC12, WordBreakProperty.ALetter],
+ [/*start*/ 0xC29, WordBreakProperty.Other],
+ [/*start*/ 0xC2A, WordBreakProperty.ALetter],
+ [/*start*/ 0xC3A, WordBreakProperty.Other],
+ [/*start*/ 0xC3D, WordBreakProperty.ALetter],
+ [/*start*/ 0xC3E, WordBreakProperty.Extend],
+ [/*start*/ 0xC45, WordBreakProperty.Other],
+ [/*start*/ 0xC46, WordBreakProperty.Extend],
+ [/*start*/ 0xC49, WordBreakProperty.Other],
+ [/*start*/ 0xC4A, WordBreakProperty.Extend],
+ [/*start*/ 0xC4E, WordBreakProperty.Other],
+ [/*start*/ 0xC55, WordBreakProperty.Extend],
+ [/*start*/ 0xC57, WordBreakProperty.Other],
+ [/*start*/ 0xC58, WordBreakProperty.ALetter],
+ [/*start*/ 0xC5B, WordBreakProperty.Other],
+ [/*start*/ 0xC60, WordBreakProperty.ALetter],
+ [/*start*/ 0xC62, WordBreakProperty.Extend],
+ [/*start*/ 0xC64, WordBreakProperty.Other],
+ [/*start*/ 0xC66, WordBreakProperty.Numeric],
+ [/*start*/ 0xC70, WordBreakProperty.Other],
+ [/*start*/ 0xC80, WordBreakProperty.ALetter],
+ [/*start*/ 0xC81, WordBreakProperty.Extend],
+ [/*start*/ 0xC84, WordBreakProperty.Other],
+ [/*start*/ 0xC85, WordBreakProperty.ALetter],
+ [/*start*/ 0xC8D, WordBreakProperty.Other],
+ [/*start*/ 0xC8E, WordBreakProperty.ALetter],
+ [/*start*/ 0xC91, WordBreakProperty.Other],
+ [/*start*/ 0xC92, WordBreakProperty.ALetter],
+ [/*start*/ 0xCA9, WordBreakProperty.Other],
+ [/*start*/ 0xCAA, WordBreakProperty.ALetter],
+ [/*start*/ 0xCB4, WordBreakProperty.Other],
+ [/*start*/ 0xCB5, WordBreakProperty.ALetter],
+ [/*start*/ 0xCBA, WordBreakProperty.Other],
+ [/*start*/ 0xCBC, WordBreakProperty.Extend],
+ [/*start*/ 0xCBD, WordBreakProperty.ALetter],
+ [/*start*/ 0xCBE, WordBreakProperty.Extend],
+ [/*start*/ 0xCC5, WordBreakProperty.Other],
+ [/*start*/ 0xCC6, WordBreakProperty.Extend],
+ [/*start*/ 0xCC9, WordBreakProperty.Other],
+ [/*start*/ 0xCCA, WordBreakProperty.Extend],
+ [/*start*/ 0xCCE, WordBreakProperty.Other],
+ [/*start*/ 0xCD5, WordBreakProperty.Extend],
+ [/*start*/ 0xCD7, WordBreakProperty.Other],
+ [/*start*/ 0xCDE, WordBreakProperty.ALetter],
+ [/*start*/ 0xCDF, WordBreakProperty.Other],
+ [/*start*/ 0xCE0, WordBreakProperty.ALetter],
+ [/*start*/ 0xCE2, WordBreakProperty.Extend],
+ [/*start*/ 0xCE4, WordBreakProperty.Other],
+ [/*start*/ 0xCE6, WordBreakProperty.Numeric],
+ [/*start*/ 0xCF0, WordBreakProperty.Other],
+ [/*start*/ 0xCF1, WordBreakProperty.ALetter],
+ [/*start*/ 0xCF3, WordBreakProperty.Other],
+ [/*start*/ 0xD00, WordBreakProperty.Extend],
+ [/*start*/ 0xD04, WordBreakProperty.ALetter],
+ [/*start*/ 0xD0D, WordBreakProperty.Other],
+ [/*start*/ 0xD0E, WordBreakProperty.ALetter],
+ [/*start*/ 0xD11, WordBreakProperty.Other],
+ [/*start*/ 0xD12, WordBreakProperty.ALetter],
+ [/*start*/ 0xD3B, WordBreakProperty.Extend],
+ [/*start*/ 0xD3D, WordBreakProperty.ALetter],
+ [/*start*/ 0xD3E, WordBreakProperty.Extend],
+ [/*start*/ 0xD45, WordBreakProperty.Other],
+ [/*start*/ 0xD46, WordBreakProperty.Extend],
+ [/*start*/ 0xD49, WordBreakProperty.Other],
+ [/*start*/ 0xD4A, WordBreakProperty.Extend],
+ [/*start*/ 0xD4E, WordBreakProperty.ALetter],
+ [/*start*/ 0xD4F, WordBreakProperty.Other],
+ [/*start*/ 0xD54, WordBreakProperty.ALetter],
+ [/*start*/ 0xD57, WordBreakProperty.Extend],
+ [/*start*/ 0xD58, WordBreakProperty.Other],
+ [/*start*/ 0xD5F, WordBreakProperty.ALetter],
+ [/*start*/ 0xD62, WordBreakProperty.Extend],
+ [/*start*/ 0xD64, WordBreakProperty.Other],
+ [/*start*/ 0xD66, WordBreakProperty.Numeric],
+ [/*start*/ 0xD70, WordBreakProperty.Other],
+ [/*start*/ 0xD7A, WordBreakProperty.ALetter],
+ [/*start*/ 0xD80, WordBreakProperty.Other],
+ [/*start*/ 0xD81, WordBreakProperty.Extend],
+ [/*start*/ 0xD84, WordBreakProperty.Other],
+ [/*start*/ 0xD85, WordBreakProperty.ALetter],
+ [/*start*/ 0xD97, WordBreakProperty.Other],
+ [/*start*/ 0xD9A, WordBreakProperty.ALetter],
+ [/*start*/ 0xDB2, WordBreakProperty.Other],
+ [/*start*/ 0xDB3, WordBreakProperty.ALetter],
+ [/*start*/ 0xDBC, WordBreakProperty.Other],
+ [/*start*/ 0xDBD, WordBreakProperty.ALetter],
+ [/*start*/ 0xDBE, WordBreakProperty.Other],
+ [/*start*/ 0xDC0, WordBreakProperty.ALetter],
+ [/*start*/ 0xDC7, WordBreakProperty.Other],
+ [/*start*/ 0xDCA, WordBreakProperty.Extend],
+ [/*start*/ 0xDCB, WordBreakProperty.Other],
+ [/*start*/ 0xDCF, WordBreakProperty.Extend],
+ [/*start*/ 0xDD5, WordBreakProperty.Other],
+ [/*start*/ 0xDD6, WordBreakProperty.Extend],
+ [/*start*/ 0xDD7, WordBreakProperty.Other],
+ [/*start*/ 0xDD8, WordBreakProperty.Extend],
+ [/*start*/ 0xDE0, WordBreakProperty.Other],
+ [/*start*/ 0xDE6, WordBreakProperty.Numeric],
+ [/*start*/ 0xDF0, WordBreakProperty.Other],
+ [/*start*/ 0xDF2, WordBreakProperty.Extend],
+ [/*start*/ 0xDF4, WordBreakProperty.Other],
+ [/*start*/ 0xE31, WordBreakProperty.Extend],
+ [/*start*/ 0xE32, WordBreakProperty.Other],
+ [/*start*/ 0xE34, WordBreakProperty.Extend],
+ [/*start*/ 0xE3B, WordBreakProperty.Other],
+ [/*start*/ 0xE47, WordBreakProperty.Extend],
+ [/*start*/ 0xE4F, WordBreakProperty.Other],
+ [/*start*/ 0xE50, WordBreakProperty.Numeric],
+ [/*start*/ 0xE5A, WordBreakProperty.Other],
+ [/*start*/ 0xEB1, WordBreakProperty.Extend],
+ [/*start*/ 0xEB2, WordBreakProperty.Other],
+ [/*start*/ 0xEB4, WordBreakProperty.Extend],
+ [/*start*/ 0xEBD, WordBreakProperty.Other],
+ [/*start*/ 0xEC8, WordBreakProperty.Extend],
+ [/*start*/ 0xECE, WordBreakProperty.Other],
+ [/*start*/ 0xED0, WordBreakProperty.Numeric],
+ [/*start*/ 0xEDA, WordBreakProperty.Other],
+ [/*start*/ 0xF00, WordBreakProperty.ALetter],
+ [/*start*/ 0xF01, WordBreakProperty.Other],
+ [/*start*/ 0xF18, WordBreakProperty.Extend],
+ [/*start*/ 0xF1A, WordBreakProperty.Other],
+ [/*start*/ 0xF20, WordBreakProperty.Numeric],
+ [/*start*/ 0xF2A, WordBreakProperty.Other],
+ [/*start*/ 0xF35, WordBreakProperty.Extend],
+ [/*start*/ 0xF36, WordBreakProperty.Other],
+ [/*start*/ 0xF37, WordBreakProperty.Extend],
+ [/*start*/ 0xF38, WordBreakProperty.Other],
+ [/*start*/ 0xF39, WordBreakProperty.Extend],
+ [/*start*/ 0xF3A, WordBreakProperty.Other],
+ [/*start*/ 0xF3E, WordBreakProperty.Extend],
+ [/*start*/ 0xF40, WordBreakProperty.ALetter],
+ [/*start*/ 0xF48, WordBreakProperty.Other],
+ [/*start*/ 0xF49, WordBreakProperty.ALetter],
+ [/*start*/ 0xF6D, WordBreakProperty.Other],
+ [/*start*/ 0xF71, WordBreakProperty.Extend],
+ [/*start*/ 0xF85, WordBreakProperty.Other],
+ [/*start*/ 0xF86, WordBreakProperty.Extend],
+ [/*start*/ 0xF88, WordBreakProperty.ALetter],
+ [/*start*/ 0xF8D, WordBreakProperty.Extend],
+ [/*start*/ 0xF98, WordBreakProperty.Other],
+ [/*start*/ 0xF99, WordBreakProperty.Extend],
+ [/*start*/ 0xFBD, WordBreakProperty.Other],
+ [/*start*/ 0xFC6, WordBreakProperty.Extend],
+ [/*start*/ 0xFC7, WordBreakProperty.Other],
+ [/*start*/ 0x102B, WordBreakProperty.Extend],
+ [/*start*/ 0x103F, WordBreakProperty.Other],
+ [/*start*/ 0x1040, WordBreakProperty.Numeric],
+ [/*start*/ 0x104A, WordBreakProperty.Other],
+ [/*start*/ 0x1056, WordBreakProperty.Extend],
+ [/*start*/ 0x105A, WordBreakProperty.Other],
+ [/*start*/ 0x105E, WordBreakProperty.Extend],
+ [/*start*/ 0x1061, WordBreakProperty.Other],
+ [/*start*/ 0x1062, WordBreakProperty.Extend],
+ [/*start*/ 0x1065, WordBreakProperty.Other],
+ [/*start*/ 0x1067, WordBreakProperty.Extend],
+ [/*start*/ 0x106E, WordBreakProperty.Other],
+ [/*start*/ 0x1071, WordBreakProperty.Extend],
+ [/*start*/ 0x1075, WordBreakProperty.Other],
+ [/*start*/ 0x1082, WordBreakProperty.Extend],
+ [/*start*/ 0x108E, WordBreakProperty.Other],
+ [/*start*/ 0x108F, WordBreakProperty.Extend],
+ [/*start*/ 0x1090, WordBreakProperty.Numeric],
+ [/*start*/ 0x109A, WordBreakProperty.Extend],
+ [/*start*/ 0x109E, WordBreakProperty.Other],
+ [/*start*/ 0x10A0, WordBreakProperty.ALetter],
+ [/*start*/ 0x10C6, WordBreakProperty.Other],
+ [/*start*/ 0x10C7, WordBreakProperty.ALetter],
+ [/*start*/ 0x10C8, WordBreakProperty.Other],
+ [/*start*/ 0x10CD, WordBreakProperty.ALetter],
+ [/*start*/ 0x10CE, WordBreakProperty.Other],
+ [/*start*/ 0x10D0, WordBreakProperty.ALetter],
+ [/*start*/ 0x10FB, WordBreakProperty.Other],
+ [/*start*/ 0x10FC, WordBreakProperty.ALetter],
+ [/*start*/ 0x1249, WordBreakProperty.Other],
+ [/*start*/ 0x124A, WordBreakProperty.ALetter],
+ [/*start*/ 0x124E, WordBreakProperty.Other],
+ [/*start*/ 0x1250, WordBreakProperty.ALetter],
+ [/*start*/ 0x1257, WordBreakProperty.Other],
+ [/*start*/ 0x1258, WordBreakProperty.ALetter],
+ [/*start*/ 0x1259, WordBreakProperty.Other],
+ [/*start*/ 0x125A, WordBreakProperty.ALetter],
+ [/*start*/ 0x125E, WordBreakProperty.Other],
+ [/*start*/ 0x1260, WordBreakProperty.ALetter],
+ [/*start*/ 0x1289, WordBreakProperty.Other],
+ [/*start*/ 0x128A, WordBreakProperty.ALetter],
+ [/*start*/ 0x128E, WordBreakProperty.Other],
+ [/*start*/ 0x1290, WordBreakProperty.ALetter],
+ [/*start*/ 0x12B1, WordBreakProperty.Other],
+ [/*start*/ 0x12B2, WordBreakProperty.ALetter],
+ [/*start*/ 0x12B6, WordBreakProperty.Other],
+ [/*start*/ 0x12B8, WordBreakProperty.ALetter],
+ [/*start*/ 0x12BF, WordBreakProperty.Other],
+ [/*start*/ 0x12C0, WordBreakProperty.ALetter],
+ [/*start*/ 0x12C1, WordBreakProperty.Other],
+ [/*start*/ 0x12C2, WordBreakProperty.ALetter],
+ [/*start*/ 0x12C6, WordBreakProperty.Other],
+ [/*start*/ 0x12C8, WordBreakProperty.ALetter],
+ [/*start*/ 0x12D7, WordBreakProperty.Other],
+ [/*start*/ 0x12D8, WordBreakProperty.ALetter],
+ [/*start*/ 0x1311, WordBreakProperty.Other],
+ [/*start*/ 0x1312, WordBreakProperty.ALetter],
+ [/*start*/ 0x1316, WordBreakProperty.Other],
+ [/*start*/ 0x1318, WordBreakProperty.ALetter],
+ [/*start*/ 0x135B, WordBreakProperty.Other],
+ [/*start*/ 0x135D, WordBreakProperty.Extend],
+ [/*start*/ 0x1360, WordBreakProperty.Other],
+ [/*start*/ 0x1380, WordBreakProperty.ALetter],
+ [/*start*/ 0x1390, WordBreakProperty.Other],
+ [/*start*/ 0x13A0, WordBreakProperty.ALetter],
+ [/*start*/ 0x13F6, WordBreakProperty.Other],
+ [/*start*/ 0x13F8, WordBreakProperty.ALetter],
+ [/*start*/ 0x13FE, WordBreakProperty.Other],
+ [/*start*/ 0x1401, WordBreakProperty.ALetter],
+ [/*start*/ 0x166D, WordBreakProperty.Other],
+ [/*start*/ 0x166F, WordBreakProperty.ALetter],
+ [/*start*/ 0x1680, WordBreakProperty.WSegSpace],
+ [/*start*/ 0x1681, WordBreakProperty.ALetter],
+ [/*start*/ 0x169B, WordBreakProperty.Other],
+ [/*start*/ 0x16A0, WordBreakProperty.ALetter],
+ [/*start*/ 0x16EB, WordBreakProperty.Other],
+ [/*start*/ 0x16EE, WordBreakProperty.ALetter],
+ [/*start*/ 0x16F9, WordBreakProperty.Other],
+ [/*start*/ 0x1700, WordBreakProperty.ALetter],
+ [/*start*/ 0x170D, WordBreakProperty.Other],
+ [/*start*/ 0x170E, WordBreakProperty.ALetter],
+ [/*start*/ 0x1712, WordBreakProperty.Extend],
+ [/*start*/ 0x1715, WordBreakProperty.Other],
+ [/*start*/ 0x1720, WordBreakProperty.ALetter],
+ [/*start*/ 0x1732, WordBreakProperty.Extend],
+ [/*start*/ 0x1735, WordBreakProperty.Other],
+ [/*start*/ 0x1740, WordBreakProperty.ALetter],
+ [/*start*/ 0x1752, WordBreakProperty.Extend],
+ [/*start*/ 0x1754, WordBreakProperty.Other],
+ [/*start*/ 0x1760, WordBreakProperty.ALetter],
+ [/*start*/ 0x176D, WordBreakProperty.Other],
+ [/*start*/ 0x176E, WordBreakProperty.ALetter],
+ [/*start*/ 0x1771, WordBreakProperty.Other],
+ [/*start*/ 0x1772, WordBreakProperty.Extend],
+ [/*start*/ 0x1774, WordBreakProperty.Other],
+ [/*start*/ 0x17B4, WordBreakProperty.Extend],
+ [/*start*/ 0x17D4, WordBreakProperty.Other],
+ [/*start*/ 0x17DD, WordBreakProperty.Extend],
+ [/*start*/ 0x17DE, WordBreakProperty.Other],
+ [/*start*/ 0x17E0, WordBreakProperty.Numeric],
+ [/*start*/ 0x17EA, WordBreakProperty.Other],
+ [/*start*/ 0x180B, WordBreakProperty.Extend],
+ [/*start*/ 0x180E, WordBreakProperty.Format],
+ [/*start*/ 0x180F, WordBreakProperty.Other],
+ [/*start*/ 0x1810, WordBreakProperty.Numeric],
+ [/*start*/ 0x181A, WordBreakProperty.Other],
+ [/*start*/ 0x1820, WordBreakProperty.ALetter],
+ [/*start*/ 0x1879, WordBreakProperty.Other],
+ [/*start*/ 0x1880, WordBreakProperty.ALetter],
+ [/*start*/ 0x1885, WordBreakProperty.Extend],
+ [/*start*/ 0x1887, WordBreakProperty.ALetter],
+ [/*start*/ 0x18A9, WordBreakProperty.Extend],
+ [/*start*/ 0x18AA, WordBreakProperty.ALetter],
+ [/*start*/ 0x18AB, WordBreakProperty.Other],
+ [/*start*/ 0x18B0, WordBreakProperty.ALetter],
+ [/*start*/ 0x18F6, WordBreakProperty.Other],
+ [/*start*/ 0x1900, WordBreakProperty.ALetter],
+ [/*start*/ 0x191F, WordBreakProperty.Other],
+ [/*start*/ 0x1920, WordBreakProperty.Extend],
+ [/*start*/ 0x192C, WordBreakProperty.Other],
+ [/*start*/ 0x1930, WordBreakProperty.Extend],
+ [/*start*/ 0x193C, WordBreakProperty.Other],
+ [/*start*/ 0x1946, WordBreakProperty.Numeric],
+ [/*start*/ 0x1950, WordBreakProperty.Other],
+ [/*start*/ 0x19D0, WordBreakProperty.Numeric],
+ [/*start*/ 0x19DA, WordBreakProperty.Other],
+ [/*start*/ 0x1A00, WordBreakProperty.ALetter],
+ [/*start*/ 0x1A17, WordBreakProperty.Extend],
+ [/*start*/ 0x1A1C, WordBreakProperty.Other],
+ [/*start*/ 0x1A55, WordBreakProperty.Extend],
+ [/*start*/ 0x1A5F, WordBreakProperty.Other],
+ [/*start*/ 0x1A60, WordBreakProperty.Extend],
+ [/*start*/ 0x1A7D, WordBreakProperty.Other],
+ [/*start*/ 0x1A7F, WordBreakProperty.Extend],
+ [/*start*/ 0x1A80, WordBreakProperty.Numeric],
+ [/*start*/ 0x1A8A, WordBreakProperty.Other],
+ [/*start*/ 0x1A90, WordBreakProperty.Numeric],
+ [/*start*/ 0x1A9A, WordBreakProperty.Other],
+ [/*start*/ 0x1AB0, WordBreakProperty.Extend],
+ [/*start*/ 0x1AC1, WordBreakProperty.Other],
+ [/*start*/ 0x1B00, WordBreakProperty.Extend],
+ [/*start*/ 0x1B05, WordBreakProperty.ALetter],
+ [/*start*/ 0x1B34, WordBreakProperty.Extend],
+ [/*start*/ 0x1B45, WordBreakProperty.ALetter],
+ [/*start*/ 0x1B4C, WordBreakProperty.Other],
+ [/*start*/ 0x1B50, WordBreakProperty.Numeric],
+ [/*start*/ 0x1B5A, WordBreakProperty.Other],
+ [/*start*/ 0x1B6B, WordBreakProperty.Extend],
+ [/*start*/ 0x1B74, WordBreakProperty.Other],
+ [/*start*/ 0x1B80, WordBreakProperty.Extend],
+ [/*start*/ 0x1B83, WordBreakProperty.ALetter],
+ [/*start*/ 0x1BA1, WordBreakProperty.Extend],
+ [/*start*/ 0x1BAE, WordBreakProperty.ALetter],
+ [/*start*/ 0x1BB0, WordBreakProperty.Numeric],
+ [/*start*/ 0x1BBA, WordBreakProperty.ALetter],
+ [/*start*/ 0x1BE6, WordBreakProperty.Extend],
+ [/*start*/ 0x1BF4, WordBreakProperty.Other],
+ [/*start*/ 0x1C00, WordBreakProperty.ALetter],
+ [/*start*/ 0x1C24, WordBreakProperty.Extend],
+ [/*start*/ 0x1C38, WordBreakProperty.Other],
+ [/*start*/ 0x1C40, WordBreakProperty.Numeric],
+ [/*start*/ 0x1C4A, WordBreakProperty.Other],
+ [/*start*/ 0x1C4D, WordBreakProperty.ALetter],
+ [/*start*/ 0x1C50, WordBreakProperty.Numeric],
+ [/*start*/ 0x1C5A, WordBreakProperty.ALetter],
+ [/*start*/ 0x1C7E, WordBreakProperty.Other],
+ [/*start*/ 0x1C80, WordBreakProperty.ALetter],
+ [/*start*/ 0x1C89, WordBreakProperty.Other],
+ [/*start*/ 0x1C90, WordBreakProperty.ALetter],
+ [/*start*/ 0x1CBB, WordBreakProperty.Other],
+ [/*start*/ 0x1CBD, WordBreakProperty.ALetter],
+ [/*start*/ 0x1CC0, WordBreakProperty.Other],
+ [/*start*/ 0x1CD0, WordBreakProperty.Extend],
+ [/*start*/ 0x1CD3, WordBreakProperty.Other],
+ [/*start*/ 0x1CD4, WordBreakProperty.Extend],
+ [/*start*/ 0x1CE9, WordBreakProperty.ALetter],
+ [/*start*/ 0x1CED, WordBreakProperty.Extend],
+ [/*start*/ 0x1CEE, WordBreakProperty.ALetter],
+ [/*start*/ 0x1CF4, WordBreakProperty.Extend],
+ [/*start*/ 0x1CF5, WordBreakProperty.ALetter],
+ [/*start*/ 0x1CF7, WordBreakProperty.Extend],
+ [/*start*/ 0x1CFA, WordBreakProperty.ALetter],
+ [/*start*/ 0x1CFB, WordBreakProperty.Other],
+ [/*start*/ 0x1D00, WordBreakProperty.ALetter],
+ [/*start*/ 0x1DC0, WordBreakProperty.Extend],
+ [/*start*/ 0x1DFA, WordBreakProperty.Other],
+ [/*start*/ 0x1DFB, WordBreakProperty.Extend],
+ [/*start*/ 0x1E00, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F16, WordBreakProperty.Other],
+ [/*start*/ 0x1F18, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F1E, WordBreakProperty.Other],
+ [/*start*/ 0x1F20, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F46, WordBreakProperty.Other],
+ [/*start*/ 0x1F48, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F4E, WordBreakProperty.Other],
+ [/*start*/ 0x1F50, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F58, WordBreakProperty.Other],
+ [/*start*/ 0x1F59, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F5A, WordBreakProperty.Other],
+ [/*start*/ 0x1F5B, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F5C, WordBreakProperty.Other],
+ [/*start*/ 0x1F5D, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F5E, WordBreakProperty.Other],
+ [/*start*/ 0x1F5F, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F7E, WordBreakProperty.Other],
+ [/*start*/ 0x1F80, WordBreakProperty.ALetter],
+ [/*start*/ 0x1FB5, WordBreakProperty.Other],
+ [/*start*/ 0x1FB6, WordBreakProperty.ALetter],
+ [/*start*/ 0x1FBD, WordBreakProperty.Other],
+ [/*start*/ 0x1FBE, WordBreakProperty.ALetter],
+ [/*start*/ 0x1FBF, WordBreakProperty.Other],
+ [/*start*/ 0x1FC2, WordBreakProperty.ALetter],
+ [/*start*/ 0x1FC5, WordBreakProperty.Other],
+ [/*start*/ 0x1FC6, WordBreakProperty.ALetter],
+ [/*start*/ 0x1FCD, WordBreakProperty.Other],
+ [/*start*/ 0x1FD0, WordBreakProperty.ALetter],
+ [/*start*/ 0x1FD4, WordBreakProperty.Other],
+ [/*start*/ 0x1FD6, WordBreakProperty.ALetter],
+ [/*start*/ 0x1FDC, WordBreakProperty.Other],
+ [/*start*/ 0x1FE0, WordBreakProperty.ALetter],
+ [/*start*/ 0x1FED, WordBreakProperty.Other],
+ [/*start*/ 0x1FF2, WordBreakProperty.ALetter],
+ [/*start*/ 0x1FF5, WordBreakProperty.Other],
+ [/*start*/ 0x1FF6, WordBreakProperty.ALetter],
+ [/*start*/ 0x1FFD, WordBreakProperty.Other],
+ [/*start*/ 0x2000, WordBreakProperty.WSegSpace],
+ [/*start*/ 0x2007, WordBreakProperty.Other],
+ [/*start*/ 0x2008, WordBreakProperty.WSegSpace],
+ [/*start*/ 0x200B, WordBreakProperty.Other],
+ [/*start*/ 0x200C, WordBreakProperty.Extend],
+ [/*start*/ 0x200D, WordBreakProperty.ZWJ],
+ [/*start*/ 0x200E, WordBreakProperty.Format],
+ [/*start*/ 0x2010, WordBreakProperty.Other],
+ [/*start*/ 0x2018, WordBreakProperty.MidNumLet],
+ [/*start*/ 0x201A, WordBreakProperty.Other],
+ [/*start*/ 0x2024, WordBreakProperty.MidNumLet],
+ [/*start*/ 0x2025, WordBreakProperty.Other],
+ [/*start*/ 0x2027, WordBreakProperty.MidLetter],
+ [/*start*/ 0x2028, WordBreakProperty.Newline],
+ [/*start*/ 0x202A, WordBreakProperty.Format],
+ [/*start*/ 0x202F, WordBreakProperty.ExtendNumLet],
+ [/*start*/ 0x2030, WordBreakProperty.Other],
+ [/*start*/ 0x203F, WordBreakProperty.ExtendNumLet],
+ [/*start*/ 0x2041, WordBreakProperty.Other],
+ [/*start*/ 0x2044, WordBreakProperty.MidNum],
+ [/*start*/ 0x2045, WordBreakProperty.Other],
+ [/*start*/ 0x2054, WordBreakProperty.ExtendNumLet],
+ [/*start*/ 0x2055, WordBreakProperty.Other],
+ [/*start*/ 0x205F, WordBreakProperty.WSegSpace],
+ [/*start*/ 0x2060, WordBreakProperty.Format],
+ [/*start*/ 0x2065, WordBreakProperty.Other],
+ [/*start*/ 0x2066, WordBreakProperty.Format],
+ [/*start*/ 0x2070, WordBreakProperty.Other],
+ [/*start*/ 0x2071, WordBreakProperty.ALetter],
+ [/*start*/ 0x2072, WordBreakProperty.Other],
+ [/*start*/ 0x207F, WordBreakProperty.ALetter],
+ [/*start*/ 0x2080, WordBreakProperty.Other],
+ [/*start*/ 0x2090, WordBreakProperty.ALetter],
+ [/*start*/ 0x209D, WordBreakProperty.Other],
+ [/*start*/ 0x20D0, WordBreakProperty.Extend],
+ [/*start*/ 0x20F1, WordBreakProperty.Other],
+ [/*start*/ 0x2102, WordBreakProperty.ALetter],
+ [/*start*/ 0x2103, WordBreakProperty.Other],
+ [/*start*/ 0x2107, WordBreakProperty.ALetter],
+ [/*start*/ 0x2108, WordBreakProperty.Other],
+ [/*start*/ 0x210A, WordBreakProperty.ALetter],
+ [/*start*/ 0x2114, WordBreakProperty.Other],
+ [/*start*/ 0x2115, WordBreakProperty.ALetter],
+ [/*start*/ 0x2116, WordBreakProperty.Other],
+ [/*start*/ 0x2119, WordBreakProperty.ALetter],
+ [/*start*/ 0x211E, WordBreakProperty.Other],
+ [/*start*/ 0x2124, WordBreakProperty.ALetter],
+ [/*start*/ 0x2125, WordBreakProperty.Other],
+ [/*start*/ 0x2126, WordBreakProperty.ALetter],
+ [/*start*/ 0x2127, WordBreakProperty.Other],
+ [/*start*/ 0x2128, WordBreakProperty.ALetter],
+ [/*start*/ 0x2129, WordBreakProperty.Other],
+ [/*start*/ 0x212A, WordBreakProperty.ALetter],
+ [/*start*/ 0x212E, WordBreakProperty.Other],
+ [/*start*/ 0x212F, WordBreakProperty.ALetter],
+ [/*start*/ 0x213A, WordBreakProperty.Other],
+ [/*start*/ 0x213C, WordBreakProperty.ALetter],
+ [/*start*/ 0x2140, WordBreakProperty.Other],
+ [/*start*/ 0x2145, WordBreakProperty.ALetter],
+ [/*start*/ 0x214A, WordBreakProperty.Other],
+ [/*start*/ 0x214E, WordBreakProperty.ALetter],
+ [/*start*/ 0x214F, WordBreakProperty.Other],
+ [/*start*/ 0x2160, WordBreakProperty.ALetter],
+ [/*start*/ 0x2189, WordBreakProperty.Other],
+ [/*start*/ 0x24B6, WordBreakProperty.ALetter],
+ [/*start*/ 0x24EA, WordBreakProperty.Other],
+ [/*start*/ 0x2C00, WordBreakProperty.ALetter],
+ [/*start*/ 0x2C2F, WordBreakProperty.Other],
+ [/*start*/ 0x2C30, WordBreakProperty.ALetter],
+ [/*start*/ 0x2C5F, WordBreakProperty.Other],
+ [/*start*/ 0x2C60, WordBreakProperty.ALetter],
+ [/*start*/ 0x2CE5, WordBreakProperty.Other],
+ [/*start*/ 0x2CEB, WordBreakProperty.ALetter],
+ [/*start*/ 0x2CEF, WordBreakProperty.Extend],
+ [/*start*/ 0x2CF2, WordBreakProperty.ALetter],
+ [/*start*/ 0x2CF4, WordBreakProperty.Other],
+ [/*start*/ 0x2D00, WordBreakProperty.ALetter],
+ [/*start*/ 0x2D26, WordBreakProperty.Other],
+ [/*start*/ 0x2D27, WordBreakProperty.ALetter],
+ [/*start*/ 0x2D28, WordBreakProperty.Other],
+ [/*start*/ 0x2D2D, WordBreakProperty.ALetter],
+ [/*start*/ 0x2D2E, WordBreakProperty.Other],
+ [/*start*/ 0x2D30, WordBreakProperty.ALetter],
+ [/*start*/ 0x2D68, WordBreakProperty.Other],
+ [/*start*/ 0x2D6F, WordBreakProperty.ALetter],
+ [/*start*/ 0x2D70, WordBreakProperty.Other],
+ [/*start*/ 0x2D7F, WordBreakProperty.Extend],
+ [/*start*/ 0x2D80, WordBreakProperty.ALetter],
+ [/*start*/ 0x2D97, WordBreakProperty.Other],
+ [/*start*/ 0x2DA0, WordBreakProperty.ALetter],
+ [/*start*/ 0x2DA7, WordBreakProperty.Other],
+ [/*start*/ 0x2DA8, WordBreakProperty.ALetter],
+ [/*start*/ 0x2DAF, WordBreakProperty.Other],
+ [/*start*/ 0x2DB0, WordBreakProperty.ALetter],
+ [/*start*/ 0x2DB7, WordBreakProperty.Other],
+ [/*start*/ 0x2DB8, WordBreakProperty.ALetter],
+ [/*start*/ 0x2DBF, WordBreakProperty.Other],
+ [/*start*/ 0x2DC0, WordBreakProperty.ALetter],
+ [/*start*/ 0x2DC7, WordBreakProperty.Other],
+ [/*start*/ 0x2DC8, WordBreakProperty.ALetter],
+ [/*start*/ 0x2DCF, WordBreakProperty.Other],
+ [/*start*/ 0x2DD0, WordBreakProperty.ALetter],
+ [/*start*/ 0x2DD7, WordBreakProperty.Other],
+ [/*start*/ 0x2DD8, WordBreakProperty.ALetter],
+ [/*start*/ 0x2DDF, WordBreakProperty.Other],
+ [/*start*/ 0x2DE0, WordBreakProperty.Extend],
+ [/*start*/ 0x2E00, WordBreakProperty.Other],
+ [/*start*/ 0x2E2F, WordBreakProperty.ALetter],
+ [/*start*/ 0x2E30, WordBreakProperty.Other],
+ [/*start*/ 0x3000, WordBreakProperty.WSegSpace],
+ [/*start*/ 0x3001, WordBreakProperty.Other],
+ [/*start*/ 0x3005, WordBreakProperty.ALetter],
+ [/*start*/ 0x3006, WordBreakProperty.Other],
+ [/*start*/ 0x302A, WordBreakProperty.Extend],
+ [/*start*/ 0x3030, WordBreakProperty.Other],
+ [/*start*/ 0x3031, WordBreakProperty.Katakana],
+ [/*start*/ 0x3036, WordBreakProperty.Other],
+ [/*start*/ 0x303B, WordBreakProperty.ALetter],
+ [/*start*/ 0x303D, WordBreakProperty.Other],
+ [/*start*/ 0x3099, WordBreakProperty.Extend],
+ [/*start*/ 0x309B, WordBreakProperty.Katakana],
+ [/*start*/ 0x309D, WordBreakProperty.Other],
+ [/*start*/ 0x30A0, WordBreakProperty.Katakana],
+ [/*start*/ 0x30FB, WordBreakProperty.Other],
+ [/*start*/ 0x30FC, WordBreakProperty.Katakana],
+ [/*start*/ 0x3100, WordBreakProperty.Other],
+ [/*start*/ 0x3105, WordBreakProperty.ALetter],
+ [/*start*/ 0x3130, WordBreakProperty.Other],
+ [/*start*/ 0x3131, WordBreakProperty.ALetter],
+ [/*start*/ 0x318F, WordBreakProperty.Other],
+ [/*start*/ 0x31A0, WordBreakProperty.ALetter],
+ [/*start*/ 0x31C0, WordBreakProperty.Other],
+ [/*start*/ 0x31F0, WordBreakProperty.Katakana],
+ [/*start*/ 0x3200, WordBreakProperty.Other],
+ [/*start*/ 0x32D0, WordBreakProperty.Katakana],
+ [/*start*/ 0x32FF, WordBreakProperty.Other],
+ [/*start*/ 0x3300, WordBreakProperty.Katakana],
+ [/*start*/ 0x3358, WordBreakProperty.Other],
+ [/*start*/ 0xA000, WordBreakProperty.ALetter],
+ [/*start*/ 0xA48D, WordBreakProperty.Other],
+ [/*start*/ 0xA4D0, WordBreakProperty.ALetter],
+ [/*start*/ 0xA4FE, WordBreakProperty.Other],
+ [/*start*/ 0xA500, WordBreakProperty.ALetter],
+ [/*start*/ 0xA60D, WordBreakProperty.Other],
+ [/*start*/ 0xA610, WordBreakProperty.ALetter],
+ [/*start*/ 0xA620, WordBreakProperty.Numeric],
+ [/*start*/ 0xA62A, WordBreakProperty.ALetter],
+ [/*start*/ 0xA62C, WordBreakProperty.Other],
+ [/*start*/ 0xA640, WordBreakProperty.ALetter],
+ [/*start*/ 0xA66F, WordBreakProperty.Extend],
+ [/*start*/ 0xA673, WordBreakProperty.Other],
+ [/*start*/ 0xA674, WordBreakProperty.Extend],
+ [/*start*/ 0xA67E, WordBreakProperty.Other],
+ [/*start*/ 0xA67F, WordBreakProperty.ALetter],
+ [/*start*/ 0xA69E, WordBreakProperty.Extend],
+ [/*start*/ 0xA6A0, WordBreakProperty.ALetter],
+ [/*start*/ 0xA6F0, WordBreakProperty.Extend],
+ [/*start*/ 0xA6F2, WordBreakProperty.Other],
+ [/*start*/ 0xA708, WordBreakProperty.ALetter],
+ [/*start*/ 0xA7C0, WordBreakProperty.Other],
+ [/*start*/ 0xA7C2, WordBreakProperty.ALetter],
+ [/*start*/ 0xA7CB, WordBreakProperty.Other],
+ [/*start*/ 0xA7F5, WordBreakProperty.ALetter],
+ [/*start*/ 0xA802, WordBreakProperty.Extend],
+ [/*start*/ 0xA803, WordBreakProperty.ALetter],
+ [/*start*/ 0xA806, WordBreakProperty.Extend],
+ [/*start*/ 0xA807, WordBreakProperty.ALetter],
+ [/*start*/ 0xA80B, WordBreakProperty.Extend],
+ [/*start*/ 0xA80C, WordBreakProperty.ALetter],
+ [/*start*/ 0xA823, WordBreakProperty.Extend],
+ [/*start*/ 0xA828, WordBreakProperty.Other],
+ [/*start*/ 0xA82C, WordBreakProperty.Extend],
+ [/*start*/ 0xA82D, WordBreakProperty.Other],
+ [/*start*/ 0xA840, WordBreakProperty.ALetter],
+ [/*start*/ 0xA874, WordBreakProperty.Other],
+ [/*start*/ 0xA880, WordBreakProperty.Extend],
+ [/*start*/ 0xA882, WordBreakProperty.ALetter],
+ [/*start*/ 0xA8B4, WordBreakProperty.Extend],
+ [/*start*/ 0xA8C6, WordBreakProperty.Other],
+ [/*start*/ 0xA8D0, WordBreakProperty.Numeric],
+ [/*start*/ 0xA8DA, WordBreakProperty.Other],
+ [/*start*/ 0xA8E0, WordBreakProperty.Extend],
+ [/*start*/ 0xA8F2, WordBreakProperty.ALetter],
+ [/*start*/ 0xA8F8, WordBreakProperty.Other],
+ [/*start*/ 0xA8FB, WordBreakProperty.ALetter],
+ [/*start*/ 0xA8FC, WordBreakProperty.Other],
+ [/*start*/ 0xA8FD, WordBreakProperty.ALetter],
+ [/*start*/ 0xA8FF, WordBreakProperty.Extend],
+ [/*start*/ 0xA900, WordBreakProperty.Numeric],
+ [/*start*/ 0xA90A, WordBreakProperty.ALetter],
+ [/*start*/ 0xA926, WordBreakProperty.Extend],
+ [/*start*/ 0xA92E, WordBreakProperty.Other],
+ [/*start*/ 0xA930, WordBreakProperty.ALetter],
+ [/*start*/ 0xA947, WordBreakProperty.Extend],
+ [/*start*/ 0xA954, WordBreakProperty.Other],
+ [/*start*/ 0xA960, WordBreakProperty.ALetter],
+ [/*start*/ 0xA97D, WordBreakProperty.Other],
+ [/*start*/ 0xA980, WordBreakProperty.Extend],
+ [/*start*/ 0xA984, WordBreakProperty.ALetter],
+ [/*start*/ 0xA9B3, WordBreakProperty.Extend],
+ [/*start*/ 0xA9C1, WordBreakProperty.Other],
+ [/*start*/ 0xA9CF, WordBreakProperty.ALetter],
+ [/*start*/ 0xA9D0, WordBreakProperty.Numeric],
+ [/*start*/ 0xA9DA, WordBreakProperty.Other],
+ [/*start*/ 0xA9E5, WordBreakProperty.Extend],
+ [/*start*/ 0xA9E6, WordBreakProperty.Other],
+ [/*start*/ 0xA9F0, WordBreakProperty.Numeric],
+ [/*start*/ 0xA9FA, WordBreakProperty.Other],
+ [/*start*/ 0xAA00, WordBreakProperty.ALetter],
+ [/*start*/ 0xAA29, WordBreakProperty.Extend],
+ [/*start*/ 0xAA37, WordBreakProperty.Other],
+ [/*start*/ 0xAA40, WordBreakProperty.ALetter],
+ [/*start*/ 0xAA43, WordBreakProperty.Extend],
+ [/*start*/ 0xAA44, WordBreakProperty.ALetter],
+ [/*start*/ 0xAA4C, WordBreakProperty.Extend],
+ [/*start*/ 0xAA4E, WordBreakProperty.Other],
+ [/*start*/ 0xAA50, WordBreakProperty.Numeric],
+ [/*start*/ 0xAA5A, WordBreakProperty.Other],
+ [/*start*/ 0xAA7B, WordBreakProperty.Extend],
+ [/*start*/ 0xAA7E, WordBreakProperty.Other],
+ [/*start*/ 0xAAB0, WordBreakProperty.Extend],
+ [/*start*/ 0xAAB1, WordBreakProperty.Other],
+ [/*start*/ 0xAAB2, WordBreakProperty.Extend],
+ [/*start*/ 0xAAB5, WordBreakProperty.Other],
+ [/*start*/ 0xAAB7, WordBreakProperty.Extend],
+ [/*start*/ 0xAAB9, WordBreakProperty.Other],
+ [/*start*/ 0xAABE, WordBreakProperty.Extend],
+ [/*start*/ 0xAAC0, WordBreakProperty.Other],
+ [/*start*/ 0xAAC1, WordBreakProperty.Extend],
+ [/*start*/ 0xAAC2, WordBreakProperty.Other],
+ [/*start*/ 0xAAE0, WordBreakProperty.ALetter],
+ [/*start*/ 0xAAEB, WordBreakProperty.Extend],
+ [/*start*/ 0xAAF0, WordBreakProperty.Other],
+ [/*start*/ 0xAAF2, WordBreakProperty.ALetter],
+ [/*start*/ 0xAAF5, WordBreakProperty.Extend],
+ [/*start*/ 0xAAF7, WordBreakProperty.Other],
+ [/*start*/ 0xAB01, WordBreakProperty.ALetter],
+ [/*start*/ 0xAB07, WordBreakProperty.Other],
+ [/*start*/ 0xAB09, WordBreakProperty.ALetter],
+ [/*start*/ 0xAB0F, WordBreakProperty.Other],
+ [/*start*/ 0xAB11, WordBreakProperty.ALetter],
+ [/*start*/ 0xAB17, WordBreakProperty.Other],
+ [/*start*/ 0xAB20, WordBreakProperty.ALetter],
+ [/*start*/ 0xAB27, WordBreakProperty.Other],
+ [/*start*/ 0xAB28, WordBreakProperty.ALetter],
+ [/*start*/ 0xAB2F, WordBreakProperty.Other],
+ [/*start*/ 0xAB30, WordBreakProperty.ALetter],
+ [/*start*/ 0xAB6A, WordBreakProperty.Other],
+ [/*start*/ 0xAB70, WordBreakProperty.ALetter],
+ [/*start*/ 0xABE3, WordBreakProperty.Extend],
+ [/*start*/ 0xABEB, WordBreakProperty.Other],
+ [/*start*/ 0xABEC, WordBreakProperty.Extend],
+ [/*start*/ 0xABEE, WordBreakProperty.Other],
+ [/*start*/ 0xABF0, WordBreakProperty.Numeric],
+ [/*start*/ 0xABFA, WordBreakProperty.Other],
+ [/*start*/ 0xAC00, WordBreakProperty.ALetter],
+ [/*start*/ 0xD7A4, WordBreakProperty.Other],
+ [/*start*/ 0xD7B0, WordBreakProperty.ALetter],
+ [/*start*/ 0xD7C7, WordBreakProperty.Other],
+ [/*start*/ 0xD7CB, WordBreakProperty.ALetter],
+ [/*start*/ 0xD7FC, WordBreakProperty.Other],
+ [/*start*/ 0xFB00, WordBreakProperty.ALetter],
+ [/*start*/ 0xFB07, WordBreakProperty.Other],
+ [/*start*/ 0xFB13, WordBreakProperty.ALetter],
+ [/*start*/ 0xFB18, WordBreakProperty.Other],
+ [/*start*/ 0xFB1D, WordBreakProperty.Hebrew_Letter],
+ [/*start*/ 0xFB1E, WordBreakProperty.Extend],
+ [/*start*/ 0xFB1F, WordBreakProperty.Hebrew_Letter],
+ [/*start*/ 0xFB29, WordBreakProperty.Other],
+ [/*start*/ 0xFB2A, WordBreakProperty.Hebrew_Letter],
+ [/*start*/ 0xFB37, WordBreakProperty.Other],
+ [/*start*/ 0xFB38, WordBreakProperty.Hebrew_Letter],
+ [/*start*/ 0xFB3D, WordBreakProperty.Other],
+ [/*start*/ 0xFB3E, WordBreakProperty.Hebrew_Letter],
+ [/*start*/ 0xFB3F, WordBreakProperty.Other],
+ [/*start*/ 0xFB40, WordBreakProperty.Hebrew_Letter],
+ [/*start*/ 0xFB42, WordBreakProperty.Other],
+ [/*start*/ 0xFB43, WordBreakProperty.Hebrew_Letter],
+ [/*start*/ 0xFB45, WordBreakProperty.Other],
+ [/*start*/ 0xFB46, WordBreakProperty.Hebrew_Letter],
+ [/*start*/ 0xFB50, WordBreakProperty.ALetter],
+ [/*start*/ 0xFBB2, WordBreakProperty.Other],
+ [/*start*/ 0xFBD3, WordBreakProperty.ALetter],
+ [/*start*/ 0xFD3E, WordBreakProperty.Other],
+ [/*start*/ 0xFD50, WordBreakProperty.ALetter],
+ [/*start*/ 0xFD90, WordBreakProperty.Other],
+ [/*start*/ 0xFD92, WordBreakProperty.ALetter],
+ [/*start*/ 0xFDC8, WordBreakProperty.Other],
+ [/*start*/ 0xFDF0, WordBreakProperty.ALetter],
+ [/*start*/ 0xFDFC, WordBreakProperty.Other],
+ [/*start*/ 0xFE00, WordBreakProperty.Extend],
+ [/*start*/ 0xFE10, WordBreakProperty.MidNum],
+ [/*start*/ 0xFE11, WordBreakProperty.Other],
+ [/*start*/ 0xFE13, WordBreakProperty.MidLetter],
+ [/*start*/ 0xFE14, WordBreakProperty.MidNum],
+ [/*start*/ 0xFE15, WordBreakProperty.Other],
+ [/*start*/ 0xFE20, WordBreakProperty.Extend],
+ [/*start*/ 0xFE30, WordBreakProperty.Other],
+ [/*start*/ 0xFE33, WordBreakProperty.ExtendNumLet],
+ [/*start*/ 0xFE35, WordBreakProperty.Other],
+ [/*start*/ 0xFE4D, WordBreakProperty.ExtendNumLet],
+ [/*start*/ 0xFE50, WordBreakProperty.MidNum],
+ [/*start*/ 0xFE51, WordBreakProperty.Other],
+ [/*start*/ 0xFE52, WordBreakProperty.MidNumLet],
+ [/*start*/ 0xFE53, WordBreakProperty.Other],
+ [/*start*/ 0xFE54, WordBreakProperty.MidNum],
+ [/*start*/ 0xFE55, WordBreakProperty.MidLetter],
+ [/*start*/ 0xFE56, WordBreakProperty.Other],
+ [/*start*/ 0xFE70, WordBreakProperty.ALetter],
+ [/*start*/ 0xFE75, WordBreakProperty.Other],
+ [/*start*/ 0xFE76, WordBreakProperty.ALetter],
+ [/*start*/ 0xFEFD, WordBreakProperty.Other],
+ [/*start*/ 0xFEFF, WordBreakProperty.Format],
+ [/*start*/ 0xFF00, WordBreakProperty.Other],
+ [/*start*/ 0xFF07, WordBreakProperty.MidNumLet],
+ [/*start*/ 0xFF08, WordBreakProperty.Other],
+ [/*start*/ 0xFF0C, WordBreakProperty.MidNum],
+ [/*start*/ 0xFF0D, WordBreakProperty.Other],
+ [/*start*/ 0xFF0E, WordBreakProperty.MidNumLet],
+ [/*start*/ 0xFF0F, WordBreakProperty.Other],
+ [/*start*/ 0xFF10, WordBreakProperty.Numeric],
+ [/*start*/ 0xFF1A, WordBreakProperty.MidLetter],
+ [/*start*/ 0xFF1B, WordBreakProperty.MidNum],
+ [/*start*/ 0xFF1C, WordBreakProperty.Other],
+ [/*start*/ 0xFF21, WordBreakProperty.ALetter],
+ [/*start*/ 0xFF3B, WordBreakProperty.Other],
+ [/*start*/ 0xFF3F, WordBreakProperty.ExtendNumLet],
+ [/*start*/ 0xFF40, WordBreakProperty.Other],
+ [/*start*/ 0xFF41, WordBreakProperty.ALetter],
+ [/*start*/ 0xFF5B, WordBreakProperty.Other],
+ [/*start*/ 0xFF66, WordBreakProperty.Katakana],
+ [/*start*/ 0xFF9E, WordBreakProperty.Extend],
+ [/*start*/ 0xFFA0, WordBreakProperty.ALetter],
+ [/*start*/ 0xFFBF, WordBreakProperty.Other],
+ [/*start*/ 0xFFC2, WordBreakProperty.ALetter],
+ [/*start*/ 0xFFC8, WordBreakProperty.Other],
+ [/*start*/ 0xFFCA, WordBreakProperty.ALetter],
+ [/*start*/ 0xFFD0, WordBreakProperty.Other],
+ [/*start*/ 0xFFD2, WordBreakProperty.ALetter],
+ [/*start*/ 0xFFD8, WordBreakProperty.Other],
+ [/*start*/ 0xFFDA, WordBreakProperty.ALetter],
+ [/*start*/ 0xFFDD, WordBreakProperty.Other],
+ [/*start*/ 0xFFF9, WordBreakProperty.Format],
+ [/*start*/ 0xFFFC, WordBreakProperty.Other],
+ [/*start*/ 0x10000, WordBreakProperty.ALetter],
+ [/*start*/ 0x1000C, WordBreakProperty.Other],
+ [/*start*/ 0x1000D, WordBreakProperty.ALetter],
+ [/*start*/ 0x10027, WordBreakProperty.Other],
+ [/*start*/ 0x10028, WordBreakProperty.ALetter],
+ [/*start*/ 0x1003B, WordBreakProperty.Other],
+ [/*start*/ 0x1003C, WordBreakProperty.ALetter],
+ [/*start*/ 0x1003E, WordBreakProperty.Other],
+ [/*start*/ 0x1003F, WordBreakProperty.ALetter],
+ [/*start*/ 0x1004E, WordBreakProperty.Other],
+ [/*start*/ 0x10050, WordBreakProperty.ALetter],
+ [/*start*/ 0x1005E, WordBreakProperty.Other],
+ [/*start*/ 0x10080, WordBreakProperty.ALetter],
+ [/*start*/ 0x100FB, WordBreakProperty.Other],
+ [/*start*/ 0x10140, WordBreakProperty.ALetter],
+ [/*start*/ 0x10175, WordBreakProperty.Other],
+ [/*start*/ 0x101FD, WordBreakProperty.Extend],
+ [/*start*/ 0x101FE, WordBreakProperty.Other],
+ [/*start*/ 0x10280, WordBreakProperty.ALetter],
+ [/*start*/ 0x1029D, WordBreakProperty.Other],
+ [/*start*/ 0x102A0, WordBreakProperty.ALetter],
+ [/*start*/ 0x102D1, WordBreakProperty.Other],
+ [/*start*/ 0x102E0, WordBreakProperty.Extend],
+ [/*start*/ 0x102E1, WordBreakProperty.Other],
+ [/*start*/ 0x10300, WordBreakProperty.ALetter],
+ [/*start*/ 0x10320, WordBreakProperty.Other],
+ [/*start*/ 0x1032D, WordBreakProperty.ALetter],
+ [/*start*/ 0x1034B, WordBreakProperty.Other],
+ [/*start*/ 0x10350, WordBreakProperty.ALetter],
+ [/*start*/ 0x10376, WordBreakProperty.Extend],
+ [/*start*/ 0x1037B, WordBreakProperty.Other],
+ [/*start*/ 0x10380, WordBreakProperty.ALetter],
+ [/*start*/ 0x1039E, WordBreakProperty.Other],
+ [/*start*/ 0x103A0, WordBreakProperty.ALetter],
+ [/*start*/ 0x103C4, WordBreakProperty.Other],
+ [/*start*/ 0x103C8, WordBreakProperty.ALetter],
+ [/*start*/ 0x103D0, WordBreakProperty.Other],
+ [/*start*/ 0x103D1, WordBreakProperty.ALetter],
+ [/*start*/ 0x103D6, WordBreakProperty.Other],
+ [/*start*/ 0x10400, WordBreakProperty.ALetter],
+ [/*start*/ 0x1049E, WordBreakProperty.Other],
+ [/*start*/ 0x104A0, WordBreakProperty.Numeric],
+ [/*start*/ 0x104AA, WordBreakProperty.Other],
+ [/*start*/ 0x104B0, WordBreakProperty.ALetter],
+ [/*start*/ 0x104D4, WordBreakProperty.Other],
+ [/*start*/ 0x104D8, WordBreakProperty.ALetter],
+ [/*start*/ 0x104FC, WordBreakProperty.Other],
+ [/*start*/ 0x10500, WordBreakProperty.ALetter],
+ [/*start*/ 0x10528, WordBreakProperty.Other],
+ [/*start*/ 0x10530, WordBreakProperty.ALetter],
+ [/*start*/ 0x10564, WordBreakProperty.Other],
+ [/*start*/ 0x10600, WordBreakProperty.ALetter],
+ [/*start*/ 0x10737, WordBreakProperty.Other],
+ [/*start*/ 0x10740, WordBreakProperty.ALetter],
+ [/*start*/ 0x10756, WordBreakProperty.Other],
+ [/*start*/ 0x10760, WordBreakProperty.ALetter],
+ [/*start*/ 0x10768, WordBreakProperty.Other],
+ [/*start*/ 0x10800, WordBreakProperty.ALetter],
+ [/*start*/ 0x10806, WordBreakProperty.Other],
+ [/*start*/ 0x10808, WordBreakProperty.ALetter],
+ [/*start*/ 0x10809, WordBreakProperty.Other],
+ [/*start*/ 0x1080A, WordBreakProperty.ALetter],
+ [/*start*/ 0x10836, WordBreakProperty.Other],
+ [/*start*/ 0x10837, WordBreakProperty.ALetter],
+ [/*start*/ 0x10839, WordBreakProperty.Other],
+ [/*start*/ 0x1083C, WordBreakProperty.ALetter],
+ [/*start*/ 0x1083D, WordBreakProperty.Other],
+ [/*start*/ 0x1083F, WordBreakProperty.ALetter],
+ [/*start*/ 0x10856, WordBreakProperty.Other],
+ [/*start*/ 0x10860, WordBreakProperty.ALetter],
+ [/*start*/ 0x10877, WordBreakProperty.Other],
+ [/*start*/ 0x10880, WordBreakProperty.ALetter],
+ [/*start*/ 0x1089F, WordBreakProperty.Other],
+ [/*start*/ 0x108E0, WordBreakProperty.ALetter],
+ [/*start*/ 0x108F3, WordBreakProperty.Other],
+ [/*start*/ 0x108F4, WordBreakProperty.ALetter],
+ [/*start*/ 0x108F6, WordBreakProperty.Other],
+ [/*start*/ 0x10900, WordBreakProperty.ALetter],
+ [/*start*/ 0x10916, WordBreakProperty.Other],
+ [/*start*/ 0x10920, WordBreakProperty.ALetter],
+ [/*start*/ 0x1093A, WordBreakProperty.Other],
+ [/*start*/ 0x10980, WordBreakProperty.ALetter],
+ [/*start*/ 0x109B8, WordBreakProperty.Other],
+ [/*start*/ 0x109BE, WordBreakProperty.ALetter],
+ [/*start*/ 0x109C0, WordBreakProperty.Other],
+ [/*start*/ 0x10A00, WordBreakProperty.ALetter],
+ [/*start*/ 0x10A01, WordBreakProperty.Extend],
+ [/*start*/ 0x10A04, WordBreakProperty.Other],
+ [/*start*/ 0x10A05, WordBreakProperty.Extend],
+ [/*start*/ 0x10A07, WordBreakProperty.Other],
+ [/*start*/ 0x10A0C, WordBreakProperty.Extend],
+ [/*start*/ 0x10A10, WordBreakProperty.ALetter],
+ [/*start*/ 0x10A14, WordBreakProperty.Other],
+ [/*start*/ 0x10A15, WordBreakProperty.ALetter],
+ [/*start*/ 0x10A18, WordBreakProperty.Other],
+ [/*start*/ 0x10A19, WordBreakProperty.ALetter],
+ [/*start*/ 0x10A36, WordBreakProperty.Other],
+ [/*start*/ 0x10A38, WordBreakProperty.Extend],
+ [/*start*/ 0x10A3B, WordBreakProperty.Other],
+ [/*start*/ 0x10A3F, WordBreakProperty.Extend],
+ [/*start*/ 0x10A40, WordBreakProperty.Other],
+ [/*start*/ 0x10A60, WordBreakProperty.ALetter],
+ [/*start*/ 0x10A7D, WordBreakProperty.Other],
+ [/*start*/ 0x10A80, WordBreakProperty.ALetter],
+ [/*start*/ 0x10A9D, WordBreakProperty.Other],
+ [/*start*/ 0x10AC0, WordBreakProperty.ALetter],
+ [/*start*/ 0x10AC8, WordBreakProperty.Other],
+ [/*start*/ 0x10AC9, WordBreakProperty.ALetter],
+ [/*start*/ 0x10AE5, WordBreakProperty.Extend],
+ [/*start*/ 0x10AE7, WordBreakProperty.Other],
+ [/*start*/ 0x10B00, WordBreakProperty.ALetter],
+ [/*start*/ 0x10B36, WordBreakProperty.Other],
+ [/*start*/ 0x10B40, WordBreakProperty.ALetter],
+ [/*start*/ 0x10B56, WordBreakProperty.Other],
+ [/*start*/ 0x10B60, WordBreakProperty.ALetter],
+ [/*start*/ 0x10B73, WordBreakProperty.Other],
+ [/*start*/ 0x10B80, WordBreakProperty.ALetter],
+ [/*start*/ 0x10B92, WordBreakProperty.Other],
+ [/*start*/ 0x10C00, WordBreakProperty.ALetter],
+ [/*start*/ 0x10C49, WordBreakProperty.Other],
+ [/*start*/ 0x10C80, WordBreakProperty.ALetter],
+ [/*start*/ 0x10CB3, WordBreakProperty.Other],
+ [/*start*/ 0x10CC0, WordBreakProperty.ALetter],
+ [/*start*/ 0x10CF3, WordBreakProperty.Other],
+ [/*start*/ 0x10D00, WordBreakProperty.ALetter],
+ [/*start*/ 0x10D24, WordBreakProperty.Extend],
+ [/*start*/ 0x10D28, WordBreakProperty.Other],
+ [/*start*/ 0x10D30, WordBreakProperty.Numeric],
+ [/*start*/ 0x10D3A, WordBreakProperty.Other],
+ [/*start*/ 0x10E80, WordBreakProperty.ALetter],
+ [/*start*/ 0x10EAA, WordBreakProperty.Other],
+ [/*start*/ 0x10EAB, WordBreakProperty.Extend],
+ [/*start*/ 0x10EAD, WordBreakProperty.Other],
+ [/*start*/ 0x10EB0, WordBreakProperty.ALetter],
+ [/*start*/ 0x10EB2, WordBreakProperty.Other],
+ [/*start*/ 0x10F00, WordBreakProperty.ALetter],
+ [/*start*/ 0x10F1D, WordBreakProperty.Other],
+ [/*start*/ 0x10F27, WordBreakProperty.ALetter],
+ [/*start*/ 0x10F28, WordBreakProperty.Other],
+ [/*start*/ 0x10F30, WordBreakProperty.ALetter],
+ [/*start*/ 0x10F46, WordBreakProperty.Extend],
+ [/*start*/ 0x10F51, WordBreakProperty.Other],
+ [/*start*/ 0x10FB0, WordBreakProperty.ALetter],
+ [/*start*/ 0x10FC5, WordBreakProperty.Other],
+ [/*start*/ 0x10FE0, WordBreakProperty.ALetter],
+ [/*start*/ 0x10FF7, WordBreakProperty.Other],
+ [/*start*/ 0x11000, WordBreakProperty.Extend],
+ [/*start*/ 0x11003, WordBreakProperty.ALetter],
+ [/*start*/ 0x11038, WordBreakProperty.Extend],
+ [/*start*/ 0x11047, WordBreakProperty.Other],
+ [/*start*/ 0x11066, WordBreakProperty.Numeric],
+ [/*start*/ 0x11070, WordBreakProperty.Other],
+ [/*start*/ 0x1107F, WordBreakProperty.Extend],
+ [/*start*/ 0x11083, WordBreakProperty.ALetter],
+ [/*start*/ 0x110B0, WordBreakProperty.Extend],
+ [/*start*/ 0x110BB, WordBreakProperty.Other],
+ [/*start*/ 0x110BD, WordBreakProperty.Format],
+ [/*start*/ 0x110BE, WordBreakProperty.Other],
+ [/*start*/ 0x110CD, WordBreakProperty.Format],
+ [/*start*/ 0x110CE, WordBreakProperty.Other],
+ [/*start*/ 0x110D0, WordBreakProperty.ALetter],
+ [/*start*/ 0x110E9, WordBreakProperty.Other],
+ [/*start*/ 0x110F0, WordBreakProperty.Numeric],
+ [/*start*/ 0x110FA, WordBreakProperty.Other],
+ [/*start*/ 0x11100, WordBreakProperty.Extend],
+ [/*start*/ 0x11103, WordBreakProperty.ALetter],
+ [/*start*/ 0x11127, WordBreakProperty.Extend],
+ [/*start*/ 0x11135, WordBreakProperty.Other],
+ [/*start*/ 0x11136, WordBreakProperty.Numeric],
+ [/*start*/ 0x11140, WordBreakProperty.Other],
+ [/*start*/ 0x11144, WordBreakProperty.ALetter],
+ [/*start*/ 0x11145, WordBreakProperty.Extend],
+ [/*start*/ 0x11147, WordBreakProperty.ALetter],
+ [/*start*/ 0x11148, WordBreakProperty.Other],
+ [/*start*/ 0x11150, WordBreakProperty.ALetter],
+ [/*start*/ 0x11173, WordBreakProperty.Extend],
+ [/*start*/ 0x11174, WordBreakProperty.Other],
+ [/*start*/ 0x11176, WordBreakProperty.ALetter],
+ [/*start*/ 0x11177, WordBreakProperty.Other],
+ [/*start*/ 0x11180, WordBreakProperty.Extend],
+ [/*start*/ 0x11183, WordBreakProperty.ALetter],
+ [/*start*/ 0x111B3, WordBreakProperty.Extend],
+ [/*start*/ 0x111C1, WordBreakProperty.ALetter],
+ [/*start*/ 0x111C5, WordBreakProperty.Other],
+ [/*start*/ 0x111C9, WordBreakProperty.Extend],
+ [/*start*/ 0x111CD, WordBreakProperty.Other],
+ [/*start*/ 0x111CE, WordBreakProperty.Extend],
+ [/*start*/ 0x111D0, WordBreakProperty.Numeric],
+ [/*start*/ 0x111DA, WordBreakProperty.ALetter],
+ [/*start*/ 0x111DB, WordBreakProperty.Other],
+ [/*start*/ 0x111DC, WordBreakProperty.ALetter],
+ [/*start*/ 0x111DD, WordBreakProperty.Other],
+ [/*start*/ 0x11200, WordBreakProperty.ALetter],
+ [/*start*/ 0x11212, WordBreakProperty.Other],
+ [/*start*/ 0x11213, WordBreakProperty.ALetter],
+ [/*start*/ 0x1122C, WordBreakProperty.Extend],
+ [/*start*/ 0x11238, WordBreakProperty.Other],
+ [/*start*/ 0x1123E, WordBreakProperty.Extend],
+ [/*start*/ 0x1123F, WordBreakProperty.Other],
+ [/*start*/ 0x11280, WordBreakProperty.ALetter],
+ [/*start*/ 0x11287, WordBreakProperty.Other],
+ [/*start*/ 0x11288, WordBreakProperty.ALetter],
+ [/*start*/ 0x11289, WordBreakProperty.Other],
+ [/*start*/ 0x1128A, WordBreakProperty.ALetter],
+ [/*start*/ 0x1128E, WordBreakProperty.Other],
+ [/*start*/ 0x1128F, WordBreakProperty.ALetter],
+ [/*start*/ 0x1129E, WordBreakProperty.Other],
+ [/*start*/ 0x1129F, WordBreakProperty.ALetter],
+ [/*start*/ 0x112A9, WordBreakProperty.Other],
+ [/*start*/ 0x112B0, WordBreakProperty.ALetter],
+ [/*start*/ 0x112DF, WordBreakProperty.Extend],
+ [/*start*/ 0x112EB, WordBreakProperty.Other],
+ [/*start*/ 0x112F0, WordBreakProperty.Numeric],
+ [/*start*/ 0x112FA, WordBreakProperty.Other],
+ [/*start*/ 0x11300, WordBreakProperty.Extend],
+ [/*start*/ 0x11304, WordBreakProperty.Other],
+ [/*start*/ 0x11305, WordBreakProperty.ALetter],
+ [/*start*/ 0x1130D, WordBreakProperty.Other],
+ [/*start*/ 0x1130F, WordBreakProperty.ALetter],
+ [/*start*/ 0x11311, WordBreakProperty.Other],
+ [/*start*/ 0x11313, WordBreakProperty.ALetter],
+ [/*start*/ 0x11329, WordBreakProperty.Other],
+ [/*start*/ 0x1132A, WordBreakProperty.ALetter],
+ [/*start*/ 0x11331, WordBreakProperty.Other],
+ [/*start*/ 0x11332, WordBreakProperty.ALetter],
+ [/*start*/ 0x11334, WordBreakProperty.Other],
+ [/*start*/ 0x11335, WordBreakProperty.ALetter],
+ [/*start*/ 0x1133A, WordBreakProperty.Other],
+ [/*start*/ 0x1133B, WordBreakProperty.Extend],
+ [/*start*/ 0x1133D, WordBreakProperty.ALetter],
+ [/*start*/ 0x1133E, WordBreakProperty.Extend],
+ [/*start*/ 0x11345, WordBreakProperty.Other],
+ [/*start*/ 0x11347, WordBreakProperty.Extend],
+ [/*start*/ 0x11349, WordBreakProperty.Other],
+ [/*start*/ 0x1134B, WordBreakProperty.Extend],
+ [/*start*/ 0x1134E, WordBreakProperty.Other],
+ [/*start*/ 0x11350, WordBreakProperty.ALetter],
+ [/*start*/ 0x11351, WordBreakProperty.Other],
+ [/*start*/ 0x11357, WordBreakProperty.Extend],
+ [/*start*/ 0x11358, WordBreakProperty.Other],
+ [/*start*/ 0x1135D, WordBreakProperty.ALetter],
+ [/*start*/ 0x11362, WordBreakProperty.Extend],
+ [/*start*/ 0x11364, WordBreakProperty.Other],
+ [/*start*/ 0x11366, WordBreakProperty.Extend],
+ [/*start*/ 0x1136D, WordBreakProperty.Other],
+ [/*start*/ 0x11370, WordBreakProperty.Extend],
+ [/*start*/ 0x11375, WordBreakProperty.Other],
+ [/*start*/ 0x11400, WordBreakProperty.ALetter],
+ [/*start*/ 0x11435, WordBreakProperty.Extend],
+ [/*start*/ 0x11447, WordBreakProperty.ALetter],
+ [/*start*/ 0x1144B, WordBreakProperty.Other],
+ [/*start*/ 0x11450, WordBreakProperty.Numeric],
+ [/*start*/ 0x1145A, WordBreakProperty.Other],
+ [/*start*/ 0x1145E, WordBreakProperty.Extend],
+ [/*start*/ 0x1145F, WordBreakProperty.ALetter],
+ [/*start*/ 0x11462, WordBreakProperty.Other],
+ [/*start*/ 0x11480, WordBreakProperty.ALetter],
+ [/*start*/ 0x114B0, WordBreakProperty.Extend],
+ [/*start*/ 0x114C4, WordBreakProperty.ALetter],
+ [/*start*/ 0x114C6, WordBreakProperty.Other],
+ [/*start*/ 0x114C7, WordBreakProperty.ALetter],
+ [/*start*/ 0x114C8, WordBreakProperty.Other],
+ [/*start*/ 0x114D0, WordBreakProperty.Numeric],
+ [/*start*/ 0x114DA, WordBreakProperty.Other],
+ [/*start*/ 0x11580, WordBreakProperty.ALetter],
+ [/*start*/ 0x115AF, WordBreakProperty.Extend],
+ [/*start*/ 0x115B6, WordBreakProperty.Other],
+ [/*start*/ 0x115B8, WordBreakProperty.Extend],
+ [/*start*/ 0x115C1, WordBreakProperty.Other],
+ [/*start*/ 0x115D8, WordBreakProperty.ALetter],
+ [/*start*/ 0x115DC, WordBreakProperty.Extend],
+ [/*start*/ 0x115DE, WordBreakProperty.Other],
+ [/*start*/ 0x11600, WordBreakProperty.ALetter],
+ [/*start*/ 0x11630, WordBreakProperty.Extend],
+ [/*start*/ 0x11641, WordBreakProperty.Other],
+ [/*start*/ 0x11644, WordBreakProperty.ALetter],
+ [/*start*/ 0x11645, WordBreakProperty.Other],
+ [/*start*/ 0x11650, WordBreakProperty.Numeric],
+ [/*start*/ 0x1165A, WordBreakProperty.Other],
+ [/*start*/ 0x11680, WordBreakProperty.ALetter],
+ [/*start*/ 0x116AB, WordBreakProperty.Extend],
+ [/*start*/ 0x116B8, WordBreakProperty.ALetter],
+ [/*start*/ 0x116B9, WordBreakProperty.Other],
+ [/*start*/ 0x116C0, WordBreakProperty.Numeric],
+ [/*start*/ 0x116CA, WordBreakProperty.Other],
+ [/*start*/ 0x1171D, WordBreakProperty.Extend],
+ [/*start*/ 0x1172C, WordBreakProperty.Other],
+ [/*start*/ 0x11730, WordBreakProperty.Numeric],
+ [/*start*/ 0x1173A, WordBreakProperty.Other],
+ [/*start*/ 0x11800, WordBreakProperty.ALetter],
+ [/*start*/ 0x1182C, WordBreakProperty.Extend],
+ [/*start*/ 0x1183B, WordBreakProperty.Other],
+ [/*start*/ 0x118A0, WordBreakProperty.ALetter],
+ [/*start*/ 0x118E0, WordBreakProperty.Numeric],
+ [/*start*/ 0x118EA, WordBreakProperty.Other],
+ [/*start*/ 0x118FF, WordBreakProperty.ALetter],
+ [/*start*/ 0x11907, WordBreakProperty.Other],
+ [/*start*/ 0x11909, WordBreakProperty.ALetter],
+ [/*start*/ 0x1190A, WordBreakProperty.Other],
+ [/*start*/ 0x1190C, WordBreakProperty.ALetter],
+ [/*start*/ 0x11914, WordBreakProperty.Other],
+ [/*start*/ 0x11915, WordBreakProperty.ALetter],
+ [/*start*/ 0x11917, WordBreakProperty.Other],
+ [/*start*/ 0x11918, WordBreakProperty.ALetter],
+ [/*start*/ 0x11930, WordBreakProperty.Extend],
+ [/*start*/ 0x11936, WordBreakProperty.Other],
+ [/*start*/ 0x11937, WordBreakProperty.Extend],
+ [/*start*/ 0x11939, WordBreakProperty.Other],
+ [/*start*/ 0x1193B, WordBreakProperty.Extend],
+ [/*start*/ 0x1193F, WordBreakProperty.ALetter],
+ [/*start*/ 0x11940, WordBreakProperty.Extend],
+ [/*start*/ 0x11941, WordBreakProperty.ALetter],
+ [/*start*/ 0x11942, WordBreakProperty.Extend],
+ [/*start*/ 0x11944, WordBreakProperty.Other],
+ [/*start*/ 0x11950, WordBreakProperty.Numeric],
+ [/*start*/ 0x1195A, WordBreakProperty.Other],
+ [/*start*/ 0x119A0, WordBreakProperty.ALetter],
+ [/*start*/ 0x119A8, WordBreakProperty.Other],
+ [/*start*/ 0x119AA, WordBreakProperty.ALetter],
+ [/*start*/ 0x119D1, WordBreakProperty.Extend],
+ [/*start*/ 0x119D8, WordBreakProperty.Other],
+ [/*start*/ 0x119DA, WordBreakProperty.Extend],
+ [/*start*/ 0x119E1, WordBreakProperty.ALetter],
+ [/*start*/ 0x119E2, WordBreakProperty.Other],
+ [/*start*/ 0x119E3, WordBreakProperty.ALetter],
+ [/*start*/ 0x119E4, WordBreakProperty.Extend],
+ [/*start*/ 0x119E5, WordBreakProperty.Other],
+ [/*start*/ 0x11A00, WordBreakProperty.ALetter],
+ [/*start*/ 0x11A01, WordBreakProperty.Extend],
+ [/*start*/ 0x11A0B, WordBreakProperty.ALetter],
+ [/*start*/ 0x11A33, WordBreakProperty.Extend],
+ [/*start*/ 0x11A3A, WordBreakProperty.ALetter],
+ [/*start*/ 0x11A3B, WordBreakProperty.Extend],
+ [/*start*/ 0x11A3F, WordBreakProperty.Other],
+ [/*start*/ 0x11A47, WordBreakProperty.Extend],
+ [/*start*/ 0x11A48, WordBreakProperty.Other],
+ [/*start*/ 0x11A50, WordBreakProperty.ALetter],
+ [/*start*/ 0x11A51, WordBreakProperty.Extend],
+ [/*start*/ 0x11A5C, WordBreakProperty.ALetter],
+ [/*start*/ 0x11A8A, WordBreakProperty.Extend],
+ [/*start*/ 0x11A9A, WordBreakProperty.Other],
+ [/*start*/ 0x11A9D, WordBreakProperty.ALetter],
+ [/*start*/ 0x11A9E, WordBreakProperty.Other],
+ [/*start*/ 0x11AC0, WordBreakProperty.ALetter],
+ [/*start*/ 0x11AF9, WordBreakProperty.Other],
+ [/*start*/ 0x11C00, WordBreakProperty.ALetter],
+ [/*start*/ 0x11C09, WordBreakProperty.Other],
+ [/*start*/ 0x11C0A, WordBreakProperty.ALetter],
+ [/*start*/ 0x11C2F, WordBreakProperty.Extend],
+ [/*start*/ 0x11C37, WordBreakProperty.Other],
+ [/*start*/ 0x11C38, WordBreakProperty.Extend],
+ [/*start*/ 0x11C40, WordBreakProperty.ALetter],
+ [/*start*/ 0x11C41, WordBreakProperty.Other],
+ [/*start*/ 0x11C50, WordBreakProperty.Numeric],
+ [/*start*/ 0x11C5A, WordBreakProperty.Other],
+ [/*start*/ 0x11C72, WordBreakProperty.ALetter],
+ [/*start*/ 0x11C90, WordBreakProperty.Other],
+ [/*start*/ 0x11C92, WordBreakProperty.Extend],
+ [/*start*/ 0x11CA8, WordBreakProperty.Other],
+ [/*start*/ 0x11CA9, WordBreakProperty.Extend],
+ [/*start*/ 0x11CB7, WordBreakProperty.Other],
+ [/*start*/ 0x11D00, WordBreakProperty.ALetter],
+ [/*start*/ 0x11D07, WordBreakProperty.Other],
+ [/*start*/ 0x11D08, WordBreakProperty.ALetter],
+ [/*start*/ 0x11D0A, WordBreakProperty.Other],
+ [/*start*/ 0x11D0B, WordBreakProperty.ALetter],
+ [/*start*/ 0x11D31, WordBreakProperty.Extend],
+ [/*start*/ 0x11D37, WordBreakProperty.Other],
+ [/*start*/ 0x11D3A, WordBreakProperty.Extend],
+ [/*start*/ 0x11D3B, WordBreakProperty.Other],
+ [/*start*/ 0x11D3C, WordBreakProperty.Extend],
+ [/*start*/ 0x11D3E, WordBreakProperty.Other],
+ [/*start*/ 0x11D3F, WordBreakProperty.Extend],
+ [/*start*/ 0x11D46, WordBreakProperty.ALetter],
+ [/*start*/ 0x11D47, WordBreakProperty.Extend],
+ [/*start*/ 0x11D48, WordBreakProperty.Other],
+ [/*start*/ 0x11D50, WordBreakProperty.Numeric],
+ [/*start*/ 0x11D5A, WordBreakProperty.Other],
+ [/*start*/ 0x11D60, WordBreakProperty.ALetter],
+ [/*start*/ 0x11D66, WordBreakProperty.Other],
+ [/*start*/ 0x11D67, WordBreakProperty.ALetter],
+ [/*start*/ 0x11D69, WordBreakProperty.Other],
+ [/*start*/ 0x11D6A, WordBreakProperty.ALetter],
+ [/*start*/ 0x11D8A, WordBreakProperty.Extend],
+ [/*start*/ 0x11D8F, WordBreakProperty.Other],
+ [/*start*/ 0x11D90, WordBreakProperty.Extend],
+ [/*start*/ 0x11D92, WordBreakProperty.Other],
+ [/*start*/ 0x11D93, WordBreakProperty.Extend],
+ [/*start*/ 0x11D98, WordBreakProperty.ALetter],
+ [/*start*/ 0x11D99, WordBreakProperty.Other],
+ [/*start*/ 0x11DA0, WordBreakProperty.Numeric],
+ [/*start*/ 0x11DAA, WordBreakProperty.Other],
+ [/*start*/ 0x11EE0, WordBreakProperty.ALetter],
+ [/*start*/ 0x11EF3, WordBreakProperty.Extend],
+ [/*start*/ 0x11EF7, WordBreakProperty.Other],
+ [/*start*/ 0x11FB0, WordBreakProperty.ALetter],
+ [/*start*/ 0x11FB1, WordBreakProperty.Other],
+ [/*start*/ 0x12000, WordBreakProperty.ALetter],
+ [/*start*/ 0x1239A, WordBreakProperty.Other],
+ [/*start*/ 0x12400, WordBreakProperty.ALetter],
+ [/*start*/ 0x1246F, WordBreakProperty.Other],
+ [/*start*/ 0x12480, WordBreakProperty.ALetter],
+ [/*start*/ 0x12544, WordBreakProperty.Other],
+ [/*start*/ 0x13000, WordBreakProperty.ALetter],
+ [/*start*/ 0x1342F, WordBreakProperty.Other],
+ [/*start*/ 0x13430, WordBreakProperty.Format],
+ [/*start*/ 0x13439, WordBreakProperty.Other],
+ [/*start*/ 0x14400, WordBreakProperty.ALetter],
+ [/*start*/ 0x14647, WordBreakProperty.Other],
+ [/*start*/ 0x16800, WordBreakProperty.ALetter],
+ [/*start*/ 0x16A39, WordBreakProperty.Other],
+ [/*start*/ 0x16A40, WordBreakProperty.ALetter],
+ [/*start*/ 0x16A5F, WordBreakProperty.Other],
+ [/*start*/ 0x16A60, WordBreakProperty.Numeric],
+ [/*start*/ 0x16A6A, WordBreakProperty.Other],
+ [/*start*/ 0x16AD0, WordBreakProperty.ALetter],
+ [/*start*/ 0x16AEE, WordBreakProperty.Other],
+ [/*start*/ 0x16AF0, WordBreakProperty.Extend],
+ [/*start*/ 0x16AF5, WordBreakProperty.Other],
+ [/*start*/ 0x16B00, WordBreakProperty.ALetter],
+ [/*start*/ 0x16B30, WordBreakProperty.Extend],
+ [/*start*/ 0x16B37, WordBreakProperty.Other],
+ [/*start*/ 0x16B40, WordBreakProperty.ALetter],
+ [/*start*/ 0x16B44, WordBreakProperty.Other],
+ [/*start*/ 0x16B50, WordBreakProperty.Numeric],
+ [/*start*/ 0x16B5A, WordBreakProperty.Other],
+ [/*start*/ 0x16B63, WordBreakProperty.ALetter],
+ [/*start*/ 0x16B78, WordBreakProperty.Other],
+ [/*start*/ 0x16B7D, WordBreakProperty.ALetter],
+ [/*start*/ 0x16B90, WordBreakProperty.Other],
+ [/*start*/ 0x16E40, WordBreakProperty.ALetter],
+ [/*start*/ 0x16E80, WordBreakProperty.Other],
+ [/*start*/ 0x16F00, WordBreakProperty.ALetter],
+ [/*start*/ 0x16F4B, WordBreakProperty.Other],
+ [/*start*/ 0x16F4F, WordBreakProperty.Extend],
+ [/*start*/ 0x16F50, WordBreakProperty.ALetter],
+ [/*start*/ 0x16F51, WordBreakProperty.Extend],
+ [/*start*/ 0x16F88, WordBreakProperty.Other],
+ [/*start*/ 0x16F8F, WordBreakProperty.Extend],
+ [/*start*/ 0x16F93, WordBreakProperty.ALetter],
+ [/*start*/ 0x16FA0, WordBreakProperty.Other],
+ [/*start*/ 0x16FE0, WordBreakProperty.ALetter],
+ [/*start*/ 0x16FE2, WordBreakProperty.Other],
+ [/*start*/ 0x16FE3, WordBreakProperty.ALetter],
+ [/*start*/ 0x16FE4, WordBreakProperty.Extend],
+ [/*start*/ 0x16FE5, WordBreakProperty.Other],
+ [/*start*/ 0x16FF0, WordBreakProperty.Extend],
+ [/*start*/ 0x16FF2, WordBreakProperty.Other],
+ [/*start*/ 0x1B000, WordBreakProperty.Katakana],
+ [/*start*/ 0x1B001, WordBreakProperty.Other],
+ [/*start*/ 0x1B164, WordBreakProperty.Katakana],
+ [/*start*/ 0x1B168, WordBreakProperty.Other],
+ [/*start*/ 0x1BC00, WordBreakProperty.ALetter],
+ [/*start*/ 0x1BC6B, WordBreakProperty.Other],
+ [/*start*/ 0x1BC70, WordBreakProperty.ALetter],
+ [/*start*/ 0x1BC7D, WordBreakProperty.Other],
+ [/*start*/ 0x1BC80, WordBreakProperty.ALetter],
+ [/*start*/ 0x1BC89, WordBreakProperty.Other],
+ [/*start*/ 0x1BC90, WordBreakProperty.ALetter],
+ [/*start*/ 0x1BC9A, WordBreakProperty.Other],
+ [/*start*/ 0x1BC9D, WordBreakProperty.Extend],
+ [/*start*/ 0x1BC9F, WordBreakProperty.Other],
+ [/*start*/ 0x1BCA0, WordBreakProperty.Format],
+ [/*start*/ 0x1BCA4, WordBreakProperty.Other],
+ [/*start*/ 0x1D165, WordBreakProperty.Extend],
+ [/*start*/ 0x1D16A, WordBreakProperty.Other],
+ [/*start*/ 0x1D16D, WordBreakProperty.Extend],
+ [/*start*/ 0x1D173, WordBreakProperty.Format],
+ [/*start*/ 0x1D17B, WordBreakProperty.Extend],
+ [/*start*/ 0x1D183, WordBreakProperty.Other],
+ [/*start*/ 0x1D185, WordBreakProperty.Extend],
+ [/*start*/ 0x1D18C, WordBreakProperty.Other],
+ [/*start*/ 0x1D1AA, WordBreakProperty.Extend],
+ [/*start*/ 0x1D1AE, WordBreakProperty.Other],
+ [/*start*/ 0x1D242, WordBreakProperty.Extend],
+ [/*start*/ 0x1D245, WordBreakProperty.Other],
+ [/*start*/ 0x1D400, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D455, WordBreakProperty.Other],
+ [/*start*/ 0x1D456, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D49D, WordBreakProperty.Other],
+ [/*start*/ 0x1D49E, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D4A0, WordBreakProperty.Other],
+ [/*start*/ 0x1D4A2, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D4A3, WordBreakProperty.Other],
+ [/*start*/ 0x1D4A5, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D4A7, WordBreakProperty.Other],
+ [/*start*/ 0x1D4A9, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D4AD, WordBreakProperty.Other],
+ [/*start*/ 0x1D4AE, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D4BA, WordBreakProperty.Other],
+ [/*start*/ 0x1D4BB, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D4BC, WordBreakProperty.Other],
+ [/*start*/ 0x1D4BD, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D4C4, WordBreakProperty.Other],
+ [/*start*/ 0x1D4C5, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D506, WordBreakProperty.Other],
+ [/*start*/ 0x1D507, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D50B, WordBreakProperty.Other],
+ [/*start*/ 0x1D50D, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D515, WordBreakProperty.Other],
+ [/*start*/ 0x1D516, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D51D, WordBreakProperty.Other],
+ [/*start*/ 0x1D51E, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D53A, WordBreakProperty.Other],
+ [/*start*/ 0x1D53B, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D53F, WordBreakProperty.Other],
+ [/*start*/ 0x1D540, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D545, WordBreakProperty.Other],
+ [/*start*/ 0x1D546, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D547, WordBreakProperty.Other],
+ [/*start*/ 0x1D54A, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D551, WordBreakProperty.Other],
+ [/*start*/ 0x1D552, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D6A6, WordBreakProperty.Other],
+ [/*start*/ 0x1D6A8, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D6C1, WordBreakProperty.Other],
+ [/*start*/ 0x1D6C2, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D6DB, WordBreakProperty.Other],
+ [/*start*/ 0x1D6DC, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D6FB, WordBreakProperty.Other],
+ [/*start*/ 0x1D6FC, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D715, WordBreakProperty.Other],
+ [/*start*/ 0x1D716, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D735, WordBreakProperty.Other],
+ [/*start*/ 0x1D736, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D74F, WordBreakProperty.Other],
+ [/*start*/ 0x1D750, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D76F, WordBreakProperty.Other],
+ [/*start*/ 0x1D770, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D789, WordBreakProperty.Other],
+ [/*start*/ 0x1D78A, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D7A9, WordBreakProperty.Other],
+ [/*start*/ 0x1D7AA, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D7C3, WordBreakProperty.Other],
+ [/*start*/ 0x1D7C4, WordBreakProperty.ALetter],
+ [/*start*/ 0x1D7CC, WordBreakProperty.Other],
+ [/*start*/ 0x1D7CE, WordBreakProperty.Numeric],
+ [/*start*/ 0x1D800, WordBreakProperty.Other],
+ [/*start*/ 0x1DA00, WordBreakProperty.Extend],
+ [/*start*/ 0x1DA37, WordBreakProperty.Other],
+ [/*start*/ 0x1DA3B, WordBreakProperty.Extend],
+ [/*start*/ 0x1DA6D, WordBreakProperty.Other],
+ [/*start*/ 0x1DA75, WordBreakProperty.Extend],
+ [/*start*/ 0x1DA76, WordBreakProperty.Other],
+ [/*start*/ 0x1DA84, WordBreakProperty.Extend],
+ [/*start*/ 0x1DA85, WordBreakProperty.Other],
+ [/*start*/ 0x1DA9B, WordBreakProperty.Extend],
+ [/*start*/ 0x1DAA0, WordBreakProperty.Other],
+ [/*start*/ 0x1DAA1, WordBreakProperty.Extend],
+ [/*start*/ 0x1DAB0, WordBreakProperty.Other],
+ [/*start*/ 0x1E000, WordBreakProperty.Extend],
+ [/*start*/ 0x1E007, WordBreakProperty.Other],
+ [/*start*/ 0x1E008, WordBreakProperty.Extend],
+ [/*start*/ 0x1E019, WordBreakProperty.Other],
+ [/*start*/ 0x1E01B, WordBreakProperty.Extend],
+ [/*start*/ 0x1E022, WordBreakProperty.Other],
+ [/*start*/ 0x1E023, WordBreakProperty.Extend],
+ [/*start*/ 0x1E025, WordBreakProperty.Other],
+ [/*start*/ 0x1E026, WordBreakProperty.Extend],
+ [/*start*/ 0x1E02B, WordBreakProperty.Other],
+ [/*start*/ 0x1E100, WordBreakProperty.ALetter],
+ [/*start*/ 0x1E12D, WordBreakProperty.Other],
+ [/*start*/ 0x1E130, WordBreakProperty.Extend],
+ [/*start*/ 0x1E137, WordBreakProperty.ALetter],
+ [/*start*/ 0x1E13E, WordBreakProperty.Other],
+ [/*start*/ 0x1E140, WordBreakProperty.Numeric],
+ [/*start*/ 0x1E14A, WordBreakProperty.Other],
+ [/*start*/ 0x1E14E, WordBreakProperty.ALetter],
+ [/*start*/ 0x1E14F, WordBreakProperty.Other],
+ [/*start*/ 0x1E2C0, WordBreakProperty.ALetter],
+ [/*start*/ 0x1E2EC, WordBreakProperty.Extend],
+ [/*start*/ 0x1E2F0, WordBreakProperty.Numeric],
+ [/*start*/ 0x1E2FA, WordBreakProperty.Other],
+ [/*start*/ 0x1E800, WordBreakProperty.ALetter],
+ [/*start*/ 0x1E8C5, WordBreakProperty.Other],
+ [/*start*/ 0x1E8D0, WordBreakProperty.Extend],
+ [/*start*/ 0x1E8D7, WordBreakProperty.Other],
+ [/*start*/ 0x1E900, WordBreakProperty.ALetter],
+ [/*start*/ 0x1E944, WordBreakProperty.Extend],
+ [/*start*/ 0x1E94B, WordBreakProperty.ALetter],
+ [/*start*/ 0x1E94C, WordBreakProperty.Other],
+ [/*start*/ 0x1E950, WordBreakProperty.Numeric],
+ [/*start*/ 0x1E95A, WordBreakProperty.Other],
+ [/*start*/ 0x1EE00, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE04, WordBreakProperty.Other],
+ [/*start*/ 0x1EE05, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE20, WordBreakProperty.Other],
+ [/*start*/ 0x1EE21, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE23, WordBreakProperty.Other],
+ [/*start*/ 0x1EE24, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE25, WordBreakProperty.Other],
+ [/*start*/ 0x1EE27, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE28, WordBreakProperty.Other],
+ [/*start*/ 0x1EE29, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE33, WordBreakProperty.Other],
+ [/*start*/ 0x1EE34, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE38, WordBreakProperty.Other],
+ [/*start*/ 0x1EE39, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE3A, WordBreakProperty.Other],
+ [/*start*/ 0x1EE3B, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE3C, WordBreakProperty.Other],
+ [/*start*/ 0x1EE42, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE43, WordBreakProperty.Other],
+ [/*start*/ 0x1EE47, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE48, WordBreakProperty.Other],
+ [/*start*/ 0x1EE49, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE4A, WordBreakProperty.Other],
+ [/*start*/ 0x1EE4B, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE4C, WordBreakProperty.Other],
+ [/*start*/ 0x1EE4D, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE50, WordBreakProperty.Other],
+ [/*start*/ 0x1EE51, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE53, WordBreakProperty.Other],
+ [/*start*/ 0x1EE54, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE55, WordBreakProperty.Other],
+ [/*start*/ 0x1EE57, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE58, WordBreakProperty.Other],
+ [/*start*/ 0x1EE59, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE5A, WordBreakProperty.Other],
+ [/*start*/ 0x1EE5B, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE5C, WordBreakProperty.Other],
+ [/*start*/ 0x1EE5D, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE5E, WordBreakProperty.Other],
+ [/*start*/ 0x1EE5F, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE60, WordBreakProperty.Other],
+ [/*start*/ 0x1EE61, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE63, WordBreakProperty.Other],
+ [/*start*/ 0x1EE64, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE65, WordBreakProperty.Other],
+ [/*start*/ 0x1EE67, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE6B, WordBreakProperty.Other],
+ [/*start*/ 0x1EE6C, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE73, WordBreakProperty.Other],
+ [/*start*/ 0x1EE74, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE78, WordBreakProperty.Other],
+ [/*start*/ 0x1EE79, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE7D, WordBreakProperty.Other],
+ [/*start*/ 0x1EE7E, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE7F, WordBreakProperty.Other],
+ [/*start*/ 0x1EE80, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE8A, WordBreakProperty.Other],
+ [/*start*/ 0x1EE8B, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EE9C, WordBreakProperty.Other],
+ [/*start*/ 0x1EEA1, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EEA4, WordBreakProperty.Other],
+ [/*start*/ 0x1EEA5, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EEAA, WordBreakProperty.Other],
+ [/*start*/ 0x1EEAB, WordBreakProperty.ALetter],
+ [/*start*/ 0x1EEBC, WordBreakProperty.Other],
+ [/*start*/ 0x1F130, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F14A, WordBreakProperty.Other],
+ [/*start*/ 0x1F150, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F16A, WordBreakProperty.Other],
+ [/*start*/ 0x1F170, WordBreakProperty.ALetter],
+ [/*start*/ 0x1F18A, WordBreakProperty.Other],
+ [/*start*/ 0x1F1E6, WordBreakProperty.Regional_Indicator],
+ [/*start*/ 0x1F200, WordBreakProperty.Other],
+ [/*start*/ 0x1F3FB, WordBreakProperty.Extend],
+ [/*start*/ 0x1F400, WordBreakProperty.Other],
+ [/*start*/ 0x1FBF0, WordBreakProperty.Numeric],
+ [/*start*/ 0x1FBFA, WordBreakProperty.Other],
+ [/*start*/ 0xE0001, WordBreakProperty.Format],
+ [/*start*/ 0xE0002, WordBreakProperty.Other],
+ [/*start*/ 0xE0020, WordBreakProperty.Extend],
+ [/*start*/ 0xE0080, WordBreakProperty.Other],
+ [/*start*/ 0xE0100, WordBreakProperty.Extend],
+ [/*start*/ 0xE01F0, WordBreakProperty.Other],
+];
diff --git a/developer/src/kmc-model/test/wordbreakers/default-wordbreaker-esm.ts b/developer/src/kmc-model/test/wordbreakers/default-wordbreaker-esm.ts
new file mode 100644
index 0000000000..55c0e560da
--- /dev/null
+++ b/developer/src/kmc-model/test/wordbreakers/default-wordbreaker-esm.ts
@@ -0,0 +1,383 @@
+// TEMP: esm version of /common/models/wordbreakers/default/index.ts
+
+ import { I, WORD_BREAK_PROPERTY, WordBreakProperty } from './data.js';
+
+
+ /**
+ * Word breaker based on Unicode Standard Annex #29, Section 4.1:
+ * Default Word Boundary Specification.
+ *
+ * @see http://unicode.org/reports/tr29/#Word_Boundaries
+ * @see https://github.com/eddieantonio/unicode-default-word-boundary/tree/v12.0.0
+ */
+ export default function default_(text: string): Span[] {
+ let boundaries = findBoundaries(text);
+ if (boundaries.length == 0) {
+ return [];
+ }
+
+ // All non-empty strings have at least TWO boundaries: at the start and at the end of
+ // the string.
+ let spans = [];
+ for (let i = 0; i < boundaries.length - 1; i++) {
+ let start = boundaries[i];
+ let end = boundaries[i + 1];
+ let span = new LazySpan(text, start, end);
+
+ if (isNonSpace(span.text)) {
+ spans.push(span);
+ // Preserve a sequence-final space if it exists. Needed to signal "end of word".
+ } else if (i == boundaries.length - 2) { // if "we just checked the final boundary"...
+ // We don't want to return the whitespace itself; the correct token is simply ''.
+ span = new LazySpan(text, end, end);
+ spans.push(span);
+ }
+ }
+ return spans;
+ }
+
+ // Utilities //
+ // type WordBreakProperty = data.WordBreakProperty;
+ // const WordBreakProperty = data.WordBreakProperty;
+ // type I = data.I;
+ // const I = data.I;
+ // const WORD_BREAK_PROPERTY = data.WORD_BREAK_PROPERTY;
+
+ /**
+ * A span that does not cut out the substring until it absolutely has to!
+ */
+ class LazySpan implements Span {
+ private _source: string;
+ readonly start: number;
+ readonly end: number;
+ constructor(source: string, start: number, end: number) {
+ this._source = source;
+ this.start = start;
+ this.end = end;
+ }
+
+ get text(): string {
+ return this._source.substring(this.start, this.end);
+ }
+
+ get length(): number {
+ return this.end - this.start;
+ }
+ }
+
+ /**
+ * Returns true when the chunk does not solely consist of whitespace.
+ *
+ * @param chunk a chunk of text. Starts and ends at word boundaries.
+ */
+ function isNonSpace(chunk: string): boolean {
+ return !Array.from(chunk).map(property).every(wb => (
+ wb === WordBreakProperty.CR ||
+ wb === WordBreakProperty.LF ||
+ wb === WordBreakProperty.Newline ||
+ wb === WordBreakProperty.WSegSpace
+ ));
+ }
+
+ /**
+ * Yields a series of string indices where a word break should
+ * occur. That is, there should be a break BEFORE each string
+ * index yielded by this generator.
+ *
+ * @param text Text to find word boundaries in.
+ */
+ function findBoundaries(text: string): number[] {
+ // WB1 and WB2: no boundaries if given an empty string.
+ if (text.length === 0) {
+ // There are no boundaries in an empty string!
+ return [];
+ }
+
+ // This algorithm works by maintaining a sliding window of four SCALAR VALUES.
+ //
+ // - Scalar values? JavaScript strings are NOT actually a string of
+ // Unicode code points; some characters are made up of TWO
+ // JavaScript indices. e.g.,
+ // "💩".length === 2;
+ // "💩"[0] === '\uD83D';
+ // "💩"[1] === '\uDCA9';
+ //
+ // These characters that are represented by TWO indices are
+ // called "surrogate pairs". Since we don't want to be in the
+ // "middle" of a character, make sure we're always advancing
+ // by scalar values, and NOT indices. That means, we sometimes
+ // need to advance by TWO indices, not just one.
+ // - Four values? Some rules look at what's to the left of
+ // left, and some look at what's to the right of right. So
+ // keep track of this!
+
+ let boundaries = [];
+
+ let rightPos: number;
+ let lookaheadPos = 0; // lookahead, one scalar value to the right of right.
+ // Before the start of the string is also the start of the string.
+ let lookbehind: WordBreakProperty;
+ let left = WordBreakProperty.sot;
+ let right = WordBreakProperty.sot;
+ let lookahead = wordbreakPropertyAt(0);
+ // Count RIs to make sure we're not splitting emoji flags:
+ let nConsecutiveRegionalIndicators = 0;
+
+ do {
+ // Shift all positions, one scalar value to the right.
+ rightPos = lookaheadPos;
+ lookaheadPos = positionAfter(lookaheadPos);
+ // Shift all properties, one scalar value to the right.
+ [lookbehind, left, right, lookahead] =
+ [left, right, lookahead, wordbreakPropertyAt(lookaheadPos)];
+
+ // Break at the start and end of text, unless the text is empty.
+ // WB1: Break at start of text...
+ if (left === WordBreakProperty.sot) {
+ boundaries.push(rightPos);
+ continue;
+ }
+ // WB2: Break at the end of text...
+ if (right === WordBreakProperty.eot) {
+ boundaries.push(rightPos);
+ break; // Reached the end of the string. We're done!
+ }
+ // WB3: Do not break within CRLF:
+ if (left === WordBreakProperty.CR && right === WordBreakProperty.LF)
+ continue;
+ // WB3b: Otherwise, break after...
+ if (left === WordBreakProperty.Newline ||
+ left === WordBreakProperty.CR ||
+ left === WordBreakProperty.LF) {
+ boundaries.push(rightPos);
+ continue;
+ }
+ // WB3a: ...and before newlines
+ if (right === WordBreakProperty.Newline ||
+ right === WordBreakProperty.CR ||
+ right === WordBreakProperty.LF) {
+ boundaries.push(rightPos);
+ continue;
+ }
+
+ // TODO: WB3c is not implemented, due to its complex, error-prone
+ // implementation, requiring a ginormous regexp, and the fact that
+ // the only thing it does is prevent big emoji sequences from being
+ // split up, like 🧚🏼♂️
+ // https://www.unicode.org/Public/emoji/12.0/emoji-zwj-sequences.txt
+
+ // WB3d: Keep horizontal whitespace together
+ if (left === WordBreakProperty.WSegSpace && right == WordBreakProperty.WSegSpace)
+ continue;
+
+ // WB4: Ignore format and extend characters
+ // This is to keep grapheme clusters together!
+ // See: Section 6.2: https://unicode.org/reports/tr29/#Grapheme_Cluster_and_Format_Rules
+ // N.B.: The rule about "except after sot, CR, LF, and
+ // Newline" already been by WB1, WB2, WB3a, and WB3b above.
+ while (right === WordBreakProperty.Format ||
+ right === WordBreakProperty.Extend ||
+ right === WordBreakProperty.ZWJ) {
+ // Continue advancing in the string, as if these
+ // characters do not exist. DO NOT update left and
+ // lookbehind however!
+ [rightPos, lookaheadPos] = [lookaheadPos, positionAfter(lookaheadPos)];
+ [right, lookahead] = [lookahead, wordbreakPropertyAt(lookaheadPos)];
+ }
+ // In ignoring the characters in the previous loop, we could
+ // have fallen off the end of the string, so end the loop
+ // prematurely if that happens!
+ if (right === WordBreakProperty.eot) {
+ boundaries.push(rightPos);
+ break;
+ }
+ // WB4 (continued): Lookahead must ALSO ignore these format,
+ // extend, ZWJ characters!
+ while (lookahead === WordBreakProperty.Format ||
+ lookahead === WordBreakProperty.Extend ||
+ lookahead === WordBreakProperty.ZWJ) {
+ // Continue advancing in the string, as if these
+ // characters do not exist. DO NOT update left and right,
+ // however!
+ lookaheadPos = positionAfter(lookaheadPos);
+ lookahead = wordbreakPropertyAt(lookaheadPos);
+ }
+
+ // WB5: Do not break between most letters.
+ if (isAHLetter(left) && isAHLetter(right))
+ continue;
+ // Do not break across certain punctuation
+ // WB6: (Don't break before apostrophes in contractions)
+ if (isAHLetter(left) && isAHLetter(lookahead) &&
+ (right === WordBreakProperty.MidLetter || isMidNumLetQ(right)))
+ continue;
+ // WB7: (Don't break after apostrophes in contractions)
+ if (isAHLetter(lookbehind) && isAHLetter(right) &&
+ (left === WordBreakProperty.MidLetter || isMidNumLetQ(left)))
+ continue;
+ // WB7a
+ if (left === WordBreakProperty.Hebrew_Letter && right === WordBreakProperty.Single_Quote)
+ continue;
+ // WB7b
+ if (left === WordBreakProperty.Hebrew_Letter && right === WordBreakProperty.Double_Quote &&
+ lookahead === WordBreakProperty.Hebrew_Letter)
+ continue;
+ // WB7c
+ if (lookbehind === WordBreakProperty.Hebrew_Letter && left === WordBreakProperty.Double_Quote &&
+ right === WordBreakProperty.Hebrew_Letter)
+ continue;
+ // Do not break within sequences of digits, or digits adjacent to letters.
+ // e.g., "3a" or "A3"
+ // WB8
+ if (left === WordBreakProperty.Numeric && right === WordBreakProperty.Numeric)
+ continue;
+ // WB9
+ if (isAHLetter(left) && right === WordBreakProperty.Numeric)
+ continue;
+ // WB10
+ if (left === WordBreakProperty.Numeric && isAHLetter(right))
+ continue;
+ // Do not break within sequences, such as 3.2, 3,456.789
+ // WB11
+ if (lookbehind === WordBreakProperty.Numeric && right === WordBreakProperty.Numeric &&
+ (left === WordBreakProperty.MidNum || isMidNumLetQ(left)))
+ continue;
+ // WB12
+ if (left === WordBreakProperty.Numeric && lookahead === WordBreakProperty.Numeric &&
+ (right === WordBreakProperty.MidNum || isMidNumLetQ(right)))
+ continue;
+ // WB13: Do not break between Katakana
+ if (left === WordBreakProperty.Katakana && right === WordBreakProperty.Katakana)
+ continue;
+ // Do not break from extenders (e.g., U+202F NARROW NO-BREAK SPACE)
+ // WB13a
+ if ((isAHLetter(left) ||
+ left === WordBreakProperty.Numeric ||
+ left === WordBreakProperty.Katakana ||
+ left === WordBreakProperty.ExtendNumLet) &&
+ right === WordBreakProperty.ExtendNumLet)
+ continue;
+ // WB13b
+ if ((isAHLetter(right) ||
+ right === WordBreakProperty.Numeric ||
+ right === WordBreakProperty.Katakana) && left === WordBreakProperty.ExtendNumLet)
+ continue;
+
+ // WB15 & WB16:
+ // Do not break within emoji flag sequences. That is, do not break between
+ // regional indicator (RI) symbols if there is an odd number of RI
+ // characters before the break point.
+ if (right === WordBreakProperty.Regional_Indicator) {
+ // Emoji flags are actually composed of TWO scalar values, each being a
+ // "regional indicator". These indicators correspond to Latin letters. Put
+ // two of them together, and they spell out an ISO 3166-1-alpha-2 country
+ // code. Since these always come in pairs, NEVER split the pairs! So, if
+ // we happen to be inside the middle of an odd numbered of
+ // Regional_Indicators, DON'T SPLIT IT!
+ nConsecutiveRegionalIndicators += 1;
+ if ((nConsecutiveRegionalIndicators % 2) == 1) {
+ continue;
+ }
+ } else {
+ nConsecutiveRegionalIndicators = 0;
+ }
+ // WB999: Otherwise, break EVERYWHERE (including around ideographs)
+ boundaries.push(rightPos);
+ } while (rightPos < text.length);
+
+ return boundaries;
+
+ ///// Internal utility functions /////
+
+ /**
+ * Returns the position of the start of the next scalar value. This jumps
+ * over surrogate pairs.
+ *
+ * If asked for the character AFTER the end of the string, this always
+ * returns the length of the string.
+ */
+ function positionAfter(pos: number): number {
+ if (pos >= text.length) {
+ return text.length;
+ } else if (isStartOfSurrogatePair(text[pos])) {
+ return pos + 2;
+ }
+ return pos + 1;
+ }
+
+ /**
+ * Return the value of the Word_Break property at the given string index.
+ * @param pos position in the text.
+ */
+ function wordbreakPropertyAt(pos: number) {
+ if (pos < 0) {
+ return WordBreakProperty.sot; // Always "start of string" before the string starts!
+ } else if (pos >= text.length) {
+ return WordBreakProperty.eot; // Always "end of string" after the string ends!
+ } else if (isStartOfSurrogatePair(text[pos])) {
+ // Surrogate pairs the next TWO items from the string!
+ return property(text[pos] + text[pos + 1]);
+ }
+ return property(text[pos]);
+ }
+
+ // Word_Break rule macros
+ // See: https://unicode.org/reports/tr29/#WB_Rule_Macros
+ function isAHLetter(prop: WordBreakProperty): boolean {
+ return prop === WordBreakProperty.ALetter ||
+ prop === WordBreakProperty.Hebrew_Letter;
+ }
+
+ function isMidNumLetQ(prop: WordBreakProperty): boolean {
+ return prop === WordBreakProperty.MidNumLet ||
+ prop === WordBreakProperty.Single_Quote;
+ }
+ }
+
+ function isStartOfSurrogatePair(character: string) {
+ let codeUnit = character.charCodeAt(0);
+ return codeUnit >= 0xD800 && codeUnit <= 0xDBFF;
+ }
+
+ /**
+ * Return the Word_Break property value for a character.
+ * Note that
+ * @param character a scalar value
+ */
+ function property(character: string): WordBreakProperty {
+ // This MUST be a scalar value.
+ // TODO: remove dependence on character.codepointAt()?
+ let codepoint = character.codePointAt(0) as number;
+ return searchForProperty(codepoint, 0, WORD_BREAK_PROPERTY.length - 1);
+ }
+
+ /**
+ * Binary search for the word break property of a given CODE POINT.
+ *
+ * The auto-generated data.ts master array defines a **character range**
+ * lookup table. If a character's codepoint is equal to or greater than
+ * the I.Start value for an entry and exclusively less than the next entry,
+ * it falls in the first entry's range bucket and is classified accordingly
+ * by this method.
+ */
+ function searchForProperty(codePoint: number, left: number, right: number): WordBreakProperty {
+ // All items that are not found in the array are assigned the 'Other' property.
+ if (right < left) {
+ return WordBreakProperty.Other;
+ }
+
+ let midpoint = left + ~~((right - left) / 2);
+ let candidate = WORD_BREAK_PROPERTY[midpoint];
+
+ let nextRange = WORD_BREAK_PROPERTY[midpoint + 1];
+ let startOfNextRange = nextRange ? nextRange[I.Start] : Infinity;
+
+ if (codePoint < candidate[I.Start]) {
+ return searchForProperty(codePoint, left, midpoint - 1);
+ } else if (codePoint >= startOfNextRange) {
+ return searchForProperty(codePoint, midpoint + 1, right);
+ }
+
+ // We found it!
+ return candidate[I.Value];
+ }
diff --git a/developer/src/kmlmc/libexec/create-override-script-regexp.ts b/developer/src/kmc-model/tools/create-override-script-regexp.ts
similarity index 95%
rename from developer/src/kmlmc/libexec/create-override-script-regexp.ts
rename to developer/src/kmc-model/tools/create-override-script-regexp.ts
index 7cc262282a..3860432058 100644
--- a/developer/src/kmlmc/libexec/create-override-script-regexp.ts
+++ b/developer/src/kmc-model/tools/create-override-script-regexp.ts
@@ -15,7 +15,7 @@ import {readFileSync} from "fs";
import * as path from "path";
// Where to find UnicodeData.txt and Blocks.txt
-const UCD_DIR = path.join("..", "..", "resources", "standards-data", "unicode-character-database");
+const UCD_DIR = path.join("..", "..", "..", "..", "resources", "standards-data", "unicode-character-database");
const SPACELESS_SCRIPT_BLOCKS = new Set([
"Myanmar", // a.k.a., Burmese
@@ -30,7 +30,7 @@ const SPACELESS_SCRIPT_BLOCKS = new Set([
let blockIter = blocks();
let block = nextBlock();
-let eligibleCharacters = [];
+let eligibleCharacters: number[] = [];
// @ts-ignore: TypeScript complains that it can't compile for..of over a
// generator without --downlevelIteration, but it works anyway?
@@ -116,7 +116,7 @@ function isLetterOrMark(category: string): boolean {
}
function groupCodePointsIntoRanges(characters: number[]): [number, number][] {
- let ranges = [];
+ let ranges: [number,number][] = [];
let previousCharacter = characters[0];
const candidates = characters.slice(1);
diff --git a/developer/src/kmc-model/tsconfig.json b/developer/src/kmc-model/tsconfig.json
new file mode 100644
index 0000000000..e48ec745f9
--- /dev/null
+++ b/developer/src/kmc-model/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "extends": "../kmc/tsconfig.kmc-base.json",
+
+ "compilerOptions": {
+ "outDir": "build/src/",
+ "rootDir": "src/",
+ "baseUrl": ".",
+ "allowSyntheticDefaultImports": true,
+ },
+ "include": [
+ "src/**/*.ts"
+ ],
+ "references": [
+ { "path": "../../../common/web/keyman-version/tsconfig.esm.json" },
+ { "path": "../../../common/models/types" },
+ ]
+}
diff --git a/developer/src/kmc-package/Makefile b/developer/src/kmc-package/Makefile
new file mode 100644
index 0000000000..02bf07dc02
--- /dev/null
+++ b/developer/src/kmc-package/Makefile
@@ -0,0 +1,38 @@
+#
+# Keyman Developer - kmc Package Compiler Makefile
+#
+
+!include ..\Defines.mak
+
+# We don't depend on configure here because kmc-keyboard does that already
+build: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh build
+
+configure: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh configure
+
+clean: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh clean
+
+test: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh test
+
+# build.sh bundle must be run from shell as it requires a temp folder to be
+# passed in. See inst/download.in.mak for instantiation.
+
+publish: .virtual
+ $(GIT_BASH_FOR_KEYMAN) build.sh publish
+
+signcode:
+ @rem nothing to do
+
+wrap-symbols:
+ @rem nothing to do
+
+test-manifest:
+ @rem nothing to do
+
+install:
+ @rem nothing to do
+
+!include ..\Target.mak
diff --git a/developer/src/kmc-package/build.sh b/developer/src/kmc-package/build.sh
new file mode 100755
index 0000000000..f89023ccff
--- /dev/null
+++ b/developer/src/kmc-package/build.sh
@@ -0,0 +1,63 @@
+#!/usr/bin/env bash
+#
+# Compiles the kmc lexical model package compiler.
+#
+
+# Exit on command failure and when using unset variables:
+set -eu
+
+## START STANDARD BUILD SCRIPT INCLUDE
+# adjust relative paths as necessary
+THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
+. "$(dirname "$THIS_SCRIPT")/../../../resources/build/build-utils.sh"
+## END STANDARD BUILD SCRIPT INCLUDE
+
+cd "$THIS_SCRIPT_PATH"
+
+. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
+
+builder_describe "Build Keyman kmc Package Compiler module" \
+ "configure" \
+ "build" \
+ "clean" \
+ "test" \
+ "publish publish to npm" \
+ "--dry-run,-n don't actually publish, just dry run"
+
+builder_parse "$@"
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action clean; then
+ rm -rf ./build/ ./tsconfig.tsbuildinfo
+ builder_report success clean
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action configure; then
+ verify_npm_setup
+ builder_report success configure
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action build; then
+ npm run build
+ builder_report success build
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action test; then
+ npm test
+ builder_report success test
+fi
+
+#-------------------------------------------------------------------------------------------------------------------
+
+if builder_has_action publish; then
+ . "$KEYMAN_ROOT/resources/build/npm-publish.inc.sh"
+ npm_publish
+ builder_report success publish
+fi
diff --git a/developer/src/kmc-package/package.json b/developer/src/kmc-package/package.json
new file mode 100644
index 0000000000..74e77820cc
--- /dev/null
+++ b/developer/src/kmc-package/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "@keymanapp/kmc-package",
+ "description": "Keyman Developer package compiler",
+ "keywords": [
+ "keyboard",
+ "keyman",
+ "unicode"
+ ],
+ "type": "module",
+ "exports": {
+ ".": "./build/src/kmp-compiler.js",
+ "./kmp-json-file": "./build/src/kmp-json-file.js"
+ },
+ "scripts": {
+ "build": "tsc -b",
+ "test": "cd test && tsc -b && cd .. && mocha",
+ "coverage": "cd test && tsc -b && cd .. && c8 mocha",
+ "prepublishOnly": "npm run build"
+ },
+ "author": "Marc Durdin (https://github.com/mcdurdin)",
+ "contributors": [
+ "Eddie Antonio Santos ",
+ "Joshua Horton"
+ ],
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/keymanapp/keyman/issues"
+ },
+ "dependencies": {
+ "jszip": "^3.7.0"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.1.7",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.14.6",
+ "c8": "^7.12.0",
+ "chai": "^4.3.4",
+ "chalk": "^2.4.2",
+ "mocha": "^8.4.0",
+ "ts-node": "^9.1.1",
+ "typescript": "^4.5.4"
+ },
+ "mocha": {
+ "spec": "build/test/**/test-*.js",
+ "require": [
+ "source-map-support/register"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/keymanapp/keyman.git"
+ }
+}
diff --git a/developer/src/kmlmc/source/package-compiler/kmp-compiler.ts b/developer/src/kmc-package/src/kmp-compiler.ts
similarity index 99%
rename from developer/src/kmlmc/source/package-compiler/kmp-compiler.ts
rename to developer/src/kmc-package/src/kmp-compiler.ts
index 60fe6797f7..1f59f3ef6c 100644
--- a/developer/src/kmlmc/source/package-compiler/kmp-compiler.ts
+++ b/developer/src/kmc-package/src/kmp-compiler.ts
@@ -4,7 +4,7 @@
import * as fs from 'fs';
import * as path from 'path';
import * as xml2js from 'xml2js';
-import * as JSZip from 'jszip';
+import JSZip from 'jszip';
let zip = JSZip();
diff --git a/developer/src/kmlmc/source/package-compiler/kmp-json-file.ts b/developer/src/kmc-package/src/kmp-json-file.ts
similarity index 100%
rename from developer/src/kmlmc/source/package-compiler/kmp-json-file.ts
rename to developer/src/kmc-package/src/kmp-json-file.ts
diff --git a/developer/src/kmlmc/source/package-compiler/kps-file.ts b/developer/src/kmc-package/src/kps-file.ts
similarity index 100%
rename from developer/src/kmlmc/source/package-compiler/kps-file.ts
rename to developer/src/kmc-package/src/kps-file.ts
diff --git a/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kmp.json b/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kmp.json
new file mode 100644
index 0000000000..b7215a3610
--- /dev/null
+++ b/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kmp.json
@@ -0,0 +1,45 @@
+{
+ "system": {
+ "keymanDeveloperVersion": "12.0.1500.0",
+ "fileVersion": "12.0"
+ },
+ "options": {},
+ "info": {
+ "author": {
+ "description": "Eddie Antonio Santos",
+ "url": "mailto:Eddie.Santos@nrc-cnrc.gc.ca"
+ },
+ "copyright": {
+ "description": "© 2019 National Research Council Canada"
+ },
+ "name": {
+ "description": "SENĆOŦEN (Saanich Dialect) Lexical Model"
+ },
+ "version": {
+ "description": "1.0.3"
+ }
+ },
+ "files": [
+ {
+ "name": "..\\build\\example.qaa.sencoten.model.js",
+ "description": "Lexical model example.qaa.sencoten.model.js",
+ "copyLocation": 0
+ }
+ ],
+ "lexicalModels": [
+ {
+ "name": "SENĆOŦEN dictionary",
+ "id": "example.qaa.sencoten",
+ "languages": [
+ {
+ "name": "North Straits Salish",
+ "id": "qaa"
+ },
+ {
+ "name": "SENĆOŦEN",
+ "id": "qaa-Latn"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kps b/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kps
new file mode 100644
index 0000000000..571e710c94
--- /dev/null
+++ b/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.kps
@@ -0,0 +1,35 @@
+
+
+
+ 12.0.1500.0
+ 12.0
+
+
+
+
+
+ SENĆOŦEN (Saanich Dialect) Lexical Model
+ © 2019 National Research Council Canada
+ Eddie Antonio Santos
+ 1.0.3
+
+
+
+ ..\build\example.qaa.sencoten.model.js
+ Lexical model example.qaa.sencoten.model.js
+ 0
+ .model.js
+
+
+
+
+ SENĆOŦEN dictionary
+ example.qaa.sencoten
+ 1.0.3
+
+ North Straits Salish
+ SENĆOŦEN
+
+
+
+
diff --git a/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.ts b/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.ts
new file mode 100644
index 0000000000..2a5715fa94
--- /dev/null
+++ b/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/example.qaa.sencoten.model.ts
@@ -0,0 +1,6 @@
+const source: LexicalModelSource = {
+ format: 'trie-1.0',
+ sources: ['wordlist.tsv'],
+ wordBreaker: 'default',
+};
+export default source;
diff --git a/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/wordlist.tsv b/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/wordlist.tsv
new file mode 100644
index 0000000000..a2a1ad5964
--- /dev/null
+++ b/developer/src/kmc-package/test/fixtures/example.qaa.sencoten/wordlist.tsv
@@ -0,0 +1,10 @@
+TŦE 13644
+E 9134
+SEN 4816
+Ȼ 3479
+SW̱ 2621
+NIȽ 2314
+U¸ 2298
+I¸ 1988
+ȻSE 1925
+I 1884
\ No newline at end of file
diff --git a/developer/src/kmc-package/test/helpers/index.ts b/developer/src/kmc-package/test/helpers/index.ts
new file mode 100644
index 0000000000..8250dfd101
--- /dev/null
+++ b/developer/src/kmc-package/test/helpers/index.ts
@@ -0,0 +1,17 @@
+/**
+ * Helpers and utilities for the Mocha tests.
+ */
+import * as path from 'path';
+import { fileURLToPath } from 'url';
+
+/**
+ * Builds a path to the fixture with the given path components.
+ *
+ * e.g., makePathToFixture('example.qaa.trivial')
+ * e.g., makePathToFixture('example.qaa.trivial', 'model.ts')
+ *
+ * @param components One or more path components.
+ */
+ export function makePathToFixture(...components: string[]): string {
+ return fileURLToPath(new URL(path.join('..', '..', '..', 'test', 'fixtures', ...components), import.meta.url));
+}
diff --git a/developer/src/kmlmc/tests/test-package-compiler.ts b/developer/src/kmc-package/test/test-package-compiler.ts
similarity index 91%
rename from developer/src/kmlmc/tests/test-package-compiler.ts
rename to developer/src/kmc-package/test/test-package-compiler.ts
index 898d9debaf..838c28c786 100644
--- a/developer/src/kmlmc/tests/test-package-compiler.ts
+++ b/developer/src/kmc-package/test/test-package-compiler.ts
@@ -2,8 +2,8 @@ import 'mocha';
import * as fs from 'fs';
import {assert} from 'chai';
-import KmpCompiler from '../dist/package-compiler/kmp-compiler';
-import {makePathToFixture} from './helpers';
+import KmpCompiler from '../src/kmp-compiler.js';
+import {makePathToFixture} from './helpers/index.js';
describe('KmpCompiler', function () {
const MODELS = [
diff --git a/developer/src/kmc-package/test/tsconfig.json b/developer/src/kmc-package/test/tsconfig.json
new file mode 100644
index 0000000000..672bdc861b
--- /dev/null
+++ b/developer/src/kmc-package/test/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "extends": "../../kmc/tsconfig.kmc-base.json",
+
+ "compilerOptions": {
+ "rootDir": ".",
+ "rootDirs": ["./", "../src/"],
+ "outDir": "../build/test",
+ "baseUrl": ".",
+ },
+ "include": [
+ "**/test-*.ts",
+ "helpers/*.ts"
+ ],
+ "references": [
+ { "path": "../" }
+ ]
+}
\ No newline at end of file
diff --git a/developer/src/kmc-package/tsconfig.json b/developer/src/kmc-package/tsconfig.json
new file mode 100644
index 0000000000..a0311dd53c
--- /dev/null
+++ b/developer/src/kmc-package/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../kmc/tsconfig.kmc-base.json",
+
+ "compilerOptions": {
+ "outDir": "build/src/",
+ "rootDir": "src/",
+ "allowSyntheticDefaultImports": true, // for jszip
+ },
+ "include": [
+ "src/**/*.ts"
+ ],
+ "references": [
+ ]
+}
diff --git a/developer/src/kmc/.gitignore b/developer/src/kmc/.gitignore
deleted file mode 100644
index a7c831389d..0000000000
--- a/developer/src/kmc/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-tsconfig.tsbuildinfo
-build/
-.nyc_output/
\ No newline at end of file
diff --git a/developer/src/kmc/.npmignore b/developer/src/kmc/.npmignore
new file mode 100644
index 0000000000..7812fdab12
--- /dev/null
+++ b/developer/src/kmc/.npmignore
@@ -0,0 +1,12 @@
+# Ignore files required only in development.
+build.sh
+bundle.inc.sh
+Makefile
+src/*
+test/*
+tools/*
+tsconfig.json
+tsconfig.kmc-base.json
+
+# Ignore other unneeded build artifacts
+.nyc_output/
diff --git a/developer/src/kmc/Makefile b/developer/src/kmc/Makefile
index 7cc65eb38b..8e8dc7d5f3 100644
--- a/developer/src/kmc/Makefile
+++ b/developer/src/kmc/Makefile
@@ -1,10 +1,12 @@
#
-# Keyman Developer - LDML Keyboard Compiler Makefile
+# Keyman Developer - next generation compiler Makefile
#
!include ..\Defines.mak
-build: configure .virtual
+# We don't depend on configure here because kmc-keyboard does that already,
+# called from parent folder Makefile
+build: .virtual
$(GIT_BASH_FOR_KEYMAN) build.sh build
configure: .virtual
diff --git a/developer/src/kmc/README.md b/developer/src/kmc/README.md
index 5459ecf816..585eed7d56 100644
--- a/developer/src/kmc/README.md
+++ b/developer/src/kmc/README.md
@@ -1,20 +1,36 @@
-Keyman Developer - LDML Keyboard Compiler
+Keyman Developer - Next Generation Compiler
================
-This package provides the following Keyman **command line tool**:
+This package provides the following Keyman **command line tools**:
- `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**.
+ - `kmlmi` — merges Keyman lexical model `.model_info` files.
+
+`kmlmc` is intended to be used standalone, or as part of a build system. `kmlmp`
+is used only by command line tools. `kmlmi` is used exclusively in the
+[lexical-models repository][lexical models].
+
+Note: `kmc` will in the future replace `kmlmc`, `kmlmp`, and `kmlmi`.
+
+In order to build [lexical models][], these tools must be built and compiled.
+
+[lexical models]: https://github.com/keymanapp/lexical-models
+
Install
-------
-Install `kmlmdlc` globally:
+Install `kmc` globally:
- npm install -g @keymanapp/ldml-keyboard-compiler
+ npm install -g @keymanapp/kmc
-Usage
------
+kmc Usage
+---------
To compile an LDML keyboard from its `.xml` source, use `kmc`:
@@ -24,6 +40,19 @@ To see more command line options by using the `--help` option:
kmc --help
+kmlmc Usage
+-----------
+
+To compile a lexical model from its `.model.ts` source, use `kmlmc`:
+
+ kmlmc my-lexical-model.model.ts --outFile my-lexical-model.js
+
+To see more command line options by using the `--help` option:
+
+ kmlmc --help
+ kmlmp --help
+ kmlmi --help
+
How to build from source
------------------------
@@ -31,13 +60,18 @@ Run `build.sh`:
./build.sh configure build
-or
+or (less preferably -- build.sh is more efficient):
nmake configure build
-Once you have `configure`d once, you should not normally need to do it
-again unless dependencies change. `./build.sh` without parameters will
-do the default action, which is `build`.
+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`.
+
+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.
How to run the tests
--------------------
diff --git a/developer/src/kmc/build.sh b/developer/src/kmc/build.sh
index 7cfcfce705..6c6d53ff2e 100755
--- a/developer/src/kmc/build.sh
+++ b/developer/src/kmc/build.sh
@@ -16,13 +16,12 @@ cd "$THIS_SCRIPT_PATH"
. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
-builder_describe "Build Keyman LDML Keyboard Compiler kmc" \
+builder_describe "Build Keyman Keyboard Compiler kmc" \
"configure runs 'npm ci' on root folder" \
"build (default) builds kmc to build/" \
"clean cleans build/ folder" \
"bundle creates a bundled version of kmc" \
"test run automated tests for kmc" \
- "build-fixtures builds test fixtures for manual examination" \
"publish publish to npm" \
"--build-path=BUILD_PATH build directory for bundle" \
"--dry-run,-n don't actually publish, just dry run"
@@ -34,17 +33,17 @@ builder_parse "$@"
if builder_has_action clean; then
rm -rf ./build/ ./tsconfig.tsbuildinfo
builder_report success clean
+else
+ # We need the schema file at runtime and bundled, so always copy it for all actions except `clean`
+ mkdir -p "$THIS_SCRIPT_PATH/build/src/"
+ cp "$KEYMAN_ROOT/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboard.schema.json" "$THIS_SCRIPT_PATH/build/src/"
fi
+
#-------------------------------------------------------------------------------------------------------------------
if builder_has_action configure; then
verify_npm_setup
-
- # We need the schema file at runtime and bundled
- mkdir -p "$THIS_SCRIPT_PATH/build/src/"
- cp "$KEYMAN_ROOT/resources/standards-data/ldml-keyboards/techpreview/ldml-keyboard.schema.json" "$THIS_SCRIPT_PATH/build/src/"
-
builder_report success configure
fi
@@ -57,60 +56,30 @@ fi
#-------------------------------------------------------------------------------------------------------------------
-if builder_has_action build-fixtures; then
- # Build basic.kmx and emit its checksum
- mkdir -p ./build/test/fixtures
- node . ./test/fixtures/basic.xml --no-compiler-version --debug --out-file ./build/test/fixtures/basic-xml.kmx
- printf "${COLOR_GREY}Checksum for basic-xml.kmx: ${COLOR_PURPLE}%s${COLOR_RESET}\n" \
- "$(xxd -g 1 -l 12 ./build/test/fixtures/basic-xml.kmx | cut -d' ' -f 10-13)"
-
- # Generate a binary file from basic.txt for comparison purposes
- node ../../../common/tools/hextobin/build/hextobin.js ./test/fixtures/basic.txt ./build/test/fixtures/basic-txt.kmx
-
- builder_report success build-fixtures
-fi
-
-#-------------------------------------------------------------------------------------------------------------------
-
if builder_has_action test; then
- npm test
+ # npm test -- no tests as yet
builder_report success test
fi
#-------------------------------------------------------------------------------------------------------------------
if builder_has_action bundle; then
- . ./bundle.inc.sh
- bundle "$BUILD_PATH"
+ if ! builder_has_option --build-path; then
+ builder_report "Parameter --build-path is required" bundle
+ exit 64
+ fi
+
+ mkdir -p build/cjs-src
+ npm run bundle
+ cp build/cjs-src/* "$BUILD_PATH"
+
builder_report success bundle
fi
#-------------------------------------------------------------------------------------------------------------------
if builder_has_action publish; then
- if [[ $TIER == stable ]]; then
- npm_dist_tag=latest
- else
- npm_dist_tag=$TIER
- fi
-
- set_npm_version
-
- if build_has_option --dry-run; then
- DRY_RUN=--dry-run
- else
- DRY_RUN=
- fi
-
- #TEMP: we don't want to publish at this point!
- DRY_RUN=--dry-run
-
- # Note: In either case, npm publish MUST be given --access public to publish
- # a package in the @keymanapp scope on the public npm package index.
- #
- # See `npm help publish` for more details.
- echo "Publishing $DRY_RUN npm package with tag $npm_dist_tag"
- npm publish $DRY_RUN --access public --tag $npm_dist_tag || fail "Could not publish $npm_dist_tag release."
-
+ . "$KEYMAN_ROOT/resources/build/npm-publish.inc.sh"
+ npm_publish
builder_report success publish
fi
diff --git a/developer/src/kmc/bundle.inc.sh b/developer/src/kmc/bundle.inc.sh
deleted file mode 100644
index b5d11a664f..0000000000
--- a/developer/src/kmc/bundle.inc.sh
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/env bash
-
-. "$KEYMAN_ROOT/resources/build/jq.inc.sh"
-
-bundle() {
- if [[ $# -eq 0 ]]; then
- echo "Parameter --build-path is required"
- exit 64
- fi
-
- local BUILD_PATH="$1"
-
- # Input may be from a Windows build script, so we'll use cygpath to translate
- case $(uname) in
- CYGWIN* )
- BUILD_PATH=$(cygpath -u "$BUILD_PATH")
- ;;
- MINGW* )
- BUILD_PATH=$(cygpath -u "$BUILD_PATH")
- ;;
- esac
-
- KEYMAN_WIX_TEMP_BASE="$BUILD_PATH"
- KEYMAN_WIX_TEMP_LDMLKEYBOARDCOMPILER="$BUILD_PATH/LDMLKeyboardCompiler"
- KEYMAN_LDMLKEYBOARDCOMPILER_TEMP=`mktemp -d`
-
- echo "Temporary build path is $KEYMAN_LDMLKEYBOARDCOMPILER_TEMP"
-
- mkdir -p "$KEYMAN_WIX_TEMP_LDMLKEYBOARDCOMPILER"
-
- # We copy the built compiler into a temporary folder in order to prepare
- # the node modules, as otherwise the workspace will interfere
-
- cp -R "$KEYMAN_ROOT/developer/src/kmc/"* "$KEYMAN_LDMLKEYBOARDCOMPILER_TEMP/"
-
- cd "$KEYMAN_LDMLKEYBOARDCOMPILER_TEMP"
-
- # We use `npm pack` to extract only the aspects of the compiler actually
- # needed for distribution. While we could use npm-bundle or similar, that adds
- # extra, unwanted cruft; our approach gives us more control of the set of
- # files distributed with the Keyman Developer installer.
- #
- # For users on other operating systems, node.js is a dependency and the
- # compiler can be installed with `npm install
- # @keymanapp/ldml-keyboard-compiler`.
-
- # We copy the files to a temp folder in order to exclude thumbs.db, .vs, etc
- # from harvesting
- rm -rf "$KEYMAN_WIX_TEMP_LDMLKEYBOARDCOMPILER"
-
- # Step 1 - npm-pack the compiler package, then unpack it in our bundling
- # directory. This automatically strips the package to its barebones.
- set_npm_version
- npm pack
- mv keymanapp-ldml-keyboard-compiler*.tgz kmc.tgz
- mv kmc.tgz "$KEYMAN_WIX_TEMP_BASE"
-
- # We extract the npm-packed version of the compiler in order to reproduce
- # our needed bundle.
- cd "$KEYMAN_WIX_TEMP_BASE"
- tar xvzf kmc.tgz
-
- # Creates the directory referenced by $(KEYMAN_WIX_TEMP_LDMLKEYBOARDCOMPILER).
- mv package LDMLKeyboardCompiler
-
- # Cleans up the npm pack artifacts, which are no longer needed.
- rm kmc.tgz
-
- # Step 2 - the compiler has one in-repo dependency that will also need to
- # be packed. Managing other in-repo dependencies will be simpler; they install
- # into LDMLKeyboardCompiler's extracted bundle.
-
- mkdir -p "$KEYMAN_LDMLKEYBOARDCOMPILER_TEMP/node_modules/@keymanapp/"
- cp -R "$KEYMAN_ROOT/node_modules/@keymanapp/keyman-version" "$KEYMAN_LDMLKEYBOARDCOMPILER_TEMP/node_modules/@keymanapp/"
-
- cd "$KEYMAN_LDMLKEYBOARDCOMPILER_TEMP/node_modules/@keymanapp/keyman-version"
- set_npm_version
- npm pack
- mv keymanapp-keyman-version*.tgz kmver.tgz
- mv kmver.tgz "$KEYMAN_WIX_TEMP_LDMLKEYBOARDCOMPILER"
-
- # Step 3 - install just the bare essentials by using our packed local
- # dependency, followed by all external production dependencies.
- cd "$KEYMAN_WIX_TEMP_LDMLKEYBOARDCOMPILER"
- # package-lock.json wasn't bundled; this is needed to keep dependency versions
- # consistent.
-
- # as of npm v8.x, even though we are only working with `dependencies`,
- # `devDependencies` is still checked, and as these modules are present in
- # devDependencies but are only available when in the repo path, we need to
- # remove them before attempting to continue.
- # Yuck! ref: https://github.com/npm/cli/issues/3975#issuecomment-985305678
- # ref: https://github.com/npm/cli/issues/2921
-
- cat "$KEYMAN_LDMLKEYBOARDCOMPILER_TEMP/package.json" | "$JQ" \
- '. | del(.devDependencies."@keymanapp/keyman-version")' \
- > "package.json"
-
- npm install kmver.tgz --production --no-optional
- npm install --production --no-optional
-
- # Clean up the npm pack artifacts for the dependencies.
- rm -rf kmver.tgz
-
- # We don't need the unit tests, source files, or build scripts
- rm -rf test src *.sh Makefile tsconfig*
-
- # Clean up our temporary build folder
- rm -rf "$KEYMAN_LDMLKEYBOARDCOMPILER_TEMP"
-}
\ No newline at end of file
diff --git a/developer/src/kmc/package.json b/developer/src/kmc/package.json
index 6bf2e7c00d..2ad4405009 100644
--- a/developer/src/kmc/package.json
+++ b/developer/src/kmc/package.json
@@ -1,43 +1,62 @@
{
- "name": "@keymanapp/ldml-keyboard-compiler",
- "description": "Keyman Developer LDML keyboard compiler",
+ "name": "@keymanapp/kmc",
+ "description": "Keyman Developer compiler command line tools",
"keywords": [
"keyboard",
"keyman",
"ldml",
- "unicode"
+ "unicode",
+ "lexical-model",
+ "predictive-text"
],
"scripts": {
"build": "tsc -b",
- "test": "cd test && tsc -b && cd .. && nyc --check-coverage --lines 90 --reporter=text mocha",
+ "bundle": "npm run bundle-kmc && npm run bundle-kmlmc && npm run bundle-kmlmi && npm run bundle-kmlmp",
+ "bundle-kmc": "esbuild build/src/kmc.js --bundle --platform=node > build/cjs-src/kmc.cjs",
+ "bundle-kmlmc": "esbuild build/src/kmlmc.js --bundle --platform=node > build/cjs-src/kmlmc.cjs",
+ "bundle-kmlmi": "esbuild build/src/kmlmi.js --bundle --platform=node > build/cjs-src/kmlmi.cjs",
+ "bundle-kmlmp": "esbuild build/src/kmlmp.js --bundle --platform=node > build/cjs-src/kmlmp.cjs",
+ "test": "cd test && tsc -b && cd .. && c8 mocha",
"prepublishOnly": "npm run build"
},
+ "type": "module",
"author": "Marc Durdin (https://github.com/mcdurdin)",
+ "contributors": [
+ "Eddie Antonio Santos ",
+ "Joshua Horton"
+ ],
"license": "MIT",
+ "bugs": {
+ "url": "https://github.com/keymanapp/keyman/issues"
+ },
"main": "build/src/kmc.js",
"bin": {
- "kmc": "build/src/kmc.js"
+ "kmc": "build/src/kmc.js",
+ "kmlmc": "build/src/kmlmc.js",
+ "kmlmp": "build/src/kmlmp.js",
+ "kmlmi": "build/src/kmlmi.js"
},
"dependencies": {
- "ajv": "^8.11.0",
- "commander": "^3.0.0",
- "crc-32": "^1.2.2",
- "restructure": "^3.0.0",
- "semver": "^7.3.7",
- "typescript": "^4.5.4",
- "xml2js": "^0.4.19"
+ "@keymanapp/keyman-version": "*",
+ "@keymanapp/kmc-keyboard": "*",
+ "@keymanapp/kmc-model": "*",
+ "@keymanapp/kmc-model-info": "*",
+ "@keymanapp/kmc-package": "*",
+ "@keymanapp/models-types": "*",
+ "commander": "^3.0.0"
},
"devDependencies": {
- "@keymanapp/keyman-version": "*",
"@types/chai": "^4.1.7",
"@types/mocha": "^5.2.7",
"@types/node": "^10.14.6",
"@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
"chai": "^4.3.4",
"chalk": "^2.4.2",
+ "esbuild": "^0.15.8",
"mocha": "^8.4.0",
- "nyc": "^15.1.0",
- "ts-node": "^9.1.1"
+ "ts-node": "^9.1.1",
+ "typescript": "^4.5.4"
},
"mocha": {
"spec": "build/test/**/test-*.js",
diff --git a/developer/src/kmc/src/kmc.ts b/developer/src/kmc/src/kmc.ts
index 70d36e86d0..9c2e8a8cf3 100644
--- a/developer/src/kmc/src/kmc.ts
+++ b/developer/src/kmc/src/kmc.ts
@@ -1,23 +1,18 @@
#!/usr/bin/env node
/**
- * kmc - Keyman LDML Keyboard Compiler
+ * kmc - Keyman Next Generation Compiler
*/
import * as fs from 'fs';
import * as path from 'path';
-import * as program from 'commander';
-import CompilerOptions from './keyman/compiler/compiler-options';
-import Compiler from './keyman/compiler/compiler';
-import KMXBuilder from './keyman/kmx/kmx-builder';
-import { CompilerMessages } from './keyman/compiler/messages';
-import { CompilerEvent } from './keyman/compiler/callbacks';
-import KMXPlusMetadataCompiler from './keyman/compiler/metadata-compiler';
+import { Command } from 'commander';
+import * as kmc from '@keymanapp/kmc-keyboard';
+import KEYMAN_VERSION from "@keymanapp/keyman-version/keyman-version.mjs";
let inputFilename: string;
-const KEYMAN_VERSION = require("@keymanapp/keyman-version").KEYMAN_VERSION;
-
+const program = new Command();
/* Arguments */
program
.description('Compiles Keyman LDML keyboards')
@@ -47,17 +42,18 @@ class CompilerCallbacks {
// TODO: translate filename based on the baseFilename
return fs.readFileSync(filename);
}
- reportMessage(event: CompilerEvent): void {
- console.log(CompilerMessages.severityName(event.code) + ' ' + event.code.toString(16) + ': ' + event.message);
+ reportMessage(event: kmc.CompilerEvent): void {
+ console.log(kmc.CompilerMessages.severityName(event.code) + ' ' + event.code.toString(16) + ': ' + event.message);
}
loadLdmlKeyboardSchema(): Buffer {
- return fs.readFileSync(path.join(__dirname, 'ldml-keyboard.schema.json'));
+ let schemaPath = new URL('ldml-keyboard.schema.json', import.meta.url);
+ return fs.readFileSync(schemaPath);
}
}
-function compileKeyboard(inputFilename: string, options: CompilerOptions): Uint8Array {
+function compileKeyboard(inputFilename: string, options: kmc.CompilerOptions): Uint8Array {
const c = new CompilerCallbacks();
- const k = new Compiler(c, options);
+ const k = new kmc.Compiler(c, options);
let source = k.load(inputFilename);
if(!source) {
return null;
@@ -72,14 +68,14 @@ function compileKeyboard(inputFilename: string, options: CompilerOptions): Uint8
// In order for the KMX file to be loaded by non-KMXPlus components, it is helpful
// to duplicate some of the metadata
- KMXPlusMetadataCompiler.addKmxMetadata(kmx.kmxplus, kmx.keyboard, options);
+ kmc.KMXPlusMetadataCompiler.addKmxMetadata(kmx.kmxplus, kmx.keyboard, options);
// Use the builder to generate the binary output file
- let builder = new KMXBuilder(kmx, options.debug);
+ let builder = new kmc.KMXBuilder(kmx, options.debug);
return builder.compile();
}
-let options: CompilerOptions = {
+let options: kmc.CompilerOptions = {
debug: program.debug ?? false,
addCompilerVersion: program.compilerVersion ?? true
}
diff --git a/developer/src/kmlmc/source/kmlmc.ts b/developer/src/kmc/src/kmlmc.ts
similarity index 68%
rename from developer/src/kmlmc/source/kmlmc.ts
rename to developer/src/kmc/src/kmlmc.ts
index 659565a8f4..eccf4dc95c 100644
--- a/developer/src/kmlmc/source/kmlmc.ts
+++ b/developer/src/kmc/src/kmlmc.ts
@@ -2,17 +2,15 @@
/**
* kmlmc - Keyman Lexical Model Compiler
*/
-///
import * as fs from 'fs';
-import * as program from 'commander';
-
-import { compileModel } from './util/util';
+import { Command } from 'commander';
+import { compileModel } from '@keymanapp/kmc-model';
import { SysExits } from './util/sysexits';
+import KEYMAN_VERSION from "@keymanapp/keyman-version/keyman-version.mjs";
let inputFilename: string;
-
-const KEYMAN_VERSION = require("@keymanapp/keyman-version").KEYMAN_VERSION;
+const program = new Command();
/* Arguments */
program
@@ -29,8 +27,19 @@ if (!inputFilename) {
exitDueToUsageError('Must provide a lexical model source file.');
}
+let code = null;
// Compile:
-let code = compileModel(inputFilename);
+try {
+ code = compileModel(inputFilename);
+} catch(e) {
+ console.error(e);
+ process.exit(SysExits.EX_DATAERR);
+}
+
+if(!code) {
+ console.error('Compilation failed.')
+ process.exit(SysExits.EX_DATAERR);
+}
// Output:
if (program.outFile) {
diff --git a/developer/src/kmlmc/source/kmlmi.ts b/developer/src/kmc/src/kmlmi.ts
similarity index 86%
rename from developer/src/kmlmc/source/kmlmi.ts
rename to developer/src/kmc/src/kmlmi.ts
index bbc60db07a..99171c99b2 100644
--- a/developer/src/kmlmc/source/kmlmi.ts
+++ b/developer/src/kmc/src/kmlmi.ts
@@ -3,15 +3,16 @@
* kmlmi - Keyman Lexical Model model_info Compiler
*/
-import * as program from 'commander';
import * as fs from 'fs';
import * as path from 'path';
-import KmpCompiler from './package-compiler/kmp-compiler';
-import { ModelInfoOptions as ModelInfoOptions, writeMergedModelMetadataFile } from './model-info-compiler/model-info-compiler';
+import { Command } from 'commander';
+import KmpCompiler from '@keymanapp/kmc-package';
+import { ModelInfoOptions as ModelInfoOptions, writeMergedModelMetadataFile } from '@keymanapp/kmc-model-info';
import { SysExits } from './util/sysexits';
-const KEYMAN_VERSION = require("@keymanapp/keyman-version").KEYMAN_VERSION;
+import KEYMAN_VERSION from "@keymanapp/keyman-version/keyman-version.mjs";
let inputFilename: string;
+const program = new Command();
/* Arguments */
program
@@ -60,10 +61,15 @@ let modelInfoOptions: ModelInfoOptions = {
kmpFileName: kmpFilename
};
-writeMergedModelMetadataFile(
- inputFilename,
- outputFilename,
- modelInfoOptions);
+try {
+ writeMergedModelMetadataFile(
+ inputFilename,
+ outputFilename,
+ modelInfoOptions);
+} catch(e) {
+ console.error(e);
+ process.exit(SysExits.EX_DATAERR);
+}
function exitDueToUsageError(message: string): never {
console.error(`${program._name}: ${message}`);
diff --git a/developer/src/kmlmc/source/kmlmp.ts b/developer/src/kmc/src/kmlmp.ts
similarity index 87%
rename from developer/src/kmlmc/source/kmlmp.ts
rename to developer/src/kmc/src/kmlmp.ts
index 9979fd2ad0..f4cbca6616 100644
--- a/developer/src/kmlmc/source/kmlmp.ts
+++ b/developer/src/kmc/src/kmlmp.ts
@@ -3,13 +3,14 @@
* kmlmp - Keyman Lexical Model Package Compiler
*/
-import * as program from 'commander';
import * as fs from 'fs';
-import KmpCompiler from './package-compiler/kmp-compiler';
+import { Command } from 'commander';
+import KmpCompiler from '@keymanapp/kmc-package';
import { SysExits } from './util/sysexits';
-const KEYMAN_VERSION = require("@keymanapp/keyman-version").KEYMAN_VERSION;
+import KEYMAN_VERSION from "@keymanapp/keyman-version/keyman-version.mjs";
let inputFilename: string;
+const program = new Command();
/* Arguments */
program
diff --git a/developer/src/kmlmc/source/util/sysexits.ts b/developer/src/kmc/src/util/sysexits.ts
similarity index 100%
rename from developer/src/kmlmc/source/util/sysexits.ts
rename to developer/src/kmc/src/util/sysexits.ts
diff --git a/developer/src/kmc/test/tsconfig.json b/developer/src/kmc/test/tsconfig.json
deleted file mode 100644
index faca8098d5..0000000000
--- a/developer/src/kmc/test/tsconfig.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "extends": "../../../../tsconfig-base.json",
-
- "compilerOptions": {
- "module": "commonjs",
- "moduleResolution": "node",
- "noImplicitAny": true,
- "sourceMap": true,
- "rootDir": ".",
- "rootDirs": ["./", "../src/"],
- "outDir": "../build/test",
- "baseUrl": ".",
- },
- "include": [
- "**/test-*.ts",
- "./helpers/index.ts"
- ],
- "references": [
- { "path": "../../../../common/web/keyman-version" },
- { "path": "../" }
- ]
-}
\ No newline at end of file
diff --git a/developer/src/kmc/tsconfig.json b/developer/src/kmc/tsconfig.json
index 5242668385..ad76703f61 100644
--- a/developer/src/kmc/tsconfig.json
+++ b/developer/src/kmc/tsconfig.json
@@ -1,27 +1,25 @@
{
- "extends": "../../../tsconfig-base.json",
+ "extends": "./tsconfig.kmc-base.json",
"compilerOptions": {
- "module": "commonjs",
- "target": "es2020",
- "moduleResolution": "node",
- "sourceMap": true,
"outDir": "build/src/",
"rootDir": "src/",
- "declaration": true,
- "alwaysStrict": true,
- "noImplicitThis": true,
- "noImplicitReturns": true,
- "noImplicitAny": true,
- "strictBindCallApply": true,
- "strictFunctionTypes": true,
- "noUnusedLocals": true
+ "baseUrl": ".",
+ "paths": {
+ "@keymanapp/kmc-keyboard": [ "../kmc-keyboard/src/main" ],
+ "@keymanapp/kmc-model": [ "../kmc-model/src/main" ],
+ "@keymanapp/kmc-model-info": [ "../kmc-model-info/src/model-info-compiler" ],
+ "@keymanapp/kmc-package": [ "../kmc-package/src/kmp-compiler" ],
+ }
},
"include": [
"src/**/*.ts"
],
"references": [
- { "path": "../../../common/web/keyman-version" },
- { "path": "../../../core/include/ldml/"}
+ { "path": "../../../common/web/keyman-version/tsconfig.esm.json" },
+ { "path": "../kmc-keyboard" },
+ { "path": "../kmc-model" },
+ { "path": "../kmc-model-info" },
+ { "path": "../kmc-package" },
]
}
diff --git a/developer/src/kmc/tsconfig.kmc-base.json b/developer/src/kmc/tsconfig.kmc-base.json
new file mode 100644
index 0000000000..8f79f3ec15
--- /dev/null
+++ b/developer/src/kmc/tsconfig.kmc-base.json
@@ -0,0 +1,18 @@
+{
+ "extends": "../../../tsconfig-base.json",
+
+ "compilerOptions": {
+ "module": "ES2022",
+ "target": "es2022",
+ "moduleResolution": "Node",
+ "forceConsistentCasingInFileNames": true,
+ "sourceMap": true,
+ "alwaysStrict": true,
+ "noImplicitThis": true,
+ "noImplicitReturns": true,
+ "noImplicitAny": true,
+ "strictBindCallApply": true,
+ "strictFunctionTypes": true,
+ "noUnusedLocals": true
+ },
+}
diff --git a/developer/src/kmlmc/.gitignore b/developer/src/kmlmc/.gitignore
deleted file mode 100644
index bbbfd24cf5..0000000000
--- a/developer/src/kmlmc/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-node_modules/
-dist/
-dist-tests/
-tsconfig.tsbuildinfo
-tests/tsconfig.tsbuildinfo
diff --git a/developer/src/kmlmc/.npmignore b/developer/src/kmlmc/.npmignore
deleted file mode 100644
index 73126b7338..0000000000
--- a/developer/src/kmlmc/.npmignore
+++ /dev/null
@@ -1,6 +0,0 @@
-# Ignore files required only in development.
-build.sh
-bundle.sh
-source/*
-tests/*
-tsconfig.json
diff --git a/developer/src/kmlmc/Makefile b/developer/src/kmlmc/Makefile
deleted file mode 100644
index b96c5e24cb..0000000000
--- a/developer/src/kmlmc/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Keyman Developer - Lexical Model Compiler Makefile
-#
-
-!include ..\Defines.mak
-
-build: .virtual
- $(GIT_BASH_FOR_KEYMAN) build.sh
-
-clean: .virtual
-#TODO: move to build.sh `clean` target
- -rd /s/q dist
- -rd /s/q dist-tests
- -del tsconfig.tsbuildinfo
-
-test: .virtual
- $(GIT_BASH_FOR_KEYMAN) build.sh -tdd
-
-signcode:
- @rem nothing to do
-
-wrap-symbols:
- @rem nothing to do
-
-test-manifest:
- @rem This target needed as dependency for KMDECOMP
-
-install:
- @rem nothing to do
-
-!include ..\Target.mak
diff --git a/developer/src/kmlmc/README.md b/developer/src/kmlmc/README.md
deleted file mode 100644
index 93fb0facfd..0000000000
--- a/developer/src/kmlmc/README.md
+++ /dev/null
@@ -1,54 +0,0 @@
-Keyman Developer
-================
-
-This package provides the following Keyman **command line tools**:
-
- - `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**.
- - `kmlmi` — merges Keyman lexical model `.model_info` files.
-
-`kmlmc` is intended to be used standalone, or as part of a build system.
-`kmlmp` is used only by command line tools. `kmlmi` is used exclusively
-in the [lexical-models repository][lexical models].
-
-In order to build [lexical models][], these tools must be built and
-compiled.
-
-[lexical models]: https://github.com/keymanapp/lexical-models
-
-
-Install
--------
-
-Install `kmlmc`, `kmlmp`, and `kmlmi` globally:
-
- npm install -g @keymanapp/lexical-model-compiler
-
-Usage
------
-
-To compile a lexical model from its `.model.ts` source, use `kmlmc`:
-
- kmlmc my-lexical-model.model.ts --outFile my-lexical-model.js
-
-To see more command line options by using the `--help` option:
-
- kmlmc --help
- kmlmp --help
- kmlmi --help
-
-How to build from source
-------------------------
-
-Run `build.sh`:
-
- ./build.sh
-
-
-How to run the tests
---------------------
-
- ./build.sh -test
-
diff --git a/developer/src/kmlmc/build.sh b/developer/src/kmlmc/build.sh
deleted file mode 100755
index 9d229e1195..0000000000
--- a/developer/src/kmlmc/build.sh
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env bash
-#
-# Compiles the developer tools, including the language model compilers.
-#
-
-# Exit on command failure and when using unset variables:
-set -eu
-
-## START STANDARD BUILD SCRIPT INCLUDE
-# adjust relative paths as necessary
-THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
-. "$(dirname "$THIS_SCRIPT")/../../../resources/build/build-utils.sh"
-. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
-## END STANDARD BUILD SCRIPT INCLUDE
-EX_USAGE=64
-
-# Where to find lexical model types.
-LEXICAL_MODELS_TYPES="$KEYMAN_ROOT/common/models/types"
-
-
-# Build the main script.
-build () {
- npm run build || fail "Could not build top-level JavaScript file."
-}
-
-display_usage ( ) {
- echo "Usage: $0 [-test] [-publish-to-npm]"
- echo " $0 -help"
- echo
- echo " -help displays this screen and exits"
- echo " -test runs unit tests after building"
- echo " -tdd runs unit tests WITHOUT building"
- echo " -skip-package-install, -S skip package installation"
- echo " -publish-to-npm publishes the current version to the npm package index"
- echo " -dry-run do build, etc, but don't actually publish"
-}
-
-################################ Main script ################################
-
-run_tests=0
-install_dependencies=1
-should_publish=0
-npm_dist_tag=
-should_dry_run=0
-
-# Process command-line arguments
-while [[ $# -gt 0 ]] ; do
- key="$1"
- case $key in
- -help|-h)
- display_usage
- exit
- ;;
- -dry-run)
- should_dry_run=1
- ;;
- -skip-package-install|-S)
- install_dependencies=0
- ;;
- -test)
- run_tests=1
- ;;
- -tdd)
- run_tests=1
- install_dependencies=0
- ;;
- -version)
- echo "Warning: -version is now ignored"
- ;;
- -tier)
- echo "Warning: -tier is now ignored"
- ;;
- -publish-to-npm)
- should_publish=1
- ;;
- *)
- echo "$0: invalid option: $key"
- display_usage
- exit $EX_USAGE
- esac
- shift # past the processed argument
-done
-
-# Dry run settings
-if (( should_dry_run )); then
- DRY_RUN=--dry-run
-else
- DRY_RUN=
-fi
-
-# Check if Node.JS/npm is installed.
-type npm >/dev/null ||\
- fail "Build environment setup error detected! Please ensure Node.js is installed!"
-
-if (( install_dependencies )) ; then
- verify_npm_setup
- # We need to build keyman-version and lm-worker with a script for now
- "$KEYMAN_ROOT/common/web/keyman-version/build.sh" || fail "Could not build keyman-version"
-fi
-
-build || fail "Compilation failed."
-echo "Typescript compilation successful."
-
-if (( run_tests )); then
- npm test || fail "Tests failed"
-fi
-
-if (( should_publish )); then
- if [[ $TIER == stable ]]; then
- npm_dist_tag=latest
- else
- npm_dist_tag=$TIER
- fi
-
- set_npm_version
-
- # Note: In either case, npm publish MUST be given --access public to publish
- # a package in the @keymanapp scope on the public npm package index.
- #
- # See `npm help publish` for more details.
- echo "Publishing $DRY_RUN npm package with tag $npm_dist_tag"
- npm publish $DRY_RUN --access public --tag $npm_dist_tag || fail "Could not publish $npm_dist_tag release."
-fi
diff --git a/developer/src/kmlmc/bundle.sh b/developer/src/kmlmc/bundle.sh
deleted file mode 100755
index 14143608ca..0000000000
--- a/developer/src/kmlmc/bundle.sh
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env bash
-
-set -eu
-
-## START STANDARD BUILD SCRIPT INCLUDE
-# adjust relative paths as necessary
-THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
-. "$(dirname "$THIS_SCRIPT")/../../../resources/build/build-utils.sh"
-## END STANDARD BUILD SCRIPT INCLUDE
-
-. "$KEYMAN_ROOT/resources/build/jq.inc.sh"
-. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"
-
-display_usage() {
- echo "Usage: $0 --build-path path"
- echo " $0 --help"
- echo
- echo "This script is called from the Keyman Developer installer build"
- echo "and is not intended for standalone use."
- echo
- echo " --help displays this screen and exits"
- echo " --build-path path temporary path where archive will be built"
-}
-
-BUILD_PATH=
-
-# Process command-line arguments
-while [[ $# -gt 0 ]] ; do
- key="$1"
- case $key in
- -help|-h)
- display_usage
- exit
- ;;
- --build-path)
- shift
- BUILD_PATH="$1"
- ;;
- *)
- echo "$0: invalid option: $key"
- display_usage
- exit 64
- esac
- shift # past the processed argument
-done
-
-if [[ -z $BUILD_PATH ]]; then
- echo "Parameter --build-path is required"
- display_usage
- exit 64
-fi
-
-KEYMAN_WIX_TEMP_BASE="$BUILD_PATH"
-KEYMAN_WIX_TEMP_MODELCOMPILER="$BUILD_PATH/ModelCompiler"
-KEYMAN_MODELCOMPILER_TEMP=`mktemp -d`
-
-# We copy the built model compiler into a temporary folder in order to prepare
-# the node modules, as otherwise the workspace will interfere
-
-cp -R "$KEYMAN_ROOT/developer/src/kmlmc/"* "$KEYMAN_MODELCOMPILER_TEMP/"
-
-cd "$KEYMAN_MODELCOMPILER_TEMP"
-
-# We use `npm pack` to extract only the aspects of the model-compiler actually
-# needed for distribution. While we could use npm-bundle or similar, that adds
-# extra, unwanted cruft; our approach gives us more control of the set of files
-# distributed with the Keyman Developer installer.
-#
-# For users on other operating systems, node.js is a dependency and the compiler
-# can be installed with `npm install @keymanapp/lexical-model-compiler`.
-
-# We copy the files to a temp folder in order to exclude thumbs.db, .vs, etc
-# from harvesting
-rm -rf "$KEYMAN_WIX_TEMP_MODELCOMPILER"
-
-# Step 1 - npm-pack the model compiler package, then unpack it in our bundling
-# directory. This automatically strips the package to its barebones.
-set_npm_version
-npm pack
-mv keymanapp-lexical-model-compiler*.tgz kmlmc.tgz
-mv kmlmc.tgz "$KEYMAN_WIX_TEMP_BASE"
-
-# We extract the npm-packed version of the model compiler in order to reproduce
-# our needed bundle.
-cd "$KEYMAN_WIX_TEMP_BASE"
-tar xvzf kmlmc.tgz
-
-# Creates the directory referenced by $(KEYMAN_WIX_TEMP_MODELCOMPILER).
-mv package ModelCompiler
-
-# Cleans up the npm pack artifacts, which are no longer needed.
-rm kmlmc.tgz
-
-# Step 2 - the model compiler has one in-repo dependency that will also need to
-# be packed. Managing other in-repo dependencies will be simpler; they install
-# into ModelCompiler's extracted bundle.
-
-mkdir -p "$KEYMAN_MODELCOMPILER_TEMP/node_modules/@keymanapp/"
-cp -R "$KEYMAN_ROOT/node_modules/@keymanapp/models-types" "$KEYMAN_MODELCOMPILER_TEMP/node_modules/@keymanapp/"
-
-cd "$KEYMAN_MODELCOMPILER_TEMP/node_modules/@keymanapp/models-types"
-set_npm_version
-npm pack
-mv keymanapp-models-types*.tgz kmtypes.tgz
-mv kmtypes.tgz "$KEYMAN_WIX_TEMP_MODELCOMPILER"
-
-
-cp -R "$KEYMAN_ROOT/node_modules/@keymanapp/keyman-version" "$KEYMAN_MODELCOMPILER_TEMP/node_modules/@keymanapp/"
-
-cd "$KEYMAN_MODELCOMPILER_TEMP/node_modules/@keymanapp/keyman-version"
-set_npm_version
-npm pack
-mv keymanapp-keyman-version*.tgz kmver.tgz
-mv kmver.tgz "$KEYMAN_WIX_TEMP_MODELCOMPILER"
-
-# Step 3 - install just the bare essentials by using our packed local
-# dependency, followed by all external production dependencies.
-cd "$KEYMAN_WIX_TEMP_MODELCOMPILER"
-# package-lock.json wasn't bundled; this is needed to keep dependency versions
-# consistent.
-
-# as of npm v8.x, even though we are only working with `dependencies`,
-# `devDependencies` is still checked, and as these modules are present in
-# devDependencies but are only available when in the repo path, we need to
-# remove them before attempting to continue.
-# Yuck! ref: https://github.com/npm/cli/issues/3975#issuecomment-985305678
-# ref: https://github.com/npm/cli/issues/2921
-# can't use npm uninstall because it depends on @keymanapp/models-types being
-# present!
-
-cat "$KEYMAN_MODELCOMPILER_TEMP/package.json" | "$JQ" \
- '. | del(.devDependencies."@keymanapp/models-templates") | del(.devDependencies."@keymanapp/keyman-version") | del(.devDependencies."@keymanapp/models-wordbreakers")' \
- > "package.json"
-
-npm install kmtypes.tgz --production --no-optional
-npm install kmver.tgz --production --no-optional
-npm install --production --no-optional
-
-# Clean up the npm pack artifacts for the dependencies.
-rm kmtypes.tgz
-rm kmver.tgz
-
-# We don't need the unit tests
-rm -rf "$KEYMAN_WIX_TEMP_MODELCOMPILER/tests"
-rm -rf "$KEYMAN_MODELCOMPILER_TEMP"
\ No newline at end of file
diff --git a/developer/src/kmlmc/tests/tsconfig.json b/developer/src/kmlmc/tests/tsconfig.json
deleted file mode 100644
index 521ddc6c3b..0000000000
--- a/developer/src/kmlmc/tests/tsconfig.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "extends": "../../../../tsconfig-base.json",
-
- "compilerOptions": {
- "module": "commonjs",
- "moduleResolution": "node",
- "noImplicitAny": true,
- "sourceMap": true,
- "rootDir": "./",
- "outDir": "../dist-tests/"
- },
- "include": [
- "**/test-*.ts",
- "helpers/index.ts"
- ],
- "references": [
- { "path": "../../../../common/web/keyman-version" },
- { "path": "../../../../common/models/types" },
- { "path": "../../../../common/models/templates" },
- { "path": "../../../../common/models/wordbreakers" },
- { "path": "../"}
- ]
-}
\ No newline at end of file
diff --git a/developer/src/kmlmc/tsconfig.json b/developer/src/kmlmc/tsconfig.json
deleted file mode 100644
index 37d642b8c1..0000000000
--- a/developer/src/kmlmc/tsconfig.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "extends": "../../../tsconfig-base.json",
-
- "compilerOptions": {
- "module": "commonjs",
- "target": "es2017",
- "moduleResolution": "node",
- "sourceMap": true,
- "outDir": "dist/",
- "rootDir": "source/",
- "declaration": true,
- "alwaysStrict": true,
- "noImplicitThis": true,
- "noImplicitReturns": true,
- "noImplicitAny": true,
- "strictBindCallApply": true,
- "strictFunctionTypes": true,
- "noUnusedLocals": true
- },
- "include": [
- "source/**/*.ts"
- ],
- "references": [
- { "path": "../../../common/web/keyman-version" },
- { "path": "../../../common/models/types" },
- { "path": "../../../common/models/templates" },
- { "path": "../../../common/models/wordbreakers" },
- ]
-}
diff --git a/developer/src/test/auto/Makefile b/developer/src/test/auto/Makefile
index 1f868c14e1..635d933bd1 100644
--- a/developer/src/test/auto/Makefile
+++ b/developer/src/test/auto/Makefile
@@ -23,11 +23,13 @@ developer-tests: \
kmcomp-x64-structures \
kmconvert \
kmx-file-languages \
- lexical-model-compiler \
model-ts-parser \
package-info \
- kmlmc \
- kmc
+ kmc \
+ kmc-keyboard \
+ kmc-model \
+ kmc-model-info \
+ kmc-package
# ----------------------------------------------------------------------
@@ -68,11 +70,6 @@ kmconvert: .virtual
cd $(DEVELOPER_ROOT)\src\test\auto\kmconvert
$(MAKE) $(TARGET)
-lexical-model-compiler: .virtual
-# TODO: move this to a test target in kmlmc
- cd $(DEVELOPER_ROOT)\src\kmlmc
- $(GIT_BASH_FOR_KEYMAN) build.sh -test
-
model-ts-parser: .virtual
rem TODO
# cd $(DEVELOPER_ROOT)\src\test\auto\model-ts-parser
@@ -90,8 +87,20 @@ kmc: .virtual
cd $(DEVELOPER_ROOT)\src\kmc
$(MAKE) $(TARGET)
-kmlmc: .virtual
- cd $(DEVELOPER_ROOT)\src\kmlmc
+kmc-keyboard: .virtual
+ cd $(DEVELOPER_ROOT)\src\kmc-keyboard
+ $(MAKE) $(TARGET)
+
+kmc-model: .virtual
+ cd $(DEVELOPER_ROOT)\src\kmc-model
+ $(MAKE) $(TARGET)
+
+kmc-model-info: .virtual
+ cd $(DEVELOPER_ROOT)\src\kmc-model-info
+ $(MAKE) $(TARGET)
+
+kmc-package: .virtual
+ cd $(DEVELOPER_ROOT)\src\kmc-package
$(MAKE) $(TARGET)
# ----------------------------------------------------------------------
diff --git a/developer/src/tike/Makefile b/developer/src/tike/Makefile
index fecaae5d31..da991b99b9 100644
--- a/developer/src/tike/Makefile
+++ b/developer/src/tike/Makefile
@@ -11,6 +11,9 @@ build: version.res manifest.res icons dirs xml xsd pull-core
$(TDS2DBG) $(WIN32_TARGET_PATH)\tike.exe
$(COPY) $(WIN32_TARGET_PATH)\tike.exe $(DEVELOPER_PROGRAM)
$(COPY) kmlmc.cmd $(DEVELOPER_PROGRAM)
+ $(COPY) kmlmi.cmd $(DEVELOPER_PROGRAM)
+ $(COPY) kmlmp.cmd $(DEVELOPER_PROGRAM)
+ $(COPY) kmc.cmd $(DEVELOPER_PROGRAM)
$(COPY) $(KEYMAN_ROOT)\core\build\x86\$(TARGET_PATH)\src\kmnkbp0-0.dll $(DEVELOPER_PROGRAM)
if exist $(WIN32_TARGET_PATH)\tike.dbg $(COPY) $(WIN32_TARGET_PATH)\tike.dbg $(DEVELOPER_DEBUGPATH)
diff --git a/developer/src/tike/kmc.cmd b/developer/src/tike/kmc.cmd
new file mode 100644
index 0000000000..448f5f2125
--- /dev/null
+++ b/developer/src/tike/kmc.cmd
@@ -0,0 +1,20 @@
+@echo off
+setlocal
+rem This script is based on /developer/src/node/inst/kmc.cmd. It is stored here
+rem in order to allow TIKE to call out to the compiler while debugging.
+if exist "%~dp0..\inst\node\dist\node.exe" (
+ rem If running in developer/src/tike/:
+ set nodeexe="%~dp0..\inst\node\dist\node.exe"
+ set nodecli="%~dp0..\kmc\build\src\kmc.js"
+) else if exist "%~dp0..\src\inst\node\dist\node.exe" (
+ rem If running in developer/bin/:
+ set nodeexe="%~dp0..\src\inst\node\dist\node.exe"
+ set nodecli="%~dp0..\src\kmc\build\src\kmc.js"
+) else (
+ rem Cannot find node or kmc.js relative to execution path
+ echo Error: node.exe or kmc.js not found.
+ exit /b 1
+)
+
+%nodeexe% %nodecli% %*
+exit /b %errorlevel%
diff --git a/developer/src/tike/kmlmc.cmd b/developer/src/tike/kmlmc.cmd
index 650eabf0e6..fe2a7e1471 100644
--- a/developer/src/tike/kmlmc.cmd
+++ b/developer/src/tike/kmlmc.cmd
@@ -1,15 +1,15 @@
@echo off
setlocal
-rem This script is a rough duplicate of /developer/src/node/inst/kmlmc.cmd. It is stored here
+rem This script is based on /developer/src/node/inst/kmlmc.cmd. It is stored here
rem in order to allow TIKE to call out to the compiler while debugging.
-if exist "%~dp0..\..\..\..\developer\src\inst\node\dist\node.exe" (
- rem If running in windows/src/developer/x/:
- set nodeexe="%~dp0..\..\..\..\developer\src\inst\node\dist\node.exe"
- set nodecli="%~dp0..\..\..\..\developer\src\kmlmc\dist\kmlmc.js"
-) else if exist "%~dp0..\..\..\developersrc\inst\node\dist\node.exe" (
- rem If running in windows/bin/developer/:
- set nodeexe="%~dp0..\..\..\developer\src\inst\node\dist\node.exe"
- set nodecli="%~dp0..\..\..\developer\src\kmlmc\dist\kmlmc.js"
+if exist "%~dp0..\inst\node\dist\node.exe" (
+ rem If running in developer/src/tike/:
+ set nodeexe="%~dp0..\inst\node\dist\node.exe"
+ set nodecli="%~dp0..\kmc\build\src\kmlmc.js"
+) else if exist "%~dp0..\src\inst\node\dist\node.exe" (
+ rem If running in developer/bin/:
+ set nodeexe="%~dp0..\src\inst\node\dist\node.exe"
+ set nodecli="%~dp0..\src\kmc\build\src\kmlmc.js"
) else (
rem Cannot find node or kmlmc.js relative to execution path
echo Error: node.exe or kmlmc.js not found.
diff --git a/developer/src/tike/kmlmi.cmd b/developer/src/tike/kmlmi.cmd
index 197e04f393..53d293f779 100644
--- a/developer/src/tike/kmlmi.cmd
+++ b/developer/src/tike/kmlmi.cmd
@@ -1,15 +1,15 @@
@echo off
setlocal
-rem This script is a rough duplicate of /developer/src/node/inst/kmlmi.cmd. It is stored here
+rem This script is based on /developer/src/node/inst/kmlmi.cmd. It is stored here
rem in order to allow TIKE to call out to the compiler while debugging.
-if exist "%~dp0..\..\..\..\developer\src\inst\node\dist\node.exe" (
- rem If running in windows/src/developer/x/:
- set nodeexe="%~dp0..\..\..\..\developer\src\inst\node\dist\node.exe"
- set nodecli="%~dp0..\..\..\..\developer\src\kmlmc\dist\kmlmi.js"
-) else if exist "%~dp0..\..\..\developer\src\inst\node\dist\node.exe" (
- rem If running in windows/bin/developer/:
- set nodeexe="%~dp0..\..\..\developer\src\inst\node\dist\node.exe"
- set nodecli="%~dp0..\..\..\developer\src\kmlmc\dist\kmlmi.js"
+if exist "%~dp0..\inst\node\dist\node.exe" (
+ rem If running in developer/src/tike/:
+ set nodeexe="%~dp0..\inst\node\dist\node.exe"
+ set nodecli="%~dp0..\kmc\build\src\kmlmi.js"
+) else if exist "%~dp0..\src\inst\node\dist\node.exe" (
+ rem If running in developer/bin/:
+ set nodeexe="%~dp0..\src\inst\node\dist\node.exe"
+ set nodecli="%~dp0..\src\kmc\build\src\kmlmi.js"
) else (
rem Cannot find node or kmlmi.js relative to execution path
echo Error: node.exe or kmlmi.js not found.
diff --git a/developer/src/tike/kmlmp.cmd b/developer/src/tike/kmlmp.cmd
index e9c28eba57..bf9d4db1be 100644
--- a/developer/src/tike/kmlmp.cmd
+++ b/developer/src/tike/kmlmp.cmd
@@ -1,15 +1,15 @@
@echo off
setlocal
-rem This script is a rough duplicate of /developer/src/node/inst/kmlmp.cmd. It is stored here
+rem This script is based on /developer/src/node/inst/kmlmp.cmd. It is stored here
rem in order to allow TIKE to call out to the compiler while debugging.
-if exist "%~dp0..\..\..\..\developer\src\inst\node\dist\node.exe" (
- rem If running in windows/src/developer/x/:
- set nodeexe="%~dp0..\..\..\..\developer\src\inst\node\dist\node.exe"
- set nodecli="%~dp0..\..\..\..\developer\src\kmlmc\dist\kmlmp.js"
-) else if exist "%~dp0..\..\..\developer\src\inst\node\dist\node.exe" (
- rem If running in windows/bin/developer/:
- set nodeexe="%~dp0..\..\..\developer\src\inst\node\dist\node.exe"
- set nodecli="%~dp0..\..\..\developer\src\kmlmc\dist\kmlmp.js"
+if exist "%~dp0..\inst\node\dist\node.exe" (
+ rem If running in developer/src/tike/:
+ set nodeexe="%~dp0..\inst\node\dist\node.exe"
+ set nodecli="%~dp0..\kmc\build\src\kmlmp.js"
+) else if exist "%~dp0..\src\inst\node\dist\node.exe" (
+ rem If running in developer/bin/:
+ set nodeexe="%~dp0..\src\inst\node\dist\node.exe"
+ set nodecli="%~dp0..\src\kmc\build\src\kmlmp.js"
) else (
rem Cannot find node or kmlmp.js relative to execution path
echo Error: node.exe or kmlmp.js not found.
diff --git a/developer/src/tools/sentry-upload-difs.sh b/developer/src/tools/sentry-upload-difs.sh
index 6341952b08..0e814deddc 100755
--- a/developer/src/tools/sentry-upload-difs.sh
+++ b/developer/src/tools/sentry-upload-difs.sh
@@ -41,4 +41,11 @@ cd "$KEYMAN_ROOT/developer/src"
echo "Uploading symbols for developer/"
sentry-cli upload-dif -p keyman-developer -t breakpad -t pdb . --include-sources
-sentry-cli releases -p keyman-developer files "release-$VERSION_WITH_TAG" upload-sourcemaps ./TIKE/xml ../bin/server ./kmlmc/dist
+sentry-cli releases -p keyman-developer files "release-$VERSION_WITH_TAG" upload-sourcemaps \
+ ./TIKE/xml \
+ ../bin/server \
+ ./kmc/build \
+ ./kmc-model/build \
+ ./kmc-package/build \
+ ./kmc-model-info/build \
+ ./kmc-keyboard/build
diff --git a/docs/npm-packages.md b/docs/npm-packages.md
index 2a3cea707d..221180cfe8 100644
--- a/docs/npm-packages.md
+++ b/docs/npm-packages.md
@@ -8,10 +8,18 @@ Currently, we're using TeamCity for this.
Packages are **never** published from a developer's machine.
-## List of current npm packages
+## List of current published npm packages
-* `@keymanapp/models-types` -- located at `common/models-types`
-* `@keymanapp/lexical-model-compiler` -- located at `developer/src/kmlmc`
+* `@keymanapp/models-types` -- located at `common/models/types`
+* `@keymanapp/kmc` -- located at `developer/src/kmc`
+* `@keymanapp/kmc-keyboard` -- located at `developer/src/kmc-keyboard`
+* `@keymanapp/kmc-model` -- located at `developer/src/kmc-model`
+* `@keymanapp/kmc-model-info` -- located at `developer/src/kmc-model-info`
+* `@keymanapp/kmc-package` -- located at `developer/src/kmc-package`
+
+### Deprecated npm packages
+
+* `@keymanapp/lexical-model-compiler` -- replaced by `@keymanapp/kmc`
## For CI developers
@@ -23,56 +31,68 @@ server.
This is typically done with:
```bash
-./build.sh -test
+./build.sh configure build test
```
-Once the build succeeds and the tests pass, the version is set in
+Once the build succeeds and the tests pass, you can publish! Use the following
+script for this (**only on the CI server**!); during this, the version is set in
`package.json`:
```bash
-./build.sh -version 12.0.${BUILD_NUMBER} -tier ${tier}
+./build.sh publish
```
-Now you can publish! Use the following script for this (again, **only on the CI server**!)
+It is then uploaded to the npm package directory. **Ensure that the compiled
+sources are included in the tarball**. For example:
```bash
-./build.sh -publish-to-npm -tier ${tier}
-```
-
-It is then uploaded to the npm package directory. **Ensure that the
-compiled sources are included in the tarball**. For example,
-
-```bash
-$ npm publish
-npm notice 📦 @keymanapp/lexical-model-compiler@0.0.0
+$ ./build.sh publish
+npm notice
+npm notice 📦 @keymanapp/kmc@16.0.61-alpha-local
npm notice === Tarball Contents ===
-npm notice 12.4kB dist/lexical-model-compiler/build-trie.js
-npm notice 1.2kB dist/kmlmc.js
-npm notice 3.0kB dist/kmlmi.js
-npm notice 1.4kB dist/kmlmp.js
-npm notice 5.0kB dist/package-compiler/kmp-compiler.js
-npm notice 55B dist/package-compiler/kmp-json-file.js
-npm notice 552B dist/package-compiler/kps-file.js
-npm notice 4.6kB dist/lexical-model-compiler/lexical-model-compiler.js
-npm notice 315B dist/lexical-model-compiler/lexical-model.js
-npm notice 158B dist/util/min-keyman-version.js
-npm notice 4.5kB dist/model-info-compiler/model-info-compiler.js
-npm notice 57B dist/lexical-model-compiler/model-info-file.js
-npm notice 341B dist/lexical-model-compiler/stub.js
-npm notice 115B dist/util/sysexits.js
-npm notice 2.1kB dist/util/util.js
-npm notice 1.4kB package.json
-npm notice 1.0kB README.md
+npm notice 841B Makefile
+npm notice 2.8kB README.md
+npm notice 2.5kB build.sh
+npm notice 116B build/src/kmc.d.ts
+npm notice 114B build/src/kmc.d.ts.map
+npm notice 2.8kB build/src/kmc.js
+npm notice 2.6kB build/src/kmc.js.map
+npm notice 120B build/src/kmlmc.d.ts
+npm notice 118B build/src/kmlmc.d.ts.map
+npm notice 1.4kB build/src/kmlmc.js
+npm notice 1.4kB build/src/kmlmc.js.map
+npm notice 131B build/src/kmlmi.d.ts
+npm notice 118B build/src/kmlmi.d.ts.map
+npm notice 3.1kB build/src/kmlmi.js
+npm notice 2.7kB build/src/kmlmi.js.map
+npm notice 128B build/src/kmlmp.d.ts
+npm notice 118B build/src/kmlmp.d.ts.map
+npm notice 1.6kB build/src/kmlmp.js
+npm notice 1.5kB build/src/kmlmp.js.map
+npm notice 285B build/src/util/sysexits.d.ts
+npm notice 186B build/src/util/sysexits.d.ts.map
+npm notice 51B build/src/util/sysexits.js
+npm notice 128B build/src/util/sysexits.js.map
+npm notice 29.8kB build/tsconfig.tsbuildinfo
+npm notice 5.4kB bundle.inc.sh
+npm notice 1.7kB package.json
+npm notice 2.8kB src/kmc.ts
+npm notice 1.4kB src/kmlmc.ts
+npm notice 3.2kB src/kmlmi.ts
+npm notice 1.6kB src/kmlmp.ts
+npm notice 237B src/util/sysexits.ts
+npm notice 740B tsconfig.json
+npm notice 449B tsconfig.kmc-base.json
```
For every release of **Keyman Developer**, the CI publishes a release of
-`@keymanapp/lexical-model-compiler`. The version number is locked with
-the particular version of Keyman Developer.
+`@keymanapp/kmc`. The version number is locked with the particular version of
+Keyman Developer.
### `set_npm_version`
-This helper function sets the version in the `package.json` for the
-given package, according to the VERSION_WITH_TAG variable.
+This helper function sets the version in the `package.json` for the given
+package, according to the VERSION_WITH_TAG variable.
```bash
. $KEYMAN_ROOT/resources/shellHelperFunctions.sh
diff --git a/package-lock.json b/package-lock.json
index 16944fd691..17a5cf6a9b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,10 @@
"resources/gosh",
"resources/build/version",
"core/include/ldml",
- "developer/src/kmlmc",
+ "developer/src/kmc-keyboard",
+ "developer/src/kmc-model",
+ "developer/src/kmc-model-info",
+ "developer/src/kmc-package",
"developer/src/kmc",
"developer/src/server",
"common/models/*",
@@ -19,7 +22,8 @@
"web"
],
"dependencies": {
- "@keymanapp/hextobin": "file:common/tools/hextobin"
+ "@keymanapp/hextobin": "file:common/tools/hextobin",
+ "@keymanapp/keyman-version": "file:common/web/keyman-version"
},
"devDependencies": {
"chai": "^4.3.4",
@@ -234,7 +238,7 @@
"eventemitter3": "^4.0.0"
},
"devDependencies": {
- "@keymanapp/lexical-model-compiler": "*",
+ "@keymanapp/kmc": "*",
"@keymanapp/resources-gosh": "*",
"@types/node": "^11.9.4",
"chai": "^4.3.4",
@@ -457,46 +461,74 @@
}
},
"developer/src/kmc": {
- "name": "@keymanapp/ldml-keyboard-compiler",
+ "name": "@keymanapp/kmc",
"license": "MIT",
"dependencies": {
- "ajv": "^8.11.0",
- "commander": "^3.0.0",
- "crc-32": "^1.2.2",
- "restructure": "^3.0.0",
- "semver": "^7.3.7",
- "typescript": "^4.5.4",
- "xml2js": "^0.4.19"
+ "@keymanapp/keyman-version": "*",
+ "@keymanapp/kmc-keyboard": "*",
+ "@keymanapp/kmc-model": "*",
+ "@keymanapp/kmc-model-info": "*",
+ "@keymanapp/kmc-package": "*",
+ "@keymanapp/models-types": "*",
+ "commander": "^3.0.0"
},
"bin": {
- "kmc": "build/src/kmc.js"
+ "kmc": "build/src/kmc.js",
+ "kmlmc": "build/src/kmlmc.js",
+ "kmlmi": "build/src/kmlmi.js",
+ "kmlmp": "build/src/kmlmp.js"
},
"devDependencies": {
- "@keymanapp/keyman-version": "*",
"@types/chai": "^4.1.7",
"@types/mocha": "^5.2.7",
"@types/node": "^10.14.6",
"@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
+ "chai": "^4.3.4",
+ "chalk": "^2.4.2",
+ "esbuild": "^0.15.8",
+ "mocha": "^8.4.0",
+ "ts-node": "^9.1.1",
+ "typescript": "^4.5.4"
+ }
+ },
+ "developer/src/kmc-keyboard": {
+ "name": "@keymanapp/kmc-keyboard",
+ "license": "MIT",
+ "dependencies": {
+ "@keymanapp/keyman-version": "*",
+ "ajv": "^8.11.0",
+ "crc-32": "^1.2.2",
+ "restructure": "^3.0.0",
+ "semver": "^7.3.7",
+ "xml2js": "^0.4.19"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.1.7",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.14.6",
+ "@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
"chai": "^4.3.4",
"chalk": "^2.4.2",
"mocha": "^8.4.0",
- "nyc": "^15.1.0",
- "ts-node": "^9.1.1"
+ "ts-node": "^9.1.1",
+ "typescript": "^4.5.4"
}
},
- "developer/src/kmc/node_modules/@types/mocha": {
+ "developer/src/kmc-keyboard/node_modules/@types/mocha": {
"version": "5.2.7",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
"integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
"dev": true
},
- "developer/src/kmc/node_modules/@types/node": {
+ "developer/src/kmc-keyboard/node_modules/@types/node": {
"version": "10.17.60",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
"dev": true
},
- "developer/src/kmc/node_modules/ajv": {
+ "developer/src/kmc-keyboard/node_modules/ajv": {
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
@@ -511,6 +543,660 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "developer/src/kmc-keyboard/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-keyboard/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-keyboard/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "developer/src/kmc-keyboard/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "developer/src/kmc-keyboard/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-keyboard/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ },
+ "developer/src/kmc-keyboard/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-model": {
+ "name": "@keymanapp/kmc-model",
+ "license": "MIT",
+ "dependencies": {
+ "@keymanapp/keyman-version": "*",
+ "@keymanapp/models-types": "*",
+ "typescript": "^4.8.3"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.1.7",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.14.6",
+ "@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
+ "chai": "^4.3.4",
+ "chalk": "^2.4.2",
+ "esbuild": "^0.15.7",
+ "mocha": "^10.0.0",
+ "ts-node": "^9.1.1"
+ }
+ },
+ "developer/src/kmc-model-info": {
+ "name": "@keymanapp/kmc-model-info",
+ "license": "MIT",
+ "dependencies": {
+ "@keymanapp/keyman-version": "*",
+ "@keymanapp/kmc-package": "*",
+ "@keymanapp/models-types": "*"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.1.7",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.14.6",
+ "@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
+ "chai": "^4.3.4",
+ "chalk": "^2.4.2",
+ "mocha": "^8.4.0",
+ "ts-node": "^9.1.1",
+ "typescript": "^4.5.4"
+ }
+ },
+ "developer/src/kmc-model-info/node_modules/@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ },
+ "developer/src/kmc-model-info/node_modules/@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
+ "dev": true
+ },
+ "developer/src/kmc-model-info/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-model-info/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-model-info/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "developer/src/kmc-model-info/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "developer/src/kmc-model-info/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-model-info/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-model/node_modules/@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ },
+ "developer/src/kmc-model/node_modules/@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
+ "dev": true
+ },
+ "developer/src/kmc-model/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-model/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "developer/src/kmc-model/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-model/node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "developer/src/kmc-model/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "developer/src/kmc-model/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "developer/src/kmc-model/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "developer/src/kmc-model/node_modules/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "developer/src/kmc-model/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-model/node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "developer/src/kmc-model/node_modules/log-symbols/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "developer/src/kmc-model/node_modules/log-symbols/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "developer/src/kmc-model/node_modules/log-symbols/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "developer/src/kmc-model/node_modules/log-symbols/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "developer/src/kmc-model/node_modules/log-symbols/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "developer/src/kmc-model/node_modules/log-symbols/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "developer/src/kmc-model/node_modules/mocha": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
+ "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
+ "dev": true,
+ "dependencies": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha.js"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mochajs"
+ }
+ },
+ "developer/src/kmc-model/node_modules/mocha/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "developer/src/kmc-model/node_modules/mocha/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "developer/src/kmc-model/node_modules/mocha/node_modules/minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "developer/src/kmc-model/node_modules/mocha/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "developer/src/kmc-model/node_modules/mocha/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"
+ }
+ },
+ "developer/src/kmc-model/node_modules/nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "developer/src/kmc-model/node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "developer/src/kmc-model/node_modules/serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "developer/src/kmc-model/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-model/node_modules/workerpool": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+ "dev": true
+ },
+ "developer/src/kmc-package": {
+ "name": "@keymanapp/kmc-package",
+ "license": "MIT",
+ "dependencies": {
+ "jszip": "^3.7.0"
+ },
+ "devDependencies": {
+ "@types/chai": "^4.1.7",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.14.6",
+ "c8": "^7.12.0",
+ "chai": "^4.3.4",
+ "chalk": "^2.4.2",
+ "mocha": "^8.4.0",
+ "ts-node": "^9.1.1",
+ "typescript": "^4.5.4"
+ }
+ },
+ "developer/src/kmc-package/node_modules/@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ },
+ "developer/src/kmc-package/node_modules/@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
+ "dev": true
+ },
+ "developer/src/kmc-package/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-package/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-package/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "developer/src/kmc-package/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "developer/src/kmc-package/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc-package/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "developer/src/kmc/node_modules/@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ },
+ "developer/src/kmc/node_modules/@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
+ "dev": true
+ },
"developer/src/kmc/node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@@ -561,11 +1247,6 @@
"node": ">=4"
}
},
- "developer/src/kmc/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
- },
"developer/src/kmc/node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -580,6 +1261,7 @@
},
"developer/src/kmlmc": {
"name": "@keymanapp/lexical-model-compiler",
+ "extraneous": true,
"license": "MIT",
"dependencies": {
"@keymanapp/models-types": "*",
@@ -610,80 +1292,6 @@
"node": ">=16.0.0"
}
},
- "developer/src/kmlmc/node_modules/@types/mocha": {
- "version": "5.2.7",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
- "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
- "dev": true
- },
- "developer/src/kmlmc/node_modules/@types/node": {
- "version": "10.17.60",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
- "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
- "dev": true
- },
- "developer/src/kmlmc/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "developer/src/kmlmc/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "developer/src/kmlmc/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "developer/src/kmlmc/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "developer/src/kmlmc/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "developer/src/kmlmc/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"developer/src/server": {
"name": "@keymanapp/developer-server",
"license": "MIT",
@@ -1035,401 +1643,12 @@
"tunnel": "^0.0.6"
}
},
- "node_modules/@ampproject/remapping": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
- "dev": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.1.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
- "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz",
- "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz",
- "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==",
- "dev": true,
- "dependencies": {
- "@ampproject/remapping": "^2.1.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.19.0",
- "@babel/helper-compilation-targets": "^7.19.0",
- "@babel/helper-module-transforms": "^7.19.0",
- "@babel/helpers": "^7.19.0",
- "@babel/parser": "^7.19.0",
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.1",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz",
- "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.19.0",
- "@jridgewell/gen-mapping": "^0.3.2",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz",
- "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.19.0",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.20.2",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
- "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
- "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.18.10",
- "@babel/types": "^7.19.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz",
- "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.18.6",
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-simple-access": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
- "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
- "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
- "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
- "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
- "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
- "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==",
- "dev": true,
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
- "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.18.10",
- "@babel/types": "^7.18.10"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz",
- "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.19.0",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.19.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.19.0",
- "@babel/types": "^7.19.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz",
- "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-string-parser": "^7.18.10",
- "@babel/helper-validator-identifier": "^7.18.6",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -1439,94 +1658,39 @@
"node": ">=0.1.90"
}
},
- "node_modules/@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.8.tgz",
+ "integrity": "sha512-CyEWALmn+no/lbgbAJsbuuhT8s2J19EJGHkeyAwjbFJMrj80KJ9zuYsoAvidPTU7BgBf87r/sgae8Tw0dbOc4Q==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
"dependencies": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
+ "esbuild-wasm": "0.15.8"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
}
},
- "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.8.tgz",
+ "integrity": "sha512-pE5RQsOTSERCtfZdfCT25wzo7dfhOSlhAXcsZmuvRYhendOv7djcdvtINdnDp2DAjP17WXlBB4nBO6sHLczmsg==",
+ "cpu": [
+ "loong64"
+ ],
"dev": true,
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
+ "node": ">=12"
}
},
"node_modules/@istanbuljs/schema": {
@@ -1538,19 +1702,6 @@
"node": ">=8"
}
},
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@jridgewell/resolve-uri": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz",
@@ -1560,15 +1711,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.13",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz",
@@ -1609,18 +1751,30 @@
"resolved": "common/web/keyman-version",
"link": true
},
- "node_modules/@keymanapp/ldml-keyboard-compiler": {
+ "node_modules/@keymanapp/kmc": {
"resolved": "developer/src/kmc",
"link": true
},
+ "node_modules/@keymanapp/kmc-keyboard": {
+ "resolved": "developer/src/kmc-keyboard",
+ "link": true
+ },
+ "node_modules/@keymanapp/kmc-model": {
+ "resolved": "developer/src/kmc-model",
+ "link": true
+ },
+ "node_modules/@keymanapp/kmc-model-info": {
+ "resolved": "developer/src/kmc-model-info",
+ "link": true
+ },
+ "node_modules/@keymanapp/kmc-package": {
+ "resolved": "developer/src/kmc-package",
+ "link": true
+ },
"node_modules/@keymanapp/ldml-keyboard-constants": {
"resolved": "core/include/ldml",
"link": true
},
- "node_modules/@keymanapp/lexical-model-compiler": {
- "resolved": "developer/src/kmlmc",
- "link": true
- },
"node_modules/@keymanapp/lexical-model-layer": {
"resolved": "common/predictive-text",
"link": true
@@ -2292,6 +2446,12 @@
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
"integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ=="
},
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
"node_modules/@types/json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz",
@@ -2460,19 +2620,6 @@
"node": ">= 6.0.0"
}
},
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -2539,30 +2686,12 @@
"resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
"integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
},
- "node_modules/append-transform": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
- "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
- "dev": true,
- "dependencies": {
- "default-require-extensions": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/aproba": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"devOptional": true
},
- "node_modules/archy": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
- "dev": true
- },
"node_modules/are-we-there-yet": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
@@ -2757,34 +2886,6 @@
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
- "node_modules/browserslist": {
- "version": "4.21.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
- "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- ],
- "dependencies": {
- "caniuse-lite": "^1.0.30001370",
- "electron-to-chromium": "^1.4.202",
- "node-releases": "^2.0.6",
- "update-browserslist-db": "^1.0.5"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
"node_modules/browserstack": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz",
@@ -2921,6 +3022,41 @@
"node": ">= 0.8"
}
},
+ "node_modules/c8": {
+ "version": "7.12.0",
+ "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz",
+ "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==",
+ "dev": true,
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@istanbuljs/schema": "^0.1.3",
+ "find-up": "^5.0.0",
+ "foreground-child": "^2.0.0",
+ "istanbul-lib-coverage": "^3.2.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-reports": "^3.1.4",
+ "rimraf": "^3.0.2",
+ "test-exclude": "^6.0.0",
+ "v8-to-istanbul": "^9.0.0",
+ "yargs": "^16.2.0",
+ "yargs-parser": "^20.2.9"
+ },
+ "bin": {
+ "c8": "bin/c8.js"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/c8/node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/cacheable-lookup": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
@@ -2946,21 +3082,6 @@
"node": ">=8"
}
},
- "node_modules/caching-transform": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
- "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
- "dev": true,
- "dependencies": {
- "hasha": "^5.0.0",
- "make-dir": "^3.0.0",
- "package-hash": "^4.0.0",
- "write-file-atomic": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
@@ -2969,22 +3090,6 @@
"node": ">=6"
}
},
- "node_modules/caniuse-lite": {
- "version": "1.0.30001390",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001390.tgz",
- "integrity": "sha512-sS4CaUM+/+vqQUlCvCJ2WtDlV81aWtHhqeEVkLokVJJa3ViN4zDxAGfq9R8i1m90uGHxo99cy10Od+lvn3hf0g==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- }
- ]
- },
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
@@ -3062,15 +3167,6 @@
"node": ">=10"
}
},
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -3185,12 +3281,6 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
"integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow=="
},
- "node_modules/commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
- "dev": true
- },
"node_modules/component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
@@ -3480,18 +3570,6 @@
"node": ">=0.12"
}
},
- "node_modules/default-require-extensions": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
- "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
- "dev": true,
- "dependencies": {
- "strip-bom": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/defer-to-connect": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
@@ -3640,12 +3718,6 @@
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
- "node_modules/electron-to-chromium": {
- "version": "1.4.242",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.242.tgz",
- "integrity": "sha512-nPdgMWtjjWGCtreW/2adkrB2jyHjClo9PtVhR6rW+oxa4E4Wom642Tn+5LslHP3XPL5MCpkn5/UEY60EXylNeQ==",
- "dev": true
- },
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -3745,12 +3817,6 @@
"node": ">=6"
}
},
- "node_modules/es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
- "dev": true
- },
"node_modules/es6-promise": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
@@ -3771,6 +3837,379 @@
"resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz",
"integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA=="
},
+ "node_modules/esbuild": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.8.tgz",
+ "integrity": "sha512-Remsk2dmr1Ia65sU+QasE6svJbsHe62lzR+CnjpUvbZ+uSYo1SitiOWPRfZQkCu82YWZBBKXiD/j0i//XWMZ+Q==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.15.8",
+ "@esbuild/linux-loong64": "0.15.8",
+ "esbuild-android-64": "0.15.8",
+ "esbuild-android-arm64": "0.15.8",
+ "esbuild-darwin-64": "0.15.8",
+ "esbuild-darwin-arm64": "0.15.8",
+ "esbuild-freebsd-64": "0.15.8",
+ "esbuild-freebsd-arm64": "0.15.8",
+ "esbuild-linux-32": "0.15.8",
+ "esbuild-linux-64": "0.15.8",
+ "esbuild-linux-arm": "0.15.8",
+ "esbuild-linux-arm64": "0.15.8",
+ "esbuild-linux-mips64le": "0.15.8",
+ "esbuild-linux-ppc64le": "0.15.8",
+ "esbuild-linux-riscv64": "0.15.8",
+ "esbuild-linux-s390x": "0.15.8",
+ "esbuild-netbsd-64": "0.15.8",
+ "esbuild-openbsd-64": "0.15.8",
+ "esbuild-sunos-64": "0.15.8",
+ "esbuild-windows-32": "0.15.8",
+ "esbuild-windows-64": "0.15.8",
+ "esbuild-windows-arm64": "0.15.8"
+ }
+ },
+ "node_modules/esbuild-android-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.8.tgz",
+ "integrity": "sha512-bVh8FIKOolF7/d4AMzt7xHlL0Ljr+mYKSHI39TJWDkybVWHdn6+4ODL3xZGHOxPpdRpitemXA1WwMKYBsw8dGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "dependencies": {
+ "esbuild-wasm": "0.15.8"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-android-arm64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.8.tgz",
+ "integrity": "sha512-ReAMDAHuo0H1h9LxRabI6gwYPn8k6WiUeyxuMvx17yTrJO+SCnIfNc/TSPFvDwtK9MiyiKG/2dBYHouT/M0BXQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.8.tgz",
+ "integrity": "sha512-KaKcGfJ+yto7Fo5gAj3xwxHMd1fBIKatpCHK8znTJLVv+9+NN2/tIPBqA4w5rBwjX0UqXDeIE2v1xJP+nGEXgA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-arm64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.8.tgz",
+ "integrity": "sha512-8tjEaBgAKnXCkP7bhEJmEqdG9HEV6oLkF36BrMzpfW2rgaw0c48Zrxe+9RlfeGvs6gDF4w+agXyTjikzsS3izw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.8.tgz",
+ "integrity": "sha512-jaxcsGHYzn2L0/lffON2WfH4Nc+d/EwozVTP5K2v016zxMb5UQMhLoJzvLgBqHT1SG0B/mO+a+THnJCMVg15zw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-arm64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.8.tgz",
+ "integrity": "sha512-2xp2UlljMvX8HExtcg7VHaeQk8OBU0CSl1j18B5CcZmSDkLF9p3utuMXIopG3a08fr9Hv+Dz6+seSXUow/G51w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-32": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.8.tgz",
+ "integrity": "sha512-9u1E54BRz1FQMl86iaHK146+4ID2KYNxL3trLZT4QLLx3M7Q9n4lGG3lrzqUatGR2cKy8c33b0iaCzsItZWkFg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.8.tgz",
+ "integrity": "sha512-4HxrsN9eUzJXdVGMTYA5Xler82FuZUu21bXKN42zcLHHNKCAMPUzD62I+GwDhsdgUBAUj0tRXDdsQHgaP6v0HA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.8.tgz",
+ "integrity": "sha512-7DVBU9SFjX4+vBwt8tHsUCbE6Vvl6y6FQWHAgyw1lybC5gULqn/WnjHYHN2/LJaZRsDBvxWT4msEgwLGq1Wd3Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.8.tgz",
+ "integrity": "sha512-1OCm7Aq0tEJT70PbxmHSGYDLYP8DKH8r4Nk7/XbVzWaduo9beCjGBB+tGZIHK6DdTQ3h00/4Tb/70YMH/bOtKg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-mips64le": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.8.tgz",
+ "integrity": "sha512-yeFoNPVFPEzZvFYBfUQNG2TjGRaCyV1E27OcOg4LOtnGrxb2wA+mkW3luckyv1CEyd00mpAg7UdHx8nlx3ghgA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-ppc64le": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.8.tgz",
+ "integrity": "sha512-CEyMMUUNabXibw8OSNmBXhOIGhnjNVl5Lpseiuf00iKN0V47oqDrbo4dsHz1wH62m49AR8iG8wpDlTqfYgKbtg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-riscv64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.8.tgz",
+ "integrity": "sha512-OCGSOaspMUjexSCU8ZiA0UnV/NiRU+s2vIfEcAQWQ6u32R+2luyfh/4ZaY6jFbylJE07Esc/yRvb9Q5fXuClXA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-s390x": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.8.tgz",
+ "integrity": "sha512-RHdpdfxRTSrZXZJlFSLazFU4YwXLB5Rgf6Zr5rffqSsO4y9JybgtKO38bFwxZNlDXliYISXN/YROKrG9s7mZQA==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-netbsd-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.8.tgz",
+ "integrity": "sha512-VolFFRatBH09T5QMWhiohAWCOien1R1Uz9K0BRVVTBgBaVBt7eArsXTKxVhUgRf2vwu2c2SXkuP0r7HLG0eozw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-openbsd-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.8.tgz",
+ "integrity": "sha512-HTAPlg+n4kUeE/isQxlCfsOz0xJGNoT5LJ9oYZWFKABfVf4Ycu7Zlf5ITgOnrdheTkz8JeL/gISIOCFAoOXrSA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-sunos-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.8.tgz",
+ "integrity": "sha512-qMP/jR/FzcIOwKj+W+Lb+8Cfr8GZHbHUJxAPi7DUhNZMQ/6y7sOgRzlOSpRrbbUntrRZh0MqOyDhJ3Gpo6L1QA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-wasm": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.8.tgz",
+ "integrity": "sha512-Y7uCl5RNO4URjlemjdx++ukVHEMt5s5AfMWYUnMiK4Sry+pPCvQIctzXq6r6FKCyGKjX6/NGMCqR2OX6aLxj0w==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-32": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.8.tgz",
+ "integrity": "sha512-RKR1QHh4iWzjUhkP8Yqi75PPz/KS+b8zw3wUrzw6oAkj+iU5Qtyj61ZDaSG3Qf2vc6hTIUiPqVTqBH0NpXFNwg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.8.tgz",
+ "integrity": "sha512-ag9ptYrsizgsR+PQE8QKeMqnosLvAMonQREpLw4evA4FFgOBMLEat/dY/9txbpozTw9eEOYyD3a4cE9yTu20FA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-arm64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.8.tgz",
+ "integrity": "sha512-dbpAb0VyPaUs9mgw65KRfQ9rqiWCHpNzrJusoPu+LpEoswosjt/tFxN7cd2l68AT4qWdBkzAjDLRon7uqMeWcg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -3794,19 +4233,6 @@
"node": ">=0.8.0"
}
},
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -4093,23 +4519,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
- "node_modules/find-cache-dir": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
- "dev": true,
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
- }
- },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -4219,26 +4628,6 @@
"integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
"dev": true
},
- "node_modules/fromentries": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz",
- "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/fs-access": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
@@ -4313,15 +4702,6 @@
"wide-align": "^1.1.0"
}
},
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -4339,15 +4719,6 @@
"node": "*"
}
},
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true,
- "engines": {
- "node": ">=8.0.0"
- }
- },
"node_modules/get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
@@ -4403,15 +4774,6 @@
"node": ">= 6"
}
},
- "node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/google-closure-compiler-java": {
"version": "20200224.0.0",
"resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20200224.0.0.tgz",
@@ -4494,34 +4856,6 @@
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"devOptional": true
},
- "node_modules/hasha": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
- "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==",
- "dev": true,
- "dependencies": {
- "is-stream": "^2.0.0",
- "type-fest": "^0.8.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/hasha/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -4641,26 +4975,7 @@
"node_modules/immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
- "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
- "dev": true
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
"node_modules/inflight": {
"version": "1.0.6",
@@ -4779,7 +5094,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "devOptional": true
+ "optional": true
},
"node_modules/is-unicode-supported": {
"version": "0.1.0",
@@ -4793,15 +5108,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
@@ -4850,59 +5156,6 @@
"node": ">=8"
}
},
- "node_modules/istanbul-lib-hook": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
- "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
- "dev": true,
- "dependencies": {
- "append-transform": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/istanbul-lib-processinfo": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz",
- "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==",
- "dev": true,
- "dependencies": {
- "archy": "^1.0.0",
- "cross-spawn": "^7.0.3",
- "istanbul-lib-coverage": "^3.2.0",
- "p-map": "^3.0.0",
- "rimraf": "^3.0.0",
- "uuid": "^8.3.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/istanbul-lib-report": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
@@ -4917,20 +5170,6 @@
"node": ">=8"
}
},
- "node_modules/istanbul-lib-source-maps": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/istanbul-reports": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
@@ -4944,12 +5183,6 @@
"node": ">=8"
}
},
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
"node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -4968,18 +5201,6 @@
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"optional": true
},
- "node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
@@ -5003,18 +5224,6 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"optional": true
},
- "node_modules/json5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -5046,7 +5255,6 @@
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.9.1.tgz",
"integrity": "sha512-H9A60xPqJ1CuC4Ka6qxzXZeU8aNmgOeP5IFqwJbQQwtu2EUYxota3LdsiZWplF7Wgd9tkAd0mdu36nceSaPuYw==",
- "dev": true,
"dependencies": {
"lie": "~3.3.0",
"pako": "~1.0.2",
@@ -5374,7 +5582,6 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
- "dev": true,
"dependencies": {
"immediate": "~3.0.5"
}
@@ -5414,12 +5621,6 @@
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
},
- "node_modules/lodash.flattendeep": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
- "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==",
- "dev": true
- },
"node_modules/lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
@@ -6156,24 +6357,6 @@
"node": ">= 10.12.0"
}
},
- "node_modules/node-preload": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
- "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
- "dev": true,
- "dependencies": {
- "process-on-spawn": "^1.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
- "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
- "dev": true
- },
"node_modules/node-windows-trayicon": {
"name": "windows-trayicon",
"version": "3.0.0",
@@ -6308,209 +6491,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/nyc": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
- "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
- "dev": true,
- "dependencies": {
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "caching-transform": "^4.0.0",
- "convert-source-map": "^1.7.0",
- "decamelize": "^1.2.0",
- "find-cache-dir": "^3.2.0",
- "find-up": "^4.1.0",
- "foreground-child": "^2.0.0",
- "get-package-type": "^0.1.0",
- "glob": "^7.1.6",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-hook": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.0",
- "istanbul-lib-processinfo": "^2.0.2",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "make-dir": "^3.0.0",
- "node-preload": "^0.2.1",
- "p-map": "^3.0.0",
- "process-on-spawn": "^1.0.0",
- "resolve-from": "^5.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^2.0.0",
- "test-exclude": "^6.0.0",
- "yargs": "^15.0.2"
- },
- "bin": {
- "nyc": "bin/nyc.js"
- },
- "engines": {
- "node": ">=8.9"
- }
- },
- "node_modules/nyc/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/nyc/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/nyc/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "node_modules/nyc/node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nyc/node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@@ -6626,18 +6606,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -6646,26 +6614,10 @@
"node": ">=6"
}
},
- "node_modules/package-hash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
- "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.15",
- "hasha": "^5.0.0",
- "lodash.flattendeep": "^4.4.0",
- "release-zalgo": "^1.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"node_modules/parseurl": {
"version": "1.3.3",
@@ -6735,12 +6687,6 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"optional": true
},
- "node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
"node_modules/picomatch": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
@@ -6753,87 +6699,11 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
- "node_modules/process-on-spawn": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
- "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
- "dev": true,
- "dependencies": {
- "fromentries": "^1.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -7002,18 +6872,6 @@
"node": ">=8.10.0"
}
},
- "node_modules/release-zalgo": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
- "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==",
- "dev": true,
- "dependencies": {
- "es6-error": "^4.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -7110,15 +6968,6 @@
"resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
"integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
},
- "node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/responselike": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
@@ -7280,7 +7129,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
"integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -7434,23 +7282,6 @@
"source-map": "^0.6.0"
}
},
- "node_modules/spawn-wrap": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
- "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
- "dev": true,
- "dependencies": {
- "foreground-child": "^2.0.0",
- "is-windows": "^1.0.2",
- "make-dir": "^3.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/split": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
@@ -7463,12 +7294,6 @@
"node": "*"
}
},
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
- },
"node_modules/sshpk": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
@@ -7608,15 +7433,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
@@ -7743,15 +7559,6 @@
"node": ">=8.17.0"
}
},
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -7908,15 +7715,6 @@
"node": ">=4"
}
},
- "node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -7934,19 +7732,10 @@
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
"node_modules/typescript": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
- "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
+ "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -8011,32 +7800,6 @@
"node": ">=8"
}
},
- "node_modules/update-browserslist-db": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz",
- "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- ],
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "browserslist-lint": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -8072,6 +7835,30 @@
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true
},
+ "node_modules/v8-to-istanbul": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz",
+ "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^1.6.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
+ "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -8238,18 +8025,6 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
- "node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dev": true,
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
"node_modules/ws": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
@@ -8764,417 +8539,47 @@
"tunnel": "^0.0.6"
}
},
- "@ampproject/remapping": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
- "dev": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.1.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@babel/code-frame": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
- "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.18.6"
- }
- },
- "@babel/compat-data": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz",
- "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==",
+ "@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
- "@babel/core": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz",
- "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==",
- "dev": true,
- "requires": {
- "@ampproject/remapping": "^2.1.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.19.0",
- "@babel/helper-compilation-targets": "^7.19.0",
- "@babel/helper-module-transforms": "^7.19.0",
- "@babel/helpers": "^7.19.0",
- "@babel/parser": "^7.19.0",
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.1",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "@babel/generator": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz",
- "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.19.0",
- "@jridgewell/gen-mapping": "^0.3.2",
- "jsesc": "^2.5.1"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- }
- }
- },
- "@babel/helper-compilation-targets": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz",
- "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.19.0",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.20.2",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "@babel/helper-environment-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
- "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
- "dev": true
- },
- "@babel/helper-function-name": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
- "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.18.10",
- "@babel/types": "^7.19.0"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz",
- "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.18.6",
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
- "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-string-parser": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
- "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
- "dev": true
- },
- "@babel/helper-validator-identifier": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
- "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
- "dev": true
- },
- "@babel/helper-validator-option": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
- "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
- "dev": true
- },
- "@babel/helpers": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
- "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0"
- }
- },
- "@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/parser": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz",
- "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==",
- "dev": true
- },
- "@babel/template": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
- "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.18.10",
- "@babel/types": "^7.18.10"
- }
- },
- "@babel/traverse": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz",
- "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.19.0",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.19.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.19.0",
- "@babel/types": "^7.19.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- }
- },
- "@babel/types": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz",
- "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==",
- "dev": true,
- "requires": {
- "@babel/helper-string-parser": "^7.18.10",
- "@babel/helper-validator-identifier": "^7.18.6",
- "to-fast-properties": "^2.0.0"
- }
- },
"@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
"integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
"dev": true
},
- "@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "@esbuild/android-arm": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.8.tgz",
+ "integrity": "sha512-CyEWALmn+no/lbgbAJsbuuhT8s2J19EJGHkeyAwjbFJMrj80KJ9zuYsoAvidPTU7BgBf87r/sgae8Tw0dbOc4Q==",
"dev": true,
+ "optional": true,
"requires": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- }
+ "esbuild-wasm": "0.15.8"
}
},
+ "@esbuild/linux-loong64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.8.tgz",
+ "integrity": "sha512-pE5RQsOTSERCtfZdfCT25wzo7dfhOSlhAXcsZmuvRYhendOv7djcdvtINdnDp2DAjP17WXlBB4nBO6sHLczmsg==",
+ "dev": true,
+ "optional": true
+ },
"@istanbuljs/schema": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true
},
- "@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
"@jridgewell/resolve-uri": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz",
"integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==",
"dev": true
},
- "@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true
- },
"@jridgewell/sourcemap-codec": {
"version": "1.4.13",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz",
@@ -9579,7 +8984,7 @@
"requires": {
"@keymanapp/keyboard-processor": "*",
"@keymanapp/keyman-version": "*",
- "@keymanapp/lexical-model-compiler": "*",
+ "@keymanapp/kmc": "*",
"@keymanapp/lexical-model-layer": "*",
"@keymanapp/models-types": "*",
"@keymanapp/resources-gosh": "*",
@@ -9623,8 +9028,95 @@
}
}
},
- "@keymanapp/ldml-keyboard-compiler": {
+ "@keymanapp/kmc": {
"version": "file:developer/src/kmc",
+ "requires": {
+ "@keymanapp/keyman-version": "*",
+ "@keymanapp/kmc-keyboard": "*",
+ "@keymanapp/kmc-model": "*",
+ "@keymanapp/kmc-model-info": "*",
+ "@keymanapp/kmc-package": "*",
+ "@keymanapp/models-types": "*",
+ "@types/chai": "^4.1.7",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.14.6",
+ "@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
+ "chai": "^4.3.4",
+ "chalk": "^2.4.2",
+ "commander": "^3.0.0",
+ "esbuild": "*",
+ "mocha": "^8.4.0",
+ "ts-node": "^9.1.1",
+ "typescript": "^4.5.4"
+ },
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@keymanapp/kmc-keyboard": {
+ "version": "file:developer/src/kmc-keyboard",
"requires": {
"@keymanapp/keyman-version": "*",
"@types/chai": "^4.1.7",
@@ -9632,12 +9124,11 @@
"@types/node": "^10.14.6",
"@types/xml2js": "^0.4.5",
"ajv": "^8.11.0",
+ "c8": "^7.12.0",
"chai": "^4.3.4",
"chalk": "^2.4.2",
- "commander": "^3.0.0",
"crc-32": "^1.2.2",
"mocha": "^8.4.0",
- "nyc": "*",
"restructure": "^3.0.0",
"semver": "^7.3.7",
"ts-node": "^9.1.1",
@@ -9725,28 +9216,311 @@
}
}
},
- "@keymanapp/ldml-keyboard-constants": {
- "version": "file:core/include/ldml"
- },
- "@keymanapp/lexical-model-compiler": {
- "version": "file:developer/src/kmlmc",
+ "@keymanapp/kmc-model": {
+ "version": "file:developer/src/kmc-model",
"requires": {
"@keymanapp/keyman-version": "*",
- "@keymanapp/models-templates": "*",
"@keymanapp/models-types": "*",
- "@keymanapp/models-wordbreakers": "*",
"@types/chai": "^4.1.7",
"@types/mocha": "^5.2.7",
"@types/node": "^10.14.6",
"@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
+ "chai": "^4.3.4",
+ "chalk": "^2.4.2",
+ "esbuild": "^0.15.7",
+ "mocha": "^10.0.0",
+ "ts-node": "^9.1.1",
+ "typescript": "^4.8.3"
+ },
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "mocha": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
+ "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
+ "dev": true,
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "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,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "workerpool": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+ "dev": true
+ }
+ }
+ },
+ "@keymanapp/kmc-model-info": {
+ "version": "file:developer/src/kmc-model-info",
+ "requires": {
+ "@keymanapp/keyman-version": "*",
+ "@keymanapp/kmc-package": "*",
+ "@keymanapp/models-types": "*",
+ "@types/chai": "^4.1.7",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.14.6",
+ "@types/xml2js": "^0.4.5",
+ "c8": "^7.12.0",
"chai": "^4.3.4",
"chalk": "^2.4.2",
- "commander": "^3.0.0",
- "jszip": "^3.7.0",
"mocha": "^8.4.0",
"ts-node": "^9.1.1",
- "typescript": "^4.5.4",
- "xml2js": "^0.4.19"
+ "typescript": "^4.5.4"
},
"dependencies": {
"@types/mocha": {
@@ -9813,6 +9587,88 @@
}
}
},
+ "@keymanapp/kmc-package": {
+ "version": "file:developer/src/kmc-package",
+ "requires": {
+ "@types/chai": "^4.1.7",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.14.6",
+ "c8": "^7.12.0",
+ "chai": "^4.3.4",
+ "chalk": "^2.4.2",
+ "jszip": "^3.7.0",
+ "mocha": "^8.4.0",
+ "ts-node": "^9.1.1",
+ "typescript": "^4.5.4"
+ },
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@keymanapp/ldml-keyboard-constants": {
+ "version": "file:core/include/ldml"
+ },
"@keymanapp/lexical-model-layer": {
"version": "file:common/predictive-text",
"requires": {
@@ -10551,6 +10407,12 @@
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
"integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ=="
},
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
"@types/json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz",
@@ -10700,16 +10562,6 @@
"debug": "4"
}
},
- "aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- }
- },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -10757,27 +10609,12 @@
"resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
"integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
},
- "append-transform": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
- "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
- "dev": true,
- "requires": {
- "default-require-extensions": "^3.0.0"
- }
- },
"aproba": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"devOptional": true
},
- "archy": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
- "dev": true
- },
"are-we-there-yet": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
@@ -10953,18 +10790,6 @@
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
- "browserslist": {
- "version": "4.21.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
- "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001370",
- "electron-to-chromium": "^1.4.202",
- "node-releases": "^2.0.6",
- "update-browserslist-db": "^1.0.5"
- }
- },
"browserstack": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz",
@@ -11086,6 +10911,34 @@
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
},
+ "c8": {
+ "version": "7.12.0",
+ "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz",
+ "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==",
+ "dev": true,
+ "requires": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@istanbuljs/schema": "^0.1.3",
+ "find-up": "^5.0.0",
+ "foreground-child": "^2.0.0",
+ "istanbul-lib-coverage": "^3.2.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-reports": "^3.1.4",
+ "rimraf": "^3.0.2",
+ "test-exclude": "^6.0.0",
+ "v8-to-istanbul": "^9.0.0",
+ "yargs": "^16.2.0",
+ "yargs-parser": "^20.2.9"
+ },
+ "dependencies": {
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
+ }
+ }
+ },
"cacheable-lookup": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
@@ -11105,29 +10958,11 @@
"responselike": "^2.0.0"
}
},
- "caching-transform": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
- "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
- "dev": true,
- "requires": {
- "hasha": "^5.0.0",
- "make-dir": "^3.0.0",
- "package-hash": "^4.0.0",
- "write-file-atomic": "^3.0.0"
- }
- },
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
- "caniuse-lite": {
- "version": "1.0.30001390",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001390.tgz",
- "integrity": "sha512-sS4CaUM+/+vqQUlCvCJ2WtDlV81aWtHhqeEVkLokVJJa3ViN4zDxAGfq9R8i1m90uGHxo99cy10Od+lvn3hf0g==",
- "dev": true
- },
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
@@ -11185,12 +11020,6 @@
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
"optional": true
},
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true
- },
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -11283,12 +11112,6 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
"integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow=="
},
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
- "dev": true
- },
"component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
@@ -11514,15 +11337,6 @@
"type-detect": "^4.0.0"
}
},
- "default-require-extensions": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
- "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
- "dev": true,
- "requires": {
- "strip-bom": "^4.0.0"
- }
- },
"defer-to-connect": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
@@ -11652,12 +11466,6 @@
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
- "electron-to-chromium": {
- "version": "1.4.242",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.242.tgz",
- "integrity": "sha512-nPdgMWtjjWGCtreW/2adkrB2jyHjClo9PtVhR6rW+oxa4E4Wom642Tn+5LslHP3XPL5MCpkn5/UEY60EXylNeQ==",
- "dev": true
- },
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -11730,12 +11538,6 @@
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
"optional": true
},
- "es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
- "dev": true
- },
"es6-promise": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
@@ -11756,6 +11558,186 @@
"resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz",
"integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA=="
},
+ "esbuild": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.8.tgz",
+ "integrity": "sha512-Remsk2dmr1Ia65sU+QasE6svJbsHe62lzR+CnjpUvbZ+uSYo1SitiOWPRfZQkCu82YWZBBKXiD/j0i//XWMZ+Q==",
+ "dev": true,
+ "requires": {
+ "@esbuild/android-arm": "0.15.8",
+ "@esbuild/linux-loong64": "0.15.8",
+ "esbuild-android-64": "0.15.8",
+ "esbuild-android-arm64": "0.15.8",
+ "esbuild-darwin-64": "0.15.8",
+ "esbuild-darwin-arm64": "0.15.8",
+ "esbuild-freebsd-64": "0.15.8",
+ "esbuild-freebsd-arm64": "0.15.8",
+ "esbuild-linux-32": "0.15.8",
+ "esbuild-linux-64": "0.15.8",
+ "esbuild-linux-arm": "0.15.8",
+ "esbuild-linux-arm64": "0.15.8",
+ "esbuild-linux-mips64le": "0.15.8",
+ "esbuild-linux-ppc64le": "0.15.8",
+ "esbuild-linux-riscv64": "0.15.8",
+ "esbuild-linux-s390x": "0.15.8",
+ "esbuild-netbsd-64": "0.15.8",
+ "esbuild-openbsd-64": "0.15.8",
+ "esbuild-sunos-64": "0.15.8",
+ "esbuild-windows-32": "0.15.8",
+ "esbuild-windows-64": "0.15.8",
+ "esbuild-windows-arm64": "0.15.8"
+ }
+ },
+ "esbuild-android-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.8.tgz",
+ "integrity": "sha512-bVh8FIKOolF7/d4AMzt7xHlL0Ljr+mYKSHI39TJWDkybVWHdn6+4ODL3xZGHOxPpdRpitemXA1WwMKYBsw8dGw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "esbuild-wasm": "0.15.8"
+ }
+ },
+ "esbuild-android-arm64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.8.tgz",
+ "integrity": "sha512-ReAMDAHuo0H1h9LxRabI6gwYPn8k6WiUeyxuMvx17yTrJO+SCnIfNc/TSPFvDwtK9MiyiKG/2dBYHouT/M0BXQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-darwin-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.8.tgz",
+ "integrity": "sha512-KaKcGfJ+yto7Fo5gAj3xwxHMd1fBIKatpCHK8znTJLVv+9+NN2/tIPBqA4w5rBwjX0UqXDeIE2v1xJP+nGEXgA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-darwin-arm64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.8.tgz",
+ "integrity": "sha512-8tjEaBgAKnXCkP7bhEJmEqdG9HEV6oLkF36BrMzpfW2rgaw0c48Zrxe+9RlfeGvs6gDF4w+agXyTjikzsS3izw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-freebsd-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.8.tgz",
+ "integrity": "sha512-jaxcsGHYzn2L0/lffON2WfH4Nc+d/EwozVTP5K2v016zxMb5UQMhLoJzvLgBqHT1SG0B/mO+a+THnJCMVg15zw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-freebsd-arm64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.8.tgz",
+ "integrity": "sha512-2xp2UlljMvX8HExtcg7VHaeQk8OBU0CSl1j18B5CcZmSDkLF9p3utuMXIopG3a08fr9Hv+Dz6+seSXUow/G51w==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-32": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.8.tgz",
+ "integrity": "sha512-9u1E54BRz1FQMl86iaHK146+4ID2KYNxL3trLZT4QLLx3M7Q9n4lGG3lrzqUatGR2cKy8c33b0iaCzsItZWkFg==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.8.tgz",
+ "integrity": "sha512-4HxrsN9eUzJXdVGMTYA5Xler82FuZUu21bXKN42zcLHHNKCAMPUzD62I+GwDhsdgUBAUj0tRXDdsQHgaP6v0HA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-arm": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.8.tgz",
+ "integrity": "sha512-7DVBU9SFjX4+vBwt8tHsUCbE6Vvl6y6FQWHAgyw1lybC5gULqn/WnjHYHN2/LJaZRsDBvxWT4msEgwLGq1Wd3Q==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-arm64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.8.tgz",
+ "integrity": "sha512-1OCm7Aq0tEJT70PbxmHSGYDLYP8DKH8r4Nk7/XbVzWaduo9beCjGBB+tGZIHK6DdTQ3h00/4Tb/70YMH/bOtKg==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-mips64le": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.8.tgz",
+ "integrity": "sha512-yeFoNPVFPEzZvFYBfUQNG2TjGRaCyV1E27OcOg4LOtnGrxb2wA+mkW3luckyv1CEyd00mpAg7UdHx8nlx3ghgA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-ppc64le": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.8.tgz",
+ "integrity": "sha512-CEyMMUUNabXibw8OSNmBXhOIGhnjNVl5Lpseiuf00iKN0V47oqDrbo4dsHz1wH62m49AR8iG8wpDlTqfYgKbtg==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-riscv64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.8.tgz",
+ "integrity": "sha512-OCGSOaspMUjexSCU8ZiA0UnV/NiRU+s2vIfEcAQWQ6u32R+2luyfh/4ZaY6jFbylJE07Esc/yRvb9Q5fXuClXA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-s390x": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.8.tgz",
+ "integrity": "sha512-RHdpdfxRTSrZXZJlFSLazFU4YwXLB5Rgf6Zr5rffqSsO4y9JybgtKO38bFwxZNlDXliYISXN/YROKrG9s7mZQA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-netbsd-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.8.tgz",
+ "integrity": "sha512-VolFFRatBH09T5QMWhiohAWCOien1R1Uz9K0BRVVTBgBaVBt7eArsXTKxVhUgRf2vwu2c2SXkuP0r7HLG0eozw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-openbsd-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.8.tgz",
+ "integrity": "sha512-HTAPlg+n4kUeE/isQxlCfsOz0xJGNoT5LJ9oYZWFKABfVf4Ycu7Zlf5ITgOnrdheTkz8JeL/gISIOCFAoOXrSA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-sunos-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.8.tgz",
+ "integrity": "sha512-qMP/jR/FzcIOwKj+W+Lb+8Cfr8GZHbHUJxAPi7DUhNZMQ/6y7sOgRzlOSpRrbbUntrRZh0MqOyDhJ3Gpo6L1QA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-wasm": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.8.tgz",
+ "integrity": "sha512-Y7uCl5RNO4URjlemjdx++ukVHEMt5s5AfMWYUnMiK4Sry+pPCvQIctzXq6r6FKCyGKjX6/NGMCqR2OX6aLxj0w==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-32": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.8.tgz",
+ "integrity": "sha512-RKR1QHh4iWzjUhkP8Yqi75PPz/KS+b8zw3wUrzw6oAkj+iU5Qtyj61ZDaSG3Qf2vc6hTIUiPqVTqBH0NpXFNwg==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.8.tgz",
+ "integrity": "sha512-ag9ptYrsizgsR+PQE8QKeMqnosLvAMonQREpLw4evA4FFgOBMLEat/dY/9txbpozTw9eEOYyD3a4cE9yTu20FA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-arm64": {
+ "version": "0.15.8",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.8.tgz",
+ "integrity": "sha512-dbpAb0VyPaUs9mgw65KRfQ9rqiWCHpNzrJusoPu+LpEoswosjt/tFxN7cd2l68AT4qWdBkzAjDLRon7uqMeWcg==",
+ "dev": true,
+ "optional": true
+ },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -11773,12 +11755,6 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -12021,17 +11997,6 @@
}
}
},
- "find-cache-dir": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- }
- },
"find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -12103,12 +12068,6 @@
"integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
"dev": true
},
- "fromentries": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz",
- "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==",
- "dev": true
- },
"fs-access": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
@@ -12167,12 +12126,6 @@
"wide-align": "^1.1.0"
}
},
- "gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
- },
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -12184,12 +12137,6 @@
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
- "get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true
- },
"get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
@@ -12230,12 +12177,6 @@
"is-glob": "^4.0.1"
}
},
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
"google-closure-compiler-java": {
"version": "20200224.0.0",
"resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20200224.0.0.tgz",
@@ -12299,24 +12240,6 @@
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"devOptional": true
},
- "hasha": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
- "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==",
- "dev": true,
- "requires": {
- "is-stream": "^2.0.0",
- "type-fest": "^0.8.0"
- },
- "dependencies": {
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
- }
- }
- },
"he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -12408,20 +12331,7 @@
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
- "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
- "dev": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
"inflight": {
"version": "1.0.6",
@@ -12507,7 +12417,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "devOptional": true
+ "optional": true
},
"is-unicode-supported": {
"version": "0.1.0",
@@ -12515,12 +12425,6 @@
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"dev": true
},
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
"is-wsl": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
@@ -12557,49 +12461,6 @@
"integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
"dev": true
},
- "istanbul-lib-hook": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
- "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
- "dev": true,
- "requires": {
- "append-transform": "^2.0.0"
- }
- },
- "istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "istanbul-lib-processinfo": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz",
- "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==",
- "dev": true,
- "requires": {
- "archy": "^1.0.0",
- "cross-spawn": "^7.0.3",
- "istanbul-lib-coverage": "^3.2.0",
- "p-map": "^3.0.0",
- "rimraf": "^3.0.0",
- "uuid": "^8.3.2"
- }
- },
"istanbul-lib-report": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
@@ -12611,17 +12472,6 @@
"supports-color": "^7.1.0"
}
},
- "istanbul-lib-source-maps": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- }
- },
"istanbul-reports": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
@@ -12632,12 +12482,6 @@
"istanbul-lib-report": "^3.0.0"
}
},
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
"js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -12653,12 +12497,6 @@
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"optional": true
},
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
"json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
@@ -12682,12 +12520,6 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"optional": true
},
- "json5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
- "dev": true
- },
"jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -12714,7 +12546,6 @@
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.9.1.tgz",
"integrity": "sha512-H9A60xPqJ1CuC4Ka6qxzXZeU8aNmgOeP5IFqwJbQQwtu2EUYxota3LdsiZWplF7Wgd9tkAd0mdu36nceSaPuYw==",
- "dev": true,
"requires": {
"lie": "~3.3.0",
"pako": "~1.0.2",
@@ -13021,7 +12852,6 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
- "dev": true,
"requires": {
"immediate": "~3.0.5"
}
@@ -13055,12 +12885,6 @@
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
},
- "lodash.flattendeep": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
- "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==",
- "dev": true
- },
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
@@ -13624,21 +13448,6 @@
"which": "^2.0.2"
}
},
- "node-preload": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
- "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
- "dev": true,
- "requires": {
- "process-on-spawn": "^1.0.0"
- }
- },
- "node-releases": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
- "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
- "dev": true
- },
"node-windows-trayicon": {
"version": "git+ssh://git@github.com/keymanapp/node-windows-trayicon.git#1e46786082213f3edcddd5953e33f5abdc7ea05f",
"from": "node-windows-trayicon@git+ssh://git@github.com/keymanapp/node-windows-trayicon.git#1e46786082213f3edcddd5953e33f5abdc7ea05f",
@@ -13744,169 +13553,6 @@
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
"devOptional": true
},
- "nyc": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
- "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
- "dev": true,
- "requires": {
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "caching-transform": "^4.0.0",
- "convert-source-map": "^1.7.0",
- "decamelize": "^1.2.0",
- "find-cache-dir": "^3.2.0",
- "find-up": "^4.1.0",
- "foreground-child": "^2.0.0",
- "get-package-type": "^0.1.0",
- "glob": "^7.1.6",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-hook": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.0",
- "istanbul-lib-processinfo": "^2.0.2",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "make-dir": "^3.0.0",
- "node-preload": "^0.2.1",
- "p-map": "^3.0.0",
- "process-on-spawn": "^1.0.0",
- "resolve-from": "^5.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^2.0.0",
- "test-exclude": "^6.0.0",
- "yargs": "^15.0.2"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@@ -13986,37 +13632,15 @@
"p-limit": "^3.0.2"
}
},
- "p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
},
- "package-hash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
- "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.15",
- "hasha": "^5.0.0",
- "lodash.flattendeep": "^4.4.0",
- "release-zalgo": "^1.0.0"
- }
- },
"pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"parseurl": {
"version": "1.3.3",
@@ -14071,80 +13695,17 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"optional": true
},
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
"picomatch": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
"integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
"dev": true
},
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- }
- }
- },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
- "process-on-spawn": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
- "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
- "dev": true,
- "requires": {
- "fromentries": "^1.2.0"
- }
- },
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -14272,15 +13833,6 @@
"picomatch": "^2.2.1"
}
},
- "release-zalgo": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
- "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==",
- "dev": true,
- "requires": {
- "es6-error": "^4.0.1"
- }
- },
"request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -14355,12 +13907,6 @@
"resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
"integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
},
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- },
"responselike": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
@@ -14487,8 +14033,7 @@
"set-immediate-shim": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
- "dev": true
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
},
"setprototypeof": {
"version": "1.2.0",
@@ -14611,20 +14156,6 @@
"source-map": "^0.6.0"
}
},
- "spawn-wrap": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
- "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
- "dev": true,
- "requires": {
- "foreground-child": "^2.0.0",
- "is-windows": "^1.0.2",
- "make-dir": "^3.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "which": "^2.0.1"
- }
- },
"split": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
@@ -14634,12 +14165,6 @@
"through": "2"
}
},
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
- },
"sshpk": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
@@ -14749,12 +14274,6 @@
"ansi-regex": "^2.0.0"
}
},
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
- },
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
@@ -14852,12 +14371,6 @@
"rimraf": "^3.0.0"
}
},
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true
- },
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -14970,12 +14483,6 @@
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
},
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- },
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -14990,19 +14497,10 @@
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
"typescript": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
- "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw=="
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
+ "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig=="
},
"ua-parser-js": {
"version": "0.7.31",
@@ -15038,16 +14536,6 @@
"integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
"dev": true
},
- "update-browserslist-db": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz",
- "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==",
- "dev": true,
- "requires": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- }
- },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -15077,6 +14565,29 @@
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true
},
+ "v8-to-istanbul": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz",
+ "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^1.6.0"
+ },
+ "dependencies": {
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
+ "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ }
+ }
+ },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -15208,18 +14719,6 @@
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
- "write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
"ws": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
diff --git a/package.json b/package.json
index 73758909fe..49ed676d47 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,10 @@
"resources/gosh",
"resources/build/version",
"core/include/ldml",
- "developer/src/kmlmc",
+ "developer/src/kmc-keyboard",
+ "developer/src/kmc-model",
+ "developer/src/kmc-model-info",
+ "developer/src/kmc-package",
"developer/src/kmc",
"developer/src/server",
"common/models/*",
@@ -23,6 +26,7 @@
"web"
],
"dependencies": {
- "@keymanapp/hextobin": "file:common/tools/hextobin"
+ "@keymanapp/hextobin": "file:common/tools/hextobin",
+ "@keymanapp/keyman-version": "file:common/web/keyman-version"
}
}
diff --git a/resources/build/build-utils-ci.test.sh b/resources/build/build-utils-ci.test.sh
old mode 100644
new mode 100755
diff --git a/resources/build/build-utils.sh b/resources/build/build-utils.sh
index e18db1daa3..8afa056849 100755
--- a/resources/build/build-utils.sh
+++ b/resources/build/build-utils.sh
@@ -752,7 +752,7 @@ builder_report() {
target="$3"
fi
- if [ $result == success ]; then
+ if [[ $result == success ]]; then
echo "${COLOR_GREEN}## $action$target completed successfully${COLOR_RESET}"
else
echo "${COLOR_RED}## $action$target failed. Result: $result${COLOR_RESET}"
diff --git a/resources/build/npm-publish.inc.sh b/resources/build/npm-publish.inc.sh
new file mode 100644
index 0000000000..32f9f8d95b
--- /dev/null
+++ b/resources/build/npm-publish.inc.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+
+
+function npm_publish() {
+ if [[ $TIER == stable ]]; then
+ npm_dist_tag=latest
+ else
+ npm_dist_tag=$TIER
+ fi
+
+ set_npm_version
+
+ if builder_has_option --dry-run; then
+ DRY_RUN=--dry-run
+ else
+ DRY_RUN=
+ fi
+
+ #TEMP: we don't want to publish at this point!
+ DRY_RUN=--dry-run
+
+ # Note: In either case, npm publish MUST be given --access public to publish
+ # a package in the @keymanapp scope on the public npm package index.
+ #
+ # See `npm help publish` for more details.
+ echo "Publishing $DRY_RUN npm package with tag $npm_dist_tag"
+ npm publish $DRY_RUN --access public --tag $npm_dist_tag || fail "Could not publish $npm_dist_tag release."
+fi
diff --git a/resources/devbox/iis-https/setup-iis-https.sh b/resources/devbox/iis-https/setup-iis-https.sh
old mode 100644
new mode 100755
diff --git a/resources/devbox/macos/keyman.macos.env.sh b/resources/devbox/macos/keyman.macos.env.sh
old mode 100644
new mode 100755
diff --git a/resources/git-hooks/pre-commit b/resources/git-hooks/pre-commit
new file mode 100644
index 0000000000..3fd01c7d02
--- /dev/null
+++ b/resources/git-hooks/pre-commit
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+#
+# We want to make sure that .sh files are executable; however, .inc.sh need not
+# be as they are always source-included in scripts.
+#
+SH_NON_EXECUTABLE=`git ls-files --stage | grep "\\.sh$" | grep -v "\\.inc\\.sh$" | grep -v 755 | cut -f 2 -`
+
+if [ ! -z "$SH_NON_EXECUTABLE" ]; then
+ echo "ERROR: The following scripts are not marked as executable:"
+ echo
+ echo "$SH_NON_EXECUTABLE"
+ echo
+ echo "You can mark them as executable with:"
+ echo " git add --chmod=+x"
+ exit 1
+fi
+
+exit 0
diff --git a/tsconfig.json b/tsconfig.json
index 45baebc661..139dbc98b3 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -8,25 +8,42 @@
{ "path": "./common/web/recorder/src/tsconfig.json" },
{ "path": "./common/web/sentry-manager/src/tsconfig.json" },
{ "path": "./common/web/utils/tsconfig.json" },
+
{ "path": "./common/models/templates/tsconfig.json" },
{ "path": "./common/models/types/tsconfig.json" },
{ "path": "./common/models/wordbreakers/tsconfig.json" },
+
{ "path": "./common/predictive-text/browser.tsconfig.json" },
{ "path": "./common/predictive-text/testing/one-stage-embedded-webworker/tsconfig.json" },
{ "path": "./common/predictive-text/testing/two-stage-embedded-webworker/tsconfig.json" },
{ "path": "./common/predictive-text/testing/two-stage-embedded-webworker/worker/tsconfig.json" },
{ "path": "./common/predictive-text/tsconfig.json" },
- { "path": "./developer/src/kmlmc/tests/tsconfig.json" },
- { "path": "./developer/src/kmlmc/tsconfig.json" },
+
+ //{ "path": "./developer/src/kmc/test/tsconfig.json" },
+ { "path": "./developer/src/kmc/tsconfig.json" },
+
+ { "path": "./developer/src/kmc-keyboard/test/tsconfig.json" },
+ { "path": "./developer/src/kmc-keyboard/tsconfig.json" },
+ { "path": "./developer/src/kmc-model/test/tsconfig.json" },
+ { "path": "./developer/src/kmc-model/tsconfig.json" },
+ //{ "path": "./developer/src/kmc-model-info/test/tsconfig.json" },
+ { "path": "./developer/src/kmc-model-info/tsconfig.json" },
+ { "path": "./developer/src/kmc-package/test/tsconfig.json" },
+ { "path": "./developer/src/kmc-package/tsconfig.json" },
+
{ "path": "./developer/src/server/tsconfig.json" },
+
{ "path": "./resources/build/version/tsconfig.json" },
{ "path": "./resources/build/version/tsconfig.production.json" },
+
{ "path": "./web/bulk_rendering/tsconfig.json" },
{ "path": "./web/source/tsconfig.json" },
{ "path": "./web/tools/recorder/tsconfig.json" },
{ "path": "./web/tools/sourcemap-root/tsconfig.json" },
+
{ "path": "./common/web/lm-message-types/" },
{ "path": "./common/web/lm-worker/" },
{ "path": "./common/web/keyman-version/" },
+ { "path": "./common/web/keyman-version/tsconfig.esm.json" },
]
}
\ No newline at end of file
diff --git a/windows/src/desktop/locale/crowdin-control.sh b/windows/src/desktop/locale/crowdin-control.sh
old mode 100644
new mode 100755
diff --git a/windows/src/test/manual-tests/i18n-check-unused-strings/i18n-check-unused-strings.sh b/windows/src/test/manual-tests/i18n-check-unused-strings/i18n-check-unused-strings.sh
old mode 100644
new mode 100755