@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 +11 -0
- package/dist/edge-kit.d.ts +2 -1
- package/dist/edge-kit.d.ts.map +1 -1
- package/dist/edge-kit.js +2 -1
- package/dist/edge-kit.js.map +1 -1
- package/dist/guard-deny.d.ts +38 -0
- package/dist/guard-deny.d.ts.map +1 -0
- package/dist/guard-deny.js +43 -0
- package/dist/guard-deny.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/server/core-copies.js +1 -1
- package/dist/server/idle-timeout.d.ts +1 -1
- package/dist/server/idle-timeout.d.ts.map +1 -1
- package/dist/server/idle-timeout.js.map +1 -1
- package/dist/server/json-response.d.ts +14 -0
- package/dist/server/json-response.d.ts.map +1 -1
- package/dist/server/json-response.js +205 -0
- package/dist/server/json-response.js.map +1 -1
- package/dist/single-copy-register.js +5 -3
- package/dist/single-copy-register.js.map +1 -1
- package/dist/single-copy.d.ts +1 -1
- package/dist/single-copy.d.ts.map +1 -1
- package/dist/single-copy.js +49 -2
- package/dist/single-copy.js.map +1 -1
- package/package.json +6 -1
- package/src/edge-kit.ts +2 -1
- package/src/guard-deny.ts +61 -0
- package/src/index.ts +1 -1
- package/src/server/core-copies.ts +1 -1
- package/src/server/idle-timeout.ts +2 -4
- package/src/server/json-response.ts +209 -0
- package/src/single-copy-register.ts +5 -3
- package/src/single-copy.ts +51 -3
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
|
package/dist/edge-kit.d.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
|
|
@@ -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";
|
package/dist/edge-kit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge-kit.d.ts","sourceRoot":"","sources":["../src/edge-kit.ts"],"names":[],"mappings":"AAAA
|
|
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";
|
package/dist/edge-kit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge-kit.js","sourceRoot":"","sources":["../src/edge-kit.ts"],"names":[],"mappings":"AAAA
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|
|
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":"AAKA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAM7E;mGACmG;AACnG,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAoB,CAAA;AAEhD,MAAM,OAAO,GAAG,CAAC,MAAyB,EAAU,EAAE,CACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,eAAe,CAC7B,
|
|
1
|
+
{"version":3,"file":"idle-timeout.js","sourceRoot":"","sources":["../../src/server/idle-timeout.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAM7E;mGACmG;AACnG,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAoB,CAAA;AAEhD,MAAM,OAAO,GAAG,CAAC,MAAyB,EAAU,EAAE,CACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,eAAe,CAC7B,CAA0B,EAC1B,OAAe,EACf,IAA2B;IAE3B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;QACnE,MAAM,IAAI,UAAU,CAAC,2DAA2D,CAAC,CAAA;IACnF,CAAC;IACD,mKAAmK;IACnK,MAAM,OAAO,GAAI,CAAqD,CAAC,oBAAoB,CAAC,CAAA;IAC5F,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAA;IACvB,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,EAAE,CAAA;IAC1D,MAAM,GAAG,GAAG,CAAC,KAAyB,EAAQ,EAAE;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACxB,CAAC,CAAA;IACD,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC5B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,EAAE,CAAA;QACX,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IACzB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAA;IAClB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACjB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;IACjB,8FAA8F;IAC9F,gFAAgF;IAChF,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAM;QACnC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAClB,GAAG,CAAC,SAAS,CAAC,CAAA;IAChB,CAAC,CAAA;IACD,mFAAmF;IACnF,MAAM,OAAO,GAAG,MAAM,KAAK,mBAAmB,EAAE,CAAA;IAChD,IAAI,OAAO;QAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IACpE,MAAM,GAAG,GAAG,GAAS,EAAE;QACrB,IAAI,OAAO;YAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACvD,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAM;QACnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QACnC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAClB,GAAG,CAAC,SAAS,CAAC,CAAA;IAChB,CAAC,CAAA;IACD,IAAI,MAAuB,CAAA;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,EAAE,CAAA;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,EAAE,CAAA;QACL,MAAM,GAAG,CAAA;IACX,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,YAAY,OAAO,CAAC,EAAE,CAAC;QACjC,GAAG,EAAE,CAAA;QACL,OAAO,MAAM,CAAA;IACf,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC"}
|
|
@@ -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":"
|
|
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":"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"}
|
|
@@ -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`
|
|
20
|
-
*
|
|
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
|
|
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"}
|
package/dist/single-copy.d.ts
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAIpC;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAQxD,CAAA;AAaD,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,gBAAgB,CAAA;AAEpE,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,gGAAgG;IAChG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACjD,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAA;CAC5C;AAED,MAAM,WAAW,iBAAiB;IAChC,
|
|
1
|
+
{"version":3,"file":"single-copy.d.ts","sourceRoot":"","sources":["../src/single-copy.ts"],"names":[],"mappings":"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"}
|
package/dist/single-copy.js
CHANGED
|
@@ -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 ||
|
|
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
|
-
|
|
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) => {
|
package/dist/single-copy.js.map
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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
|
|
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`
|
|
20
|
-
*
|
|
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
|
package/src/single-copy.ts
CHANGED
|
@@ -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 (
|
|
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
|
-
|
|
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 => {
|