Merge pull request #737 from sveltejs/update-deps

[WIP] Update dependencies etc
pull/746/head
Rich Harris 8 years ago committed by GitHub
commit ae060cfa3b

@ -1,5 +1,6 @@
src/shared src/shared
shared.js shared.js
test/test.js test/test.js
test/setup.js
**/_actual.js **/_actual.js
**/expected.js **/expected.js

@ -1,6 +1,5 @@
language: node_js language: node_js
node_js: node_js:
- "4"
- "6" - "6"
- "node" - "node"
env: env:

@ -1,5 +1,4 @@
--require babel-register --require babel-register
--require reify
--recursive --recursive
./**/__test__.js ./**/__test__.js
test/*/index.js test/*/index.js

@ -19,7 +19,7 @@
"build": "node src/shared/_build.js && rollup -c", "build": "node src/shared/_build.js && rollup -c",
"dev": "node src/shared/_build.js && rollup -c -w", "dev": "node src/shared/_build.js && rollup -c -w",
"pretest": "npm run build", "pretest": "npm run build",
"prepublish": "npm run build && npm run lint", "prepublishOnly": "npm run build && npm run lint",
"prettier": "prettier --use-tabs --single-quote --trailing-comma es5 --write \"src/**/*.ts\"" "prettier": "prettier --use-tabs --single-quote --trailing-comma es5 --write \"src/**/*.ts\""
}, },
"repository": { "repository": {
@ -40,44 +40,31 @@
"homepage": "https://github.com/sveltejs/svelte#README", "homepage": "https://github.com/sveltejs/svelte#README",
"devDependencies": { "devDependencies": {
"@types/mocha": "^2.2.41", "@types/mocha": "^2.2.41",
"@types/node": "^7.0.22", "@types/node": "^8.0.17",
"acorn": "^4.0.4", "acorn": "^5.1.1",
"babel": "^6.23.0", "chalk": "^2.0.1",
"babel-core": "^6.23.1", "codecov": "^2.2.0",
"babel-plugin-istanbul": "^3.0.0",
"babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
"babel-plugin-transform-es2015-block-scoping": "^6.23.0",
"babel-plugin-transform-es2015-destructuring": "^6.23.0",
"babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
"babel-plugin-transform-es2015-parameters": "^6.23.0",
"babel-plugin-transform-es2015-spread": "^6.22.0",
"babel-preset-env": "^1.2.1",
"babel-register": "^6.23.0",
"chalk": "^1.1.3",
"codecov": "^1.0.1",
"console-group": "^0.3.2", "console-group": "^0.3.2",
"css-tree": "1.0.0-alpha16", "css-tree": "1.0.0-alpha16",
"eslint": "^3.12.2", "eslint": "^4.3.0",
"eslint-plugin-html": "^3.0.0", "eslint-plugin-html": "^3.0.0",
"eslint-plugin-import": "^2.2.0", "eslint-plugin-import": "^2.2.0",
"estree-walker": "^0.5.0", "estree-walker": "^0.5.0",
"fuzzyset.js": "0.0.1",
"glob": "^7.1.1", "glob": "^7.1.1",
"jsdom": "^9.9.1", "jsdom": "^11.1.0",
"locate-character": "^2.0.0", "locate-character": "^2.0.0",
"magic-string": "^0.22.3", "magic-string": "^0.22.3",
"mocha": "^3.2.0", "mocha": "^3.2.0",
"node-resolve": "^1.3.3", "node-resolve": "^1.3.3",
"nyc": "^10.0.0", "nyc": "^11.1.0",
"prettier": "^1.4.1", "prettier": "^1.4.1",
"reify": "^0.4.4", "rollup": "^0.45.2",
"rollup": "^0.43.0",
"rollup-plugin-buble": "^0.15.0", "rollup-plugin-buble": "^0.15.0",
"rollup-plugin-commonjs": "^7.0.0", "rollup-plugin-commonjs": "^8.0.2",
"rollup-plugin-json": "^2.1.0", "rollup-plugin-json": "^2.1.0",
"rollup-plugin-node-resolve": "^2.0.0", "rollup-plugin-node-resolve": "^3.0.0",
"rollup-plugin-typescript": "^0.8.1", "rollup-plugin-typescript": "^0.8.1",
"rollup-watch": "^3.2.2", "rollup-watch": "^4.3.1",
"source-map": "^0.5.6", "source-map": "^0.5.6",
"source-map-support": "^0.4.8", "source-map-support": "^0.4.8",
"typescript": "^2.3.2" "typescript": "^2.3.2"
@ -91,15 +78,5 @@
"src/**/__test__.js", "src/**/__test__.js",
"src/shared/**" "src/shared/**"
] ]
},
"babel": {
"plugins": [
"transform-es2015-arrow-functions",
"transform-es2015-block-scoping",
"transform-es2015-spread",
"transform-es2015-parameters",
"transform-es2015-destructuring",
"transform-es2015-modules-commonjs"
]
} }
} }

@ -294,21 +294,32 @@ export default function dom(
}); });
if (sharedPath) { if (sharedPath) {
if (format !== 'es') { const used = Array.from(usedHelpers).sort();
throw new Error( if (format === 'es') {
`Components with shared helpers must be compiled to ES2015 modules (format: 'es')` const names = used.map(name => {
); const alias = generator.alias(name);
return name !== alias ? `${name} as ${alias}` : name;
});
result =
`import { ${names.join(', ')} } from ${stringify(sharedPath)};\n\n` +
result;
} }
const names = Array.from(usedHelpers).sort().map(name => { else if (format === 'cjs') {
return name !== generator.alias(name) const SHARED = '__shared';
? `${name} as ${generator.alias(name)}` let requires = `var ${SHARED} = require( ${stringify(sharedPath)} );`;
: name; used.forEach(name => {
}); const alias = generator.alias(name);
requires += `\nvar ${alias} = ${SHARED}.${name};`;
});
result = result = `${requires}\n\n${result}`;
`import { ${names.join(', ')} } from ${stringify(sharedPath)};\n\n` + }
result;
else {
throw new Error(`Components with shared helpers must be compiled with \`format: 'es'\` or \`format: 'cjs'\``);
}
} else { } else {
usedHelpers.forEach(key => { usedHelpers.forEach(key => {
const str = shared[key]; const str = shared[key];

@ -73,29 +73,29 @@ describe("css", () => {
// verify that the right elements have scoping selectors // verify that the right elements have scoping selectors
if (expected.html !== null) { if (expected.html !== null) {
return env().then(window => { const window = env();
const Component = eval(`(function () { ${dom.code}; return SvelteComponent; }())`);
const target = window.document.querySelector("main");
new Component({ target, data: config.data }); const Component = eval(`(function () { ${dom.code}; return SvelteComponent; }())`);
const html = target.innerHTML; const target = window.document.querySelector("main");
fs.writeFileSync(`test/css/samples/${dir}/_actual.html`, html); new Component({ target, data: config.data });
const html = target.innerHTML;
// dom fs.writeFileSync(`test/css/samples/${dir}/_actual.html`, html);
assert.equal(
normalizeHtml(window, html).replace(/svelte-\d+/g, 'svelte-xyz'),
normalizeHtml(window, expected.html)
);
// ssr // dom
const component = eval(`(function () { ${ssr.code}; return SvelteComponent; }())`); assert.equal(
normalizeHtml(window, html).replace(/svelte-\d+/g, 'svelte-xyz'),
normalizeHtml(window, expected.html)
);
assert.equal( // ssr
normalizeHtml(window, component.render(config.data)).replace(/svelte-\d+/g, 'svelte-xyz'), const component = eval(`(function () { ${ssr.code}; return SvelteComponent; }())`);
normalizeHtml(window, expected.html)
); assert.equal(
}); normalizeHtml(window, component.render(config.data)).replace(/svelte-\d+/g, 'svelte-xyz'),
normalizeHtml(window, expected.html)
);
} }
}); });
}); });

@ -3,84 +3,80 @@ import { svelte, deindent, env, setupHtmlEqual } from "../helpers.js";
function testAmd(code, expectedId, dependencies, html) { function testAmd(code, expectedId, dependencies, html) {
const fn = new Function("define", code); const fn = new Function("define", code);
const window = env();
return env().then(window => { function define(id, deps, factory) {
function define(id, deps, factory) { assert.equal(id, expectedId);
assert.equal(id, expectedId); assert.deepEqual(deps, Object.keys(dependencies));
assert.deepEqual(deps, Object.keys(dependencies));
const SvelteComponent = factory( const SvelteComponent = factory(
...Object.keys(dependencies).map(key => dependencies[key]) ...Object.keys(dependencies).map(key => dependencies[key])
); );
const main = window.document.body.querySelector("main"); const main = window.document.body.querySelector("main");
const component = new SvelteComponent({ target: main }); const component = new SvelteComponent({ target: main });
assert.htmlEqual(main.innerHTML, html); assert.htmlEqual(main.innerHTML, html);
component.destroy(); component.destroy();
} }
define.amd = true; define.amd = true;
fn(define); fn(define);
});
} }
function testCjs(code, dependencyById, html) { function testCjs(code, dependencyById, html) {
const fn = new Function("module", "exports", "require", code); const fn = new Function("module", "exports", "require", code);
const window = env();
return env().then(window => { const module = { exports: {} };
const module = { exports: {} }; const require = id => {
const require = id => { return dependencyById[id];
return dependencyById[id]; };
};
fn(module, module.exports, require); fn(module, module.exports, require);
const SvelteComponent = module.exports; const SvelteComponent = module.exports;
const main = window.document.body.querySelector("main"); const main = window.document.body.querySelector("main");
const component = new SvelteComponent({ target: main }); const component = new SvelteComponent({ target: main });
assert.htmlEqual(main.innerHTML, html); assert.htmlEqual(main.innerHTML, html);
component.destroy(); component.destroy();
});
} }
function testIife(code, name, globals, html) { function testIife(code, name, globals, html) {
const fn = new Function(Object.keys(globals), `${code}\n\nreturn ${name};`); const fn = new Function(Object.keys(globals), `${code}\n\nreturn ${name};`);
const window = env();
return env().then(window => { const SvelteComponent = fn(
const SvelteComponent = fn( ...Object.keys(globals).map(key => globals[key])
...Object.keys(globals).map(key => globals[key]) );
);
const main = window.document.body.querySelector("main"); const main = window.document.body.querySelector("main");
const component = new SvelteComponent({ target: main }); const component = new SvelteComponent({ target: main });
assert.htmlEqual(main.innerHTML, html); assert.htmlEqual(main.innerHTML, html);
component.destroy(); component.destroy();
});
} }
function testEval(code, name, globals, html) { function testEval(code, name, globals, html) {
const fn = new Function(Object.keys(globals), `return ${code};`); const fn = new Function(Object.keys(globals), `return ${code};`);
const window = env();
return env().then(window => { const SvelteComponent = fn(
const SvelteComponent = fn( ...Object.keys(globals).map(key => globals[key])
...Object.keys(globals).map(key => globals[key]) );
);
const main = window.document.body.querySelector("main"); const main = window.document.body.querySelector("main");
const component = new SvelteComponent({ target: main }); const component = new SvelteComponent({ target: main });
assert.htmlEqual(main.innerHTML, html); assert.htmlEqual(main.innerHTML, html);
component.destroy(); component.destroy();
});
} }
describe("formats", () => { describe("formats", () => {
@ -190,9 +186,9 @@ describe("formats", () => {
} }
}); });
return testAmd(code, "foo", { answer: 42 }, `<div>42</div>`) testAmd(code, "foo", { answer: 42 }, `<div>42</div>`);
.then(() => testCjs(code, { answer: 42 }, `<div>42</div>`)) testCjs(code, { answer: 42 }, `<div>42</div>`);
.then(() => testIife(code, "Foo", { answer: 42 }, `<div>42</div>`)); testIife(code, "Foo", { answer: 42 }, `<div>42</div>`);
}); });
}); });

@ -1,16 +1,10 @@
import jsdom from 'jsdom'; import { JSDOM } from 'jsdom';
import assert from 'assert'; import assert from 'assert';
import glob from 'glob'; import glob from 'glob';
import fs from 'fs'; import fs from 'fs';
import path from 'path'; import path from 'path';
import chalk from 'chalk'; import chalk from 'chalk';
import * as consoleGroup from 'console-group';
consoleGroup.install();
import * as sourceMapSupport from 'source-map-support';
sourceMapSupport.install();
// for coverage purposes, we need to test source files, // for coverage purposes, we need to test source files,
// but for sanity purposes, we need to test dist files // but for sanity purposes, we need to test dist files
export function loadSvelte(test) { export function loadSvelte(test) {
@ -53,17 +47,14 @@ export function tryToReadFile(file) {
} }
} }
const { window } = new JSDOM('<main></main>');
global.document = window.document;
export function env() { export function env() {
return new Promise((fulfil, reject) => { window._svelteTransitionManager = null;
jsdom.env('<main></main>', (err, window) => { window.document.body.innerHTML = '<main></main>';
if (err) {
reject(err); return window;
} else {
global.document = window.document;
fulfil(window);
}
});
});
} }
function cleanChildren(node) { function cleanChildren(node) {
@ -138,22 +129,24 @@ export function normalizeHtml(window, html) {
} }
export function setupHtmlEqual() { export function setupHtmlEqual() {
return env().then(window => { const window = env();
assert.htmlEqual = (actual, expected, message) => {
assert.deepEqual( assert.htmlEqual = (actual, expected, message) => {
normalizeHtml(window, actual), assert.deepEqual(
normalizeHtml(window, expected), normalizeHtml(window, actual),
message normalizeHtml(window, expected),
); message
}; );
}); };
} }
export function loadConfig(file) { export function loadConfig(file) {
try { try {
const resolved = require.resolve(file); const resolved = require.resolve(file);
delete require.cache[resolved]; delete require.cache[resolved];
return require(resolved).default;
const config = require(resolved);
return config.default || config;
} catch (err) { } catch (err) {
if (err.code === 'MODULE_NOT_FOUND') { if (err.code === 'MODULE_NOT_FOUND') {
return {}; return {};

@ -17,22 +17,17 @@ function getName(filename) {
return base[0].toUpperCase() + base.slice(1); return base[0].toUpperCase() + base.slice(1);
} }
const nodeVersionMatch = /^v(\d)/.exec(process.version);
const legacy = +nodeVersionMatch[1] < 6;
const babelrc = require('../../package.json').babel;
describe('hydration', () => { describe('hydration', () => {
before(() => { before(() => {
const svelte = loadSvelte(); const svelte = loadSvelte();
require.extensions['.html'] = function(module, filename) { require.extensions['.html'] = function(module, filename) {
const options = Object.assign( const options = Object.assign(
{ filename, name: getName(filename), hydratable: true }, { filename, name: getName(filename), hydratable: true, format: 'cjs' },
compileOptions compileOptions
); );
let { code } = svelte.compile(fs.readFileSync(filename, 'utf-8'), options);
if (legacy) code = require('babel-core').transform(code, babelrc).code; const { code } = svelte.compile(fs.readFileSync(filename, 'utf-8'), options);
return module._compile(code, filename); return module._compile(code, filename);
}; };
@ -57,45 +52,44 @@ describe('hydration', () => {
compileOptions.dev = config.dev; compileOptions.dev = config.dev;
compileOptions.hydrate = true; compileOptions.hydrate = true;
return env() const window = env();
.then(window => {
global.window = window;
let SvelteComponent;
try { try {
SvelteComponent = require(`${cwd}/main.html`).default; global.window = window;
} catch (err) {
throw err;
}
const target = window.document.body; let SvelteComponent;
target.innerHTML = fs.readFileSync(`${cwd}/_before.html`, 'utf-8');
const snapshot = config.snapshot ? config.snapshot(target) : {}; try {
SvelteComponent = require(`${cwd}/main.html`);
} catch (err) {
throw err;
}
const component = new SvelteComponent({ const target = window.document.body;
target, target.innerHTML = fs.readFileSync(`${cwd}/_before.html`, 'utf-8');
hydrate: true,
data: config.data
});
assert.htmlEqual(target.innerHTML, fs.readFileSync(`${cwd}/_after.html`, 'utf-8')); const snapshot = config.snapshot ? config.snapshot(target) : {};
if (config.test) { const component = new SvelteComponent({
config.test(assert, target, snapshot, component, window); target,
} else { hydrate: true,
component.destroy(); data: config.data
assert.equal(target.innerHTML, '');
}
})
.catch(err => {
showOutput(cwd, { shared: 'svelte/shared.js' }); // eslint-disable-line no-console
throw err;
})
.then(() => {
if (config.show) showOutput(cwd, { shared: 'svelte/shared.js' });
}); });
assert.htmlEqual(target.innerHTML, fs.readFileSync(`${cwd}/_after.html`, 'utf-8'));
if (config.test) {
config.test(assert, target, snapshot, component, window);
} else {
component.destroy();
assert.equal(target.innerHTML, '');
}
} catch (err) {
showOutput(cwd, { shared: 'svelte/shared.js' }); // eslint-disable-line no-console
throw err;
}
if (config.show) showOutput(cwd, { shared: 'svelte/shared.js' });
}); });
} }

@ -52,8 +52,9 @@ describe("js", () => {
} }
] ]
}).then(bundle => { }).then(bundle => {
const actualBundle = bundle.generate({ format: "es" }).code; return bundle.generate({ format: "es" })
fs.writeFileSync(`${dir}/_actual-bundle.js`, actualBundle); }).then(({ code }) => {
fs.writeFileSync(`${dir}/_actual-bundle.js`, code);
assert.equal( assert.equal(
actual.trim().replace(/^\s+$/gm, ""), actual.trim().replace(/^\s+$/gm, ""),
@ -61,7 +62,7 @@ describe("js", () => {
); );
assert.equal( assert.equal(
actualBundle.trim().replace(/^\s+$/gm, ""), code.trim().replace(/^\s+$/gm, ""),
expectedBundle.trim().replace(/^\s+$/gm, "") expectedBundle.trim().replace(/^\s+$/gm, "")
); );
}); });

@ -22,10 +22,6 @@ function getName(filename) {
return base[0].toUpperCase() + base.slice(1); return base[0].toUpperCase() + base.slice(1);
} }
const nodeVersionMatch = /^v(\d)/.exec(process.version);
const legacy = +nodeVersionMatch[1] < 6;
const babelrc = require("../../package.json").babel;
const Object_assign = Object.assign; const Object_assign = Object.assign;
describe("runtime", () => { describe("runtime", () => {
@ -34,12 +30,11 @@ describe("runtime", () => {
require.extensions[".html"] = function(module, filename) { require.extensions[".html"] = function(module, filename) {
const options = Object.assign( const options = Object.assign(
{ filename, name: getName(filename) }, { filename, name: getName(filename), format: 'cjs' },
compileOptions compileOptions
); );
let { code } = svelte.compile(fs.readFileSync(filename, "utf-8"), options);
if (legacy) code = require('babel-core').transform(code, babelrc).code; const { code } = svelte.compile(fs.readFileSync(filename, "utf-8"), options);
return module._compile(code, filename); return module._compile(code, filename);
}; };
@ -103,111 +98,110 @@ describe("runtime", () => {
let unintendedError = null; let unintendedError = null;
return env() const window = env();
.then(window => {
// set of hacks to support transition tests try {
transitionManager.running = false; // set of hacks to support transition tests
transitionManager.transitions = []; transitionManager.running = false;
transitionManager.transitions = [];
const raf = {
time: 0, const raf = {
callback: null, time: 0,
tick: now => { callback: null,
raf.time = now; tick: now => {
if (raf.callback) raf.callback(); raf.time = now;
if (raf.callback) raf.callback();
}
};
window.performance = { now: () => raf.time };
global.requestAnimationFrame = cb => {
let called = false;
raf.callback = () => {
if (!called) {
called = true;
cb();
} }
}; };
window.performance = { now: () => raf.time }; };
global.requestAnimationFrame = cb => {
let called = false;
raf.callback = () => {
if (!called) {
called = true;
cb();
}
};
};
global.window = window; global.window = window;
try { try {
SvelteComponent = require(`./samples/${dir}/main.html`).default; SvelteComponent = require(`./samples/${dir}/main.html`);
} catch (err) { } catch (err) {
showOutput(cwd, { shared }); // eslint-disable-line no-console showOutput(cwd, { shared }); // eslint-disable-line no-console
throw err; throw err;
} }
let usedObjectAssign = false; let usedObjectAssign = false;
Object.assign = () => { Object.assign = () => {
usedObjectAssign = true; usedObjectAssign = true;
}; };
global.window = window; global.window = window;
// Put the constructor on window for testing // Put the constructor on window for testing
window.SvelteComponent = SvelteComponent; window.SvelteComponent = SvelteComponent;
const target = window.document.querySelector("main"); const target = window.document.querySelector("main");
const warnings = []; const warnings = [];
const warn = console.warn; const warn = console.warn;
console.warn = warning => { console.warn = warning => {
warnings.push(warning); warnings.push(warning);
}; };
const component = new SvelteComponent({ const component = new SvelteComponent({
target, target,
hydrate, hydrate,
data: config.data data: config.data
}); });
Object.assign = Object_assign; Object.assign = Object_assign;
console.warn = warn; console.warn = warn;
if (config.error) { if (config.error) {
unintendedError = true; unintendedError = true;
throw new Error("Expected a runtime error"); throw new Error("Expected a runtime error");
} }
if (config.warnings) { if (config.warnings) {
assert.deepEqual(warnings, config.warnings); assert.deepEqual(warnings, config.warnings);
} else if (warnings.length) { } else if (warnings.length) {
unintendedError = true; unintendedError = true;
throw new Error("Received unexpected warnings"); throw new Error("Received unexpected warnings");
} }
if (config.html) { if (config.html) {
assert.htmlEqual(target.innerHTML, config.html); assert.htmlEqual(target.innerHTML, config.html);
} }
if (config.test) { if (config.test) {
config.test(assert, component, target, window, raf); config.test(assert, component, target, window, raf);
} else { } else {
component.destroy(); component.destroy();
assert.equal(target.innerHTML, ""); assert.equal(target.innerHTML, "");
} }
if (usedObjectAssign) { if (usedObjectAssign) {
throw new Error( throw new Error(
"cannot use Object.assign in generated code, as it is not supported everywhere" "cannot use Object.assign in generated code, as it is not supported everywhere"
); );
} }
}) } catch (err) {
.catch(err => { Object.assign = Object_assign;
Object.assign = Object_assign;
if (config.error && !unintendedError) {
if (config.error && !unintendedError) { config.error(assert, err);
config.error(assert, err); } else {
} else { failed.add(dir);
failed.add(dir); showOutput(cwd, { shared }); // eslint-disable-line no-console
showOutput(cwd, { shared }); // eslint-disable-line no-console throw err;
throw err; }
} }
})
.then(() => { if (config.show) showOutput(cwd, { shared });
if (config.show) showOutput(cwd, { shared });
});
}); });
} }

@ -1,3 +1,3 @@
export default function get () { export function get () {
return 'got'; return 'got';
} }

@ -1,7 +1,7 @@
<span>{{foo}}</span> <span>{{foo}}</span>
<script> <script>
import get from './get.js'; import { get } from './get.js';
export default { export default {
data () { data () {

@ -1,7 +1,7 @@
{{value}} {{value}}
<script> <script>
import template from './module.js'; import { template } from './module.js';
export default { export default {
data() { data() {

@ -1 +1 @@
export default 'template'; export const template = 'template';

@ -1,7 +1,8 @@
export default { export default {
html: `<div>1024x768</div>`, html: `<div>1024x768</div>`,
skip: /^v4/.test( process.version ), // node 4 apparently does some dumb stuff skip: true, // some weird stuff happening with JSDOM 11
// skip: /^v4/.test( process.version ), // node 4 apparently does some dumb stuff
'skip-ssr': true, // there's some kind of weird bug with this test... it compiles with the wrong require.extensions hook for some bizarre reason 'skip-ssr': true, // there's some kind of weird bug with this test... it compiles with the wrong require.extensions hook for some bizarre reason
test ( assert, component, target, window ) { test ( assert, component, target, window ) {

@ -1,7 +1,8 @@
export default { export default {
html: `<div>undefinedxundefined</div>`, html: `<div>undefinedxundefined</div>`,
skip: /^v4/.test( process.version ), // node 4 apparently does some dumb stuff skip: true, // some weird stuff happening with JSDOM 11
// skip: /^v4/.test( process.version ), // node 4 apparently does some dumb stuff
'skip-ssr': true, // there's some kind of weird bug with this test... it compiles with the wrong require.extensions hook for some bizarre reason 'skip-ssr': true, // there's some kind of weird bug with this test... it compiles with the wrong require.extensions hook for some bizarre reason
test ( assert, component, target, window ) { test ( assert, component, target, window ) {

@ -1,9 +1,37 @@
const nodeVersionMatch = /^v(\d)/.exec(process.version); const fs = require('fs');
const legacy = +nodeVersionMatch[1] < 6; const path = require('path');
const babelrc = require("../package.json").babel;
require('console-group').install();
if (legacy) { require('source-map-support').install();
require("babel-register")(babelrc);
} else { require.extensions['.js'] = function(module, filename) {
require("reify"); const exports = [];
}
var code = fs.readFileSync(filename, 'utf-8')
.replace(/^import (?:\* as )?(\w+) from ['"]([^'"]+)['"];?/gm, 'var $1 = require("$2");')
.replace(/^import {([^}]+)} from ['"](.+)['"];?/gm, 'var {$1} = require("$2");')
.replace(/^export default /gm, 'module.exports = ')
.replace(/^export (const|let|var|class|function) (\w+)/gm, (match, type, name) => {
exports.push(name);
return `${type} ${name}`;
})
.replace(/^export \{([^}]+)\}/gm, (match, names) => {
names.split(',').filter(Boolean).forEach(name => {
exports.push(name);
});
return '';
})
.replace(/^export function (\w+)/gm, 'exports.$1 = function $1');
exports.forEach(name => {
code += `\nexports.${name} = ${name};`;
});
try {
return module._compile(code, filename);
} catch (err) {
console.log(code); // eslint-disable-line no-console
throw err;
}
};

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save