spiegel-keyman/common/predictive-text
Joshua Horton 62a85ef7b8
Merge pull request #1602 from keymanapp/web-lmlayer-compilation
[Web] Compilation with the LMLayer
2019-02-26 09:28:04 +07:00
..
docs Update documentation/interfaces to be consistent with each other. 2019-01-11 15:28:34 -07:00
testing Demonstrate Blob code proof-of-concept. 2018-11-20 11:12:05 -07:00
unit_tests Merge pull request #1602 from keymanapp/web-lmlayer-compilation 2019-02-26 09:28:04 +07:00
worker Enable word list model in the top-level API. 2019-01-18 14:23:16 -07:00
.gitignore More general pattern for .gitignore. 2018-11-20 08:48:45 -07:00
build.sh Establishes baseline co-compilation of KMW w/ the LMLayer 2019-02-19 10:06:27 +07:00
embedded_worker.d.ts Merge branch 'lmlayer-init' into lmlayer-build-reorg 2018-11-29 23:35:37 +07:00
history.md Created an initial build script for use in common/predictive-text 2018-11-01 08:04:06 +07:00
index.d.ts Establishes baseline co-compilation of KMW w/ the LMLayer 2019-02-19 10:06:27 +07:00
index.ts Actually includes the files this time... 2019-02-19 08:52:31 +07:00
message.d.ts Enable word list model in the top-level API. 2019-01-18 14:23:16 -07:00
package-lock.json Upgrade to karma-browserstack-launcher@^1.4.0. 2019-01-08 15:30:20 -07:00
package.json Upgrade to karma-browserstack-launcher@^1.4.0. 2019-01-08 15:30:20 -07:00
promise-store.ts Actually includes the files this time... 2019-02-19 08:52:31 +07:00
README.md Slightly improve the README text. 2018-11-28 14:54:03 -07:00
tsconfig.json Reorganized the build structure into something simpler to -clean. 2018-11-29 09:11:26 +07: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 >= 6.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.