Skip to content

feat: fork and onboard @unabandoned/JSONStream (vendor through, node:test suite) - #1

Merged
00o-sh merged 4 commits into
masterfrom
claude/jsonstream-fork-repoint-nxxje5
Aug 14, 2026
Merged

feat: fork and onboard @unabandoned/JSONStream (vendor through, node:test suite)#1
00o-sh merged 4 commits into
masterfrom
claude/jsonstream-fork-repoint-nxxje5

Conversation

@00o-sh

@00o-sh 00o-sh commented Aug 14, 2026

Copy link
Copy Markdown

Adopts JSONStream into the unabandoned program. JSONStream is unmaintained (last release 2018) and shipped the abandoned through runtime dependency, so per the org directive (abandoned + any outdated dep → fork and own; fix forward, don't pin) it's a fork/own target. This is the standard @unabandoned onboarding plus a fix-forward cleanup of its tree.

Tracking issue: unabandoned/browser-pack#3

Tree cleanup (fix forward)

  • through → vendored. through is abandoned. It has zero deps of its own and JSONStream's parse()/stringify() streams are built directly on its queue()/write()/end() surface, so it's inlined verbatim at lib/through.js (MIT header preserved) and the external dependency is dropped. Behaviour is identical.
  • jsonparse kept. Zero-dep leaf, still current — kept as the sole runtime dependency, pinned exactly so Renovate tracks it.

Runtime dependency tree after this change: @unabandoned/JSONStream → jsonparse (one leaf, no abandoned deps).

Test suite → node:test

The upstream suite depended on a heavy, abandoned dev tree (tape, it-is, assertions, render, trees, event-stream). It's ported to node:test + node:assert with a near-zero dev tree:

  • tape-based files reuse the shared tap-adapter shim.
  • The it-is / process.on('exit') scripts become explicit node:test cases.
  • Round-trip tests use a small local event-stream shim (readArray/writeArray/connect) instead of the abandoned package.
  • test/run.js (bespoke runner) and the dead gen.js stress script are removed.

Only @commitlint/* remains in devDependencies.

Onboarding

  • Re-scoped to @unabandoned/JSONStream; repo/bugs/homepage URLs updated; engines.node set to >=22.12.
  • Thin reusable-workflow callers pinned to unabandoned/.github (ci, codeql, commitlint, publish, release-please, release-cut, release-security, scorecard, renovate-config).
  • renovate.json (extends shared preset, forkProcessing enabled), release-please config/manifest, commitlint config + commit-msg githook, .npmrc, .gitignore.
  • .unabandoned.yml dashboard metadata listing the four consumers (module-deps, deps-sort, insert-module-globals, browser-pack).

Verification

node --test test/*.js28 tests, 28 pass, 0 fail on Node 22.22 and Node 24.19 (exit 0 on both). Metadata validated with scripts/validate_metadata.py from unabandoned/.github.

Once this releases and publishes, the four consumer forks repoint their JSONStream dependency to npm:@unabandoned/JSONStream@^1 (separate PRs), removing JSONStream from browserify's transitive tree.


Generated by Claude Code

00o-sh added 4 commits August 14, 2026 12:33
… through

Re-scope the package to @unabandoned/JSONStream, point repo/bugs/homepage at
the fork, and set engines.node to >=22.12.

Drop the abandoned through runtime dependency by inlining it at
lib/through.js (it has zero deps of its own and JSONStream's parse/stringify
streams are built directly on its queue/write/end surface, so a drop-in
vendor keeps behaviour identical). Keep jsonparse as the sole runtime dep,
pinned exactly for Renovate to track.
…m dev tree

Rewrite every test against node:test + node:assert. tape-based files reuse the
shared tap-adapter shim; the it-is/process.on('exit') scripts become explicit
node:test cases; and the round-trip tests use a small local event-stream shim
(readArray/writeArray/connect) instead of the abandoned event-stream package.
Remove the bespoke test/run.js runner (node --test replaces it) and the dead
gen.js stress script.
Thin callers pinned to unabandoned/.github reusable-*.yml (ci, codeql,
commitlint, publish, release-please, release-cut, release-security, scorecard,
renovate-config), plus renovate.json (extends the shared preset,
forkProcessing enabled), release-please config/manifest, commitlint config and
the commit-msg githook.
@00o-sh
00o-sh merged commit f11ffef into master Aug 14, 2026
7 checks passed
@00o-sh
00o-sh deleted the claude/jsonstream-fork-repoint-nxxje5 branch August 14, 2026 12:37
00o-sh added a commit that referenced this pull request Aug 14, 2026
Follow-up to #1. The onboarding merged with the package named
`@unabandoned/JSONStream`, but **npm forbids uppercase letters in new
package names** — that name can't be published, and it can't even be
resolved as an `npm:` alias (npm fails name validation with _"name can
no longer contain capital letters"_, which is exactly what broke `npm
install` in the first repoint PR).

This renames the published package to the lowercase
**`@unabandoned/jsonstream`**.

What does **not** change:
- The GitHub repo stays `unabandoned/JSONStream`.
- Consumers keep the dependency **key** `JSONStream`, aliased to
`npm:@unabandoned/jsonstream@^1`, so `node_modules/JSONStream` and
`require('JSONStream')` are unchanged — no consumer code changes.
- The `JSONStream.parse` / `JSONStream.stringify` API is untouched.

Also updates `package` in `.unabandoned.yml` to match (validated).

`node --test test/*.js` still passes (28/28) — the rename is inert to
behaviour.

---
_Generated by [Claude
Code](https://claude.ai/code/session_01Wa4Hra9ctCDzbpPUaQB9mG)_
00o-sh added a commit that referenced this pull request Aug 14, 2026
🤖 I have created a release *beep* *boop*
---


##
[1.4.0](jsonstream-v1.3.5...jsonstream-v1.4.0)
(2026-08-14)


### Features

* add option for emitting keys
([9aa2446](9aa2446))
* fork and onboard @unabandoned/JSONStream (vendor through, node:test
suite) ([#1](#1))
([f11ffef](f11ffef))


### Bug Fixes

* lowercase npm package name to @unabandoned/jsonstream
([#4](#4))
([76dfce6](76dfce6))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
00o-sh added a commit to unabandoned/deps-sort that referenced this pull request Aug 14, 2026
Repoints the `JSONStream` runtime dependency to
`npm:@unabandoned/jsonstream@^1`, so the abandoned upstream (and its
abandoned `through` dependency) leaves deps-sort' transitive tree. Part
of adopting JSONStream into the program — see unabandoned/JSONStream#1 /
unabandoned/JSONStream#4 and the tracking issue
unabandoned/browser-pack#3.

The dependency **key** stays `JSONStream` (aliased to
`npm:@unabandoned/jsonstream`), so `node_modules/JSONStream` and
`require('JSONStream')` are unchanged — the fork is a drop-in with the
same `JSONStream.parse` / `JSONStream.stringify` API, no code changes.

## Verification

Installed deps-sort's full tree with `@unabandoned/jsonstream` (packed
from the fork) standing in for the alias and ran the suite: **9 tests, 9
pass, 0 fail** on Node 22.22 and Node 24.19. `require('JSONStream')`
resolved to the fork.

## Ordering note

⚠️ **CI here stays red until `@unabandoned/jsonstream` is published to
npm** (unabandoned/JSONStream#4 → release → publish). `npm install`
can't resolve the alias until then; this is the expected
publish-ordering dependency, verified above via a local install of the
exact package contents. Holding ready-for-review in the meantime.

---
_Generated by [Claude
Code](https://claude.ai/code/session_01Wa4Hra9ctCDzbpPUaQB9mG)_
00o-sh added a commit to unabandoned/module-deps that referenced this pull request Aug 14, 2026
Repoints the `JSONStream` runtime dependency to
`npm:@unabandoned/JSONStream@^1`, so the abandoned upstream (and its
abandoned `through` dependency) leaves module-deps' transitive tree.
Part of adopting JSONStream into the program — see
unabandoned/JSONStream#1 and the tracking issue
unabandoned/browser-pack#3.

The fork is a drop-in: same `JSONStream.parse` / `JSONStream.stringify`
API, so `require('JSONStream')` is unchanged and there are no code
changes — only the dependency spec.

## Verification

Installed module-deps' full tree with `@unabandoned/JSONStream` (packed
from unabandoned/JSONStream#1) standing in for the alias and ran the
suite: **51 tests, 51 pass, 0 fail** on Node 22.22 and Node 24.19.
`require('JSONStream')` resolved to the fork.

## Ordering note

⚠️ **CI here will stay red until `@unabandoned/JSONStream` is published
to npm** — `npm install` can't resolve `npm:@unabandoned/JSONStream@^1`
until then. This is the expected publish-ordering dependency: merge +
release + publish unabandoned/JSONStream#1 first, then re-run CI on this
PR and it will go green (verified above via a local install of the exact
package contents). Holding this PR ready-for-review in the meantime.

---
_Generated by [Claude
Code](https://claude.ai/code/session_01Wa4Hra9ctCDzbpPUaQB9mG)_
00o-sh added a commit to unabandoned/insert-module-globals that referenced this pull request Aug 14, 2026
Repoints the `JSONStream` runtime dependency to
`npm:@unabandoned/jsonstream@^1`, so the abandoned upstream (and its
abandoned `through` dependency) leaves insert-module-globals' transitive
tree. Part of adopting JSONStream into the program — see
unabandoned/JSONStream#1 / unabandoned/JSONStream#4 and the tracking
issue unabandoned/browser-pack#3.

The dependency **key** stays `JSONStream` (aliased to
`npm:@unabandoned/jsonstream`), so `node_modules/JSONStream` and
`require('JSONStream')` are unchanged — the fork is a drop-in with the
same `JSONStream.parse` / `JSONStream.stringify` API, no code changes.

## Verification

Installed the full tree with `@unabandoned/jsonstream` (packed from the
fork) standing in for the alias and ran the suite: **17 pass, 0 fail, 1
skip** (the pre-existing `windows partitions` platform skip) on Node
22.22 and Node 24.19. `require('JSONStream')` resolved to the fork.

## Ordering note

⚠️ **CI here stays red until `@unabandoned/jsonstream` is published to
npm** (unabandoned/JSONStream#4 → release → publish). `npm install`
can't resolve the alias until then; this is the expected
publish-ordering dependency, verified above via a local install of the
exact package contents. Holding ready-for-review in the meantime.

---
_Generated by [Claude
Code](https://claude.ai/code/session_01Wa4Hra9ctCDzbpPUaQB9mG)_
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant