bun-types 1.2.5-canary.20250307T140650 → 1.2.5-canary.20250308T140614

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/devserver.d.ts CHANGED
@@ -3,22 +3,134 @@ export {};
3
3
  declare global {
4
4
  interface ImportMeta {
5
5
  /**
6
- * Hot module replacement
6
+ * Hot module replacement APIs. This value is `undefined` in production and
7
+ * can be used in an `if` statement to check if HMR APIs are available
7
8
  *
8
- * https://bun.sh/docs/bundler/fullstack
9
+ * ```ts
10
+ * if (import.meta.hot) {
11
+ * // HMR APIs are available
12
+ * }
13
+ * ```
14
+ *
15
+ * However, this check is usually not needed as Bun will dead-code-eliminate
16
+ * calls to all of the HMR APIs in production builds.
17
+ *
18
+ * https://bun.sh/docs/bundler/hmr
9
19
  */
10
20
  hot: {
11
21
  /**
12
- * import.meta.hot.data maintains state between module instances during hot replacement, enabling data transfer from previous to new versions.
22
+ * `import.meta.hot.data` maintains state between module instances during
23
+ * hot replacement, enabling data transfer from previous to new versions.
24
+ * When `import.meta.hot.data` is written to, Bun will mark this module as
25
+ * capable of self-accepting (equivalent of calling `accept()`).
13
26
  *
14
27
  * @example
15
28
  * ```ts
16
- * import.meta.hot.data = {
17
- * bun: 'is cool',
18
- * };
29
+ * const root = import.meta.hot.data.root ??= createRoot(elem);
30
+ * root.render(<App />); // re-use an existing root
19
31
  * ```
32
+ *
33
+ * In production, `data` is inlined to be `{}`. This is handy because Bun
34
+ * knows it can minify `{}.prop ??= value` into `value` in production.
35
+ *
36
+ *
20
37
  */
21
38
  data: any;
39
+
40
+ /**
41
+ * Indicate that this module can be replaced simply by re-evaluating the
42
+ * file. After a hot update, importers of this module will be
43
+ * automatically patched.
44
+ *
45
+ * When `import.meta.hot.accept` is not used, the page will reload when
46
+ * the file updates, and a console message shows which files were checked.
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * import { getCount } from "./foo";
51
+ *
52
+ * console.log("count is ", getCount());
53
+ *
54
+ * import.meta.hot.accept();
55
+ * ```
56
+ */
57
+ accept(): void;
58
+
59
+ /**
60
+ * Indicate that this module can be replaced by evaluating the new module,
61
+ * and then calling the callback with the new module. In this mode, the
62
+ * importers do not get patched. This is to match Vite, which is unable
63
+ * to patch their import statements. Prefer using `import.meta.hot.accept()`
64
+ * without an argument as it usually makes your code easier to understand.
65
+ *
66
+ * When `import.meta.hot.accept` is not used, the page will reload when
67
+ * the file updates, and a console message shows which files were checked.
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * export const count = 0;
72
+ *
73
+ * import.meta.hot.accept((newModule) => {
74
+ * if (newModule) {
75
+ * // newModule is undefined when SyntaxError happened
76
+ * console.log('updated: count is now ', newModule.count)
77
+ * }
78
+ * });
79
+ * ```
80
+ *
81
+ * In production, calls to this are dead-code-eliminated.
82
+ */
83
+ accept(cb: (newModule: any | undefined) => void): void;
84
+
85
+ /**
86
+ * Indicate that a dependency's module can be accepted. When the dependency
87
+ * is updated, the callback will be called with the new module.
88
+ *
89
+ * When `import.meta.hot.accept` is not used, the page will reload when
90
+ * the file updates, and a console message shows which files were checked.
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * import.meta.hot.accept('./foo', (newModule) => {
95
+ * if (newModule) {
96
+ * // newModule is undefined when SyntaxError happened
97
+ * console.log('updated: count is now ', newModule.count)
98
+ * }
99
+ * });
100
+ * ```
101
+ */
102
+ accept(specifier: string, callback: (newModule: any) => void): void;
103
+
104
+ /**
105
+ * Indicate that a dependency's module can be accepted. This variant
106
+ * accepts an array of dependencies, where the callback will receive
107
+ * the one updated module, and `undefined` for the rest.
108
+ *
109
+ * When `import.meta.hot.accept` is not used, the page will reload when
110
+ * the file updates, and a console message shows which files were checked.
111
+ */
112
+ accept(
113
+ specifiers: string[],
114
+ callback: (newModules: (any | undefined)[]) => void,
115
+ ): void;
116
+
117
+ /**
118
+ * Attach an on-dispose callback. This is called:
119
+ * - Just before the module is replaced with another copy (before the next is loaded)
120
+ * - After the module is detached (removing all imports to this module)
121
+ *
122
+ * This callback is not called on route navigation or when the browser tab closes.
123
+ *
124
+ * Returning a promise will delay module replacement until the module is
125
+ * disposed. All dispose callbacks are called in parallel.
126
+ */
127
+ dispose(cb: (data: any) => void | Promise<void>): void;
128
+
129
+ /**
130
+ * No-op
131
+ * @deprecated
132
+ */
133
+ decline(): void;
22
134
  };
23
135
  }
24
136
  }
package/docs/api/fetch.md CHANGED
@@ -337,7 +337,7 @@ This will print the request and response headers to your terminal:
337
337
  ```sh
338
338
  [fetch] > HTTP/1.1 GET http://example.com/
339
339
  [fetch] > Connection: keep-alive
340
- [fetch] > User-Agent: Bun/1.2.5-canary.20250307T140650
340
+ [fetch] > User-Agent: Bun/1.2.5-canary.20250308T140614
341
341
  [fetch] > Accept: */*
342
342
  [fetch] > Host: example.com
343
343
  [fetch] > Accept-Encoding: gzip, deflate, br
package/docs/api/spawn.md CHANGED
@@ -110,7 +110,7 @@ You can read results from the subprocess via the `stdout` and `stderr` propertie
110
110
  ```ts
111
111
  const proc = Bun.spawn(["bun", "--version"]);
112
112
  const text = await new Response(proc.stdout).text();
113
- console.log(text); // => "1.2.5-canary.20250307T140650"
113
+ console.log(text); // => "1.2.5-canary.20250308T140614"
114
114
  ```
115
115
 
116
116
  Configure the output stream by passing one of the following values to `stdout/stderr`:
@@ -1,13 +1,13 @@
1
1
  Bun's bundler has built-in support for CSS with the following features:
2
2
 
3
- - Transpiling modern/feature features to work on all browsers (including vendor prefixing)
3
+ - Transpiling modern/future features to work on all browsers (including vendor prefixing)
4
4
  - Minification
5
5
  - CSS Modules
6
6
  - Tailwind (via a native bundler plugin)
7
7
 
8
8
  ## Transpiling
9
9
 
10
- Bun's CSS bundler lets you use future/modern CSS features without having to worry about browser compatibility — all thanks to its transpiling and vendor prefixing features which are enabled by default.
10
+ Bun's CSS bundler lets you use modern/future CSS features without having to worry about browser compatibility — all thanks to its transpiling and vendor prefixing features which are enabled by default.
11
11
 
12
12
  Bun's CSS parser and bundler is a direct Rust → Zig port of [LightningCSS](https://lightningcss.dev/), with a bundling approach inspired by esbuild. The transpiler converts modern CSS syntax into backwards-compatible equivalents that work across browsers.
13
13
 
@@ -0,0 +1,234 @@
1
+ Hot Module Replacement (HMR) allows you to update modules in a running
2
+ application without needing a full page reload. This preserves the application
3
+ state and improves the development experience.
4
+
5
+ HMR is enabled by default when using Bun's full-stack development server.
6
+
7
+ ## `import.meta.hot` API Reference
8
+
9
+ Bun implements a client-side HMR API modeled after [Vite's `import.meta.hot` API](https://vitejs.dev/guide/api-hmr.html). It can be checked for with `if (import.meta.hot)`, tree-shaking it in production
10
+
11
+ ```ts
12
+ if (import.meta.hot) {
13
+ // HMR APIs are available.
14
+ }
15
+ ```
16
+
17
+ However, **this check is often not needed** as Bun will dead-code-eliminate
18
+ calls to all of the HMR APIs in production builds.
19
+
20
+ ```ts
21
+ // This entire function call will be removed in production!
22
+ import.meta.hot.dispose(() => {
23
+ console.log("dispose");
24
+ });
25
+ ```
26
+
27
+ For this to work, Bun forces these APIs to be called without indirection. That means the following do not work:
28
+
29
+ ```ts#invalid-hmr-usage.ts
30
+ // INVALID: Assigning `hot` to a variable
31
+ const hot = import.meta.hot;
32
+ hot.accept();
33
+
34
+ // INVALID: Assigning `import.meta` to a variable
35
+ const meta = import.meta;
36
+ meta.hot.accept();
37
+ console.log(meta.hot.data);
38
+
39
+ // INVALID: Passing to a function
40
+ doSomething(import.meta.hot.dispose);
41
+
42
+ // OK: The full phrase "import.meta.hot.<API>" must be called directly:
43
+ import.meta.hot.accept();
44
+
45
+ // OK: `data` can be passed to functions:
46
+ doSomething(import.meta.hot.data);
47
+ ```
48
+
49
+ {% callout %}
50
+
51
+ **Note** — The HMR API is still a work in progress. Some features are missing. HMR can be disabled in `Bun.serve` by setting the `development` option to `{ hmr: false }`.
52
+
53
+ {% endcallout %}
54
+
55
+ | | Method | Notes |
56
+ | --- | ------------------ | --------------------------------------------------------------------- |
57
+ | ✅ | `hot.accept()` | Indicate that a hot update can be replaced gracefully. |
58
+ | ✅ | `hot.data` | Persist data between module evaluations. |
59
+ | ✅ | `hot.dispose()` | Add a callback function to run when a module is about to be replaced. |
60
+ | ❌ | `hot.invalidate()` | |
61
+ | ✅ | `hot.on()` | Attach an event listener |
62
+ | ✅ | `hot.off()` | Remove an event listener from `on`. |
63
+ | ❌ | `hot.send()` | |
64
+ | 🚧 | `hot.prune()` | **NOTE**: Callback is currently never called. |
65
+ | ✅ | `hot.decline()` | No-op to match Vite's `import.meta.hot` |
66
+
67
+ ### `import.meta.hot.accept()`
68
+
69
+ The `accept()` method indicates that a module can be hot-replaced. When called
70
+ without arguments, it indicates that this module can be replaced simply by
71
+ re-evaluating the file. After a hot update, importers of this module will be
72
+ automatically patched.
73
+
74
+ ```ts#index.ts
75
+ import { getCount } from "./foo.ts";
76
+
77
+ console.log("count is ", getCount());
78
+
79
+ import.meta.hot.accept();
80
+
81
+ export function getNegativeCount() {
82
+ return -getCount();
83
+ }
84
+ ```
85
+
86
+ This creates a hot-reloading boundary for all of the files that `index.ts`
87
+ imports. That means whenever `foo.ts` or any of its dependencies are saved, the
88
+ update will bubble up to `index.ts` will re-evaluate. Files that import
89
+ `index.ts` will then be patched to import the new version of
90
+ `getNegativeCount()`. If only `index.ts` is updated, only the one file will be
91
+ re-evaluated, and the counter in `foo.ts` is reused.
92
+
93
+ This may be used in combination with `import.meta.hot.data` to transfer state
94
+ from the previous module to the new one.
95
+
96
+ When no modules call `import.meta.hot.accept()` (and there isn't React Fast
97
+ Refresh or a plugin calling it for you), the page will reload when the file
98
+ updates, and a console warning shows which files were invalidated. This warning
99
+ is safe to ignore if it makes more sense to rely on full page reloads.
100
+
101
+ #### With callback
102
+
103
+ When provided one callback, `import.meta.hot.accept` will function how it does
104
+ in Vite. Instead of patching the importers of this module, it will call the
105
+ callback with the new module.
106
+
107
+ ```ts
108
+ export const count = 0;
109
+
110
+ import.meta.hot.accept(newModule => {
111
+ if (newModule) {
112
+ // newModule is undefined when SyntaxError happened
113
+ console.log("updated: count is now ", newModule.count);
114
+ }
115
+ });
116
+ ```
117
+
118
+ Prefer using `import.meta.hot.accept()` without an argument as it usually makes your code easier to understand.
119
+
120
+ #### Accepting other modules
121
+
122
+ ```ts
123
+ import { count } from "./foo";
124
+
125
+ import.meta.hot.accept("./foo", () => {
126
+ if (!newModule) return;
127
+
128
+ console.log("updated: count is now ", count);
129
+ });
130
+ ```
131
+
132
+ Indicates that a dependency's module can be accepted. When the dependency is updated, the callback will be called with the new module.
133
+
134
+ #### With multiple dependencies
135
+
136
+ ```ts
137
+ import.meta.hot.accept(["./foo", "./bar"], newModules => {
138
+ // newModules is an array where each item corresponds to the updated module
139
+ // or undefined if that module had a syntax error
140
+ });
141
+ ```
142
+
143
+ Indicates that multiple dependencies' modules can be accepted. This variant accepts an array of dependencies, where the callback will receive the updated modules, and `undefined` for any that had errors.
144
+
145
+ ### `import.meta.hot.data`
146
+
147
+ `import.meta.hot.data` maintains state between module instances during hot
148
+ replacement, enabling data transfer from previous to new versions. When
149
+ `import.meta.hot.data` is written into, Bun will also mark this module as
150
+ capable of self-accepting (equivalent of calling `import.meta.hot.accept()`).
151
+
152
+ ```ts
153
+ import { createRoot } from "react-dom/client";
154
+ import { App } from "./app";
155
+
156
+ const root = import.meta.hot.data.root ??= createRoot(elem);
157
+ root.render(<App />); // re-use an existing root
158
+ ```
159
+
160
+ In production, `data` is inlined to be `{}`, meaning it cannot be used as a state holder.
161
+
162
+ The above pattern is recommended for stateful modules because Bun knows it can minify `{}.prop ??= value` into `value` in production.
163
+
164
+ ### `import.meta.hot.dispose()`
165
+
166
+ Attaches an on-dispose callback. This is called:
167
+
168
+ - Just before the module is replaced with another copy (before the next is loaded)
169
+ - After the module is detached (removing all imports to this module, see `import.meta.hot.prune()`)
170
+
171
+ ```ts
172
+ const sideEffect = setupSideEffect();
173
+
174
+ import.meta.hot.dispose(() => {
175
+ sideEffect.cleanup();
176
+ });
177
+ ```
178
+
179
+ This callback is not called on route navigation or when the browser tab closes.
180
+
181
+ Returning a promise will delay module replacement until the module is disposed.
182
+ All dispose callbacks are called in parallel.
183
+
184
+ ### `import.meta.hot.prune()`
185
+
186
+ Attaches an on-prune callback. This is called when all imports to this module
187
+ are removed, but the module was previously loaded.
188
+
189
+ This can be used to clean up resources that were created when the module was
190
+ loaded. Unlike `import.meta.hot.dispose()`, this pairs much better with `accept`
191
+ and `data` to manage stateful resources. A full example managing a `WebSocket`:
192
+
193
+ ```ts
194
+ import { something } from "./something";
195
+
196
+ // Initialize or re-use a WebSocket connection
197
+ export const ws = (import.meta.hot.data.ws ??= new WebSocket(location.origin));
198
+
199
+ // If the module's import is removed, clean up the WebSocket connection.
200
+ import.meta.hot.prune(() => {
201
+ ws.close();
202
+ });
203
+ ```
204
+
205
+ If `dispose` was used instead, the WebSocket would close and re-open on every
206
+ hot update. Both versions of the code will prevent page reloads when imported
207
+ files are updated.
208
+
209
+ ### `import.meta.hot.on()` and `off()`
210
+
211
+ `on()` and `off()` are used to listen for events from the HMR runtime. Event names are prefixed with a prefix so that plugins do not conflict with each other.
212
+
213
+ ```ts
214
+ import.meta.hot.on("bun:beforeUpdate", () => {
215
+ console.log("before a hot update");
216
+ });
217
+ ```
218
+
219
+ When a file is replaced, all of its event listeners are automatically removed.
220
+
221
+ A list of all built-in events:
222
+
223
+ | Event | Emitted when |
224
+ | ---------------------- | ----------------------------------------------------------------------------------------------- |
225
+ | `bun:beforeUpdate` | before a hot update is applied. |
226
+ | `bun:afterUpdate` | after a hot update is applied. |
227
+ | `bun:beforeFullReload` | before a full page reload happens. |
228
+ | `bun:beforePrune` | before prune callbacks are called. |
229
+ | `bun:invalidate` | when a module is invalidated with `import.meta.hot.invalidate()` |
230
+ | `bun:error` | when a build or runtime error occurs |
231
+ | `bun:ws:disconnect` | when the HMR WebSocket connection is lost. This can indicate the development server is offline. |
232
+ | `bun:ws:connect` | when the HMR WebSocket connects or re-connects. |
233
+
234
+ For compatibility with Vite, the above events are also available via `vite:*` prefix instead of `bun:*`.
@@ -7,7 +7,7 @@ Use `bun publish` to publish a package to the npm registry.
7
7
  $ bun publish
8
8
 
9
9
  ## Output
10
- bun publish v1.2.5-canary.20250307T140650 (ca7428e9)
10
+ bun publish v1.2.5-canary.20250308T140614 (ca7428e9)
11
11
 
12
12
  packed 203B package.json
13
13
  packed 224B README.md
@@ -82,6 +82,11 @@ The `--dry-run` flag can be used to simulate the publish process without actuall
82
82
  $ bun publish --dry-run
83
83
  ```
84
84
 
85
+ ### `--gzip-level`
86
+
87
+ Specify the level of gzip compression to use when packing the package. Only applies to `bun publish` without a tarball path argument. Values range from `0` to `9` (default is `9`).
88
+ {% bunCLIUsage command="publish" /%}
89
+
85
90
  ### `--auth-type`
86
91
 
87
92
  If you have 2FA enabled for your npm account, `bun publish` will prompt you for a one-time password. This can be done through a browser or the CLI. The `--auth-type` flag can be used to tell the npm registry which method you prefer. The possible values are `web` and `legacy`, with `web` being the default.
@@ -102,7 +107,6 @@ Provide a one-time password directly to the CLI. If the password is valid, this
102
107
  $ bun publish --otp 123456
103
108
  ```
104
109
 
105
- ### `--gzip-level`
106
-
107
- Specify the level of gzip compression to use when packing the package. Only applies to `bun publish` without a tarball path argument. Values range from `0` to `9` (default is `9`).
108
- {% bunCLIUsage command="publish" /%}
110
+ {% callout %}
111
+ **Note** - `bun publish` respects the `NPM_CONFIG_TOKEN` environment variable which can be used when publishing in github actions or automated workflows.
112
+ {% /callout %}
@@ -9,7 +9,7 @@ $ bunx nuxi init my-nuxt-app
9
9
  ✔ Which package manager would you like to use?
10
10
  bun
11
11
  ◐ Installing dependencies...
12
- bun install v1.2.5-canary.20250307T140650 (16b4bf34)
12
+ bun install v1.2.5-canary.20250308T140614 (16b4bf34)
13
13
  + @nuxt/devtools@0.8.2
14
14
  + nuxt@3.7.0
15
15
  785 packages installed [2.67s]
@@ -16,7 +16,7 @@ This will add the package to `peerDependencies` in `package.json`.
16
16
  ```json-diff
17
17
  {
18
18
  "peerDependencies": {
19
- + "@types/bun": "^1.2.5-canary.20250307T140650"
19
+ + "@types/bun": "^1.2.5-canary.20250308T140614"
20
20
  }
21
21
  }
22
22
  ```
@@ -28,7 +28,7 @@ Running `bun install` will install peer dependencies by default, unless marked o
28
28
  ```json-diff
29
29
  {
30
30
  "peerDependencies": {
31
- "@types/bun": "^1.2.5-canary.20250307T140650"
31
+ "@types/bun": "^1.2.5-canary.20250308T140614"
32
32
  },
33
33
  "peerDependenciesMeta": {
34
34
  + "@types/bun": {
@@ -97,7 +97,7 @@ $ bun update
97
97
  $ bun update @types/bun --latest
98
98
 
99
99
  # Update a dependency to a specific version
100
- $ bun update @types/bun@1.2.5-canary.20250307T140650
100
+ $ bun update @types/bun@1.2.5-canary.20250308T140614
101
101
 
102
102
  # Update all dependencies to the latest versions
103
103
  $ bun update --latest
@@ -21,7 +21,7 @@ Here's what the output of a typical test run looks like. In this case, there are
21
21
 
22
22
  ```sh
23
23
  $ bun test
24
- bun test v1.2.5-canary.20250307T140650 (9c68abdb)
24
+ bun test v1.2.5-canary.20250308T140614 (9c68abdb)
25
25
 
26
26
  test.test.js:
27
27
  ✓ add [0.87ms]
@@ -47,7 +47,7 @@ To only run certain test files, pass a positional argument to `bun test`. The ru
47
47
 
48
48
  ```sh
49
49
  $ bun test test3
50
- bun test v1.2.5-canary.20250307T140650 (9c68abdb)
50
+ bun test v1.2.5-canary.20250308T140614 (9c68abdb)
51
51
 
52
52
  test3.test.js:
53
53
  ✓ add [1.40ms]
@@ -85,7 +85,7 @@ Adding `-t add` will only run tests with "add" in the name. This works with test
85
85
 
86
86
  ```sh
87
87
  $ bun test -t add
88
- bun test v1.2.5-canary.20250307T140650 (9c68abdb)
88
+ bun test v1.2.5-canary.20250308T140614 (9c68abdb)
89
89
 
90
90
  test.test.js:
91
91
  ✓ add [1.79ms]
@@ -18,7 +18,7 @@ The first time this test is executed, Bun will evaluate the value passed into `e
18
18
 
19
19
  ```sh
20
20
  $ bun test test/snap
21
- bun test v1.2.5-canary.20250307T140650 (9c68abdb)
21
+ bun test v1.2.5-canary.20250308T140614 (9c68abdb)
22
22
 
23
23
  test/snap.test.ts:
24
24
  ✓ snapshot [1.48ms]
@@ -61,7 +61,7 @@ Later, when this test file is executed again, Bun will read the snapshot file an
61
61
 
62
62
  ```sh
63
63
  $ bun test
64
- bun test v1.2.5-canary.20250307T140650 (9c68abdb)
64
+ bun test v1.2.5-canary.20250308T140614 (9c68abdb)
65
65
 
66
66
  test/snap.test.ts:
67
67
  ✓ snapshot [1.05ms]
@@ -78,7 +78,7 @@ To update snapshots, use the `--update-snapshots` flag.
78
78
 
79
79
  ```sh
80
80
  $ bun test --update-snapshots
81
- bun test v1.2.5-canary.20250307T140650 (9c68abdb)
81
+ bun test v1.2.5-canary.20250308T140614 (9c68abdb)
82
82
 
83
83
  test/snap.test.ts:
84
84
  ✓ snapshot [0.86ms]
@@ -29,7 +29,7 @@ To regenerate snapshots, use the `--update-snapshots` flag.
29
29
 
30
30
  ```sh
31
31
  $ bun test --update-snapshots
32
- bun test v1.2.5-canary.20250307T140650 (9c68abdb)
32
+ bun test v1.2.5-canary.20250308T140614 (9c68abdb)
33
33
 
34
34
  test/snap.test.ts:
35
35
  ✓ snapshot [0.86ms]
@@ -5,7 +5,7 @@ name: Get the current Bun version
5
5
  Get the current version of Bun in a semver format.
6
6
 
7
7
  ```ts#index.ts
8
- Bun.version; // => "1.2.5-canary.20250307T140650"
8
+ Bun.version; // => "1.2.5-canary.20250308T140614"
9
9
  ```
10
10
 
11
11
  ---
@@ -14,7 +14,7 @@ Kernel version 5.6 or higher is strongly recommended, but the minimum is 5.1. Us
14
14
  ```bash#macOS/Linux_(curl)
15
15
  $ curl -fsSL https://bun.sh/install | bash # for macOS, Linux, and WSL
16
16
  # to install a specific version
17
- $ curl -fsSL https://bun.sh/install | bash -s "bun-v1.2.5-canary.20250307T140650"
17
+ $ curl -fsSL https://bun.sh/install | bash -s "bun-v1.2.5-canary.20250308T140614"
18
18
  ```
19
19
 
20
20
  ```bash#npm
@@ -189,10 +189,10 @@ Since Bun is a single binary, you can install older versions of Bun by re-runnin
189
189
 
190
190
  ### Installing a specific version of Bun on Linux/Mac
191
191
 
192
- To install a specific version of Bun, you can pass the git tag of the version you want to install to the install script, such as `bun-v1.2.0` or `bun-v1.2.5-canary.20250307T140650`.
192
+ To install a specific version of Bun, you can pass the git tag of the version you want to install to the install script, such as `bun-v1.2.0` or `bun-v1.2.5-canary.20250308T140614`.
193
193
 
194
194
  ```sh
195
- $ curl -fsSL https://bun.sh/install | bash -s "bun-v1.2.5-canary.20250307T140650"
195
+ $ curl -fsSL https://bun.sh/install | bash -s "bun-v1.2.5-canary.20250308T140614"
196
196
  ```
197
197
 
198
198
  ### Installing a specific version of Bun on Windows
@@ -201,7 +201,7 @@ On Windows, you can install a specific version of Bun by passing the version num
201
201
 
202
202
  ```sh
203
203
  # PowerShell:
204
- $ iex "& {$(irm https://bun.sh/install.ps1)} -Version 1.2.5-canary.20250307T140650"
204
+ $ iex "& {$(irm https://bun.sh/install.ps1)} -Version 1.2.5-canary.20250308T140614"
205
205
  ```
206
206
 
207
207
  ## Downloading Bun binaries directly
@@ -124,11 +124,11 @@ await fetch("https://example.com", {
124
124
  This prints the `fetch` request as a single-line `curl` command to let you copy-paste into your terminal to replicate the request.
125
125
 
126
126
  ```sh
127
- [fetch] $ curl --http1.1 "https://example.com/" -X POST -H "content-type: application/json" -H "Connection: keep-alive" -H "User-Agent: Bun/1.2.5-canary.20250307T140650" -H "Accept: */*" -H "Host: example.com" -H "Accept-Encoding: gzip, deflate, br" --compressed -H "Content-Length: 13" --data-raw "{\"foo\":\"bar\"}"
127
+ [fetch] $ curl --http1.1 "https://example.com/" -X POST -H "content-type: application/json" -H "Connection: keep-alive" -H "User-Agent: Bun/1.2.5-canary.20250308T140614" -H "Accept: */*" -H "Host: example.com" -H "Accept-Encoding: gzip, deflate, br" --compressed -H "Content-Length: 13" --data-raw "{\"foo\":\"bar\"}"
128
128
  [fetch] > HTTP/1.1 POST https://example.com/
129
129
  [fetch] > content-type: application/json
130
130
  [fetch] > Connection: keep-alive
131
- [fetch] > User-Agent: Bun/1.2.5-canary.20250307T140650
131
+ [fetch] > User-Agent: Bun/1.2.5-canary.20250308T140614
132
132
  [fetch] > Accept: */*
133
133
  [fetch] > Host: example.com
134
134
  [fetch] > Accept-Encoding: gzip, deflate, br
@@ -170,7 +170,7 @@ This prints the following to the console:
170
170
  [fetch] > HTTP/1.1 POST https://example.com/
171
171
  [fetch] > content-type: application/json
172
172
  [fetch] > Connection: keep-alive
173
- [fetch] > User-Agent: Bun/1.2.5-canary.20250307T140650
173
+ [fetch] > User-Agent: Bun/1.2.5-canary.20250308T140614
174
174
  [fetch] > Accept: */*
175
175
  [fetch] > Host: example.com
176
176
  [fetch] > Accept-Encoding: gzip, deflate, br
package/docs/test/dom.md CHANGED
@@ -55,7 +55,7 @@ Let's run this test with `bun test`:
55
55
 
56
56
  ```bash
57
57
  $ bun test
58
- bun test v1.2.5-canary.20250307T140650
58
+ bun test v1.2.5-canary.20250308T140614
59
59
 
60
60
  dom.test.ts:
61
61
  ✓ dom test [0.82ms]
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.2.5-canary.20250307T140650",
2
+ "version": "1.2.5-canary.20250308T140614",
3
3
  "name": "bun-types",
4
4
  "license": "MIT",
5
5
  "types": "./index.d.ts",