Commit graph

188 commits

Author SHA1 Message Date
Steven R. Loomis
da4b544471 feat(developer): errs on unparseable regex 🙀
- also, make sure NFD-incompliant ranges get mapped to escaped chars
- also, propagate UnicodeSet errs out

For: #10389
2024-02-12 18:16:34 -06:00
Marc Durdin
d2b3ef1b58 chore(developer): preserve const enums in kmc-kmn 2024-01-24 11:29:43 +07:00
Marc Durdin
d0aa477ca5 feat(developer): warn on gesture support for downlevel
Fixes #10191.
2024-01-11 15:36:35 +07:00
Marc Durdin
beddf05afa fix(developer): cleanly handle filling a new osk file from layout
Fixes #10315.

When filling from layout, if the .kvks file did not exist, an obscure
error was generated:

    Error: 2908 Error encountered parsing eo_plus.kvks: TypeError: Cannot read properties of null (reading 'byteLength')

Fixed this by checking for file existence before attempting to process,
which then reports a more understandable error of 'file not found'.

Then, needed to tweak the caller in Keyman Developer IDE to remove the
reference to the .kvks file before attempting to build
(chicken-and-egg).
2024-01-05 13:35:43 +07:00
Marc Durdin
e2ce64d9be fix(web): mocha describe does not do async
mocha describe() does not accept an async function. Any async prep
should be done in a before() function, which does support async.

One helpful ref: https://github.com/mochajs/mocha/issues/2975#issuecomment-1004176440
2023-12-13 05:38:51 +07:00
Marc Durdin
d18d4833a9 chore(developer): tidyup of KmnCompiler members 2023-12-07 11:41:27 +07:00
Marc Durdin
6bebefda10 feat(developer): move kmc-kmn to KeymanCompiler interface
Part of #9473.

KmnCompiler now implements KeymanCompiler, including the returned
artifacts. Also establishes the common types for the compiler interfaces
and consolidates and renames various API surfaces for kmc-kmn.
2023-12-07 11:05:31 +07:00
Marc Durdin
e983818bda feat(developer): warn on usage of virtual keys in rule output
Fixes #10059.

Use of the unsupported and undocumented virtual key output, that doesn't
work in recent Keyman versions, at all, now results in a build warning.

Only a warning, because it did kinda work in old versions of Keyman.
2023-11-23 15:13:56 +10:00
Darcy Wong
71a9b9d66a
Merge pull request #9846 from keymanapp/chore/developer/non-printing-chars
feat(developer): Add more non-printing characters
2023-11-07 15:20:21 +07:00
Darcy Wong
5902c764c7
Apply suggestions from code review
Co-authored-by: Marc Durdin <marc@durdin.net>
2023-11-06 15:26:32 +07:00
Darcy Wong
56a86a8f87
Apply suggestions from code review
Co-authored-by: Marc Durdin <marc@durdin.net>
2023-11-06 13:42:36 +07:00
Marc Durdin
7a08688ae1
Merge pull request #9938 from keymanapp/feat/developer/9931-line-numbers-for-some-kmw-messages
feat(developer): provide line number for some kmw compiler messages
2023-11-06 14:57:51 +11:00
Marc Durdin
2f42dd41f0
Merge pull request #9937 from keymanapp/chore/common/npm-prepublish-remove
chore(common): remove prepublish step from package.json
2023-11-06 14:57:43 +11:00
Marc Durdin
ab4fcef9f7 feat(developer): add line number information for more kmw messages
Adds line number context for:
  * Error_VirtualCharacterKeysNotSupportedInKeymanWeb
  * Error_VirtualKeysNotValidForMnemonicLayouts
  * Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb
  * Hint_UnreachableKeyCode
  * Warn_HelpFileMissing
  * Warn_EmbedJsFileMissing
  * Error_NotAnyRequiresVersion14

Line number metadata is not easily accessible where the following
messages are generated, so these are a potential future improvement:
  * Warn_OptionStoreNameInvalid
  * Error_NotSupportedInKeymanWebStore
2023-11-05 06:33:06 +07:00
Marc Durdin
02e1ea59a2 feat(developer): provide line number for some kmw compiler messages
Fixes #9931.

Provide additional line and file context for some KeymanWeb
compiler messages. This change requires debug data in the intermediate
kmx data provided to the kmw compiler, which should have no impact on
the final .js if debug=false.

This commit only addresses line number data in
Error_NotSupportedInKeymanWebContext and
Error_NotSupportedInKeymanWebOutput.

There are other compiler messages which could benefit from this data:
  * Warn_OptionStoreNameInvalid
  * Error_VirtualCharacterKeysNotSupportedInKeymanWeb
  * Error_VirtualKeysNotValidForMnemonicLayouts
  * Warn_ExtendedShiftFlagsNotSupportedInKeymanWeb
  * Hint_UnreachableKeyCode
  * Error_NotSupportedInKeymanWebStore
  * Warn_HelpFileMissing
  * Warn_EmbedJsFileMissing
  * Error_NotAnyRequiresVersion14
2023-11-05 06:12:42 +07:00
Marc Durdin
c5c5b35415 chore(common): remove prepublish step from package.json
Given we've just run a build, this (a) seems unnecessary, and (b) seems
to go wrong in some circumstances anyway, e.g.
https://build.palaso.org/buildConfiguration/Keyman_Developer_Release/421326?buildTab=log&focusLine=19936&linesState=18839&logView=flowAware:

```
07:01:29   > @keymanapp/kmc@17.0.205-alpha prepublishOnly
07:01:29   > npm run build
07:01:29
07:01:31
07:01:31   > @keymanapp/kmc@17.0.205-alpha build
07:01:31   > tsc -b
07:01:31
07:01:35   ../../../common/web/types/build/src/kmx/kmx.d.ts(1,1): error TS1036: Statements are not allowed in ambient contexts.
07:01:35   ../../../common/web/types/build/src/kmx/kmx.d.ts(1,2): error TS1345: An expression of type 'void' cannot be tested for truthiness.
...
```
2023-11-04 07:34:18 +07:00
Marc Durdin
186132dcb9 fix(developer): kmc code generation for context(n) in context
Fixes #9930.

* Fixes the index offset calculation, with +1 for >=v10.0 keyboards and
  -1 for <v10.0 keyboards (difference is because older version keyboards
  have context offsets calculated in the opposite direction). Note that
  this happened because the `CODE_CONTEXTEX` index is stored in memory
  as 0-based in kmc, but was 1-based in kmcomp.

* Adds unit tests for v9.0 and v10.0 keyboards for `context(n)` in
  context.

* Adds unit tests for v9.0 and v10.0 keyboards for `context(n)` in
  output. These were already correct but now we can be assured that
  they are being tested.

* Enables code coverage for kmw-compiler, and sets a lower threshold for
  pass because coverage is still just over 70%.
2023-11-03 12:29:56 +07:00
Marc Durdin
1ffa3e2494
Merge pull request #9913 from keymanapp/fix/developer/8147-use-KeymanWeb.Codes
fix(developer): use KeymanWeb.Codes for 17.0+
2023-11-03 12:21:34 +11:00
Darcy Wong
25c54d363c fix(common): Add constants 2023-11-02 17:37:43 +07:00
Darcy Wong
9b8097ea96 fix(developer): import KMX 2023-11-02 16:32:41 +07:00
Darcy Wong
06cf276806
Apply suggestions from code review
Co-authored-by: Marc Durdin <marc@durdin.net>
2023-11-02 13:22:49 +07:00
Marc Durdin
6be9fe6012
Merge pull request #9921 from keymanapp/fix/developer/8000-warn-if-layer-switch-key-missing-id
fix(developer): warn if layer switch key is missing ID
2023-11-02 15:06:23 +11:00
Marc Durdin
328f80847f
Merge pull request #9920 from keymanapp/chore/developer/rename-compiler-messages
chore(developer): rename messages.ts for clarity
2023-11-02 15:06:15 +11:00
Marc Durdin
d9e759a8d2 chore(developer): address review comments 2023-11-02 11:05:23 +07:00
Marc Durdin
15523dfe11 fix(developer): warn if layer switch key is missing ID
Fixes #8000.

In earlier versions of KeymanWeb, it was assumed that layer switch keys
would not necessarily need an identifier, as they would not be
generating a standard KeymanWeb key event. However, this assumption does
not really hold, so we should be warning on missing identifiers for
layer switch keys.
2023-11-01 09:48:13 +07:00
Marc Durdin
0ec76f0761 chore(developer): rename messages.ts for clarity
Renames two messages.ts to kmn-compiler-messages.ts and
kmw-compiler-messages.ts, as otherwise confusion reigns.

Also a minor cleanup of the error messages from touch layout processing,
to clarify message names and return appropriate message for missing
layout file.
2023-11-01 09:30:31 +07:00
Marc Durdin
b26b6a37d7 fix(developer): use KeymanWeb.Codes for 17.0+
Fixes #8147.

Keyboards debug-compiled for web 17.0+ will use `KeymanWeb.Codes.`
instead of `keyman.osk.`.
2023-11-01 04:43:42 +07:00
Marc Durdin
8c1f3c4783 fix(developer): raise error if virtual key in context string
Fixes #7880.

Virtual keys have never been allowed in context. This should be an error
in a keyboard. Note: virtual keys in output are officially unsupported
but still kinda sorta a little bit work in Windows -- but I doubt they
will ever be officially supported.

Also includes small side journey to tidy up names and constants for two
other tests (error_duplicate_group and error_duplicate_store).
2023-10-31 14:04:26 +07:00
Marc Durdin
236b1ebc54 fix(developer): enable and update unit tests
Several unit tests were not running as they were not referenced in
developer/src/test/auto/Makefile. This meant that some tests were
outdated:

* two keyboard fixtures needed recompiling with kmcomp in order to match
* some interfaces had changed slightly, necessitating updates to
  corresponding unit tests.
2023-10-31 13:50:34 +07:00
Darcy Wong
2064ac4556 chore(developer): Cleanup unused ZWNJ 2023-10-30 09:29:30 +07:00
Darcy Wong
4085612ad9 fix(developer): Revise check on special characters 2023-10-30 09:26:22 +07:00
Darcy Wong
1727278af0 chore(developer): Merge remote-tracking branch 'origin/master' into chore/developer/non-printing-chars 2023-10-30 09:25:55 +07:00
Marc Durdin
e321e54458 fix(developer): handle displayMap correctly with 'fill from layout'
Fixes #9851.

Two fixes:

* errors from loading the displayMap from disk should be handled before
  passing result to next function
* temp compile of the .kmn for the 'fill from layout' function should be
  in the same path as the original .kmn, so that referenced files can be
  located
2023-10-26 14:47:53 +07:00
Darcy Wong
7b00306954 fix(developer): Add check for CSpecialText17 2023-10-26 04:46:57 +07:00
Darcy Wong
bf0a0938a8 chore(developer): Add handling for new characters 2023-10-25 14:59:23 +07:00
Marc Durdin
52291b1ccb chore(developer): remove unused xml2js references 2023-10-09 06:34:32 +07:00
Marc Durdin
6c944cff65 chore: Merge branch 'epic/package-metadata' into chore/merge-master-into-package-metadata 2023-10-06 11:52:13 +07:00
Marc Durdin
693aee5c99
Merge branch 'epic/package-metadata' into chore/merge-master-into-package-metadata 2023-10-04 19:34:16 +11:00
Marc Durdin
d4e4992714 chore(common): cleanup final Typescript non-ESM metadata
Fixes #9262.
2023-10-04 12:55:51 +07:00
Marc Durdin
e0c2778199
Merge pull request #9644 from keymanapp/chore/merge-master-into-package-metadata
chore: merge master into package-metadata 🎺
2023-10-04 03:43:45 +02:00
Marc Durdin
7adc9b5d95 feat(developer): support store(&version) '17.0'
Fixes #9541.

Also adds version 16.0 support to the kmcmplib compiler constants, and
unit tests for both versions. Does not add any support for automatic
version feature detection, because that forces an inverted dependency on
the touch layout compilation phase (done in kmc-kmw), which would be a
significant refactor. This may be something we need to support in the
future.
2023-10-02 15:30:07 +07:00
Marc Durdin
d99388fc68
Merge branch 'epic/package-metadata' into chore/merge-master-into-package-metadata 2023-09-29 09:31:53 +02:00
Steven R. Loomis
27508571c9 fix(developer): ldml drop \u1234 🙀
- fix 1..6 char Unicode escapes with an unrolled loop

- for feat(core): ldml drop \u1234 format 🙀  #9515
2023-09-15 15:27:47 -04:00
Steven R. Loomis
213dd7d2ad fix(developer): ldml drop \u1234 🙀
- for now, convert \u{1234} to \u1234 before going into
UnicodeSet.

- for feat(core): ldml drop \u1234 format 🙀  #9515
2023-09-15 14:42:37 -04:00
Marc Durdin
41f370ede6 chore(developer): remove duplicate outFile parameter
Consolidates the outFile parameter that was duplicated in kmc-kmn.
2023-09-01 20:23:43 +04:00
Marc Durdin
a7f8123e56 feat(developer): support building .keyboard_info without source version
Relates to #9351.

Adds support for building a .keyboard_info file without having source
.keyboard_info file:

* Constructs a default source .keyboard_info in memory
* Hints if license is missing
* If LICENSE.md is present, verifies it matches the MIT license text
* Adds project option to turn on or off metadata generation. This will
  default to False for version 1.0 projects, and to True for version 2.0
  projects. This means that the keyboard repository will need a PR to
  enable metadata generation for existing projects in the repository,
  but this is important to avoid breaking builds for existing projects
  that are not in the repository.
* Turns on additional c8 coverage for kmc projects
2023-08-16 12:47:37 +07:00
Marc Durdin
fa19eea873 chore(developer): improve kmc sentry reporting on fatal build errors
kmc already reported unhandled exceptions, but any handled fatal errors
were captured and only reported to the user. It is better to report
these to Sentry as these are still unexpected.

I have refactored all the fatal exception messages in various kmc
modules to use a common mechanism, keeping all the Sentry integration in
kmc, now passing exception data up in the `CompilerEvent.exceptionVar`
property.

* I took the opportunity to rename messages.ts to
  infrastructureMessages.ts

* @types/chai was missing which gave intellisense errors in vscode

* normal exit of kmc now provides an opportunity for error reports to
  Sentry to be finalized

* Added a unit test for fatal errors in kmc

* Added a manual test pathway with `SENTRY_CLIENT_TEST_BUILD_EXCEPTION`
  env var to trip the build fatal error mechanism and verify that it
  looks ok; the following shows test runs demonstrate how fatal build
  errors are reported:

```
mcdurdin@THARK MINGW64 /c/Projects/keyman/app/developer/src/kmc (chore/developer/report-fatal-compiler-errors-to-sentry)
$ SENTRY_CLIENT_TEST_BUILD_EXCEPTION=1 node . --error-reporting build
fatal KM05001: Unexpected exception: Error: Test exception from SENTRY_CLIENT_TEST_BUILD_EXCEPTION

Call stack:
Error: Test exception from SENTRY_CLIENT_TEST_BUILD_EXCEPTION
    at build (file:///C:/Projects/keyman/app/developer/src/kmc/build/src/commands/build.js:78:19)
    at Command.<anonymous> (file:///C:/Projects/keyman/app/developer/src/kmc/build/src/commands/build.js:66:24)
    at Command.listener [as _actionHandler] (C:\Projects\keyman\app\node_modules\commander\lib\command.js:482:17)
    at C:\Projects\keyman\app\node_modules\commander\lib\command.js:1283:65
    at Command._chainOrCall (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1177:12)
    at Command._parseCommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1283:27)
    at C:\Projects\keyman\app\node_modules\commander\lib\command.js:1081:27
    at Command._chainOrCall (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1177:12)
    at Command._dispatchSubcommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1077:23)
    at Command._parseCommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1248:19)

    This error has been automatically reported to the Keyman team.
      Identifier:  6f0fca1a26694c22b03f02b2463d39c5
      Application: Keyman Developer
      Reported at: https://sentry.io/organizations/keyman/projects/keyman-developer/events/6f0fca1a26694c22b03f02b2463d39c5/

mcdurdin@THARK MINGW64 /c/Projects/keyman/app/developer/src/kmc (chore/developer/report-fatal-compiler-errors-to-sentry)
$ SENTRY_CLIENT_TEST_BUILD_EXCEPTION=1 node . --no-error-reporting build
fatal KM05001: Unexpected exception: Error: Test exception from SENTRY_CLIENT_TEST_BUILD_EXCEPTION

Call stack:
Error: Test exception from SENTRY_CLIENT_TEST_BUILD_EXCEPTION
    at build (file:///C:/Projects/keyman/app/developer/src/kmc/build/src/commands/build.js:78:19)
    at Command.<anonymous> (file:///C:/Projects/keyman/app/developer/src/kmc/build/src/commands/build.js:66:24)
    at Command.listener [as _actionHandler] (C:\Projects\keyman\app\node_modules\commander\lib\command.js:482:17)
    at C:\Projects\keyman\app\node_modules\commander\lib\command.js:1283:65
    at Command._chainOrCall (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1177:12)
    at Command._parseCommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1283:27)
    at C:\Projects\keyman\app\node_modules\commander\lib\command.js:1081:27
    at Command._chainOrCall (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1177:12)
    at Command._dispatchSubcommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1077:23)
    at Command._parseCommand (C:\Projects\keyman\app\node_modules\commander\lib\command.js:1248:19)
```
2023-08-09 09:34:44 +07:00
Marc Durdin
cdf026c2ba chore: Merge branch 'feature-kmc-kmw' into chore/merge-master-into-feature-kmc-kmw-a17s18 2023-08-04 12:54:10 +07:00
Steven R. Loomis
1bb3ae548a fix(developer): more wasm uset fixes 🙀
- While i'm in the neighborhood..
- use 'free' besides just 'malloc' (sure enough..)
- move wasmExports into this
- add code coverage for failed sizes
- cleanup
2023-07-31 13:19:08 -05:00
Steven R. Loomis
51774b637b
Apply suggestions from code review
Co-authored-by: Marc Durdin <marc@durdin.net>
2023-07-31 22:23:37 -05:00