Skip to content

Commit

Permalink
Merge pull request #55 from esperantojs/preserve-source-string
Browse files Browse the repository at this point in the history
Handle escapes in module source names.
  • Loading branch information
Rich-Harris committed Jan 13, 2015
2 parents 30ccf3b + f59e606 commit 09bb404
Show file tree
Hide file tree
Showing 16 changed files with 47 additions and 10 deletions.
4 changes: 2 additions & 2 deletions src/bundler/builders/defaultsMode/amd.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import template from 'utils/template';
import packageResult from 'utils/packageResult';
import { getName } from 'utils/mappers';
import { getName, quote } from 'utils/mappers';

var introTemplate = template( 'define(<%= amdName %><%= amdDeps %>function (<%= names %>) {\n\n\t\'use strict\';\n\n' );

Expand All @@ -11,7 +11,7 @@ export default function amd ( bundle, body, options ) {
}

var intro = introTemplate({
amdName: options.amdName ? `'${options.amdName}', ` : '',
amdName: options.amdName ? `${quote(options.amdName)}, ` : '',
amdDeps: bundle.externalModules.length ? '[' + bundle.externalModules.map( quoteId ).join( ', ' ) + '], ' : '',
names: bundle.externalModules.map( getName ).join( ', ' )
}).replace( /\t/g, body.getIndentString() );
Expand Down
3 changes: 2 additions & 1 deletion src/bundler/builders/defaultsMode/cjs.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import packageResult from 'utils/packageResult';
import { req } from 'utils/mappers';

export default function cjs ( bundle, body, options ) {
var importBlock = bundle.externalModules.map( x => {
return `var ${x.name} = require('${x.id}');`;
return `var ${x.name} = ${req(x.id)};`;
}).join( '\n' );

if ( importBlock ) {
Expand Down
2 changes: 1 addition & 1 deletion src/bundler/builders/strictMode/amd.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export default function amd ( bundle, body, options ) {
}

var intro = introTemplate({
amdName: options.amdName ? `'${options.amdName}', ` : '',
amdName: options.amdName ? `${quote(options.amdName)}, ` : '',
amdDeps: importIds.length ? '[' + importIds.map( quote ).join( ', ' ) + '], ' : '',
names: importNames.join( ', ' )
}).replace( /\t/g, body.getIndentString() );
Expand Down
3 changes: 2 additions & 1 deletion src/bundler/builders/strictMode/cjs.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import packageResult from 'utils/packageResult';
import getExportBlock from './utils/getExportBlock';
import { req } from 'utils/mappers';

export default function cjs ( bundle, body, options ) {
var entry = bundle.entryModule;

var importBlock = bundle.externalModules.map( x => {
var statement = `var ${x.name} = require('${x.id}');`;
var statement = `var ${x.name} = ${req(x.id)};`;

if ( x.needsDefault ) {
statement += '\n' +
Expand Down
3 changes: 2 additions & 1 deletion src/standalone/builders/defaultsMode/cjs.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import packageResult from 'utils/packageResult';
import { req } from 'utils/mappers';

export default function cjs ( mod, body, options ) {
var exportDeclaration;

mod.imports.forEach( x => {
var replacement = x.isEmpty ? `require('${x.path}');` : `var ${x.name} = require('${x.path}');`;
var replacement = x.isEmpty ? `${req(x.path)};` : `var ${x.name} = ${req(x.path)};`;
body.replace( x.start, x.end, replacement );
});

Expand Down
4 changes: 2 additions & 2 deletions src/utils/mappers.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ export function getName ( m ) {
}

export function quote ( str ) {
return "'" + str + "'";
return "'" + JSON.stringify(str).slice(1, -1).replace(/'/g, "\\'") + "'";
}

export function req ( path ) {
return 'require(\'' + path + '\')';
return 'require(' + quote(path) + ')';
}

export function globalify ( name ) {
Expand Down
2 changes: 1 addition & 1 deletion src/utils/umd/defaultUmdIntro.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export default function defaultUmdIntro ( options, indentStr ) {
var hasExports = options.hasExports;

var amdName = options.amdName ?
"'" + options.amdName + "', " :
quote(options.amdName) + ", " :
'';
var amdDeps = options.importPaths.length > 0 ?
'[' + options.importPaths.map( quote ).join( ', ' ) + '], ' :
Expand Down
4 changes: 3 additions & 1 deletion src/utils/umd/standaloneUmdIntro.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { quote } from 'utils/mappers';

export default function standaloneUmdIntro ( options, indentStr ) {
var amdName = options.amdName ?
"'" + options.amdName + "', " :
quote(options.amdName) + ", " :
'';

var intro =
Expand Down
1 change: 1 addition & 0 deletions test/fastMode/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ module.exports = function () {
{ file: 'earlyExport', description: 'transpiles exports that are not the final statement' },
{ file: 'emptyImport', description: 'transpiles empty imports with no exports' },
{ file: 'emptyImportWithDefaultExport', description: 'transpiles empty imports with default exports' },
{ file: 'escapedSource', description: 'preserves character escapes in source strings' },
{ file: 'exportAnonFunction', description: 'transpiled anonymous default function exports' },
{ file: 'exportDefault', description: 'transpiles default exports' },
{ file: 'exportFunction', description: 'transpiles named default function exports' },
Expand Down
5 changes: 5 additions & 0 deletions test/fastMode/output/amd/escapedSource.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
define(['fo\no'], function (foo) {

'use strict';

});
3 changes: 3 additions & 0 deletions test/fastMode/output/cjs/escapedSource.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
'use strict';

var foo = require('fo\no');
7 changes: 7 additions & 0 deletions test/fastMode/output/umd/escapedSource.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('fo\no')) :
typeof define === 'function' && define.amd ? define(['fo\no'], factory) :
factory(global.foo)
}(this, function (foo) { 'use strict';

}));
1 change: 1 addition & 0 deletions test/samples/escapedSource.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import foo from 'fo\no';
5 changes: 5 additions & 0 deletions test/strictMode/output/amd/escapedSource.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
define(['fo\no'], function (foo) {

'use strict';

});
3 changes: 3 additions & 0 deletions test/strictMode/output/cjs/escapedSource.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
'use strict';

var foo = require('fo\no');
7 changes: 7 additions & 0 deletions test/strictMode/output/umd/escapedSource.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('fo\no')) :
typeof define === 'function' && define.amd ? define(['fo\no'], factory) :
factory(global.foo)
}(this, function (foo) { 'use strict';

}));

0 comments on commit 09bb404

Please sign in to comment.