Files
bun.sh/src/bun.js/modules/TTYModule.h
Jarred Sumner ff63555143 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

* ✂️ 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`

* ✂️

* 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(<promise>)

* wip merge

* Fix merge issue

---------

Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
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 <me@paperdave.net>
Co-authored-by: Alex Lam S.L <alexlamsl@gmail.com>
Co-authored-by: Ashcon Partovi <ashcon@partovi.net>
Co-authored-by: Ciro Spaciari <ciro.spaciari@gmail.com>
2023-06-24 06:02:16 -07:00

82 lines
2.9 KiB
C++

#include "../bindings/JSBuffer.h"
#include "../bindings/ZigGlobalObject.h"
#include "JavaScriptCore/JSGlobalObject.h"
#include "JavaScriptCore/ObjectConstructor.h"
namespace Zig {
using namespace WebCore;
JSC_DEFINE_HOST_FUNCTION(jsFunctionTty_isatty, (JSGlobalObject * globalObject,
CallFrame *callFrame)) {
VM &vm = globalObject->vm();
if (callFrame->argumentCount() < 1) {
return JSValue::encode(jsBoolean(false));
}
auto scope = DECLARE_CATCH_SCOPE(vm);
int fd = callFrame->argument(0).toInt32(globalObject);
RETURN_IF_EXCEPTION(scope, encodedJSValue());
return JSValue::encode(jsBoolean(isatty(fd)));
}
JSC_DEFINE_HOST_FUNCTION(jsFunctionNotImplementedYet,
(JSGlobalObject * globalObject,
CallFrame *callFrame)) {
VM &vm = globalObject->vm();
auto throwScope = DECLARE_THROW_SCOPE(vm);
throwException(globalObject, throwScope,
createError(globalObject, "Not implemented yet"_s));
return JSValue::encode(jsUndefined());
}
inline void generateTTYSourceCode(JSC::JSGlobalObject *lexicalGlobalObject,
JSC::Identifier moduleKey,
Vector<JSC::Identifier, 4> &exportNames,
JSC::MarkedArgumentBuffer &exportValues) {
JSC::VM &vm = lexicalGlobalObject->vm();
GlobalObject *globalObject =
reinterpret_cast<GlobalObject *>(lexicalGlobalObject);
auto *tty = JSC::constructEmptyObject(globalObject,
globalObject->objectPrototype(), 3);
auto *isattyFunction =
JSFunction::create(vm, globalObject, 1, "isatty"_s, jsFunctionTty_isatty,
ImplementationVisibility::Public);
auto *notimpl = JSFunction::create(vm, globalObject, 0, "notimpl"_s,
jsFunctionNotImplementedYet,
ImplementationVisibility::Public,
NoIntrinsic, jsFunctionNotImplementedYet);
exportNames.append(JSC::Identifier::fromString(vm, "isatty"_s));
exportValues.append(isattyFunction);
exportNames.append(JSC::Identifier::fromString(vm, "ReadStream"_s));
tty->putDirect(vm, JSC::Identifier::fromString(vm, "ReadStream"_s), notimpl);
exportValues.append(notimpl);
exportNames.append(JSC::Identifier::fromString(vm, "WriteStream"_s));
tty->putDirect(vm, JSC::Identifier::fromString(vm, "WriteStream"_s), notimpl);
exportValues.append(notimpl);
for (size_t i = 0; i < exportNames.size(); i++) {
tty->putDirect(vm, exportNames[i], exportValues.at(i), 0);
}
exportNames.append(vm.propertyNames->defaultKeyword);
exportValues.append(tty);
auto CommonJS =
Identifier::fromUid(vm.symbolRegistry().symbolForKey("CommonJS"_s));
exportNames.append(CommonJS);
exportValues.append(jsNumber(0));
tty->putDirect(vm, PropertyName(CommonJS), jsNumber(0), 0);
}
} // namespace Zig