1
0
mirror of https://github.com/alecthomas/chroma.git synced 2025-11-27 22:38:42 +02:00
Files
chroma/go.mod

12 lines
230 B
Modula-2
Raw Permalink Normal View History

Version 2 of Chroma This cleans up the API in general, removing a bunch of deprecated stuff, cleaning up circular imports, etc. But the biggest change is switching to an optional XML format for the regex lexer. Having lexers defined only in Go is not ideal for a couple of reasons. Firstly, it impedes a significant portion of contributors who use Chroma in Hugo, but don't know Go. Secondly, it bloats the binary size of any project that imports Chroma. Why XML? YAML is an abomination and JSON is not human editable. XML also compresses very well (eg. Go template lexer XML compresses from 3239 bytes to 718). Why a new syntax format? All major existing formats rely on the Oniguruma regex engine, which is extremely complex and for which there is no Go port. Why not earlier? Prior to the existence of fs.FS this was not a viable option. Benchmarks: $ hyperfine --warmup 3 \ './chroma.master --version' \ './chroma.xml-pre-opt --version' \ './chroma.xml --version' Benchmark 1: ./chroma.master --version Time (mean ± σ): 5.3 ms ± 0.5 ms [User: 3.6 ms, System: 1.4 ms] Range (min … max): 4.2 ms … 6.6 ms 233 runs Benchmark 2: ./chroma.xml-pre-opt --version Time (mean ± σ): 50.6 ms ± 0.5 ms [User: 52.4 ms, System: 3.6 ms] Range (min … max): 49.2 ms … 51.5 ms 51 runs Benchmark 3: ./chroma.xml --version Time (mean ± σ): 6.9 ms ± 1.1 ms [User: 5.1 ms, System: 1.5 ms] Range (min … max): 5.7 ms … 19.9 ms 196 runs Summary './chroma.master --version' ran 1.30 ± 0.23 times faster than './chroma.xml --version' 9.56 ± 0.83 times faster than './chroma.xml-pre-opt --version' A slight increase in init time, but I think this is okay given the increase in flexibility. And binary size difference: $ du -h lexers.test* $ du -sh chroma* 951371ms 8.8M chroma.master 7.8M chroma.xml 7.8M chroma.xml-pre-opt Benchmarks: $ hyperfine --warmup 3 \ './chroma.master --version' \ './chroma.xml-pre-opt --version' \ './chroma.xml --version' Benchmark 1: ./chroma.master --version Time (mean ± σ): 5.3 ms ± 0.5 ms [User: 3.6 ms, System: 1.4 ms] Range (min … max): 4.2 ms … 6.6 ms 233 runs Benchmark 2: ./chroma.xml-pre-opt --version Time (mean ± σ): 50.6 ms ± 0.5 ms [User: 52.4 ms, System: 3.6 ms] Range (min … max): 49.2 ms … 51.5 ms 51 runs Benchmark 3: ./chroma.xml --version Time (mean ± σ): 6.9 ms ± 1.1 ms [User: 5.1 ms, System: 1.5 ms] Range (min … max): 5.7 ms … 19.9 ms 196 runs Summary './chroma.master --version' ran 1.30 ± 0.23 times faster than './chroma.xml --version' 9.56 ± 0.83 times faster than './chroma.xml-pre-opt --version' Incompatible changes: - (*RegexLexer).SetAnalyser: changed from func(func(text string) float32) *RegexLexer to func(func(text string) float32) Lexer - (*TokenType).UnmarshalJSON: removed - Lexer.AnalyseText: added - Lexer.SetAnalyser: added - Lexer.SetRegistry: added - MustNewLazyLexer: removed - MustNewLexer: changed from func(*Config, Rules) *RegexLexer to func(*Config, func() Rules) *RegexLexer - Mutators: changed from func(...Mutator) MutatorFunc to func(...Mutator) Mutator - NewLazyLexer: removed - NewLexer: changed from func(*Config, Rules) (*RegexLexer, error) to func(*Config, func() Rules) (*RegexLexer, error) - Pop: changed from func(int) MutatorFunc to func(int) Mutator - Push: changed from func(...string) MutatorFunc to func(...string) Mutator - TokenType.MarshalJSON: removed - Using: changed from func(Lexer) Emitter to func(string) Emitter - UsingByGroup: changed from func(func(string) Lexer, int, int, ...Emitter) Emitter to func(int, int, ...Emitter) Emitter
2022-01-03 23:51:17 +11:00
module github.com/alecthomas/chroma/v2
2025-09-19 23:59:48 +10:00
go 1.23
require (
chore(deps): update all non-major dependencies (#997) This PR contains the following updates: | Package | Type | Update | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---|---|---| | [esbuild](https://redirect.github.com/evanw/esbuild) | | minor | `0.23.1` -> `0.24.0` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/esbuild/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/esbuild/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/esbuild/0.23.1/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/esbuild/0.23.1/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [github.com/alecthomas/assert/v2](https://redirect.github.com/alecthomas/assert) | require | minor | `v2.10.0` -> `v2.11.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2falecthomas%2fassert%2fv2/v2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2falecthomas%2fassert%2fv2/v2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2falecthomas%2fassert%2fv2/v2.10.0/v2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2falecthomas%2fassert%2fv2/v2.10.0/v2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [go](https://redirect.github.com/golang/go) | | patch | `1.23.0` -> `1.23.2` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/go/1.23.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/go/1.23.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/go/1.23.0/1.23.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/go/1.23.0/1.23.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>evanw/esbuild (esbuild)</summary> ### [`v0.24.0`](https://redirect.github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0240) [Compare Source](https://redirect.github.com/evanw/esbuild/compare/v0.23.1...v0.24.0) ***This release deliberately contains backwards-incompatible changes.*** To avoid automatically picking up releases like this, you should either be pinning the exact version of `esbuild` in your `package.json` file (recommended) or be using a version range syntax that only accepts patch upgrades such as `^0.23.0` or `~0.23.0`. See npm's documentation about [semver](https://docs.npmjs.com/cli/v6/using-npm/semver/) for more information. - Drop support for older platforms ([#&#8203;3902](https://redirect.github.com/evanw/esbuild/pull/3902)) This release drops support for the following operating system: - macOS 10.15 Catalina This is because the Go programming language dropped support for this operating system version in Go 1.23, and this release updates esbuild from Go 1.22 to Go 1.23. Go 1.23 now requires macOS 11 Big Sur or later. Note that this only affects the binary esbuild executables that are published to the esbuild npm package. It's still possible to compile esbuild's source code for these older operating systems. If you need to, you can compile esbuild for yourself using an older version of the Go compiler (before Go version 1.23). That might look something like this: git clone https://github.com/evanw/esbuild.git cd esbuild go build ./cmd/esbuild ./esbuild --version - Fix class field decorators in TypeScript if `useDefineForClassFields` is `false` ([#&#8203;3913](https://redirect.github.com/evanw/esbuild/issues/3913)) Setting the `useDefineForClassFields` flag to `false` in `tsconfig.json` means class fields use the legacy TypeScript behavior instead of the standard JavaScript behavior. Specifically they use assign semantics instead of define semantics (e.g. setters are triggered) and fields without an initializer are not initialized at all. However, when this legacy behavior is combined with standard JavaScript decorators, TypeScript switches to always initializing all fields, even those without initializers. Previously esbuild incorrectly continued to omit field initializers for this edge case. These field initializers in this case should now be emitted starting with this release. - Avoid incorrect cycle warning with `tsconfig.json` multiple inheritance ([#&#8203;3898](https://redirect.github.com/evanw/esbuild/issues/3898)) TypeScript 5.0 introduced multiple inheritance for `tsconfig.json` files where `extends` can be an array of file paths. Previously esbuild would incorrectly treat files encountered more than once when processing separate subtrees of the multiple inheritance hierarchy as an inheritance cycle. With this release, `tsconfig.json` files containing this edge case should work correctly without generating a warning. - Handle Yarn Plug'n'Play stack overflow with `tsconfig.json` ([#&#8203;3915](https://redirect.github.com/evanw/esbuild/issues/3915)) Previously a `tsconfig.json` file that `extends` another file in a package with an `exports` map could cause a stack overflow when Yarn's Plug'n'Play resolution was active. This edge case should work now starting with this release. - Work around more issues with Deno 1.31+ ([#&#8203;3917](https://redirect.github.com/evanw/esbuild/pull/3917)) This version of Deno broke the `stdin` and `stdout` properties on command objects for inherited streams, which matters when you run esbuild's Deno module as the entry point (i.e. when `import.meta.main` is `true`). Previously esbuild would crash in Deno 1.31+ if you ran esbuild like that. This should be fixed starting with this release. This fix was contributed by [@&#8203;Joshix-1](https://redirect.github.com/Joshix-1). </details> <details> <summary>alecthomas/assert (github.com/alecthomas/assert/v2)</summary> ### [`v2.11.0`](https://redirect.github.com/alecthomas/assert/compare/v2.10.0...v2.11.0) [Compare Source](https://redirect.github.com/alecthomas/assert/compare/v2.10.0...v2.11.0) </details> <details> <summary>golang/go (go)</summary> ### [`v1.23.2`](https://redirect.github.com/golang/go/compare/go1.23.1...go1.23.2) [Compare Source](https://redirect.github.com/golang/go/compare/go1.23.1...go1.23.2) ### [`v1.23.1`](https://redirect.github.com/golang/go/compare/go1.23.0...go1.23.1) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/alecthomas/chroma). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC41OS4yIiwidXBkYXRlZEluVmVyIjoiMzguOTcuMCIsInRhcmdldEJyYW5jaCI6Im1hc3RlciIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-06 23:53:20 +11:00
github.com/alecthomas/assert/v2 v2.11.0
chore(deps): update all non-major dependencies (#1103) This PR contains the following updates: | Package | Type | Update | Change | Age | Confidence | |---|---|---|---|---|---| | alpine | final | minor | `3.19` -> `3.22` | [![age](https://developer.mend.io/api/mc/badges/age/docker/alpine/3.22?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/alpine/3.19/3.22?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [github.com/alecthomas/repr](https://redirect.github.com/alecthomas/repr) | require | minor | `v0.4.0` -> `v0.5.1` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2falecthomas%2frepr/v0.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2falecthomas%2frepr/v0.4.0/v0.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [uv](https://redirect.github.com/astral-sh/uv) | | minor | `0.7.19` -> `0.8.0` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/uv/0.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/uv/0.7.19/0.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>alecthomas/repr (github.com/alecthomas/repr)</summary> ### [`v0.5.1`](https://redirect.github.com/alecthomas/repr/compare/v0.5.0...v0.5.1) [Compare Source](https://redirect.github.com/alecthomas/repr/compare/v0.5.0...v0.5.1) ### [`v0.5.0`](https://redirect.github.com/alecthomas/repr/compare/v0.4.0...v0.5.0) [Compare Source](https://redirect.github.com/alecthomas/repr/compare/v0.4.0...v0.5.0) </details> <details> <summary>astral-sh/uv (uv)</summary> ### [`v0.8.0`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#080) [Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.7.21...0.8.0) Since we released uv [0.7.0](https://redirect.github.com/astral-sh/uv/releases/tag/0.5.0) in April, we've accumulated various changes that improve correctness and user experience, but could break some workflows. This release contains those changes; many have been marked as breaking out of an abundance of caution. We expect most users to be able to upgrade without making changes. This release also includes the stabilization of a couple `uv python install` features, which have been available under preview since late last year. ##### Breaking changes - **Install Python executables into a directory on the `PATH` ([#&#8203;14626](https://redirect.github.com/astral-sh/uv/pull/14626))** `uv python install` now installs a versioned Python executable (e.g., `python3.13`) into a directory on the `PATH` (e.g., `~/.local/bin`) by default. This behavior has been available under the `--preview` flag since [Oct 2024](https://redirect.github.com/astral-sh/uv/pull/8458). This change should not be breaking unless it shadows a Python executable elsewhere on the `PATH`. To install unversioned executables, i.e., `python3` and `python`, use the `--default` flag. The `--default` flag has also been in preview, but is not stabilized in this release. Note that these executables point to the base Python installation and only include the standard library. That means they will not include dependencies from your current project (use `uv run python` instead) and you cannot install packages into their environment (use `uvx --with <package> python` instead). As with tool installation, the target directory respects common variables like `XDG_BIN_HOME` and can be overridden with a `UV_PYTHON_BIN_DIR` variable. You can opt out of this behavior with `uv python install --no-bin` or `UV_PYTHON_INSTALL_BIN=0`. See the [documentation on installing Python executables](https://docs.astral.sh/uv/concepts/python-versions/#installing-python-executables) for more details. - **Register Python versions with the Windows registry ([#&#8203;14625](https://redirect.github.com/astral-sh/uv/pull/14625))** `uv python install` now registers the installed Python version with the Windows Registry as specified by [PEP 514](https://peps.python.org/pep-0514/). This allows using uv installed Python versions via the `py` launcher. This behavior has been available under the `--preview` flag since [Jan 2025](https://redirect.github.com/astral-sh/uv/pull/10634). This change should not be breaking, as using the uv Python versions with `py` requires explicit opt in. You can opt out of this behavior with `uv python install --no-registry` or `UV_PYTHON_INSTALL_REGISTRY=0`. - **Prompt before removing an existing directory in `uv venv` ([#&#8203;14309](https://redirect.github.com/astral-sh/uv/pull/14309))** Previously, `uv venv` would remove an existing virtual environment without confirmation. While this is consistent with the behavior of project commands (e.g., `uv sync`), it's surprising to users that are using imperative workflows (i.e., `uv pip`). Now, `uv venv` will prompt for confirmation before removing an existing virtual environment. **If not in an interactive context, uv will still remove the virtual environment for backwards compatibility. However, this behavior is likely to change in a future release.** The behavior for other commands (e.g., `uv sync`) is unchanged. You can opt out of this behavior by setting `UV_VENV_CLEAR=1` or passing the `--clear` flag. - **Validate that discovered interpreters meet the Python preference ([#&#8203;7934](https://redirect.github.com/astral-sh/uv/pull/7934))** uv allows opting out of its managed Python versions with the `--no-managed-python` and `python-preference` options. Previously, uv would not enforce this option for Python interpreters discovered on the `PATH`. For example, if a symlink to a managed Python interpreter was created, uv would allow it to be used even if `--no-managed-python` was provided. Now, uv ignores Python interpreters that do not match the Python preference *unless* they are in an active virtual environment or are explicitly requested, e.g., with `--python /path/to/python3.13`. Similarly, uv would previously not invalidate existing project environments if they did not match the Python preference. Now, uv will invalidate and recreate project environments when the Python preference changes. You can opt out of this behavior by providing the explicit path to the Python interpreter providing `--managed-python` / `--no-managed-python` matching the interpreter you want. - **Install dependencies without build systems when they are `path` sources ([#&#8203;14413](https://redirect.github.com/astral-sh/uv/pull/14413))** When working on a project, uv uses the [presence of a build system](https://docs.astral.sh/uv/concepts/projects/config/#build-systems) to determine if it should be built and installed into the environment. However, when a project is a dependency of another project, it can be surprising for the dependency to be missing from the environment. Previously, uv would not build and install dependencies with [`path` sources](https://docs.astral.sh/uv/concepts/projects/dependencies/#path) unless they declared a build system or set `tool.uv.package = true`. Now, dependencies with `path` sources are built and installed regardless of the presence of a build system. If a build system is not present, the `setuptools.build_meta:__legacy__ ` backend will be used (per [PEP 517](https://peps.python.org/pep-0517/#source-trees)). You can opt out of this behavior by setting `package = false` in the source declaration, e.g.: ```toml [tool.uv.sources] foo = { path = "./foo", package = false } ``` Or, by setting `tool.uv.package = false` in the dependent `pyproject.toml`. See the documentation on [virtual dependencies](https://docs.astral.sh/uv/concepts/projects/dependencies/#virtual-dependencies) for details. - **Install dependencies without build systems when they are workspace members ([#&#8203;14663](https://redirect.github.com/astral-sh/uv/pull/14663))** As described above for dependencies with `path` sources, uv previously would not build and install workspace members that did not declare a build system. Now, uv will build and install workspace members that are a dependency of *another* workspace member regardless of the presence of a build system. The behavior is unchanged for workspace members that are not included in the `project.dependencies`, `project.optional-dependencies`, or `dependency-groups` tables of another workspace member. You can opt out of this behavior by setting `tool.uv.package = false` in the workspace member's `pyproject.toml`. See the documentation on [virtual dependencies](https://docs.astral.sh/uv/concepts/projects/dependencies/#virtual-dependencies) for details. - **Bump `--python-platform linux` to `manylinux_2_28` ([#&#8203;14300](https://redirect.github.com/astral-sh/uv/pull/14300))** uv allows performing [platform-specific resolution](https://docs.astral.sh/uv/concepts/resolution/#platform-specific-resolution) for explicit targets and provides short aliases, e.g., `linux`, for common targets. Previously, the default target for `--python-platform linux` was `manylinux_2_17`, which is compatible with most Linux distributions from 2014 or newer. We now default to `manylinux_2_28`, which is compatible with most Linux distributions from 2019 or newer. This change follows the lead of other tools, such as `cibuildwheel`, which changed their default to `manylinux_2_28` in [Mar 2025](https://redirect.github.com/pypa/cibuildwheel/pull/2330). This change only affects users requesting a specific target platform. Otherwise, uv detects the `manylinux` target from your local glibc version. You can opt out of this behavior by using `--python-platform x86_64-manylinux_2_17` instead. - **Remove `uv version` fallback ([#&#8203;14161](https://redirect.github.com/astral-sh/uv/pull/14161))** In [Apr 2025](https://redirect.github.com/astral-sh/uv/pull/12349), uv changed the `uv version` command to an interface for viewing and updating the version of the current project. However, when outside a project, `uv version` would continue to display uv's version for backwards compatibility. Now, when used outside of a project, `uv version` will fail. You cannot opt out of this behavior. Use `uv self version` instead. - **Require `--global` for removal of the global Python pin ([#&#8203;14169](https://redirect.github.com/astral-sh/uv/pull/14169))** Previously, `uv python pin --rm` would allow you to remove the global Python pin without opt in. Now, uv requires the `--global` flag to remove the global Python pin. You cannot opt out of this behavior. Use the `--global` flag instead. - **Support conflicting editable settings across groups ([#&#8203;14197](https://redirect.github.com/astral-sh/uv/pull/14197))** Previously, uv would always treat a package as editable if any requirement requested it as editable. However, this prevented users from declaring `path` sources that toggled the `editable` setting across dependency groups. Now, uv allows declaring different `editable` values for conflicting groups. However, if a project includes a path dependency twice, once with `editable = true` and once without any editable annotation, those are now considered conflicting, and uv will exit with an error. You cannot opt out of this behavior. Use consistent `editable` settings or [mark groups as conflicting](https://docs.astral.sh/uv/concepts/projects/config/#conflicting-dependencies). - **Make `uv_build` the default build backend in `uv init` ([#&#8203;14661](https://redirect.github.com/astral-sh/uv/pull/14661))** The uv build backend (`uv_build`) was [stabilized in uv 0.7.19](https://redirect.github.com/astral-sh/uv/releases/tag/0.7.19). Now, it is the default build backend for `uv init --package` and `uv init --lib`. Previously, `hatchling` was the default build backend. A build backend is still not used without opt-in in `uv init`, but we expect to change this in a future release. You can opt out of this behavior with `uv init --build-backend hatchling`. - **Set default `UV_TOOL_BIN_DIR` on Docker images ([#&#8203;13391](https://redirect.github.com/astral-sh/uv/pull/13391))** Previously, `UV_TOOL_BIN_DIR` was not set in Docker images which meant that `uv tool install` did not install tools into a directory on the `PATH` without additional configuration. Now, `UV_TOOL_BIN_DIR` is set to `/usr/local/bin` in all Docker derived images. When the default image user is overridden (e.g. `USER <UID>`) with a less privileged user, this may cause `uv tool install` to fail. You can opt out of this behavior by setting an alternative `UV_TOOL_BIN_DIR`. - **Update `--check` to return an exit code of 1 ([#&#8203;14167](https://redirect.github.com/astral-sh/uv/pull/14167))** uv uses an exit code of 1 to indicate a "successful failure" and an exit code of 2 to indicate an "error". Previously, `uv lock --check` and `uv sync --check` would exit with a code of 2 when the lockfile or environment were outdated. Now, uv will exit with a code of 1. You cannot opt out of this behavior. - **Use an ephemeral environment for `uv run --with` invocations ([#&#8203;14447](https://redirect.github.com/astral-sh/uv/pull/14447))** When using `uv run --with`, uv layers the requirements requested using `--with` into another virtual environment and caches it. Previously, uv would invoke the Python interpreter in this layered environment. However, this allows poisoning the cached environment and introduces race conditions for concurrent invocations. Now, uv will layer *another* empty virtual environment on top of the cached environment and invoke the Python interpreter there. This should only cause breakage in cases where the environment is being inspected at runtime. You cannot opt out of this behavior. - **Restructure the `uv venv` command output and exit codes ([#&#8203;14546](https://redirect.github.com/astral-sh/uv/pull/14546))** Previously, uv used `miette` to format the `uv venv` output. However, this was inconsistent with most of the uv CLI. Now, the output is a little different and the exit code has switched from 1 to 2 for some error cases. You cannot opt out of this behavior. - **Default to `--workspace` when adding subdirectories ([#&#8203;14529](https://redirect.github.com/astral-sh/uv/pull/14529))** When using `uv add` to add a subdirectory in a workspace, uv now defaults to adding the target as a workspace member. You can opt out of this behavior by providing `--no-workspace`. - **Add missing validations for disallowed `uv.toml` fields ([#&#8203;14322](https://redirect.github.com/astral-sh/uv/pull/14322))** uv does not allow some settings in the `uv.toml`. Previously, some settings were silently ignored when present in the `uv.toml`. Now, uv will error. You cannot opt out of this behavior. Use `--no-config` or remove the invalid settings. ##### Configuration - Add support for toggling Python bin and registry install options via env vars ([#&#8203;14662](https://redirect.github.com/astral-sh/uv/pull/14662)) ### [`v0.7.21`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0721) [Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.7.20...0.7.21) ##### Python - Restore the SQLite `fts4`, `fts5`, `rtree`, and `geopoly` extensions on macOS and Linux See the [`python-build-standalone` release notes](https://redirect.github.com/astral-sh/python-build-standalone/releases/tag/20250712) for more details. ##### Enhancements - Add `--python-platform` to `uv sync` ([#&#8203;14320](https://redirect.github.com/astral-sh/uv/pull/14320)) - Support pre-releases in `uv version --bump` ([#&#8203;13578](https://redirect.github.com/astral-sh/uv/pull/13578)) - Add `-w` shorthand for `--with` ([#&#8203;14530](https://redirect.github.com/astral-sh/uv/pull/14530)) - Add an exception handler on Windows to display information on crash ([#&#8203;14582](https://redirect.github.com/astral-sh/uv/pull/14582)) - Add hint when Python downloads are disabled ([#&#8203;14522](https://redirect.github.com/astral-sh/uv/pull/14522)) - Add `UV_HTTP_RETRIES` to customize retry counts ([#&#8203;14544](https://redirect.github.com/astral-sh/uv/pull/14544)) - Follow leaf symlinks matched by globs in `cache-key` ([#&#8203;13438](https://redirect.github.com/astral-sh/uv/pull/13438)) - Support parent path components (`..`) in globs in `cache-key` ([#&#8203;13469](https://redirect.github.com/astral-sh/uv/pull/13469)) - Improve `cache-key` performance ([#&#8203;13469](https://redirect.github.com/astral-sh/uv/pull/13469)) ##### Preview features - Add `uv sync --output-format json` ([#&#8203;13689](https://redirect.github.com/astral-sh/uv/pull/13689)) ##### Bug fixes - Do not re-resolve with a new Python version in `uv tool` if it is incompatible with `--python` ([#&#8203;14606](https://redirect.github.com/astral-sh/uv/pull/14606)) ##### Documentation - Document how to nest dependency groups with `include-group` ([#&#8203;14539](https://redirect.github.com/astral-sh/uv/pull/14539)) - Fix repeated word in Pyodide doc ([#&#8203;14554](https://redirect.github.com/astral-sh/uv/pull/14554)) - Update CONTRIBUTING.md with instructions to format Markdown files via Docker ([#&#8203;14246](https://redirect.github.com/astral-sh/uv/pull/14246)) - Fix version number for `setup-python` ([#&#8203;14533](https://redirect.github.com/astral-sh/uv/pull/14533)) ### [`v0.7.20`](https://redirect.github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0720) [Compare Source](https://redirect.github.com/astral-sh/uv/compare/0.7.19...0.7.20) ##### Python - Add Python 3.14.0b4 - Add zstd support to Python 3.14 on Unix (it already was available on Windows) - Add PyPy 7.3.20 (for Python 3.11.13) See the [PyPy](https://pypy.org/posts/2025/07/pypy-v7320-release.html) and [`python-build-standalone`](https://redirect.github.com/astral-sh/python-build-standalone/releases/tag/20250708) release notes for more details. ##### Enhancements - Add `--workspace` flag to `uv add` ([#&#8203;14496](https://redirect.github.com/astral-sh/uv/pull/14496)) - Add auto-detection for Intel GPUs ([#&#8203;14386](https://redirect.github.com/astral-sh/uv/pull/14386)) - Drop trailing arguments when writing shebangs ([#&#8203;14519](https://redirect.github.com/astral-sh/uv/pull/14519)) - Add debug message when skipping Python downloads ([#&#8203;14509](https://redirect.github.com/astral-sh/uv/pull/14509)) - Add support for declaring multiple modules in namespace packages ([#&#8203;14460](https://redirect.github.com/astral-sh/uv/pull/14460)) ##### Bug fixes - Revert normalization of trailing slashes on index URLs ([#&#8203;14511](https://redirect.github.com/astral-sh/uv/pull/14511)) - Fix forced resolution with all extras in `uv version` ([#&#8203;14434](https://redirect.github.com/astral-sh/uv/pull/14434)) - Fix handling of pre-releases in preferences ([#&#8203;14498](https://redirect.github.com/astral-sh/uv/pull/14498)) - Remove transparent variants in `uv-extract` to enable retries ([#&#8203;14450](https://redirect.github.com/astral-sh/uv/pull/14450)) ##### Rust API - Add method to get packages involved in a `NoSolutionError` ([#&#8203;14457](https://redirect.github.com/astral-sh/uv/pull/14457)) - Make `ErrorTree` for `NoSolutionError` public ([#&#8203;14444](https://redirect.github.com/astral-sh/uv/pull/14444)) ##### Documentation - Finish incomplete sentence in pip migration guide ([#&#8203;14432](https://redirect.github.com/astral-sh/uv/pull/14432)) - Remove `cache-dependency-glob` examples for `setup-uv` ([#&#8203;14493](https://redirect.github.com/astral-sh/uv/pull/14493)) - Remove `uv pip sync` suggestion with `pyproject.toml` ([#&#8203;14510](https://redirect.github.com/astral-sh/uv/pull/14510)) - Update documentation for GitHub to use `setup-uv@v6` ([#&#8203;14490](https://redirect.github.com/astral-sh/uv/pull/14490)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/alecthomas/chroma). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4yMy4yIiwidXBkYXRlZEluVmVyIjoiNDEuMjMuMiIsInRhcmdldEJyYW5jaCI6Im1hc3RlciIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-18 20:12:41 +10:00
github.com/alecthomas/repr v0.5.1
chore(deps): update all non-major dependencies (#1049) This PR contains the following updates: | Package | Type | Update | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---|---|---| | [enumer](https://redirect.github.com/dmarkham/enumer) | | patch | `1.5.9` -> `1.5.11` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/enumer/1.5.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/enumer/1.5.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/enumer/1.5.9/1.5.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/enumer/1.5.9/1.5.11?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [esbuild](https://redirect.github.com/evanw/esbuild) | | minor | `0.24.2` -> `0.25.0` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/esbuild/0.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/esbuild/0.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/esbuild/0.24.2/0.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/esbuild/0.24.2/0.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [github.com/alecthomas/kong](https://redirect.github.com/alecthomas/kong) | require | minor | `v1.7.0` -> `v1.8.1` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2falecthomas%2fkong/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2falecthomas%2fkong/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2falecthomas%2fkong/v1.7.0/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2falecthomas%2fkong/v1.7.0/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [github.com/dlclark/regexp2](https://redirect.github.com/dlclark/regexp2) | require | patch | `v1.11.4` -> `v1.11.5` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fdlclark%2fregexp2/v1.11.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fdlclark%2fregexp2/v1.11.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fdlclark%2fregexp2/v1.11.4/v1.11.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fdlclark%2fregexp2/v1.11.4/v1.11.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [go](https://redirect.github.com/golang/go) | | minor | `1.23.5` -> `1.24.1` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/go/1.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/go/1.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/go/1.23.5/1.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/go/1.23.5/1.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [go](https://go.dev/) ([source](https://redirect.github.com/golang/go)) | toolchain | minor | `1.23.5` -> `1.24.1` | [![age](https://developer.mend.io/api/mc/badges/age/golang-version/go/1.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/golang-version/go/1.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/golang-version/go/1.23.5/1.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/golang-version/go/1.23.5/1.24.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [watchexec](https://redirect.github.com/watchexec/watchexec) | | minor | `2.2.1` -> `2.3.0` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/watchexec/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/watchexec/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/watchexec/2.2.1/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/watchexec/2.2.1/2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>dmarkham/enumer (enumer)</summary> ### [`v1.5.11`](https://redirect.github.com/dmarkham/enumer/releases/tag/v1.5.11) #### What's Changed - Update golang.org/x/tools to v0.30.0 by [@&#8203;gabe565](https://redirect.github.com/gabe565) (first contribution 🎉 ) in [https://github.com/dmarkham/enumer/pull/106](https://redirect.github.com/dmarkham/enumer/pull/106) **Full Changelog**: https://github.com/dmarkham/enumer/compare/v1.5.10...1.5.11 (1.5.11 (missing the v) was previously released as a mistake. the v is for Very much required.) </details> <details> <summary>evanw/esbuild (esbuild)</summary> ### [`v0.25.0`](https://redirect.github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0250) [Compare Source](https://redirect.github.com/evanw/esbuild/compare/v0.24.2...v0.25.0) **This release deliberately contains backwards-incompatible changes.** To avoid automatically picking up releases like this, you should either be pinning the exact version of `esbuild` in your `package.json` file (recommended) or be using a version range syntax that only accepts patch upgrades such as `^0.24.0` or `~0.24.0`. See npm's documentation about [semver](https://docs.npmjs.com/cli/v6/using-npm/semver/) for more information. - Restrict access to esbuild's development server ([GHSA-67mh-4wv8-2f99](https://redirect.github.com/evanw/esbuild/security/advisories/GHSA-67mh-4wv8-2f99)) This change addresses esbuild's first security vulnerability report. Previously esbuild set the `Access-Control-Allow-Origin` header to `*` to allow esbuild's development server to be flexible in how it's used for development. However, this allows the websites you visit to make HTTP requests to esbuild's local development server, which gives read-only access to your source code if the website were to fetch your source code's specific URL. You can read more information in [the report](https://redirect.github.com/evanw/esbuild/security/advisories/GHSA-67mh-4wv8-2f99). Starting with this release, [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) will now be disabled, and requests will now be denied if the host does not match the one provided to `--serve=`. The default host is `0.0.0.0`, which refers to all of the IP addresses that represent the local machine (e.g. both `127.0.0.1` and `192.168.0.1`). If you want to customize anything about esbuild's development server, you can [put a proxy in front of esbuild](https://esbuild.github.io/api/#serve-proxy) and modify the incoming and/or outgoing requests. In addition, the `serve()` API call has been changed to return an array of `hosts` instead of a single `host` string. This makes it possible to determine all of the hosts that esbuild's development server will accept. Thanks to [@&#8203;sapphi-red](https://redirect.github.com/sapphi-red) for reporting this issue. - Delete output files when a build fails in watch mode ([#&#8203;3643](https://redirect.github.com/evanw/esbuild/issues/3643)) It has been requested for esbuild to delete files when a build fails in watch mode. Previously esbuild left the old files in place, which could cause people to not immediately realize that the most recent build failed. With this release, esbuild will now delete all output files if a rebuild fails. Fixing the build error and triggering another rebuild will restore all output files again. - Fix correctness issues with the CSS nesting transform ([#&#8203;3620](https://redirect.github.com/evanw/esbuild/issues/3620), [#&#8203;3877](https://redirect.github.com/evanw/esbuild/issues/3877), [#&#8203;3933](https://redirect.github.com/evanw/esbuild/issues/3933), [#&#8203;3997](https://redirect.github.com/evanw/esbuild/issues/3997), [#&#8203;4005](https://redirect.github.com/evanw/esbuild/issues/4005), [#&#8203;4037](https://redirect.github.com/evanw/esbuild/pull/4037), [#&#8203;4038](https://redirect.github.com/evanw/esbuild/pull/4038)) This release fixes the following problems: - Naive expansion of CSS nesting can result in an exponential blow-up of generated CSS if each nesting level has multiple selectors. Previously esbuild sometimes collapsed individual nesting levels using `:is()` to limit expansion. However, this collapsing wasn't correct in some cases, so it has been removed to fix correctness issues. ```css /* Original code */ .parent { > .a, > .b1 > .b2 { color: red; } } /* Old output (with --supported:nesting=false) */ .parent > :is(.a, .b1 > .b2) { color: red; } /* New output (with --supported:nesting=false) */ .parent > .a, .parent > .b1 > .b2 { color: red; } ``` Thanks to [@&#8203;tim-we](https://redirect.github.com/tim-we) for working on a fix. - The `&` CSS nesting selector can be repeated multiple times to increase CSS specificity. Previously esbuild ignored this possibility and incorrectly considered `&&` to have the same specificity as `&`. With this release, this should now work correctly: ```css /* Original code (color should be red) */ div { && { color: red } & { color: blue } } /* Old output (with --supported:nesting=false) */ div { color: red; } div { color: blue; } /* New output (with --supported:nesting=false) */ div:is(div) { color: red; } div { color: blue; } ``` Thanks to [@&#8203;CPunisher](https://redirect.github.com/CPunisher) for working on a fix. - Previously transforming nested CSS incorrectly removed leading combinators from within pseudoclass selectors such as `:where()`. This edge case has been fixed and how has test coverage. ```css /* Original code */ a b:has(> span) { a & { color: green; } } /* Old output (with --supported:nesting=false) */ a :is(a b:has(span)) { color: green; } /* New output (with --supported:nesting=false) */ a :is(a b:has(> span)) { color: green; } ``` This fix was contributed by [@&#8203;NoremacNergfol](https://redirect.github.com/NoremacNergfol). - The CSS minifier contains logic to remove the `&` selector when it can be implied, which happens when there is only one and it's the leading token. However, this logic was incorrectly also applied to selector lists inside of pseudo-class selectors such as `:where()`. With this release, the minifier will now avoid applying this logic in this edge case: ```css /* Original code */ .a { & .b { color: red } :where(& .b) { color: blue } } /* Old output (with --minify) */ .a{.b{color:red}:where(.b){color:#&#8203;00f}} /* New output (with --minify) */ .a{.b{color:red}:where(& .b){color:#&#8203;00f}} ``` - Fix some correctness issues with source maps ([#&#8203;1745](https://redirect.github.com/evanw/esbuild/issues/1745), [#&#8203;3183](https://redirect.github.com/evanw/esbuild/issues/3183), [#&#8203;3613](https://redirect.github.com/evanw/esbuild/issues/3613), [#&#8203;3982](https://redirect.github.com/evanw/esbuild/issues/3982)) Previously esbuild incorrectly treated source map path references as file paths instead of as URLs. With this release, esbuild will now treat source map path references as URLs. This fixes the following problems with source maps: - File names in `sourceMappingURL` that contained a space previously did not encode the space as `%20`, which resulted in JavaScript tools (including esbuild) failing to read that path back in when consuming the generated output file. This should now be fixed. - Absolute URLs in `sourceMappingURL` that use the `file://` scheme previously attempted to read from a folder called `file:`. These URLs should now be recognized and parsed correctly. - Entries in the `sources` array in the source map are now treated as URLs instead of file paths. The correct behavior for this is much more clear now that source maps has a [formal specification](https://tc39.es/ecma426/). Many thanks to those who worked on the specification. - Fix incorrect package for `@esbuild/netbsd-arm64` ([#&#8203;4018](https://redirect.github.com/evanw/esbuild/issues/4018)) Due to a copy+paste typo, the binary published to `@esbuild/netbsd-arm64` was not actually for `arm64`, and didn't run in that environment. This release should fix running esbuild in that environment (NetBSD on 64-bit ARM). Sorry about the mistake. - Fix a minification bug with bitwise operators and bigints ([#&#8203;4065](https://redirect.github.com/evanw/esbuild/issues/4065)) This change removes an incorrect assumption in esbuild that all bitwise operators result in a numeric integer. That assumption was correct up until the introduction of bigints in ES2020, but is no longer correct because almost all bitwise operators now operate on both numbers and bigints. Here's an example of the incorrect minification: ```js // Original code if ((a & b) !== 0) found = true // Old output (with --minify) a&b&&(found=!0); // New output (with --minify) (a&b)!==0&&(found=!0); ``` - Fix esbuild incorrectly rejecting valid TypeScript edge case ([#&#8203;4027](https://redirect.github.com/evanw/esbuild/issues/4027)) The following TypeScript code is valid: ```ts export function open(async?: boolean): void { console.log(async as boolean) } ``` Before this version, esbuild would fail to parse this with a syntax error as it expected the token sequence `async as ...` to be the start of an async arrow function expression `async as => ...`. This edge case should be parsed correctly by esbuild starting with this release. - Transform BigInt values into constructor calls when unsupported ([#&#8203;4049](https://redirect.github.com/evanw/esbuild/issues/4049)) Previously esbuild would refuse to compile the BigInt literals (such as `123n`) if they are unsupported in the configured target environment (such as with `--target=es6`). The rationale was that they cannot be polyfilled effectively because they change the behavior of JavaScript's arithmetic operators and JavaScript doesn't have operator overloading. However, this prevents using esbuild with certain libraries that would otherwise work if BigInt literals were ignored, such as with old versions of the [`buffer` library](https://redirect.github.com/feross/buffer) before the library fixed support for running in environments without BigInt support. So with this release, esbuild will now turn BigInt literals into BigInt constructor calls (so `123n` becomes `BigInt(123)`) and generate a warning in this case. You can turn off the warning with `--log-override:bigint=silent` or restore the warning to an error with `--log-override:bigint=error` if needed. - Change how `console` API dropping works ([#&#8203;4020](https://redirect.github.com/evanw/esbuild/issues/4020)) Previously the `--drop:console` feature replaced all method calls off of the `console` global with `undefined` regardless of how long the property access chain was (so it applied to `console.log()` and `console.log.call(console)` and `console.log.not.a.method()`). However, it was pointed out that this breaks uses of `console.log.bind(console)`. That's also incompatible with Terser's implementation of the feature, which is where this feature originally came from (it does support `bind`). So with this release, using this feature with esbuild will now only replace one level of method call (unless extended by `call` or `apply`) and will replace the method being called with an empty function in complex cases: ```js // Original code const x = console.log('x') const y = console.log.call(console, 'y') const z = console.log.bind(console)('z') // Old output (with --drop-console) const x = void 0; const y = void 0; const z = (void 0)("z"); // New output (with --drop-console) const x = void 0; const y = void 0; const z = (() => { }).bind(console)("z"); ``` This should more closely match Terser's existing behavior. - Allow BigInt literals as `define` values With this release, you can now use BigInt literals as define values, such as with `--define:FOO=123n`. Previously trying to do this resulted in a syntax error. - Fix a bug with resolve extensions in `node_modules` ([#&#8203;4053](https://redirect.github.com/evanw/esbuild/issues/4053)) The `--resolve-extensions=` option lets you specify the order in which to try resolving implicit file extensions. For complicated reasons, esbuild reorders TypeScript file extensions after JavaScript ones inside of `node_modules` so that JavaScript source code is always preferred to TypeScript source code inside of dependencies. However, this reordering had a bug that could accidentally change the relative order of TypeScript file extensions if one of them was a prefix of the other. That bug has been fixed in this release. You can see the issue for details. - Better minification of statically-determined `switch` cases ([#&#8203;4028](https://redirect.github.com/evanw/esbuild/issues/4028)) With this release, esbuild will now try to trim unused code within `switch` statements when the test expression and `case` expressions are primitive literals. This can arise when the test expression is an identifier that is substituted for a primitive literal at compile time. For example: ```js // Original code switch (MODE) { case 'dev': installDevToolsConsole() break case 'prod': return default: throw new Error } // Old output (with --minify '--define:MODE="prod"') switch("prod"){case"dev":installDevToolsConsole();break;case"prod":return;default:throw new Error} // New output (with --minify '--define:MODE="prod"') return; ``` - Emit `/* @&#8203;__KEY__ */` for string literals derived from property names ([#&#8203;4034](https://redirect.github.com/evanw/esbuild/issues/4034)) Property name mangling is an advanced feature that shortens certain property names for better minification (I say "advanced feature" because it's very easy to break your code with it). Sometimes you need to store a property name in a string, such as `obj.get('foo')` instead of `obj.foo`. JavaScript minifiers such as esbuild and [Terser](https://terser.org/) have a convention where a `/* @&#8203;__KEY__ */` comment before the string makes it behave like a property name. So `obj.get(/* @&#8203;__KEY__ */ 'foo')` allows the contents of the string `'foo'` to be shortened. However, esbuild sometimes itself generates string literals containing property names when transforming code, such as when lowering class fields to ES6 or when transforming TypeScript decorators. Previously esbuild didn't generate its own `/* @&#8203;__KEY__ */` comments in this case, which means that minifying your code by running esbuild again on its own output wouldn't work correctly (this does not affect people that both minify and transform their code in a single step). With this release, esbuild will now generate `/* @&#8203;__KEY__ */` comments for property names in generated string literals. To avoid lots of unnecessary output for people that don't use this advanced feature, the generated comments will only be present when the feature is active. If you want to generate the comments but not actually mangle any property names, you can use a flag that has no effect such as `--reserve-props=.`, which tells esbuild to not mangle any property names (but still activates this feature). - The `text` loader now strips the UTF-8 BOM if present ([#&#8203;3935](https://redirect.github.com/evanw/esbuild/issues/3935)) Some software (such as Notepad on Windows) can create text files that start with the three bytes `0xEF 0xBB 0xBF`, which is referred to as the "byte order mark". This prefix is intended to be removed before using the text. Previously esbuild's `text` loader included this byte sequence in the string, which turns into a prefix of `\uFEFF` in a JavaScript string when decoded from UTF-8. With this release, esbuild's `text` loader will now remove these bytes when they occur at the start of the file. - Omit legal comment output files when empty ([#&#8203;3670](https://redirect.github.com/evanw/esbuild/issues/3670)) Previously configuring esbuild with `--legal-comment=external` or `--legal-comment=linked` would always generate a `.LEGAL.txt` output file even if it was empty. Starting with this release, esbuild will now only do this if the file will be non-empty. This should result in a more organized output directory in some cases. - Update Go from 1.23.1 to 1.23.5 ([#&#8203;4056](https://redirect.github.com/evanw/esbuild/issues/4056), [#&#8203;4057](https://redirect.github.com/evanw/esbuild/pull/4057)) This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain reports from vulnerability scanners that detect which version of the Go compiler esbuild uses. This PR was contributed by [@&#8203;MikeWillCook](https://redirect.github.com/MikeWillCook). - Allow passing a port of 0 to the development server ([#&#8203;3692](https://redirect.github.com/evanw/esbuild/issues/3692)) Unix sockets interpret a port of 0 to mean "pick a random unused port in the [ephemeral port](https://en.wikipedia.org/wiki/Ephemeral_port) range". However, esbuild's default behavior when the port is not specified is to pick the first unused port starting from 8000 and upward. This is more convenient because port 8000 is typically free, so you can for example restart the development server and reload your app in the browser without needing to change the port in the URL. Since esbuild is written in Go (which does not have optional fields like JavaScript), not specifying the port in Go means it defaults to 0, so previously passing a port of 0 to esbuild caused port 8000 to be picked. Starting with this release, passing a port of 0 to esbuild when using the CLI or the JS API will now pass port 0 to the OS, which will pick a random ephemeral port. To make this possible, the `Port` option in the Go API has been changed from `uint16` to `int` (to allow for additional sentinel values) and passing a port of -1 in Go now picks a random port. Both the CLI and JS APIs now remap an explicitly-provided port of 0 into -1 for the internal Go API. Another option would have been to change `Port` in Go from `uint16` to `*uint16` (Go's closest equivalent of `number | undefined`). However, that would make the common case of providing an explicit port in Go very awkward as Go doesn't support taking the address of integer constants. This tradeoff isn't worth it as picking a random ephemeral port is a rare use case. So the CLI and JS APIs should now match standard Unix behavior when the port is 0, but you need to use -1 instead with Go API. - Minification now avoids inlining constants with direct `eval` ([#&#8203;4055](https://redirect.github.com/evanw/esbuild/issues/4055)) Direct `eval` can be used to introduce a new variable like this: ```js const variable = false ;(function () { eval("var variable = true") console.log(variable) })() ``` Previously esbuild inlined `variable` here (which became `false`), which changed the behavior of the code. This inlining is now avoided, but please keep in mind that direct `eval` breaks many assumptions that JavaScript tools hold about normal code (especially when bundling) and I do not recommend using it. There are usually better alternatives that have a more localized impact on your code. You can read more about this here: https://esbuild.github.io/link/direct-eval/ </details> <details> <summary>alecthomas/kong (github.com/alecthomas/kong)</summary> ### [`v1.8.1`](https://redirect.github.com/alecthomas/kong/compare/v1.8.0...v1.8.1) [Compare Source](https://redirect.github.com/alecthomas/kong/compare/v1.8.0...v1.8.1) ### [`v1.8.0`](https://redirect.github.com/alecthomas/kong/compare/v1.7.0...v1.8.0) [Compare Source](https://redirect.github.com/alecthomas/kong/compare/v1.7.0...v1.8.0) </details> <details> <summary>dlclark/regexp2 (github.com/dlclark/regexp2)</summary> ### [`v1.11.5`](https://redirect.github.com/dlclark/regexp2/compare/v1.11.4...v1.11.5) [Compare Source](https://redirect.github.com/dlclark/regexp2/compare/v1.11.4...v1.11.5) </details> <details> <summary>golang/go (go)</summary> ### [`v1.24.1`](https://redirect.github.com/golang/go/compare/go1.24.0...go1.24.1) ### [`v1.24.0`](https://redirect.github.com/golang/go/compare/go1.23.6...go1.24.0) ### [`v1.23.6`](https://redirect.github.com/golang/go/compare/go1.23.5...go1.23.6) </details> <details> <summary>watchexec/watchexec (watchexec)</summary> ### [`v2.3.0`](https://redirect.github.com/watchexec/watchexec/releases/tag/v2.3.0): CLI v2.3.0 - Upgrade jaq to 2.0 ([#&#8203;902](https://redirect.github.com/watchexec/watchexec/issues/902)) - Flags are ordered alphabetically in `--help` - `--filter-prog` is no longer experimental (won't warn on use) - `--only-emit-events` now implies `--emit-events-to=json-stdio` - Zero-value unitless time spans are no longer deprecated ([#&#8203;909](https://redirect.github.com/watchexec/watchexec/issues/909)) - Linux build machines for the pre-built binaries now use Ubuntu 24.04; if you require an older glibc you'll need to build from source ##### New feature: `--socket` ([#&#8203;905](https://redirect.github.com/watchexec/watchexec/issues/905)) This implements the systemd socket-passing protocol, like a lightweight [systemfd](https://redirect.github.com/mitsuhiko/systemfd): sockets are opened from the watchexec process, and then passed to the commands it runs. This lets you keep sockets open and avoid address reuse issues or dropping packets. The value can be either of `PORT` (opens a TCP listening socket at that port), `HOST:PORT` (specify a host IP address; IPv6 addresses can be specified `[bracketed]`), `TYPE::PORT` or `TYPE::HOST:PORT` (specify a socket type, `tcp` / `udp`). This syntax and the behaviour of this option is compatible with `systemfd`'s. This integration only provides basic support, if you want more control you should use the `systemfd` tool from [@&#8203;mitsuhiko](https://redirect.github.com/mitsuhiko) directly. To make use of the sockets in Rust code, you can use the [listenfd](https://redirect.github.com/mitsuhiko/listenfd) crate, also by Armin. I've also written a document that describes the minimal protocol, if you want to see how to use it in your projects or how to implement it yourself, both for Unix (systemd's invention) and for Windows (systemfd's invention): https://github.com/watchexec/watchexec/blob/main/doc/socket.md </details> --- ### Configuration 📅 **Schedule**: Branch creation - "* 0-3 * * 1" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/alecthomas/chroma). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE4NS40IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Alec Thomas <alec@swapoff.org>
2025-03-05 22:46:34 +11:00
github.com/dlclark/regexp2 v1.11.5
)
2022-02-21 16:25:58 +11:00
require github.com/hexops/gotextdiff v1.0.3 // indirect