Skip to content

Commit 4975a67

Browse files
authored
Evaluate in global scope for more realistic this behaviour (codesandbox#262)
* Evaluate in global scope * Change string exports to module * Fix module.exports * Add test case
1 parent 0496421 commit 4975a67

File tree

5 files changed

+8
-4
lines changed

5 files changed

+8
-4
lines changed

integration-tests/tests/sandboxes.test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const SANDBOXES = [
1515
{ id: 'o29j95wx9', root: '#app' },
1616
{ id: 'k3q1zjjml5', root: '#app' },
1717
'github/reactjs/redux/tree/master/examples/real-world',
18+
'github/CompuIves/codesandbox-presentation',
1819
];
1920

2021
SANDBOXES.forEach(sandbox => {

src/sandbox/eval/loaders/eval.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
import buildProcess from './utils/process';
33

44
/* eslint-disable no-unused-vars */
5-
export default function(code: string, require: Function, exports) {
5+
export default function(code: string, require: Function, exports: Object) {
66
const module = { exports: {} };
77
const global = window;
88
const process = buildProcess();
9+
window.global = global;
910

1011
try {
11-
eval(code); // eslint-disable-line no-eval
12+
const newCode = `(function evaluate(require, module, exports, process, global) {${code}\n})`;
13+
(0, eval)(newCode)(require, module, exports, process, global); // eslint-disable-line no-eval
1214

1315
// Choose either the export of __esModule or node
1416
return Object.keys(module.exports || {}).length > 0 ||

src/sandbox/eval/transpiled-module.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,7 @@ export default class TranspiledModule {
479479
transpiledModule,
480480
]);
481481
}
482+
482483
const exports = evaluate(
483484
this.source.compiledCode,
484485
require,

src/sandbox/eval/transpilers/json/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Transpiler from '../';
44
class JSONTranspiler extends Transpiler {
55
doTranspilation(code: string) {
66
const result = `
7-
exports = JSON.parse(${JSON.stringify(code || '')})
7+
module.exports = JSON.parse(${JSON.stringify(code || '')})
88
`;
99

1010
return Promise.resolve({

src/sandbox/eval/transpilers/raw/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class RawTranspiler extends Transpiler {
99
doTranspilation(code: string) {
1010
return Promise.resolve({
1111
transpiledCode: `
12-
exports = ${JSON.stringify(code)};`,
12+
module.exports = ${JSON.stringify(code)};`,
1313
});
1414
}
1515
}

0 commit comments

Comments
 (0)