From 3cab77fb87eac2aa2a34b032df8f8649b0023a83 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 7 Dec 2016 17:03:22 -0500 Subject: [PATCH] remove built ssr/ directory from repo --- ssr/register.js | 625 -------------------------------------------- ssr/register.js.map | 1 - 2 files changed, 626 deletions(-) delete mode 100644 ssr/register.js delete mode 100644 ssr/register.js.map diff --git a/ssr/register.js b/ssr/register.js deleted file mode 100644 index e1c640ea25..0000000000 --- a/ssr/register.js +++ /dev/null @@ -1,625 +0,0 @@ -'use strict'; - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var fs = require('fs'); -var ___compiler_svelte_js = require('../compiler/svelte.js'); -var MagicString = require('magic-string'); -var MagicString__default = _interopDefault(MagicString); - -function walk ( ast, ref) { - var enter = ref.enter; - var leave = ref.leave; - - visit( ast, null, enter, leave ); -} - -var context = { - skip: function () { return context.shouldSkip = true; }, - shouldSkip: false -}; - -var childKeys = {}; - -var toString = Object.prototype.toString; - -function isArray ( thing ) { - return toString.call( thing ) === '[object Array]'; -} - -function visit ( node, parent, enter, leave, prop, index ) { - if ( !node ) return; - - if ( enter ) { - context.shouldSkip = false; - enter.call( context, node, parent, prop, index ); - if ( context.shouldSkip ) return; - } - - var keys = childKeys[ node.type ] || ( - childKeys[ node.type ] = Object.keys( node ).filter( function (key) { return typeof node[ key ] === 'object'; } ) - ); - - for ( var i = 0; i < keys.length; i += 1 ) { - var key = keys[i]; - var value = node[ key ]; - - if ( isArray( value ) ) { - for ( var j = 0; j < value.length; j += 1 ) { - visit( value[j], node, enter, leave, key, j ); - } - } - - else if ( value && value.type ) { - visit( value, node, enter, leave, key, null ); - } - } - - if ( leave ) { - leave( node, parent, prop, index ); - } -} - -const start = /\n(\t+)/; - -function deindent ( strings, ...values ) { - const indentation = start.exec( strings[0] )[1]; - const pattern = new RegExp( `^${indentation}`, 'gm' ); - - let result = strings[0].replace( start, '' ).replace( pattern, '' ); - - let trailingIndentation = getTrailingIndentation( result ); - - for ( let i = 1; i < strings.length; i += 1 ) { - const value = String( values[ i - 1 ] ).replace( /\n/g, `\n${trailingIndentation}` ); - result += value + strings[i].replace( pattern, '' ); - - trailingIndentation = getTrailingIndentation( result ); - } - - return result.trim(); -} - -function getTrailingIndentation ( str ) { - let i = str.length; - while ( str[ i - 1 ] === ' ' || str[ i - 1 ] === '\t' ) i -= 1; - return str.slice( i, str.length ); -} - -function isReference ( node, parent ) { - if ( node.type === 'MemberExpression' ) { - return !node.computed && isReference( node.object, node ); - } - - if ( node.type === 'Identifier' ) { - // the only time we could have an identifier node without a parent is - // if it's the entire body of a function without a block statement – - // i.e. an arrow function expression like `a => a` - if ( !parent ) return true; - - // TODO is this right? - if ( parent.type === 'MemberExpression' || parent.type === 'MethodDefinition' ) { - return parent.computed || node === parent.object; - } - - // disregard the `bar` in `{ bar: foo }`, but keep it in `{ [bar]: foo }` - if ( parent.type === 'Property' ) return parent.computed || node === parent.value; - - // disregard the `bar` in `class Foo { bar () {...} }` - if ( parent.type === 'MethodDefinition' ) return false; - - // disregard the `bar` in `export { foo as bar }` - if ( parent.type === 'ExportSpecifier' && node !== parent.local ) return; - - return true; - } -} - -function flatten ( node ) { - const parts = []; - while ( node.type === 'MemberExpression' ) { - if ( node.computed ) return null; - parts.unshift( node.property.name ); - - node = node.object; - } - - if ( node.type !== 'Identifier' ) return null; - - const name = node.name; - parts.unshift( name ); - - return { name, keypath: parts.join( '.' ) }; -} - -function spaces ( i ) { - let result = ''; - while ( i-- ) result += ' '; - return result; -} - -// largely borrowed from Ractive – https://github.com/ractivejs/ractive/blob/2ec648aaf5296bb88c21812e947e0e42fcc456e3/src/Ractive/config/custom/css/transform.js -const selectorsPattern = /(?:^|\})?\s*([^\{\}]+)\s*\{/g; -const commentsPattern = /\/\*.*?\*\//g; -const selectorUnitPattern = /((?:(?:\[[^\]+]\])|(?:[^\s\+\>~:]))+)((?:::?[^\s\+\>\~\(:]+(?:\([^\)]+\))?)*\s*[\s\+\>\~]?)\s*/g; -const excludePattern = /^(?:@|\d+%)/; - -function transformSelector ( selector, parent ) { - const selectorUnits = []; - let match; - - while ( match = selectorUnitPattern.exec( selector ) ) { - selectorUnits.push({ - str: match[0], - base: match[1], - modifiers: match[2] - }); - } - - // For each simple selector within the selector, we need to create a version - // that a) combines with the id, and b) is inside the id - const base = selectorUnits.map( unit => unit.str ); - - const transformed = []; - let i = selectorUnits.length; - - while ( i-- ) { - const appended = base.slice(); - - // Pseudo-selectors should go after the attribute selector - const unit = selectorUnits[i]; - appended[i] = unit.base + parent + unit.modifiers || ''; - - const prepended = base.slice(); - prepended[i] = parent + ' ' + prepended[i]; - - transformed.push( appended.join( ' ' ), prepended.join( ' ' ) ); - } - - return transformed.join( ', ' ); -} - -function transformCss ( css, hash ) { - const attr = `[svelte-${hash}]`; - - return css - .replace( commentsPattern, '' ) - .replace( selectorsPattern, ( match, $1 ) => { - // don't transform at-rules and keyframe declarations - if ( excludePattern.test( $1 ) ) return match; - - const selectors = $1.split( ',' ).map( selector => selector.trim() ); - const transformed = selectors - .map( selector => transformSelector( selector, attr ) ) - .join( ', ' ) + ' '; - - return match.replace( $1, transformed ); - }); -} - -function process ( parsed ) { - return transformCss( spaces( parsed.css.content.start ) + parsed.css.content.styles, parsed.hash ); -} - -const voidElementNames = /^(?:area|base|br|col|command|doctype|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/i; - -function compile ( source, filename ) { - const parsed = ___compiler_svelte_js.parse( source, {} ); - ___compiler_svelte_js.validate( parsed, source, {} ); - - const code = new MagicString__default( source ); - - const templateProperties = {}; - const components = {}; - const helpers = {}; - - const imports = []; - - if ( parsed.js ) { - walk( parsed.js.content, { - enter ( node ) { - code.addSourcemapLocation( node.start ); - code.addSourcemapLocation( node.end ); - } - }); - - // imports need to be hoisted out of the IIFE - for ( let i = 0; i < parsed.js.content.body.length; i += 1 ) { - const node = parsed.js.content.body[i]; - if ( node.type === 'ImportDeclaration' ) { - let a = node.start; - let b = node.end; - while ( /[ \t]/.test( source[ a - 1 ] ) ) a -= 1; - while ( source[b] === '\n' ) b += 1; - - //imports.push( source.slice( a, b ).replace( /^\s/, '' ) ); - imports.push( node ); - code.remove( a, b ); - } - } - - const defaultExport = parsed.js.content.body.find( node => node.type === 'ExportDefaultDeclaration' ); - - if ( defaultExport ) { - const finalNode = parsed.js.content.body[ parsed.js.content.body.length - 1 ]; - if ( defaultExport === finalNode ) { - // export is last property, we can just return it - code.overwrite( defaultExport.start, defaultExport.declaration.start, `return ` ); - } else { - // TODO ensure `template` isn't already declared - code.overwrite( defaultExport.start, defaultExport.declaration.start, `var template = ` ); - - let i = defaultExport.start; - while ( /\s/.test( source[ i - 1 ] ) ) i--; - - const indentation = source.slice( i, defaultExport.start ); - code.appendLeft( finalNode.end, `\n\n${indentation}return template;` ); - } - - defaultExport.declaration.properties.forEach( prop => { - templateProperties[ prop.key.name ] = prop.value; - }); - - code.prependRight( parsed.js.content.start, 'var template = (function () {' ); - } else { - code.prependRight( parsed.js.content.start, '(function () {' ); - } - - code.appendLeft( parsed.js.content.end, '}());' ); - - if ( templateProperties.helpers ) { - templateProperties.helpers.properties.forEach( prop => { - helpers[ prop.key.name ] = prop.value; - }); - } - - if ( templateProperties.components ) { - templateProperties.components.properties.forEach( prop => { - components[ prop.key.name ] = prop.value; - }); - } - } - - let scope = new Set(); - const scopes = [ scope ]; - - function contextualise ( expression ) { - walk( expression, { - enter ( node, parent ) { - if ( isReference( node, parent ) ) { - const { name } = flatten( node ); - - if ( parent && parent.type === 'CallExpression' && node === parent.callee && helpers[ name ] ) { - code.prependRight( node.start, `template.helpers.` ); - return; - } - - if ( !scope.has( name ) ) { - code.prependRight( node.start, `data.` ); - } - - this.skip(); - } - } - }); - - return { - snippet: `[✂${expression.start}-${expression.end}✂]`, - string: code.slice( expression.start, expression.end ) - }; - } - - let elementDepth = 0; - - const stringifiers = { - Component ( node ) { - const props = node.attributes.map( attribute => { - let value; - - if ( attribute.value === true ) { - value = `true`; - } else if ( attribute.value.length === 0 ) { - value = `''`; - } else if ( attribute.value.length === 1 ) { - const chunk = attribute.value[0]; - if ( chunk.type === 'Text' ) { - value = isNaN( parseFloat( chunk.data ) ) ? JSON.stringify( chunk.data ) : chunk.data; - } else { - const { snippet } = contextualise( chunk.expression ); - value = snippet; - } - } else { - value = '`' + attribute.value.map( stringify ).join( '' ) + '`'; - } - - return `${attribute.name}: ${value}`; - }).join( ', ' ); - - let params = `{${props}}`; - - if ( node.children.length ) { - params += `, { yield: () => \`${node.children.map( stringify ).join( '' )}\` }`; - } - - return `\${template.components.${node.name}.render(${params})}`; - }, - - EachBlock ( node ) { - const { snippet } = contextualise( node.expression ); - - scope = new Set(); - scope.add( node.context ); - if ( node.index ) scope.add( node.index ); - - scopes.push( scope ); - - const block = `\${ ${snippet}.map( ${ node.index ? `( ${node.context}, ${node.index} )` : node.context} => \`${ node.children.map( stringify ).join( '' )}\` ).join( '' )}`; - - scopes.pop(); - scope = scopes[ scopes.length - 1 ]; - - return block; - }, - - Element ( node ) { - if ( node.name in components ) { - return stringifiers.Component( node ); - } - - let element = `<${node.name}`; - - node.attributes.forEach( attribute => { - let str = ` ${attribute.name}`; - - if ( attribute.value !== true ) { - str += `="` + attribute.value.map( chunk => { - if ( chunk.type === 'Text' ) { - return chunk.data; - } - - const { snippet } = contextualise( chunk.expression ); - return '${' + snippet + '}'; - }).join( '' ) + `"`; - } - - element += str; - }); - - if ( parsed.css && elementDepth === 0 ) { - element += ` svelte-${parsed.hash}`; - } - - if ( voidElementNames.test( node.name ) ) { - element += '>'; - } else if ( node.children.length === 0 ) { - element += '/>'; - } else { - elementDepth += 1; - element += '>' + node.children.map( stringify ).join( '' ) + ``; - elementDepth -= 1; - } - - return element; - }, - - IfBlock ( node ) { - const { snippet } = contextualise( node.expression ); // TODO use snippet, for sourcemap support - - const consequent = node.children.map( stringify ).join( '' ); - const alternate = node.else ? node.else.children.map( stringify ).join( '' ) : ''; - - return '${ ' + snippet + ' ? `' + consequent + '` : `' + alternate + '` }'; - }, - - MustacheTag ( node ) { - const { snippet } = contextualise( node.expression ); // TODO use snippet, for sourcemap support - return '${' + snippet + '}'; - }, - - Text ( node ) { - return node.data.replace( /\${/g, '\\${' ); - }, - - YieldTag () { - return `\${options.yield()}`; - } - }; - - function stringify ( node ) { - const stringifier = stringifiers[ node.type ]; - - if ( !stringifier ) { - throw new Error( `Not implemented: ${node.type}` ); - } - - return stringifier( node ); - } - - function createBlock ( node ) { - const str = stringify( node ); - if ( str.slice( 0, 2 ) === '${' ) return str.slice( 2, -1 ); - return '`' + str + '`'; - } - - const blocks = parsed.html.children.map( node => { - return deindent` - rendered += ${createBlock( node )}; - `; - }); - - const topLevelStatements = []; - - const importBlock = imports - .map( ( declaration, i ) => { - const defaultImport = declaration.specifiers.find( x => x.type === 'ImportDefaultSpecifier' || x.type === 'ImportSpecifier' && x.imported.name === 'default' ); - const namespaceImport = declaration.specifiers.find( x => x.type === 'ImportNamespaceSpecifier' ); - const namedImports = declaration.specifiers.filter( x => x.type === 'ImportSpecifier' && x.imported.name !== 'default' ); - - const name = ( defaultImport || namespaceImport ) ? ( defaultImport || namespaceImport ).local.name : `__import${i}`; - - const statements = [ - `var ${name} = require( '${declaration.source.value}' );` - ]; - - namedImports.forEach( specifier => { - statements.push( `var ${specifier.local.name} = ${name}.${specifier.imported.name};` ); - }); - - if ( defaultImport ) { - statements.push( `${name} = ( ${name} && ${name}.__esModule ) ? ${name}['default'] : ${name};` ); - } - - return statements.join( '\n' ); - }) - .filter( Boolean ) - .join( '\n' ); - - if ( parsed.js ) { - if ( imports.length ) { - topLevelStatements.push( importBlock ); - } - - topLevelStatements.push( `[✂${parsed.js.content.start}-${parsed.js.content.end}✂]` ); - } - - const renderStatements = [ - templateProperties.data ? `data = Object.assign( template.data(), data || {} );` : `data = data || {};` - ]; - - if ( templateProperties.computed ) { - const statements = []; - const dependencies = new Map(); - - templateProperties.computed.properties.forEach( prop => { - const key = prop.key.name; - const value = prop.value; - - const deps = value.params.map( param => param.name ); - dependencies.set( key, deps ); - }); - - const visited = new Set(); - - function visit ( key ) { - if ( !dependencies.has( key ) ) return; // not a computation - - if ( visited.has( key ) ) return; - visited.add( key ); - - const deps = dependencies.get( key ); - deps.forEach( visit ); - - statements.push( deindent` - data.${key} = template.computed.${key}( ${deps.map( dep => `data.${dep}` ).join( ', ' )} ); - ` ); - } - - templateProperties.computed.properties.forEach( prop => visit( prop.key.name ) ); - - renderStatements.push( statements.join( '\n' ) ); - } - - renderStatements.push( - `var rendered = '';`, - blocks.join( '\n\n' ), - `return rendered;` - ); - - const renderCssStatements = [ - `var components = [];` - ]; - - if ( parsed.css ) { - renderCssStatements.push( deindent` - components.push({ - filename: exports.filename, - css: ${JSON.stringify( process( parsed ) )}, - map: null // TODO - }); - ` ); - } - - if ( templateProperties.components ) { - renderCssStatements.push( deindent` - var seen = {}; - - function addComponent ( component ) { - var result = component.renderCss(); - result.components.forEach( x => { - if ( seen[ x.filename ] ) return; - seen[ x.filename ] = true; - components.push( x ); - }); - } - ` ); - - renderCssStatements.push( templateProperties.components.properties.map( prop => `addComponent( template.components.${prop.key.name} );` ).join( '\n' ) ); - } - - renderCssStatements.push( deindent` - return { - css: components.map( x => x.css ).join( '\\n' ), - map: null, - components - }; - ` ); - - topLevelStatements.push( deindent` - exports.filename = ${JSON.stringify( filename )}; - - exports.render = function ( data, options ) { - ${renderStatements.join( '\n\n' )} - }; - - exports.renderCss = function () { - ${renderCssStatements.join( '\n\n' )} - }; - ` ); - - const rendered = topLevelStatements.join( '\n\n' ); - - const pattern = /\[✂(\d+)-(\d+)$/; - - const parts = rendered.split( '✂]' ); - const finalChunk = parts.pop(); - - const compiled = new MagicString.Bundle({ separator: '' }); - - function addString ( str ) { - compiled.addSource({ - content: new MagicString__default( str ) - }); - } - - parts.forEach( str => { - const chunk = str.replace( pattern, '' ); - if ( chunk ) addString( chunk ); - - const match = pattern.exec( str ); - - const snippet = code.snip( +match[1], +match[2] ); - - compiled.addSource({ - filename, - content: snippet - }); - }); - - addString( finalChunk ); - - return { - code: compiled.toString() - }; -} - -require.extensions[ '.html' ] = function ( module, filename ) { - const { code } = compile( fs.readFileSync( filename, 'utf-8' ) ); - - try { - return module._compile( code, filename ); - } catch ( err ) { - console.log( code ); - throw err; - } -}; -//# sourceMappingURL=register.js.map diff --git a/ssr/register.js.map b/ssr/register.js.map deleted file mode 100644 index 3ef2216c5e..0000000000 --- a/ssr/register.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":null,"sources":["../node_modules/estree-walker/dist/estree-walker.es.js","../src/utils/deindent.js","../src/utils/isReference.js","../src/utils/flattenReference.js","../src/utils/spaces.js","../src/generate/css/transform.js","../src/generate/css/process.js","../src/server-side-rendering/compile.js","../src/server-side-rendering/register.js"],"sourcesContent":["function walk ( ast, ref) {\n\tvar enter = ref.enter;\n\tvar leave = ref.leave;\n\n\tvisit( ast, null, enter, leave );\n}\n\nvar context = {\n\tskip: function () { return context.shouldSkip = true; },\n\tshouldSkip: false\n};\n\nvar childKeys = {};\n\nvar toString = Object.prototype.toString;\n\nfunction isArray ( thing ) {\n\treturn toString.call( thing ) === '[object Array]';\n}\n\nfunction visit ( node, parent, enter, leave, prop, index ) {\n\tif ( !node ) return;\n\n\tif ( enter ) {\n\t\tcontext.shouldSkip = false;\n\t\tenter.call( context, node, parent, prop, index );\n\t\tif ( context.shouldSkip ) return;\n\t}\n\n\tvar keys = childKeys[ node.type ] || (\n\t\tchildKeys[ node.type ] = Object.keys( node ).filter( function (key) { return typeof node[ key ] === 'object'; } )\n\t);\n\n\tfor ( var i = 0; i < keys.length; i += 1 ) {\n\t\tvar key = keys[i];\n\t\tvar value = node[ key ];\n\n\t\tif ( isArray( value ) ) {\n\t\t\tfor ( var j = 0; j < value.length; j += 1 ) {\n\t\t\t\tvisit( value[j], node, enter, leave, key, j );\n\t\t\t}\n\t\t}\n\n\t\telse if ( value && value.type ) {\n\t\t\tvisit( value, node, enter, leave, key, null );\n\t\t}\n\t}\n\n\tif ( leave ) {\n\t\tleave( node, parent, prop, index );\n\t}\n}\n\nexport { walk };\n//# sourceMappingURL=estree-walker.es.js.map\n","const start = /\\n(\\t+)/;\n\nexport default function deindent ( strings, ...values ) {\n\tconst indentation = start.exec( strings[0] )[1];\n\tconst pattern = new RegExp( `^${indentation}`, 'gm' );\n\n\tlet result = strings[0].replace( start, '' ).replace( pattern, '' );\n\n\tlet trailingIndentation = getTrailingIndentation( result );\n\n\tfor ( let i = 1; i < strings.length; i += 1 ) {\n\t\tconst value = String( values[ i - 1 ] ).replace( /\\n/g, `\\n${trailingIndentation}` );\n\t\tresult += value + strings[i].replace( pattern, '' );\n\n\t\ttrailingIndentation = getTrailingIndentation( result );\n\t}\n\n\treturn result.trim();\n}\n\nfunction getTrailingIndentation ( str ) {\n\tlet i = str.length;\n\twhile ( str[ i - 1 ] === ' ' || str[ i - 1 ] === '\\t' ) i -= 1;\n\treturn str.slice( i, str.length );\n}\n","export default function isReference ( node, parent ) {\n\tif ( node.type === 'MemberExpression' ) {\n\t\treturn !node.computed && isReference( node.object, node );\n\t}\n\n\tif ( node.type === 'Identifier' ) {\n\t\t// the only time we could have an identifier node without a parent is\n\t\t// if it's the entire body of a function without a block statement –\n\t\t// i.e. an arrow function expression like `a => a`\n\t\tif ( !parent ) return true;\n\n\t\t// TODO is this right?\n\t\tif ( parent.type === 'MemberExpression' || parent.type === 'MethodDefinition' ) {\n\t\t\treturn parent.computed || node === parent.object;\n\t\t}\n\n\t\t// disregard the `bar` in `{ bar: foo }`, but keep it in `{ [bar]: foo }`\n\t\tif ( parent.type === 'Property' ) return parent.computed || node === parent.value;\n\n\t\t// disregard the `bar` in `class Foo { bar () {...} }`\n\t\tif ( parent.type === 'MethodDefinition' ) return false;\n\n\t\t// disregard the `bar` in `export { foo as bar }`\n\t\tif ( parent.type === 'ExportSpecifier' && node !== parent.local ) return;\n\n\t\treturn true;\n\t}\n}\n","export default function flatten ( node ) {\n\tconst parts = [];\n\twhile ( node.type === 'MemberExpression' ) {\n\t\tif ( node.computed ) return null;\n\t\tparts.unshift( node.property.name );\n\n\t\tnode = node.object;\n\t}\n\n\tif ( node.type !== 'Identifier' ) return null;\n\n\tconst name = node.name;\n\tparts.unshift( name );\n\n\treturn { name, keypath: parts.join( '.' ) };\n}\n","export default function spaces ( i ) {\n\tlet result = '';\n\twhile ( i-- ) result += ' ';\n\treturn result;\n}\n","// largely borrowed from Ractive – https://github.com/ractivejs/ractive/blob/2ec648aaf5296bb88c21812e947e0e42fcc456e3/src/Ractive/config/custom/css/transform.js\nconst selectorsPattern = /(?:^|\\})?\\s*([^\\{\\}]+)\\s*\\{/g;\nconst commentsPattern = /\\/\\*.*?\\*\\//g;\nconst selectorUnitPattern = /((?:(?:\\[[^\\]+]\\])|(?:[^\\s\\+\\>~:]))+)((?:::?[^\\s\\+\\>\\~\\(:]+(?:\\([^\\)]+\\))?)*\\s*[\\s\\+\\>\\~]?)\\s*/g;\nconst excludePattern = /^(?:@|\\d+%)/;\n\nfunction transformSelector ( selector, parent ) {\n\tconst selectorUnits = [];\n\tlet match;\n\n\twhile ( match = selectorUnitPattern.exec( selector ) ) {\n\t\tselectorUnits.push({\n\t\t\tstr: match[0],\n\t\t\tbase: match[1],\n\t\t\tmodifiers: match[2]\n\t\t});\n\t}\n\n\t// For each simple selector within the selector, we need to create a version\n\t// that a) combines with the id, and b) is inside the id\n\tconst base = selectorUnits.map( unit => unit.str );\n\n\tconst transformed = [];\n\tlet i = selectorUnits.length;\n\n\twhile ( i-- ) {\n\t\tconst appended = base.slice();\n\n\t\t// Pseudo-selectors should go after the attribute selector\n\t\tconst unit = selectorUnits[i];\n\t\tappended[i] = unit.base + parent + unit.modifiers || '';\n\n\t\tconst prepended = base.slice();\n\t\tprepended[i] = parent + ' ' + prepended[i];\n\n\t\ttransformed.push( appended.join( ' ' ), prepended.join( ' ' ) );\n\t}\n\n\treturn transformed.join( ', ' );\n}\n\nexport default function transformCss ( css, hash ) {\n\tconst attr = `[svelte-${hash}]`;\n\n\treturn css\n\t\t.replace( commentsPattern, '' )\n\t\t.replace( selectorsPattern, ( match, $1 ) => {\n\t\t\t// don't transform at-rules and keyframe declarations\n\t\t\tif ( excludePattern.test( $1 ) ) return match;\n\n\t\t\tconst selectors = $1.split( ',' ).map( selector => selector.trim() );\n\t\t\tconst transformed = selectors\n\t\t\t\t.map( selector => transformSelector( selector, attr ) )\n\t\t\t\t.join( ', ' ) + ' ';\n\n\t\t\treturn match.replace( $1, transformed );\n\t\t});\n}\n","import spaces from '../../utils/spaces.js';\nimport transform from './transform.js';\n\nexport default function process ( parsed ) {\n\treturn transform( spaces( parsed.css.content.start ) + parsed.css.content.styles, parsed.hash );\n}\n","import { parse, validate } from 'svelte';\nimport { walk } from 'estree-walker';\nimport deindent from '../utils/deindent.js';\nimport isReference from '../utils/isReference.js';\nimport flattenReference from '../utils/flattenReference.js';\nimport MagicString, { Bundle } from 'magic-string';\nimport processCss from '../generate/css/process.js';\n\nconst voidElementNames = /^(?:area|base|br|col|command|doctype|embed|hr|img|input|keygen|link|meta|param|source|track|wbr)$/i;\n\nexport default function compile ( source, filename ) {\n\tconst parsed = parse( source, {} );\n\tvalidate( parsed, source, {} );\n\n\tconst code = new MagicString( source );\n\n\tconst templateProperties = {};\n\tconst components = {};\n\tconst helpers = {};\n\n\tconst imports = [];\n\n\tif ( parsed.js ) {\n\t\twalk( parsed.js.content, {\n\t\t\tenter ( node ) {\n\t\t\t\tcode.addSourcemapLocation( node.start );\n\t\t\t\tcode.addSourcemapLocation( node.end );\n\t\t\t}\n\t\t});\n\n\t\t// imports need to be hoisted out of the IIFE\n\t\tfor ( let i = 0; i < parsed.js.content.body.length; i += 1 ) {\n\t\t\tconst node = parsed.js.content.body[i];\n\t\t\tif ( node.type === 'ImportDeclaration' ) {\n\t\t\t\tlet a = node.start;\n\t\t\t\tlet b = node.end;\n\t\t\t\twhile ( /[ \\t]/.test( source[ a - 1 ] ) ) a -= 1;\n\t\t\t\twhile ( source[b] === '\\n' ) b += 1;\n\n\t\t\t\t//imports.push( source.slice( a, b ).replace( /^\\s/, '' ) );\n\t\t\t\timports.push( node );\n\t\t\t\tcode.remove( a, b );\n\t\t\t}\n\t\t}\n\n\t\tconst defaultExport = parsed.js.content.body.find( node => node.type === 'ExportDefaultDeclaration' );\n\n\t\tif ( defaultExport ) {\n\t\t\tconst finalNode = parsed.js.content.body[ parsed.js.content.body.length - 1 ];\n\t\t\tif ( defaultExport === finalNode ) {\n\t\t\t\t// export is last property, we can just return it\n\t\t\t\tcode.overwrite( defaultExport.start, defaultExport.declaration.start, `return ` );\n\t\t\t} else {\n\t\t\t\t// TODO ensure `template` isn't already declared\n\t\t\t\tcode.overwrite( defaultExport.start, defaultExport.declaration.start, `var template = ` );\n\n\t\t\t\tlet i = defaultExport.start;\n\t\t\t\twhile ( /\\s/.test( source[ i - 1 ] ) ) i--;\n\n\t\t\t\tconst indentation = source.slice( i, defaultExport.start );\n\t\t\t\tcode.appendLeft( finalNode.end, `\\n\\n${indentation}return template;` );\n\t\t\t}\n\n\t\t\tdefaultExport.declaration.properties.forEach( prop => {\n\t\t\t\ttemplateProperties[ prop.key.name ] = prop.value;\n\t\t\t});\n\n\t\t\tcode.prependRight( parsed.js.content.start, 'var template = (function () {' );\n\t\t} else {\n\t\t\tcode.prependRight( parsed.js.content.start, '(function () {' );\n\t\t}\n\n\t\tcode.appendLeft( parsed.js.content.end, '}());' );\n\n\t\tif ( templateProperties.helpers ) {\n\t\t\ttemplateProperties.helpers.properties.forEach( prop => {\n\t\t\t\thelpers[ prop.key.name ] = prop.value;\n\t\t\t});\n\t\t}\n\n\t\tif ( templateProperties.components ) {\n\t\t\ttemplateProperties.components.properties.forEach( prop => {\n\t\t\t\tcomponents[ prop.key.name ] = prop.value;\n\t\t\t});\n\t\t}\n\t}\n\n\tlet scope = new Set();\n\tconst scopes = [ scope ];\n\n\tfunction contextualise ( expression ) {\n\t\twalk( expression, {\n\t\t\tenter ( node, parent ) {\n\t\t\t\tif ( isReference( node, parent ) ) {\n\t\t\t\t\tconst { name } = flattenReference( node );\n\n\t\t\t\t\tif ( parent && parent.type === 'CallExpression' && node === parent.callee && helpers[ name ] ) {\n\t\t\t\t\t\tcode.prependRight( node.start, `template.helpers.` );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !scope.has( name ) ) {\n\t\t\t\t\t\tcode.prependRight( node.start, `data.` );\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.skip();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tsnippet: `[✂${expression.start}-${expression.end}✂]`,\n\t\t\tstring: code.slice( expression.start, expression.end )\n\t\t};\n\t}\n\n\tlet elementDepth = 0;\n\n\tconst stringifiers = {\n\t\tComponent ( node ) {\n\t\t\tconst props = node.attributes.map( attribute => {\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.value === true ) {\n\t\t\t\t\tvalue = `true`;\n\t\t\t\t} else if ( attribute.value.length === 0 ) {\n\t\t\t\t\tvalue = `''`;\n\t\t\t\t} else if ( attribute.value.length === 1 ) {\n\t\t\t\t\tconst chunk = attribute.value[0];\n\t\t\t\t\tif ( chunk.type === 'Text' ) {\n\t\t\t\t\t\tvalue = isNaN( parseFloat( chunk.data ) ) ? JSON.stringify( chunk.data ) : chunk.data;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst { snippet } = contextualise( chunk.expression );\n\t\t\t\t\t\tvalue = snippet;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvalue = '`' + attribute.value.map( stringify ).join( '' ) + '`';\n\t\t\t\t}\n\n\t\t\t\treturn `${attribute.name}: ${value}`;\n\t\t\t}).join( ', ' );\n\n\t\t\tlet params = `{${props}}`;\n\n\t\t\tif ( node.children.length ) {\n\t\t\t\tparams += `, { yield: () => \\`${node.children.map( stringify ).join( '' )}\\` }`;\n\t\t\t}\n\n\t\t\treturn `\\${template.components.${node.name}.render(${params})}`;\n\t\t},\n\n\t\tEachBlock ( node ) {\n\t\t\tconst { snippet } = contextualise( node.expression );\n\n\t\t\tscope = new Set();\n\t\t\tscope.add( node.context );\n\t\t\tif ( node.index ) scope.add( node.index );\n\n\t\t\tscopes.push( scope );\n\n\t\t\tconst block = `\\${ ${snippet}.map( ${ node.index ? `( ${node.context}, ${node.index} )` : node.context} => \\`${ node.children.map( stringify ).join( '' )}\\` ).join( '' )}`;\n\n\t\t\tscopes.pop();\n\t\t\tscope = scopes[ scopes.length - 1 ];\n\n\t\t\treturn block;\n\t\t},\n\n\t\tElement ( node ) {\n\t\t\tif ( node.name in components ) {\n\t\t\t\treturn stringifiers.Component( node );\n\t\t\t}\n\n\t\t\tlet element = `<${node.name}`;\n\n\t\t\tnode.attributes.forEach( attribute => {\n\t\t\t\tlet str = ` ${attribute.name}`;\n\n\t\t\t\tif ( attribute.value !== true ) {\n\t\t\t\t\tstr += `=\"` + attribute.value.map( chunk => {\n\t\t\t\t\t\tif ( chunk.type === 'Text' ) {\n\t\t\t\t\t\t\treturn chunk.data;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst { snippet } = contextualise( chunk.expression );\n\t\t\t\t\t\treturn '${' + snippet + '}';\n\t\t\t\t\t}).join( '' ) + `\"`;\n\t\t\t\t}\n\n\t\t\t\telement += str;\n\t\t\t});\n\n\t\t\tif ( parsed.css && elementDepth === 0 ) {\n\t\t\t\telement += ` svelte-${parsed.hash}`;\n\t\t\t}\n\n\t\t\tif ( voidElementNames.test( node.name ) ) {\n\t\t\t\telement += '>';\n\t\t\t} else if ( node.children.length === 0 ) {\n\t\t\t\telement += '/>';\n\t\t\t} else {\n\t\t\t\telementDepth += 1;\n\t\t\t\telement += '>' + node.children.map( stringify ).join( '' ) + ``;\n\t\t\t\telementDepth -= 1;\n\t\t\t}\n\n\t\t\treturn element;\n\t\t},\n\n\t\tIfBlock ( node ) {\n\t\t\tconst { snippet } = contextualise( node.expression ); // TODO use snippet, for sourcemap support\n\n\t\t\tconst consequent = node.children.map( stringify ).join( '' );\n\t\t\tconst alternate = node.else ? node.else.children.map( stringify ).join( '' ) : '';\n\n\t\t\treturn '${ ' + snippet + ' ? `' + consequent + '` : `' + alternate + '` }';\n\t\t},\n\n\t\tMustacheTag ( node ) {\n\t\t\tconst { snippet } = contextualise( node.expression ); // TODO use snippet, for sourcemap support\n\t\t\treturn '${' + snippet + '}';\n\t\t},\n\n\t\tText ( node ) {\n\t\t\treturn node.data.replace( /\\${/g, '\\\\${' );\n\t\t},\n\n\t\tYieldTag () {\n\t\t\treturn `\\${options.yield()}`;\n\t\t}\n\t};\n\n\tfunction stringify ( node ) {\n\t\tconst stringifier = stringifiers[ node.type ];\n\n\t\tif ( !stringifier ) {\n\t\t\tthrow new Error( `Not implemented: ${node.type}` );\n\t\t}\n\n\t\treturn stringifier( node );\n\t}\n\n\tfunction createBlock ( node ) {\n\t\tconst str = stringify( node );\n\t\tif ( str.slice( 0, 2 ) === '${' ) return str.slice( 2, -1 );\n\t\treturn '`' + str + '`';\n\t}\n\n\tconst blocks = parsed.html.children.map( node => {\n\t\treturn deindent`\n\t\t\trendered += ${createBlock( node )};\n\t\t`;\n\t});\n\n\tconst topLevelStatements = [];\n\n\tconst importBlock = imports\n\t\t.map( ( declaration, i ) => {\n\t\t\tconst defaultImport = declaration.specifiers.find( x => x.type === 'ImportDefaultSpecifier' || x.type === 'ImportSpecifier' && x.imported.name === 'default' );\n\t\t\tconst namespaceImport = declaration.specifiers.find( x => x.type === 'ImportNamespaceSpecifier' );\n\t\t\tconst namedImports = declaration.specifiers.filter( x => x.type === 'ImportSpecifier' && x.imported.name !== 'default' );\n\n\t\t\tconst name = ( defaultImport || namespaceImport ) ? ( defaultImport || namespaceImport ).local.name : `__import${i}`;\n\n\t\t\tconst statements = [\n\t\t\t\t`var ${name} = require( '${declaration.source.value}' );`\n\t\t\t];\n\n\t\t\tnamedImports.forEach( specifier => {\n\t\t\t\tstatements.push( `var ${specifier.local.name} = ${name}.${specifier.imported.name};` );\n\t\t\t});\n\n\t\t\tif ( defaultImport ) {\n\t\t\t\tstatements.push( `${name} = ( ${name} && ${name}.__esModule ) ? ${name}['default'] : ${name};` );\n\t\t\t}\n\n\t\t\treturn statements.join( '\\n' );\n\t\t})\n\t\t.filter( Boolean )\n\t\t.join( '\\n' );\n\n\tif ( parsed.js ) {\n\t\tif ( imports.length ) {\n\t\t\ttopLevelStatements.push( importBlock );\n\t\t}\n\n\t\ttopLevelStatements.push( `[✂${parsed.js.content.start}-${parsed.js.content.end}✂]` );\n\t}\n\n\tconst renderStatements = [\n\t\ttemplateProperties.data ? `data = Object.assign( template.data(), data || {} );` : `data = data || {};`\n\t];\n\n\tif ( templateProperties.computed ) {\n\t\tconst statements = [];\n\t\tconst dependencies = new Map();\n\n\t\ttemplateProperties.computed.properties.forEach( prop => {\n\t\t\tconst key = prop.key.name;\n\t\t\tconst value = prop.value;\n\n\t\t\tconst deps = value.params.map( param => param.name );\n\t\t\tdependencies.set( key, deps );\n\t\t});\n\n\t\tconst visited = new Set();\n\n\t\tfunction visit ( key ) {\n\t\t\tif ( !dependencies.has( key ) ) return; // not a computation\n\n\t\t\tif ( visited.has( key ) ) return;\n\t\t\tvisited.add( key );\n\n\t\t\tconst deps = dependencies.get( key );\n\t\t\tdeps.forEach( visit );\n\n\t\t\tstatements.push( deindent`\n\t\t\t\tdata.${key} = template.computed.${key}( ${deps.map( dep => `data.${dep}` ).join( ', ' )} );\n\t\t\t` );\n\t\t}\n\n\t\ttemplateProperties.computed.properties.forEach( prop => visit( prop.key.name ) );\n\n\t\trenderStatements.push( statements.join( '\\n' ) );\n\t}\n\n\trenderStatements.push(\n\t\t`var rendered = '';`,\n\t\tblocks.join( '\\n\\n' ),\n\t\t`return rendered;`\n\t);\n\n\tconst renderCssStatements = [\n\t\t`var components = [];`\n\t];\n\n\tif ( parsed.css ) {\n\t\trenderCssStatements.push( deindent`\n\t\t\tcomponents.push({\n\t\t\t\tfilename: exports.filename,\n\t\t\t\tcss: ${JSON.stringify( processCss( parsed ) )},\n\t\t\t\tmap: null // TODO\n\t\t\t});\n\t\t` );\n\t}\n\n\tif ( templateProperties.components ) {\n\t\trenderCssStatements.push( deindent`\n\t\t\tvar seen = {};\n\n\t\t\tfunction addComponent ( component ) {\n\t\t\t\tvar result = component.renderCss();\n\t\t\t\tresult.components.forEach( x => {\n\t\t\t\t\tif ( seen[ x.filename ] ) return;\n\t\t\t\t\tseen[ x.filename ] = true;\n\t\t\t\t\tcomponents.push( x );\n\t\t\t\t});\n\t\t\t}\n\t\t` );\n\n\t\trenderCssStatements.push( templateProperties.components.properties.map( prop => `addComponent( template.components.${prop.key.name} );` ).join( '\\n' ) );\n\t}\n\n\trenderCssStatements.push( deindent`\n\t\treturn {\n\t\t\tcss: components.map( x => x.css ).join( '\\\\n' ),\n\t\t\tmap: null,\n\t\t\tcomponents\n\t\t};\n\t` );\n\n\ttopLevelStatements.push( deindent`\n\t\texports.filename = ${JSON.stringify( filename )};\n\n\t\texports.render = function ( data, options ) {\n\t\t\t${renderStatements.join( '\\n\\n' )}\n\t\t};\n\n\t\texports.renderCss = function () {\n\t\t\t${renderCssStatements.join( '\\n\\n' )}\n\t\t};\n\t` );\n\n\tconst rendered = topLevelStatements.join( '\\n\\n' );\n\n\tconst pattern = /\\[✂(\\d+)-(\\d+)$/;\n\n\tconst parts = rendered.split( '✂]' );\n\tconst finalChunk = parts.pop();\n\n\tconst compiled = new Bundle({ separator: '' });\n\n\tfunction addString ( str ) {\n\t\tcompiled.addSource({\n\t\t\tcontent: new MagicString( str )\n\t\t});\n\t}\n\n\tparts.forEach( str => {\n\t\tconst chunk = str.replace( pattern, '' );\n\t\tif ( chunk ) addString( chunk );\n\n\t\tconst match = pattern.exec( str );\n\n\t\tconst snippet = code.snip( +match[1], +match[2] );\n\n\t\tcompiled.addSource({\n\t\t\tfilename,\n\t\t\tcontent: snippet\n\t\t});\n\t});\n\n\taddString( finalChunk );\n\n\treturn {\n\t\tcode: compiled.toString()\n\t};\n}\n","import * as fs from 'fs';\nimport compile from './compile.js';\n\nrequire.extensions[ '.html' ] = function ( module, filename ) {\n\tconst { code } = compile( fs.readFileSync( filename, 'utf-8' ) );\n\n\ttry {\n\t\treturn module._compile( code, filename );\n\t} catch ( err ) {\n\t\tconsole.log( code );\n\t\tthrow err;\n\t}\n};\n"],"names":["transform","parse","validate","MagicString","flattenReference","processCss","Bundle","fs.readFileSync"],"mappings":"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"} \ No newline at end of file