UNPKG

instapack

Version:

All-in-one TypeScript and Sass compiler for web applications!

56 lines (55 loc) 1.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.readProjectSettingsFrom = void 0; const fse = require("fs-extra"); const upath = require("upath"); const ajv_1 = require("ajv"); const Shout_1 = require("../Shout"); const settingsJsonSchemaPath = require.resolve('../../schemas/settings.json'); async function tryReadPackageJson(path) { try { const packageJson = await fse.readJson(path); if (!packageJson) { return undefined; } return packageJson; } catch (error) { return undefined; } } async function readProjectSettingsFrom(folder) { const settings = { root: upath.toUnix(folder), input: 'client', output: 'wwwroot', jsOut: 'ipack.js', cssOut: 'ipack.css', alias: {}, externals: {}, copy: [], namespace: undefined, umdLibraryProject: false, port1: 0 }; const packageJsonPath = upath.join(folder, 'package.json'); const packageJson = await tryReadPackageJson(packageJsonPath); if (!packageJson) { return settings; } const ajv = new ajv_1.default(); const settingsJsonSchema = await fse.readJson(settingsJsonSchemaPath); const validate = ajv.compile(settingsJsonSchema); if (packageJson.instapack) { if (validate(packageJson.instapack) === false) { Shout_1.Shout.fatal('Abort Build: Invalid instapack project settings in ' + packageJsonPath); console.error(validate.errors); throw new Error('Invalid instapack project settings!'); } Object.assign(settings, packageJson.instapack); settings.cssOut = upath.addExt(settings.cssOut, '.css'); settings.jsOut = upath.addExt(settings.jsOut, '.js'); } return settings; } exports.readProjectSettingsFrom = readProjectSettingsFrom;