@cola-js/entry
Version:
43 lines (36 loc) • 1.01 kB
JavaScript
const fs = require('fs')
const path = require('path')
const parseConfig = require('./parseConfig')
const extractConfigPlugin = require('./extract-config')
const babel = require('babel-core')
function resolve (...args) {
return path.resolve(__dirname, '../', ...args)
}
function extractConfig (txt) {
const { metadata } = babel.transform(
txt,
{
plugins: [
extractConfigPlugin
]
}
)
return metadata ? metadata.config.value : {}
}
function extractConfigFromSFC (txt, filepath = '') {
const block = txt.match(/<config\b[^>]*>([\s\S]*)<\/config>/)
if (!block) return {}
let lang = block[0].match(/<config .*?lang=\"(.+?)\"/)
lang = (lang && lang[1]) || 'json'
return parseConfig({ source: block[1], lang, filepath })
}
function getAppObj (file) {
const txt = fs.readFileSync(file, 'utf8')
return file.endsWith('.vue') ? extractConfigFromSFC(txt) : extractConfig(txt)
}
module.exports = {
resolve,
getAppObj,
extractConfig,
extractConfigFromSFC
}