const path = require('path') const fs = require('fs-extra') const uniI18n = require('@dcloudio/uni-cli-i18n') const validate = require('./validate') const patchVant = require('./vant') const migraters = { 'mp-weixin': require('./mp-weixin') } module.exports = function migrate (input, out, options = {}) { options.platform = options.platform || 'mp-weixin' const migrater = migraters[options.platform] if (!migrater) { return console.error(uniI18n.__('migration.errorOnlySupportConvert', { 0: Object.keys(migraters).join(',') })) } input = path.resolve(input) out = path.resolve(out || input) if (!validate(input, out, options)) { return } const [files, assets] = migrater.transform(input, out, options) files.forEach(file => { options.silent !== true && console.log(`write: ${file.path}`) fs.outputFileSync(file.path, file.content) }) const styleExtname = options.extname.style const needCopy = input !== out assets.forEach(asset => { if (typeof asset === 'string') { const src = path.resolve(input, asset) const dest = path.resolve(out, asset.replace(styleExtname, '.css')) if ( needCopy || ( asset.indexOf(styleExtname) !== -1 && styleExtname !== '.css' ) ) { options.silent !== true && console.log(`copy: ${dest}`) try { fs.copySync(src, dest) } catch (e) { // ignore Source and destination must not be the same } } } else { options.silent !== true && console.log(`write: ${path.resolve(out, asset.path)}`) fs.outputFileSync(path.resolve(out, asset.path), asset.content) } }) patchVant(files, assets, out) }