@nifrajs/core 5.10.0 → 5.11.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
@@ -1,5 +1,16 @@
1
1
  # @nifrajs/core
2
2
 
3
+ ## 5.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - d76f9d7: The three auth packages' guards deny a missing session through one owner: `@nifrajs/core/guard-deny` now holds `UnauthenticatedResponse`, the default `401` it builds (`unauthenticatedResult`), and the fail-loud check `assertUnauthenticated`, which refuses a denial that both redirects and answers, and a status outside 400-599. A new argument carries the package name, so every error keeps its prefix (`[nifra/auth]`, `[nifra/authjs]`, `[nifra/better-auth]`). Each package re-exports `UnauthenticatedResponse` and keeps its own guard options and its redirect rejection; no behavior and no message changed. The new subpath imports only the status lane, so it costs nothing beyond the grammar itself.
8
+
9
+ ### Patch Changes
10
+
11
+ - 9a0f0a0: `withIdleTimeout(c, seconds, work)` accepts the context of any route, including one that declares a `body`, `query` or `headers` schema.
12
+ - abf5a0b: Resolve the single-copy declaration from the app root when Bun runs a filtered workspace script.
13
+
3
14
  ## 5.10.0
4
15
 
5
16
  ### Minor Changes
@@ -9,6 +9,7 @@
9
9
  *
10
10
  * - {@link readBodyFramed} read + cap + proto-guard + content-type framing (JSON / urlencoded / 415)
11
11
  * - {@link capBodyBytes} the same byte cap on a handler's own reads of the raw request
12
+ * - {@link boundedJsonText} preflight JSON output against an exact UTF-8 byte budget
12
13
  * - {@link renderResult} render a {@link ResponseResult} (e.g. a 413 / 415 rejection) to a `Response`
13
14
  * - {@link toResponse} render any handler result, a handler's own `Response` included
14
15
  * - {@link plainError} the structured rejection envelope the lane returns
@@ -23,7 +24,7 @@ export { type ErrorLogDetail, emitRequestErrorLog } from "./server/bare-error-la
23
24
  export { assertByteLimit, capBodyBytes } from "./server/body.js";
24
25
  export { type FormOrigins, readBodyFramed } from "./server/body-lane.js";
25
26
  export { plainError } from "./server/http.js";
26
- export { jsonResponse } from "./server/json-response.js";
27
+ export { boundedJsonText, JsonByteLimitError, jsonResponse } from "./server/json-response.js";
27
28
  export { answerNotFound, type NotFoundHandler, type NotFoundInput, notFoundInput, } from "./server/not-found-answer.js";
28
29
  export type { ProtoPoisoning } from "./server/proto-guard.js";
29
30
  export { type QueryValue, queryObjectOf, searchOf } from "./server/query.js";
@@ -1 +1 @@
1
- {"version":3,"file":"edge-kit.d.ts","sourceRoot":"","sources":["../src/edge-kit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,aAAa,GACd,MAAM,8BAA8B,CAAA;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAClE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"edge-kit.d.ts","sourceRoot":"","sources":["../src/edge-kit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7F,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,aAAa,GACd,MAAM,8BAA8B,CAAA;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAClE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA"}
package/dist/edge-kit.js CHANGED
@@ -9,6 +9,7 @@
9
9
  *
10
10
  * - {@link readBodyFramed} read + cap + proto-guard + content-type framing (JSON / urlencoded / 415)
11
11
  * - {@link capBodyBytes} the same byte cap on a handler's own reads of the raw request
12
+ * - {@link boundedJsonText} preflight JSON output against an exact UTF-8 byte budget
12
13
  * - {@link renderResult} render a {@link ResponseResult} (e.g. a 413 / 415 rejection) to a `Response`
13
14
  * - {@link toResponse} render any handler result, a handler's own `Response` included
14
15
  * - {@link plainError} the structured rejection envelope the lane returns
@@ -23,7 +24,7 @@ export { emitRequestErrorLog } from "./server/bare-error-lane.js";
23
24
  export { assertByteLimit, capBodyBytes } from "./server/body.js";
24
25
  export { readBodyFramed } from "./server/body-lane.js";
25
26
  export { plainError } from "./server/http.js";
26
- export { jsonResponse } from "./server/json-response.js";
27
+ export { boundedJsonText, JsonByteLimitError, jsonResponse } from "./server/json-response.js";
27
28
  export { answerNotFound, notFoundInput, } from "./server/not-found-answer.js";
28
29
  export { queryObjectOf, searchOf } from "./server/query.js";
29
30
  export { renderResult, toResponse } from "./server/respond.js";
@@ -1 +1 @@
1
- {"version":3,"file":"edge-kit.js","sourceRoot":"","sources":["../src/edge-kit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAuB,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAoB,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EACL,cAAc,EAGd,aAAa,GACd,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAmB,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAElE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"edge-kit.js","sourceRoot":"","sources":["../src/edge-kit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAuB,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAoB,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7F,OAAO,EACL,cAAc,EAGd,aAAa,GACd,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAmB,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAElE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The denial grammar the three auth packages' route guards share: what a guard rejects a missing
3
+ * session with. `@nifrajs/auth`, `@nifrajs/authjs` and `@nifrajs/better-auth` each keep their own
4
+ * options shape and their own redirect rejection; this subpath owns the `unauthenticated` response
5
+ * type, its construction, and the two fail-loud dev-config checks, so the three cannot drift: a
6
+ * fix made here holds for every guard family at once.
7
+ *
8
+ * The module imports only the status lane, so an app whose guards use it pays nothing besides the
9
+ * grammar itself.
10
+ */
11
+ import { type ResponseResult } from "./server/runtime-core.js";
12
+ /**
13
+ * The response a guard denies a missing session with, in place of the default `401` JSON. Every
14
+ * nifra auth package's guard options named `unauthenticated` takes this shape.
15
+ */
16
+ export interface UnauthenticatedResponse {
17
+ /** An error status, 400-599. Default `401`. */
18
+ readonly status?: number;
19
+ /** The body; present but `undefined` sends none. Default `{ ok: false, error: "unauthorized" }`. */
20
+ readonly body?: unknown;
21
+ /** Response headers, such as a `www-authenticate` challenge. */
22
+ readonly headers?: Readonly<Record<string, string>>;
23
+ }
24
+ /**
25
+ * A dev-authored denial that is not an error status, or that competes with a redirect, fails loud.
26
+ * A mutation-taking guard must say one thing, and `unauthenticated.status` must stay an HTTP error
27
+ * status. `owner` names the package in the message: `[nifra/<owner>]`.
28
+ */
29
+ export declare function assertUnauthenticated(options: {
30
+ readonly redirectTo?: string;
31
+ readonly unauthenticated?: UnauthenticatedResponse;
32
+ }, owner: string): void;
33
+ /**
34
+ * The response one guard rejection carries: what the options declared, or the default `401` JSON
35
+ * (`{ ok: false, error: "unauthorized" }`). An explicit `body` of `undefined` sends no body.
36
+ */
37
+ export declare function unauthenticatedResult(custom: UnauthenticatedResponse | undefined): ResponseResult;
38
+ //# sourceMappingURL=guard-deny.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard-deny.d.ts","sourceRoot":"","sources":["../src/guard-deny.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,KAAK,cAAc,EAAU,MAAM,0BAA0B,CAAA;AAKtE;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,oGAAoG;IACpG,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACpD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,uBAAuB,CAAA;CAAE,EAC7F,KAAK,EAAE,MAAM,GACZ,IAAI,CAYN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,uBAAuB,GAAG,SAAS,GAAG,cAAc,CAMjG"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The denial grammar the three auth packages' route guards share: what a guard rejects a missing
3
+ * session with. `@nifrajs/auth`, `@nifrajs/authjs` and `@nifrajs/better-auth` each keep their own
4
+ * options shape and their own redirect rejection; this subpath owns the `unauthenticated` response
5
+ * type, its construction, and the two fail-loud dev-config checks, so the three cannot drift: a
6
+ * fix made here holds for every guard family at once.
7
+ *
8
+ * The module imports only the status lane, so an app whose guards use it pays nothing besides the
9
+ * grammar itself.
10
+ */
11
+ import { status } from "./server/runtime-core.js";
12
+ /** The body a guard sends when the app did not declare its own. */
13
+ const UNAUTHORIZED = { ok: false, error: "unauthorized" };
14
+ /**
15
+ * A dev-authored denial that is not an error status, or that competes with a redirect, fails loud.
16
+ * A mutation-taking guard must say one thing, and `unauthenticated.status` must stay an HTTP error
17
+ * status. `owner` names the package in the message: `[nifra/<owner>]`.
18
+ */
19
+ export function assertUnauthenticated(options, owner) {
20
+ const custom = options.unauthenticated;
21
+ if (custom === undefined)
22
+ return;
23
+ if (options.redirectTo !== undefined) {
24
+ throw new Error(`[nifra/${owner}] a guard takes redirectTo or unauthenticated, not both`);
25
+ }
26
+ const code = custom.status;
27
+ if (code !== undefined && (!Number.isInteger(code) || code < 400 || code > 599)) {
28
+ throw new RangeError(`[nifra/${owner}] guard unauthenticated.status must be an integer 400-599 (got ${String(code)})`);
29
+ }
30
+ }
31
+ /**
32
+ * The response one guard rejection carries: what the options declared, or the default `401` JSON
33
+ * (`{ ok: false, error: "unauthorized" }`). An explicit `body` of `undefined` sends no body.
34
+ */
35
+ export function unauthenticatedResult(custom) {
36
+ if (custom === undefined)
37
+ return status(401, UNAUTHORIZED);
38
+ const body = "body" in custom ? custom.body : UNAUTHORIZED;
39
+ return custom.headers === undefined
40
+ ? status(custom.status ?? 401, body)
41
+ : status(custom.status ?? 401, body, { headers: custom.headers });
42
+ }
43
+ //# sourceMappingURL=guard-deny.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard-deny.js","sourceRoot":"","sources":["../src/guard-deny.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAuB,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEtE,mEAAmE;AACnE,MAAM,YAAY,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAW,CAAA;AAelE;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA6F,EAC7F,KAAa;IAEb,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAA;IACtC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAM;IAChC,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,yDAAyD,CAAC,CAAA;IAC3F,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;IAC1B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,UAAU,CAClB,UAAU,KAAK,kEAAkE,MAAM,CAAC,IAAI,CAAC,GAAG,CACjG,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA2C;IAC/E,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAA;IAC1D,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS;QACjC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,IAAI,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;AACrE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@
15
15
  * read its own package.json at runtime. `scripts/version.ts` rewrites it on every release bump and
16
16
  * `check:publish` asserts it equals `@nifrajs/core`'s package version.
17
17
  */
18
- export declare const VERSION: "5.10.0";
18
+ export declare const VERSION: "5.11.0";
19
19
  export type Version = typeof VERSION;
20
20
  export { FrameworkError, RouteConfigError, type RouteConfigErrorCode } from "./errors.js";
21
21
  export { FRAMEWORK_NAME, type FrameworkName } from "./internal/brand.js";
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@
15
15
  * read its own package.json at runtime. `scripts/version.ts` rewrites it on every release bump and
16
16
  * `check:publish` asserts it equals `@nifrajs/core`'s package version.
17
17
  */
18
- export const VERSION = "5.10.0";
18
+ export const VERSION = "5.11.0";
19
19
  export { FrameworkError, RouteConfigError } from "./errors.js";
20
20
  export { FRAMEWORK_NAME } from "./internal/brand.js";
21
21
  export { isSameOriginForm, isSameOriginRequest } from "./internal/same-origin.js";
@@ -22,7 +22,7 @@ if (!copies.includes(here) && copies.push(here) > 1) {
22
22
  }
23
23
  /** This copy's version: a literal like the package root's `VERSION` (no fs on the edge), which
24
24
  * `scripts/version.ts` rewrites on every release and `check:publish` asserts. */
25
- const COPY_VERSION = "5.10.0";
25
+ const COPY_VERSION = "5.11.0";
26
26
  /** Record this copy's version beside its URL. Called by each `server()` behind the development guard,
27
27
  * so a production bundle drops it with the version; a copy that built a server has recorded one. */
28
28
  export function recordCopyVersion() {
@@ -34,6 +34,6 @@ type MaybePromise<T> = T | Promise<T>;
34
34
  * app.around((c, next) => withIdleTimeout(c, 120, next))
35
35
  * ```
36
36
  */
37
- export declare function withIdleTimeout<T>(c: Context, seconds: number, work: () => MaybePromise<T>): MaybePromise<T>;
37
+ export declare function withIdleTimeout<T>(c: Pick<Context, "signal">, seconds: number, work: () => MaybePromise<T>): MaybePromise<T>;
38
38
  export {};
39
39
  //# sourceMappingURL=idle-timeout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"idle-timeout.d.ts","sourceRoot":"","sources":["../../src/server/idle-timeout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAWrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,CAAC,EAAE,OAAO,EACV,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,GAC1B,YAAY,CAAC,CAAC,CAAC,CAsDjB"}
1
+ {"version":3,"file":"idle-timeout.d.ts","sourceRoot":"","sources":["../../src/server/idle-timeout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAWrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,GAC1B,YAAY,CAAC,CAAC,CAAC,CAoDjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"idle-timeout.js","sourceRoot":"","sources":["../../src/server/idle-timeout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idle-timeout.js","sourceRoot":"","sources":["../../src/server/idle-timeout.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,17 @@
1
+ /** A JSON value would exceed the caller's UTF-8 byte budget. */
2
+ export declare class JsonByteLimitError extends RangeError {
3
+ constructor();
4
+ }
5
+ /**
6
+ * Serialize a JSON value only when its exact UTF-8 size fits `maxBytes`. The preflight snapshots
7
+ * enumerable values and `toJSON` results while counting, so an oversized output is rejected before
8
+ * constructing the escaped JSON string or its encoded byte buffer. Returns `undefined` for a root
9
+ * value with no JSON representation, matching `JSON.stringify`.
10
+ */
11
+ export declare function boundedJsonText(value: unknown, maxBytes: number): {
12
+ readonly text: string;
13
+ readonly byteLength: number;
14
+ } | undefined;
1
15
  /** `Response.json`, with each `bigint` written as its decimal string, as `jsonText` writes it. */
2
16
  export declare function jsonResponse(value: unknown, init?: ResponseInit): Response;
3
17
  //# sourceMappingURL=json-response.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-response.d.ts","sourceRoot":"","sources":["../../src/server/json-response.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAS1E"}
1
+ {"version":3,"file":"json-response.d.ts","sourceRoot":"","sources":["../../src/server/json-response.ts"],"names":[],"mappings":"AAGA,gEAAgE;AAChE,qBAAa,kBAAmB,SAAQ,UAAU;;CAKjD;AAsLD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CASpE;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAS1E"}
@@ -1,4 +1,209 @@
1
+ import { isRawJson } from "./json-shared.js";
1
2
  import { retried } from "./json-text.js";
3
+ /** A JSON value would exceed the caller's UTF-8 byte budget. */
4
+ export class JsonByteLimitError extends RangeError {
5
+ constructor() {
6
+ super("JSON output exceeds the byte limit");
7
+ this.name = "JsonByteLimitError";
8
+ }
9
+ }
10
+ const OMIT_JSON_VALUE = Symbol("nifra.omitJsonValue");
11
+ function addJsonBytes(budget, bytes) {
12
+ if (bytes > budget.maxBytes - budget.usedBytes)
13
+ throw new JsonByteLimitError();
14
+ budget.usedBytes += bytes;
15
+ }
16
+ /** Count a quoted JSON string without allocating its escaped representation. */
17
+ function countQuotedJsonString(value, budget) {
18
+ addJsonBytes(budget, 2); // opening and closing quotes
19
+ for (let index = 0; index < value.length; index++) {
20
+ const code = value.charCodeAt(index);
21
+ if (code === 0x22 ||
22
+ code === 0x5c ||
23
+ code === 0x08 ||
24
+ code === 0x09 ||
25
+ code === 0x0a ||
26
+ code === 0x0c ||
27
+ code === 0x0d) {
28
+ addJsonBytes(budget, 2);
29
+ }
30
+ else if (code < 0x20) {
31
+ addJsonBytes(budget, 6); // \\u00xx
32
+ }
33
+ else if (code >= 0xd800 && code <= 0xdbff) {
34
+ const next = value.charCodeAt(index + 1);
35
+ if (next >= 0xdc00 && next <= 0xdfff) {
36
+ addJsonBytes(budget, 4);
37
+ index++;
38
+ }
39
+ else {
40
+ addJsonBytes(budget, 6); // well-formed JSON escapes a lone surrogate
41
+ }
42
+ }
43
+ else if (code >= 0xdc00 && code <= 0xdfff) {
44
+ addJsonBytes(budget, 6);
45
+ }
46
+ else {
47
+ addJsonBytes(budget, code < 0x80 ? 1 : code < 0x800 ? 2 : 3);
48
+ }
49
+ }
50
+ }
51
+ /** Count the UTF-8 bytes of an already-encoded JSON fragment. */
52
+ function countRawJsonBytes(value, budget) {
53
+ for (let index = 0; index < value.length; index++) {
54
+ const code = value.charCodeAt(index);
55
+ const next = value.charCodeAt(index + 1);
56
+ if (code >= 0xd800 && code <= 0xdbff && next >= 0xdc00 && next <= 0xdfff) {
57
+ addJsonBytes(budget, 4);
58
+ index++;
59
+ }
60
+ else
61
+ addJsonBytes(budget, code < 0x80 ? 1 : code < 0x800 ? 2 : 3);
62
+ }
63
+ }
64
+ function ownJsonValue(value, key) {
65
+ const toJSON = Reflect.get(value, "toJSON");
66
+ return typeof toJSON === "function" ? Reflect.apply(toJSON, value, [key]) : value;
67
+ }
68
+ function normalizedJsonValue(value, key, budget, ancestors) {
69
+ if (typeof value === "object" && value !== null && isRawJson?.(value) === true) {
70
+ const raw = Reflect.get(value, "rawJSON");
71
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The runtime guard below verifies this optional JSON.rawJSON extension is callable before use.
72
+ const rawJSON = JSON.rawJSON;
73
+ if (typeof raw !== "string" || typeof rawJSON !== "function")
74
+ throw new TypeError("Could not serialize JSON.rawJSON");
75
+ countRawJsonBytes(raw, budget);
76
+ return rawJSON(raw);
77
+ }
78
+ if ((typeof value === "object" && value !== null) || typeof value === "function") {
79
+ value = ownJsonValue(value, key);
80
+ }
81
+ else if (typeof value === "bigint") {
82
+ const boxed = Object(value);
83
+ const toJSON = Reflect.get(boxed, "toJSON");
84
+ if (typeof toJSON === "function")
85
+ value = Reflect.apply(toJSON, boxed, [key]);
86
+ }
87
+ if (value === null) {
88
+ addJsonBytes(budget, 4);
89
+ return null;
90
+ }
91
+ if (typeof value === "string") {
92
+ countQuotedJsonString(value, budget);
93
+ return value;
94
+ }
95
+ if (typeof value === "boolean") {
96
+ addJsonBytes(budget, value ? 4 : 5);
97
+ return value;
98
+ }
99
+ if (typeof value === "number") {
100
+ const text = JSON.stringify(value);
101
+ addJsonBytes(budget, text.length); // JSON numbers are ASCII.
102
+ return value;
103
+ }
104
+ if (typeof value === "undefined" || typeof value === "function" || typeof value === "symbol")
105
+ return OMIT_JSON_VALUE;
106
+ if (typeof value === "bigint")
107
+ throw new TypeError("Do not know how to serialize a BigInt");
108
+ // JSON.stringify unwraps primitive wrapper objects before writing them.
109
+ try {
110
+ return normalizedJsonValue(Number.prototype.valueOf.call(value), key, budget, ancestors);
111
+ }
112
+ catch (error) {
113
+ if (error instanceof JsonByteLimitError)
114
+ throw error;
115
+ }
116
+ try {
117
+ return normalizedJsonValue(String.prototype.valueOf.call(value), key, budget, ancestors);
118
+ }
119
+ catch (error) {
120
+ if (error instanceof JsonByteLimitError)
121
+ throw error;
122
+ }
123
+ try {
124
+ return normalizedJsonValue(Boolean.prototype.valueOf.call(value), key, budget, ancestors);
125
+ }
126
+ catch (error) {
127
+ if (error instanceof JsonByteLimitError)
128
+ throw error;
129
+ }
130
+ try {
131
+ BigInt.prototype.valueOf.call(value);
132
+ }
133
+ catch {
134
+ // Not a boxed BigInt; continue with ordinary object serialization.
135
+ return normalizeJsonObject(value, budget, ancestors);
136
+ }
137
+ throw new TypeError("Do not know how to serialize a BigInt");
138
+ }
139
+ function normalizeJsonObject(object, budget, ancestors) {
140
+ if (ancestors.has(object))
141
+ throw new TypeError("Converting circular structure to JSON");
142
+ ancestors.add(object);
143
+ try {
144
+ if (Array.isArray(object)) {
145
+ addJsonBytes(budget, 1); // [
146
+ const result = Object.setPrototypeOf([], null);
147
+ const length = object.length;
148
+ for (let index = 0; index < length; index++) {
149
+ if (index > 0)
150
+ addJsonBytes(budget, 1);
151
+ const key = String(index);
152
+ const item = normalizedJsonValue(Reflect.get(object, key), key, budget, ancestors);
153
+ if (item === OMIT_JSON_VALUE) {
154
+ addJsonBytes(budget, 4);
155
+ result[index] = null;
156
+ }
157
+ else
158
+ result[index] = item;
159
+ }
160
+ addJsonBytes(budget, 1); // ]
161
+ return result;
162
+ }
163
+ addJsonBytes(budget, 1); // {
164
+ const result = Object.create(null);
165
+ let first = true;
166
+ for (const property of Object.keys(object)) {
167
+ const item = normalizedJsonValue(Reflect.get(object, property), property, budget, ancestors);
168
+ if (item === OMIT_JSON_VALUE)
169
+ continue;
170
+ if (!first)
171
+ addJsonBytes(budget, 1);
172
+ countQuotedJsonString(property, budget);
173
+ addJsonBytes(budget, 1); // :
174
+ first = false;
175
+ Object.defineProperty(result, property, {
176
+ configurable: true,
177
+ enumerable: true,
178
+ value: item,
179
+ writable: true,
180
+ });
181
+ }
182
+ addJsonBytes(budget, 1); // }
183
+ return result;
184
+ }
185
+ finally {
186
+ ancestors.delete(object);
187
+ }
188
+ }
189
+ /**
190
+ * Serialize a JSON value only when its exact UTF-8 size fits `maxBytes`. The preflight snapshots
191
+ * enumerable values and `toJSON` results while counting, so an oversized output is rejected before
192
+ * constructing the escaped JSON string or its encoded byte buffer. Returns `undefined` for a root
193
+ * value with no JSON representation, matching `JSON.stringify`.
194
+ */
195
+ export function boundedJsonText(value, maxBytes) {
196
+ if (!Number.isSafeInteger(maxBytes) || maxBytes < 0)
197
+ throw new RangeError("maxBytes must be a non-negative safe integer");
198
+ const budget = { maxBytes, usedBytes: 0 };
199
+ const normalized = normalizedJsonValue(value, "", budget, new Set());
200
+ if (normalized === OMIT_JSON_VALUE)
201
+ return undefined;
202
+ const text = JSON.stringify(normalized);
203
+ if (text === undefined)
204
+ return undefined;
205
+ return { text, byteLength: budget.usedBytes };
206
+ }
2
207
  /** `Response.json`, with each `bigint` written as its decimal string, as `jsonText` writes it. */
3
208
  export function jsonResponse(value, init) {
4
209
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"json-response.js","sourceRoot":"","sources":["../../src/server/json-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,kGAAkG;AAClG,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,IAAmB;IAC9D,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAClC,2FAA2F;QAC3F,wCAAwC;QACxC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACjF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"json-response.js","sourceRoot":"","sources":["../../src/server/json-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,gEAAgE;AAChE,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD;QACE,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAED,MAAM,eAAe,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAA;AAOrD,SAAS,YAAY,CAAC,MAAkB,EAAE,KAAa;IACrD,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS;QAAE,MAAM,IAAI,kBAAkB,EAAE,CAAA;IAC9E,MAAM,CAAC,SAAS,IAAI,KAAK,CAAA;AAC3B,CAAC;AAED,gFAAgF;AAChF,SAAS,qBAAqB,CAAC,KAAa,EAAE,MAAkB;IAC9D,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,CAAC,6BAA6B;IACrD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACpC,IACE,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI;YACb,IAAI,KAAK,IAAI,EACb,CAAC;YACD,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACzB,CAAC;aAAM,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;YACvB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,CAAC,UAAU;QACpC,CAAC;aAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;YACxC,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACrC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBACvB,KAAK,EAAE,CAAA;YACT,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,CAAC,4CAA4C;YACtE,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YAC5C,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,SAAS,iBAAiB,CAAC,KAAa,EAAE,MAAkB;IAC1D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QACxC,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACzE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACvB,KAAK,EAAE,CAAA;QACT,CAAC;;YAAM,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,GAAW;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC3C,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AACnF,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAc,EACd,GAAW,EACX,MAAkB,EAClB,SAAsB;IAEtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACzC,+JAA+J;QAC/J,MAAM,OAAO,GAAI,IAAgE,CAAC,OAAO,CAAA;QACzF,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,UAAU;YAC1D,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAA;QACzD,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;IACrB,CAAC;IACD,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QACjF,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAClC,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAC3C,IAAI,OAAO,MAAM,KAAK,UAAU;YAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/E,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACpC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACnC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE,CAAA;QACnC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC,0BAA0B;QAC5D,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC1F,OAAO,eAAe,CAAA;IACxB,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAA;IAE3F,wEAAwE;IACxE,IAAI,CAAC;QACH,OAAO,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC1F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,kBAAkB;YAAE,MAAM,KAAK,CAAA;IACtD,CAAC;IACD,IAAI,CAAC;QACH,OAAO,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC1F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,kBAAkB;YAAE,MAAM,KAAK,CAAA;IACtD,CAAC;IACD,IAAI,CAAC;QACH,OAAO,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAC3F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,kBAAkB;YAAE,MAAM,KAAK,CAAA;IACtD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;QACnE,OAAO,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IACtD,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAA;AAC9D,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAc,EACd,MAAkB,EAClB,SAAsB;IAEtB,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAA;IACvF,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACrB,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,CAAC,IAAI;YAC5B,MAAM,MAAM,GAAc,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC5C,IAAI,KAAK,GAAG,CAAC;oBAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBACtC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;gBACzB,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;gBAClF,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;oBAC7B,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;oBACvB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;gBACtB,CAAC;;oBAAM,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;YAC7B,CAAC;YACD,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,CAAC,IAAI;YAC5B,OAAO,MAAM,CAAA;QACf,CAAC;QAED,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,CAAC,IAAI;QAC5B,MAAM,MAAM,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC3D,IAAI,KAAK,GAAG,IAAI,CAAA;QAChB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;YAC5F,IAAI,IAAI,KAAK,eAAe;gBAAE,SAAQ;YACtC,IAAI,CAAC,KAAK;gBAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACnC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;YACvC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,CAAC,IAAI;YAC5B,KAAK,GAAG,KAAK,CAAA;YACb,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;gBACtC,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAI;aACf,CAAC,CAAA;QACJ,CAAC;QACD,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,CAAC,IAAI;QAC5B,OAAO,MAAM,CAAA;IACf,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAc,EACd,QAAgB;IAEhB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;QACjD,MAAM,IAAI,UAAU,CAAC,8CAA8C,CAAC,CAAA;IACtE,MAAM,MAAM,GAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,CAAA;IACrD,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;IACpE,IAAI,UAAU,KAAK,eAAe;QAAE,OAAO,SAAS,CAAA;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IACvC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACxC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,CAAA;AAC/C,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,IAAmB;IAC9D,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAClC,2FAA2F;QAC3F,wCAAwC;QACxC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACjF,CAAC;AACH,CAAC"}
@@ -14,10 +14,12 @@
14
14
  * A resolver only affects imports that have not resolved yet, and a module's own imports resolve
15
15
  * before its body runs. Registering from inside application code would therefore miss exactly the
16
16
  * imports it exists to redirect. `preload` runs before the entry point, which is the only moment that
17
- * covers the whole graph.
17
+ * covers the whole graph. When Bun starts a filtered workspace script below the app root, the
18
+ * registrar finds the nearest ancestor package declaring `nifra.singleCopy` and passes that root to
19
+ * the resolver instead of planning against the workspace package's manifest.
18
20
  *
19
- * `nifra check` reads this specifier out of `bunfig.toml` as the proof that the runtime arm is armed,
20
- * so the string above is a contract rather than a suggestion.
21
+ * `nifra check` recognizes this public specifier and verifies checkout-local relative preloads before
22
+ * treating them as proof that the runtime arm is armed.
21
23
  *
22
24
  * A declared package that cannot be collapsed (two versions, or a file with no counterpart in the
23
25
  * app's copy) prints one warning per package naming both copies. Set
@@ -1 +1 @@
1
- {"version":3,"file":"single-copy-register.js","sourceRoot":"","sources":["../src/single-copy-register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,kBAAkB,EAAE,CAAA"}
1
+ {"version":3,"file":"single-copy-register.js","sourceRoot":"","sources":["../src/single-copy-register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,kBAAkB,EAAE,CAAA"}
@@ -100,7 +100,7 @@ export interface SingleCopyPlan {
100
100
  readonly skipped: readonly SingleCopySkip[];
101
101
  }
102
102
  export interface SingleCopyOptions {
103
- /** The app root whose copy wins. Defaults to `process.cwd()`. */
103
+ /** The app root whose copy wins. Defaults to its nearest declaration, or `process.cwd()` if none. */
104
104
  readonly cwd?: string;
105
105
  /** Package names or `@scope/*` patterns. Defaults to the `nifra.singleCopy` declaration. */
106
106
  readonly packages?: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"single-copy.d.ts","sourceRoot":"","sources":["../src/single-copy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"single-copy.d.ts","sourceRoot":"","sources":["../src/single-copy.ts"],"names":[],"mappings":"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"}
@@ -106,6 +106,22 @@ const singleCopyField = (cwd) => {
106
106
  const nifra = pkg?.nifra;
107
107
  return isRecord(nifra) ? nifra.singleCopy : undefined;
108
108
  };
109
+ /** Find the declaring app when a Bun workspace script runs from a package directory. */
110
+ const singleCopyProjectRoot = (cwd) => {
111
+ const start = resolve(cwd);
112
+ let current = start;
113
+ for (let depth = 0; depth < MAX_ANCESTOR_DIRS; depth++) {
114
+ const pkg = readJsonSync(join(current, "package.json"));
115
+ const nifra = pkg?.nifra;
116
+ if (isRecord(nifra) && Object.hasOwn(nifra, "singleCopy"))
117
+ return realpathOrSelf(current);
118
+ const parent = dirname(current);
119
+ if (parent === current)
120
+ break;
121
+ current = parent;
122
+ }
123
+ return realpathOrSelf(start);
124
+ };
109
125
  /**
110
126
  * The declaration, read from `package.json` - deliberately NOT from `nifra.config.ts`.
111
127
  *
@@ -171,6 +187,34 @@ function preloadEntries(value) {
171
187
  }
172
188
  return entries;
173
189
  }
190
+ /** Accept the public entry, or a relative source preload that is itself the registrar. */
191
+ function isSingleCopyRegistrar(entry, cwd) {
192
+ if (entry === SINGLE_COPY_REGISTER_SPECIFIER)
193
+ return true;
194
+ if (!entry.startsWith("."))
195
+ return false;
196
+ let source;
197
+ try {
198
+ source = readFileSync(resolve(cwd, entry), "utf8");
199
+ }
200
+ catch {
201
+ return false;
202
+ }
203
+ const lines = source
204
+ .replaceAll("\r\n", "\n")
205
+ .split("\n")
206
+ .map((line) => line.trim());
207
+ const importsRegistrar = lines.some((line) => {
208
+ const statement = line.endsWith(";") ? line.slice(0, -1) : line;
209
+ return (statement === 'import { registerSingleCopy } from "./single-copy"' ||
210
+ statement === "import { registerSingleCopy } from './single-copy'");
211
+ });
212
+ const callsRegistrar = lines.some((line) => {
213
+ const statement = line.endsWith(";") ? line.slice(0, -1) : line;
214
+ return statement === "registerSingleCopy()";
215
+ });
216
+ return importsRegistrar && callsRegistrar;
217
+ }
174
218
  /**
175
219
  * Read the runtime proof out of `bunfig.toml`.
176
220
  *
@@ -201,7 +245,8 @@ export function readSingleCopyRegistration(cwd) {
201
245
  section = heading.trim();
202
246
  continue;
203
247
  }
204
- if (value === undefined || !preloadEntries(value).includes(SINGLE_COPY_REGISTER_SPECIFIER))
248
+ if (value === undefined ||
249
+ !preloadEntries(value).some((entry) => isSingleCopyRegistrar(entry, cwd)))
205
250
  continue;
206
251
  if (section === "test")
207
252
  test = true;
@@ -622,7 +667,9 @@ const strictFromEnv = () => {
622
667
  * anything loads, and a `no-counterpart` file fails its own import.
623
668
  */
624
669
  export function registerSingleCopy(options = {}) {
625
- const root = realpathOrSelf(resolve(options.cwd ?? process.cwd()));
670
+ // Bun runs `--filter` scripts from the workspace package directory. Resolve the declaration root
671
+ // first so the preload still pins packages against the application tree that owns bunfig.toml.
672
+ const root = realpathOrSelf(resolve(options.cwd ?? singleCopyProjectRoot(process.cwd())));
626
673
  const strict = options.strict ?? (readSingleCopyStrict(root) || strictFromEnv());
627
674
  const warned = processSet(WARNED);
628
675
  const emit = (key, message) => {
@@ -1 +1 @@
1
- {"version":3,"file":"single-copy.js","sourceRoot":"","sources":["../src/single-copy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"single-copy.js","sourceRoot":"","sources":["../src/single-copy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nifrajs/core",
3
- "version": "5.10.0",
3
+ "version": "5.11.0",
4
4
  "description": "Bun-native, contract-first HTTP framework - the router, server, and route descriptor.",
5
5
  "keywords": [
6
6
  "bun",
@@ -110,6 +110,11 @@
110
110
  "types": "./dist/canonical-json.d.ts",
111
111
  "default": "./dist/canonical-json.js"
112
112
  },
113
+ "./guard-deny": {
114
+ "bun": "./src/guard-deny.ts",
115
+ "types": "./dist/guard-deny.d.ts",
116
+ "default": "./dist/guard-deny.js"
117
+ },
113
118
  "./idempotency": {
114
119
  "bun": "./src/idempotency.ts",
115
120
  "types": "./dist/idempotency.d.ts",
package/src/edge-kit.ts CHANGED
@@ -9,6 +9,7 @@
9
9
  *
10
10
  * - {@link readBodyFramed} read + cap + proto-guard + content-type framing (JSON / urlencoded / 415)
11
11
  * - {@link capBodyBytes} the same byte cap on a handler's own reads of the raw request
12
+ * - {@link boundedJsonText} preflight JSON output against an exact UTF-8 byte budget
12
13
  * - {@link renderResult} render a {@link ResponseResult} (e.g. a 413 / 415 rejection) to a `Response`
13
14
  * - {@link toResponse} render any handler result, a handler's own `Response` included
14
15
  * - {@link plainError} the structured rejection envelope the lane returns
@@ -24,7 +25,7 @@ export { type ErrorLogDetail, emitRequestErrorLog } from "./server/bare-error-la
24
25
  export { assertByteLimit, capBodyBytes } from "./server/body.ts"
25
26
  export { type FormOrigins, readBodyFramed } from "./server/body-lane.ts"
26
27
  export { plainError } from "./server/http.ts"
27
- export { jsonResponse } from "./server/json-response.ts"
28
+ export { boundedJsonText, JsonByteLimitError, jsonResponse } from "./server/json-response.ts"
28
29
  export {
29
30
  answerNotFound,
30
31
  type NotFoundHandler,
@@ -0,0 +1,61 @@
1
+ /**
2
+ * The denial grammar the three auth packages' route guards share: what a guard rejects a missing
3
+ * session with. `@nifrajs/auth`, `@nifrajs/authjs` and `@nifrajs/better-auth` each keep their own
4
+ * options shape and their own redirect rejection; this subpath owns the `unauthenticated` response
5
+ * type, its construction, and the two fail-loud dev-config checks, so the three cannot drift: a
6
+ * fix made here holds for every guard family at once.
7
+ *
8
+ * The module imports only the status lane, so an app whose guards use it pays nothing besides the
9
+ * grammar itself.
10
+ */
11
+ import { type ResponseResult, status } from "./server/runtime-core.ts"
12
+
13
+ /** The body a guard sends when the app did not declare its own. */
14
+ const UNAUTHORIZED = { ok: false, error: "unauthorized" } as const
15
+
16
+ /**
17
+ * The response a guard denies a missing session with, in place of the default `401` JSON. Every
18
+ * nifra auth package's guard options named `unauthenticated` takes this shape.
19
+ */
20
+ export interface UnauthenticatedResponse {
21
+ /** An error status, 400-599. Default `401`. */
22
+ readonly status?: number
23
+ /** The body; present but `undefined` sends none. Default `{ ok: false, error: "unauthorized" }`. */
24
+ readonly body?: unknown
25
+ /** Response headers, such as a `www-authenticate` challenge. */
26
+ readonly headers?: Readonly<Record<string, string>>
27
+ }
28
+
29
+ /**
30
+ * A dev-authored denial that is not an error status, or that competes with a redirect, fails loud.
31
+ * A mutation-taking guard must say one thing, and `unauthenticated.status` must stay an HTTP error
32
+ * status. `owner` names the package in the message: `[nifra/<owner>]`.
33
+ */
34
+ export function assertUnauthenticated(
35
+ options: { readonly redirectTo?: string; readonly unauthenticated?: UnauthenticatedResponse },
36
+ owner: string,
37
+ ): void {
38
+ const custom = options.unauthenticated
39
+ if (custom === undefined) return
40
+ if (options.redirectTo !== undefined) {
41
+ throw new Error(`[nifra/${owner}] a guard takes redirectTo or unauthenticated, not both`)
42
+ }
43
+ const code = custom.status
44
+ if (code !== undefined && (!Number.isInteger(code) || code < 400 || code > 599)) {
45
+ throw new RangeError(
46
+ `[nifra/${owner}] guard unauthenticated.status must be an integer 400-599 (got ${String(code)})`,
47
+ )
48
+ }
49
+ }
50
+
51
+ /**
52
+ * The response one guard rejection carries: what the options declared, or the default `401` JSON
53
+ * (`{ ok: false, error: "unauthorized" }`). An explicit `body` of `undefined` sends no body.
54
+ */
55
+ export function unauthenticatedResult(custom: UnauthenticatedResponse | undefined): ResponseResult {
56
+ if (custom === undefined) return status(401, UNAUTHORIZED)
57
+ const body = "body" in custom ? custom.body : UNAUTHORIZED
58
+ return custom.headers === undefined
59
+ ? status(custom.status ?? 401, body)
60
+ : status(custom.status ?? 401, body, { headers: custom.headers })
61
+ }
package/src/index.ts CHANGED
@@ -16,7 +16,7 @@
16
16
  * read its own package.json at runtime. `scripts/version.ts` rewrites it on every release bump and
17
17
  * `check:publish` asserts it equals `@nifrajs/core`'s package version.
18
18
  */
19
- export const VERSION = "5.10.0" as const
19
+ export const VERSION = "5.11.0" as const
20
20
 
21
21
  export type Version = typeof VERSION
22
22
 
@@ -26,7 +26,7 @@ if (!copies.includes(here) && copies.push(here) > 1) {
26
26
 
27
27
  /** This copy's version: a literal like the package root's `VERSION` (no fs on the edge), which
28
28
  * `scripts/version.ts` rewrites on every release and `check:publish` asserts. */
29
- const COPY_VERSION = "5.10.0"
29
+ const COPY_VERSION = "5.11.0"
30
30
 
31
31
  /** Record this copy's version beside its URL. Called by each `server()` behind the development guard,
32
32
  * so a production bundle drops it with the version; a copy that built a server has recorded one. */
@@ -47,7 +47,7 @@ const longest = (scopes: readonly number[]): number =>
47
47
  * ```
48
48
  */
49
49
  export function withIdleTimeout<T>(
50
- c: Context,
50
+ c: Pick<Context, "signal">,
51
51
  seconds: number,
52
52
  work: () => MaybePromise<T>,
53
53
  ): MaybePromise<T> {
@@ -55,9 +55,7 @@ export function withIdleTimeout<T>(
55
55
  throw new RangeError("withIdleTimeout: seconds must be an integer from 0 to 255")
56
56
  }
57
57
  // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: only RequestContext defines this key, with this signature; any other context leaves it undefined.
58
- const control = (c as Context & { [CONTEXT_IDLE_TIMEOUT]?: IdleTimeoutControl })[
59
- CONTEXT_IDLE_TIMEOUT
60
- ]
58
+ const control = (c as { [CONTEXT_IDLE_TIMEOUT]?: IdleTimeoutControl })[CONTEXT_IDLE_TIMEOUT]
61
59
  const signal = c.signal
62
60
  if (control === undefined || signal.aborted) return work()
63
61
  const set = (value: number | undefined): void => {
@@ -1,5 +1,214 @@
1
+ import { isRawJson } from "./json-shared.ts"
1
2
  import { retried } from "./json-text.ts"
2
3
 
4
+ /** A JSON value would exceed the caller's UTF-8 byte budget. */
5
+ export class JsonByteLimitError extends RangeError {
6
+ constructor() {
7
+ super("JSON output exceeds the byte limit")
8
+ this.name = "JsonByteLimitError"
9
+ }
10
+ }
11
+
12
+ const OMIT_JSON_VALUE = Symbol("nifra.omitJsonValue")
13
+
14
+ interface JsonBudget {
15
+ readonly maxBytes: number
16
+ usedBytes: number
17
+ }
18
+
19
+ function addJsonBytes(budget: JsonBudget, bytes: number): void {
20
+ if (bytes > budget.maxBytes - budget.usedBytes) throw new JsonByteLimitError()
21
+ budget.usedBytes += bytes
22
+ }
23
+
24
+ /** Count a quoted JSON string without allocating its escaped representation. */
25
+ function countQuotedJsonString(value: string, budget: JsonBudget): void {
26
+ addJsonBytes(budget, 2) // opening and closing quotes
27
+ for (let index = 0; index < value.length; index++) {
28
+ const code = value.charCodeAt(index)
29
+ if (
30
+ code === 0x22 ||
31
+ code === 0x5c ||
32
+ code === 0x08 ||
33
+ code === 0x09 ||
34
+ code === 0x0a ||
35
+ code === 0x0c ||
36
+ code === 0x0d
37
+ ) {
38
+ addJsonBytes(budget, 2)
39
+ } else if (code < 0x20) {
40
+ addJsonBytes(budget, 6) // \\u00xx
41
+ } else if (code >= 0xd800 && code <= 0xdbff) {
42
+ const next = value.charCodeAt(index + 1)
43
+ if (next >= 0xdc00 && next <= 0xdfff) {
44
+ addJsonBytes(budget, 4)
45
+ index++
46
+ } else {
47
+ addJsonBytes(budget, 6) // well-formed JSON escapes a lone surrogate
48
+ }
49
+ } else if (code >= 0xdc00 && code <= 0xdfff) {
50
+ addJsonBytes(budget, 6)
51
+ } else {
52
+ addJsonBytes(budget, code < 0x80 ? 1 : code < 0x800 ? 2 : 3)
53
+ }
54
+ }
55
+ }
56
+
57
+ /** Count the UTF-8 bytes of an already-encoded JSON fragment. */
58
+ function countRawJsonBytes(value: string, budget: JsonBudget): void {
59
+ for (let index = 0; index < value.length; index++) {
60
+ const code = value.charCodeAt(index)
61
+ const next = value.charCodeAt(index + 1)
62
+ if (code >= 0xd800 && code <= 0xdbff && next >= 0xdc00 && next <= 0xdfff) {
63
+ addJsonBytes(budget, 4)
64
+ index++
65
+ } else addJsonBytes(budget, code < 0x80 ? 1 : code < 0x800 ? 2 : 3)
66
+ }
67
+ }
68
+
69
+ function ownJsonValue(value: object, key: string): unknown {
70
+ const toJSON = Reflect.get(value, "toJSON")
71
+ return typeof toJSON === "function" ? Reflect.apply(toJSON, value, [key]) : value
72
+ }
73
+
74
+ function normalizedJsonValue(
75
+ value: unknown,
76
+ key: string,
77
+ budget: JsonBudget,
78
+ ancestors: Set<object>,
79
+ ): unknown | typeof OMIT_JSON_VALUE {
80
+ if (typeof value === "object" && value !== null && isRawJson?.(value) === true) {
81
+ const raw = Reflect.get(value, "rawJSON")
82
+ // biome-ignore lint/plugin/requireSafetyCommentForTypeAssertion: The runtime guard below verifies this optional JSON.rawJSON extension is callable before use.
83
+ const rawJSON = (JSON as JSON & { readonly rawJSON?: (text: string) => unknown }).rawJSON
84
+ if (typeof raw !== "string" || typeof rawJSON !== "function")
85
+ throw new TypeError("Could not serialize JSON.rawJSON")
86
+ countRawJsonBytes(raw, budget)
87
+ return rawJSON(raw)
88
+ }
89
+ if ((typeof value === "object" && value !== null) || typeof value === "function") {
90
+ value = ownJsonValue(value, key)
91
+ } else if (typeof value === "bigint") {
92
+ const boxed = Object(value)
93
+ const toJSON = Reflect.get(boxed, "toJSON")
94
+ if (typeof toJSON === "function") value = Reflect.apply(toJSON, boxed, [key])
95
+ }
96
+
97
+ if (value === null) {
98
+ addJsonBytes(budget, 4)
99
+ return null
100
+ }
101
+ if (typeof value === "string") {
102
+ countQuotedJsonString(value, budget)
103
+ return value
104
+ }
105
+ if (typeof value === "boolean") {
106
+ addJsonBytes(budget, value ? 4 : 5)
107
+ return value
108
+ }
109
+ if (typeof value === "number") {
110
+ const text = JSON.stringify(value)!
111
+ addJsonBytes(budget, text.length) // JSON numbers are ASCII.
112
+ return value
113
+ }
114
+ if (typeof value === "undefined" || typeof value === "function" || typeof value === "symbol")
115
+ return OMIT_JSON_VALUE
116
+ if (typeof value === "bigint") throw new TypeError("Do not know how to serialize a BigInt")
117
+
118
+ // JSON.stringify unwraps primitive wrapper objects before writing them.
119
+ try {
120
+ return normalizedJsonValue(Number.prototype.valueOf.call(value), key, budget, ancestors)
121
+ } catch (error) {
122
+ if (error instanceof JsonByteLimitError) throw error
123
+ }
124
+ try {
125
+ return normalizedJsonValue(String.prototype.valueOf.call(value), key, budget, ancestors)
126
+ } catch (error) {
127
+ if (error instanceof JsonByteLimitError) throw error
128
+ }
129
+ try {
130
+ return normalizedJsonValue(Boolean.prototype.valueOf.call(value), key, budget, ancestors)
131
+ } catch (error) {
132
+ if (error instanceof JsonByteLimitError) throw error
133
+ }
134
+ try {
135
+ BigInt.prototype.valueOf.call(value)
136
+ } catch {
137
+ // Not a boxed BigInt; continue with ordinary object serialization.
138
+ return normalizeJsonObject(value, budget, ancestors)
139
+ }
140
+ throw new TypeError("Do not know how to serialize a BigInt")
141
+ }
142
+
143
+ function normalizeJsonObject(
144
+ object: object,
145
+ budget: JsonBudget,
146
+ ancestors: Set<object>,
147
+ ): unknown | typeof OMIT_JSON_VALUE {
148
+ if (ancestors.has(object)) throw new TypeError("Converting circular structure to JSON")
149
+ ancestors.add(object)
150
+ try {
151
+ if (Array.isArray(object)) {
152
+ addJsonBytes(budget, 1) // [
153
+ const result: unknown[] = Object.setPrototypeOf([], null)
154
+ const length = object.length
155
+ for (let index = 0; index < length; index++) {
156
+ if (index > 0) addJsonBytes(budget, 1)
157
+ const key = String(index)
158
+ const item = normalizedJsonValue(Reflect.get(object, key), key, budget, ancestors)
159
+ if (item === OMIT_JSON_VALUE) {
160
+ addJsonBytes(budget, 4)
161
+ result[index] = null
162
+ } else result[index] = item
163
+ }
164
+ addJsonBytes(budget, 1) // ]
165
+ return result
166
+ }
167
+
168
+ addJsonBytes(budget, 1) // {
169
+ const result: Record<string, unknown> = Object.create(null)
170
+ let first = true
171
+ for (const property of Object.keys(object)) {
172
+ const item = normalizedJsonValue(Reflect.get(object, property), property, budget, ancestors)
173
+ if (item === OMIT_JSON_VALUE) continue
174
+ if (!first) addJsonBytes(budget, 1)
175
+ countQuotedJsonString(property, budget)
176
+ addJsonBytes(budget, 1) // :
177
+ first = false
178
+ Object.defineProperty(result, property, {
179
+ configurable: true,
180
+ enumerable: true,
181
+ value: item,
182
+ writable: true,
183
+ })
184
+ }
185
+ addJsonBytes(budget, 1) // }
186
+ return result
187
+ } finally {
188
+ ancestors.delete(object)
189
+ }
190
+ }
191
+
192
+ /**
193
+ * Serialize a JSON value only when its exact UTF-8 size fits `maxBytes`. The preflight snapshots
194
+ * enumerable values and `toJSON` results while counting, so an oversized output is rejected before
195
+ * constructing the escaped JSON string or its encoded byte buffer. Returns `undefined` for a root
196
+ * value with no JSON representation, matching `JSON.stringify`.
197
+ */
198
+ export function boundedJsonText(
199
+ value: unknown,
200
+ maxBytes: number,
201
+ ): { readonly text: string; readonly byteLength: number } | undefined {
202
+ if (!Number.isSafeInteger(maxBytes) || maxBytes < 0)
203
+ throw new RangeError("maxBytes must be a non-negative safe integer")
204
+ const budget: JsonBudget = { maxBytes, usedBytes: 0 }
205
+ const normalized = normalizedJsonValue(value, "", budget, new Set())
206
+ if (normalized === OMIT_JSON_VALUE) return undefined
207
+ const text = JSON.stringify(normalized)
208
+ if (text === undefined) return undefined
209
+ return { text, byteLength: budget.usedBytes }
210
+ }
211
+
3
212
  /** `Response.json`, with each `bigint` written as its decimal string, as `jsonText` writes it. */
4
213
  export function jsonResponse(value: unknown, init?: ResponseInit): Response {
5
214
  try {
@@ -14,10 +14,12 @@
14
14
  * A resolver only affects imports that have not resolved yet, and a module's own imports resolve
15
15
  * before its body runs. Registering from inside application code would therefore miss exactly the
16
16
  * imports it exists to redirect. `preload` runs before the entry point, which is the only moment that
17
- * covers the whole graph.
17
+ * covers the whole graph. When Bun starts a filtered workspace script below the app root, the
18
+ * registrar finds the nearest ancestor package declaring `nifra.singleCopy` and passes that root to
19
+ * the resolver instead of planning against the workspace package's manifest.
18
20
  *
19
- * `nifra check` reads this specifier out of `bunfig.toml` as the proof that the runtime arm is armed,
20
- * so the string above is a contract rather than a suggestion.
21
+ * `nifra check` recognizes this public specifier and verifies checkout-local relative preloads before
22
+ * treating them as proof that the runtime arm is armed.
21
23
  *
22
24
  * A declared package that cannot be collapsed (two versions, or a file with no counterpart in the
23
25
  * app's copy) prints one warning per package naming both copies. Set
@@ -130,7 +130,7 @@ export interface SingleCopyPlan {
130
130
  }
131
131
 
132
132
  export interface SingleCopyOptions {
133
- /** The app root whose copy wins. Defaults to `process.cwd()`. */
133
+ /** The app root whose copy wins. Defaults to its nearest declaration, or `process.cwd()` if none. */
134
134
  readonly cwd?: string
135
135
  /** Package names or `@scope/*` patterns. Defaults to the `nifra.singleCopy` declaration. */
136
136
  readonly packages?: readonly string[]
@@ -179,6 +179,21 @@ const singleCopyField = (cwd: string): unknown => {
179
179
  return isRecord(nifra) ? nifra.singleCopy : undefined
180
180
  }
181
181
 
182
+ /** Find the declaring app when a Bun workspace script runs from a package directory. */
183
+ const singleCopyProjectRoot = (cwd: string): string => {
184
+ const start = resolve(cwd)
185
+ let current = start
186
+ for (let depth = 0; depth < MAX_ANCESTOR_DIRS; depth++) {
187
+ const pkg = readJsonSync(join(current, "package.json"))
188
+ const nifra = pkg?.nifra
189
+ if (isRecord(nifra) && Object.hasOwn(nifra, "singleCopy")) return realpathOrSelf(current)
190
+ const parent = dirname(current)
191
+ if (parent === current) break
192
+ current = parent
193
+ }
194
+ return realpathOrSelf(start)
195
+ }
196
+
182
197
  /**
183
198
  * The declaration, read from `package.json` - deliberately NOT from `nifra.config.ts`.
184
199
  *
@@ -266,6 +281,34 @@ function preloadEntries(value: string): readonly string[] {
266
281
  return entries
267
282
  }
268
283
 
284
+ /** Accept the public entry, or a relative source preload that is itself the registrar. */
285
+ function isSingleCopyRegistrar(entry: string, cwd: string): boolean {
286
+ if (entry === SINGLE_COPY_REGISTER_SPECIFIER) return true
287
+ if (!entry.startsWith(".")) return false
288
+ let source: string
289
+ try {
290
+ source = readFileSync(resolve(cwd, entry), "utf8")
291
+ } catch {
292
+ return false
293
+ }
294
+ const lines = source
295
+ .replaceAll("\r\n", "\n")
296
+ .split("\n")
297
+ .map((line) => line.trim())
298
+ const importsRegistrar = lines.some((line) => {
299
+ const statement = line.endsWith(";") ? line.slice(0, -1) : line
300
+ return (
301
+ statement === 'import { registerSingleCopy } from "./single-copy"' ||
302
+ statement === "import { registerSingleCopy } from './single-copy'"
303
+ )
304
+ })
305
+ const callsRegistrar = lines.some((line) => {
306
+ const statement = line.endsWith(";") ? line.slice(0, -1) : line
307
+ return statement === "registerSingleCopy()"
308
+ })
309
+ return importsRegistrar && callsRegistrar
310
+ }
311
+
269
312
  /**
270
313
  * Read the runtime proof out of `bunfig.toml`.
271
314
  *
@@ -294,7 +337,10 @@ export function readSingleCopyRegistration(cwd: string): SingleCopyRegistration
294
337
  section = heading.trim()
295
338
  continue
296
339
  }
297
- if (value === undefined || !preloadEntries(value).includes(SINGLE_COPY_REGISTER_SPECIFIER))
340
+ if (
341
+ value === undefined ||
342
+ !preloadEntries(value).some((entry) => isSingleCopyRegistrar(entry, cwd))
343
+ )
298
344
  continue
299
345
  if (section === "test") test = true
300
346
  else if (section === "") run = true
@@ -726,7 +772,9 @@ const strictFromEnv = (): boolean => {
726
772
  * anything loads, and a `no-counterpart` file fails its own import.
727
773
  */
728
774
  export function registerSingleCopy(options: SingleCopyOptions = {}): SingleCopyPlan {
729
- const root = realpathOrSelf(resolve(options.cwd ?? process.cwd()))
775
+ // Bun runs `--filter` scripts from the workspace package directory. Resolve the declaration root
776
+ // first so the preload still pins packages against the application tree that owns bunfig.toml.
777
+ const root = realpathOrSelf(resolve(options.cwd ?? singleCopyProjectRoot(process.cwd())))
730
778
  const strict = options.strict ?? (readSingleCopyStrict(root) || strictFromEnv())
731
779
  const warned = processSet(WARNED)
732
780
  const emit = (key: string, message: string): void => {