Skip to content

Commit 54c1a7c

Browse files
authored
fix(commonjs): Exclude multi-line template strings from indent (#1229)
Fixes #1228
1 parent df3d73f commit 54c1a7c

File tree

7 files changed

+90
-4
lines changed

7 files changed

+90
-4
lines changed

packages/commonjs/src/generate-exports.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export function wrapCode(magicString, uses, moduleName, exportsName) {
1+
export function wrapCode(magicString, uses, moduleName, exportsName, indentExclusionRanges) {
22
const args = [];
33
const passedArgs = [];
44
if (uses.module) {
@@ -11,7 +11,7 @@ export function wrapCode(magicString, uses, moduleName, exportsName) {
1111
}
1212
magicString
1313
.trim()
14-
.indent('\t')
14+
.indent('\t', { exclude: indentExclusionRanges })
1515
.prepend(`(function (${args.join(', ')}) {\n`)
1616
.append(`\n} (${passedArgs.join(', ')}));`);
1717
}

packages/commonjs/src/transform-commonjs.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ export default async function transformCommonjs(
9797
const replacedGlobal = [];
9898
const replacedDynamicRequires = [];
9999
const importedVariables = new Set();
100+
const indentExclusionRanges = [];
100101

101102
walk(ast, {
102103
enter(node, parent) {
@@ -395,6 +396,11 @@ export default async function transformCommonjs(
395396
if (!scope.parent) {
396397
topLevelDeclarations.push(node);
397398
}
399+
return;
400+
case 'TemplateElement':
401+
if (node.value.raw.includes('\n')) {
402+
indentExclusionRanges.push([node.start, node.end]);
403+
}
398404
}
399405
},
400406

@@ -527,11 +533,13 @@ export default async function transformCommonjs(
527533
);
528534

529535
if (shouldWrap) {
530-
wrapCode(magicString, uses, moduleName, exportsName);
536+
wrapCode(magicString, uses, moduleName, exportsName, indentExclusionRanges);
531537
}
532538

533539
if (usesRequireWrapper) {
534-
magicString.trim().indent('\t');
540+
magicString.trim().indent('\t', {
541+
exclude: indentExclusionRanges
542+
});
535543
magicString.prepend(
536544
`var ${isRequiredName};
537545
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module.exports = {
2+
description: 'indent does not affect multi-line string content',
3+
pluginOptions: {
4+
defaultIsModuleExports: false
5+
}
6+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const main = require('./main.js');
2+
3+
exports.value = `
4+
dep
5+
multi
6+
line
7+
string
8+
`;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const dep = require('./dep.js');
2+
3+
module.exports = `
4+
main
5+
multi
6+
line
7+
string
8+
`;

packages/commonjs/test/snapshots/function.js.md

+56
Original file line numberDiff line numberDiff line change
@@ -4834,6 +4834,62 @@ Generated by [AVA](https://avajs.dev).
48344834
`,
48354835
}
48364836

4837+
## indent-multiline-strings
4838+
4839+
> Snapshot 1
4840+
4841+
{
4842+
'main.js': `'use strict';␊
4843+
4844+
function getDefaultExportFromCjs (x) {␊
4845+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;␊
4846+
}␊
4847+
4848+
var main$1 = {exports: {}};␊
4849+
4850+
var dep = {};␊
4851+
4852+
var hasRequiredDep;␊
4853+
4854+
function requireDep () {␊
4855+
if (hasRequiredDep) return dep;␊
4856+
hasRequiredDep = 1;␊
4857+
requireMain();␊
4858+
4859+
dep.value = `␊
4860+
dep␊
4861+
multi␊
4862+
line␊
4863+
string␊
4864+
`;␊
4865+
return dep;␊
4866+
}␊
4867+
4868+
var hasRequiredMain;␊
4869+
4870+
function requireMain () {␊
4871+
if (hasRequiredMain) return main$1.exports;␊
4872+
hasRequiredMain = 1;␊
4873+
(function (module) {␊
4874+
requireDep();␊
4875+
4876+
module.exports = `␊
4877+
main␊
4878+
multi␊
4879+
line␊
4880+
string␊
4881+
`;␊
4882+
} (main$1));␊
4883+
return main$1.exports;␊
4884+
}␊
4885+
4886+
var mainExports = requireMain();␊
4887+
var main = /*@__PURE__*/getDefaultExportFromCjs(mainExports);␊
4888+
4889+
module.exports = main;␊
4890+
`,
4891+
}
4892+
48374893
## index
48384894

48394895
> Snapshot 1
132 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)