[bun.js] Implement import.meta.require

This allows synchronous dynamic loading of `.node`, `.json`, and `.toml` files.

It is not a CommonJS require, but it can be used that way so long as the content is not JavaScript.
This commit is contained in:
Jarred Sumner
2022-05-11 00:56:35 -07:00
parent fd00950852
commit 3c87fbfd37
13 changed files with 538 additions and 157 deletions

View File

@@ -1173,7 +1173,7 @@ JSC::JSObject* GlobalObject::moduleLoaderCreateImportMetaProperties(JSGlobalObje
auto index = view.reverseFind('/', view.length());
if (index != WTF::notFound) {
metaProperties->putDirect(vm, clientData->builtinNames().dirPublicName(),
JSC::jsSubstring(globalObject, keyString, 0, index));
JSC::jsSubstring(globalObject, keyString, 0, index + 1));
metaProperties->putDirect(
vm, clientData->builtinNames().filePublicName(),
JSC::jsSubstring(globalObject, keyString, index + 1, keyString->length() - index - 1));
@@ -1191,6 +1191,9 @@ JSC::JSObject* GlobalObject::moduleLoaderCreateImportMetaProperties(JSGlobalObje
WTF::String("resolveSync"_s), functionImportMeta__resolveSync),
JSC::PropertyAttribute::Function | 0);
metaProperties->putDirectBuiltinFunction(vm, globalObject, clientData->builtinNames().requirePublicName(),
jsZigGlobalObjectRequireCodeGenerator(vm),
JSC::PropertyAttribute::Builtin | 0);
}
metaProperties->putDirect(vm, clientData->builtinNames().pathPublicName(), key);