@keymanapp/kmc 17.0.60-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 (70) hide show
  1. package/README.md +96 -0
  2. package/build/cjs-src/kmc.cjs +183594 -0
  3. package/build/cjs-src/kmlmc.cjs +154539 -0
  4. package/build/cjs-src/kmlmi.cjs +17266 -0
  5. package/build/cjs-src/kmlmp.cjs +17210 -0
  6. package/build/src/activities/buildKmnKeyboard.d.ts +3 -0
  7. package/build/src/activities/buildKmnKeyboard.d.ts.map +1 -0
  8. package/build/src/activities/buildKmnKeyboard.js +45 -0
  9. package/build/src/activities/buildKmnKeyboard.js.map +1 -0
  10. package/build/src/activities/buildLdmlKeyboard.d.ts +3 -0
  11. package/build/src/activities/buildLdmlKeyboard.d.ts.map +1 -0
  12. package/build/src/activities/buildLdmlKeyboard.js +72 -0
  13. package/build/src/activities/buildLdmlKeyboard.js.map +1 -0
  14. package/build/src/activities/buildModel.d.ts +3 -0
  15. package/build/src/activities/buildModel.d.ts.map +1 -0
  16. package/build/src/activities/buildModel.js +22 -0
  17. package/build/src/activities/buildModel.js.map +1 -0
  18. package/build/src/activities/buildPackage.d.ts +3 -0
  19. package/build/src/activities/buildPackage.d.ts.map +1 -0
  20. package/build/src/activities/buildPackage.js +24 -0
  21. package/build/src/activities/buildPackage.js.map +1 -0
  22. package/build/src/activities/buildProject.d.ts +3 -0
  23. package/build/src/activities/buildProject.d.ts.map +1 -0
  24. package/build/src/activities/buildProject.js +114 -0
  25. package/build/src/activities/buildProject.js.map +1 -0
  26. package/build/src/activities/buildTestData.d.ts +3 -0
  27. package/build/src/activities/buildTestData.d.ts.map +1 -0
  28. package/build/src/activities/buildTestData.js +31 -0
  29. package/build/src/activities/buildTestData.js.map +1 -0
  30. package/build/src/commands/build.d.ts +8 -0
  31. package/build/src/commands/build.d.ts.map +1 -0
  32. package/build/src/commands/build.js +50 -0
  33. package/build/src/commands/build.js.map +1 -0
  34. package/build/src/commands/buildTestData.d.ts +3 -0
  35. package/build/src/commands/buildTestData.d.ts.map +1 -0
  36. package/build/src/commands/buildTestData.js +9 -0
  37. package/build/src/commands/buildTestData.js.map +1 -0
  38. package/build/src/kmc.d.ts +6 -0
  39. package/build/src/kmc.d.ts.map +1 -0
  40. package/build/src/kmc.js +40 -0
  41. package/build/src/kmc.js.map +1 -0
  42. package/build/src/kmlmc.d.ts +6 -0
  43. package/build/src/kmlmc.d.ts.map +1 -0
  44. package/build/src/kmlmc.js +49 -0
  45. package/build/src/kmlmc.js.map +1 -0
  46. package/build/src/kmlmi.d.ts +6 -0
  47. package/build/src/kmlmi.d.ts.map +1 -0
  48. package/build/src/kmlmi.js +64 -0
  49. package/build/src/kmlmi.js.map +1 -0
  50. package/build/src/kmlmp.d.ts +6 -0
  51. package/build/src/kmlmp.d.ts.map +1 -0
  52. package/build/src/kmlmp.js +46 -0
  53. package/build/src/kmlmp.js.map +1 -0
  54. package/build/src/util/NodeCompilerCallbacks.d.ts +14 -0
  55. package/build/src/util/NodeCompilerCallbacks.d.ts.map +1 -0
  56. package/build/src/util/NodeCompilerCallbacks.js +41 -0
  57. package/build/src/util/NodeCompilerCallbacks.js.map +1 -0
  58. package/build/src/util/getDeveloperBinPath.d.ts +9 -0
  59. package/build/src/util/getDeveloperBinPath.d.ts.map +1 -0
  60. package/build/src/util/getDeveloperBinPath.js +36 -0
  61. package/build/src/util/getDeveloperBinPath.js.map +1 -0
  62. package/build/src/util/kpj.schema.json +127 -0
  63. package/build/src/util/kvks.schema.json +182 -0
  64. package/build/src/util/ldml-keyboard.schema.json +634 -0
  65. package/build/src/util/ldml-keyboardtest.schema.json +221 -0
  66. package/build/src/util/sysexits.d.ts +9 -0
  67. package/build/src/util/sysexits.d.ts.map +1 -0
  68. package/build/src/util/sysexits.js +3 -0
  69. package/build/src/util/sysexits.js.map +1 -0
  70. package/package.json +73 -0
@@ -0,0 +1,3 @@
1
+ import { BuildCommandOptions } from '../commands/build.js';
2
+ export declare function buildKmnKeyboard(infile: string, options: BuildCommandOptions): Promise<boolean>;
3
+ //# sourceMappingURL=buildKmnKeyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildKmnKeyboard.d.ts","sourceRoot":"","sources":["../../../src/activities/buildKmnKeyboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgDrG"}
@@ -0,0 +1,45 @@
1
+ import { spawnSync } from 'child_process';
2
+ import * as path from 'path';
3
+ import { getDeveloperBinPath } from '../util/getDeveloperBinPath.js';
4
+ export async function buildKmnKeyboard(infile, options) {
5
+ // We'll call out to kmcomp.exe to build a .kmn keyboard into a .kmx Note:
6
+ // kmcomp.exe will also build a .js if it is required, and may not actually
7
+ // generate a .kmx if the output target defined in the .kmn is mobile/web
8
+ // only. kmcomp.exe will also build the .kvk file.
9
+ const binRoot = getDeveloperBinPath();
10
+ if (binRoot == null) {
11
+ console.error('Could not locate Keyman Developer bin path');
12
+ return false;
13
+ }
14
+ let args = ['-nologo'];
15
+ if (options.debug) {
16
+ args.push('-d');
17
+ }
18
+ args.push(path.win32.normalize(infile));
19
+ // .* target file name option allows us to specify .kmx output file and the
20
+ // .js output file will also be generated as required, in the same way as when
21
+ // we build a project. Note: this is a stop gap as we work to deprecate
22
+ // kmcomp.exe and replace it with kmcmp (cross-platform .kmx compiler in C++)
23
+ // + kmc-kmw (KMX->KMW transpiler in TypeScript) + kmc-kvk (KVK compiler in
24
+ // TypeScript).
25
+ let outfile = (options.outFile ?? infile).replace(/\\/g, '/');
26
+ // For now, we normalize to posix, and then renormalize to win32 for launching
27
+ // kmcomp, until we have a cross-platform alternative to use
28
+ outfile = path.win32.normalize(options.outFile).replace(/\.km.$/i, '.*');
29
+ args.push(outfile);
30
+ const kmcomp = path.join(binRoot, 'kmcomp.exe');
31
+ // We won't attempt to make this call cross-platform, yet.
32
+ let child = spawnSync(kmcomp, args, {
33
+ encoding: 'utf8'
34
+ });
35
+ if (child.error) {
36
+ console.error(child.error);
37
+ return false;
38
+ }
39
+ console.log(child.stdout);
40
+ if (child.stderr) {
41
+ console.error(child.stderr);
42
+ }
43
+ return child.status === 0;
44
+ }
45
+ //# sourceMappingURL=buildKmnKeyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildKmnKeyboard.js","sourceRoot":"","sources":["../../../src/activities/buildKmnKeyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,OAA4B;IACjF,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,kDAAkD;IAClD,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,IAAG,OAAO,IAAI,IAAI,EAAE;QAClB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;KACd;IAED,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,IAAG,OAAO,CAAC,KAAK,EAAE;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjB;IAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAExC,2EAA2E;IAC3E,8EAA8E;IAC9E,uEAAuE;IACvE,6EAA6E;IAC7E,2EAA2E;IAC3E,eAAe;IACf,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9D,8EAA8E;IAC9E,4DAA4D;IAC5D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAEhD,0DAA0D;IAC1D,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;QAClC,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,IAAG,KAAK,CAAC,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;KACd;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAG,KAAK,CAAC,MAAM,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC7B;IAED,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { BuildCommandOptions } from '../commands/build.js';
2
+ export declare function buildLdmlKeyboard(infile: string, options: BuildCommandOptions): Promise<boolean>;
3
+ //# sourceMappingURL=buildLdmlKeyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildLdmlKeyboard.d.ts","sourceRoot":"","sources":["../../../src/activities/buildLdmlKeyboard.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BtG"}
@@ -0,0 +1,72 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs';
3
+ import * as kmc from '@keymanapp/kmc-keyboard';
4
+ import { KvkFileWriter } from '@keymanapp/common-types';
5
+ import { NodeCompilerCallbacks } from '../util/NodeCompilerCallbacks.js';
6
+ export async function buildLdmlKeyboard(infile, options) {
7
+ // TODO-LDML: consider hardware vs touch -- touch-only layout will not have a .kvk
8
+ // Compile:
9
+ let [kmx, kvk, kmw] = buildLdmlKeyboardToMemory(infile, options);
10
+ // Output:
11
+ const fileBaseName = options.outFile ?? infile;
12
+ const outFileBase = path.basename(fileBaseName, path.extname(fileBaseName));
13
+ const outFileDir = path.dirname(fileBaseName);
14
+ if (kmx && kvk) {
15
+ const outFileKmx = path.join(outFileDir, outFileBase + '.kmx');
16
+ console.log(`Writing compiled keyboard to ${outFileKmx}`);
17
+ fs.writeFileSync(outFileKmx, kmx);
18
+ const outFileKvk = path.join(outFileDir, outFileBase + '.kvk');
19
+ console.log(`Writing compiled visual keyboard to ${outFileKvk}`);
20
+ fs.writeFileSync(outFileKvk, kvk);
21
+ }
22
+ else {
23
+ console.error(`An error occurred compiling ${infile}`);
24
+ return false;
25
+ }
26
+ if (kmw) {
27
+ const outFileKmw = path.join(outFileDir, outFileBase + '.js');
28
+ console.log(`Writing compiled js keyboard to ${outFileKmw}`);
29
+ fs.writeFileSync(outFileKmw, kmw);
30
+ }
31
+ return true;
32
+ }
33
+ function buildLdmlKeyboardToMemory(inputFilename, options) {
34
+ let compilerOptions = {
35
+ debug: options.debug ?? false,
36
+ addCompilerVersion: options.compilerVersion ?? true
37
+ };
38
+ const c = new NodeCompilerCallbacks();
39
+ const k = new kmc.Compiler(c, options);
40
+ let source = k.load(inputFilename);
41
+ if (!source) {
42
+ return [null, null, null];
43
+ }
44
+ if (!k.validate(source)) {
45
+ return [null, null, null];
46
+ }
47
+ let kmx = k.compile(source);
48
+ if (!kmx) {
49
+ return [null, null, null];
50
+ }
51
+ // In order for the KMX file to be loaded by non-KMXPlus components, it is helpful
52
+ // to duplicate some of the metadata
53
+ kmc.KMXPlusMetadataCompiler.addKmxMetadata(kmx.kmxplus, kmx.keyboard, compilerOptions);
54
+ // Use the builder to generate the binary output file
55
+ const builder = new kmc.KMXBuilder(kmx, options.debug);
56
+ const kmx_binary = builder.compile();
57
+ const vkcompiler = new kmc.VisualKeyboardCompiler();
58
+ const vk = vkcompiler.compile(source);
59
+ const writer = new KvkFileWriter();
60
+ const kvk_binary = writer.write(vk);
61
+ // Note: we could have a step of generating source files here
62
+ // KvksFileWriter()...
63
+ // const tlcompiler = new kmc.TouchLayoutCompiler();
64
+ // const tl = tlcompiler.compile(source);
65
+ // const tlwriter = new TouchLayoutFileWriter();
66
+ const kmwcompiler = new kmc.KeymanWebCompiler(compilerOptions);
67
+ const kmw_string = kmwcompiler.compile(inputFilename, source);
68
+ const encoder = new TextEncoder();
69
+ const kmw_binary = encoder.encode(kmw_string);
70
+ return [kmx_binary, kvk_binary, kmw_binary];
71
+ }
72
+ //# sourceMappingURL=buildLdmlKeyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildLdmlKeyboard.js","sourceRoot":"","sources":["../../../src/activities/buildLdmlKeyboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { BuildCommandOptions } from '../commands/build.js';
2
+ export declare function buildModel(infile: string, options: BuildCommandOptions): Promise<boolean>;
3
+ //# sourceMappingURL=buildModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildModel.d.ts","sourceRoot":"","sources":["../../../src/activities/buildModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuB/F"}
@@ -0,0 +1,22 @@
1
+ import * as fs from 'fs';
2
+ import { compileModel } from '@keymanapp/kmc-model';
3
+ export async function buildModel(infile, options) {
4
+ let outputFilename = options.outFile ? options.outFile : infile.replace(/\.ts$/i, ".js");
5
+ let code = null;
6
+ // Compile:
7
+ try {
8
+ code = compileModel(infile);
9
+ }
10
+ catch (e) {
11
+ console.error(e);
12
+ return false;
13
+ }
14
+ if (!code) {
15
+ console.error('Compilation failed.');
16
+ return false;
17
+ }
18
+ // Output:
19
+ fs.writeFileSync(outputFilename, code, 'utf8');
20
+ return true;
21
+ }
22
+ //# sourceMappingURL=buildModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildModel.js","sourceRoot":"","sources":["../../../src/activities/buildModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,OAA4B;IAE3E,IAAI,cAAc,GAAW,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAEjG,IAAI,IAAI,GAAG,IAAI,CAAC;IAEhB,WAAW;IACX,IAAI;QACF,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;KAC7B;IAAC,OAAM,CAAC,EAAE;QACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,KAAK,CAAC;KACd;IAED,IAAG,CAAC,IAAI,EAAE;QACR,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACpC,OAAO,KAAK,CAAC;KACd;IAED,UAAU;IACV,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAE/C,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { BuildCommandOptions } from '../commands/build.js';
2
+ export declare function buildPackage(infile: string, options: BuildCommandOptions): Promise<boolean>;
3
+ //# sourceMappingURL=buildPackage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildPackage.d.ts","sourceRoot":"","sources":["../../../src/activities/buildPackage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBjG"}
@@ -0,0 +1,24 @@
1
+ import * as fs from 'fs';
2
+ import KmpCompiler from '@keymanapp/kmc-package';
3
+ export async function buildPackage(infile, options) {
4
+ let outputFilename = options.outFile ? options.outFile : infile.replace(/\.kps$/i, ".kmp");
5
+ //
6
+ // Load .kps source data
7
+ //
8
+ let kpsString = fs.readFileSync(infile, 'utf8');
9
+ let kmpCompiler = new KmpCompiler();
10
+ let kmpJsonData = kmpCompiler.transformKpsToKmpObject(kpsString, infile);
11
+ //
12
+ // Build the .kmp package file
13
+ //
14
+ let data = await kmpCompiler.buildKmpFile(infile, kmpJsonData);
15
+ if (data) {
16
+ fs.writeFileSync(outputFilename, data, 'binary');
17
+ }
18
+ else {
19
+ // TODO error logging
20
+ return false;
21
+ }
22
+ return true;
23
+ }
24
+ //# sourceMappingURL=buildPackage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildPackage.js","sourceRoot":"","sources":["../../../src/activities/buildPackage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,WAAW,MAAM,wBAAwB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,OAA4B;IAE7E,IAAI,cAAc,GAAW,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEnG,EAAE;IACF,wBAAwB;IACxB,EAAE;IAEF,IAAI,SAAS,GAAW,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IACpC,IAAI,WAAW,GAAG,WAAW,CAAC,uBAAuB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEzE,EAAE;IACF,8BAA8B;IAC9B,EAAE;IAEF,IAAI,IAAI,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/D,IAAG,IAAI,EAAE;QACP,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;KAClD;SAAM;QACL,qBAAqB;QACrB,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { BuildCommandOptions } from '../commands/build.js';
2
+ export declare function buildProject(infile: string, options: BuildCommandOptions): Promise<boolean>;
3
+ //# sourceMappingURL=buildProject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildProject.d.ts","sourceRoot":"","sources":["../../../src/activities/buildProject.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGjG"}
@@ -0,0 +1,114 @@
1
+ import { KeymanDeveloperProject, KPJFileReader } from '@keymanapp/common-types';
2
+ import { NodeCompilerCallbacks } from '../util/NodeCompilerCallbacks.js';
3
+ import { buildKmnKeyboard } from './buildKmnKeyboard.js';
4
+ import * as path from 'path';
5
+ import * as fs from 'fs';
6
+ import { buildLdmlKeyboard } from './buildLdmlKeyboard.js';
7
+ import { buildModel } from './buildModel.js';
8
+ import { buildPackage } from './buildPackage.js';
9
+ export async function buildProject(infile, options) {
10
+ let builder = new ProjectBuilder(infile, options);
11
+ return builder.run();
12
+ }
13
+ class ProjectBuilder {
14
+ callbacks = new NodeCompilerCallbacks();
15
+ infile;
16
+ options;
17
+ project;
18
+ constructor(infile, options) {
19
+ this.infile = path.resolve(infile);
20
+ this.options = options;
21
+ }
22
+ async run() {
23
+ if (this.options.outFile) {
24
+ // TODO: callbacks.reportMessage
25
+ console.error('--out-file should not be specified for project builds');
26
+ return false;
27
+ }
28
+ this.project = this.loadProject();
29
+ if (!this.project) {
30
+ return false;
31
+ }
32
+ // Build all Keyman keyboards in the project
33
+ if (!await this.buildProjectTargets(buildKmnKeyboard, '.kmn', '.kmx')) {
34
+ return false;
35
+ }
36
+ // Build all LDML keyboards in the project
37
+ if (!await this.buildProjectTargets(buildLdmlKeyboard, '.xml', '.kmx')) {
38
+ return false;
39
+ }
40
+ // Build all models in the project
41
+ if (!await this.buildProjectTargets(buildModel, '.model.ts', '.model.js')) {
42
+ return false;
43
+ }
44
+ // Build all packages in the project
45
+ if (!await this.buildProjectTargets(buildPackage, '.kps', '.kmp')) {
46
+ return false;
47
+ }
48
+ // TODO: generate .keyboard_info from .kps + etc (and support merge of
49
+ // $PROJECTPATH/.keyboard_info for version 1.0 projects)
50
+ return true;
51
+ }
52
+ loadProject() {
53
+ // TODO: callbacks.reportMessage on exceptions
54
+ // TODO: version 2.0 projects are folder-based and scan source/ folder for valid
55
+ // files. .kpj need not exist, but if it does, is used just for options.
56
+ this.infile = path.resolve(this.infile.replace(/\\/g, '/'));
57
+ if (fs.statSync(this.infile).isDirectory()) {
58
+ // This is a project folder, look for folder-name.kpj
59
+ this.infile = path.join(this.infile, path.basename(this.infile) + '.kpj');
60
+ }
61
+ const project = fs.existsSync(this.infile) ?
62
+ this.loadProjectFromFile() :
63
+ this.loadDefaultProjectFromFolder();
64
+ return project;
65
+ }
66
+ loadDefaultProjectFromFolder() {
67
+ // The folder does not contain a .kpj, so construct a default 2.0 .kpj
68
+ const project = new KeymanDeveloperProject('2.0');
69
+ project.populateFiles(this.infile);
70
+ return project;
71
+ }
72
+ loadProjectFromFile() {
73
+ const kpjData = this.callbacks.loadFile(null, this.infile);
74
+ const reader = new KPJFileReader();
75
+ const kpj = reader.read(kpjData);
76
+ const schema = this.callbacks.loadKpjJsonSchema();
77
+ try {
78
+ reader.validate(kpj, schema);
79
+ }
80
+ catch (e) {
81
+ // TODO: callbacks.reportMessage
82
+ console.error(e);
83
+ return null;
84
+ }
85
+ const project = reader.transform(this.infile, kpj);
86
+ return project;
87
+ }
88
+ async buildProjectTargets(buildTarget, fileType, outputFileType) {
89
+ let result = true;
90
+ for (let file of this.project.files) {
91
+ if (file.fileType.toLowerCase() == fileType) {
92
+ result = await this.buildTarget(file, buildTarget, fileType, outputFileType) && result;
93
+ }
94
+ }
95
+ return result;
96
+ }
97
+ async buildTarget(file, buildTarget, fileType, outputFileType) {
98
+ const options = { ...this.options };
99
+ options.outFile = this.project.resolveOutputFilePath(this.infile, file, fileType, outputFileType);
100
+ const infile = this.project.resolveInputFilePath(this.infile, file);
101
+ // TODO: callbacks.reportMessage, improve logging and make consistent
102
+ console.log(`Building ${infile}\n Output ${options.outFile}`);
103
+ fs.mkdirSync(path.dirname(options.outFile), { recursive: true });
104
+ let result = await buildTarget(infile, options);
105
+ if (result) {
106
+ console.log(`${path.basename(infile)} built successfully.`);
107
+ }
108
+ else {
109
+ console.log(`${path.basename(infile)} failed to build.`);
110
+ }
111
+ return result;
112
+ }
113
+ }
114
+ //# sourceMappingURL=buildProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildProject.js","sourceRoot":"","sources":["../../../src/activities/buildProject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { BuildCommandOptions } from '../commands/build.js';
2
+ export declare function buildTestData(infile: string, options: BuildCommandOptions): void;
3
+ //# sourceMappingURL=buildTestData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildTestData.d.ts","sourceRoot":"","sources":["../../../src/activities/buildTestData.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,QAkBzE"}
@@ -0,0 +1,31 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as kmc from '@keymanapp/kmc-keyboard';
4
+ import { NodeCompilerCallbacks } from '../util/NodeCompilerCallbacks.js';
5
+ export function buildTestData(infile, options) {
6
+ let compilerOptions = {
7
+ debug: false,
8
+ addCompilerVersion: false
9
+ };
10
+ let testData = loadTestData(infile, compilerOptions);
11
+ if (!testData) {
12
+ return;
13
+ }
14
+ const fileBaseName = options.outFile ?? infile;
15
+ const outFileBase = path.basename(fileBaseName, path.extname(fileBaseName));
16
+ const outFileDir = path.dirname(fileBaseName);
17
+ const outFileJson = path.join(outFileDir, outFileBase + '.json');
18
+ console.log(`Writing JSON test data to ${outFileJson}`);
19
+ fs
20
+ .writeFileSync(outFileJson, JSON.stringify(testData, null, ' '));
21
+ }
22
+ function loadTestData(inputFilename, options) {
23
+ const c = new NodeCompilerCallbacks();
24
+ const k = new kmc.Compiler(c, options);
25
+ let source = k.loadTestData(inputFilename);
26
+ if (!source) {
27
+ return null;
28
+ }
29
+ return source;
30
+ }
31
+ //# sourceMappingURL=buildTestData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildTestData.js","sourceRoot":"","sources":["../../../src/activities/buildTestData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAA4B;IACxE,IAAI,eAAe,GAAwB;QACzC,KAAK,EAAE,KAAK;QACZ,kBAAkB,EAAE,KAAK;KAC1B,CAAC;IAEF,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO;KACR;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;IACxD,EAAE;SACD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AACD,SAAS,YAAY,CAAC,aAAqB,EAAE,OAA4B;IACvE,MAAM,CAAC,GAAsB,IAAI,qBAAqB,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvC,IAAI,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAC;KACb;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+ export interface BuildCommandOptions {
3
+ debug?: boolean;
4
+ outFile?: string;
5
+ compilerVersion?: boolean;
6
+ }
7
+ export declare function declareBuild(program: Command): void;
8
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,QAkB5C"}
@@ -0,0 +1,50 @@
1
+ import * as fs from 'fs';
2
+ import { buildPackage } from '../activities/buildPackage.js';
3
+ import { buildKmnKeyboard } from '../activities/buildKmnKeyboard.js';
4
+ import { buildLdmlKeyboard } from '../activities/buildLdmlKeyboard.js';
5
+ import { buildModel } from '../activities/buildModel.js';
6
+ import { buildProject } from '../activities/buildProject.js';
7
+ ;
8
+ export function declareBuild(program) {
9
+ program
10
+ .command('build [infile...]')
11
+ .description('Build a source file into a final file')
12
+ .option('-d, --debug', 'Include debug information in output')
13
+ .option('-o, --out-file <filename>', 'where to save the resulting .kmx file')
14
+ .option('--no-compiler-version', 'Exclude compiler version metadata from output')
15
+ .action((infiles, options) => {
16
+ let p = [];
17
+ if (!infiles.length) {
18
+ console.debug('Assuming infile == .');
19
+ p.push(build('.', options));
20
+ }
21
+ for (let infile of infiles) {
22
+ p.push(build(infile, options));
23
+ }
24
+ return Promise.all(p).then();
25
+ });
26
+ }
27
+ async function build(infile, options) {
28
+ console.log(`Building ${infile}`);
29
+ if (infile.endsWith('.xml')) {
30
+ return buildLdmlKeyboard(infile, options);
31
+ }
32
+ if (infile.endsWith('.kmn')) {
33
+ return buildKmnKeyboard(infile, options);
34
+ }
35
+ if (infile.endsWith('.kps')) {
36
+ return buildPackage(infile, options);
37
+ }
38
+ if (infile.endsWith('.model.ts')) {
39
+ return buildModel(infile, options);
40
+ }
41
+ if (infile.endsWith('.kpj')) {
42
+ return buildProject(infile, options);
43
+ }
44
+ if (fs.statSync(infile).isDirectory()) {
45
+ return buildProject(infile, options);
46
+ }
47
+ console.error(`Unrecognised input file ${infile}, expecting .xml, .kmn, .kps, .model.ts, .kpj, or project folder`);
48
+ process.exit(2);
49
+ }
50
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAM5D,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,aAAa,EAAE,qCAAqC,CAAC;SAC5D,MAAM,CAAC,2BAA2B,EAAE,uCAAuC,CAAC;SAC5E,MAAM,CAAC,uBAAuB,EAAE,+CAA+C,CAAC;SAChF,MAAM,CAAC,CAAC,OAAiB,EAAE,OAAY,EAAE,EAAE;QAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,IAAG,CAAC,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;SAC7B;QACD,KAAI,IAAI,MAAM,IAAI,OAAO,EAAE;YACzB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;SAChC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,MAAc,EAAE,OAA4B;IAC/D,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;IAElC,IAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC1B,OAAO,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3C;IAED,IAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC1B,OAAO,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC1C;IAED,IAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC1B,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC;IAED,IAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QAC/B,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC;IAED,IAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC1B,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC;IAED,IAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE;QACpC,OAAO,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC;IAED,OAAO,CAAC,KAAK,CAAC,2BAA2B,MAAM,kEAAkE,CAAC,CAAC;IACnH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function declareBuildTestData(program: Command): void;
3
+ //# sourceMappingURL=buildTestData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildTestData.d.ts","sourceRoot":"","sources":["../../../src/commands/buildTestData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAMpD"}
@@ -0,0 +1,9 @@
1
+ import { buildTestData } from '../activities/buildTestData.js';
2
+ export function declareBuildTestData(program) {
3
+ program
4
+ .command('build-test-data <infile>')
5
+ .description('Convert keyboard test .xml to .json')
6
+ .option('-o, --out-file <filename>', 'where to save the resulting .json file')
7
+ .action(buildTestData);
8
+ }
9
+ //# sourceMappingURL=buildTestData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildTestData.js","sourceRoot":"","sources":["../../../src/commands/buildTestData.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,0BAA0B,CAAC;SACnC,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,2BAA2B,EAAE,wCAAwC,CAAC;SAC7E,MAAM,CAAC,aAAa,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kmc - Keyman Next Generation Compiler
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=kmc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kmc.d.ts","sourceRoot":"","sources":["../../src/kmc.ts"],"names":[],"mappings":";AACA;;GAEG"}
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kmc - Keyman Next Generation Compiler
4
+ */
5
+ import { Command } from 'commander';
6
+ import KEYMAN_VERSION from "@keymanapp/keyman-version/keyman-version.mjs";
7
+ import { declareBuild } from './commands/build.js';
8
+ import { declareBuildTestData } from './commands/buildTestData.js';
9
+ const program = new Command();
10
+ /* Arguments */
11
+ program
12
+ .description('Keyman Developer Command Line Interface')
13
+ .version(KEYMAN_VERSION.VERSION_WITH_TAG);
14
+ declareBuild(program);
15
+ declareBuildTestData(program);
16
+ /*
17
+ program
18
+ .command('clean');
19
+
20
+ program
21
+ .command('copy');
22
+
23
+ program
24
+ .command('rename');
25
+
26
+ program
27
+ .command('generate');
28
+
29
+ program
30
+ .command('import');
31
+
32
+ program
33
+ .command('test');
34
+
35
+ program
36
+ .command('publish');
37
+ */
38
+ program.parseAsync(process.argv)
39
+ .catch(reason => console.error(reason));
40
+ //# sourceMappingURL=kmc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kmc.js","sourceRoot":"","sources":["../../src/kmc.ts"],"names":[],"mappings":";AACA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,cAAc,MAAM,8CAA8C,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,eAAe;AACf,OAAO;KACJ,WAAW,CAAC,yCAAyC,CAAC;KACtD,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAE5C,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;EAqBE;AAEF,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;KAC7B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kmlmc - Keyman Lexical Model Compiler
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=kmlmc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kmlmc.d.ts","sourceRoot":"","sources":["../../src/kmlmc.ts"],"names":[],"mappings":";AACA;;GAEG"}
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kmlmc - Keyman Lexical Model Compiler
4
+ */
5
+ import * as fs from 'fs';
6
+ import { Command } from 'commander';
7
+ import { compileModel } from '@keymanapp/kmc-model';
8
+ import KEYMAN_VERSION from "@keymanapp/keyman-version/keyman-version.mjs";
9
+ let inputFilename;
10
+ const program = new Command();
11
+ /* Arguments */
12
+ program
13
+ .description('Compiles Keyman lexical models')
14
+ .version(KEYMAN_VERSION.VERSION_WITH_TAG)
15
+ .arguments('<infile>')
16
+ .action(infile => inputFilename = infile)
17
+ .option('-o, --outFile <filename>', 'where to save the resultant file');
18
+ program.parse(process.argv);
19
+ // Deal with input arguments:
20
+ if (!inputFilename) {
21
+ exitDueToUsageError('Must provide a lexical model source file.');
22
+ }
23
+ let code = null;
24
+ // Compile:
25
+ try {
26
+ code = compileModel(inputFilename);
27
+ }
28
+ catch (e) {
29
+ console.error(e);
30
+ process.exit(65 /* SysExits.EX_DATAERR */);
31
+ }
32
+ if (!code) {
33
+ console.error('Compilation failed.');
34
+ process.exit(65 /* SysExits.EX_DATAERR */);
35
+ }
36
+ // Output:
37
+ if (program.opts().outFile) {
38
+ fs.writeFileSync(program.opts().outFile, code, 'utf8');
39
+ }
40
+ else {
41
+ console.log(code);
42
+ }
43
+ function exitDueToUsageError(message) {
44
+ console.error(`${program.name()}: ${message}`);
45
+ console.error();
46
+ program.outputHelp();
47
+ return process.exit(64 /* SysExits.EX_USAGE */);
48
+ }
49
+ //# sourceMappingURL=kmlmc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kmlmc.js","sourceRoot":"","sources":["../../src/kmlmc.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,cAAc,MAAM,8CAA8C,CAAC;AAE1E,IAAI,aAAqB,CAAC;AAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,eAAe;AACf,OAAO;KACJ,WAAW,CAAC,gCAAgC,CAAC;KAC7C,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC;KACxC,SAAS,CAAC,UAAU,CAAC;KACrB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC;KACxC,MAAM,CAAC,0BAA0B,EAAE,kCAAkC,CAAC,CAAC;AAE1E,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,6BAA6B;AAC7B,IAAI,CAAC,aAAa,EAAE;IAClB,mBAAmB,CAAC,2CAA2C,CAAC,CAAC;CAClE;AAED,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB,WAAW;AACX,IAAI;IACF,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;CACpC;AAAC,OAAM,CAAC,EAAE;IACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,8BAAqB,CAAC;CACnC;AAED,IAAG,CAAC,IAAI,EAAE;IACR,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,8BAAqB,CAAC;CACnC;AAED,UAAU;AACV,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE;IAC1B,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;CACxD;KAAM;IACL,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;CACnB;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IACrB,OAAO,OAAO,CAAC,IAAI,4BAAmB,CAAC;AACzC,CAAC"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kmlmi - Keyman Lexical Model model_info Compiler
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=kmlmi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kmlmi.d.ts","sourceRoot":"","sources":["../../src/kmlmi.ts"],"names":[],"mappings":";AACA;;GAEG"}