64 lines
1.9 KiB
JavaScript
64 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
const path = require('canonical-path');
|
|
const fs = require('fs');
|
|
|
|
const examplesPath = path.resolve(__dirname, '../../../examples');
|
|
const packageFolder = path.resolve(__dirname);
|
|
|
|
class PackageJsonCustomizer {
|
|
constructor() {
|
|
this.dependenciesPackageJson = this.readJson(path.join(examplesPath, '/shared/package.json'));
|
|
this.scriptsPackageJson = this.readJson(path.join(examplesPath, '/shared/boilerplate/systemjs/package.json'));
|
|
this.basePackageJson = this.readJson(`${packageFolder}/base.json`);
|
|
this.templatePackageJson = this.readJson(`${packageFolder}/package.json`, false);
|
|
}
|
|
|
|
generate(type = 'systemjs') {
|
|
let packageJson = JSON.parse(this.templatePackageJson);
|
|
let rules = require(`${packageFolder}/${type}.json`);
|
|
|
|
this._mergeJSON(rules, this.basePackageJson);
|
|
|
|
rules.scripts.forEach((r) => {
|
|
const scriptName = r.name;
|
|
const script = this.scriptsPackageJson.scripts[scriptName];
|
|
const finalName = r.rename ? r.rename : r.name;
|
|
const finalScript = r.command ? r.command : script;
|
|
packageJson.scripts[finalName] = finalScript;
|
|
});
|
|
|
|
rules.dependencies.forEach((name) => {
|
|
const version = this.dependenciesPackageJson.dependencies[name];
|
|
packageJson.dependencies[name] = version;
|
|
});
|
|
|
|
rules.devDependencies.forEach((name) => {
|
|
const version = this.dependenciesPackageJson.devDependencies[name];
|
|
packageJson.devDependencies[name] = version;
|
|
});
|
|
|
|
return JSON.stringify(packageJson, null, 2);
|
|
}
|
|
|
|
_mergeJSON(json1, json2) {
|
|
var result = json1;
|
|
for (var prop in json2)
|
|
{
|
|
if (json2.hasOwnProperty(prop))
|
|
{
|
|
result[prop] = (result[prop].concat(json2[prop])).sort();
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
readJson(jsonFile, parse = true) {
|
|
const contents = fs.readFileSync(jsonFile, 'utf8');
|
|
|
|
return parse ? JSON.parse(contents) : contents;
|
|
}
|
|
}
|
|
|
|
module.exports = PackageJsonCustomizer;
|