mirror of https://github.com/sveltejs/svelte
51 lines
1.5 KiB
51 lines
1.5 KiB
import AwaitBlock from '../AwaitBlock';
|
|
import Comment from '../Comment';
|
|
import Document from '../Document';
|
|
import EachBlock from '../EachBlock';
|
|
import Element from '../Element';
|
|
import Head from '../Head';
|
|
import IfBlock from '../IfBlock';
|
|
import InlineComponent from '../InlineComponent';
|
|
import MustacheTag from '../MustacheTag';
|
|
import RawMustacheTag from '../RawMustacheTag';
|
|
import DebugTag from '../DebugTag';
|
|
import Slot from '../Slot';
|
|
import Text from '../Text';
|
|
import Title from '../Title';
|
|
import Window from '../Window';
|
|
import Node from './Node';
|
|
|
|
function getConstructor(type): typeof Node {
|
|
switch (type) {
|
|
case 'AwaitBlock': return AwaitBlock;
|
|
case 'Comment': return Comment;
|
|
case 'Document': return Document;
|
|
case 'EachBlock': return EachBlock;
|
|
case 'Element': return Element;
|
|
case 'Head': return Head;
|
|
case 'IfBlock': return IfBlock;
|
|
case 'InlineComponent': return InlineComponent;
|
|
case 'MustacheTag': return MustacheTag;
|
|
case 'RawMustacheTag': return RawMustacheTag;
|
|
case 'DebugTag': return DebugTag;
|
|
case 'Slot': return Slot;
|
|
case 'Text': return Text;
|
|
case 'Title': return Title;
|
|
case 'Window': return Window;
|
|
default: throw new Error(`Not implemented: ${type}`);
|
|
}
|
|
}
|
|
|
|
export default function mapChildren(component, parent, scope, children: any[]) {
|
|
let last = null;
|
|
return children.map(child => {
|
|
const constructor = getConstructor(child.type);
|
|
const node = new constructor(component, parent, scope, child);
|
|
|
|
if (last) last.next = node;
|
|
node.prev = last;
|
|
last = node;
|
|
|
|
return node;
|
|
});
|
|
} |