vue-carousel-3d
Version:
Beautiful, flexible and touch supported 3D Carousel for Vue.js
67 lines (57 loc) • 1.97 kB
JavaScript
const path = require('path')
const babelc = require('@babel/core')
const babelOptions = require('../babel.config.js')({ env: () => false })
const vueCompiler = require('vue-template-compiler')
const transpile = require('vue-template-es2015-compiler')
function babelify (src) {
return babelc.transform(src, babelOptions).code
}
// this is heavily based on vueify (Copyright (c) 2014-2016 Evan You)
function vueify (src, filePath) {
function toFunction (code) {
return transpile(`function render () {${code}}`)
}
const parts = vueCompiler.parseComponent(src, { pad: true })
let script = ''
if (!parts.script.lang) {
script = babelify(parts.script.content)
} else {
throw new Error(`${filePath} : unknown <script lang="${parts.script.lang}">`)
}
// mostly copy & paste from vueify
const compiled = vueCompiler.compile(parts.template.content)
const template = {
render: toFunction(compiled.render),
staticRenderFns: `[${compiled.staticRenderFns.map(toFunction).join(',')}]`
}
let output = ''
output +=
';(function(){\n' + script + '\n})()\n' +
// babel 6 compat
'if (module.exports.__esModule) module.exports = module.exports.default\n'
output += 'var __vue__options__ = (typeof module.exports === "function"' +
'? module.exports.options' +
': module.exports)\n'
output +=
'__vue__options__.render = ' + template.render + '\n' +
'__vue__options__.staticRenderFns = ' + template.staticRenderFns + '\n'
return output
}
module.exports = {
process (src, filePath) {
const extension = path.extname(filePath)
let output
switch (extension) {
case '.js':
output = babelify(src)
break
case '.vue':
output = vueify(src, filePath)
break
default:
output = src
}
return output
}
}