feat(compiler): block optimization codegen for RootNode
This commit is contained in:
parent
c0bf341748
commit
24bd6c27e0
@ -4,25 +4,16 @@ exports[`compiler: codegen ConditionalExpression 1`] = `
|
|||||||
"
|
"
|
||||||
return function render() {
|
return function render() {
|
||||||
with (this) {
|
with (this) {
|
||||||
return (foo, ok
|
return ok
|
||||||
? foo()
|
? foo()
|
||||||
: orNot
|
: orNot
|
||||||
? bar()
|
? bar()
|
||||||
: baz())
|
: baz()
|
||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`compiler: codegen SequenceExpression 1`] = `
|
exports[`compiler: codegen Element (callExpression + objectExpression + arrayExpression) 1`] = `
|
||||||
"
|
|
||||||
return function render() {
|
|
||||||
with (this) {
|
|
||||||
return (foo, bar(baz))
|
|
||||||
}
|
|
||||||
}"
|
|
||||||
`;
|
|
||||||
|
|
||||||
exports[`compiler: codegen callExpression + objectExpression + arrayExpression 1`] = `
|
|
||||||
"
|
"
|
||||||
return function render() {
|
return function render() {
|
||||||
with (this) {
|
with (this) {
|
||||||
@ -40,6 +31,15 @@ return function render() {
|
|||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`compiler: codegen SequenceExpression 1`] = `
|
||||||
|
"
|
||||||
|
return function render() {
|
||||||
|
with (this) {
|
||||||
|
return (foo, bar(baz))
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`compiler: codegen comment 1`] = `
|
exports[`compiler: codegen comment 1`] = `
|
||||||
"
|
"
|
||||||
return function render() {
|
return function render() {
|
||||||
@ -58,6 +58,15 @@ return function render() {
|
|||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`compiler: codegen forNode 1`] = `
|
||||||
|
"
|
||||||
|
return function render() {
|
||||||
|
with (this) {
|
||||||
|
return (foo, bar)
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`compiler: codegen function mode preamble 1`] = `
|
exports[`compiler: codegen function mode preamble 1`] = `
|
||||||
"const _Vue = Vue
|
"const _Vue = Vue
|
||||||
|
|
||||||
@ -145,28 +154,3 @@ return function render() {
|
|||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`compiler: codegen text + comment + interpolation 1`] = `
|
|
||||||
"
|
|
||||||
return function render() {
|
|
||||||
with (this) {
|
|
||||||
return [
|
|
||||||
\\"foo\\",
|
|
||||||
_toString(hello),
|
|
||||||
_createVNode(_Comment, 0, \\"foo\\")
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}"
|
|
||||||
`;
|
|
||||||
|
|
||||||
exports[`compiler: codegen text + comment + interpolation w/ prefixIdentifiers: true 1`] = `
|
|
||||||
"
|
|
||||||
return function render() {
|
|
||||||
const _ctx = this
|
|
||||||
return [
|
|
||||||
\\"foo\\",
|
|
||||||
toString(hello),
|
|
||||||
createVNode(Comment, 0, \\"foo\\")
|
|
||||||
]
|
|
||||||
}"
|
|
||||||
`;
|
|
||||||
|
@ -7,7 +7,7 @@ return function render() {
|
|||||||
with (this) {
|
with (this) {
|
||||||
const { toString: _toString, openBlock: _openBlock, createVNode: _createVNode, createBlock: _createBlock, Empty: _Empty, Fragment: _Fragment, renderList: _renderList } = _Vue
|
const { toString: _toString, openBlock: _openBlock, createVNode: _createVNode, createBlock: _createBlock, Empty: _Empty, Fragment: _Fragment, renderList: _renderList } = _Vue
|
||||||
|
|
||||||
return _createVNode(\\"div\\", {
|
return (_openBlock(), _createBlock(\\"div\\", {
|
||||||
id: \\"foo\\",
|
id: \\"foo\\",
|
||||||
class: bar.baz
|
class: bar.baz
|
||||||
}, [
|
}, [
|
||||||
@ -22,7 +22,7 @@ return function render() {
|
|||||||
_createVNode(\\"span\\", null, _toString(value + index), 1 /* TEXT */)
|
_createVNode(\\"span\\", null, _toString(value + index), 1 /* TEXT */)
|
||||||
]))
|
]))
|
||||||
}), 128 /* UNKEYED_FRAGMENT */))
|
}), 128 /* UNKEYED_FRAGMENT */))
|
||||||
], 2 /* CLASS */)
|
], 2 /* CLASS */))
|
||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
@ -32,7 +32,7 @@ exports[`compiler: integration tests function mode w/ prefixIdentifiers: true 1`
|
|||||||
|
|
||||||
return function render() {
|
return function render() {
|
||||||
const _ctx = this
|
const _ctx = this
|
||||||
return createVNode(\\"div\\", {
|
return (openBlock(), createBlock(\\"div\\", {
|
||||||
id: \\"foo\\",
|
id: \\"foo\\",
|
||||||
class: _ctx.bar.baz
|
class: _ctx.bar.baz
|
||||||
}, [
|
}, [
|
||||||
@ -47,7 +47,7 @@ return function render() {
|
|||||||
createVNode(\\"span\\", null, toString(value + index), 1 /* TEXT */)
|
createVNode(\\"span\\", null, toString(value + index), 1 /* TEXT */)
|
||||||
]))
|
]))
|
||||||
}), 128 /* UNKEYED_FRAGMENT */))
|
}), 128 /* UNKEYED_FRAGMENT */))
|
||||||
], 2 /* CLASS */)
|
], 2 /* CLASS */))
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ exports[`compiler: integration tests module mode 1`] = `
|
|||||||
|
|
||||||
export default function render() {
|
export default function render() {
|
||||||
const _ctx = this
|
const _ctx = this
|
||||||
return createVNode(\\"div\\", {
|
return (openBlock(), createBlock(\\"div\\", {
|
||||||
id: \\"foo\\",
|
id: \\"foo\\",
|
||||||
class: _ctx.bar.baz
|
class: _ctx.bar.baz
|
||||||
}, [
|
}, [
|
||||||
@ -71,6 +71,6 @@ export default function render() {
|
|||||||
createVNode(\\"span\\", null, _toString(value + index), 1 /* TEXT */)
|
createVNode(\\"span\\", null, _toString(value + index), 1 /* TEXT */)
|
||||||
]))
|
]))
|
||||||
}), 128 /* UNKEYED_FRAGMENT */))
|
}), 128 /* UNKEYED_FRAGMENT */))
|
||||||
], 2 /* CLASS */)
|
], 2 /* CLASS */))
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
@ -45,6 +45,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -110,6 +111,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -175,6 +177,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -258,6 +261,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -341,6 +345,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -424,6 +429,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -507,6 +513,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -573,6 +580,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -639,6 +647,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -705,6 +714,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -771,6 +781,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -836,6 +847,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -926,6 +938,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -992,6 +1005,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1058,6 +1072,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1124,6 +1139,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1266,6 +1282,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1337,6 +1354,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1408,6 +1426,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1474,6 +1493,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1540,6 +1560,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1611,6 +1632,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1701,6 +1723,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1766,6 +1789,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1831,6 +1855,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1896,6 +1921,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -1961,6 +1987,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2026,6 +2053,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2092,6 +2120,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2158,6 +2187,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2229,6 +2259,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2300,6 +2331,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2390,6 +2422,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2480,6 +2513,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2570,6 +2604,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2677,6 +2712,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2784,6 +2820,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2891,6 +2928,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -2998,6 +3036,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3105,6 +3144,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3212,6 +3252,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3319,6 +3360,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3426,6 +3468,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3491,6 +3534,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3532,6 +3576,7 @@ Object {
|
|||||||
"type": 3,
|
"type": 3,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3597,6 +3642,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3662,6 +3708,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3727,6 +3774,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3792,6 +3840,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3858,6 +3907,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -3940,6 +3990,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4006,6 +4057,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4089,6 +4141,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4196,6 +4249,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4286,6 +4340,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4376,6 +4431,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4423,6 +4479,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4489,6 +4546,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4555,6 +4613,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4621,6 +4680,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4765,6 +4825,7 @@ class=\\"bar\\"></div></template>",
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4908,6 +4969,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -4973,6 +5035,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5038,6 +5101,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5103,6 +5167,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5168,6 +5233,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5234,6 +5300,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5300,6 +5367,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5366,6 +5434,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5432,6 +5501,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5539,6 +5609,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5646,6 +5717,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5753,6 +5825,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5860,6 +5933,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -5967,6 +6041,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6074,6 +6149,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6181,6 +6257,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6288,6 +6365,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6378,6 +6456,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6485,6 +6564,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6550,6 +6630,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6658,6 +6739,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6724,6 +6806,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6790,6 +6873,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6855,6 +6939,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6902,6 +6987,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -6949,6 +7035,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7031,6 +7118,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7097,6 +7185,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7200,6 +7289,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7271,6 +7361,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7342,6 +7433,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7384,6 +7476,7 @@ Object {
|
|||||||
"type": 2,
|
"type": 2,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7426,6 +7519,7 @@ Object {
|
|||||||
"type": 2,
|
"type": 2,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7484,6 +7578,7 @@ Object {
|
|||||||
"type": 5,
|
"type": 5,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7558,6 +7653,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7741,6 +7837,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
@ -7943,6 +8040,7 @@ Object {
|
|||||||
"type": 1,
|
"type": 1,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
"codegenNode": undefined,
|
||||||
"hoists": Array [],
|
"hoists": Array [],
|
||||||
"imports": Array [],
|
"imports": Array [],
|
||||||
"loc": Object {
|
"loc": Object {
|
||||||
|
@ -23,6 +23,7 @@ function createRoot(options: Partial<RootNode> = {}): RootNode {
|
|||||||
imports: [],
|
imports: [],
|
||||||
statements: [],
|
statements: [],
|
||||||
hoists: [],
|
hoists: [],
|
||||||
|
codegenNode: undefined,
|
||||||
loc: locStub,
|
loc: locStub,
|
||||||
...options
|
...options
|
||||||
}
|
}
|
||||||
@ -103,14 +104,12 @@ describe('compiler: codegen', () => {
|
|||||||
test('static text', () => {
|
test('static text', () => {
|
||||||
const { code } = generate(
|
const { code } = generate(
|
||||||
createRoot({
|
createRoot({
|
||||||
children: [
|
codegenNode: {
|
||||||
{
|
type: NodeTypes.TEXT,
|
||||||
type: NodeTypes.TEXT,
|
content: 'hello',
|
||||||
content: 'hello',
|
isEmpty: false,
|
||||||
isEmpty: false,
|
loc: locStub
|
||||||
loc: locStub
|
}
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
expect(code).toMatch(`return "hello"`)
|
expect(code).toMatch(`return "hello"`)
|
||||||
@ -120,7 +119,7 @@ describe('compiler: codegen', () => {
|
|||||||
test('interpolation', () => {
|
test('interpolation', () => {
|
||||||
const { code } = generate(
|
const { code } = generate(
|
||||||
createRoot({
|
createRoot({
|
||||||
children: [createInterpolation(`hello`, locStub)]
|
codegenNode: createInterpolation(`hello`, locStub)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
expect(code).toMatch(`return _${TO_STRING}(hello)`)
|
expect(code).toMatch(`return _${TO_STRING}(hello)`)
|
||||||
@ -130,93 +129,30 @@ describe('compiler: codegen', () => {
|
|||||||
test('comment', () => {
|
test('comment', () => {
|
||||||
const { code } = generate(
|
const { code } = generate(
|
||||||
createRoot({
|
createRoot({
|
||||||
children: [
|
codegenNode: {
|
||||||
{
|
type: NodeTypes.COMMENT,
|
||||||
type: NodeTypes.COMMENT,
|
content: 'foo',
|
||||||
content: 'foo',
|
loc: locStub
|
||||||
loc: locStub
|
}
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
expect(code).toMatch(`return _${CREATE_VNODE}(_${COMMENT}, 0, "foo")`)
|
expect(code).toMatch(`return _${CREATE_VNODE}(_${COMMENT}, 0, "foo")`)
|
||||||
expect(code).toMatchSnapshot()
|
expect(code).toMatchSnapshot()
|
||||||
})
|
})
|
||||||
|
|
||||||
test('text + comment + interpolation', () => {
|
|
||||||
const { code } = generate(
|
|
||||||
createRoot({
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
type: NodeTypes.TEXT,
|
|
||||||
content: 'foo',
|
|
||||||
isEmpty: false,
|
|
||||||
loc: locStub
|
|
||||||
},
|
|
||||||
createInterpolation(`hello`, locStub),
|
|
||||||
{
|
|
||||||
type: NodeTypes.COMMENT,
|
|
||||||
content: 'foo',
|
|
||||||
loc: locStub
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
)
|
|
||||||
expect(code).toMatch(`
|
|
||||||
return [
|
|
||||||
"foo",
|
|
||||||
_${TO_STRING}(hello),
|
|
||||||
_${CREATE_VNODE}(_${COMMENT}, 0, "foo")
|
|
||||||
]`)
|
|
||||||
expect(code).toMatchSnapshot()
|
|
||||||
})
|
|
||||||
|
|
||||||
test('text + comment + interpolation w/ prefixIdentifiers: true', () => {
|
|
||||||
const { code } = generate(
|
|
||||||
createRoot({
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
type: NodeTypes.TEXT,
|
|
||||||
content: 'foo',
|
|
||||||
isEmpty: false,
|
|
||||||
loc: locStub
|
|
||||||
},
|
|
||||||
createInterpolation(`hello`, locStub),
|
|
||||||
{
|
|
||||||
type: NodeTypes.COMMENT,
|
|
||||||
content: 'foo',
|
|
||||||
loc: locStub
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
prefixIdentifiers: true
|
|
||||||
}
|
|
||||||
)
|
|
||||||
expect(code).toMatch(`
|
|
||||||
return [
|
|
||||||
"foo",
|
|
||||||
${TO_STRING}(hello),
|
|
||||||
${CREATE_VNODE}(${COMMENT}, 0, "foo")
|
|
||||||
]`)
|
|
||||||
expect(code).toMatchSnapshot()
|
|
||||||
})
|
|
||||||
|
|
||||||
test('compound expression', () => {
|
test('compound expression', () => {
|
||||||
const { code } = generate(
|
const { code } = generate(
|
||||||
createRoot({
|
createRoot({
|
||||||
children: [
|
codegenNode: createCompoundExpression([
|
||||||
createCompoundExpression([
|
`_ctx.`,
|
||||||
`_ctx.`,
|
createSimpleExpression(`foo`, false, locStub),
|
||||||
createSimpleExpression(`foo`, false, locStub),
|
` + `,
|
||||||
` + `,
|
{
|
||||||
{
|
type: NodeTypes.INTERPOLATION,
|
||||||
type: NodeTypes.INTERPOLATION,
|
loc: locStub,
|
||||||
loc: locStub,
|
content: createSimpleExpression(`bar`, false, locStub)
|
||||||
content: createSimpleExpression(`bar`, false, locStub)
|
}
|
||||||
}
|
])
|
||||||
])
|
|
||||||
]
|
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
expect(code).toMatch(`return _ctx.foo + _${TO_STRING}(bar)`)
|
expect(code).toMatch(`return _ctx.foo + _${TO_STRING}(bar)`)
|
||||||
@ -226,284 +162,105 @@ describe('compiler: codegen', () => {
|
|||||||
test('ifNode', () => {
|
test('ifNode', () => {
|
||||||
const { code } = generate(
|
const { code } = generate(
|
||||||
createRoot({
|
createRoot({
|
||||||
children: [
|
codegenNode: {
|
||||||
{
|
type: NodeTypes.IF,
|
||||||
type: NodeTypes.IF,
|
loc: locStub,
|
||||||
loc: locStub,
|
branches: [],
|
||||||
branches: [],
|
codegenNode: createSequenceExpression([
|
||||||
codegenNode: createSequenceExpression([
|
createSimpleExpression('foo', false),
|
||||||
createSimpleExpression('foo', false),
|
createSimpleExpression('bar', false)
|
||||||
createSimpleExpression('bar', false)
|
])
|
||||||
])
|
}
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
expect(code).toMatch(`return (foo, bar)`)
|
expect(code).toMatch(`return (foo, bar)`)
|
||||||
expect(code).toMatchSnapshot()
|
expect(code).toMatchSnapshot()
|
||||||
})
|
})
|
||||||
|
|
||||||
// test('forNode', () => {
|
test('forNode', () => {
|
||||||
// const { code } = generate(
|
|
||||||
// createRoot({
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// type: NodeTypes.FOR,
|
|
||||||
// loc: locStub,
|
|
||||||
// source: createSimpleExpression(`list`, false, locStub),
|
|
||||||
// valueAlias: createSimpleExpression(`v`, false, locStub),
|
|
||||||
// keyAlias: createSimpleExpression(`k`, false, locStub),
|
|
||||||
// objectIndexAlias: createSimpleExpression(`i`, false, locStub),
|
|
||||||
// children: [createInterpolation(`v`, locStub)]
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// })
|
|
||||||
// )
|
|
||||||
// expect(code).toMatch(
|
|
||||||
// `return _${RENDER_LIST}(list, (v, k, i) => {
|
|
||||||
// return _${TO_STRING}(v)
|
|
||||||
// })`
|
|
||||||
// )
|
|
||||||
// expect(code).toMatchSnapshot()
|
|
||||||
// })
|
|
||||||
|
|
||||||
// test('forNode w/ prefixIdentifiers: true', () => {
|
|
||||||
// const { code } = generate(
|
|
||||||
// createRoot({
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// type: NodeTypes.FOR,
|
|
||||||
// loc: locStub,
|
|
||||||
// source: createSimpleExpression(`list`, false, locStub),
|
|
||||||
// valueAlias: createSimpleExpression(`v`, false, locStub),
|
|
||||||
// keyAlias: createSimpleExpression(`k`, false, locStub),
|
|
||||||
// objectIndexAlias: createSimpleExpression(`i`, false, locStub),
|
|
||||||
// children: [createInterpolation(`v`, locStub)]
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// }),
|
|
||||||
// {
|
|
||||||
// prefixIdentifiers: true
|
|
||||||
// }
|
|
||||||
// )
|
|
||||||
// expect(code).toMatch(
|
|
||||||
// `return ${RENDER_LIST}(list, (v, k, i) => {
|
|
||||||
// return ${TO_STRING}(v)
|
|
||||||
// })`
|
|
||||||
// )
|
|
||||||
// expect(code).toMatchSnapshot()
|
|
||||||
// })
|
|
||||||
|
|
||||||
// test('forNode w/ skipped value alias', () => {
|
|
||||||
// const { code } = generate(
|
|
||||||
// createRoot({
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// type: NodeTypes.FOR,
|
|
||||||
// loc: locStub,
|
|
||||||
// source: createSimpleExpression(`list`, false, locStub),
|
|
||||||
// valueAlias: undefined,
|
|
||||||
// keyAlias: createSimpleExpression(`k`, false, locStub),
|
|
||||||
// objectIndexAlias: createSimpleExpression(`i`, false, locStub),
|
|
||||||
// children: [createInterpolation(`v`, locStub)]
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// })
|
|
||||||
// )
|
|
||||||
// expect(code).toMatch(
|
|
||||||
// `return _${RENDER_LIST}(list, (__value, k, i) => {
|
|
||||||
// return _${TO_STRING}(v)
|
|
||||||
// })`
|
|
||||||
// )
|
|
||||||
// expect(code).toMatchSnapshot()
|
|
||||||
// })
|
|
||||||
|
|
||||||
// test('forNode w/ skipped key alias', () => {
|
|
||||||
// const { code } = generate(
|
|
||||||
// createRoot({
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// type: NodeTypes.FOR,
|
|
||||||
// loc: locStub,
|
|
||||||
// source: createSimpleExpression(`list`, false, locStub),
|
|
||||||
// valueAlias: createSimpleExpression(`v`, false, locStub),
|
|
||||||
// keyAlias: undefined,
|
|
||||||
// objectIndexAlias: createSimpleExpression(`i`, false, locStub),
|
|
||||||
// children: [createInterpolation(`v`, locStub)]
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// })
|
|
||||||
// )
|
|
||||||
// expect(code).toMatch(
|
|
||||||
// `return _${RENDER_LIST}(list, (v, __key, i) => {
|
|
||||||
// return _${TO_STRING}(v)
|
|
||||||
// })`
|
|
||||||
// )
|
|
||||||
// expect(code).toMatchSnapshot()
|
|
||||||
// })
|
|
||||||
|
|
||||||
// test('forNode w/ skipped value and key aliases', () => {
|
|
||||||
// const { code } = generate(
|
|
||||||
// createRoot({
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// type: NodeTypes.FOR,
|
|
||||||
// loc: locStub,
|
|
||||||
// source: createSimpleExpression(`list`, false, locStub),
|
|
||||||
// valueAlias: undefined,
|
|
||||||
// keyAlias: undefined,
|
|
||||||
// objectIndexAlias: createSimpleExpression(`i`, false, locStub),
|
|
||||||
// children: [createInterpolation(`v`, locStub)]
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// })
|
|
||||||
// )
|
|
||||||
// expect(code).toMatch(
|
|
||||||
// `return _${RENDER_LIST}(list, (__value, __key, i) => {
|
|
||||||
// return _${TO_STRING}(v)
|
|
||||||
// })`
|
|
||||||
// )
|
|
||||||
// expect(code).toMatchSnapshot()
|
|
||||||
// })
|
|
||||||
|
|
||||||
// test('SlotFunctionExpression', () => {
|
|
||||||
// const { code } = generate(
|
|
||||||
// createRoot({
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// type: NodeTypes.ELEMENT,
|
|
||||||
// tagType: ElementTypes.COMPONENT,
|
|
||||||
// ns: Namespaces.HTML,
|
|
||||||
// isSelfClosing: false,
|
|
||||||
// tag: `Comp`,
|
|
||||||
// loc: locStub,
|
|
||||||
// props: [],
|
|
||||||
// children: [],
|
|
||||||
// codegenNode: {
|
|
||||||
// type: NodeTypes.JS_CALL_EXPRESSION,
|
|
||||||
// loc: locStub,
|
|
||||||
// callee: `_${CREATE_VNODE}`,
|
|
||||||
// arguments: [
|
|
||||||
// `Comp`,
|
|
||||||
// `0`,
|
|
||||||
// {
|
|
||||||
// type: NodeTypes.JS_OBJECT_EXPRESSION,
|
|
||||||
// loc: locStub,
|
|
||||||
// properties: [
|
|
||||||
// {
|
|
||||||
// type: NodeTypes.JS_PROPERTY,
|
|
||||||
// loc: locStub,
|
|
||||||
// key: {
|
|
||||||
// type: NodeTypes.SIMPLE_EXPRESSION,
|
|
||||||
// isStatic: true,
|
|
||||||
// content: `default`,
|
|
||||||
// loc: locStub
|
|
||||||
// },
|
|
||||||
// value: {
|
|
||||||
// type: NodeTypes.JS_FUNCTION_EXPRESSION,
|
|
||||||
// loc: locStub,
|
|
||||||
// params: {
|
|
||||||
// type: NodeTypes.SIMPLE_EXPRESSION,
|
|
||||||
// isStatic: false,
|
|
||||||
// content: `{ foo }`,
|
|
||||||
// loc: locStub
|
|
||||||
// },
|
|
||||||
// returns: [
|
|
||||||
// {
|
|
||||||
// type: NodeTypes.INTERPOLATION,
|
|
||||||
// loc: locStub,
|
|
||||||
// content: {
|
|
||||||
// type: NodeTypes.SIMPLE_EXPRESSION,
|
|
||||||
// isStatic: false,
|
|
||||||
// content: `foo`,
|
|
||||||
// loc: locStub
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// })
|
|
||||||
// )
|
|
||||||
// expect(code).toMatch(
|
|
||||||
// `return _createVNode(Comp, 0, {
|
|
||||||
// default: ({ foo }) => [
|
|
||||||
// _toString(foo)
|
|
||||||
// ]
|
|
||||||
// })`
|
|
||||||
// )
|
|
||||||
// expect(code).toMatchSnapshot()
|
|
||||||
// })
|
|
||||||
|
|
||||||
test('callExpression + objectExpression + arrayExpression', () => {
|
|
||||||
const { code } = generate(
|
const { code } = generate(
|
||||||
createRoot({
|
createRoot({
|
||||||
children: [
|
codegenNode: {
|
||||||
createElementWithCodegen([
|
type: NodeTypes.FOR,
|
||||||
// string
|
loc: locStub,
|
||||||
`"div"`,
|
source: createSimpleExpression('foo', false),
|
||||||
// ObjectExpression
|
valueAlias: undefined,
|
||||||
createObjectExpression(
|
keyAlias: undefined,
|
||||||
[
|
objectIndexAlias: undefined,
|
||||||
createObjectProperty(
|
children: [],
|
||||||
createSimpleExpression(`id`, true, locStub),
|
codegenNode: createSequenceExpression([
|
||||||
createSimpleExpression(`foo`, true, locStub)
|
createSimpleExpression('foo', false),
|
||||||
),
|
createSimpleExpression('bar', false)
|
||||||
createObjectProperty(
|
|
||||||
createSimpleExpression(`prop`, false, locStub),
|
|
||||||
createSimpleExpression(`bar`, false, locStub)
|
|
||||||
),
|
|
||||||
// compound expression as computed key
|
|
||||||
createObjectProperty(
|
|
||||||
{
|
|
||||||
type: NodeTypes.COMPOUND_EXPRESSION,
|
|
||||||
loc: locStub,
|
|
||||||
children: [
|
|
||||||
`foo + `,
|
|
||||||
createSimpleExpression(`bar`, false, locStub)
|
|
||||||
]
|
|
||||||
},
|
|
||||||
createSimpleExpression(`bar`, false, locStub)
|
|
||||||
)
|
|
||||||
],
|
|
||||||
locStub
|
|
||||||
),
|
|
||||||
// ChildNode[]
|
|
||||||
[
|
|
||||||
createElementWithCodegen([
|
|
||||||
`"p"`,
|
|
||||||
createObjectExpression(
|
|
||||||
[
|
|
||||||
createObjectProperty(
|
|
||||||
// should quote the key!
|
|
||||||
createSimpleExpression(`some-key`, true, locStub),
|
|
||||||
createSimpleExpression(`foo`, true, locStub)
|
|
||||||
)
|
|
||||||
],
|
|
||||||
locStub
|
|
||||||
)
|
|
||||||
])
|
|
||||||
],
|
|
||||||
// ArrayExpression
|
|
||||||
createArrayExpression(
|
|
||||||
[
|
|
||||||
'foo',
|
|
||||||
{
|
|
||||||
type: NodeTypes.JS_CALL_EXPRESSION,
|
|
||||||
loc: locStub,
|
|
||||||
callee: CREATE_VNODE,
|
|
||||||
arguments: [`"p"`]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
locStub
|
|
||||||
)
|
|
||||||
])
|
])
|
||||||
]
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
expect(code).toMatch(`return (foo, bar)`)
|
||||||
|
expect(code).toMatchSnapshot()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('Element (callExpression + objectExpression + arrayExpression)', () => {
|
||||||
|
const { code } = generate(
|
||||||
|
createRoot({
|
||||||
|
codegenNode: createElementWithCodegen([
|
||||||
|
// string
|
||||||
|
`"div"`,
|
||||||
|
// ObjectExpression
|
||||||
|
createObjectExpression(
|
||||||
|
[
|
||||||
|
createObjectProperty(
|
||||||
|
createSimpleExpression(`id`, true, locStub),
|
||||||
|
createSimpleExpression(`foo`, true, locStub)
|
||||||
|
),
|
||||||
|
createObjectProperty(
|
||||||
|
createSimpleExpression(`prop`, false, locStub),
|
||||||
|
createSimpleExpression(`bar`, false, locStub)
|
||||||
|
),
|
||||||
|
// compound expression as computed key
|
||||||
|
createObjectProperty(
|
||||||
|
{
|
||||||
|
type: NodeTypes.COMPOUND_EXPRESSION,
|
||||||
|
loc: locStub,
|
||||||
|
children: [
|
||||||
|
`foo + `,
|
||||||
|
createSimpleExpression(`bar`, false, locStub)
|
||||||
|
]
|
||||||
|
},
|
||||||
|
createSimpleExpression(`bar`, false, locStub)
|
||||||
|
)
|
||||||
|
],
|
||||||
|
locStub
|
||||||
|
),
|
||||||
|
// ChildNode[]
|
||||||
|
[
|
||||||
|
createElementWithCodegen([
|
||||||
|
`"p"`,
|
||||||
|
createObjectExpression(
|
||||||
|
[
|
||||||
|
createObjectProperty(
|
||||||
|
// should quote the key!
|
||||||
|
createSimpleExpression(`some-key`, true, locStub),
|
||||||
|
createSimpleExpression(`foo`, true, locStub)
|
||||||
|
)
|
||||||
|
],
|
||||||
|
locStub
|
||||||
|
)
|
||||||
|
])
|
||||||
|
],
|
||||||
|
// ArrayExpression
|
||||||
|
createArrayExpression(
|
||||||
|
[
|
||||||
|
'foo',
|
||||||
|
{
|
||||||
|
type: NodeTypes.JS_CALL_EXPRESSION,
|
||||||
|
loc: locStub,
|
||||||
|
callee: CREATE_VNODE,
|
||||||
|
arguments: [`"p"`]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
locStub
|
||||||
|
)
|
||||||
|
])
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
expect(code).toMatch(`
|
expect(code).toMatch(`
|
||||||
@ -523,17 +280,10 @@ describe('compiler: codegen', () => {
|
|||||||
test('SequenceExpression', () => {
|
test('SequenceExpression', () => {
|
||||||
const { code } = generate(
|
const { code } = generate(
|
||||||
createRoot({
|
createRoot({
|
||||||
children: [
|
codegenNode: createSequenceExpression([
|
||||||
{
|
createSimpleExpression(`foo`, false),
|
||||||
type: NodeTypes.IF,
|
createCallExpression(`bar`, [`baz`])
|
||||||
loc: locStub,
|
])
|
||||||
branches: [],
|
|
||||||
codegenNode: createSequenceExpression([
|
|
||||||
createSimpleExpression(`foo`, false),
|
|
||||||
createCallExpression(`bar`, [`baz`])
|
|
||||||
])
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
expect(code).toMatch(`return (foo, bar(baz))`)
|
expect(code).toMatch(`return (foo, bar(baz))`)
|
||||||
@ -543,33 +293,23 @@ describe('compiler: codegen', () => {
|
|||||||
test('ConditionalExpression', () => {
|
test('ConditionalExpression', () => {
|
||||||
const { code } = generate(
|
const { code } = generate(
|
||||||
createRoot({
|
createRoot({
|
||||||
children: [
|
codegenNode: createConditionalExpression(
|
||||||
{
|
createSimpleExpression(`ok`, false),
|
||||||
type: NodeTypes.IF,
|
createCallExpression(`foo`),
|
||||||
loc: locStub,
|
createConditionalExpression(
|
||||||
branches: [],
|
createSimpleExpression(`orNot`, false),
|
||||||
codegenNode: createSequenceExpression([
|
createCallExpression(`bar`),
|
||||||
createSimpleExpression(`foo`, false),
|
createCallExpression(`baz`)
|
||||||
createConditionalExpression(
|
)
|
||||||
createSimpleExpression(`ok`, false),
|
)
|
||||||
createCallExpression(`foo`),
|
|
||||||
createConditionalExpression(
|
|
||||||
createSimpleExpression(`orNot`, false),
|
|
||||||
createCallExpression(`bar`),
|
|
||||||
createCallExpression(`baz`)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
])
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
expect(code).toMatch(
|
expect(code).toMatch(
|
||||||
`return (foo, ok
|
`return ok
|
||||||
? foo()
|
? foo()
|
||||||
: orNot
|
: orNot
|
||||||
? bar()
|
? bar()
|
||||||
: baz())`
|
: baz()`
|
||||||
)
|
)
|
||||||
expect(code).toMatchSnapshot()
|
expect(code).toMatchSnapshot()
|
||||||
})
|
})
|
||||||
|
@ -17,13 +17,13 @@ exports[`compiler: optimize interpolation consecutive text between elements 1`]
|
|||||||
|
|
||||||
return function render() {
|
return function render() {
|
||||||
with (this) {
|
with (this) {
|
||||||
const { createVNode: _createVNode, toString: _toString } = _Vue
|
const { createVNode: _createVNode, toString: _toString, Fragment: _Fragment, openBlock: _openBlock, createBlock: _createBlock } = _Vue
|
||||||
|
|
||||||
return [
|
return (_openBlock(), _createBlock(_Fragment, null, [
|
||||||
_createVNode(\\"div\\"),
|
_createVNode(\\"div\\"),
|
||||||
_toString(foo) + \\" bar \\" + _toString(baz),
|
_toString(foo) + \\" bar \\" + _toString(baz),
|
||||||
_createVNode(\\"div\\")
|
_createVNode(\\"div\\")
|
||||||
]
|
]))
|
||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
@ -33,15 +33,15 @@ exports[`compiler: optimize interpolation consecutive text mixed with elements 1
|
|||||||
|
|
||||||
return function render() {
|
return function render() {
|
||||||
with (this) {
|
with (this) {
|
||||||
const { createVNode: _createVNode, toString: _toString } = _Vue
|
const { createVNode: _createVNode, toString: _toString, Fragment: _Fragment, openBlock: _openBlock, createBlock: _createBlock } = _Vue
|
||||||
|
|
||||||
return [
|
return (_openBlock(), _createBlock(_Fragment, null, [
|
||||||
_createVNode(\\"div\\"),
|
_createVNode(\\"div\\"),
|
||||||
_toString(foo) + \\" bar \\" + _toString(baz),
|
_toString(foo) + \\" bar \\" + _toString(baz),
|
||||||
_createVNode(\\"div\\"),
|
_createVNode(\\"div\\"),
|
||||||
_toString(foo) + \\" bar \\" + _toString(baz),
|
_toString(foo) + \\" bar \\" + _toString(baz),
|
||||||
_createVNode(\\"div\\")
|
_createVNode(\\"div\\")
|
||||||
]
|
]))
|
||||||
}
|
}
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`compiler: transform component slots dynamically named slots 1`] = `
|
exports[`compiler: transform component slots dynamically named slots 1`] = `
|
||||||
"const { toString, resolveComponent, createVNode } = Vue
|
"const { toString, resolveComponent, createVNode, openBlock, createBlock } = Vue
|
||||||
|
|
||||||
return function render() {
|
return function render() {
|
||||||
const _ctx = this
|
const _ctx = this
|
||||||
const _component_Comp = resolveComponent(\\"Comp\\")
|
const _component_Comp = resolveComponent(\\"Comp\\")
|
||||||
|
|
||||||
return createVNode(_component_Comp, null, {
|
return (openBlock(), createBlock(_component_Comp, null, {
|
||||||
[_ctx.one]: ({ foo }) => [
|
[_ctx.one]: ({ foo }) => [
|
||||||
toString(foo),
|
toString(foo),
|
||||||
toString(_ctx.bar)
|
toString(_ctx.bar)
|
||||||
@ -16,49 +16,49 @@ return function render() {
|
|||||||
toString(_ctx.foo),
|
toString(_ctx.foo),
|
||||||
toString(bar)
|
toString(bar)
|
||||||
]
|
]
|
||||||
}, 256 /* DYNAMIC_SLOTS */)
|
}, 256 /* DYNAMIC_SLOTS */))
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`compiler: transform component slots explicit default slot 1`] = `
|
exports[`compiler: transform component slots explicit default slot 1`] = `
|
||||||
"const { toString, resolveComponent, createVNode } = Vue
|
"const { toString, resolveComponent, createVNode, openBlock, createBlock } = Vue
|
||||||
|
|
||||||
return function render() {
|
return function render() {
|
||||||
const _ctx = this
|
const _ctx = this
|
||||||
const _component_Comp = resolveComponent(\\"Comp\\")
|
const _component_Comp = resolveComponent(\\"Comp\\")
|
||||||
|
|
||||||
return createVNode(_component_Comp, null, {
|
return (openBlock(), createBlock(_component_Comp, null, {
|
||||||
default: ({ foo }) => [
|
default: ({ foo }) => [
|
||||||
toString(foo),
|
toString(foo),
|
||||||
toString(_ctx.bar)
|
toString(_ctx.bar)
|
||||||
]
|
]
|
||||||
})
|
}))
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`compiler: transform component slots implicit default slot 1`] = `
|
exports[`compiler: transform component slots implicit default slot 1`] = `
|
||||||
"const { createVNode, resolveComponent } = Vue
|
"const { createVNode, resolveComponent, openBlock, createBlock } = Vue
|
||||||
|
|
||||||
return function render() {
|
return function render() {
|
||||||
const _ctx = this
|
const _ctx = this
|
||||||
const _component_Comp = resolveComponent(\\"Comp\\")
|
const _component_Comp = resolveComponent(\\"Comp\\")
|
||||||
|
|
||||||
return createVNode(_component_Comp, null, {
|
return (openBlock(), createBlock(_component_Comp, null, {
|
||||||
default: () => [
|
default: () => [
|
||||||
createVNode(\\"div\\")
|
createVNode(\\"div\\")
|
||||||
]
|
]
|
||||||
})
|
}))
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`compiler: transform component slots named slots 1`] = `
|
exports[`compiler: transform component slots named slots 1`] = `
|
||||||
"const { toString, resolveComponent, createVNode } = Vue
|
"const { toString, resolveComponent, createVNode, openBlock, createBlock } = Vue
|
||||||
|
|
||||||
return function render() {
|
return function render() {
|
||||||
const _ctx = this
|
const _ctx = this
|
||||||
const _component_Comp = resolveComponent(\\"Comp\\")
|
const _component_Comp = resolveComponent(\\"Comp\\")
|
||||||
|
|
||||||
return createVNode(_component_Comp, null, {
|
return (openBlock(), createBlock(_component_Comp, null, {
|
||||||
one: ({ foo }) => [
|
one: ({ foo }) => [
|
||||||
toString(foo),
|
toString(foo),
|
||||||
toString(_ctx.bar)
|
toString(_ctx.bar)
|
||||||
@ -67,19 +67,19 @@ return function render() {
|
|||||||
toString(_ctx.foo),
|
toString(_ctx.foo),
|
||||||
toString(bar)
|
toString(bar)
|
||||||
]
|
]
|
||||||
})
|
}))
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`compiler: transform component slots nested slots scoping 1`] = `
|
exports[`compiler: transform component slots nested slots scoping 1`] = `
|
||||||
"const { toString, resolveComponent, createVNode } = Vue
|
"const { toString, resolveComponent, createVNode, openBlock, createBlock } = Vue
|
||||||
|
|
||||||
return function render() {
|
return function render() {
|
||||||
const _ctx = this
|
const _ctx = this
|
||||||
const _component_Inner = resolveComponent(\\"Inner\\")
|
const _component_Inner = resolveComponent(\\"Inner\\")
|
||||||
const _component_Comp = resolveComponent(\\"Comp\\")
|
const _component_Comp = resolveComponent(\\"Comp\\")
|
||||||
|
|
||||||
return createVNode(_component_Comp, null, {
|
return (openBlock(), createBlock(_component_Comp, null, {
|
||||||
default: ({ foo }) => [
|
default: ({ foo }) => [
|
||||||
createVNode(_component_Inner, null, {
|
createVNode(_component_Inner, null, {
|
||||||
default: ({ bar }) => [
|
default: ({ bar }) => [
|
||||||
@ -92,6 +92,6 @@ return function render() {
|
|||||||
toString(_ctx.bar),
|
toString(_ctx.bar),
|
||||||
toString(_ctx.baz)
|
toString(_ctx.baz)
|
||||||
]
|
]
|
||||||
})
|
}))
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
@ -247,6 +247,17 @@ describe('compiler: element transform', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('should handle plain <template> as normal element', () => {
|
||||||
|
const { node } = parseWithElementTransform(`<template id="foo" />`)
|
||||||
|
expect(node.callee).toBe(`_${CREATE_VNODE}`)
|
||||||
|
expect(node.arguments).toMatchObject([
|
||||||
|
`"template"`,
|
||||||
|
createObjectMatcher({
|
||||||
|
id: 'foo'
|
||||||
|
})
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
test('error on v-bind with no argument', () => {
|
test('error on v-bind with no argument', () => {
|
||||||
const onError = jest.fn()
|
const onError = jest.fn()
|
||||||
parseWithElementTransform(`<div v-bind/>`, { onError })
|
parseWithElementTransform(`<div v-bind/>`, { onError })
|
||||||
|
@ -78,6 +78,7 @@ export interface RootNode extends Node {
|
|||||||
imports: string[]
|
imports: string[]
|
||||||
statements: string[]
|
statements: string[]
|
||||||
hoists: JSChildNode[]
|
hoists: JSChildNode[]
|
||||||
|
codegenNode: TemplateChildNode | JSChildNode | undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ElementNode extends Node {
|
export interface ElementNode extends Node {
|
||||||
|
@ -230,8 +230,11 @@ export function generate(
|
|||||||
|
|
||||||
// generate the VNode tree expression
|
// generate the VNode tree expression
|
||||||
push(`return `)
|
push(`return `)
|
||||||
|
if (ast.codegenNode) {
|
||||||
genRoot(ast, context)
|
genNode(ast.codegenNode, context)
|
||||||
|
} else {
|
||||||
|
push(`null`)
|
||||||
|
}
|
||||||
|
|
||||||
if (useWithBlock) {
|
if (useWithBlock) {
|
||||||
deindent()
|
deindent()
|
||||||
@ -256,18 +259,6 @@ function genHoists(hoists: JSChildNode[], context: CodegenContext) {
|
|||||||
context.newline()
|
context.newline()
|
||||||
}
|
}
|
||||||
|
|
||||||
function genRoot(root: RootNode, context: CodegenContext) {
|
|
||||||
// TODO handle blocks
|
|
||||||
const { children } = root
|
|
||||||
if (children.length === 0) {
|
|
||||||
context.push(`null`)
|
|
||||||
} else if (children.length === 1) {
|
|
||||||
genNode(children[0], context)
|
|
||||||
} else {
|
|
||||||
genNodeListAsArray(children, context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function genNodeListAsArray(
|
function genNodeListAsArray(
|
||||||
nodes: (string | CodegenNode | TemplateChildNode[])[],
|
nodes: (string | CodegenNode | TemplateChildNode[])[],
|
||||||
context: CodegenContext
|
context: CodegenContext
|
||||||
|
@ -86,6 +86,7 @@ export function parse(content: string, options: ParserOptions = {}): RootNode {
|
|||||||
imports: [],
|
imports: [],
|
||||||
statements: [],
|
statements: [],
|
||||||
hoists: [],
|
hoists: [],
|
||||||
|
codegenNode: undefined,
|
||||||
loc: getSelection(context, start)
|
loc: getSelection(context, start)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,11 +9,13 @@ import {
|
|||||||
ExpressionNode,
|
ExpressionNode,
|
||||||
createSimpleExpression,
|
createSimpleExpression,
|
||||||
JSChildNode,
|
JSChildNode,
|
||||||
SimpleExpressionNode
|
SimpleExpressionNode,
|
||||||
|
ElementTypes
|
||||||
} from './ast'
|
} from './ast'
|
||||||
import { isString, isArray } from '@vue/shared'
|
import { isString, isArray } from '@vue/shared'
|
||||||
import { CompilerError, defaultOnError } from './errors'
|
import { CompilerError, defaultOnError } from './errors'
|
||||||
import { TO_STRING, COMMENT, CREATE_VNODE } from './runtimeConstants'
|
import { TO_STRING, COMMENT, CREATE_VNODE, FRAGMENT } from './runtimeConstants'
|
||||||
|
import { createBlockExpression } from './utils'
|
||||||
|
|
||||||
// There are two types of transforms:
|
// There are two types of transforms:
|
||||||
//
|
//
|
||||||
@ -182,6 +184,42 @@ function createTransformContext(
|
|||||||
export function transform(root: RootNode, options: TransformOptions) {
|
export function transform(root: RootNode, options: TransformOptions) {
|
||||||
const context = createTransformContext(root, options)
|
const context = createTransformContext(root, options)
|
||||||
traverseNode(root, context)
|
traverseNode(root, context)
|
||||||
|
finalizeRoot(root, context)
|
||||||
|
}
|
||||||
|
|
||||||
|
function finalizeRoot(root: RootNode, context: TransformContext) {
|
||||||
|
const { helper } = context
|
||||||
|
const { children } = root
|
||||||
|
if (children.length === 1) {
|
||||||
|
const child = children[0]
|
||||||
|
if (child.type === NodeTypes.ELEMENT && child.codegenNode) {
|
||||||
|
// only child is a <slot/> - it needs to be in a fragment block.
|
||||||
|
if (child.tagType === ElementTypes.SLOT) {
|
||||||
|
root.codegenNode = createBlockExpression(
|
||||||
|
[helper(FRAGMENT), `null`, child.codegenNode],
|
||||||
|
context
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
// turn root element into a block
|
||||||
|
root.codegenNode = createBlockExpression(
|
||||||
|
child.codegenNode.arguments,
|
||||||
|
context
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// IfNode, ForNode, TextNodes or transform calls without transformElement.
|
||||||
|
// Just generate the node as-is
|
||||||
|
root.codegenNode = child
|
||||||
|
}
|
||||||
|
} else if (children.length > 1) {
|
||||||
|
// root has multiple nodes - return a fragment block.
|
||||||
|
root.codegenNode = createBlockExpression(
|
||||||
|
[helper(FRAGMENT), `null`, root.children],
|
||||||
|
context
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// finalize meta information
|
||||||
root.imports = [...context.imports]
|
root.imports = [...context.imports]
|
||||||
root.statements = [...context.statements]
|
root.statements = [...context.statements]
|
||||||
root.hoists = context.hoists
|
root.hoists = context.hoists
|
||||||
@ -214,8 +252,7 @@ export function traverseNode(
|
|||||||
const { nodeTransforms } = context
|
const { nodeTransforms } = context
|
||||||
const exitFns = []
|
const exitFns = []
|
||||||
for (let i = 0; i < nodeTransforms.length; i++) {
|
for (let i = 0; i < nodeTransforms.length; i++) {
|
||||||
const plugin = nodeTransforms[i]
|
const onExit = nodeTransforms[i](node, context)
|
||||||
const onExit = plugin(node, context)
|
|
||||||
if (onExit) {
|
if (onExit) {
|
||||||
if (isArray(onExit)) {
|
if (isArray(onExit)) {
|
||||||
exitFns.push(...onExit)
|
exitFns.push(...onExit)
|
||||||
@ -234,9 +271,9 @@ export function traverseNode(
|
|||||||
|
|
||||||
switch (node.type) {
|
switch (node.type) {
|
||||||
case NodeTypes.COMMENT:
|
case NodeTypes.COMMENT:
|
||||||
context.helper(CREATE_VNODE)
|
|
||||||
// inject import for the Comment symbol, which is needed for creating
|
// inject import for the Comment symbol, which is needed for creating
|
||||||
// comment nodes with `createVNode`
|
// comment nodes with `createVNode`
|
||||||
|
context.helper(CREATE_VNODE)
|
||||||
context.helper(COMMENT)
|
context.helper(COMMENT)
|
||||||
break
|
break
|
||||||
case NodeTypes.INTERPOLATION:
|
case NodeTypes.INTERPOLATION:
|
||||||
|
@ -27,7 +27,7 @@ import {
|
|||||||
TO_HANDLERS
|
TO_HANDLERS
|
||||||
} from '../runtimeConstants'
|
} from '../runtimeConstants'
|
||||||
import { getInnerRange } from '../utils'
|
import { getInnerRange } from '../utils'
|
||||||
import { buildSlots } from './vSlot'
|
import { buildSlots, isVSlot } from './vSlot'
|
||||||
|
|
||||||
const toValidId = (str: string): string => str.replace(/[^\w]/g, '')
|
const toValidId = (str: string): string => str.replace(/[^\w]/g, '')
|
||||||
|
|
||||||
@ -36,7 +36,10 @@ export const transformElement: NodeTransform = (node, context) => {
|
|||||||
if (node.type === NodeTypes.ELEMENT) {
|
if (node.type === NodeTypes.ELEMENT) {
|
||||||
if (
|
if (
|
||||||
node.tagType === ElementTypes.ELEMENT ||
|
node.tagType === ElementTypes.ELEMENT ||
|
||||||
node.tagType === ElementTypes.COMPONENT
|
node.tagType === ElementTypes.COMPONENT ||
|
||||||
|
// <template> with v-if or v-for are ignored during traversal.
|
||||||
|
// <template> without v-slot should be treated as a normal element.
|
||||||
|
(node.tagType === ElementTypes.TEMPLATE && !node.props.some(isVSlot))
|
||||||
) {
|
) {
|
||||||
// perform the work on exit, after all child expressions have been
|
// perform the work on exit, after all child expressions have been
|
||||||
// processed and merged.
|
// processed and merged.
|
||||||
|
@ -19,7 +19,7 @@ import {
|
|||||||
CallExpression
|
CallExpression
|
||||||
} from '../ast'
|
} from '../ast'
|
||||||
import { createCompilerError, ErrorCodes } from '../errors'
|
import { createCompilerError, ErrorCodes } from '../errors'
|
||||||
import { getInnerRange, findProp } from '../utils'
|
import { getInnerRange, findProp, createBlockExpression } from '../utils'
|
||||||
import {
|
import {
|
||||||
RENDER_LIST,
|
RENDER_LIST,
|
||||||
OPEN_BLOCK,
|
OPEN_BLOCK,
|
||||||
@ -69,7 +69,8 @@ export const transformFor = createStructuralDirectiveTransform(
|
|||||||
valueAlias: value,
|
valueAlias: value,
|
||||||
keyAlias: key,
|
keyAlias: key,
|
||||||
objectIndexAlias: index,
|
objectIndexAlias: index,
|
||||||
children: [node],
|
children:
|
||||||
|
node.tagType === ElementTypes.TEMPLATE ? node.children : [node],
|
||||||
codegenNode
|
codegenNode
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -126,6 +127,8 @@ export const transformFor = createStructuralDirectiveTransform(
|
|||||||
}
|
}
|
||||||
let childBlockChildren: TemplateChildNode[] | CallExpression =
|
let childBlockChildren: TemplateChildNode[] | CallExpression =
|
||||||
node.children
|
node.children
|
||||||
|
// if the only child is a <slot/>, use it directly as fragment
|
||||||
|
// children since it already returns an array.
|
||||||
if (childBlockChildren.length === 1) {
|
if (childBlockChildren.length === 1) {
|
||||||
const child = childBlockChildren[0]
|
const child = childBlockChildren[0]
|
||||||
if (
|
if (
|
||||||
@ -135,22 +138,17 @@ export const transformFor = createStructuralDirectiveTransform(
|
|||||||
childBlockChildren = child.codegenNode!
|
childBlockChildren = child.codegenNode!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
childBlock = createSequenceExpression([
|
childBlock = createBlockExpression(
|
||||||
createCallExpression(helper(OPEN_BLOCK)),
|
[helper(FRAGMENT), childBlockProps, childBlockChildren],
|
||||||
createCallExpression(helper(CREATE_BLOCK), [
|
context
|
||||||
helper(FRAGMENT),
|
)
|
||||||
childBlockProps,
|
|
||||||
childBlockChildren
|
|
||||||
])
|
|
||||||
])
|
|
||||||
} else {
|
} else {
|
||||||
// Normal element v-for. Directly use the child's codegenNode,
|
// Normal element v-for. Directly use the child's codegenNode arguments,
|
||||||
// but replace createVNode() with createBlock()
|
// but replace createVNode() with createBlock()
|
||||||
node.codegenNode!.callee = helper(CREATE_BLOCK)
|
childBlock = createBlockExpression(
|
||||||
childBlock = createSequenceExpression([
|
node.codegenNode!.arguments,
|
||||||
createCallExpression(helper(OPEN_BLOCK)),
|
context
|
||||||
node.codegenNode!
|
)
|
||||||
])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
renderExp.arguments.push(
|
renderExp.arguments.push(
|
||||||
|
@ -17,7 +17,7 @@ import { TransformContext, NodeTransform } from '../transform'
|
|||||||
import { createCompilerError, ErrorCodes } from '../errors'
|
import { createCompilerError, ErrorCodes } from '../errors'
|
||||||
import { isString } from '@vue/shared'
|
import { isString } from '@vue/shared'
|
||||||
|
|
||||||
const isVSlot = (p: ElementNode['props'][0]): p is DirectiveNode =>
|
export const isVSlot = (p: ElementNode['props'][0]): p is DirectiveNode =>
|
||||||
p.type === NodeTypes.DIRECTIVE && p.name === 'slot'
|
p.type === NodeTypes.DIRECTIVE && p.name === 'slot'
|
||||||
|
|
||||||
// A NodeTransform that tracks scope identifiers for scoped slots so that they
|
// A NodeTransform that tracks scope identifiers for scoped slots so that they
|
||||||
|
@ -1,6 +1,17 @@
|
|||||||
import { SourceLocation, Position, ElementNode, NodeTypes } from './ast'
|
import {
|
||||||
|
SourceLocation,
|
||||||
|
Position,
|
||||||
|
ElementNode,
|
||||||
|
NodeTypes,
|
||||||
|
CallExpression,
|
||||||
|
SequenceExpression,
|
||||||
|
createSequenceExpression,
|
||||||
|
createCallExpression
|
||||||
|
} from './ast'
|
||||||
import { parse } from 'acorn'
|
import { parse } from 'acorn'
|
||||||
import { walk } from 'estree-walker'
|
import { walk } from 'estree-walker'
|
||||||
|
import { TransformContext } from './transform'
|
||||||
|
import { OPEN_BLOCK, CREATE_BLOCK } from './runtimeConstants'
|
||||||
|
|
||||||
// cache node requires
|
// cache node requires
|
||||||
// lazy require dependencies so that they don't end up in rollup's dep graph
|
// lazy require dependencies so that they don't end up in rollup's dep graph
|
||||||
@ -116,3 +127,13 @@ export function findProp(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function createBlockExpression(
|
||||||
|
args: CallExpression['arguments'],
|
||||||
|
context: TransformContext
|
||||||
|
): SequenceExpression {
|
||||||
|
return createSequenceExpression([
|
||||||
|
createCallExpression(context.helper(OPEN_BLOCK)),
|
||||||
|
createCallExpression(context.helper(CREATE_BLOCK), args)
|
||||||
|
])
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user