nstdlib-nightly
Version:
Node.js standard library converted to runtime-agnostic ES modules.
53 lines (45 loc) • 1.66 kB
JavaScript
// Source: https://github.com/nodejs/node/blob/65eff1eb/lib/internal/v8_prof_processor.js
import { Buffer as Buffer } from "nstdlib/lib/buffer";
import * as console from "nstdlib/lib/internal/console/global";
import * as vm from "nstdlib/lib/vm";
import { SourceTextModule } from "nstdlib/lib/internal/vm/module";
import { natives } from "nstdlib/stub/binding/builtins";
async function linker(specifier, referencingModule) {
// Transform "./file.mjs" to "file"
const file = String.prototype.slice.call(specifier, 2, -4);
const code = natives[`internal/deps/v8/tools/${file}`];
return new SourceTextModule(code, { context: referencingModule.context });
}
(async () => {
const tickArguments = [];
if (process.platform === "darwin") {
Array.prototype.push.call(tickArguments, "--mac");
} else if (process.platform === "win32") {
Array.prototype.push.call(tickArguments, "--windows");
}
Array.prototype.push.apply(
tickArguments,
Array.prototype.slice.call(process.argv, 1),
);
const context = vm.createContext({
arguments: tickArguments,
write(s) {
process.stdout.write(s);
},
printErr(err) {
console.error(err);
},
console,
process,
Buffer,
});
const polyfill = natives["internal/v8_prof_polyfill"];
const script = `(function(module, require) {
${polyfill}
})`;
vm.runInContext(script, context)(module, require);
const tickProcessor = natives["internal/deps/v8/tools/tickprocessor-driver"];
const tickprocessorDriver = new SourceTextModule(tickProcessor, { context });
await tickprocessorDriver.link(linker);
await tickprocessorDriver.evaluate();
})();