MCPcopy Create free account
hub / github.com/alibaba/butterfly / evalCode

Function evalCode

example/pages/code-box/coms/playground/eval-code.js:166–223  ·  view source on GitHub ↗
(files)

Source from the content-addressed store, hash-verified

164 * @param {Array} files {code: string, filename: string}[]
165 */
166const evalCode = async (files) => {
167 if (files.length === 0) {
168 return;
169 }
170
171 const evalFiles = _.cloneDeep(files);
172
173 // 依赖
174 let deps = [];
175
176 for (let file of evalFiles) {
177 const filename = file.filename;
178
179 if (filename.endsWith('.js') || filename.endsWith('.jsx')) {
180 const result = Babel.transform(file.code, {
181 presets: ['env', 'react'],
182 sourceMaps: 'inline'
183 });
184 file.evalCode = result.code;
185 const fileDeps = gatherDeps(result.code);
186 deps = deps.concat(fileDeps);
187 }
188
189 if (filename.endsWith('.less')) {
190 const output = await less.render(
191 file.code,
192 {
193 plugins: [
194 new LocalFileManagerPlugin(files)
195 ]
196 }
197 );
198 file.evalCode = wrapCss(output.css);
199 }
200
201 if (filename.endsWith('.css')) {
202 file.evalCode = wrapCss(file.code);
203 }
204
205 if (!file.evalCode) {
206 continue;
207 }
208
209 // eslint-disable-next-line
210 file.func = (module, exports, require) => eval(file.evalCode);
211 }
212
213 const entry = evalFiles.find(f => f.filename === 'index.jsx');
214 let cache = {};
215 try {
216 cache = await loadDpes(deps);
217 } catch (e) {
218 // eslint-disable-next-line
219 console.log('load deps failed', e);
220 }
221
222 runModule(entry, {...cache}, evalFiles);
223};

Callers 1

runFunction · 0.85

Calls 5

gatherDepsFunction · 0.85
wrapCssFunction · 0.85
loadDpesFunction · 0.85
runModuleFunction · 0.85
renderMethod · 0.45

Tested by

no test coverage detected