spiegel-keyman/web/src/engine/predictive-text/worker-main
Marc Durdin 41c9cef797 refactor(web): change @keymanapp/web-utils to keyman/common/web-utils
Removes the need for package.json references for @keymanapp/web-utils,
and relies on bundler to include keyman/common/web-utils when building.
2025-11-06 07:24:36 +01:00
..
docs refactor(web): move predictive-text → worker-main 2024-08-15 12:26:50 +02:00
src refactor(web): change @keymanapp/web-utils to keyman/common/web-utils 2025-11-06 07:24:36 +01:00
unit_tests maint(resources): nest unit tests under parent block 2025-10-06 16:09:47 +02:00
.gitignore refactor(web): move predictive-text → worker-main 2024-08-15 12:26:50 +02:00
build.sh maint(common): move build-utils-ci.inc.sh to ci/ci-publish.inc.sh 2025-08-05 12:54:56 +10:00
package.json refactor(web): change @keymanapp/web-utils to keyman/common/web-utils 2025-11-06 07:24:36 +01:00
README.md refactor(web): move predictive-text → worker-main 2024-08-15 12:26:50 +02:00
tsconfig.all.json refactor(web): change @keymanapp/web-utils to keyman/common/web-utils 2025-11-06 07:24:36 +01:00

Language Modelling Layer (LMLayer)

Provide predictions and corrections while you type!

See Worker Communication Protocol for a semi-formal specification on how the Worker and the main thread communicate.

System dependencies

You will need Bash and Node.js >= 10.0.

Build

Run build.sh. This will also automatically install dependencies with npm.

./build.sh

Two-stage compilation process

Since the primary LMLayer code runs within a Web Worker, build.sh compiles the LMLayer in two stages:

  1. Compile the inner worker code

    1. Compile the TypeScript sources for only the Worker code.
    2. Wrap the Worker code as embedded_worker.js
  2. Compile the top-level code

    1. Include embedded_worker.js verbatim using a TypeScript directive.
    2. Compile the top-level TypeScript code.
    3. Unwrap the Worker code at runtime.

Test

This will run both headless unit tests, and in-browser unit tests and integration tests:

./build.sh -test

Test-Driven Development

I like to use entr to automatically build and re-run the unit tests anytime I change a source code file. Here's the command I run in separate window:

git ls-files | entr -c ./build.sh -tdd

Importantly, ./build.sh -tdd skips running the in-browser tests, and skips downloading/updating npm dependencies.