Commit graph

14 commits

Author SHA1 Message Date
Nathan Whitaker
03651c773f
feat(bundle): add watch mode to bundle (#29795)
Reuses the same esbuild subprocess, and triggers rebuilds on file
changes. Esbuild will reuse parsed sources that are unchanged, so
subsequent builds are faster than the initial one
2025-06-18 08:35:12 -07:00
Bartek Iwańczuk
27ea4ef930
refactor(bundle): split up into several helper functions (#29771) 2025-06-16 18:12:47 -07:00
Nathan Whitaker
bf6292b170
fix(bundle): improve error handling and reporting (#29744)
We were effectively ignoring our diagnostics, and instead falling back
to esbuild (and then displaying the esbuild diagnostics). That was
mostly for simplicity and so we would fall back to esbuild handling
unsupported things (for instance css imports).

This does a small refactor on the module loader to give us an API that
doesn't have to adhere to the deno_core ModuleLoader API. That lets us
return and handle errors more concretely, instead of having indirection
and downcasting.

Now, we only ignore our errors about being unable to load unsupport file
types, and the rest we handle ourselves.

I've also aligned the formatting of esbuild errors with ours, so it
should be more uniform. A few examples (dbgdeno is just an alias for the
debug build of this PR):


![Screenshot 2025-06-13 at 5 17
53 PM](https://github.com/user-attachments/assets/e9595d4a-295a-4a10-98c7-0cb169477d24)
2025-06-16 14:11:14 -07:00
David Sherret
c064b6d594
fix: import.meta.resolve - do not error for non-existent files in npm packages (#29741)
Some checks are pending
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / build libs (push) Blocked by required conditions
ci / pre-build (push) Waiting to run
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / publish canary (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test release windows-x86_64 (push) Blocked by required conditions
This further improves `import.meta.resolve` to not error in many more
scenarios (better alignment with Node).

1. Non-existent files in npm packages
1. Non-existent built-in node modules (ex. `node:non-existent`)
1. Many things that were previously errors with byonm.
1. No longer surfaces some deno_graph resolution errors

Additionally, this defers resolving npm specifiers until loading for
dynamic imports in order to have `prepare_load` properly install them
loading. Before it could potentially error when loading the same npm
specifier on multiple workers (reason for flaky
`specs::npm::worker_shutdown_during_npm_import`).
2025-06-16 12:03:12 +02:00
David Sherret
3d5ff3cf1c
fix(npm): support resolving npm specifiers not in graph with import.meta.resolve for resolved packages (#29732) 2025-06-13 09:23:19 -04:00
Nathan Whitaker
f80075c3ff
feat(bundle): add --sourcemap flag (#29735)
Closes #29649.

---------

Co-authored-by: Yoshiya Hinosawa <stibium121@gmail.com>
2025-06-13 02:55:07 +00:00
Nathan Whitaker
be2bb7d5fb
feat(bundle): add --platform flag to bundle (#29697)
Closes #29650.

Currently passing `--platform=browser` does two things:
- makes us prefer the `"browser"` key in package json over module and
main
- makes us prefer the `"browser"` export condition 
but we may add more things in the future
2025-06-12 20:28:54 -04:00
Nathan Whitaker
09f4118529
fix(bundle): enable sloppy imports by default when bundling (#29731)
It's more permissive, aligns more with typical bundler behavior, and
runtime perf is not as much of a concern
2025-06-12 21:43:13 +00:00
Bartek Iwańczuk
b64d4cb125
fix(bundle): don't panic on broken pipe (#29706)
`deno bundle main.js | less` and then `Ctrl + C` caused
a panic because of `Broken pipe` error.
2025-06-11 19:05:28 +00:00
David Sherret
56ce3352d2
fix(unstable): rename "patch" property to "links" (#29677)
This is to help make this feature less ambiguous with `npm patch`, which
it's not like.

Note: the "patch" property will continue to work for the time being, but
the lockfile will have a bit of churn for this unstable property. We're
going to merge this in a patch because this feature is unstable.
2025-06-10 21:51:23 +00:00
Nathan Whitaker
4438f8762f
fix(bundle): rework how patterns for externals are handled (#29680)
Now aligns with esbuild's behavior
2025-06-10 16:58:55 +00:00
Nathan Whitaker
1f579ba89e
fix(bundle): pass requested module type to load (#29683)
Some checks are pending
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / test release windows-x86_64 (push) Blocked by required conditions
ci / pre-build (push) Waiting to run
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / build wasm32 (push) Blocked by required conditions
ci / publish canary (push) Blocked by required conditions
Fixes #29663.
2025-06-10 15:44:32 +00:00
Nathan Whitaker
64a95cb5fb
fix(bundle): fix handling of multiple entrypoints (#29651)
Fixes #29648.
2025-06-09 20:15:13 +00:00
Nathan Whitaker
7a837f9fdb
feat(bundle, unstable): bundling backed by esbuild (#29470)
Some checks are pending
ci / pre-build (push) Waiting to run
ci / test debug linux-aarch64 (push) Blocked by required conditions
ci / test release linux-aarch64 (push) Blocked by required conditions
ci / test debug macos-aarch64 (push) Blocked by required conditions
ci / test release macos-aarch64 (push) Blocked by required conditions
ci / bench release linux-x86_64 (push) Blocked by required conditions
ci / lint debug linux-x86_64 (push) Blocked by required conditions
ci / lint debug macos-x86_64 (push) Blocked by required conditions
ci / lint debug windows-x86_64 (push) Blocked by required conditions
ci / test debug linux-x86_64 (push) Blocked by required conditions
ci / test release linux-x86_64 (push) Blocked by required conditions
ci / test debug macos-x86_64 (push) Blocked by required conditions
ci / test release macos-x86_64 (push) Blocked by required conditions
ci / test debug windows-x86_64 (push) Blocked by required conditions
ci / test release windows-x86_64 (push) Blocked by required conditions
ci / build wasm32 (push) Blocked by required conditions
ci / publish canary (push) Blocked by required conditions
todo:
- [ ] cleanup cli, decide what flags we want to commit to
- [x] decide what to do about node addons - (you can mark them external
via `--external`)
- [x] move `esbuild_rs` to the `denoland` org
- [x] figure out the dynamic require issue
- [x] figure out how to test this
- [x] clean up / revert all the random changes
2025-06-07 21:20:10 +02:00