mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
Automatically install npm packages when running a script in Bun's runtime (#1459)
* Update bundler.zig * WIP * Update README.md * Update README.md * wip * Support running scripts without package.json * Add `--no-auto-install` and `--prefer-offline` flags * WIP * wip * Update headers-handwritten.h * WIP * Build fixes * Fix UAF * Update install.zig * Must call .allocate() * Micro-optimization: only call .timestamp() once per tick when installing packages * Support progress bar * Extend the timestamp for package staleness checks to 1 day * Add `--prefer-latest`, `-i` CLI Flags * Fix crash * Support line text manually being set on an Error instance * Add a few more fields for error messages * Fix bug when counting 8 character strings in string builder * Implement error handling for automatic package installs! * Fix crash * Make it say module when there's a slash * Update module_loader.zig * Ban dependency versions in import specifiers when a package.json is present * Remove unused field * Update README.md * Update README.md * Update README.md * Update README.md Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
This commit is contained in:
@@ -325,6 +325,29 @@ static JSValue handleVirtualModuleResult(
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void Bun__onFulfillAsyncModule(
|
||||
EncodedJSValue promiseValue,
|
||||
ErrorableResolvedSource* res,
|
||||
ZigString* specifier,
|
||||
ZigString* referrer)
|
||||
{
|
||||
JSC::JSValue value = JSValue::decode(promiseValue);
|
||||
JSC::JSInternalPromise* promise = jsCast<JSC::JSInternalPromise*>(value);
|
||||
auto* globalObject = promise->globalObject();
|
||||
auto& vm = globalObject->vm();
|
||||
auto scope = DECLARE_THROW_SCOPE(vm);
|
||||
|
||||
if (!res->success) {
|
||||
throwException(scope, res->result.err, globalObject);
|
||||
auto* exception = scope.exception();
|
||||
scope.clearException();
|
||||
return promise->reject(promise->globalObject(), exception);
|
||||
}
|
||||
|
||||
auto provider = Zig::SourceProvider::create(res->result.value);
|
||||
promise->resolve(promise->globalObject(), JSC::JSSourceCode::create(vm, JSC::SourceCode(provider)));
|
||||
}
|
||||
|
||||
template<bool allowPromise>
|
||||
static JSValue fetchSourceCode(
|
||||
Zig::GlobalObject* globalObject,
|
||||
@@ -435,7 +458,15 @@ static JSValue fetchSourceCode(
|
||||
return handleVirtualModuleResult<allowPromise>(globalObject, virtualModuleResult, res, specifier, referrer);
|
||||
}
|
||||
|
||||
Bun__transpileFile(bunVM, globalObject, specifier, referrer, res);
|
||||
if constexpr (allowPromise) {
|
||||
void* pendingCtx = Bun__transpileFile(bunVM, globalObject, specifier, referrer, res, true);
|
||||
if (pendingCtx) {
|
||||
return reinterpret_cast<JSC::JSInternalPromise*>(pendingCtx);
|
||||
}
|
||||
} else {
|
||||
Bun__transpileFile(bunVM, globalObject, specifier, referrer, res, false);
|
||||
}
|
||||
|
||||
if (!res->success) {
|
||||
throwException(scope, res->result.err, globalObject);
|
||||
auto* exception = scope.exception();
|
||||
|
||||
Reference in New Issue
Block a user