Skip to content

Commit 3905683

Browse files
committed
allow custom path for helpers (#218)
1 parent 946adf9 commit 3905683

File tree

2 files changed

+25
-25
lines changed

2 files changed

+25
-25
lines changed

src/generators/dom/index.js

+18-18
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,15 @@ export default function dom ( parsed, source, options, names ) {
302302
builders.main.addBlock( `${name}.prototype = template.methods;` );
303303
}
304304

305-
const standalone = options.standalone !== false;
305+
const sharedPath = options.shared === true ? 'svelte/shared.js' : options.shared;
306306

307-
builders.main.addBlock( standalone ?
307+
builders.main.addBlock( sharedPath ?
308+
deindent`
309+
${name}.prototype.get = get;
310+
${name}.prototype.fire = fire;
311+
${name}.prototype.observe = observe;
312+
${name}.prototype.on = on;
313+
` :
308314
deindent`
309315
${name}.prototype.get = ${shared.get};
310316
@@ -313,12 +319,6 @@ export default function dom ( parsed, source, options, names ) {
313319
${name}.prototype.observe = ${shared.observe};
314320
315321
${name}.prototype.on = ${shared.on};
316-
` :
317-
deindent`
318-
${name}.prototype.get = get;
319-
${name}.prototype.fire = fire;
320-
${name}.prototype.observe = observe;
321-
${name}.prototype.on = on;
322322
` );
323323

324324
builders.main.addBlock( deindent`
@@ -336,22 +336,22 @@ export default function dom ( parsed, source, options, names ) {
336336
};
337337
` );
338338

339-
if ( standalone ) {
340-
builders.main.addBlock( shared.dispatchObservers.toString() );
341-
342-
Object.keys( generator.uses ).forEach( key => {
343-
const fn = shared[ key ]; // eslint-disable-line import/namespace
344-
builders.main.addBlock( fn.toString() );
345-
});
346-
} else {
339+
if ( sharedPath ) {
347340
if ( format !== 'es' ) {
348-
throw new Error( `Non-standalone components must be compiled to ES2015 modules (format: 'es')` );
341+
throw new Error( `Components with shared helpers must be compiled to ES2015 modules (format: 'es')` );
349342
}
350343

351344
const names = [ 'get', 'fire', 'observe', 'on', 'dispatchObservers' ].concat( Object.keys( generator.uses ) );
352345
builders.main.addLineAtStart(
353-
`import { ${names.join( ', ' )} } from 'svelte/shared.js'`
346+
`import { ${names.join( ', ' )} } from '${sharedPath}'`
354347
);
348+
} else {
349+
builders.main.addBlock( shared.dispatchObservers.toString() );
350+
351+
Object.keys( generator.uses ).forEach( key => {
352+
const fn = shared[ key ]; // eslint-disable-line import/namespace
353+
builders.main.addBlock( fn.toString() );
354+
});
355355
}
356356

357357
return generator.generate( builders.main.toString(), options, { name, format } );

test/generate.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require.extensions[ '.html' ] = function ( module, filename ) {
1515

1616
if ( showCompiledCode ) console.log( addLineNumbers( code ) ); // eslint-disable-line no-console
1717

18-
return module._compile( code.replace( 'svelte/shared.js', path.resolve( 'shared.js' ) ), filename );
18+
return module._compile( code, filename );
1919
};
2020

2121
function addLineNumbers ( code ) {
@@ -44,7 +44,7 @@ function loadConfig ( dir ) {
4444
describe( 'generate', () => {
4545
before( setupHtmlEqual );
4646

47-
function runTest ( dir, standalone ) {
47+
function runTest ( dir, shared ) {
4848
if ( dir[0] === '.' ) return;
4949

5050
const config = loadConfig( dir );
@@ -54,7 +54,7 @@ describe( 'generate', () => {
5454

5555
showCompiledCode = config.show;
5656
compileOptions = config.compileOptions || {};
57-
compileOptions.standalone = standalone;
57+
compileOptions.shared = shared;
5858

5959
try {
6060
const source = fs.readFileSync( `test/generator/${dir}/main.html`, 'utf-8' );
@@ -123,15 +123,15 @@ describe( 'generate', () => {
123123
});
124124
}
125125

126-
describe( 'standalone', () => {
126+
describe( 'inline helpers', () => {
127127
fs.readdirSync( 'test/generator' ).forEach( dir => {
128-
runTest( dir, true );
128+
runTest( dir, null );
129129
});
130130
});
131131

132-
describe( 'non-standalone', () => {
132+
describe( 'shared helpers', () => {
133133
fs.readdirSync( 'test/generator' ).forEach( dir => {
134-
runTest( dir, false );
134+
runTest( dir, path.resolve( 'shared.js' ) );
135135
});
136136
});
137137
});

0 commit comments

Comments
 (0)