@keymanapp/kmc-package 17.0.154-alpha → 17.0.156-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/build/src/compiler/cp1252.d.ts +10 -0
  2. package/build/src/compiler/cp1252.d.ts.map +1 -0
  3. package/build/src/compiler/cp1252.js +289 -0
  4. package/build/src/compiler/cp1252.js.map +1 -0
  5. package/build/src/compiler/kmp-compiler.d.ts +28 -25
  6. package/build/src/compiler/kmp-compiler.d.ts.map +1 -1
  7. package/build/src/compiler/kmp-compiler.js +333 -265
  8. package/build/src/compiler/kmp-compiler.js.map +1 -1
  9. package/build/src/compiler/kmp-inf-writer.d.ts +24 -0
  10. package/build/src/compiler/kmp-inf-writer.d.ts.map +1 -0
  11. package/build/src/compiler/kmp-inf-writer.js +145 -0
  12. package/build/src/compiler/kmp-inf-writer.js.map +1 -0
  13. package/build/src/compiler/kmx-keyboard-metadata.d.ts +6 -0
  14. package/build/src/compiler/kmx-keyboard-metadata.d.ts.map +1 -0
  15. package/build/src/compiler/kmx-keyboard-metadata.js +18 -0
  16. package/build/src/compiler/kmx-keyboard-metadata.js.map +1 -0
  17. package/build/src/compiler/messages.d.ts +114 -114
  18. package/build/src/compiler/messages.d.ts.map +1 -1
  19. package/build/src/compiler/messages.js +70 -67
  20. package/build/src/compiler/messages.js.map +1 -1
  21. package/build/src/compiler/package-keyboard-target-validator.d.ts +15 -0
  22. package/build/src/compiler/package-keyboard-target-validator.d.ts.map +1 -0
  23. package/build/src/compiler/package-keyboard-target-validator.js +36 -0
  24. package/build/src/compiler/package-keyboard-target-validator.js.map +1 -0
  25. package/build/src/compiler/package-metadata-collector.d.ts +19 -0
  26. package/build/src/compiler/package-metadata-collector.d.ts.map +1 -0
  27. package/build/src/compiler/package-metadata-collector.js +78 -0
  28. package/build/src/compiler/package-metadata-collector.js.map +1 -0
  29. package/build/src/compiler/package-metadata-updater.d.ts +7 -0
  30. package/build/src/compiler/package-metadata-updater.d.ts.map +1 -0
  31. package/build/src/compiler/package-metadata-updater.js +13 -0
  32. package/build/src/compiler/package-metadata-updater.js.map +1 -0
  33. package/build/src/compiler/package-validation.d.ts +18 -15
  34. package/build/src/compiler/package-validation.d.ts.map +1 -1
  35. package/build/src/compiler/package-validation.js +162 -152
  36. package/build/src/compiler/package-validation.js.map +1 -1
  37. package/build/src/compiler/package-version-validator.d.ts +23 -0
  38. package/build/src/compiler/package-version-validator.d.ts.map +1 -0
  39. package/build/src/compiler/package-version-validator.js +92 -0
  40. package/build/src/compiler/package-version-validator.js.map +1 -0
  41. package/build/src/compiler/redist-files.d.ts +20 -18
  42. package/build/src/compiler/redist-files.d.ts.map +1 -1
  43. package/build/src/compiler/redist-files.js +59 -57
  44. package/build/src/compiler/redist-files.js.map +1 -1
  45. package/build/src/compiler/web-keyboard-metadata.d.ts +22 -0
  46. package/build/src/compiler/web-keyboard-metadata.d.ts.map +1 -0
  47. package/build/src/compiler/web-keyboard-metadata.js +34 -0
  48. package/build/src/compiler/web-keyboard-metadata.js.map +1 -0
  49. package/build/src/main.d.ts +5 -3
  50. package/build/src/main.d.ts.map +1 -1
  51. package/build/src/main.js +5 -3
  52. package/build/src/main.js.map +1 -1
  53. package/package.json +7 -8
  54. package/build/src/compiler/keyman-targets.d.ts +0 -18
  55. package/build/src/compiler/keyman-targets.d.ts.map +0 -1
  56. package/build/src/compiler/keyman-targets.js +0 -53
  57. package/build/src/compiler/keyman-targets.js.map +0 -1
  58. package/build/src/compiler/package-version-validation.d.ts +0 -24
  59. package/build/src/compiler/package-version-validation.d.ts.map +0 -1
  60. package/build/src/compiler/package-version-validation.js +0 -153
  61. package/build/src/compiler/package-version-validation.js.map +0 -1
@@ -1,57 +1,59 @@
1
- /**
2
- * This is a set of known redistributable files for Keyman for Windows that
3
- * should not be included in packages. It is not critical that this list matches
4
- * the current deployment; it is just for warning against accidental inclusion
5
- * of these files by package authors. Some redistributable files have been
6
- * intentionally excluded because they could legitimately be a different file
7
- * with the same name.
8
- *
9
- * This matches behaviour from the legacy package compiler; we may want to
10
- * reconsider how this is done in the future.
11
- *
12
- * These lists have been constructed from 17.0.109 alpha build. Filenames
13
- * intentionally in lower case.
14
- */
15
- export const keymanForWindowsInstallerFiles = [
16
- 'keymandesktop.msi',
17
- 'keymanengine.msm'
18
- ];
19
- export const keymanEngineForWindowsFiles = [
20
- 'base.xslt',
21
- 'crashpad_handler.exe',
22
- 'keyman-debug-etw.man',
23
- 'keyman.exe',
24
- 'keyman32.dll',
25
- 'keyman64.dll',
26
- 'keymanmc.dll',
27
- 'keymanx64.exe',
28
- 'kmcomapi.dll',
29
- 'kmcomapi.x64.dll',
30
- 'kmrefresh.x64.exe',
31
- 'kmrefresh.x86.exe',
32
- 'kmtip.dll',
33
- 'kmtip64.dll',
34
- 'mcompile.exe',
35
- 'sentry.dll',
36
- 'sentry.x64.dll',
37
- 'si_browsers.xslt',
38
- 'si_fonts.xslt',
39
- 'si_hookdlls.xslt',
40
- 'si_keyman.xslt',
41
- 'si_language.xslt',
42
- 'si_office.xslt',
43
- 'si_overview.xslt',
44
- 'si_processes.xslt',
45
- 'si_processes_x64.xslt',
46
- 'si_startup.xslt',
47
- 'tsysinfo.exe',
48
- ];
49
- export const keymanForWindowsRedistFiles = [
50
- 'desktop_resources.dll',
51
- 'keymandesktop.chm',
52
- 'kmbrowserhost.exe',
53
- 'kmconfig.exe',
54
- 'kmshell.exe',
55
- 'unicodedata.mdb',
56
- ];
57
- //# sourceMappingURL=redist-files.js.map
1
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1ee5d315-697f-5b0d-b69c-234149379e12")}catch(e){}}();
2
+ /**
3
+ * This is a set of known redistributable files for Keyman for Windows that
4
+ * should not be included in packages. It is not critical that this list matches
5
+ * the current deployment; it is just for warning against accidental inclusion
6
+ * of these files by package authors. Some redistributable files have been
7
+ * intentionally excluded because they could legitimately be a different file
8
+ * with the same name.
9
+ *
10
+ * This matches behaviour from the legacy package compiler; we may want to
11
+ * reconsider how this is done in the future.
12
+ *
13
+ * These lists have been constructed from 17.0.109 alpha build. Filenames
14
+ * intentionally in lower case.
15
+ */
16
+ export const keymanForWindowsInstallerFiles = [
17
+ 'keymandesktop.msi',
18
+ 'keymanengine.msm'
19
+ ];
20
+ export const keymanEngineForWindowsFiles = [
21
+ 'base.xslt',
22
+ 'crashpad_handler.exe',
23
+ 'keyman-debug-etw.man',
24
+ 'keyman.exe',
25
+ 'keyman32.dll',
26
+ 'keyman64.dll',
27
+ 'keymanmc.dll',
28
+ 'keymanx64.exe',
29
+ 'kmcomapi.dll',
30
+ 'kmcomapi.x64.dll',
31
+ 'kmrefresh.x64.exe',
32
+ 'kmrefresh.x86.exe',
33
+ 'kmtip.dll',
34
+ 'kmtip64.dll',
35
+ 'mcompile.exe',
36
+ 'sentry.dll',
37
+ 'sentry.x64.dll',
38
+ 'si_browsers.xslt',
39
+ 'si_fonts.xslt',
40
+ 'si_hookdlls.xslt',
41
+ 'si_keyman.xslt',
42
+ 'si_language.xslt',
43
+ 'si_office.xslt',
44
+ 'si_overview.xslt',
45
+ 'si_processes.xslt',
46
+ 'si_processes_x64.xslt',
47
+ 'si_startup.xslt',
48
+ 'tsysinfo.exe',
49
+ ];
50
+ export const keymanForWindowsRedistFiles = [
51
+ 'desktop_resources.dll',
52
+ 'keymandesktop.chm',
53
+ 'kmbrowserhost.exe',
54
+ 'kmconfig.exe',
55
+ 'kmshell.exe',
56
+ 'unicodedata.mdb',
57
+ ];
58
+ //# debugId=1ee5d315-697f-5b0d-b69c-234149379e12
59
+ //# sourceMappingURL=redist-files.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redist-files.js","sourceRoot":"","sources":["../../../src/compiler/redist-files.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MACL,8BAA8B,GAAa;IACzC,mBAAmB;IACnB,kBAAkB;CACnB,CAAC;AAGJ,MAAM,CAAC,MACL,2BAA2B,GAAa;IACtC,WAAW;IACX,sBAAsB;IACtB,sBAAsB;IACtB,YAAY;IACZ,cAAc;IACd,cAAc;IACd,cAAc;IACd,eAAe;IACf,cAAc;IACd,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,WAAW;IACX,aAAa;IACb,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,uBAAuB;IACvB,iBAAiB;IACjB,cAAc;CACf,CAAC;AAEJ,MAAM,CAAC,MACL,2BAA2B,GAAa;IACtC,uBAAuB;IACvB,mBAAmB;IACnB,mBAAmB;IACnB,cAAc;IACd,aAAa;IACb,iBAAiB;CAClB,CAAC"}
1
+ {"debug_id":"1ee5d315-697f-5b0d-b69c-234149379e12","file":"redist-files.js","mappings":";AACA;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MACL,8BAA8B,GAAa;IACzC,mBAAmB;IACnB,kBAAkB;CACnB,CAAC;AAGJ,MAAM,CAAC,MACL,2BAA2B,GAAa;IACtC,WAAW;IACX,sBAAsB;IACtB,sBAAsB;IACtB,YAAY;IACZ,cAAc;IACd,cAAc;IACd,cAAc;IACd,eAAe;IACf,cAAc;IACd,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,WAAW;IACX,aAAa;IACb,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,uBAAuB;IACvB,iBAAiB;IACjB,cAAc;CACf,CAAC;AAEJ,MAAM,CAAC,MACL,2BAA2B,GAAa;IACtC,uBAAuB;IACvB,mBAAmB;IACnB,mBAAmB;IACnB,cAAc;IACd,aAAa;IACb,iBAAiB;CAClB,CAAC","names":[],"sourceRoot":"","sources":["../../../src/compiler/redist-files.ts"],"version":3}
@@ -0,0 +1,22 @@
1
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f6a504d6-1cad-5a8a-b9f8-c7ddd15d19f8")}catch(e){}}();
2
+ export interface WebKeyboardMetadata {
3
+ keyboardName: string;
4
+ keyboardVersion: string;
5
+ minKeymanVersion: string;
6
+ isRtl: boolean;
7
+ isMnemonic: boolean;
8
+ targets?: string;
9
+ }
10
+ /**
11
+ * This function parses the JavaScript to do a best-effort retrieval of
12
+ * keyboard data. It assumes a format similar to what the compiler produces.
13
+ * It may be possible for it to miss something if the code is hand written and
14
+ * diverges enough from the compiler code (e.g. if there is a comment between
15
+ * a member variable and its value or something crazy like that).
16
+ *
17
+ * Long-term, we will require package to include .kmx so this kind of parsing
18
+ * won't be necessary.
19
+ */
20
+ export declare function getCompiledWebKeyboardMetadata(js: string): WebKeyboardMetadata;
21
+ //# debugId=f6a504d6-1cad-5a8a-b9f8-c7ddd15d19f8
22
+ //# sourceMappingURL=web-keyboard-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"debug_id":"f6a504d6-1cad-5a8a-b9f8-c7ddd15d19f8","file":"web-keyboard-metadata.d.ts","mappings":";AACA,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,CAsB5E","names":[],"sourceRoot":"","sources":["../../../src/compiler/web-keyboard-metadata.ts"],"version":3}
@@ -0,0 +1,34 @@
1
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="589f031e-f15e-5395-9dec-c413db88d9a1")}catch(e){}}();
2
+ ;
3
+ /**
4
+ * This function parses the JavaScript to do a best-effort retrieval of
5
+ * keyboard data. It assumes a format similar to what the compiler produces.
6
+ * It may be possible for it to miss something if the code is hand written and
7
+ * diverges enough from the compiler code (e.g. if there is a comment between
8
+ * a member variable and its value or something crazy like that).
9
+ *
10
+ * Long-term, we will require package to include .kmx so this kind of parsing
11
+ * won't be necessary.
12
+ */
13
+ export function getCompiledWebKeyboardMetadata(js) {
14
+ const nameRegex = /this.KN\s*=\s*(['"])(.*?)\1/;
15
+ const kbverRegex = /this.KBVER\s*=\s*(['"])(.*?)\1/;
16
+ const minverRegex = /this.KMINVER\s*=\s*([''"])(.*?)\1/;
17
+ const rtlRegex = /this.KRTL\s*=\s*(.*?)\s*;/;
18
+ const mnemonicRegex = /this.KM\s*=\s*(.*?)\s*;/;
19
+ const name = nameRegex.exec(js);
20
+ const kbver = kbverRegex.exec(js);
21
+ const minver = minverRegex.exec(js);
22
+ const rtl = rtlRegex.exec(js);
23
+ const mnemonic = mnemonicRegex.exec(js);
24
+ const SKeymanVersion70 = '7.0';
25
+ return {
26
+ keyboardName: name ? name[2] : null,
27
+ keyboardVersion: kbver ? kbver[2] : null,
28
+ minKeymanVersion: minver ? minver[2] : SKeymanVersion70,
29
+ isRtl: !!(rtl && rtl[1].match(/^(1|true)$/)),
30
+ isMnemonic: !!(mnemonic && mnemonic[1].match(/^(1|true)$/))
31
+ };
32
+ }
33
+ //# debugId=589f031e-f15e-5395-9dec-c413db88d9a1
34
+ //# sourceMappingURL=web-keyboard-metadata.js.map
@@ -0,0 +1 @@
1
+ {"debug_id":"589f031e-f15e-5395-9dec-c413db88d9a1","file":"web-keyboard-metadata.js","mappings":";AAQC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,8BAA8B,CAAC,EAAU;IACrD,MAAM,SAAS,GAAK,6BAA6B,CAAC;IAClD,MAAM,UAAU,GAAI,gCAAgC,CAAC;IACrD,MAAM,WAAW,GAAG,mCAAmC,CAAC;IACxD,MAAM,QAAQ,GAAM,2BAA2B,CAAC;IAChD,MAAM,aAAa,GAAG,yBAAyB,CAAC;IAEhD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAExC,MAAM,gBAAgB,GAAG,KAAK,CAAC;IAE/B,OAAO;QACL,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACxC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACvD,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5C,UAAU,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC","names":[],"sourceRoot":"","sources":["../../../src/compiler/web-keyboard-metadata.ts"],"version":3}
@@ -1,3 +1,5 @@
1
- export { KmpCompiler } from "./compiler/kmp-compiler.js";
2
- export { PackageValidation } from "./compiler/package-validation.js";
3
- //# sourceMappingURL=main.d.ts.map
1
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fbf3cc87-0b8e-5315-9cf5-8f87f7cbccda")}catch(e){}}();
2
+ export { KmpCompiler } from "./compiler/kmp-compiler.js";
3
+ export { PackageValidation } from "./compiler/package-validation.js";
4
+ //# debugId=fbf3cc87-0b8e-5315-9cf5-8f87f7cbccda
5
+ //# sourceMappingURL=main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"debug_id":"fbf3cc87-0b8e-5315-9cf5-8f87f7cbccda","file":"main.d.ts","mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC","names":[],"sourceRoot":"","sources":["../../src/main.ts"],"version":3}
package/build/src/main.js CHANGED
@@ -1,3 +1,5 @@
1
- export { KmpCompiler } from "./compiler/kmp-compiler.js";
2
- export { PackageValidation } from "./compiler/package-validation.js";
3
- //# sourceMappingURL=main.js.map
1
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e4a5fce7-4d69-50f5-a11d-ac6e7252230c")}catch(e){}}();
2
+ export { KmpCompiler } from "./compiler/kmp-compiler.js";
3
+ export { PackageValidation } from "./compiler/package-validation.js";
4
+ //# debugId=e4a5fce7-4d69-50f5-a11d-ac6e7252230c
5
+ //# sourceMappingURL=main.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"debug_id":"e4a5fce7-4d69-50f5-a11d-ac6e7252230c","file":"main.js","mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC","names":[],"sourceRoot":"","sources":["../../src/main.ts"],"version":3}
package/package.json CHANGED
@@ -30,20 +30,20 @@
30
30
  "url": "https://github.com/keymanapp/keyman/issues"
31
31
  },
32
32
  "dependencies": {
33
- "jszip": "^3.7.0",
34
- "@keymanapp/common-types": "17.0.154-alpha"
33
+ "@keymanapp/common-types": "17.0.156-alpha",
34
+ "jszip": "^3.7.0"
35
35
  },
36
36
  "devDependencies": {
37
+ "@keymanapp/developer-test-helpers": "17.0.156-alpha",
37
38
  "@types/chai": "^4.1.7",
38
39
  "@types/mocha": "^5.2.7",
39
- "@types/node": "^10.14.6",
40
+ "@types/node": "^20.4.1",
40
41
  "c8": "^7.12.0",
41
42
  "chai": "^4.3.4",
42
43
  "chalk": "^2.4.2",
43
44
  "mocha": "^8.4.0",
44
45
  "ts-node": "^9.1.1",
45
- "typescript": "^4.9.5",
46
- "@keymanapp/developer-test-helpers": "17.0.154-alpha"
46
+ "typescript": "^4.9.5"
47
47
  },
48
48
  "mocha": {
49
49
  "spec": "build/test/**/test-*.js",
@@ -59,13 +59,12 @@
59
59
  "exclude-after-remap": true,
60
60
  "exclude": [
61
61
  "test/",
62
- "src/kmp-json-file.ts",
63
- "src/kps-file.ts"
62
+ "src/main.ts"
64
63
  ]
65
64
  },
66
65
  "repository": {
67
66
  "type": "git",
68
67
  "url": "git+https://github.com/keymanapp/keyman.git"
69
68
  },
70
- "version": "17.0.154-alpha"
69
+ "version": "17.0.156-alpha"
71
70
  }
@@ -1,18 +0,0 @@
1
- export declare enum KeymanTarget {
2
- any = "any",
3
- windows = "windows",
4
- macosx = "macosx",
5
- linux = "linux",
6
- web = "web",
7
- iphone = "iphone",
8
- ipad = "ipad",
9
- androidphone = "androidphone",
10
- androidtablet = "androidtablet",
11
- mobile = "mobile",
12
- desktop = "desktop",
13
- tablet = "tablet"
14
- }
15
- export declare const AllKeymanTargets: KeymanTarget[], TouchKeymanTargets: KeymanTarget[], KMXKeymanTargets: KeymanTarget[], KMWKeymanTargets: KeymanTarget[], KeymanTargetsUsingKVK: KeymanTarget[], SKeymanTargetNames: {
16
- [index: string]: string;
17
- };
18
- //# sourceMappingURL=keyman-targets.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keyman-targets.d.ts","sourceRoot":"","sources":["../../../src/compiler/keyman-targets.ts"],"names":[],"mappings":"AAKA,oBACE,YAAY;IACV,GAAG,QAAQ;IACX,OAAO,YAAY;IAAE,MAAM,WAAW;IAAE,KAAK,UAAU;IACvD,GAAG,QAAQ;IAAE,MAAM,WAAW;IAAE,IAAI,SAAS;IAAE,YAAY,iBAAiB;IAAE,aAAa,kBAAkB;IAC7G,MAAM,WAAW;IAAE,OAAO,YAAY;IAAE,MAAM,WAAW;CAC1D;AAEH,eAAO,MAEL,gBAAgB,EAAE,YAAY,EAK7B,EAED,kBAAkB,EAAE,YAAY,EAG/B,EAGD,gBAAgB,EAAE,YAAY,EAE7B,EAGD,gBAAgB,EAAE,YAAY,EAG7B,EAGD,qBAAqB,EAAE,YAAY,EAElC,EAID,kBAAkB,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAO5C,CAAC"}
@@ -1,53 +0,0 @@
1
- //
2
- // This mirrors UKeymanTargets.pas
3
- //
4
- export var KeymanTarget;
5
- (function (KeymanTarget) {
6
- KeymanTarget["any"] = "any";
7
- KeymanTarget["windows"] = "windows";
8
- KeymanTarget["macosx"] = "macosx";
9
- KeymanTarget["linux"] = "linux";
10
- KeymanTarget["web"] = "web";
11
- KeymanTarget["iphone"] = "iphone";
12
- KeymanTarget["ipad"] = "ipad";
13
- KeymanTarget["androidphone"] = "androidphone";
14
- KeymanTarget["androidtablet"] = "androidtablet";
15
- KeymanTarget["mobile"] = "mobile";
16
- KeymanTarget["desktop"] = "desktop";
17
- KeymanTarget["tablet"] = "tablet";
18
- })(KeymanTarget || (KeymanTarget = {}));
19
- ;
20
- export const
21
- // Note: if these change, update the copied values in KeyboardParser.pas accordingly
22
- AllKeymanTargets = [
23
- KeymanTarget.any,
24
- KeymanTarget.windows, KeymanTarget.macosx, KeymanTarget.linux,
25
- KeymanTarget.web, KeymanTarget.iphone, KeymanTarget.ipad, KeymanTarget.androidphone, KeymanTarget.androidtablet,
26
- KeymanTarget.mobile, KeymanTarget.desktop, KeymanTarget.tablet
27
- ], TouchKeymanTargets = [
28
- KeymanTarget.iphone, KeymanTarget.ipad, KeymanTarget.androidphone, KeymanTarget.androidtablet,
29
- KeymanTarget.mobile, KeymanTarget.tablet
30
- ],
31
- // Compile to .kmx
32
- KMXKeymanTargets = [
33
- KeymanTarget.windows, KeymanTarget.macosx, KeymanTarget.linux, KeymanTarget.desktop
34
- ],
35
- // Compile to .js
36
- KMWKeymanTargets = [
37
- KeymanTarget.web, KeymanTarget.iphone, KeymanTarget.ipad, KeymanTarget.androidphone, KeymanTarget.androidtablet,
38
- KeymanTarget.mobile, KeymanTarget.tablet
39
- ],
40
- // Supports .kvks
41
- KeymanTargetsUsingKVK = [
42
- KeymanTarget.windows, KeymanTarget.macosx, KeymanTarget.linux, KeymanTarget.desktop, KeymanTarget.web
43
- ],
44
- // Friendly names for targets, e.g. for documentation
45
- SKeymanTargetNames = {
46
- [KeymanTarget.any]: 'All',
47
- [KeymanTarget.windows]: 'Windows', [KeymanTarget.macosx]: 'macOS', [KeymanTarget.linux]: 'Linux',
48
- [KeymanTarget.web]: 'Web', [KeymanTarget.iphone]: 'iPhone', [KeymanTarget.ipad]: 'iPad',
49
- [KeymanTarget.androidphone]: 'Android phone', [KeymanTarget.androidtablet]: 'Android tablet',
50
- [KeymanTarget.mobile]: 'Mobile devices', [KeymanTarget.desktop]: 'Desktop devices',
51
- [KeymanTarget.tablet]: 'Tablet devices'
52
- };
53
- //# sourceMappingURL=keyman-targets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keyman-targets.js","sourceRoot":"","sources":["../../../src/compiler/keyman-targets.ts"],"names":[],"mappings":"AACA,EAAE;AACF,kCAAkC;AAClC,EAAE;AAEF,MAAM,CAAN,IACE,YAKC;AANH,WACE,YAAY;IACV,2BAAW,CAAA;IACX,mCAAmB,CAAA;IAAE,iCAAiB,CAAA;IAAE,+BAAe,CAAA;IACvD,2BAAW,CAAA;IAAE,iCAAiB,CAAA;IAAE,6BAAa,CAAA;IAAE,6CAA6B,CAAA;IAAE,+CAA+B,CAAA;IAC7G,iCAAiB,CAAA;IAAE,mCAAmB,CAAA;IAAE,iCAAiB,CAAA;AAC3D,CAAC,EALD,YAAY,KAAZ,YAAY,QAKX;AAAA,CAAC;AAEJ,MAAM,CAAC;AACL,oFAAoF;AACpF,gBAAgB,GAAmB;IACjC,YAAY,CAAC,GAAG;IAChB,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK;IAC7D,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,aAAa;IAC/G,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM;CAC/D,EAED,kBAAkB,GAAmB;IACnC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,aAAa;IAC7F,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM;CACzC;AAED,kBAAkB;AAClB,gBAAgB,GAAmB;IACjC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO;CACpF;AAED,iBAAiB;AACjB,gBAAgB,GAAmB;IACjC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,aAAa;IAC/G,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM;CACzC;AAED,iBAAiB;AACjB,qBAAqB,GAAmB;IACtC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG;CACtG;AAED,qDAAqD;AAErD,kBAAkB,GAAgC;IAChD,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,KAAK;IACzB,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO;IAChG,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM;IACrF,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,gBAAgB;IAC9F,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,iBAAiB;IAChF,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,gBAAgB;CAC1C,CAAC"}
@@ -1,24 +0,0 @@
1
- import { KmpJsonFile, CompilerCallbacks, KpsFile } from '@keymanapp/common-types';
2
- export declare class PackageVersionValidation {
3
- private callbacks;
4
- constructor(callbacks: CompilerCallbacks);
5
- /**
6
- * Verifies version information in corresponding keyboards and updates kmpJson
7
- * metadata as the version information can be out of sync in the .kps file
8
- * after updating a contained keyboard.
9
- * @param kpsFilename
10
- * @param kps
11
- * @param kmp
12
- * @returns
13
- */
14
- validateAndUpdateVersions(kpsFilename: string, kps: KpsFile.KpsFile, kmp: KmpJsonFile.KmpJsonFile): boolean;
15
- private checkFollowKeyboardVersion;
16
- private getKmxData;
17
- private getKeyboardVersionFromKmx;
18
- /**
19
- * Verify that the package contains a .js if the keyboard targets touch
20
- * devices
21
- */
22
- private verifyTargets;
23
- }
24
- //# sourceMappingURL=package-version-validation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-version-validation.d.ts","sourceRoot":"","sources":["../../../src/compiler/package-version-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAsB,MAAM,yBAAyB,CAAC;AAUtG,qBAAa,wBAAwB;IAEvB,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,iBAAiB;IAEhD;;;;;;;;OAQG;IACI,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,WAAW;IAmExG,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,UAAU;IAuClB,OAAO,CAAC,yBAAyB;IAOjC;;;OAGG;IACH,OAAO,CAAC,aAAa;CA6BtB"}
@@ -1,153 +0,0 @@
1
- import { KmxFileReader, KMX } from '@keymanapp/common-types';
2
- import { TouchKeymanTargets } from './keyman-targets.js';
3
- import { CompilerMessages } from './messages.js';
4
- // The DEFAULT_VERSION used to be '1.0', but we now use '0.0' to allow
5
- // pre-release 0.x keyboards to be considered later than a keyboard without
6
- // any version metadata at all.
7
- // TODO: move to a better location
8
- const DEFAULT_VERSION = '0.0';
9
- export class PackageVersionValidation {
10
- callbacks;
11
- constructor(callbacks) {
12
- this.callbacks = callbacks;
13
- }
14
- /**
15
- * Verifies version information in corresponding keyboards and updates kmpJson
16
- * metadata as the version information can be out of sync in the .kps file
17
- * after updating a contained keyboard.
18
- * @param kpsFilename
19
- * @param kps
20
- * @param kmp
21
- * @returns
22
- */
23
- validateAndUpdateVersions(kpsFilename, kps, kmp) {
24
- const followKeyboardVersion = kps.options?.followKeyboardVersion !== undefined;
25
- if (followKeyboardVersion) {
26
- if (!this.checkFollowKeyboardVersion(kps, kmp)) {
27
- return false;
28
- }
29
- }
30
- if (!kmp.keyboards) {
31
- // Lexical models don't have version metadata; only their packages.
32
- return true;
33
- }
34
- let result = true;
35
- // We now know we have at least one keyboard in the package
36
- for (let keyboard of kmp.keyboards) {
37
- const kmx = this.getKmxData(kpsFilename, kmp, keyboard);
38
- if (!kmx) {
39
- // Warnings or errors will have been raised by getKmxData
40
- result = false;
41
- continue;
42
- }
43
- // get the targets from the .kmx
44
- this.verifyTargets(keyboard, kmx, kmp);
45
- // Note: there is often version metadata in the .kps <Keyboard> element, but
46
- // we don't read from the metadata because we want to ensure we have the
47
- // most up-to-date keyboard version data here, from the compiled keyboard.
48
- let keyboardVersion = this.getKeyboardVersionFromKmx(kmx);
49
- if (followKeyboardVersion && keyboardVersion === null) {
50
- this.callbacks.reportMessage(CompilerMessages.Info_KeyboardFileHasNoKeyboardVersion({ filename: keyboard.id }));
51
- }
52
- keyboard.version = keyboardVersion ?? DEFAULT_VERSION;
53
- if (result) {
54
- if (kmp.keyboards[0].version !== keyboard.version) {
55
- this.callbacks.reportMessage(CompilerMessages.Warn_KeyboardVersionsDoNotMatch({
56
- keyboard: keyboard.id,
57
- version: keyboard.version,
58
- firstKeyboard: kmp.keyboards[0].id,
59
- firstVersion: kmp.keyboards[0].version
60
- }));
61
- }
62
- }
63
- }
64
- if (result) {
65
- if (followKeyboardVersion) {
66
- kmp.info.version.description = kmp.keyboards[0].version;
67
- }
68
- else if (kmp.info.version?.description != kmp.keyboards[0].version) {
69
- // Only need to compare against first keyboard as we compare keyboards above
70
- this.callbacks.reportMessage(CompilerMessages.Warn_KeyboardVersionsDoNotMatchPackageVersion({
71
- keyboard: kmp.keyboards[0].id,
72
- keyboardVersion: kmp.keyboards[0].version,
73
- packageVersion: kmp.info.version?.description
74
- }));
75
- }
76
- }
77
- return result;
78
- }
79
- checkFollowKeyboardVersion(kps, kmp) {
80
- // Lexical model packages do not allow FollowKeyboardVersion
81
- if (kmp.lexicalModels && kmp.lexicalModels.length) {
82
- this.callbacks.reportMessage(CompilerMessages.Error_FollowKeyboardVersionNotAllowedForModelPackages());
83
- return false;
84
- }
85
- if (!kmp.keyboards || !kmp.keyboards.length) {
86
- this.callbacks.reportMessage(CompilerMessages.Error_FollowKeyboardVersionButNoKeyboards());
87
- return false;
88
- }
89
- return true;
90
- }
91
- getKmxData(kpsFilename, kmp, keyboard) {
92
- const file = kmp.files.find(file => this.callbacks.path.basename(file.name, '.kmx') == keyboard.id);
93
- if (!file) {
94
- this.callbacks.reportMessage(CompilerMessages.Error_KeyboardContentFileNotFound({ id: keyboard.id }));
95
- return null;
96
- }
97
- const filename = this.callbacks.resolveFilename(kpsFilename, file.name);
98
- if (!this.callbacks.fs.existsSync(filename)) {
99
- this.callbacks.reportMessage(CompilerMessages.Error_KeyboardFileNotFound({ filename }));
100
- return null;
101
- }
102
- //
103
- // load the .kmx and extract the version number
104
- //
105
- let kmxFileData;
106
- try {
107
- kmxFileData = this.callbacks.loadFile(filename);
108
- }
109
- catch (e) {
110
- this.callbacks.reportMessage(CompilerMessages.Error_FileCouldNotBeRead({ filename, e }));
111
- return null;
112
- }
113
- const kmxReader = new KmxFileReader();
114
- const kmx = kmxReader.read(kmxFileData);
115
- if (!kmx) {
116
- // The file couldn't be read, it might not be a .kmx file
117
- this.callbacks.reportMessage(CompilerMessages.Error_KeyboardFileNotValid({ filename }));
118
- return null;
119
- }
120
- return kmx;
121
- }
122
- getKeyboardVersionFromKmx(kmx) {
123
- const store = kmx.stores.find(store => store.dwSystemID == KMX.KMXFile.TSS_KEYBOARDVERSION);
124
- return store ? store.dpString : null;
125
- }
126
- /**
127
- * Verify that the package contains a .js if the keyboard targets touch
128
- * devices
129
- */
130
- verifyTargets(keyboard, kmx, kmp) {
131
- // TODO: this function doesn't really belong in version validation, but we
132
- // don't want to read .kmx twice so we'll leave it here for now; a future
133
- // refactor could move .kmx loading into another class
134
- const store = kmx.stores.find(store => store.dwSystemID == KMX.KMXFile.TSS_TARGETS);
135
- if (!store) {
136
- // If there is no &TARGETS store, then there is nothing to check,
137
- // because default is windows-only
138
- return;
139
- }
140
- // Note, if we have gotten this far, we've already located and loaded a
141
- // .kmx, so no need to verify that the package includes a .kmx
142
- // If at least one target is a touch target, we need to check that the
143
- // package also includes the .js
144
- const targets = store.dpString.split(' ');
145
- if (targets.some(target => ['any', ...TouchKeymanTargets].includes(target))) {
146
- if (!kmp.files.find(file => this.callbacks.path.basename(file.name, '.js') == keyboard.id)) {
147
- // .js version of the keyboard is not found, warn
148
- this.callbacks.reportMessage(CompilerMessages.Warn_JsKeyboardFileIsMissing({ id: keyboard.id }));
149
- }
150
- }
151
- }
152
- }
153
- //# sourceMappingURL=package-version-validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"package-version-validation.js","sourceRoot":"","sources":["../../../src/compiler/package-version-validation.ts"],"names":[],"mappings":"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"}