spiegel-keyman/developer/js/source/package-compiler/kmp-json-file.ts
Marc Durdin 2f2f998da6 fix(developer): schema conformance for model package compiler
Fixes #3199.

Ensures that the model package compiler passes schema validation for
kmp.json. Three problems were corrected:

1. `followKeyboardVersion` is a source-only property; it should not be
   in deployable kmp.json.
2. `copyLocation` should have been a number not a string (in XML
   everything is a string... but JSON has more control here)
3. `fileType` is a source-only property; it also should not be in
   deployable kmp.json.

I have checked that the resulting files validate against the package
kmp.json schema version 1.1.0 defined at
https://github.com/keymanapp/api.keyman.com/blob/master/schemas/package/1.1.0/package.json.

None of these fixes should impact the use of these packages in target
apps. `followKeyboardVersion` and `fileType` are used only in the source
at package development time, and `copyLocation` is unused (and should be
eliminated from Keyman altogether in the future).
2021-03-01 10:57:49 +11:00

77 lines
1.5 KiB
TypeScript

interface KmpJsonFile {
system: KmpJsonFileSystem;
options: KmpJsonFileOptions;
info?: KmpJsonFileInfo;
files?: KmpJsonFileContentFile[];
lexicalModels?: KmpJsonFileLexicalModel[];
startMenu?: KmpJsonFileStartMenu;
keyboards?: KmpJsonFileKeyboard[];
strings?: string[];
}
interface KmpJsonFileSystem {
keymanDeveloperVersion: string;
fileVersion: string;
}
interface KmpJsonFileOptions {
readmeFile?: string;
graphicFile?: string;
executeProgram?: string;
msiFilename?: string;
msiOptions?: string;
}
interface KmpJsonFileInfo {
website?: KmpJsonFileInfoItem;
version?: KmpJsonFileInfoItem;
name?: KmpJsonFileInfoItem;
copyright?: KmpJsonFileInfoItem;
author?: KmpJsonFileInfoItem;
}
interface KmpJsonFileInfoItem {
description: string;
url?: string;
}
interface KmpJsonFileContentFile {
name: string;
description: string;
copyLocation?: number;
}
interface KmpJsonFileLexicalModel {
name: string;
id: string;
languages: KmpJsonFileLanguage[];
}
interface KmpJsonFileLanguage {
name: string;
id: string;
}
interface KmpJsonFileKeyboard {
name: string;
id: string;
version: string;
oskFont?: string;
displayFont?: string;
rtl?: boolean;
languages?: KmpJsonFileLanguage[];
}
interface KmpJsonFileStartMenu {
folder?: string;
addUninstallEntry?: boolean;
items?: KmpJsonFileStartMenuItem[];
}
interface KmpJsonFileStartMenuItem {
name: string;
filename: string;
arguments?: string;
icon?: string;
location?: string;
}