#include "root.h" #include "./NodeModuleModule.h" #include "ImportMetaObject.h" #include "JavaScriptCore/JSBoundFunction.h" #include "JavaScriptCore/ObjectConstructor.h" using namespace Zig; using namespace JSC; JSC_DEFINE_HOST_FUNCTION(jsFunctionNodeModuleCreateRequire, (JSC::JSGlobalObject * globalObject, JSC::CallFrame *callFrame)) { JSC::VM &vm = globalObject->vm(); auto scope = DECLARE_THROW_SCOPE(vm); if (callFrame->argumentCount() < 1) { throwTypeError(globalObject, scope, "createRequire() requires at least one argument"_s); return JSC::JSValue::encode(JSC::jsUndefined()); } auto str = callFrame->uncheckedArgument(0).toStringOrNull(globalObject); RETURN_IF_EXCEPTION(scope, JSC::JSValue::encode(JSC::jsUndefined())); WTF::String val = str->value(globalObject); auto *meta = Zig::ImportMetaObject::create(globalObject, str); auto clientData = WebCore::clientData(vm); auto requireFunction = Zig::ImportMetaObject::createRequireFunction(vm, globalObject, val); auto nameStr = jsCast(requireFunction)->name(vm); JSC::JSBoundFunction *boundRequireFunction = JSC::JSBoundFunction::create(vm, globalObject, requireFunction, meta, ArgList(), 0, jsString(vm, nameStr)); boundRequireFunction->putDirect( vm, clientData->builtinNames().resolvePublicName(), requireFunction->getDirect( vm, clientData->builtinNames().resolvePublicName()), 0); RELEASE_AND_RETURN(scope, JSValue::encode(boundRequireFunction)); } JSC_DEFINE_HOST_FUNCTION(jsFunctionNodeModulePaths, (JSC::JSGlobalObject * globalObject, JSC::CallFrame *callFrame)) { return JSC::JSValue::encode(JSC::JSArray::create( globalObject->vm(), globalObject->arrayStructureForIndexingTypeDuringAllocation( ArrayWithContiguous), 0)); } JSC_DEFINE_HOST_FUNCTION(jsFunctionFindSourceMap, (JSGlobalObject * globalObject, CallFrame *callFrame)) { auto &vm = globalObject->vm(); auto scope = DECLARE_THROW_SCOPE(vm); throwException(globalObject, scope, createError(globalObject, "Not implemented"_s)); return JSValue::encode(jsUndefined()); } JSC_DEFINE_HOST_FUNCTION(jsFunctionSyncBuiltinExports, (JSGlobalObject * globalObject, CallFrame *callFrame)) { return JSValue::encode(jsUndefined()); } JSC_DEFINE_HOST_FUNCTION(jsFunctionSourceMap, (JSGlobalObject * globalObject, CallFrame *callFrame)) { auto &vm = globalObject->vm(); auto scope = DECLARE_THROW_SCOPE(vm); throwException(globalObject, scope, createError(globalObject, "Not implemented"_s)); return JSValue::encode(jsUndefined()); } JSC_DEFINE_HOST_FUNCTION(jsFunctionResolveFileName, (JSC::JSGlobalObject * globalObject, JSC::CallFrame *callFrame)) { JSC::VM &vm = globalObject->vm(); switch (callFrame->argumentCount()) { case 0: { auto scope = DECLARE_THROW_SCOPE(globalObject->vm()); // not "requires" because "require" could be confusing JSC::throwTypeError( globalObject, scope, "Module._resolveFileName needs 2+ arguments (a string)"_s); scope.release(); return JSC::JSValue::encode(JSC::JSValue{}); } default: { JSC::JSValue moduleName = callFrame->argument(0); if (moduleName.isUndefinedOrNull()) { auto scope = DECLARE_THROW_SCOPE(globalObject->vm()); JSC::throwTypeError(globalObject, scope, "Module._resolveFileName expects a string"_s); scope.release(); return JSC::JSValue::encode(JSC::JSValue{}); } auto result = Bun__resolveSync(globalObject, JSC::JSValue::encode(moduleName), JSValue::encode(callFrame->argument(1)), false); auto scope = DECLARE_THROW_SCOPE(globalObject->vm()); if (!JSC::JSValue::decode(result).isString()) { JSC::throwException(globalObject, scope, JSC::JSValue::decode(result)); return JSC::JSValue::encode(JSC::JSValue{}); } scope.release(); return result; } } } namespace Zig { void generateNodeModuleModule(JSC::JSGlobalObject *globalObject, JSC::Identifier moduleKey, Vector &exportNames, JSC::MarkedArgumentBuffer &exportValues) { JSC::VM &vm = globalObject->vm(); exportValues.append(JSFunction::create( vm, globalObject, 1, String("createRequire"_s), jsFunctionNodeModuleCreateRequire, ImplementationVisibility::Public)); exportValues.append(JSFunction::create(vm, globalObject, 1, String("paths"_s), jsFunctionNodeModulePaths, ImplementationVisibility::Public)); exportValues.append(JSFunction::create( vm, globalObject, 1, String("findSourceMap"_s), jsFunctionFindSourceMap, ImplementationVisibility::Public)); exportValues.append(JSFunction::create( vm, globalObject, 0, String("syncBuiltinExports"_s), jsFunctionSyncBuiltinExports, ImplementationVisibility::Public)); exportValues.append( JSFunction::create(vm, globalObject, 1, String("SourceMap"_s), jsFunctionSourceMap, ImplementationVisibility::Public, NoIntrinsic, jsFunctionSourceMap, nullptr)); exportNames.append(JSC::Identifier::fromString(vm, "createRequire"_s)); exportNames.append(JSC::Identifier::fromString(vm, "paths"_s)); exportNames.append(JSC::Identifier::fromString(vm, "findSourceMap"_s)); exportNames.append(JSC::Identifier::fromString(vm, "syncBuiltinExports"_s)); exportNames.append(JSC::Identifier::fromString(vm, "SourceMap"_s)); // note: this is not technically correct // it doesn't set process.mainModule exportNames.append(JSC::Identifier::fromString(vm, "_resolveFileName"_s)); exportValues.append(JSFunction::create( vm, globalObject, 3, String("_resolveFileName"_s), jsFunctionResolveFileName, ImplementationVisibility::Public)); exportNames.append(JSC::Identifier::fromString(vm, "_nodeModulePaths"_s)); exportValues.append(JSFunction::create( vm, globalObject, 0, String("_nodeModulePaths"_s), jsFunctionNodeModulePaths, ImplementationVisibility::Public)); exportNames.append(JSC::Identifier::fromString(vm, "_cache"_s)); exportValues.append(JSC::constructEmptyObject(globalObject)); exportNames.append(JSC::Identifier::fromString(vm, "builtinModules"_s)); exportNames.append(JSC::Identifier::fromString(vm, "globalPaths"_s)); exportValues.append(JSC::constructEmptyArray(globalObject, 0)); JSC::JSArray *builtinModules = JSC::JSArray::create( vm, globalObject->arrayStructureForIndexingTypeDuringAllocation( ArrayWithContiguous), 7); builtinModules->putDirectIndex(globalObject, 0, JSC::jsString(vm, String("node:assert"_s))); builtinModules->putDirectIndex(globalObject, 1, JSC::jsString(vm, String("node:buffer"_s))); builtinModules->putDirectIndex(globalObject, 2, JSC::jsString(vm, String("node:events"_s))); builtinModules->putDirectIndex(globalObject, 3, JSC::jsString(vm, String("node:util"_s))); builtinModules->putDirectIndex(globalObject, 4, JSC::jsString(vm, String("node:path"_s))); builtinModules->putDirectIndex(globalObject, 5, JSC::jsString(vm, String("bun:ffi"_s))); builtinModules->putDirectIndex(globalObject, 6, JSC::jsString(vm, String("bun:sqlite"_s))); exportValues.append(builtinModules); } } // namespace Zig arred/gen Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
AgeCommit message (Expand)AuthorFilesLines
2021-10-24[internal] more inliningGravatar Jarred Sumner 1-2/+2
2021-10-24[internal] :scissors: dead codeGravatar Jarred Sumner 1-1/+0
2021-10-24[internal] some inliningGravatar Jarred Sumner 1-21/+25
2021-10-24[internal] :snowflake::snowman:Gravatar Jarred Sumner 1-1/+19
2021-10-24[.env loader] Tests passGravatar Jarred Sumner 1-25/+50
2021-10-23Comment out WASM test since WASM is currently unsupportedGravatar Jarred Sumner 1-20/+21
2021-10-23Remove very outdated testsGravatar Jarred Sumner 1-128/+23
2021-10-23Remove unused feature flag `parallel_bun`Gravatar Jarred Sumner 1-62/+33
2021-10-23Add flag for dumping the environment variablesGravatar Jarred Sumner 1-8/+19
2021-10-23[internal] Add easier commands for running unit testsGravatar Jarred Sumner 2-12/+129
2021-10-23Handle edgecase when returning errorsGravatar Jarred Sumner 1-1/+1
2021-10-23Fix bug with MutableString.ensureValidIdentifierGravatar Jarred Sumner 2-12/+17
2021-10-23[internal] Remove more dead code, add script to find .zig files that aren't i...Gravatar Jarred Sumner 15-82/+17
2021-10-23No more iguanaTLSGravatar Jarred Sumner 1-5/+0
2021-10-23[internal] :scissors: dead codeGravatar Jarred Sumner 32-7971/+0
2021-10-23Load environment variables into defines when possibleGravatar Jarred Sumner 1-0/+8
2021-10-23[Bundler] When modules fail to resolve, continue building so that you can see...Gravatar Jarred Sumner 1-29/+111
2021-10-23[JS Parser] Parser errors should _always_ report an error locationGravatar Jarred Sumner 2-3/+11
2021-10-23Support string-only definesGravatar Jarred Sumner 1-53/+65
2021-10-23[`.env` loader] Parse values as JavaScript string literals instead of JSONGravatar Jarred Sumner 1-52/+170
2021-10-23Add "process.env" to global objectGravatar Jarred Sumner 4-18/+36
2021-10-23Rewrite the CodepointIterator to fix some bugsGravatar Jarred Sumner 1-81/+89
2021-10-23[Lexer] Improve lexing performance by 2% via a bitfield for checking identifi...Gravatar Jarred Sumner 3-2317/+7178
2021-10-23[Bun.js] Escape unicode identifiers. This is necessary because we load source...Gravatar Jarred Sumner 1-18/+81
2021-10-23[Bun.js] Add `Bun.env` and support `process.env` for non-transpiled environme...Gravatar Jarred Sumner 1-2/+129
2021-10-21[lexer] `0x200C` and `0x200D` are valid ID_Continue charactersGravatar Jarred Sumner 1-6/+29
2021-10-21Split tests into separate .json fileGravatar Jarred Sumner 1-22/+1