@keymanapp/kmc 18.0.11-alpha → 18.0.13-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.
- package/build/src/commands/analyze.d.ts.map +1 -1
- package/build/src/commands/analyze.js +106 -107
- package/build/src/commands/analyze.js.map +1 -1
- package/build/src/commands/build.js +166 -168
- package/build/src/commands/build.js.map +1 -1
- package/build/src/commands/buildClasses/BuildActivity.js +31 -33
- package/build/src/commands/buildClasses/BuildActivity.js.map +1 -1
- package/build/src/commands/buildClasses/BuildKeyboardInfo.js +47 -49
- package/build/src/commands/buildClasses/BuildKeyboardInfo.js.map +1 -1
- package/build/src/commands/buildClasses/BuildKmnKeyboard.js +35 -37
- package/build/src/commands/buildClasses/BuildKmnKeyboard.js.map +1 -1
- package/build/src/commands/buildClasses/BuildLdmlKeyboard.js +19 -21
- package/build/src/commands/buildClasses/BuildLdmlKeyboard.js.map +1 -1
- package/build/src/commands/buildClasses/BuildModel.js +13 -15
- package/build/src/commands/buildClasses/BuildModel.js.map +1 -1
- package/build/src/commands/buildClasses/BuildModelInfo.js +73 -75
- package/build/src/commands/buildClasses/BuildModelInfo.js.map +1 -1
- package/build/src/commands/buildClasses/BuildPackage.js +13 -15
- package/build/src/commands/buildClasses/BuildPackage.js.map +1 -1
- package/build/src/commands/buildClasses/BuildProject.js +116 -118
- package/build/src/commands/buildClasses/BuildProject.js.map +1 -1
- package/build/src/commands/buildClasses/buildActivities.js +21 -23
- package/build/src/commands/buildClasses/buildActivities.js.map +1 -1
- package/build/src/commands/buildTestData/index.js +39 -41
- package/build/src/commands/buildTestData/index.js.map +1 -1
- package/build/src/commands/buildWindowsPackageInstaller/index.d.ts +1 -1
- package/build/src/commands/buildWindowsPackageInstaller/index.d.ts.map +1 -1
- package/build/src/commands/buildWindowsPackageInstaller/index.js +43 -45
- package/build/src/commands/buildWindowsPackageInstaller/index.js.map +1 -1
- package/build/src/commands/messageCommand.js +237 -239
- package/build/src/commands/messageCommand.js.map +1 -1
- package/build/src/kmc.js +57 -58
- package/build/src/kmc.js.map +1 -1
- package/build/src/kmlmc.js +57 -59
- package/build/src/kmlmc.js.map +1 -1
- package/build/src/kmlmp.js +46 -48
- package/build/src/kmlmp.js.map +1 -1
- package/build/src/messages/infrastructureMessages.js +75 -77
- package/build/src/messages/infrastructureMessages.js.map +1 -1
- package/build/src/messages/messageNamespaces.js +39 -41
- package/build/src/messages/messageNamespaces.js.map +1 -1
- package/build/src/util/NodeCompilerCallbacks.js +221 -223
- package/build/src/util/NodeCompilerCallbacks.js.map +1 -1
- package/build/src/util/TestKeymanSentry.d.ts +3 -2
- package/build/src/util/TestKeymanSentry.d.ts.map +1 -1
- package/build/src/util/TestKeymanSentry.js +51 -53
- package/build/src/util/TestKeymanSentry.js.map +1 -1
- package/build/src/util/baseOptions.js +24 -26
- package/build/src/util/baseOptions.js.map +1 -1
- package/build/src/util/calculateSourcePath.js +18 -20
- package/build/src/util/calculateSourcePath.js.map +1 -1
- package/build/src/util/extendedCompilerOptions.js +123 -125
- package/build/src/util/extendedCompilerOptions.js.map +1 -1
- package/build/src/util/fileLists.js +46 -48
- package/build/src/util/fileLists.js.map +1 -1
- package/build/src/util/getDeveloperBinPath.js +36 -38
- package/build/src/util/getDeveloperBinPath.js.map +1 -1
- package/build/src/util/getLastGitCommitDate.js +44 -46
- package/build/src/util/getLastGitCommitDate.js.map +1 -1
- package/build/src/util/kmcSentryOptions.d.ts +8 -0
- package/build/src/util/kmcSentryOptions.d.ts.map +1 -0
- package/build/src/util/kmcSentryOptions.js +20 -0
- package/build/src/util/kmcSentryOptions.js.map +1 -0
- package/build/src/util/projectLoader.js +51 -53
- package/build/src/util/projectLoader.js.map +1 -1
- package/build/src/util/projectRunner.js +27 -29
- package/build/src/util/projectRunner.js.map +1 -1
- package/build/src/util/sysexits.js +7 -9
- package/build/src/util/sysexits.js.map +1 -1
- package/package.json +12 -12
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
get
|
|
6
|
-
get
|
|
7
|
-
get
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
//# debugId=a9183d53-e0bc-5242-af15-86636b27f4d8
|
|
15
|
-
//# sourceMappingURL=BuildPackage.js.map
|
|
1
|
+
import { BuildActivity } from './BuildActivity.js';
|
|
2
|
+
import { KmpCompiler } from '@keymanapp/kmc-package';
|
|
3
|
+
export class BuildPackage extends BuildActivity {
|
|
4
|
+
get name() { return 'Package'; }
|
|
5
|
+
get sourceExtension() { return ".kps" /* KeymanFileTypes.Source.Package */; }
|
|
6
|
+
get compiledExtension() { return ".kmp" /* KeymanFileTypes.Binary.Package */; }
|
|
7
|
+
get description() { return 'Build a Keyman package'; }
|
|
8
|
+
async build(infile, outfile, callbacks, options) {
|
|
9
|
+
const compiler = new KmpCompiler();
|
|
10
|
+
return await super.runCompiler(compiler, infile, outfile, callbacks, options);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=BuildPackage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"version":3,"file":"BuildPackage.js","sourceRoot":"","sources":["../../../../src/commands/buildClasses/BuildPackage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,IAAW,IAAI,KAAa,OAAO,SAAS,CAAC,CAAC,CAAC;IAC/C,IAAW,eAAe,KAA6B,mDAAsC,CAAC,CAAC;IAC/F,IAAW,iBAAiB,KAA6B,mDAAsC,CAAC,CAAC;IACjG,IAAW,WAAW,KAAc,OAAO,wBAAwB,CAAC,CAAC,CAAC;IAC/D,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,OAAe,EAAE,SAA4B,EAAE,OAAwB;QACxG,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QACnC,OAAO,MAAM,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAChF,CAAC;CACF"}
|
|
@@ -1,118 +1,116 @@
|
|
|
1
|
-
|
|
2
|
-
import * as
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
get
|
|
12
|
-
get
|
|
13
|
-
get
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
let
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
//# debugId=09ea0055-a21a-538d-b7e7-39d1613686c3
|
|
118
|
-
//# sourceMappingURL=BuildProject.js.map
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { CompilerFileCallbacks, KeymanDeveloperProjectType } from '@keymanapp/common-types';
|
|
4
|
+
import { BuildActivity } from './BuildActivity.js';
|
|
5
|
+
import { buildActivities, buildKeyboardInfoActivity, buildModelInfoActivity } from './buildActivities.js';
|
|
6
|
+
import { InfrastructureMessages } from '../../messages/infrastructureMessages.js';
|
|
7
|
+
import { loadProject } from '../../util/projectLoader.js';
|
|
8
|
+
import { getOption } from '@keymanapp/developer-utils';
|
|
9
|
+
export class BuildProject extends BuildActivity {
|
|
10
|
+
get name() { return 'Project'; }
|
|
11
|
+
get sourceExtension() { return ".kpj" /* KeymanFileTypes.Source.Project */; }
|
|
12
|
+
get compiledExtension() { return null; }
|
|
13
|
+
get description() { return 'Build a keyboard or lexical model project'; }
|
|
14
|
+
async build(infile, outfile, callbacks, options) {
|
|
15
|
+
if (outfile) {
|
|
16
|
+
callbacks.reportMessage(InfrastructureMessages.Error_OutFileNotValidForProjects());
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
let builder = new ProjectBuilder(infile, callbacks, options);
|
|
20
|
+
return builder.run();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
class ProjectBuilder {
|
|
24
|
+
callbacks;
|
|
25
|
+
infile;
|
|
26
|
+
options;
|
|
27
|
+
project;
|
|
28
|
+
constructor(infile, callbacks, options) {
|
|
29
|
+
this.infile = path.resolve(infile);
|
|
30
|
+
this.callbacks = new CompilerFileCallbacks(infile, options, callbacks);
|
|
31
|
+
this.options = options;
|
|
32
|
+
}
|
|
33
|
+
async run() {
|
|
34
|
+
this.project = loadProject(this.infile, this.callbacks);
|
|
35
|
+
if (!this.project) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
// Give a hint if the project is v1.0
|
|
39
|
+
if (this.project.options.version != '2.0') {
|
|
40
|
+
if (getOption("prompt to upgrade projects", true)) {
|
|
41
|
+
this.callbacks.reportMessage(InfrastructureMessages.Hint_ProjectIsVersion10());
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Go through the various file types and build them
|
|
45
|
+
for (let builder of buildActivities) {
|
|
46
|
+
if (builder.sourceExtension == ".kpj" /* KeymanFileTypes.Source.Project */) {
|
|
47
|
+
// We don't support nested projects
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (!await this.buildProjectTargets(builder)) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Build project metadata
|
|
55
|
+
if (this.options.forPublishing || !this.project.options.skipMetadataFiles) {
|
|
56
|
+
let activity = null;
|
|
57
|
+
// Determine activity type first of all by examining files in the project
|
|
58
|
+
// Then if that is inconclusive, examine the declared project type
|
|
59
|
+
if (this.project.isKeyboardProject()) {
|
|
60
|
+
activity = buildKeyboardInfoActivity;
|
|
61
|
+
}
|
|
62
|
+
else if (this.project.isLexicalModelProject()) {
|
|
63
|
+
activity = buildModelInfoActivity;
|
|
64
|
+
}
|
|
65
|
+
else if (this.project.options.projectType == KeymanDeveloperProjectType.Keyboard) {
|
|
66
|
+
activity = buildKeyboardInfoActivity;
|
|
67
|
+
}
|
|
68
|
+
else if (this.project.options.projectType == KeymanDeveloperProjectType.LexicalModel) {
|
|
69
|
+
activity = buildModelInfoActivity;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// If we get here, then we are not sure what type of project this is, so
|
|
73
|
+
// we'll assume keyboard
|
|
74
|
+
activity = buildKeyboardInfoActivity;
|
|
75
|
+
}
|
|
76
|
+
if (!await (this.buildProjectTargets(activity))) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
async buildProjectTargets(activity) {
|
|
83
|
+
if (activity.sourceExtension == ".kpj" /* KeymanFileTypes.Source.Project */) {
|
|
84
|
+
return await this.buildTarget(this.project.projectFile, activity);
|
|
85
|
+
}
|
|
86
|
+
let result = true;
|
|
87
|
+
for (let file of this.project.files) {
|
|
88
|
+
if (file.fileType.toLowerCase() == activity.sourceExtension) {
|
|
89
|
+
result = await this.buildTarget(file, activity) && result;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
async buildTarget(file, activity) {
|
|
95
|
+
const options = { ...this.options };
|
|
96
|
+
const outfile = this.project.resolveOutputFilePath(file, activity.sourceExtension, activity.compiledExtension);
|
|
97
|
+
options.checkFilenameConventions = this.project.options.checkFilenameConventions ?? this.options.checkFilenameConventions;
|
|
98
|
+
const infile = this.project.resolveInputFilePath(file);
|
|
99
|
+
const buildFilename = path.relative(process.cwd(), infile).replace(/\\/g, '/');
|
|
100
|
+
const callbacks = new CompilerFileCallbacks(buildFilename, options, this.callbacks);
|
|
101
|
+
callbacks.reportMessage(InfrastructureMessages.Info_BuildingFile({ filename: infile, relativeFilename: buildFilename }));
|
|
102
|
+
fs.mkdirSync(path.dirname(outfile), { recursive: true });
|
|
103
|
+
let result = await activity.build(infile, outfile, callbacks, options);
|
|
104
|
+
// check if we had a message that causes the build to be a failure
|
|
105
|
+
// note: command line option here, if set, overrides project setting
|
|
106
|
+
result = result && !callbacks.hasFailureMessage(this.options.compilerWarningsAsErrors ?? this.project.options.compilerWarningsAsErrors);
|
|
107
|
+
if (result) {
|
|
108
|
+
callbacks.reportMessage(InfrastructureMessages.Info_FileBuiltSuccessfully({ filename: infile, relativeFilename: buildFilename }));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
callbacks.reportMessage(InfrastructureMessages.Info_FileNotBuiltSuccessfully({ filename: infile, relativeFilename: buildFilename }));
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=BuildProject.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"version":3,"file":"BuildProject.js","sourceRoot":"","sources":["../../../../src/commands/buildClasses/BuildProject.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
//
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
new
|
|
12
|
-
new
|
|
13
|
-
new
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export const
|
|
18
|
-
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
//# debugId=88e0e501-0e39-53f4-a749-e094188f0876
|
|
23
|
-
//# sourceMappingURL=buildActivities.js.map
|
|
1
|
+
import { BuildKeyboardInfo } from './BuildKeyboardInfo.js';
|
|
2
|
+
import { BuildKmnKeyboard } from './BuildKmnKeyboard.js';
|
|
3
|
+
import { BuildLdmlKeyboard } from './BuildLdmlKeyboard.js';
|
|
4
|
+
import { BuildModel } from './BuildModel.js';
|
|
5
|
+
import { BuildModelInfo } from './BuildModelInfo.js';
|
|
6
|
+
import { BuildPackage } from './BuildPackage.js';
|
|
7
|
+
// These builders are listed in the order that files need to be built in
|
|
8
|
+
// projects. Packages depend on .kmn, .xml and .model.ts file types
|
|
9
|
+
export const buildActivities = [
|
|
10
|
+
new BuildKmnKeyboard(),
|
|
11
|
+
new BuildLdmlKeyboard(),
|
|
12
|
+
new BuildModel(),
|
|
13
|
+
new BuildPackage(),
|
|
14
|
+
];
|
|
15
|
+
// These are built from the .kpj reference after all others
|
|
16
|
+
export const buildKeyboardInfoActivity = new BuildKeyboardInfo();
|
|
17
|
+
export const buildModelInfoActivity = new BuildModelInfo();
|
|
18
|
+
// Note: BuildProject is not listed here to avoid circular references,
|
|
19
|
+
// because it depends on the other activities here. This means that
|
|
20
|
+
// BuildProject must be separately checked.
|
|
21
|
+
//# sourceMappingURL=buildActivities.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"version":3,"file":"buildActivities.js","sourceRoot":"","sources":["../../../../src/commands/buildClasses/buildActivities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wEAAwE;AACxE,mEAAmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,IAAI,gBAAgB,EAAE;IACtB,IAAI,iBAAiB,EAAE;IACvB,IAAI,UAAU,EAAE;IAChB,IAAI,YAAY,EAAE;CACnB,CAAC;AAEF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AACjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,cAAc,EAAE,CAAC;AAG3D,sEAAsE;AACtE,mEAAmE;AACnE,2CAA2C"}
|
|
@@ -1,41 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
import * as
|
|
3
|
-
import * as
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
...
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
//# debugId=d27f0fd4-926d-5cc4-a291-1c72032e536c
|
|
41
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as kmcLdml from '@keymanapp/kmc-ldml';
|
|
4
|
+
import { defaultCompilerOptions, LDMLKeyboardXMLSourceFileReader } from '@keymanapp/common-types';
|
|
5
|
+
import { NodeCompilerCallbacks } from '../../util/NodeCompilerCallbacks.js';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { exitProcess } from '../../util/sysexits.js';
|
|
8
|
+
import { InfrastructureMessages } from '../../messages/infrastructureMessages.js';
|
|
9
|
+
export async function buildTestData(infile, _options, commander) {
|
|
10
|
+
const options = commander.optsWithGlobals();
|
|
11
|
+
let compilerOptions = {
|
|
12
|
+
...defaultCompilerOptions,
|
|
13
|
+
...options,
|
|
14
|
+
saveDebug: false,
|
|
15
|
+
shouldAddCompilerVersion: false,
|
|
16
|
+
readerOptions: {
|
|
17
|
+
importsPath: fileURLToPath(new URL(...LDMLKeyboardXMLSourceFileReader.defaultImportsURL))
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const callbacks = new NodeCompilerCallbacks(options);
|
|
21
|
+
let testData = await loadTestData(infile, callbacks, compilerOptions);
|
|
22
|
+
if (!testData || callbacks.hasFailureMessage()) {
|
|
23
|
+
await exitProcess(1);
|
|
24
|
+
}
|
|
25
|
+
const fileBaseName = options.outFile ?? infile;
|
|
26
|
+
const outFileBase = path.basename(fileBaseName, path.extname(fileBaseName));
|
|
27
|
+
const outFileDir = path.dirname(fileBaseName);
|
|
28
|
+
const outFileJson = path.join(outFileDir, outFileBase + '.json');
|
|
29
|
+
fs.writeFileSync(outFileJson, JSON.stringify(testData, null, ' '));
|
|
30
|
+
callbacks.reportMessage(InfrastructureMessages.Info_FileBuiltSuccessfully({ filename: outFileJson, relativeFilename: infile }));
|
|
31
|
+
}
|
|
32
|
+
async function loadTestData(inputFilename, callbacks, options) {
|
|
33
|
+
const k = new kmcLdml.LdmlKeyboardCompiler();
|
|
34
|
+
if (!await k.init(callbacks, options)) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return await k.loadTestData(inputFilename);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/buildTestData/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAqB,sBAAsB,EAAqC,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AACxJ,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,QAAa,EAAE,SAAc;IAC/E,MAAM,OAAO,GAA2B,SAAS,CAAC,eAAe,EAAE,CAAC;IAEpE,IAAI,eAAe,GAAgC;QACjD,GAAG,sBAAsB;QACzB,GAAG,OAAO;QACV,SAAS,EAAE,KAAK;QAChB,wBAAwB,EAAE,KAAK;QAC/B,aAAa,EAAE;YACb,WAAW,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,+BAA+B,CAAC,iBAAiB,CAAC,CAAC;SAC1F;KACF,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAErD,IAAI,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACtE,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,iBAAiB,EAAE,EAAE;QAC9C,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;KACtB;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,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACpE,SAAS,CAAC,aAAa,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,EAAC,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAG,MAAM,EAAC,CAAC,CAAC,CAAC;AACjI,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,aAAqB,EAAE,SAA4B,EAAE,OAAoC;IACnH,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAC7C,IAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;QACpC,OAAO,IAAI,CAAC;KACb;IACD,OAAO,MAAM,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function buildWindowsPackageInstaller(infile: string, _options: any, commander: any): Promise<void>;
|
|
1
|
+
export declare function buildWindowsPackageInstaller(infile: string, _options: any, commander: any): Promise<never | void>;
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/buildWindowsPackageInstaller/index.ts"],"names":[],"mappings":"AAkBA,wBAAsB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/buildWindowsPackageInstaller/index.ts"],"names":[],"mappings":"AAkBA,wBAAsB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,GAAC,IAAI,CAAC,CAwCrH"}
|
|
@@ -1,45 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
import * as
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
//# debugId=4029cc62-e81d-5aed-bf7d-600c0191747d
|
|
45
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { defaultCompilerOptions } from '@keymanapp/common-types';
|
|
4
|
+
import { NodeCompilerCallbacks } from '../../util/NodeCompilerCallbacks.js';
|
|
5
|
+
import { WindowsPackageInstallerCompiler } from '@keymanapp/kmc-package';
|
|
6
|
+
import { exitProcess } from '../../util/sysexits.js';
|
|
7
|
+
;
|
|
8
|
+
export async function buildWindowsPackageInstaller(infile, _options, commander) {
|
|
9
|
+
// TODO(lowpri): we probably should cleanup the options management here, move
|
|
10
|
+
// translation of command line options to kmc-* options into a separate module
|
|
11
|
+
const options = commander.optsWithGlobals();
|
|
12
|
+
const sources = {
|
|
13
|
+
licenseFilename: options.license,
|
|
14
|
+
msiFilename: options.msi,
|
|
15
|
+
setupExeFilename: options.exe,
|
|
16
|
+
startDisabled: options.startDisabled,
|
|
17
|
+
startWithConfiguration: options.startWithConfiguration,
|
|
18
|
+
appName: options.appName,
|
|
19
|
+
titleImageFilename: options.titleImage
|
|
20
|
+
};
|
|
21
|
+
const outfile = options.outFile;
|
|
22
|
+
// Normalize case for the filename and expand the path; this avoids false
|
|
23
|
+
// positive case mismatches on input filenames and glommed paths
|
|
24
|
+
infile = fs.realpathSync.native(infile);
|
|
25
|
+
const callbacks = new NodeCompilerCallbacks({ ...defaultCompilerOptions, ...options });
|
|
26
|
+
const compiler = new WindowsPackageInstallerCompiler();
|
|
27
|
+
if (!await compiler.init(callbacks, { ...options, sources })) {
|
|
28
|
+
return await exitProcess(1);
|
|
29
|
+
}
|
|
30
|
+
const fileBaseName = outfile ?? infile;
|
|
31
|
+
const outFileBase = path.basename(fileBaseName, path.extname(fileBaseName));
|
|
32
|
+
const outFileDir = path.dirname(fileBaseName);
|
|
33
|
+
const outFileExe = path.join(outFileDir, outFileBase + '.exe');
|
|
34
|
+
const result = await compiler.run(infile, outFileExe);
|
|
35
|
+
if (!result) {
|
|
36
|
+
// errors will have been reported already
|
|
37
|
+
return await exitProcess(1);
|
|
38
|
+
}
|
|
39
|
+
if (!await compiler.write(result.artifacts)) {
|
|
40
|
+
return await exitProcess(1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/buildWindowsPackageInstaller/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAqB,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAkC,MAAM,wBAAwB,CAAC;AAEzG,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAUpD,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,MAAc,EAAE,QAAa,EAAE,SAAc;IAC9F,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAM,OAAO,GAA8C,SAAS,CAAC,eAAe,EAAE,CAAC;IACvF,MAAM,OAAO,GAAmC;QAC9C,eAAe,EAAE,OAAO,CAAC,OAAO;QAChC,WAAW,EAAE,OAAO,CAAC,GAAG;QACxB,gBAAgB,EAAE,OAAO,CAAC,GAAG;QAC7B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;QACtD,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,kBAAkB,EAAE,OAAO,CAAC,UAAU;KACvC,CAAA;IAED,MAAM,OAAO,GAAW,OAAO,CAAC,OAAO,CAAC;IAExC,yEAAyE;IACzE,gEAAgE;IAChE,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAExC,MAAM,SAAS,GAAsB,IAAI,qBAAqB,CAAC,EAAC,GAAG,sBAAsB,EAAE,GAAG,OAAO,EAAC,CAAC,CAAC;IACxG,MAAM,QAAQ,GAAG,IAAI,+BAA+B,EAAE,CAAC;IACvD,IAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAC,GAAG,OAAO,EAAE,OAAO,EAAC,CAAC,EAAE;QACzD,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;KAC7B;IAED,MAAM,YAAY,GAAG,OAAO,IAAI,MAAM,CAAC;IACvC,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,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtD,IAAG,CAAC,MAAM,EAAE;QACV,yCAAyC;QACzC,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;KAC7B;IAED,IAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;QAC1C,OAAO,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC;KAC7B;AACH,CAAC"}
|