aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/modules/TTYModule.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/modules/TTYModule.h')
-rw-r--r--src/bun.js/modules/TTYModule.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/bun.js/modules/TTYModule.h b/src/bun.js/modules/TTYModule.h
new file mode 100644
index 000000000..fcc65b235
--- /dev/null
+++ b/src/bun.js/modules/TTYModule.h
@@ -0,0 +1,69 @@
+#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);
+
+ exportNames.append(vm.propertyNames->defaultKeyword);
+ exportValues.append(tty);
+}
+
+} // namespace Zig