You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
230 lines
9.9 KiB
230 lines
9.9 KiB
/* eslint max-params: [1, 5] */ |
|
const assert = require('assert'); |
|
|
|
/** |
|
* @mixin |
|
* @alias actions/fs |
|
*/ |
|
const fs = module.exports; |
|
|
|
/** |
|
* Read file from templates folder. |
|
* mem-fs-editor method's shortcut, for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor}. |
|
* Shortcut for this.fs.read(this.templatePath(filepath)) |
|
* |
|
* @param {String} filepath - absolute file path or relative to templates folder. |
|
* @param {...*} args - for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
* @returns {*} for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
*/ |
|
fs.readTemplate = function(filepath, ...args) { |
|
return this.fs.read(this.templatePath(filepath), ...args); |
|
}; |
|
|
|
/** |
|
* Copy file from templates folder to destination folder. |
|
* mem-fs-editor method's shortcut, for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor}. |
|
* Shortcut for this.fs.copy(this.templatePath(from), this.destinationPath(to)) |
|
* |
|
* @param {String} from - absolute file path or relative to templates folder. |
|
* @param {String} to - absolute file path or relative to destination folder. |
|
* @param {...*} args - for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
* @returns {*} for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
*/ |
|
fs.copyTemplate = function(from, to, ...args) { |
|
return this.fs.copy(this.templatePath(from), this.destinationPath(to), ...args); |
|
}; |
|
|
|
/** |
|
* Read file from destination folder |
|
* mem-fs-editor method's shortcut, for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor}. |
|
* Shortcut for this.fs.read(this.destinationPath(filepath)). |
|
* |
|
* @param {String} filepath - absolute file path or relative to destination folder. |
|
* @param {...*} args - for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
* @returns {*} for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
*/ |
|
fs.readDestination = function(filepath, ...args) { |
|
return this.fs.read(this.destinationPath(filepath), ...args); |
|
}; |
|
|
|
/** |
|
* Read JSON file from destination folder |
|
* mem-fs-editor method's shortcut, for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor}. |
|
* Shortcut for this.fs.readJSON(this.destinationPath(filepath)). |
|
* |
|
* @param {String} filepath - absolute file path or relative to destination folder. |
|
* @param {...*} args - for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
* @returns {*} for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
*/ |
|
fs.readDestinationJSON = function(filepath, ...args) { |
|
return this.fs.readJSON(this.destinationPath(filepath), ...args); |
|
}; |
|
|
|
/** |
|
* Write file to destination folder |
|
* mem-fs-editor method's shortcut, for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor}. |
|
* Shortcut for this.fs.write(this.destinationPath(filepath)). |
|
* |
|
* @param {String} filepath - absolute file path or relative to destination folder. |
|
* @param {...*} args - for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
* @returns {*} for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
*/ |
|
fs.writeDestination = function(filepath, ...args) { |
|
return this.fs.write(this.destinationPath(filepath), ...args); |
|
}; |
|
|
|
/** |
|
* Write json file to destination folder |
|
* mem-fs-editor method's shortcut, for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor}. |
|
* Shortcut for this.fs.writeJSON(this.destinationPath(filepath)). |
|
* |
|
* @param {String} filepath - absolute file path or relative to destination folder. |
|
* @param {...*} args - for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
* @returns {*} for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
*/ |
|
fs.writeDestinationJSON = function(filepath, ...args) { |
|
return this.fs.writeJSON(this.destinationPath(filepath), ...args); |
|
}; |
|
|
|
/** |
|
* Delete file from destination folder |
|
* mem-fs-editor method's shortcut, for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor}. |
|
* Shortcut for this.fs.delete(this.destinationPath(filepath)). |
|
* |
|
* @param {String} filepath - absolute file path or relative to destination folder. |
|
* @param {...*} args - for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
* @returns {*} for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
*/ |
|
fs.deleteDestination = function(filepath, ...args) { |
|
return this.fs.delete(this.destinationPath(filepath), ...args); |
|
}; |
|
|
|
/** |
|
* Copy file from destination folder to another destination folder. |
|
* mem-fs-editor method's shortcut, for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor}. |
|
* Shortcut for this.fs.copy(this.destinationPath(from), this.destinationPath(to)). |
|
* |
|
* @param {String} from - absolute file path or relative to destination folder. |
|
* @param {String} to - absolute file path or relative to destination folder. |
|
* @param {...*} args - for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
* @returns {*} for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
*/ |
|
fs.copyDestination = function(from, to, ...args) { |
|
return this.fs.copy(this.destinationPath(from), this.destinationPath(to), ...args); |
|
}; |
|
|
|
/** |
|
* Move file from destination folder to another destination folder. |
|
* mem-fs-editor method's shortcut, for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor}. |
|
* Shortcut for this.fs.move(this.destinationPath(from), this.destinationPath(to)). |
|
* |
|
* @param {String} from - absolute file path or relative to destination folder. |
|
* @param {String} to - absolute file path or relative to destination folder. |
|
* @returns {*} for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
*/ |
|
fs.moveDestination = function(from, to, ...args) { |
|
return this.fs.move(this.destinationPath(from), this.destinationPath(to), ...args); |
|
}; |
|
|
|
/** |
|
* Exists file on destination folder. |
|
* mem-fs-editor method's shortcut, for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor}. |
|
* Shortcut for this.fs.exists(this.destinationPath(filepath)). |
|
* |
|
* @param {String} filepath - absolute file path or relative to destination folder. |
|
* @param {...*} args - for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
* @returns {*} for more information see [mem-fs-editor]{@link https://github.com/SBoudrias/mem-fs-editor} |
|
*/ |
|
fs.existsDestination = function(filepath, ...args) { |
|
return this.fs.exists(this.destinationPath(filepath), ...args); |
|
}; |
|
|
|
/** |
|
* Copy a template from templates folder to the destination. |
|
* |
|
* @param {String|Array} source - template file, absolute or relative to templatePath(). |
|
* @param {String|Array} [destination] - destination, absolute or relative to destinationPath(). |
|
* @param {Object} [templateData] - ejs data |
|
* @param {Object} [templateOptions] - ejs options |
|
* @param {Object} [copyOptions] - mem-fs-editor copy options |
|
*/ |
|
fs.renderTemplate = function( |
|
source = '', |
|
destination = source, |
|
templateData = this._templateData(), |
|
templateOptions, |
|
copyOptions |
|
) { |
|
if (typeof templateData === 'string') { |
|
templateData = this._templateData(templateData); |
|
} |
|
|
|
templateOptions = { context: this, ...templateOptions }; |
|
|
|
source = Array.isArray(source) ? source : [source]; |
|
const templatePath = this.templatePath(...source); |
|
destination = Array.isArray(destination) ? destination : [destination]; |
|
const destinationPath = this.destinationPath(...destination); |
|
|
|
this.fs.copyTpl( |
|
templatePath, |
|
destinationPath, |
|
templateData, |
|
templateOptions, |
|
copyOptions |
|
); |
|
}; |
|
|
|
/** |
|
* Copy templates from templates folder to the destination. |
|
* |
|
* @param {Array} templates - template file, absolute or relative to templatePath(). |
|
* @param {function} [templates.when] - conditional if the template should be written. |
|
* First argument is the templateData, second is the generator. |
|
* @param {String|Array} templates.source - template file, absolute or relative to templatePath(). |
|
* @param {String|Array} [templates.destination] - destination, absolute or relative to destinationPath(). |
|
* @param {Object} [templates.templateOptions] - ejs options |
|
* @param {Object} [templates.copyOptions] - mem-fs-editor copy options |
|
* @param {Object} [templateData] - ejs data |
|
*/ |
|
fs.renderTemplates = function(templates, templateData = this._templateData()) { |
|
assert(Array.isArray(templates), 'Templates must an array'); |
|
if (typeof templateData === 'string') { |
|
templateData = this._templateData(templateData); |
|
} |
|
|
|
const self = this; |
|
const renderEachTemplate = template => { |
|
if (template.when && !template.when(templateData, this)) { |
|
return; |
|
} |
|
|
|
const { source, destination, templateOptions, copyOptions } = template; |
|
self.renderTemplate(source, destination, templateData, templateOptions, copyOptions); |
|
}; |
|
|
|
templates.forEach(template => renderEachTemplate(template)); |
|
}; |
|
|
|
/** |
|
* Utility method to get a formatted data for templates. |
|
* |
|
* @param {String} path - path to the storage key. |
|
* @return {Object} data to be passed to the templates. |
|
*/ |
|
fs._templateData = function(path) { |
|
if (path) { |
|
return this.config.getPath(path); |
|
} |
|
|
|
const allConfig = this.config.getAll(); |
|
if (this.generatorConfig) { |
|
Object.assign(allConfig, this.generatorConfig.getAll()); |
|
} |
|
|
|
if (this.instanceConfig) { |
|
Object.assign(allConfig, this.instanceConfig.getAll()); |
|
} |
|
|
|
return allConfig; |
|
};
|
|
|