72 lines
1.4 KiB
Plaintext
72 lines
1.4 KiB
Plaintext
const {
|
|
hyphenate,
|
|
getPlatformCompiler
|
|
} = require('@dcloudio/uni-cli-shared')
|
|
|
|
const SRC_REGEX = /src="([^"]+)"/g
|
|
module.exports = function compile (source, options) {
|
|
const {
|
|
compileToWxml,
|
|
compileToTemplate
|
|
} = getPlatformCompiler()
|
|
if (typeof compileToWxml === 'function') {
|
|
const components = {
|
|
'slots': {
|
|
src: '/common/slots.wxml',
|
|
name: 'slots'
|
|
}
|
|
}
|
|
|
|
Object.keys(options.imports).forEach(name => {
|
|
if (name !== '_slots_') {
|
|
components[hyphenate(name)] = options.imports[name]
|
|
}
|
|
})
|
|
|
|
const compiled = options.compiled
|
|
|
|
const {
|
|
code,
|
|
// compiled,
|
|
slots: mpvueSlots,
|
|
importCode
|
|
} = compileToWxml(compiled, {
|
|
name: options.name,
|
|
components,
|
|
moduleId: options.scopeId || ('M' + options.name)
|
|
})
|
|
|
|
const deps = []
|
|
if (importCode) {
|
|
let match
|
|
/* eslint-disable no-cond-assign */
|
|
while (match = SRC_REGEX.exec(importCode)) {
|
|
deps.push(match[1])
|
|
}
|
|
}
|
|
|
|
const slots = Object.keys(mpvueSlots).map(slotName => {
|
|
const slot = mpvueSlots[slotName]
|
|
return {
|
|
name: slot.name,
|
|
slotName,
|
|
body: slot.code,
|
|
dependencies: deps
|
|
}
|
|
})
|
|
|
|
return {
|
|
body: code,
|
|
slots,
|
|
deps,
|
|
mpvue: true
|
|
}
|
|
}
|
|
|
|
return compileToTemplate(source, Object.assign(options, {
|
|
htmlParse: {
|
|
templateName: 'octoParse'
|
|
}
|
|
}))
|
|
}
|