UNPKG

@antmove/alipay-wx

Version:

transform alipay miniprogram to wx miniprogram tool.

127 lines (119 loc) 4.3 kB
const fs = require('fs-extra') const Config = require('../../config') const customComponentPrefix = Config.library.customComponentPrefix const { processRequireForWx, replaceCalleeHandleFn, commentBlock, ifProcessHandleFn, ConstructorHandle, prettierCode, transformClass, replaceCallName, getCbName, } = require('@antmove/utils') module.exports = function(fileInfo, ctx, originCode, apis) { const isMatchPlatformApi = originCode.match(/\bmy\.(\w+)/g) try { originCode = transformClass(originCode) originCode = replaceCalleeHandleFn(originCode, 'my', '_wx', apis) originCode = replaceCallName(originCode, { name: 'httpRequest', newName: 'request' }) Config.compile.wrapApis = Object.assign(Config.compile.wrapApis, apis) originCode = commentBlock(originCode) originCode = ifProcessHandleFn(originCode, { entry: 'alipay', dist: 'wx', code: 'my.__target__', }) } catch (error) { console.error(`Invalid js file: ${fileInfo.dist}`) } // if (/\bmy\./g.test(originCode)) { // originCode = originCode.replace(/\bmy\./g, '_wx.'); // } /** * 判断是否为 App()/Page()/Component() * */ const componentWrapFnPath = `${customComponentPrefix}/component/componentClass.js` let matchRet = '' const cbNameInfo = { name: '', } try { getCbName(originCode, cbNameInfo) } catch (error) { console.error(`Invalid js file: ${fileInfo.dist}`) } matchRet = cbNameInfo.name const apiPath = `${customComponentPrefix}/api/index.js` const _compoentPath = componentWrapFnPath let insertCode = '' if (matchRet) { insertCode += `const ${Config.target + matchRet} = require('${_compoentPath}')('${matchRet}');\n` originCode = ConstructorHandle(originCode, { targetName: Config.target }) } if (isMatchPlatformApi) { insertCode += `const _wx = require('${apiPath}')(wx); ` } if (Config.ref.filename === fileInfo.path) { if (matchRet === 'Page') { originCode = originCode.replace(/Page\s*\(\{([^]*)\}\)/, () => { let value = RegExp.$1 let val = '' let newFn = '' if (/onLoad\s*\(\)/.test(value)) { value = value.replace(/onLoad\s*\(\)\s*\{([^]*?)\},*/, '') value.match(/onLoad\s*\(\)\s*\{([^]*?)\}/) newFn = `\n\tonLoad() {\n\t\tlet ref = this.selectComponent('#${Config.ref.id}');\n\t\tthis.${Config.ref.id}(ref);\n${RegExp.$1}\n\t},` } else { newFn = `\n\tonLoad() {\n\t\tlet ref = this.selectComponent('#${Config.ref.id}');\n\t\tthis.${Config.ref.id}(ref);\n\t},` } val += newFn val += value return `Page({\n${val}\n})` }) } else { originCode = originCode.replace(/Component\s*\(\{([^]*?)\}\)/, () => { let value = RegExp.$1 let val = '' let newFn = '' if (/created\s*\(\)/.test(value)) { value = value.replace(/created\s*\(\)\s*\{([^]*?)\},*/, '') value.match(/created\s*\(\)\s*\{([^]*)\}/) newFn = `\n\tcreated() {\n\t\tlet ref = this.selectComponent('#${Config.ref.id}');\n\t\tthis.${Config.ref.id}(ref);\n${RegExp.$1}\n\t},` } else { newFn = `\n\tcreated() {\n\t\tlet ref = this.selectComponent('#${Config.ref.id}');\n\t\tthis.${Config.ref.id}(ref);\n\t},` } val += newFn val += value return `Component({\n${val}\n})` }) } } originCode = insertCode + originCode if (matchRet === 'Component') { originCode = originCode.replace(/_wx\.createSelectorQuery\(\)/g, 'this.createSelectorQuery()') originCode = originCode.replace(/Component\s*\(\{([^]*?)\}\)/, () => { const value = RegExp.$1 let val = '\toptions: {\n\t\tmultipleSlots: true,\n' if (Config.options.scopeStyle) { val += '\t\tstyleIsolation: \'shared\',' } val += '\n},' val += value return `Component({\n${val}\n})` }) } try { originCode = processRequireForWx(originCode, { dirname: ctx.entry, filename: fileInfo.path, filepath: fileInfo.dirname, }) originCode = prettierCode(originCode) } catch (error) { console.error(`Invalid js file: ${fileInfo.dist}`) } fs.outputFileSync(fileInfo.dist, originCode) }