From d21336bb794932ba645c2b4fd48c8c41f73a7c65 Mon Sep 17 00:00:00 2001 From: Arpad Borsos Date: Thu, 8 Dec 2016 15:15:53 +0100 Subject: [PATCH 1/2] add a compiler option to output SSR code --- rollup.config.main.js | 3 +++ rollup.config.ssr.js | 2 +- src/generate/index.js | 3 +-- src/index.js | 27 ++++++++++++++++++++------- src/server-side-rendering/compile.js | 5 +---- src/server-side-rendering/register.js | 7 +++++-- 6 files changed, 31 insertions(+), 16 deletions(-) diff --git a/rollup.config.main.js b/rollup.config.main.js index 8ae1ff8baa..122843f984 100644 --- a/rollup.config.main.js +++ b/rollup.config.main.js @@ -12,5 +12,8 @@ export default { commonjs() ], external: [ 'magic-string' ], + globals: { + 'magic-string': 'MagicString' + }, sourceMap: true }; diff --git a/rollup.config.ssr.js b/rollup.config.ssr.js index 912aaecc3f..988554341d 100644 --- a/rollup.config.ssr.js +++ b/rollup.config.ssr.js @@ -12,7 +12,7 @@ export default { nodeResolve({ jsnext: true, module: true }), commonjs() ], - external: [ path.resolve( 'src/index.js' ), 'magic-string' ], + external: [ path.resolve( 'src/index.js' ), 'fs', 'magic-string' ], paths: { [ path.resolve( 'src/index.js' ) ]: '../compiler/svelte.js' }, diff --git a/src/generate/index.js b/src/generate/index.js index a1690b6f8a..877485939d 100644 --- a/src/generate/index.js +++ b/src/generate/index.js @@ -588,8 +588,7 @@ export default function generate ( parsed, source, options, names ) { const intro = getIntro( format, options, imports ); if ( intro ) addString( intro ); - // a filename is necessary for sourcemap generation - const filename = options.filename || 'SvelteComponent.html'; + const { filename } = options; parts.forEach( str => { const chunk = str.replace( pattern, '' ); diff --git a/src/index.js b/src/index.js index 01d0685b9c..173f532037 100644 --- a/src/index.js +++ b/src/index.js @@ -1,23 +1,36 @@ import parse from './parse/index.js'; import validate from './validate/index.js'; import generate from './generate/index.js'; +import generateSSR from './server-side-rendering/compile.js'; -export function compile ( source, options = {} ) { - const parsed = parse( source, options ); +function normalizeOptions ( options ) { + return Object.assign( { + generate: 'dom', + + // a filename is necessary for sourcemap generation + filename: 'SvelteComponent.html', - if ( !options.onwarn ) { - options.onwarn = warning => { + onwarn: warning => { if ( warning.loc ) { console.warn( `(${warning.loc.line}:${warning.loc.column}) – ${warning.message}` ); // eslint-disable-line no-console } else { console.warn( warning.message ); // eslint-disable-line no-console } - }; - } + } + }, options ); +} + +export function compile ( source, _options ) { + const options = normalizeOptions( _options ); + const parsed = parse( source, options ); const { names } = validate( parsed, source, options ); - return generate( parsed, source, options, names ); + const compiler = options.generate === 'ssr' + ? generateSSR + : generate; + + return compiler( parsed, source, options, names ); } export { parse, validate }; diff --git a/src/server-side-rendering/compile.js b/src/server-side-rendering/compile.js index 38fdab5502..254e60be6e 100644 --- a/src/server-side-rendering/compile.js +++ b/src/server-side-rendering/compile.js @@ -8,10 +8,7 @@ import processCss from '../generate/css/process.js'; const voidElementNames = /^(?:area|base|br|col|command|doctype|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/i; -export default function compile ( source, { filename }) { - const parsed = parse( source, {} ); - validate( parsed, source, {} ); - +export default function compile ( parsed, source, { filename }) { const code = new MagicString( source ); const templateProperties = {}; diff --git a/src/server-side-rendering/register.js b/src/server-side-rendering/register.js index 3b147c8b88..cb17b9a710 100644 --- a/src/server-side-rendering/register.js +++ b/src/server-side-rendering/register.js @@ -1,7 +1,10 @@ import * as fs from 'fs'; -import compile from './compile.js'; +import { compile } from '../index.js'; require.extensions[ '.html' ] = function ( module, filename ) { - const { code } = compile( fs.readFileSync( filename, 'utf-8' ), { filename }); + const { code } = compile( fs.readFileSync( filename, 'utf-8' ), { + filename, + generate: 'ssr' + }); return module._compile( code, filename ); }; From efefd6f4a3007cb9593b6267cfa00d43656727eb Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 8 Dec 2016 09:40:52 -0500 Subject: [PATCH 2/2] lint --- src/server-side-rendering/compile.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server-side-rendering/compile.js b/src/server-side-rendering/compile.js index 254e60be6e..e2c1432ba0 100644 --- a/src/server-side-rendering/compile.js +++ b/src/server-side-rendering/compile.js @@ -1,4 +1,3 @@ -import { parse, validate } from '../index.js'; import { walk } from 'estree-walker'; import deindent from '../utils/deindent.js'; import isReference from '../utils/isReference.js';