mirror of
https://github.com/multipleof4/lynchmark.git
synced 2026-01-14 16:47:55 +00:00
Docs: Update benchmark for test 4
This commit is contained in:
@@ -1,75 +1,5 @@
|
||||
async function bundleApp(entryFile, files) {
|
||||
const Babel = await import('https://esm.sh/@babel/standalone');
|
||||
const modules = {};
|
||||
const visited = new Set();
|
||||
|
||||
const resolve = (from, to) => {
|
||||
if (!to.startsWith('./') && !to.startsWith('../')) return to;
|
||||
const fromParts = from.split('/').slice(0, -1);
|
||||
const toParts = to.split('/');
|
||||
for (const p of toParts) {
|
||||
if (p === '..') fromParts.pop();
|
||||
else if (p !== '.') fromParts.push(p);
|
||||
}
|
||||
return fromParts.join('/') || toParts[toParts.length - 1];
|
||||
};
|
||||
|
||||
const extractDeps = code => {
|
||||
const deps = [];
|
||||
const re = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
|
||||
let m;
|
||||
while ((m = re.exec(code))) deps.push(m[1]);
|
||||
return deps;
|
||||
};
|
||||
|
||||
const process = file => {
|
||||
if (visited.has(file)) return;
|
||||
visited.add(file);
|
||||
if (!(file in files)) throw new Error(`Missing file: ${file}`);
|
||||
const transformed = Babel.transform(files[file], {
|
||||
presets: ['env'],
|
||||
filename: file
|
||||
}).code;
|
||||
const deps = extractDeps(transformed);
|
||||
const resolved = {};
|
||||
for (const d of deps) {
|
||||
const r = resolve(file, d);
|
||||
resolved[d] = r;
|
||||
process(r);
|
||||
}
|
||||
modules[file] = { code: transformed, deps: resolved };
|
||||
};
|
||||
|
||||
process(entryFile);
|
||||
|
||||
const modulesObj = JSON.stringify(
|
||||
Object.fromEntries(
|
||||
Object.entries(modules).map(([k, v]) => [
|
||||
k,
|
||||
{ code: v.code, deps: v.deps }
|
||||
])
|
||||
)
|
||||
);
|
||||
|
||||
return `(function(){
|
||||
var __modules__=${modulesObj};
|
||||
var __cache__={};
|
||||
var __resolve__=function(f,t){
|
||||
var d=__modules__[f].deps;
|
||||
return d[t]||t;
|
||||
};
|
||||
var __require__=function(from,id){
|
||||
var resolved=__resolve__(from,id);
|
||||
if(__cache__[resolved])return __cache__[resolved].exports;
|
||||
var mod=__modules__[resolved];
|
||||
if(!mod)throw new Error("Cannot find module: "+resolved);
|
||||
var module={exports:{}};
|
||||
__cache__[resolved]=module;
|
||||
var fn=new Function("require","module","exports",mod.code);
|
||||
fn(function(id){return __require__(resolved,id);},module,module.exports);
|
||||
return module.exports;
|
||||
};
|
||||
return __require__("","${entryFile}");
|
||||
})()`;
|
||||
async function renderTemplate(template, data) {
|
||||
const { default: Handlebars } = await import('https://esm.sh/handlebars');
|
||||
return Handlebars.compile(template)(data);
|
||||
}
|
||||
export default bundleApp;
|
||||
export default renderTemplate;
|
||||
Reference in New Issue
Block a user