diff options
| author | Uttkarsh <38376852+uttkarsh-26@users.noreply.github.com> | 2026-10-11 23:40:29 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-10-11 23:40:29 +0530 |
| commit | 79526b01f4d3cf16c3cfb46313cf1179f0db40ac (patch) | |
| tree | 31b2b9f53d6eb16ea018da5533c887ba1e4c5d35 /test | |
| parent | 0fe64593bcc3379032840b35833ea39f23aa9322 (diff) | |
test: keep host-provided packages out of dependencies (#36)
Adds a manifest guard (scripts/check-manifest.ts + test/util/manifest-test.ts) so npm run check
fails if a host-provided package such as typebox lands in dependencies, plus a daemon-startup
troubleshooting section in the skill.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat (limited to 'test')
| -rw-r--r-- | test/util/manifest-test.ts | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/test/util/manifest-test.ts b/test/util/manifest-test.ts new file mode 100644 index 0000000..6fcf136 --- /dev/null +++ b/test/util/manifest-test.ts @@ -0,0 +1,49 @@ +import { test, describe } from "node:test"; +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { findHostProvidedDependencies } from "../../scripts/check-manifest"; + +describe("host-provided manifest contract", () => { + test("flags host-provided packages listed in dependencies", () => { + const manifest = { dependencies: { ws: "^8.20.0", typebox: "^1.3.34" } }; + assert.deepEqual(findHostProvidedDependencies(manifest), ["typebox"]); + }); + + test("recognises every pi-provided package", () => { + const manifest = { + dependencies: { + typebox: "*", + "@sinclair/typebox": "*", + "@mariozechner/pi-tui": "*", + "@earendil-works/pi-coding-agent": "*", + }, + }; + assert.deepEqual(findHostProvidedDependencies(manifest), [ + "@earendil-works/pi-coding-agent", + "@mariozechner/pi-tui", + "@sinclair/typebox", + "typebox", + ]); + }); + + test("ignores peer and devDependencies", () => { + const manifest = { + peerDependencies: { typebox: "*" }, + devDependencies: { typebox: "*" }, + }; + assert.deepEqual(findHostProvidedDependencies(manifest), []); + }); + + test("tolerates a missing or malformed dependencies field", () => { + assert.deepEqual(findHostProvidedDependencies({}), []); + assert.deepEqual(findHostProvidedDependencies({ dependencies: null }), []); + assert.deepEqual(findHostProvidedDependencies({ dependencies: [] }), []); + }); + + test("this package declares no host-provided dependencies", () => { + const manifest = JSON.parse( + readFileSync(new URL("../../package.json", import.meta.url), "utf8") + ); + assert.deepEqual(findHostProvidedDependencies(manifest), []); + }); +}); |
