sproutboat 0.16.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 CHANGED
@@ -10,6 +10,53 @@ 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
+
42
+ ## [0.17.0] - 2026-10-11
43
+
44
+ ### Added
45
+
46
+ - Native Web Streams globals and global timeout/interval functions. HTTP bodies
47
+ remain buffered.
48
+ - A pinned Better Auth 1.7.1 integration probe covering email/password signup,
49
+ signed-cookie sessions, wrong-password rejection, signin and signout with
50
+ an explicit memory database adapter and default password hashing.
51
+
52
+ ### Changed
53
+
54
+ - Upgrade to Porffor Alpha 17, fixing dynamic number conversion, Math.round
55
+ ties, negative zero, console precision and class-field captures.
56
+ - Fix lexical local-function return types and Uint8Array base64 options,
57
+ padding and decoding. AES/JWE stateless auth sessions remain unsupported;
58
+ native default password hashing currently takes about six seconds.
59
+
13
60
  ## [0.16.0] - 2026-10-10
14
61
 
15
62
  ### Added
@@ -859,7 +906,10 @@ its own package.
859
906
  - Renamed the package to `sproutboat` (was `@sproutboat/cli`); dropped the
860
907
  `sprout` bin alias in favour of a user-defined shell alias.
861
908
 
862
- [Unreleased]: https://github.com/baronunread/sproutboat-cli/compare/v0.15.0...HEAD
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
863
913
  [0.15.0]: https://github.com/baronunread/sproutboat-cli/compare/v0.14.0...v0.15.0
864
914
  [0.14.0]: https://github.com/baronunread/sproutboat-cli/compare/v0.13.0...v0.14.0
865
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.16.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/43087d4+uws/360c276d` |
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.16.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.15.0",
68
- "@sproutboat/toolchain": "^0.6.0",
69
- "@sproutboat/wire": "^0.11.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.16.0",
82
- "@sproutboat/cli-darwin-x64": "0.16.0",
83
- "@sproutboat/cli-linux-arm64": "0.16.0",
84
- "@sproutboat/cli-linux-x64": "0.16.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
- let removed = 0;
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 && used.mtimeMs < cutoff) {
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
  }