Commit graph

1330 commits

Author SHA1 Message Date
Eberhard Beilharz
06f7f22cd0
maint(web): address more code review comments
Co-authored-by: Marc Durdin <marc@durdin.net>
2026-03-23 15:43:17 +01:00
Eberhard Beilharz
745fa36d24
chore(web): Merge branch 'epic/web-core' into maint/web/jstests
Some checks failed
Keyman Build Summary / Summarize build status checks (push) Has been cancelled
2026-03-20 18:03:47 +01:00
Eberhard Beilharz
1d9b8cc883
maint(web): address code review comments
- inline consts so that we don't have to export them for unit testing
- create `getKeymanRoot` and `getWebTestResourcesPath` helper functions
  to DRY out the code
- run `languageProcessortests.js` without coverage to prevent a failure
  creating the coverage report.
2026-03-20 15:53:41 +01:00
Marc Durdin
70c54b0b40 chore: Merge branch 'epic/web-core' into auto/A19S24-merge-master-into-web-core
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
2026-03-16 04:49:38 +01:00
Marc Durdin
659e85033a
Merge pull request #15665 from keymanapp/maint/developer/test-callbacks-cleanup
maint(developer): make `TestCompilerCallbacks` usage more consistent and simplify
2026-03-06 21:00:39 +07:00
Marc Durdin
645e1cd16f chore(web): remove implicit any type when setting processingConfig.itemIdentifier
Not exactly clear what triggered this? Perhaps related to npm package updates,
but hard to see how.

Test-bot: skip
Build-bot: skip build:web
2026-03-05 21:46:40 +01:00
Marc Durdin
529a49431e maint(developer): make TestCompilerCallbacks usage more consistent and simplify
Simplify usage of `TestCompilerCallbacks` by making it responsible for
the `beforeEach` and `afterEach` incantations itself. There are a couple
of more complex usages of `TestCompilerCallbacks` which have been
excluded from this change on purpose.

Renamed `testCallbacks` to `callbacks` in the one place where it was
different.

Hoist @types/node and @types/mocha because inconsistent versions of
@types/mocha were causing compiler errors with this change.

Also added a cast to `fs.readFileSync` to `Uint8Array` to eliminate
compiler warnings/errors in test files.

Fixes: #15654
Test-bot: skip
2026-03-03 16:44:06 +01:00
Eberhard Beilharz
3c525cc244
chore: Merge branch 'epic/web-core' into auto/A19S23-merge-master-into-web-core 2026-02-27 10:19:18 +01:00
Joshua Horton
5c445d470c change(web): remove temp debug shell-script echo statements 2026-02-18 12:59:17 +07:00
Joshua Horton
b7975973af maint(web): ensure Web build scripts handle paths with spaces properly
The command shortcuts that were used by Web
scripts to create bundles via `esbuild` were not
properly handling the $KEYMAN_ROOT path when it
contained a space.  These changes will rectify
this behavior and permit builds for such cases.

Build-bot: skip build:web
Test-bot: skip
2026-02-18 09:14:30 +07:00
Eberhard Beilharz
4992268b77
feat(web): add unit test for RTL
This change stubs out `KMXKeyboard.isRTL` and adds a unit test for RTL
with .js and  .kmx (currently skipped) keyboards. Also change some code
to use `Keyboard` instead of `JSKeyboard` and stub out additional methods.

The RTL functionality will have to be completed when the necessary
extensions to the Core API are implemented (#15482).

Fixes: #15288
Test-bot: skip
2026-01-29 14:52:55 +01:00
Eberhard Beilharz
e2b31c488b
maint(web): re-add engine .js tests
PR #15093 merged multiple engine modules into one. However, in doing so
we lost the .js tests and ran only the .ts ones. This change re-adds the
.js tests and fixes them where the code diverged since then.

Other changes:
- rename `queryEngine.ts` to `cloudQueryEngine.ts` to match the class name
- remove unused `keyboard-storage/cloud/index.ts`
- expose `CLOUD_TIMEOUT_ERR` and `CLOUD_STUB_REGISTRATION_ERR` as
  `unitTestEndpoints`
- add `test/resources` to exports in `web/package.json`. This was necessary
  because the compiled .ts test files are under `web/build` whereas the
  .js test files are under `web/src` and so the relative paths in imports
  no longer work. Also fix the imports in test files.
- apply fix from #15477 if KEYMAN_ROOT is not set

I'm not happy to put the compiled files under
`web/src/test/auto/resources/build`, but that's the only way I got it
to work. If I put the compiled files in `web/build/test/resources` it
couldn't find the types for `promise-status-async`.

Also, running the .js tests succeeded but then creating the coverage
report failed. I was not able to find the reason or a fix for that. As a
hack to work around this problem we check the number of failed tests
instead of relying on the exit code of the test.

Follows: #15093
Test-bot: skip
2026-01-26 18:05:23 +01:00
Eberhard Beilharz
7e972ab49a
Merge pull request #15465 from keymanapp/refactor/web/ProcessorInitOptions
refactor(web): refactor `ProcessorInitOptions` 📏 🎼

This addresses a web-core TODO comment.

This change makes the `options` parameter in the `JSKeyboardProcessor` constructor no longer optional. Also `baseLayout` and `defaultOutputRules` are now required in `ProcessorInitOptions`. For testing purposes we export `DEFAULT_OPTIONS` in a testing endpoint.

The `options` parameter in the `InputProcessor` constructor is no longer optional. Also removes the `DEFAULT_OPTIONS` from
`InputProcessor`.

This change also moves the `ProcessorInitOptions` interface to a separate file and makes `keyboardInterface` a required field.

An alternative approach would have been to get rid of `ProcessorInitOptions` and instead set the `JSKeyboardProcessor` fields after creating the instance. Doing it the implemented way seemed cleaner.
2026-01-22 17:34:08 +01:00
Eberhard Beilharz
7f110d15c5
feat(web): fix build 2026-01-22 17:14:01 +01:00
Eberhard Beilharz
7d57e839ac
chore(web): Merge branch 'epic/web-core' into feat/web/15287_doModifierPress 2026-01-22 17:03:19 +01:00
Eberhard Beilharz
26542576ee
feat(web): address code review comments and fix build 2026-01-22 17:00:33 +01:00
Eberhard Beilharz
40ce71a63f
refactor(web): address code review comments
The definition of `DEFAULT_PROCESSOR_INIT_OPTIONS` got lost in
last PR.

Test-bot: skip
2026-01-21 13:07:43 +01:00
Eberhard Beilharz
2b56e871f8
chore(web): Merge branch 'epic/web-core' into feat/web/persistopts 2026-01-21 12:44:33 +01:00
Eberhard Beilharz
6ae03c84ca
Merge pull request #15438 from keymanapp/feat/core/optionsupdate
feat(core): expose `km_core_state_options_update` to WASM 🍪 🎼

Part-of: #13426
2026-01-20 14:57:54 +01:00
Eberhard Beilharz
ad10627e1c
chore(web): Merge branch 'refactor/web/defaultRules' into refactor/web/ProcessorInitOptions 2026-01-20 12:12:22 +01:00
Eberhard Beilharz
8ecaae5f21
refactor(web): address code review comments
- remove confusing comment
- move default ProcessorInitOptions to tests folder
- add jsdoc comments to ProcessorInitOptions

Test-bot: skip
2026-01-20 12:10:25 +01:00
Eberhard Beilharz
63173a25ba
feat(developer): address code review comments 2026-01-20 11:47:14 +01:00
Eberhard Beilharz
2641681f89
chore(web): Merge branch 'epic/web-core' into refactor/web/defaultRules 2026-01-20 11:45:09 +01:00
Eberhard Beilharz
f7f23df040
Merge branch 'epic/web-core' into feat/core/optionsupdate 2026-01-20 11:42:14 +01:00
Eberhard Beilharz
485ea55800
chore(web): Merge remote-tracking branch 'origin/epic/web-core' into feat/web/15287_doModifierPress 2026-01-20 11:41:05 +01:00
Eberhard Beilharz
03eba3cf55
Merge pull request #15463 from keymanapp/refactor/web/test-index
refactor(web): use unitTestEndpoint pattern in OSK 🎼

This changes the exports for unit testing to the unitTestEndpoint pattern.

Part-of: #15292
2026-01-20 08:41:40 +01:00
Eberhard Beilharz
55af621654
Merge pull request #15461 from keymanapp/refactor/web/processorAction
refactor(web): rename ruleBehavior variables → processorAction 🎼

The changes in PR #12291 renamed the `RuleBehavior` class to `ProcessorAction`. This change now renames the local variables in `InputProcessor` accordingly.

Follow-up-of: #12291
2026-01-20 08:40:54 +01:00
Eberhard Beilharz
b8d2dc5726
Merge pull request #15462 from keymanapp/refactor/web/exports
refactor(web): remove web-utils exports from keyboard 🎼

Types defined in keyman/common/web-utils were re-exported in keyman/engine/keyboard. This change removes the re-export.

Part-of: #15292
2026-01-20 08:39:58 +01:00
Eberhard Beilharz
63028ab4d6
Merge pull request #15466 from keymanapp/feat/web/isChiralEngineBase
feat(web): implement `KeyboardEngineBase.isChiral` 🎼

Part-of: #13426
2026-01-20 08:39:14 +01:00
Eberhard Beilharz
bc3f447601
feat(web): address code review comments
Test-bot: skip
2026-01-19 17:07:59 +01:00
Eberhard Beilharz
aeb8cbe39a
Merge branch 'epic/web-core' into refactor/web/defaultRules 2026-01-19 16:21:22 +01:00
Eberhard Beilharz
2e404390c0
Merge pull request #15437 from keymanapp/feat/web/findStores
feat(web): add `findStores` functions 🍪

This change adds a static `findStores` function to `VarStoreSerializer` and `VariableStoreCookieSerializer` as well as to the `VariableStoreSerializer` interface.

Also add unit tests for `VariableStoreCookieSerializer`.

Part-of: #13426
2026-01-19 13:01:03 +01:00
Eberhard Beilharz
4f154574f6
feat(web): implement KeyboardEngineBase.isChiral
Part-of: #13426
Test-bot: skip
2026-01-16 21:06:37 +01:00
Eberhard Beilharz
aa5c5bad66
refactor(web): make ProcessorInitOptions.keyboardInterface mandatory
This change moves the `ProcessorInitOptions` interface to a separate
file and makes `keyboardInterface` a required field.

Test-bot: skip
2026-01-16 18:08:37 +01:00
Eberhard Beilharz
0d67393f90
refactor(web): options parameter mandatory in InputProcessor c'tor
This makes the `options` parameter in the `InputProcessor` constructor
no longer optional. Also removes the `DEFAULT_OPTIONS` from
`InputProcessor`.

Test-bot: skip
2026-01-16 17:52:10 +01:00
Eberhard Beilharz
77b4bd8037
refactor(web): options parameter mandatory in JSKeyboardProcessor c'tor
This makes the `options` parameter in the `JSKeyboardProcessor`
constructor no longer optional.
Also `baseLayout` and `defaultOutputRules` are now required in
`ProcessorInitOptions`.

For testing purposes we export `DEFAULT_OPTIONS` in a testing endpoint.

Test-bot: skip
2026-01-16 17:48:40 +01:00
Eberhard Beilharz
f22faa1c04
refactor(web): rename DefaultRules → DefaultOutputRules
Test-bot: skip
2026-01-16 17:11:28 +01:00
Eberhard Beilharz
f8d07549ba
chore(web): update TODO comments
This changes several `TODO-web-core` to `TODO-embed-osk-in-kmx` because
they are related to OSK and can't be implemented/tested without having
the OSK API available.

Also updated some additional comments.

Build-bot: skip
Test-bot: skip
2026-01-16 16:52:05 +01:00
Eberhard Beilharz
aea2e2ab98
refactor(web): use unitTestEndpoint pattern in OSK
This changes the exports for unit testing to the unitTestEndpoint pattern.

Part-of: #15292
Test-bot: skip
2026-01-16 16:37:49 +01:00
Eberhard Beilharz
9930a8cbae
refactor(web): remove web-utils exports from keyboard
Types defined in keyman/common/web-utils were re-exported in
keyman/engine/keyboard. This change removes the re-export.

Part-of: #15292
Test-bot: skip
2026-01-16 16:25:32 +01:00
Eberhard Beilharz
44326731dd
refactor(web): rename ruleBehavior variables → processorAction
The changes in PR #12291 renamed the `RuleBehavior` class to
`ProcessorAction`. This change now renames the local variables in
`InputProcessor` accordingly.

Follow-up-of: #12291
Test-bot: skip
2026-01-16 15:52:33 +01:00
Eberhard Beilharz
5e380c0f72
feat(web): implement persisting keyboard options
- move `CoreKeyboardInterface` to separate file
- add variable store to `CoreKeyboardInterface` to manage variable stores
  for active keyboard
- Add `VariableStoreSerializer` parameter to `CoreKeyboardProcessor.init()`
- Implement `process_persist_action()` to save options to persistent
  storage
- Update keyboard activation to load stored options from serializer

Closes: #13426
Test-bot: skip
2026-01-15 12:49:28 +01:00
Eberhard Beilharz
9909d7d901
feat(core): expose km_core_state_options_update to WASM
Part-of: #13426
Test-bot: skip
2026-01-15 12:28:56 +01:00
Eberhard Beilharz
a8c68711da
feat(web): add findStores functions
This change adds a static `findStores` function to `VarStoreSerializer`
and `VariableStoreCookieSerializer` as well as to the
`VariableStoreSerializer` interface.

Also add unit tests for `VariableStoreCookieSerializer`.

Part-of: #13426
Test-bot: skip
2026-01-15 12:28:56 +01:00
Eberhard Beilharz
f8546c0e5f
feat(web): address code review comments
Test-bot: skip
2026-01-15 11:57:41 +01:00
Eberhard Beilharz
ac22e0b1c5
feat(web): add CookieSerializer.loadAllMatching function
- rename tests from `cookies.tests.ts` → `cookieSerializer.tests.ts`
- add test for new function

Part-of: #13426
Test-bot: skip
2026-01-14 11:08:23 +01:00
Eberhard Beilharz
26ba3c8510
refactor(web): explicitly specify public/private on CookieSerializer 2026-01-14 11:06:33 +01:00
Eberhard Beilharz
050d18aa94
refactor(web): Rename (Default)Worker to WebWorker and NodeWorker
Addresses code review comment: `Worker` is a generic and semi-reserved
name that we should not be stepping on.

This renames it to `WebWorker` instead of the suggested `LMWorker` or
`PredictiveTextWorker`. `WebWorker` is a name that was already used
in a few places and seems to better match: there is a corresponding
class for running with node. Naming it `WebWorker` makes it clearer
that this is the corresponding class when running in the browser.

The corresponding class for running under node was renamed to `NodeWorker`.

Test-bot: skip
2026-01-12 10:52:05 +01:00
Eberhard Beilharz
3833f19c44
refactor(web): remove some aliases
This is a follow-up of review comments in #15401.
- rename `DefaultWorker` → `Worker`
- rename `BUTTON_CLASSES` → `buttonClassNames`
Both exports now also match the filename.

Follow-up-of: #15401
Test-bot: skip
2026-01-09 10:55:01 +01:00
Eberhard Beilharz
1a8c909274
Apply suggestions from code review
Co-authored-by: Marc Durdin <marc@durdin.net>
2026-01-09 09:36:00 +01:00