You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte/src/generators/server-side-rendering/Fragment.js

30 lines
781 B

import deindent from '../../utils/deindent.js';
import flattenReference from '../../utils/flattenReference.js';
export default class Fragment {
constructor ( options ) {
Object.assign( this, options );
}
addBinding ( binding, name ) {
const conditions = [ `!( '${binding.name}' in root )`].concat( // TODO handle contextual bindings...
this.conditions.map( c => `(${c})` )
);
const { keypath } = flattenReference( binding.value );
this.generator.bindings.push( deindent`
if ( ${conditions.join( '&&' )} ) {
tmp = ${name}.data();
if ( '${keypath}' in tmp ) {
root.${binding.name} = tmp.${keypath};
settled = false;
}
}
` );
}
child ( options ) {
return new Fragment( Object.assign( {}, this, options, { parent: this } ) );
}
}