Skip to content

Commit 8ff66f3

Browse files
authored
Merge pull request #553 from sveltejs/gh-538
correctly handle when helper functions have been internally renamed (#538)
2 parents bd82455 + ccafb11 commit 8ff66f3

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/generators/dom/index.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import { walk } from 'estree-walker';
66
import deindent from '../../utils/deindent.js';
77
import CodeBuilder from '../../utils/CodeBuilder.js';
88
import visit from './visit.js';
9+
import { nameMap, sharedMap } from './sharedNames.js';
910
import Generator from '../Generator.js';
1011
import preprocess from './preprocess.js';
11-
import * as shared from '../../shared/index.js';
1212

1313
class DomGenerator extends Generator {
1414
constructor ( parsed, source, name, options ) {
@@ -25,7 +25,7 @@ class DomGenerator extends Generator {
2525
}
2626

2727
helper ( name ) {
28-
if ( this.options.dev && `${name}Dev` in shared ) {
28+
if ( this.options.dev && sharedMap.has( `${name}Dev` ) ) {
2929
name = `${name}Dev`;
3030
}
3131

@@ -275,7 +275,7 @@ export default function dom ( parsed, source, options ) {
275275
);
276276
} else {
277277
generator.uses.forEach( key => {
278-
const str = shared[ key ].toString(); // eslint-disable-line import/namespace
278+
const str = sharedMap.get( key );
279279
const code = new MagicString( str );
280280
const fn = parse( str ).body[0];
281281

@@ -286,11 +286,12 @@ export default function dom ( parsed, source, options ) {
286286
if ( node._scope ) scope = node._scope;
287287

288288
if ( node.type === 'Identifier' && isReference( node, parent ) && !scope.has( node.name ) ) {
289-
if ( node.name in shared ) {
289+
if ( nameMap.has( node.name ) ) {
290290
// this helper function depends on another one
291-
generator.uses.add( node.name );
291+
const dependency = nameMap.get( node.name );
292+
generator.uses.add( dependency );
292293

293-
const alias = generator.alias( node.name );
294+
const alias = generator.alias( dependency );
294295
if ( alias !== node.name ) code.overwrite( node.start, node.end, alias );
295296
}
296297
}
@@ -301,7 +302,7 @@ export default function dom ( parsed, source, options ) {
301302
}
302303
});
303304

304-
const alias = generator.alias( fn.id.name );
305+
const alias = generator.alias( key );
305306
if ( alias !== fn.id.name ) code.overwrite( fn.id.start, fn.id.end, alias );
306307

307308
builders.main.addBlock( code.toString() );

src/generators/dom/sharedNames.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import * as shared from '../../shared/index.js';
2+
3+
export const nameMap = new Map();
4+
export const sharedMap = new Map();
5+
6+
Object.keys(shared).forEach( key => {
7+
const value = shared[ key ]; // eslint-disable-line import/namespace
8+
if ( typeof value === 'function' ) {
9+
nameMap.set( value.name, key );
10+
}
11+
sharedMap.set( key, value.toString() );
12+
});

0 commit comments

Comments
 (0)