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