Skip to content

Commit 244f8cd

Browse files
author
Ives van Hoorne
committed
Cleanup sandbox code
1 parent 129ea6d commit 244f8cd

File tree

6 files changed

+35
-110
lines changed

6 files changed

+35
-110
lines changed

src/sandbox/boilerplates/index.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
// @flow
2-
import evalModule from '../eval';
2+
import type { Module, Directory } from 'common/types';
33

4-
import type { Module } from '../../app/store/entities/sandboxes/modules/entity';
5-
import type {
6-
Directory,
7-
} from '../../app/store/entities/sandboxes/directories/entity';
4+
import evalModule from '../eval';
85

96
let cachedBoilerplates = [];
107

@@ -17,6 +14,7 @@ export function evalBoilerplates(
1714
cachedBoilerplates = boilerplates.map(boilerplate => {
1815
const fakeModule: Module = {
1916
id: boilerplate.id,
17+
shortid: boilerplate.id,
2018
title: `boilerplate-${boilerplate.condition}`,
2119
code: boilerplate.code,
2220
directoryShortid: null,
@@ -25,7 +23,7 @@ export function evalBoilerplates(
2523
type: '',
2624
};
2725

28-
const module = evalModule(fakeModule, '', modules, directories, externals);
26+
const module = evalModule(fakeModule, modules, directories, externals);
2927
return { ...boilerplate, module };
3028
});
3129
}

src/sandbox/eval/css.js

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,5 @@
11
const getStyleId = id => id + '-css'; // eslint-disable-line
22

3-
function getGeneratedClassNameCode(code: string, alteredClassNames) {
4-
let newCode = code;
5-
Object.keys(alteredClassNames).forEach(cn => {
6-
const regex = new RegExp(`.${cn} `);
7-
newCode = newCode.replace(regex, `.${alteredClassNames[cn]} `);
8-
});
9-
return newCode;
10-
}
11-
123
function createStyleNode(id: string, content: string) {
134
const styleNode =
145
document.getElementById(getStyleId(id)) || document.createElement('style');
@@ -26,7 +17,7 @@ function createStyleNode(id: string, content: string) {
2617
/**
2718
* Adds CSS to HEAD and creates a mapping of classname -> generatedClassname
2819
*/
29-
export default (module, sandboxId) => {
20+
export default module => {
3021
const css = module.code;
3122

3223
const classNameRegex = /\.(-?[_a-zA-Z]+[_a-zA-Z0-9-]*)/g;
@@ -35,7 +26,7 @@ export default (module, sandboxId) => {
3526
// const alteredClassNames = getGeneratedClassNames(module.id, classNames);
3627

3728
// const newCode = getGeneratedClassNameCode(module.code, alteredClassNames);
38-
createStyleNode(`${sandboxId}${module.id}`, css);
29+
createStyleNode(`${module.id}`, css);
3930

4031
return classNames;
4132
};

src/sandbox/eval/index.js

Lines changed: 9 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
// @flow
2-
import type { Module } from 'app/store/entities/sandboxes/modules/entity';
3-
4-
import type {
5-
Directory,
6-
} from 'app/store/entities/sandboxes/directories/entity';
2+
import type { Module, Directory } from 'common/types';
73

84
import evalJS, { deleteCache as deleteJSCache } from './js';
95
import evalHTML from './html';
@@ -12,56 +8,34 @@ import evalJson from './json';
128

139
const MAX_DEPTH = 20;
1410

15-
function doEval(mainModule, sandboxId, modules, directories, externals, depth) {
11+
function doEval(mainModule, modules, directories, externals, depth) {
1612
const html = /\.html$/;
1713
const css = /\.css$/;
1814
const json = /\.json$/;
1915

2016
if (html.test(mainModule.title)) {
21-
return evalHTML(
22-
mainModule,
23-
sandboxId,
24-
modules,
25-
directories,
26-
externals,
27-
depth,
28-
);
17+
return evalHTML(mainModule, modules, directories, externals, depth);
2918
}
3019

3120
if (css.test(mainModule.title)) {
32-
return evalCSS(
33-
mainModule,
34-
sandboxId,
35-
modules,
36-
directories,
37-
externals,
38-
depth,
39-
);
21+
return evalCSS(mainModule, modules, directories, externals, depth);
4022
}
4123

4224
if (json.test(mainModule.title)) {
43-
return evalJson(
44-
mainModule,
45-
sandboxId,
46-
modules,
47-
directories,
48-
externals,
49-
depth,
50-
);
25+
return evalJson(mainModule, modules, directories, externals, depth);
5126
}
5227

53-
return evalJS(mainModule, sandboxId, modules, directories, externals, depth);
28+
return evalJS(mainModule, modules, directories, externals, depth);
5429
}
5530

56-
export function deleteCache(sandboxId, module: Module) {
31+
export function deleteCache(module: Module) {
5732
if (module.title.includes('.js')) {
58-
deleteJSCache(sandboxId, module);
33+
deleteJSCache(module);
5934
}
6035
}
6136

6237
const evalModule = (
6338
mainModule: Module,
64-
sandboxId: string,
6539
modules: Array<Module>,
6640
directories: Array<Directory>,
6741
externals: Object,
@@ -71,14 +45,7 @@ const evalModule = (
7145
throw new Error(`Exceeded the maximum require depth of ${MAX_DEPTH}.`);
7246
}
7347
try {
74-
return doEval(
75-
mainModule,
76-
sandboxId,
77-
modules,
78-
directories,
79-
externals,
80-
depth,
81-
);
48+
return doEval(mainModule, modules, directories, externals, depth);
8249
} catch (e) {
8350
e.module = e.module || mainModule;
8451
throw e;

src/sandbox/eval/js.js

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,24 @@ import restSpread from 'babel-plugin-transform-object-rest-spread';
77
import classProperties from 'babel-plugin-transform-class-properties';
88
import decoratorPlugin from 'babel-plugin-transform-decorators-legacy';
99

10+
import type { Module, Directory } from 'common/types';
11+
1012
import evalModule from './';
1113
import resolveModule from '../utils/resolve-module';
1214
import DependencyNotFoundError from '../errors/dependency-not-found-error';
1315

1416
const moduleCache = new Map();
1517

16-
const getId = (sandboxId, module) => `${sandboxId}${module.id}`;
17-
1818
/**
1919
* Deletes the cache of all modules that use module and module itself
2020
*/
21-
export function deleteCache(sandboxId, module) {
21+
export function deleteCache(module: Module) {
2222
moduleCache.forEach(value => {
23-
if (value.requires.includes(getId(sandboxId, module))) {
24-
deleteCache(sandboxId, value.module);
23+
if (value.requires.includes(module.id)) {
24+
deleteCache(value.module);
2525
}
2626
});
27-
moduleCache.delete(getId(sandboxId, module));
27+
moduleCache.delete(module.id);
2828
}
2929

3030
const compileCode = (code: string = '', moduleName: string = 'unknown') => {
@@ -47,12 +47,11 @@ function evaluate(code, require) {
4747
}
4848

4949
export default function evaluateJS(
50-
mainModule,
51-
sandboxId,
52-
modules,
53-
directories,
54-
externals,
55-
depth,
50+
mainModule: Module,
51+
modules: Array<Module>,
52+
directories: Array<Directory>,
53+
externals: Object,
54+
depth: number,
5655
) {
5756
try {
5857
const requires = [];
@@ -88,38 +87,31 @@ export default function evaluateJS(
8887

8988
if (!module) throw new Error(`Cannot find module in path: ${path}`);
9089

91-
requires.push(getId(sandboxId, module));
90+
requires.push(module.id);
9291
// Check if this module has been evaluated before, if so return that
93-
const cache = moduleCache.get(getId(sandboxId, module));
92+
const cache = moduleCache.get(module.id);
9493

9594
return cache
9695
? cache.exports
97-
: evalModule(
98-
module,
99-
sandboxId,
100-
modules,
101-
directories,
102-
externals,
103-
depth + 1,
104-
);
96+
: evalModule(module, modules, directories, externals, depth + 1);
10597
}
10698
};
10799

108-
const compiledCode = compileCode(mainModule.code, mainModule.title);
100+
const compiledCode = compileCode(mainModule.code || '', mainModule.title);
109101

110102
// don't use Function() here since it changes source locations
111103
const exports = evaluate(compiledCode, require);
112104

113105
// Always set a (if no error) new cache for this module, because we know this changed
114-
moduleCache.set(getId(sandboxId, mainModule), {
106+
moduleCache.set(mainModule.id, {
115107
exports,
116108
requires,
117109
module: mainModule,
118110
});
119111
return exports;
120112
} catch (e) {
121113
// Remove cache
122-
moduleCache.delete(getId(sandboxId, mainModule));
114+
moduleCache.delete(mainModule.id);
123115
throw e;
124116
}
125117
}

src/sandbox/index.js

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ async function compile(message) {
7272
url: newUrl,
7373
changedModule,
7474
externalResources,
75-
sandboxId,
7675
} = message.data;
7776

7877
if (fetching) return;
@@ -90,15 +89,9 @@ async function compile(message) {
9089
try {
9190
const html = getIndexHtml(modules);
9291
document.body.innerHTML = html;
93-
deleteCache(sandboxId, changedModule);
94-
95-
const evalled = evalModule(
96-
module,
97-
sandboxId,
98-
modules,
99-
directories,
100-
externals,
101-
);
92+
deleteCache(changedModule);
93+
94+
const evalled = evalModule(module, modules, directories, externals);
10295
const domChanged = document.body.innerHTML !== html;
10396

10497
if (!domChanged && !module.title.endsWith('.html')) {

src/sandbox/utils/babel-worker.js

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)