@bowmark/web 1.0.0 → 1.2.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/README.md +27 -13
- package/package.json +1 -1
- package/src/generated/library.d.ts +51970 -2
- package/src/generated/validators.ts +90 -3
- package/src/index.ts +1 -2
package/README.md
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# @bowmark/web
|
|
2
2
|
|
|
3
|
-
> **Status:**
|
|
4
|
-
>
|
|
5
|
-
>
|
|
6
|
-
>
|
|
7
|
-
>
|
|
8
|
-
> step appearing,
|
|
3
|
+
> **Status:** PUBLISHED · `@bowmark/web@1.0.0` on npm, 2026-08-06, alongside
|
|
4
|
+
> `bowmark-web` and `bowmark-web-stubs` on PyPI at the same version. The plan that built it
|
|
5
|
+
> is deleted; the reasoning is in the four
|
|
6
|
+
> [`docs/decisions/2026-08-06-*`](../../../docs/decisions/) records and the enforceable half
|
|
7
|
+
> is [`.claude/rules/public-types.md`](../../../.claude/rules/public-types.md).
|
|
8
|
+
> **What would make this doc wrong:** a build step appearing, the declarations moving out
|
|
9
|
+
> into a second package, or a runtime dependency landing in `package.json`.
|
|
9
10
|
|
|
10
11
|
```sh
|
|
11
12
|
npm i @bowmark/web
|
|
@@ -186,13 +187,20 @@ message.
|
|
|
186
187
|
|
|
187
188
|
**What it fails CLOSED on, and the two things it must not.** A known unit with an
|
|
188
189
|
unknown FUNCTION is refused — the table is authoritative about a unit it carries. An
|
|
189
|
-
unknown UNIT passes straight through, because a
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
190
|
+
unknown UNIT passes straight through, because a family MEMBER (`providers.gymshark`) is
|
|
191
|
+
absent from the RUNTIME validator table **by design** — `listProviders()` excludes
|
|
192
|
+
members and always will — so refusing an unknown unit would refuse the largest part of
|
|
193
|
+
the library. A function with no readable argument shape is an EXPLICIT `null` in the
|
|
194
|
+
table rather than an absence, and passes through; that distinction is what makes the
|
|
194
195
|
first rule safe at all.
|
|
195
196
|
|
|
197
|
+
Note the deliberate asymmetry with the TYPES: since 2026-08-06 a member IS declared in
|
|
198
|
+
`library.d.ts`, so `providers.gymshark.search(…)` completes and type-checks. The two
|
|
199
|
+
answer different questions. Types are a build-time artifact and can afford one line per
|
|
200
|
+
member; the validator table is loaded into every client process at runtime, where 51,711
|
|
201
|
+
entries would be a cost paid on every call to buy nothing — the family's arguments are
|
|
202
|
+
already checked by the shared interface the compiler saw.
|
|
203
|
+
|
|
196
204
|
**A parameter may not offer a type the wire cannot carry.** Every argument crosses as
|
|
197
205
|
JSON on every surface, so `requestedTime?: string | Date` has an arm refused 100% of the
|
|
198
206
|
time while the library says otherwise. `gate:public-types`' `wire-impossible-param`
|
|
@@ -203,10 +211,16 @@ for all 253 typed parameters.
|
|
|
203
211
|
## Regenerating
|
|
204
212
|
|
|
205
213
|
```bash
|
|
206
|
-
pnpm run gen:public-types
|
|
207
|
-
pnpm run gate:public-types
|
|
214
|
+
pnpm run gen:public-types # writes src/generated/{library.d.ts,validators.ts}
|
|
215
|
+
pnpm run gate:public-types # fails on a leak, a new refusal, a wire-impossible type
|
|
216
|
+
pnpm run gate:public-types:drift # …and on the committed copy being stale
|
|
208
217
|
```
|
|
209
218
|
|
|
219
|
+
**Only the middle one runs on your PR, and staleness is deliberately not fatal there.**
|
|
220
|
+
The committed copy goes stale every time any unit anywhere lands a function, which is not
|
|
221
|
+
something your branch can keep true — `regen-public-types.yml` repairs it on `main`. See
|
|
222
|
+
`.claude/rules/public-types.md` § The gate is SPLIT.
|
|
223
|
+
|
|
210
224
|
**`skipLibCheck: false` in this package's `tsconfig.json` is load-bearing**, and the base
|
|
211
225
|
config sets the opposite. That flag skips type checking of every `.d.ts`, and this
|
|
212
226
|
package's whole deliverable IS a `.d.ts` — with the inherited default, `pnpm typecheck`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bowmark/web",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "The public client for the Bowmark capability library — real TypeScript for the whole bowmark.* surface, with no Bowmark source on the caller's disk. ZERO runtime dependencies, deliberately and permanently.",
|
|
6
6
|
"license": "MIT",
|