renovate[bot]
0e0e282eb3
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` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| [esbuild](https://redirect.github.com/evanw/esbuild ) | | minor |
`0.24.2` -> `0.25.0` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
|
[github.com/alecthomas/kong](https://redirect.github.com/alecthomas/kong )
| require | minor | `v1.7.0` -> `v1.8.1` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
|
[github.com/dlclark/regexp2](https://redirect.github.com/dlclark/regexp2 )
| require | patch | `v1.11.4` -> `v1.11.5` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| [go](https://redirect.github.com/golang/go ) | | minor | `1.23.5` ->
`1.24.1` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](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` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| [watchexec](https://redirect.github.com/watchexec/watchexec ) | | minor
| `2.2.1` -> `2.3.0` |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](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
[@​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 [@​sapphi-red](https://redirect.github.com/sapphi-red )
for reporting this issue.
- Delete output files when a build fails in watch mode
([#​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
([#​3620](https://redirect.github.com/evanw/esbuild/issues/3620 ),
[#​3877](https://redirect.github.com/evanw/esbuild/issues/3877 ),
[#​3933](https://redirect.github.com/evanw/esbuild/issues/3933 ),
[#​3997](https://redirect.github.com/evanw/esbuild/issues/3997 ),
[#​4005](https://redirect.github.com/evanw/esbuild/issues/4005 ),
[#​4037](https://redirect.github.com/evanw/esbuild/pull/4037 ),
[#​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 [@​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 [@​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
[@​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:#​00f}}
/* New output (with --minify) */
.a{.b{color:red}:where(& .b){color:#​00f}}
```
- Fix some correctness issues with source maps
([#​1745](https://redirect.github.com/evanw/esbuild/issues/1745 ),
[#​3183](https://redirect.github.com/evanw/esbuild/issues/3183 ),
[#​3613](https://redirect.github.com/evanw/esbuild/issues/3613 ),
[#​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`
([#​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
([#​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
([#​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
([#​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
([#​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`
([#​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
([#​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 `/* @​__KEY__ */` for string literals derived from property
names
([#​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 `/*
@​__KEY__ */` comment before the string makes it behave like a
property name. So `obj.get(/* @​__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 `/* @​__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 `/* @​__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
([#​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
([#​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
([#​4056](https://redirect.github.com/evanw/esbuild/issues/4056 ),
[#​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
[@​MikeWillCook](https://redirect.github.com/MikeWillCook ).
- Allow passing a port of 0 to the development server
([#​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`
([#​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
([#​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
([#​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`
([#​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
[@​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
Alec Thomas
bd47355e46
fix: include compress state in style cache key
...
Fixes #945
2024-03-12 17:08:58 +11:00
Alec Thomas
6dd9f269ef
feat: introduce a LRU compiled style cache for the HTML formatter ( #938 )
...
```
🐚 ~/dev/chroma $ benchcmp before.txt after.txt
benchmark old ns/op new ns/op delta
BenchmarkHTMLFormatter-8 160560 77797 -51.55%
benchmark old allocs new allocs delta
BenchmarkHTMLFormatter-8 1267 459 -63.77%
benchmark old bytes new bytes delta
BenchmarkHTMLFormatter-8 52568 25067 -52.32%
```
2024-02-27 17:05:08 +11:00
guangwu
b8ad4d6cab
chore: unnecessary use of fmt.Sprintf ( #799 )
2023-07-10 18:42:13 +10:00
guangwu
b9a63eb4f0
chore: remove refs to deprecated io/ioutil ( #798 )
2023-07-10 18:42:01 +10:00
Itamar Haber
633f8e0f55
Removes 'tabindex="0"' from `<pre>' elements
2023-01-20 02:03:49 +11:00
Alec Thomas
c263f6fa19
feat: XML style definitions ( #693 )
...
Fixes #635 .
2022-11-01 21:23:14 -07:00
Alec Thomas
d0e811c0ef
fix: use a class with line links when requested ( #692 )
...
Fixes #683
2022-10-31 23:28:30 -07:00
Alec Thomas
40b7a9135a
Upgrade project to Go 1.19 and switch to alecthomas/assert/v2
2022-10-18 08:55:38 +11:00
Siavash Askari Nasr
d18e8a46f2
Add InlineCode
option for inline code blocks
...
- Add an `InlineCode` option for inline code blocks
- When `PreventSurroundingPre` option is enabled, do not wrap the code by `Line` and `CodeLine`
- Write and update related tests
2022-06-14 21:17:50 +10:00
Siavash Askari Nasr
5397b4880b
Append semicolon to tabWidthStyle
.
2022-06-14 15:34:02 +10:00
Siavash Askari Nasr
c78b8a6a03
Fix extra semicolon in tabWidthStyle
...
Needed after changes in #636
2022-06-14 07:16:12 +10:00
Siavash Askari Nasr
dea6a13339
Add CSS style inheritance to WithCustomCSS
option
2022-05-18 02:45:33 -07:00
Siavash Askari Nasr
7d779408db
[html formatter] Add option to let users provide custom CSS styles
...
Example: WithCustomCSS(map[chroma.TokenType]string{chroma.Line: `display: inline;`})
2022-05-18 02:45:33 -07:00
Alec Thomas
cc2dd5b8ad
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-27 15:22:00 +11:00
Siavash Askari Nasr
d6e61d3cbe
Use span
for .line
, put code inside <code>
...
Apparently only "phrasing content" are permitted inside `pre` and
`code`, and `div` is not one of them, so replace it with `span`, `div`
wasn't necessary anyway.
Also it makes sense to put code inside `code` tag(except for line
numbers).
Removed `overflow:auto` and `width: auto` as they didn't seem to be
necessary and actually prevented horizontal scroll bar to appear when content
didn't fit in the viewport.
2021-11-10 19:52:49 +11:00
Siavash Askari Nasr
5ed5054d73
Put lines in a div & code lines in a span, Add WrapLongLines Option
2021-11-09 19:14:33 +11:00
Alec Thomas
54fd3bc12f
Clean up imports and make cmd/chroma its own module.
2021-06-18 16:56:50 +10:00
rhymes
c8581d47ee
Add tabindex="0" to default <pre> wrapper
2021-05-24 07:16:54 +10:00
Alvaro Aleman
ab61726cdb
Make linkeable lines a link to themselves
...
Currently its already possible to make line lumbers linkeable. Getting
such a link however requires the end user to look at the pages source
and then to manually edit the URL, which is not a great UX.
This PR changes that to make the line numbers a link to themselves, so
clicking on them gives a link to that line that can then be passed
around, similiar to e.G. GitHub.
2020-11-03 21:31:04 +11:00
Cameron Little
cc5e532d14
Add failing test for invalid css with allClasses
...
This was reported at https://github.com/gohugoio/hugo/issues/7207
2020-05-09 22:56:49 +10:00
Pablo Santiago Blum de Aguiar
9e22bd6e2f
Consider baseLineNumber when calculating the column width
2020-01-10 08:23:54 +11:00
Bjørn Erik Pedersen
5921c52787
Add bool argument to WithClasses, WithLineNumbers etc.
...
This allows the boolean options to be reconfigured, e.g:
```go
options := getOptions()
options = append(options, html.WithLineNumbers(true))
```
Fixes #301
2019-11-22 10:13:00 +11:00
Bjørn Erik Pedersen
d3926cc0e1
Add WithPreWrapper option
2019-11-20 20:09:17 +11:00
Alec Thomas
bbc59ac372
Emit error tokens when there's a group mismatch.
...
Also don't panic/recover, as we no longer use panic to report "real"
errors.
Fixes #295 .
2019-10-24 17:03:35 +11:00
Alec Thomas
da5ac60d8c
Add golangci-lint and fix all lint issues.
2018-12-31 22:46:59 +11:00
Alec Thomas
881a441774
Don't keep trailing empty tokens when splitting tokens by line.
...
Fixes #155 . Fixes #209 .
2018-12-27 16:20:38 +11:00
Alec Thomas
fb4c38e204
Fix build (see #190 ).
2018-11-08 17:16:58 +11:00
Daniel Eloff
9c3abeae1d
Tokens by value ( #187 )
...
This results in about a 8% improvement in speed.
2018-11-04 10:22:51 +11:00
Alec Thomas
3020e2ea8c
Fix bug with nested newlines.
...
Fixes #124 .
Also reinstitute lexer tests that disappeared during package split.
2018-03-03 10:16:21 +11:00
John Millikin
aaa96c6984
Avoid adding an HTML prefix to empty class names.
...
This makes the raw markup a bit cleaner when there's lots of `Text`
tokens.
2018-02-25 19:46:48 +11:00
John Millikin
d7ee3c10b0
Add newlines in line number spans when wrapping in an HTML table.
...
Since these are wrapped in a `<pre>`, newlines hint the browser that the
line numbers should be on separate lines. This helps when rendering
content with broken CSS, or in a text-only browser.
2018-02-25 17:52:15 +11:00
John Millikin
df4ec264da
Render HTML class prefixes.
2018-02-18 14:58:46 +11:00
Alec Thomas
563aadc53c
Moved lexers into alphabetical sub-packages.
...
This was done to speed up incremental compilation when working on
lexers. That is, modifying a single lexer will no longer require
recompiling all lexers.
This is a (slightly) backwards breaking change in that lexers are no
longer exported directly in the lexers package. The registry API is
"aliased" at the old location.
2018-02-15 21:09:02 +11:00
Alec Thomas
71ddf5511a
Fix README for test fixtures.
2018-01-02 20:59:02 +11:00
Denis Brodbeck
c9f612c194
Fix broken css rules output
...
Strip leading semicolons in combination with line numbers.
fixes #98
2017-12-11 21:20:14 -08:00
Alec Thomas
573c1d157d
Ensure a newline exists at the end of files.
...
Fixes #42 .
2017-09-29 21:59:52 +10:00
Alec Thomas
bc2d6680e4
Run gofmt -s over the codebase.
2017-09-26 22:05:55 +10:00
Alec Thomas
e2d6abaa64
Document and add iterator panic recovery.
2017-09-20 23:06:23 +10:00
Alec Thomas
cc0e4a59ab
Switch to an Iterator interface.
...
This is to solve an issue where writers returned by the Formatter
were often stateful, but this fact was not obvious to the API consumer,
and failed in interesting ways.
2017-09-20 22:19:36 +10:00
Alec Thomas
3f230ec717
Add support for line numbers.
2017-09-20 13:33:44 +10:00
Alec Thomas
feb78ed6f3
Combine HTML formatting functions.
2017-09-19 23:04:10 +10:00
Alec Thomas
c8636118d5
Remove unused dark/light style type.
2017-09-18 14:19:59 +10:00
Alec Thomas
d12529ae61
HTML formatter + import all Pygments styles.
2017-07-20 00:01:29 -07:00