UNPKG

@keymanapp/kmc

Version:

Keyman Developer compiler command line tools

52 lines 2.6 kB
import * as path from 'path'; import * as fs from 'fs'; import { KeymanFileTypes } from "@keymanapp/common-types"; import { KeymanDeveloperProject, KPJFileReader } from "@keymanapp/developer-utils"; import { InfrastructureMessages } from "../messages/infrastructureMessages.js"; export const isProject = (filename) => fs.existsSync(filename) && (fs.statSync(filename).isDirectory() || KeymanFileTypes.sourceTypeFromFilename(filename) == ".kpj" /* KeymanFileTypes.Source.Project */); export async function loadProject(infile, callbacks) { infile = path.resolve(infile.replace(/\\/g, '/')); if (fs.existsSync(infile) && fs.statSync(infile).isDirectory()) { // This is a project folder, look for folder-name.kpj infile = path.join(infile, path.basename(infile) + ".kpj" /* KeymanFileTypes.Source.Project */); } // infile should be the .kpj if (!infile.endsWith(".kpj" /* KeymanFileTypes.Source.Project */)) { callbacks.reportMessage(InfrastructureMessages.Error_NotAProjectFile({ filename: infile })); return null; } const project = callbacks.fs.existsSync(infile) ? await loadProjectFromFile(infile, callbacks) : await loadDefaultProjectFromFolder(infile, callbacks); return project; } async function loadDefaultProjectFromFolder(infile, callbacks) { // The folder does not contain a .kpj, so construct a default 2.0 .kpj const project = new KeymanDeveloperProject(infile, '2.0', callbacks); if (!await project.populateFiles()) { callbacks.reportMessage(InfrastructureMessages.Error_InvalidProjectFolder({ folderName: path.dirname(infile) })); return null; } return project; } async function loadProjectFromFile(infile, callbacks) { const kpjData = await callbacks.fsAsync.readFile(infile); const reader = new KPJFileReader(callbacks); let kpj = null; try { kpj = reader.read(kpjData); if (kpj.KeymanDeveloperProject?.Options?.Version && kpj.KeymanDeveloperProject.Options.Version != "1.0" && kpj.KeymanDeveloperProject.Options.Version != "2.0") { callbacks.reportMessage(InfrastructureMessages.Error_UnsupportedProjectVersion({ version: kpj.KeymanDeveloperProject.Options.Version })); return null; } reader.validate(kpj); } catch (e) { callbacks.reportMessage(InfrastructureMessages.Error_InvalidProjectFile({ message: (e ?? '').toString() })); return null; } const project = await reader.transform(infile, kpj); return project; } //# sourceMappingURL=projectLoader.js.map