mirror of https://github.com/laurent22/joplin.git
Generator: Merge package.json when updating plugin framework
parent
dbbd930f81
commit
a40ab434ca
|
@ -4,6 +4,29 @@ const Generator = require('yeoman-generator');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const yosay = require('yosay');
|
const yosay = require('yosay');
|
||||||
|
|
||||||
|
function mergePackageKey(parentKey, source, dest) {
|
||||||
|
const output = Object.assign({}, dest);
|
||||||
|
|
||||||
|
for (const k in source) {
|
||||||
|
if (!(k in output)) {
|
||||||
|
// If the key doesn't exist in the destination, add it
|
||||||
|
output[k] = source[k];
|
||||||
|
} else if (parentKey === 'devDependencies') {
|
||||||
|
// If we are dealing with the dependencies, overwrite with the
|
||||||
|
// version from source.
|
||||||
|
output[k] = source[k];
|
||||||
|
} else if (typeof source[k] === 'object' && !Array.isArray(k) && source[k] !== null) {
|
||||||
|
// If it's an object, recursively process it
|
||||||
|
output[k] = mergePackageKey(k, source[k], output[k]);
|
||||||
|
} else {
|
||||||
|
// Otherwise, the default is to preserve the destination key
|
||||||
|
output[k] = dest[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = class extends Generator {
|
module.exports = class extends Generator {
|
||||||
|
|
||||||
constructor(args, opts) {
|
constructor(args, opts) {
|
||||||
|
@ -18,8 +41,6 @@ module.exports = class extends Generator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async prompting() {
|
async prompting() {
|
||||||
this.log(yosay(`Welcome to the fine ${chalk.red('generator-joplin')} generator!`));
|
this.log(yosay(`Welcome to the fine ${chalk.red('generator-joplin')} generator!`));
|
||||||
|
|
||||||
|
@ -110,12 +131,28 @@ module.exports = class extends Generator {
|
||||||
if (this.options.update && noUpdateFiles.includes(file)) continue;
|
if (this.options.update && noUpdateFiles.includes(file)) continue;
|
||||||
|
|
||||||
const destFile = file.replace(/_TEMPLATE/, '');
|
const destFile = file.replace(/_TEMPLATE/, '');
|
||||||
|
const destFilePath = this.destinationPath(destFile);
|
||||||
|
|
||||||
this.fs.copyTpl(
|
if (this.options.update && destFile === 'package.json' && this.fs.exists(destFilePath)) {
|
||||||
this.templatePath(file),
|
const destContent = this.fs.readJSON(destFilePath);
|
||||||
this.destinationPath(destFile),
|
|
||||||
this.props
|
this.fs.copy(
|
||||||
);
|
this.templatePath(file),
|
||||||
|
destFilePath, {
|
||||||
|
process: (sourceBuffer) => {
|
||||||
|
const sourceContent = JSON.parse(sourceBuffer.toString());
|
||||||
|
const newContent = mergePackageKey(null, sourceContent, destContent);
|
||||||
|
return JSON.stringify(newContent, null, 2);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.fs.copyTpl(
|
||||||
|
this.templatePath(file),
|
||||||
|
destFilePath,
|
||||||
|
this.props
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.fs.copy(
|
this.fs.copy(
|
||||||
|
|
Loading…
Reference in New Issue