91 lines
2.0 KiB
TypeScript
91 lines
2.0 KiB
TypeScript
|
import Vue, { VNode } from "vue";
|
||
|
import {
|
||
|
compile,
|
||
|
compileToFunctions,
|
||
|
ssrCompile,
|
||
|
ssrCompileToFunctions,
|
||
|
parseComponent,
|
||
|
generateCodeFrame
|
||
|
} from "./";
|
||
|
|
||
|
// check compile options
|
||
|
const compiled = compile("<div>hi</div>", {
|
||
|
outputSourceRange: true,
|
||
|
preserveWhitespace: false,
|
||
|
whitespace: 'condense',
|
||
|
modules: [
|
||
|
{
|
||
|
preTransformNode: el => el,
|
||
|
transformNode: el => el,
|
||
|
postTransformNode: el => {
|
||
|
el.tag = "p";
|
||
|
},
|
||
|
genData: el => el.tag,
|
||
|
transformCode: (el, code) => code,
|
||
|
staticKeys: ["test"]
|
||
|
}
|
||
|
],
|
||
|
directives: {
|
||
|
test: (node, directiveMeta) => {
|
||
|
node.tag;
|
||
|
directiveMeta.value;
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// can be passed to function constructor
|
||
|
new Function(compiled.render);
|
||
|
compiled.staticRenderFns.map(fn => new Function(fn));
|
||
|
|
||
|
// with outputSourceRange: true
|
||
|
// errors should be objects with range
|
||
|
compiled.errors.forEach(e => {
|
||
|
console.log(e.msg)
|
||
|
})
|
||
|
|
||
|
// without option or without outputSourceRange: true, should be strings
|
||
|
const { errors } = compile(`foo`)
|
||
|
errors.forEach(e => {
|
||
|
console.log(e.length)
|
||
|
})
|
||
|
|
||
|
const { errors: errors2 } = compile(`foo`, {})
|
||
|
errors2.forEach(e => {
|
||
|
console.log(e.length)
|
||
|
})
|
||
|
|
||
|
const { errors: errors3 } = compile(`foo`, {
|
||
|
outputSourceRange: false
|
||
|
})
|
||
|
errors3.forEach(e => {
|
||
|
console.log(e.length)
|
||
|
})
|
||
|
|
||
|
const compiledFns = compileToFunctions("<div>hi</div>");
|
||
|
|
||
|
// can be passed to component render / staticRenderFns options
|
||
|
const vm = new Vue({
|
||
|
data() {
|
||
|
return {
|
||
|
test: "Test"
|
||
|
};
|
||
|
},
|
||
|
render: compiledFns.render,
|
||
|
staticRenderFns: compiledFns.staticRenderFns
|
||
|
});
|
||
|
|
||
|
// can be called with component instance
|
||
|
const vnode: VNode = compiledFns.render.call(vm);
|
||
|
|
||
|
// check SFC parser
|
||
|
const desc = parseComponent("<template></template>", {
|
||
|
pad: "space",
|
||
|
deindent: false
|
||
|
});
|
||
|
|
||
|
const templateContent: string = desc.template!.content;
|
||
|
const scriptContent: string = desc.script!.content;
|
||
|
const styleContent: string = desc.styles.map(s => s.content).join("\n");
|
||
|
|
||
|
const codeframe: string = generateCodeFrame(`foobar`, 0, 4)
|