mirror of https://github.com/sveltejs/svelte
parent
3fa83e332f
commit
9b2a7e17ad
@ -1,112 +0,0 @@
|
|||||||
import getStaticAttributeValue from '../../utils/getStaticAttributeValue';
|
|
||||||
import isChildOfComponent from '../shared/utils/isChildOfComponent';
|
|
||||||
import Element from '../nodes/Element';
|
|
||||||
import { SsrGenerator } from './index';
|
|
||||||
import { Node } from '../../interfaces';
|
|
||||||
|
|
||||||
function noop () {}
|
|
||||||
|
|
||||||
const preprocessors = {
|
|
||||||
MustacheTag: noop,
|
|
||||||
RawMustacheTag: noop,
|
|
||||||
Text: noop,
|
|
||||||
|
|
||||||
AwaitBlock: (
|
|
||||||
generator: SsrGenerator,
|
|
||||||
node: Node,
|
|
||||||
elementStack: Node[]
|
|
||||||
) => {
|
|
||||||
preprocessChildren(generator, node.pending, elementStack);
|
|
||||||
preprocessChildren(generator, node.then, elementStack);
|
|
||||||
preprocessChildren(generator, node.catch, elementStack);
|
|
||||||
},
|
|
||||||
|
|
||||||
IfBlock: (
|
|
||||||
generator: SsrGenerator,
|
|
||||||
node: Node,
|
|
||||||
elementStack: Node[]
|
|
||||||
) => {
|
|
||||||
preprocessChildren(generator, node, elementStack);
|
|
||||||
|
|
||||||
if (node.else) {
|
|
||||||
preprocessChildren(
|
|
||||||
generator,
|
|
||||||
node.else,
|
|
||||||
elementStack
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
EachBlock: (
|
|
||||||
generator: SsrGenerator,
|
|
||||||
node: Node,
|
|
||||||
elementStack: Node[]
|
|
||||||
) => {
|
|
||||||
preprocessChildren(generator, node, elementStack);
|
|
||||||
|
|
||||||
if (node.else) {
|
|
||||||
preprocessChildren(
|
|
||||||
generator,
|
|
||||||
node.else,
|
|
||||||
elementStack
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
Element: (
|
|
||||||
generator: SsrGenerator,
|
|
||||||
node: Element,
|
|
||||||
elementStack: Node[]
|
|
||||||
) => {
|
|
||||||
generator.stylesheet.apply(node);
|
|
||||||
|
|
||||||
const slot = getStaticAttributeValue(node, 'slot');
|
|
||||||
if (slot && node.isChildOfComponent()) {
|
|
||||||
node.slotted = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Treat these the same way:
|
|
||||||
// <option>{{foo}}</option>
|
|
||||||
// <option value='{{foo}}'>{{foo}}</option>
|
|
||||||
const valueAttribute = node.attributes.find((attribute: Node) => attribute.name === 'value');
|
|
||||||
|
|
||||||
if (node.name === 'option' && !valueAttribute) {
|
|
||||||
node.attributes.push({
|
|
||||||
type: 'Attribute',
|
|
||||||
name: 'value',
|
|
||||||
value: node.children
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node.children.length) {
|
|
||||||
preprocessChildren(generator, node, elementStack.concat(node));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
Component: (
|
|
||||||
generator: SsrGenerator,
|
|
||||||
node: Node,
|
|
||||||
elementStack: Node[]
|
|
||||||
) => {
|
|
||||||
if (node.children.length) {
|
|
||||||
preprocessChildren(generator, node, elementStack);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
function preprocessChildren(
|
|
||||||
generator: SsrGenerator,
|
|
||||||
node: Node,
|
|
||||||
elementStack: Node[]
|
|
||||||
) {
|
|
||||||
node.children.forEach((child: Node, i: number) => {
|
|
||||||
child.parent = node;
|
|
||||||
|
|
||||||
const preprocessor = preprocessors[child.type];
|
|
||||||
if (preprocessor) preprocessor(generator, child, elementStack);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function preprocess(generator: SsrGenerator, html: Node) {
|
|
||||||
preprocessChildren(generator, html, []);
|
|
||||||
}
|
|
Loading…
Reference in new issue