Commit graph

4256 commits

Author SHA1 Message Date
Marc Durdin
0d96437cb8 chore: workaround npm/cli#3466 when bundling internal deps
Works around npm/cli#3466 when bundling internal dependencies using the
bundleDependencies package.json property.

This change works in tandem with the npm pack/publish process -- when we
run `developer/src/kmc/build.sh publish` (or `pack`), we end up with
`npm version` stomping on all our package.json files, so the repo is
dirty after this. We need a copy of the top-level package.json before
this stomping happens, in order to get a simple map of the location of
each of our internal dependencies, from the `dependencies` property (it
would be possible to figure this out with a lot more parsing of
our package.json files, but this is simpler).

This means, in future, we should avoid publishing our internal
dependencies such as those under common/ to npm, as they serve no
practical purpose there.
2023-09-01 17:48:35 +04:00
Marc Durdin
d7f73f3078 chore: workaround npm/cli#3466 when bundling internal deps
Works around npm/cli#3466 when bundling internal dependencies using the
bundleDependencies package.json property.

This change works in tandem with the npm pack/publish process -- when we
run `developer/src/kmc/build.sh publish` (or `pack`), we end up with
`npm version` stomping on all our package.json files, so the repo is
dirty after this. We need a copy of the top-level package.json before
this stomping happens, in order to get a simple map of the location of
each of our internal dependencies, from the `dependencies` property (it
would be possible to figure this out with a lot more parsing of
our package.json files, but this is simpler).

This means, in future, we should avoid publishing our internal
dependencies such as those under common/ to npm, as they serve no
practical purpose there.
2023-09-01 20:30:43 +08:00
Marc Durdin
508588ef26 chore(developer): developer-utils as private package 2023-09-01 15:58:22 +07:00
Marc Durdin
6590658da4 chore(developer): add developer-utils package to publish 2023-09-01 10:12:12 +07:00
Marc Durdin
ff38c6d32d
Merge pull request #9479 from keymanapp/chore/developer/cleanup-kmc-keyboard-info-interface
chore(developer): cleanup kmc-keyboard-info interface 🎺
2023-09-01 13:06:01 +10:00
Marc Durdin
651af2ffd3
Merge pull request #9476 from keymanapp/feat/developer/keyboard-info-markdown
feat(developer): convert markdown description to html 🎺
2023-09-01 13:05:51 +10:00
Marc Durdin
6e8cc167a9
Merge pull request #9474 from keymanapp/feat/developer/compile-without-source-keyboard-info
feat(developer): support building .keyboard_info without source version 🎺
2023-09-01 13:05:43 +10:00
Marc Durdin
0913770208
Merge pull request #9471 from keymanapp/chore/developer/keyboard-info-font-examples-cleanup
chore(developer): cleanup keyboard_info schema 🎺
2023-09-01 13:05:36 +10:00
Marc Durdin
722f72b47a
Merge pull request #9470 from keymanapp/feat/developer/package-license
feat(developer): add LicenseFile as property of package 🎺
2023-09-01 13:05:29 +10:00
Marc Durdin
920a435fb6
Merge pull request #9463 from keymanapp/feat/developer/package-keyboard-web-fonts
feat(developer): add web font references to package 🎺
2023-09-01 13:05:22 +10:00
Marc Durdin
a0f7d25ead
Merge pull request #9459 from keymanapp/feat/developer/extra-package-metadata
feat(developer): additional metadata in keyboard packages 🎺
2023-09-01 13:05:12 +10:00
Marc Durdin
ee4108598e
Merge pull request #9452 from keymanapp/feat/developer/keyboard-info-dedup
chore(common): remove deprecated fields from keyboard_info 🎺
2023-09-01 13:05:05 +10:00
Marc Durdin
56d64da9a7 chore(developer): npm install and fix import 2023-08-30 16:31:43 +10:00
Marc Durdin
232c918c31 feat(developer): support isRTL and license fields in .model_info
Adds support for calculating isRTL and license fields in .model_info
compiler.

Also:
* establishes @keymanapp/developer-utils shared module
* moves license validation into @keymanapp/developer-utils
* refactors kmc-model-info to a class and general cleanup
2023-08-29 16:37:37 +10:00
Marc Durdin
1531e88f70 feat(developer): eliminate source .model_info and .keyboard_info files
Removes all references to source .keyboard_info and .model_info files in
the kmc compiler and types. Updates the model info compiler to support
building purely from model sources (isRTL, license fields are TODO).
2023-08-29 15:37:31 +10:00
Steven R. Loomis
90800acb6d
Update developer/src/kmc-ldml/src/compiler/messages.ts
Co-authored-by: rc-swag <58423624+rc-swag@users.noreply.github.com>
2023-08-21 11:36:35 -05:00
Steven R. Loomis
b6855e121f feat(core): ldml: support <display id=...> in the 'disp' section 🙀
- "recent" addition to CLDR DTD

Fixes: #8717
2023-08-18 17:02:35 -05:00
Marc Durdin
c42ab69819 chore(developer): seed epic branch 2023-08-18 08:09:17 +07:00
Marc Durdin
e9e7d5b85f chore(developer): optional lastCommitDate 2023-08-17 13:32:40 +07:00
Marc Durdin
6624b8b344 feat(developer): use git's last commit date for keyboard_info 2023-08-17 13:25:29 +07:00
Marc Durdin
b87667ac76 chore(developer): cleanup kmc-keyboard-info interface
Moves responsibility for loading .kps into kmc-keyboard-info, away from
the caller, and removes other fields with kmc-keyboard-info can
calculate by itself.

Have not moved project parsing into kmc-keyboard-info, because that's a
bigger job, as currently that is mostly happening within kmc itself. A
project for a future version I think.
2023-08-17 11:12:15 +07:00
Marc Durdin
0d6894ad89 chore(developer): fixup call to KeyboardInfoCompiler 2023-08-17 10:28:18 +07:00
Marc Durdin
0e382ba642 chore(developer): fixup call to KeyboardInfoCompiler 2023-08-17 10:26:01 +07:00
Marc Durdin
72efe0cd5c feat(developer): markdown conversion for description in package editor 2023-08-17 10:17:52 +07:00
Marc Durdin
47e05a7b05 feat(developer): build .keyboard_info without source .keyboard_info
Also fixes a file reference issue in kmpJson.options, where paths were
stripped too early in the process.

Removes a now-irrelevant unit test for keyboard_info.

TODO: markdown to html during the keyboard_info build.
2023-08-16 16:01:14 +07: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
395b76df05 chore(developer): cleanup keyboard_info schema
* Removes font size
* Restricts font source to array
* Removes example
* Add examples
* Loosen structure of KeyboardExample
2023-08-16 09:26:39 +07:00
Marc Durdin
158bc28e85 feat(developer): add LicenseFile as property of package
Adds license file to .kps, kmp.json, kmc-package, package editor, and
new project templates. The intent is for LICENSE.md to be the file used,
and for any keyboards on keymanapp/keyboards, it should always be a
standard MIT license.
2023-08-16 09:13:38 +07:00
Marc Durdin
0305cd0c58
Merge branch 'feat/developer/extra-package-metadata' into feat/developer/package-keyboard-web-fonts 2023-08-15 18:35:01 +10:00
Marc Durdin
826a1e2da0
Merge branch 'feat/developer/keyboard-info-dedup' into feat/developer/extra-package-metadata 2023-08-15 18:34:54 +10:00
Marc Durdin
194fd1a8bf chore: update unit test - will be removed later 2023-08-15 15:34:38 +07:00
Marc Durdin
fea10f0eeb feat(developer): add web font references to package
While a package supports a .ttf or .otf font for the OSK and Display
fonts for use within the Keyman apps, on websites it also supports .woff
and .woff2. This change makes it possible to specify a set of fonts for
a package which will be provided through api.keyman.com to websites.

This means that .woff and .woff2 fonts may also be included in the
package and may not be used on target devices at this time, it further
opens the pathway to deploying .kmp packages to web in the future.

The deployment stage of keymanapp/keyboards will require a new phase to
copy web fonts from packages to s.keyman.com.
2023-08-15 15:13:24 +07:00
Marc Durdin
8a9243eba5 chore(developer): tweak Relationship values 2023-08-14 14:31:17 +07:00
Marc Durdin
38c3415eed feat(developer): add relatedPackages metadata
Adds relatedPackages support to:
* .kps schema
* .kps file format for Typescript
* kmp.json file format for Typescript
* kmc-package compiler
* Package Editor
2023-08-14 14:18:01 +07:00
Marc Durdin
d838df1c00 feat(developer): add editor of Package Description and Examples 2023-08-14 12:12:08 +07:00
Marc Durdin
bf1d5b0f7a chore(developer): fix casing 2023-08-14 10:06:32 +07:00
Marc Durdin
4d71048daf chore(developer): fix casing 2023-08-14 10:06:17 +07:00
Marc Durdin
675f6bc91e feat(developer): description, font and example metadata in packages
Adds info.description, options.fonts, keyboard.examples metadata to
.kps and kmp.json files, updates schemas, and Typescript compiler.
2023-08-14 09:23:20 +07:00
Marc Durdin
25717d1d1c chore: fix unit test 2023-08-11 14:06:22 +07:00
Marc Durdin
aa9788ad46 chore(common): remove deprecated fields from keyboard_info
Removes the following fields:
* legacyId
* documentationFilename
* documentationFileSize
* links
* related[].note

None of these fields are needed any longer; see #9351 for steps to
remove data.

Eliminates difference between keyboard_info source and distribution,
renaming to keyboard_info.schema.json, and updating the required members
of the json accordingly.

Will have corresponding commits in keyman.com, api.keyman.com,
help.keyman.com, and keyboards repositories.
2023-08-11 10:34:38 +07:00
Steven R. Loomis
f21bd8212d
Merge branch 'master' into feat/core/9119-marker-core-epic-ldml 2023-08-09 11:03:53 -05:00
Marc Durdin
add9a43f9e
Merge pull request #9441 from keymanapp/chore/developer/report-fatal-compiler-errors-to-sentry
chore(developer): improve kmc sentry reporting on fatal build errors
2023-08-09 18:35:53 +10:00
Marc Durdin
0692b8200a chore: address review comments 2023-08-09 15:35:33 +07:00
Marc Durdin
087c68f4ca
chore: Apply suggestions from code review 2023-08-09 18:32:20 +10: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
c02f5ab419 feat(developer): add 'default' property for longpress keys
Fixes #9430.

Adds a 'default' property to subkeys, only used by longpress-type
subkeys:

* Added property to schema and readers/writers
* Added property to touch layout validator
* Added editor for property to layout builder
2023-08-08 14:20:52 +07:00
Steven R. Loomis
93b1771570
Merge branch 'master' into feat/core/9119-marker-core-epic-ldml 2023-08-07 16:40:07 -05:00
Marc Durdin
49d471ba17
Merge pull request #8954 from keymanapp/feature-kmc-kmw
epic: kmc-kmw KeymanWeb compiler in Typescript 🗜
2023-08-07 11:37:39 +10:00
Steven R. Loomis
d21fd6bbc4 Merge remote-tracking branch 'upstream/master' into feat/core/9119-marker-core-epic-ldml 2023-08-04 14:14:07 -05: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