UNPKG

filemanager-plugin

Version:

Filemanager-plugin allows you to delete, zip/unzip(.zip/.tar/.tar.gz), move, rename, copy files or directories before and after webpack/rollup builds. Also, you can customize the lifecycle of webpack or rollup during building.

331 lines (300 loc) 7.58 kB
'use strict'; var require$$0 = require('colors/safe'); var require$$1 = require('glob-parent'); var require$$1$1 = require('glob'); var require$$2 = require('fs-extra'); var require$$4 = require('path'); var require$$1$2 = require('compressing'); var utils = {}; const colors = require$$0; const isTest = process.env.NODE_ENV === 'test'; const log = console.log; const DEFAULT_TYPE = 'all'; const logger$6 = { BUILTIN_LOGS: ['all', 'error'], type: DEFAULT_TYPE, setType(type) { this.type = this.BUILTIN_LOGS.includes(type) ? type : DEFAULT_TYPE; return this; }, info(msg) { if (isTest || this.type !== 'all') return; log(colors.green(msg)); }, error(msg) { if (isTest) return; log(colors.red(msg)); process.exitCode = 1; } }; const flat$1 = (arr) => { return arr.reduce( (pre, cur) => pre.concat(Array.isArray(cur) ? flat$1(cur) : [cur]), [] ); }; /** * @description singleton mode * @returns {function} */ const cacheSingle = (() => { let instance = null; const obj = {}; return () => { instance = instance || obj; return instance; }; })(); utils.logger = logger$6; utils.flat = flat$1; utils.cacheSingle = cacheSingle; const { flat, logger: logger$5 } = utils; const globParent = require$$1; const { globSync: globSync$4 } = require$$1$1; const { copySync, renameSync: renameSync$1, statSync } = require$$2; const { basename: basename$1, join: join$2 } = require$$4; const copy$1 = ({ source, destination, copyOption, globOptions = {}, ...restOption }, globalOptions = {}) => { const { log: logType } = globalOptions; const { isFlat = true, name = '' } = restOption; const wrapSources = Array.isArray(source) ? source : [source]; try { const sources = wrapSources.map((source) => globSync$4(source, globOptions)); const parentPath = globParent(source, {}); for (const source of flat(sources)) { const withFolderBaseName = source.substr(parentPath.length); const dest = join$2(destination, isFlat ? basename$1(source) : withFolderBaseName); copySync(source, dest, copyOption); if (name && statSync(source).isFile()) { renameSync$1(dest, join$2(destination, name)); } logger$5 .setType(logType) .info(`success: copy '${source}' to '${destination}'`); } } catch (e) { logger$5.error(`copy error: ${e}`); } }; var copy_1 = copy$1; const { logger: logger$4 } = utils; const { globSync: globSync$3 } = require$$1$1; const { moveSync } = require$$2; const { basename, join: join$1 } = require$$4; const move$1 = ({ source, destination, option }, options = {}) => { const { log: logType } = options; try { globSync$3(source).forEach((source) => { const dest = join$1(destination, basename(source)); moveSync(source, dest, option); logger$4 .setType(logType) .info(`move: move '${source}' to '${destination}'`); }); } catch (e) { logger$4.error(`move error: ${e}`); } }; var move_1 = move$1; const { logger: logger$3 } = utils; const { globSync: globSync$2 } = require$$1$1; const fs$1 = require$$2; const del$1 = (file, options = {}) => { const { log: logType } = options; try { const files = globSync$2(file); for (const file of files) { fs$1.removeSync(file); logger$3.setType(logType).info(`success: delete '${file}'`); } } catch (e) { logger$3.error(`delete error: ${e}`); } }; var del_1 = del$1; const { logger: logger$2 } = utils; const Compressing = require$$1$2; const fs = require$$2; const { globSync: globSync$1 } = require$$1$1; const { dirname } = require$$4; /** * @desc Zip file/folder. Support zip, tar, gzip. * @param source {string} * @param destination {string} * @param type {string} * @param globalOptions {Object} * @param option {Object} * @returns {Promise<void>} */ const zip$1 = async ( { source, destination, type = 'zip', option }, globalOptions = {} ) => { const { log: logType } = globalOptions; try { const sources = globSync$1(source); if (sources.length === 0) { logger$2.error(`zip error: '${source}' is not exist`); return; } fs.ensureDirSync(dirname(destination)); if (type === 'gzip') { // gzip const hasDirectory = sources.find((source) => fs.statSync(source).isDirectory() ); if (sources.length > 1 || hasDirectory) { logger$2.error(`zip error: Gzip only support compressing a single file`); return; } await new Promise((resolve, reject) => { Compressing.gzip .compressFile(source, destination, option) .then(() => { logger$2 .setType(logType) .info(`success: zip '${source}' to '${destination}'`); resolve(); }) .catch((e) => { logger$2.error(`zip error: ${e}`); reject(e); }); }); } else { // tar, zip, tgz const targetStream = new Compressing[type].Stream(); for (const item of sources) { targetStream.addEntry(item); } await new Promise((resolve, reject) => { targetStream .pipe(fs.createWriteStream(destination)) .on('finish', () => { logger$2 .setType(logType) .info(`success: zip '${source}' to '${destination}'`); resolve(); }) .on('error', (e) => { logger$2.error(`zip error: ${e}`); reject(e); }); }); } } catch (e) { logger$2.error(`zip error: ${e}`); } }; var zip_1 = zip$1; const compressing = require$$1$2; const { globSync } = require$$1$1; const { logger: logger$1 } = utils; /** * @desc Unzip file/folder. Support zip, tar, gzip. * @param source {string} * @param destination {string} * @param type {string} * @param option {Object} * @param globalOptions {Object} * @returns {Promise<void>} */ const unzip$1 = async ( { source, destination, type = 'zip', option }, globalOptions = {} ) => { const { log: logType } = globalOptions; try { const sources = globSync(source); for (const source of sources) { await new Promise((resolve, reject) => { compressing[type] .uncompress(source, destination, option) .then(() => { logger$1 .setType(logType) .info(`success: unzip '${source}' to '${destination}'`); resolve(); }) .catch((e) => { logger$1.error(`unzip error: ${e}`); reject(e); }); }); } } catch (e) { logger$1.error(`unzip error: ${e}`); } }; var unzip_1 = unzip$1; const { renameSync } = require$$2; const { join } = require$$4; const { logger } = utils; const rename$1 = ({ path, oldName, newName }, options = {}) => { const { log: logType } = options; try { const oldPath = join(path, oldName); const newPath = join(path, newName); renameSync(oldPath, newPath); logger .setType(logType) .info(`success: rename '${oldName}' to '${newName}'`); } catch (e) { logger.error(`rename error: ${e}`); } }; var rename_1 = rename$1; const copy = copy_1; const move = move_1; const del = del_1; const zip = zip_1; const unzip = unzip_1; const rename = rename_1; var commander = { copy, move, del, zip, unzip, rename, }; exports.commander = commander; exports.utils = utils;