@antmove/alipay-wx
Version:
transform alipay miniprogram to wx miniprogram tool.
103 lines (85 loc) • 2.74 kB
JavaScript
/**
* add api wrap bundle
*/
const path = require('path')
const fs = require('fs-extra')
const {
minifyJs,
transformEs6,
} = require('@antmove/utils')
const Config = require('../config.js')
const customComponentPrefix = Config.library.customComponentPrefix
const wrapApis = require('../__api/my.js')
const wrapApisInfo = require('../config/apiInfo/index').descObject
const entry = path.join(__dirname, '../__api')
module.exports = function(output) {
const outputPath = path.join(output, `${customComponentPrefix}/api`)
let apiContent = minifyObject(wrapApis, wrapApis)
let apiInfo = minifyObject(wrapApisInfo, wrapApis)
apiContent = objToString(apiContent)
apiContent = apiContent.replace(/\\n/g, '')
apiContent = apiContent.replace(/\\"/g, '"')
apiInfo = objToString(apiInfo)
apiInfo = apiInfo.replace(/\\n/g, '')
apiInfo = apiInfo.replace(/\\"/g, '"')
Config.wrapApiFiles.forEach((file) => {
copyFile(file)
})
let myJS = `const utils = require("./utils");\nconst descObj = require("./desc.js");\nconst apiObj = ${apiContent}\nmodule.exports = apiObj;`
let descJs = `const utils = require("./utils");\nconst infoObj = ${apiInfo}\nmodule.exports = infoObj;`
if (!Config.isDev()) {
myJS = minifyJs(
transformEs6(myJS),
)
descJs = minifyJs(
transformEs6(descJs),
)
}
fs.outputFileSync(path.join(outputPath, 'my.js'), myJS)
fs.outputFileSync(path.join(outputPath, 'desc.js'), descJs)
function copyFile(filename) {
const inputPath = path.join(entry, filename)
const distPath = path.join(outputPath, filename)
if (!Config.isDev()) {
const content = fs.readFileSync(inputPath, 'utf8')
fs.outputFileSync(distPath, minifyJs(
transformEs6(content),
))
} else {
fs.copy(inputPath, distPath, (err) => {
if (err) { console.error(err) }
})
}
}
}
function objToString(obj = {}) {
let code = '{'
Object.keys(obj)
.forEach((item) => {
if (typeof obj[item] === 'object') {
code += `${String(item)}:${objToString(obj[item])},`
} else if (typeof obj[item] === 'function') {
const fnStr = obj[item].toString()
if (fnStr.match(/^function/)) {
code += `${item}:${fnStr},`
} else {
code += `${item}: function ${fnStr},`
}
} else if (obj[item] !== undefined) {
if (typeof obj[item] === 'string') {
code += `${item}:"${obj[item]}",`
} else {
code += `${item}:${obj[item]},`
}
}
})
return `${code}}`
}
function minifyObject(obj = {}, props = {}) {
const _obj = {}
Object.keys(props)
.forEach((item) => {
_obj[item] = obj[item]
})
return _obj
}