From ff635551436123022ba3980b39580d53973c80a2 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sat, 24 Jun 2023 06:02:16 -0700 Subject: Rewrite Bun's runtime CommonJS loader (#3379) * wip changes for CommonJS * this rewrite is almost complete * even more code * wip * Remove usages of `import.meta.require` from builtins * Remove usages of require * Regenerate * :scissors: builtin rewrite commonjs in printer * Use lazy custom getters for import.meta * fixups * Remove depd * ugh * still crashing * fixup undici * comment out import.meta.require.resolve temporarily not a real solution but it stops the crashes * Redo import.meta.primordials * Builtins now have a `builtin://` protocol in source origin * Seems to work? * Finsih getting rid of primordials * switcharoo * No more function * just one more bug * Update launch.json * Implement `require.main` * :scissors: * Bump WebKit * Fixup import cycles * Fixup improt cycles * export more things * Implement `createCommonJSModule` builtin * More exports * regenerate * i broke some stuff * some of these tests work now * We lost the encoding * Sort of fix zlib * Sort of fix util * Update events.js * bump * bump * bump * Fix missing export in fs * fix some bugs with builtin esm modules (stream, worker_threads, events). its not perfect yet. * fix some other internal module bugs * oops * fix some extra require default stuff * uncomment this file but it crsahes on my machine * tidy code here * fixup tls exports * make simdutf happier * Add hasPrefix binding * Add test for `require.main` * Fix CommonJS evaluation order race condition * Make node:http load faster * Add missing exports to tls.js * Use the getter * Regenerate builtins * Fix assertion failure in Bun.write() * revamp dotEnv parser (#3347) - fixes `strings.indexOfAny()` - fixes OOB array access fixes #411 fixes #2823 fixes #3042 * fix tests for `expect()` (#3384) - extend test job time-out for `darwin-aarch64` * `expect().resolves` and `expect().rejects` (#3318) * Move expect and snapshots to their own files * expect().resolves and expect().rejects * Fix promise being added to unhandled rejection list * Handle timeouts in expect() * wip merge * Fix merge issue --------- Co-authored-by: Jarred Sumner Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> * fixup min/memcopy (#3388) * Fix crash in builtins * Don't attempt to evaluate modules with no source code * Update WebCoreJSBuiltins.cpp * Update WebCoreJSBuiltins.cpp * Update WebCoreJSBuiltins.cpp * Fix crash * cleanup * Fix test cc @paperdave * Fixup Undici * Fix issue in node:http * Create util-deprecate.mjs * Fix several bugs * Use the identifier * Support error.code in `util.deprecate` * make the CJs loader slightly more resilient * Update WebCoreJSBuiltins.cpp * Fix macros --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Co-authored-by: dave caruso Co-authored-by: Alex Lam S.L Co-authored-by: Ashcon Partovi Co-authored-by: Ciro Spaciari --- src/js/thirdparty/undici.js | 76 ++++++++++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 25 deletions(-) (limited to 'src/js/thirdparty/undici.js') diff --git a/src/js/thirdparty/undici.js b/src/js/thirdparty/undici.js index cf3968b58..579e33d1d 100644 --- a/src/js/thirdparty/undici.js +++ b/src/js/thirdparty/undici.js @@ -1,27 +1,27 @@ -// const { Object } = import.meta.primordials; -const { EventEmitter } = import.meta.require("events"); -const { - Readable, - [Symbol.for("::bunternal::")]: { _ReadableFromWeb }, -} = import.meta.require("node:stream"); +const { Object } = globalThis[Symbol.for("Bun.lazy")]("primordials"); +import { EventEmitter } from "events"; +import NodeStreamModule from "node:stream"; +import { Readable } from "node:stream"; + +const { _ReadableFromWebForUndici: ReadableFromWeb } = NodeStreamModule[Symbol.for("::bunternal::")]; const ObjectCreate = Object.create; const kEmptyObject = ObjectCreate(null); -export var fetch = Bun.fetch; -export var Response = globalThis.Response; -export var Headers = globalThis.Headers; -export var Request = globalThis.Request; -export var URLSearchParams = globalThis.URLSearchParams; -export var URL = globalThis.URL; -export class File extends Blob {} -export class FileReader extends EventTarget { +var fetch = Bun.fetch; +var Response = globalThis.Response; +var Headers = globalThis.Headers; +var Request = globalThis.Request; +var URLSearchParams = globalThis.URLSearchParams; +var URL = globalThis.URL; +class File extends Blob {} +class FileReader extends EventTarget { constructor() { throw new Error("Not implemented yet!"); } } -export var FormData = globalThis.FormData; +var FormData = globalThis.FormData; function notImplemented() { throw new Error("Not implemented in bun"); } @@ -45,7 +45,7 @@ function notImplemented() { * @typedef {import('events').EventEmitter} EventEmitter */ -class BodyReadable extends _ReadableFromWeb { +class BodyReadable extends ReadableFromWeb { #response; #bodyUsed; @@ -127,7 +127,7 @@ class BodyReadable extends _ReadableFromWeb { * context: Object; * }} */ -export async function request( +async function request( url, options = { method: "GET", @@ -228,36 +228,36 @@ export async function request( return { statusCode, headers: headers.toJSON(), body, trailers, opaque: kEmptyObject, context: kEmptyObject }; } -export function stream() { +function stream() { throw new Error("Not implemented in bun"); } -export function pipeline() { +function pipeline() { throw new Error("Not implemented in bun"); } -export function connect() { +function connect() { throw new Error("Not implemented in bun"); } -export function upgrade() { +function upgrade() { throw new Error("Not implemented in bun"); } -export class MockClient { +class MockClient { constructor() { throw new Error("Not implemented in bun"); } } -export class MockPool { +class MockPool { constructor() { throw new Error("Not implemented in bun"); } } -export class MockAgent { +class MockAgent { constructor() { throw new Error("Not implemented in bun"); } } -export function mockErrors() { +function mockErrors() { throw new Error("Not implemented in bun"); } @@ -329,3 +329,29 @@ export default { Undici, [Symbol.for("CommonJS")]: 0, }; + +export { + fetch, + Response, + Headers, + Request, + URLSearchParams, + URL, + File, + FileReader, + FormData, + request, + stream, + pipeline, + connect, + upgrade, + MockClient, + MockPool, + MockAgent, + mockErrors, + Dispatcher, + Pool, + BalancedPool, + Client, + Agent, +}; -- cgit v1.2.3