From 3d053d93956c8c31bc3f4b6ac56593b923e976d3 Mon Sep 17 00:00:00 2001 From: Milan Hauth Date: Sat, 26 Sep 2020 12:21:02 +0200 Subject: [PATCH] support default + named import --- test/setup.js | 22 ++++++++++++------- .../samples/sourcemap-sources/_config.js | 11 +++------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/test/setup.js b/test/setup.js index 7406a07dd9..14e0366387 100644 --- a/test/setup.js +++ b/test/setup.js @@ -8,22 +8,28 @@ require.extensions['.js'] = function(module, filename) { const exports = []; let code = fs.readFileSync(filename, 'utf-8') - .replace(/^import \* as (\w+) from ['"]([^'"]+)['"];?/gm, 'var $1 = require("$2");') - .replace(/^import (\w+) from ['"]([^'"]+)['"];?/gm, 'var {default: $1} = require("$2");') - .replace(/^import {([^}]+)} from ['"](.+)['"];?/gm, 'var {$1} = require("$2");') - .replace(/^export default /gm, 'exports.default = ') - .replace(/^export (const|let|var|class|function) (\w+)/gm, (match, type, name) => { + .replace(/^import\s+\*\s+as\s+(\w+)\s+from\s+(['"])(.+?)\2;?/gm, 'var $1 = require($2$3$2);') + .replace(/^import\s+(\w+)\s+from\s+(['"])(.+?)\2;?/gm, 'var {default: $1} = require($2$3$2);') + .replace(/^import\s+(?:(\w+)\s*,\s*)?{([^}]+)}(?:\s*,\s*(\w+))?\s+from\s+(['"])(.+?)\4;?/gm, + (match, default_name_1, names, default_name_2, quote, source) => { + names = names.replace(/\s+as\s+/g, ': '); + let default_name = default_name_1 || default_name_2; + default_name = default_name ? `default: ${default_name}, ` : ''; + return `var {${default_name}${names}} = require(${quote}${source}${quote});`; + }) + .replace(/^export\s+default\s+/gm, 'exports.default = ') + .replace(/^export\s+(const|let|var|class|function)\s+(\w+)/gm, (match, type, name) => { exports.push(name); return `${type} ${name}`; }) - .replace(/^export \{([^}]+)\}(?: from ['"]([^'"]+)['"];?)?/gm, (match, names, source) => { + .replace(/^export\s+\{([^}]+)\}(?:\s+from\s+(['"])(.+?)\2;?)?/gm, (match, names, quote, source) => { names.split(',').filter(Boolean).forEach(name => { exports.push(name); }); - return source ? `const { ${names} } = require("${source}");` : ''; + return source ? `const { ${names} } = require(${quote}${source}${quote});` : ''; }) - .replace(/^export function (\w+)/gm, 'exports.$1 = function $1'); + .replace(/^export\s+function\s+(\w+)/gm, 'exports.$1 = function $1'); exports.forEach(name => { code += `\nexports.${name} = ${name};`; diff --git a/test/sourcemaps/samples/sourcemap-sources/_config.js b/test/sourcemaps/samples/sourcemap-sources/_config.js index 4fb923e1fc..0c413c9300 100644 --- a/test/sourcemaps/samples/sourcemap-sources/_config.js +++ b/test/sourcemaps/samples/sourcemap-sources/_config.js @@ -1,9 +1,4 @@ -import MagicString from 'magic-string'; -// eslint warning: import/no-named-as-default-member - -//import MagicString, { Bundle } from 'magic-string'; -// TODO why does this break mocha? -// SyntaxError: Cannot use import statement outside a module +import MagicString, { Bundle } from 'magic-string'; function add(bundle, filename, source) { bundle.addSource({ @@ -27,7 +22,7 @@ export default { preprocess: [ { script: ({ content, filename }) => { - const bundle = new MagicString.Bundle(); + const bundle = new Bundle(); add(bundle, filename, content); add(bundle, 'foo.js', 'var answer = 42;'); @@ -38,7 +33,7 @@ export default { }, { script: ({ content, filename }) => { - const bundle = new MagicString.Bundle(); + const bundle = new Bundle(); add(bundle, filename, content); add(bundle, 'foo2.js', 'var answer2 = 84;');