sproutboat 0.17.0 → 0.18.0
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/CHANGELOG.md +33 -1
- package/SURFACE.md +2 -2
- package/package.json +8 -8
- package/src/compile.ts +12 -2
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,35 @@ maintained going forward by the `release` skill.
|
|
|
10
10
|
|
|
11
11
|
## Unreleased
|
|
12
12
|
|
|
13
|
+
## [0.18.0] - 2026-10-20
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- Porffor Alpha 18 (`@sproutboat/toolchain` 0.9, `@sproutboat/runtime` 0.18).
|
|
18
|
+
- Standalone sprouts stream `ReadableStream` response bodies chunk by chunk, so
|
|
19
|
+
Server-Sent Events and long responses work; a client that disconnects cancels
|
|
20
|
+
the stream.
|
|
21
|
+
- `HTMLRewriter` (Cloudflare's API, output matching lol-html),
|
|
22
|
+
`CompressionStream`/`DecompressionStream` (gzip, deflate, deflate-raw),
|
|
23
|
+
`structuredClone`, `Event`/`EventTarget`/`AbortController`,
|
|
24
|
+
`TextEncoderStream`/`TextDecoderStream`, and more Web Crypto (SHA-1, MD5,
|
|
25
|
+
HMAC-SHA1, `exportKey`, `generateKey`).
|
|
26
|
+
- Fetch-spec `Request`, `Response`, `Headers`, `Blob` and `FormData`: byte bodies
|
|
27
|
+
go out as bytes, body readers read `ReadableStream` bodies, and `JSON.parse`
|
|
28
|
+
applies its reviver.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- `ctx.waitUntil` work no longer delays the response.
|
|
33
|
+
- `setTimeout(fn, 0)` fires on Linux.
|
|
34
|
+
- An edited compiler patch no longer hides behind a stale Porffor cache.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- `Response.redirect` sends the serialized URL (`https://example.com/`), and a
|
|
39
|
+
204/205/304 response with a body throws, per Fetch and workerd.
|
|
40
|
+
- Porffor's build cache keeps the 100 most recent builds.
|
|
41
|
+
|
|
13
42
|
## [0.17.0] - 2026-10-11
|
|
14
43
|
|
|
15
44
|
### Added
|
|
@@ -877,7 +906,10 @@ its own package.
|
|
|
877
906
|
- Renamed the package to `sproutboat` (was `@sproutboat/cli`); dropped the
|
|
878
907
|
`sprout` bin alias in favour of a user-defined shell alias.
|
|
879
908
|
|
|
880
|
-
[Unreleased]: https://github.com/baronunread/sproutboat-cli/compare/v0.
|
|
909
|
+
[Unreleased]: https://github.com/baronunread/sproutboat-cli/compare/v0.18.0...HEAD
|
|
910
|
+
[0.18.0]: https://github.com/baronunread/sproutboat-cli/compare/v0.17.0...v0.18.0
|
|
911
|
+
[0.17.0]: https://github.com/baronunread/sproutboat-cli/compare/v0.16.0...v0.17.0
|
|
912
|
+
[0.16.0]: https://github.com/baronunread/sproutboat-cli/compare/v0.15.0...v0.16.0
|
|
881
913
|
[0.15.0]: https://github.com/baronunread/sproutboat-cli/compare/v0.14.0...v0.15.0
|
|
882
914
|
[0.14.0]: https://github.com/baronunread/sproutboat-cli/compare/v0.13.0...v0.14.0
|
|
883
915
|
[0.13.0]: https://github.com/baronunread/sproutboat-cli/compare/v0.12.7...v0.13.0
|
package/SURFACE.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Generated by `src/surface.test.ts` from `src/surface.ts` + the pinned
|
|
4
4
|
> toolchain constants. Do not edit by hand — run `UPDATE_SURFACE=1 bun test`.
|
|
5
5
|
|
|
6
|
-
**Package:** `sproutboat` 0.
|
|
6
|
+
**Package:** `sproutboat` 0.18.0
|
|
7
7
|
|
|
8
8
|
## Commands
|
|
9
9
|
|
|
@@ -76,7 +76,7 @@ usage: sproutboat <init [name] | check [project-dir] | types [project-dir] | dev
|
|
|
76
76
|
| | |
|
|
77
77
|
| --- | --- |
|
|
78
78
|
| Zig | `0.16.0` (`zig cc -target x86_64-linux-musl`, static) |
|
|
79
|
-
| Provenance stamp | `zig-musl/0.16.0+porffor/
|
|
79
|
+
| Provenance stamp | `zig-musl/0.16.0+porffor/deda494+uws/360c276d` |
|
|
80
80
|
| Artifact schema | `2` |
|
|
81
81
|
| Runtime | `native-fetch` |
|
|
82
82
|
| Capability profile | `http-sync-v0` |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sproutboat",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Wrangler-shaped CLI for Sproutboat. Deploys workers to any control plane via --api-url / SPROUTBOAT_API_URL.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cli",
|
|
@@ -64,9 +64,9 @@
|
|
|
64
64
|
"@sproutboat/artifact": "^0.3.0",
|
|
65
65
|
"@sproutboat/assets": "^0.3.0",
|
|
66
66
|
"@sproutboat/config": "^0.5.0",
|
|
67
|
-
"@sproutboat/runtime": "^0.
|
|
68
|
-
"@sproutboat/toolchain": "^0.
|
|
69
|
-
"@sproutboat/wire": "^0.
|
|
67
|
+
"@sproutboat/runtime": "^0.18.0",
|
|
68
|
+
"@sproutboat/toolchain": "^0.9.0",
|
|
69
|
+
"@sproutboat/wire": "^0.13.1"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@oxlint/plugins": "1.85.0",
|
|
@@ -78,10 +78,10 @@
|
|
|
78
78
|
"typescript": "7.0.2"
|
|
79
79
|
},
|
|
80
80
|
"optionalDependencies": {
|
|
81
|
-
"@sproutboat/cli-darwin-arm64": "0.
|
|
82
|
-
"@sproutboat/cli-darwin-x64": "0.
|
|
83
|
-
"@sproutboat/cli-linux-arm64": "0.
|
|
84
|
-
"@sproutboat/cli-linux-x64": "0.
|
|
81
|
+
"@sproutboat/cli-darwin-arm64": "0.18.0",
|
|
82
|
+
"@sproutboat/cli-darwin-x64": "0.18.0",
|
|
83
|
+
"@sproutboat/cli-linux-arm64": "0.18.0",
|
|
84
|
+
"@sproutboat/cli-linux-x64": "0.18.0"
|
|
85
85
|
},
|
|
86
86
|
"engines": {
|
|
87
87
|
"node": ">=18"
|
package/src/compile.ts
CHANGED
|
@@ -120,19 +120,29 @@ let porfforBuildsPruned = false;
|
|
|
120
120
|
* never removes any (one machine had 1,395 of them, 6.3 GB). Drop the ones not
|
|
121
121
|
* compiled in for a week; the only cost is a recompile. Each dir's `flags`
|
|
122
122
|
* stamp is rewritten on every compile, so its mtime is "last used".
|
|
123
|
+
*
|
|
124
|
+
* Age alone does not bound it: every dev session, temp-dir test and scratch
|
|
125
|
+
* build is a new entry path, so another machine reached 923 dirs (10 GB) in
|
|
126
|
+
* three days. Keep only the `keep` most recently used as well (~11 MB each).
|
|
123
127
|
*/
|
|
124
128
|
export async function prunePorfforBuilds(
|
|
125
129
|
root = resolve(process.env.HOME ?? homedir(), ".cache/porffor/build"),
|
|
126
130
|
now = Date.now(),
|
|
131
|
+
keep = 100,
|
|
127
132
|
): Promise<number> {
|
|
128
133
|
porfforBuildsPruned = true;
|
|
129
134
|
const cutoff = now - 7 * 24 * 60 * 60 * 1000;
|
|
130
135
|
const entries: string[] = await readdir(root).catch(() => []);
|
|
131
|
-
|
|
136
|
+
const dirs: { dir: string; used: number }[] = [];
|
|
132
137
|
for (const name of entries) {
|
|
133
138
|
const dir = resolve(root, name);
|
|
134
139
|
const used = (await stat(resolve(dir, "flags")).catch(() => null)) ?? (await stat(dir).catch(() => null));
|
|
135
|
-
if (used
|
|
140
|
+
if (used) dirs.push({ dir, used: used.mtimeMs });
|
|
141
|
+
}
|
|
142
|
+
dirs.sort((a, b) => b.used - a.used);
|
|
143
|
+
let removed = 0;
|
|
144
|
+
for (const [index, { dir, used }] of dirs.entries()) {
|
|
145
|
+
if (used < cutoff || index >= keep) {
|
|
136
146
|
await rm(dir, { recursive: true, force: true });
|
|
137
147
|
removed++;
|
|
138
148
|
}
|