@nifrajs/core 5.9.0 → 5.10.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,24 @@
1
1
  # @nifrajs/core
2
2
 
3
+ ## 5.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a6af4c9: A path segment has one spelling in every place a framework writes one. `@nifrajs/core/pattern` exports `encodePathSegment(value)`, `decodePathSegment(raw)`, `browserPathSegment(value)` and `fillRoutePath(pattern, params)`. `encodePathSegment` leaves `A-Za-z0-9 - . _ ~ ! $ & ' ( ) * + , : = @` as written and percent-encodes everything else in upper-case hex, so `;`, `[`, `]` and `|` are escaped (a proxy that reads `;` as a path parameter cannot change the path). A value no segment can carry (`.`, `..`, a lone surrogate) throws `RangeError`. `fillRoutePath` reports a value the router would read back as different params, such as `name` = `a.b` in `:name.:ext`, as invalid.
8
+
9
+ `getStaticPaths` output, the prerender report and written files, `enumerateStaticRoutes`, the typed client's path params and the contract fuzzer's request paths all use it. A `getStaticPaths` entry that leaves out a param or holds one no path can carry is skipped, and the prerender report names the param. Files in `public/` are served under the spelling a page links and the one a browser sends for the same name.
10
+ - 1faf86c: `href({ to, params, search, hash })` builds an in-app URL from a route pattern and returns an `Href`; `rawHref(path)` returns one for a same-origin path built elsewhere (a CMS link, `/llms.txt`). `to` is a key of the generated `RouteTable`, so a misspelt route, a missing, misspelt or extra param, and a `search` that breaks the route's schema are compile errors. A route without a `searchSchema` takes any `search`. Each param is encoded as one path segment, so a value such as `a/b` or `//evil.com` cannot change where the URL goes; a param that is missing, empty, `.`, `..` or an unpaired surrogate throws a `TypeError` naming it and the pattern. `rawHref` throws a `TypeError` unless `isSameOriginPath` accepts the path. Both are exported by `@nifrajs/web` and by the `/router` entry of every adapter.
11
+
12
+ `navigate` takes an `Href` or a history delta. A string, a template literal and the `{ to, search }` object form are compile errors, and a value forged past the types is still held to the same-origin check the browser navigate makes. `<Navigate to>` and the `useSearchParams` setter in `@nifrajs/web-react` pass their path through `rawHref`, so an off-origin `to` throws instead of doing nothing. `isSameOriginPath` is exported from `@nifrajs/core/pattern` as well as `@nifrajs/core/server`.
13
+
14
+ Upgrade: `navigate("/users/7")` becomes `navigate(href({ to: "/users/:id", params: { id: "7" } }))`, `navigate({ to, search, replace: true })` becomes `navigate(href({ to, search }), { replace: true })`, and a path built elsewhere is `navigate(rawHref(path))`. `resolveNavigate`, `NavigateTargetInput` and `NavigateSearchOf` are removed from `@nifrajs/web`.
15
+
16
+ ### Patch Changes
17
+
18
+ - 7e292dd: Reject adjacent mixed-route parameter values that the router would split differently, including percent-encoded values that would become malformed captures.
19
+
20
+ Make internal-link diagnostics account for stripped backend mounts, ignore commented-out and script-string anchors in Vue/Svelte components, and honor template-comment suppressions. Detect navigation imports from browser-safe router and client subpaths when checking route-table coverage.
21
+
3
22
  ## 5.9.0
4
23
 
5
24
  ### Minor Changes
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.9.0";
18
+ export declare const VERSION: "5.10.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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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.9.0";
18
+ export const VERSION = "5.10.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";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAgB,CAAA;AAIvC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAA6B,MAAM,aAAa,CAAA;AACzF,OAAO,EAAE,cAAc,EAAsB,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACjF,OAAO,EACL,gCAAgC,EAChC,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,OAAO,EAGP,MAAM,GAEP,MAAM,oBAAoB,CAAA;AAU3B,OAAO,EASL,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,QAAQ,GACT,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAU1D,OAAO,EAGL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,SAAS,EACT,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAKL,cAAc,GACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,gBAAgB,EAChB,UAAU,EAEV,UAAU,EACV,MAAM,GACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,oBAAoB,EACpB,UAAU,EAIV,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAUL,eAAe,EACf,gBAAgB,EAChB,eAAe,GAEhB,MAAM,+BAA+B,CAAA;AAStC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAElB,YAAY,GACb,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAIL,MAAM,GACP,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAOL,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EA8BlB,MAAM,EAEN,MAAM,GAEP,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAiB,CAAA;AAIxC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAA6B,MAAM,aAAa,CAAA;AACzF,OAAO,EAAE,cAAc,EAAsB,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACjF,OAAO,EACL,gCAAgC,EAChC,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,OAAO,EAGP,MAAM,GAEP,MAAM,oBAAoB,CAAA;AAU3B,OAAO,EASL,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,QAAQ,GACT,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAU1D,OAAO,EAGL,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,SAAS,EACT,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAKL,cAAc,GACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,gBAAgB,EAChB,UAAU,EAEV,UAAU,EACV,MAAM,GACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,oBAAoB,EACpB,UAAU,EAIV,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAUL,eAAe,EACf,gBAAgB,EAChB,eAAe,GAEhB,MAAM,+BAA+B,CAAA;AAStC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAElB,YAAY,GACb,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAIL,MAAM,GACP,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAOL,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EA8BlB,MAAM,EAEN,MAAM,GAEP,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `value` as one path segment. Left as written: letters, digits, the at sign and `- . _ ~ ! $ & ' ( ) * + , : =`.
3
+ * Everything else is percent-encoded, UTF-8 and upper-case hex, including `; [ ] | / ? # % \`.
4
+ *
5
+ * Throws a `RangeError` for a value that no segment can carry: exactly `.` or `..` (a URL parser reads
6
+ * `%2E` and `%2E%2E` as dot segments too) and a lone surrogate (substituting U+FFFD would map distinct
7
+ * values to one URL). The empty string is returned as is; a caller that cannot use it checks for it.
8
+ */
9
+ export declare function encodePathSegment(value: string): string;
10
+ /**
11
+ * `value` as a browser spells it in a request URL: {@link encodePathSegment} with `; [ ] |` left as
12
+ * written. Used for one thing, registering a public file under the spelling its page links request;
13
+ * it differs from the canonical form on those four characters only.
14
+ */
15
+ export declare function browserPathSegment(value: string): string;
16
+ /**
17
+ * `raw` with its percent-escapes decoded, or `undefined` when one is malformed. The inverse of
18
+ * {@link encodePathSegment} and of {@link browserPathSegment}; a segment in any other spelling decodes
19
+ * too. What a malformed escape means is the caller's policy.
20
+ */
21
+ export declare function decodePathSegment(raw: string): string | undefined;
22
+ //# sourceMappingURL=path-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-codec.d.ts","sourceRoot":"","sources":["../../src/router/path-codec.ts"],"names":[],"mappings":"AA4DA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMjE"}
@@ -0,0 +1,87 @@
1
+ // One URL path segment, encoded and decoded. Every place that spells a value into a path calls this
2
+ // module, so a link, a prerendered file, a client request and a public asset agree on one spelling.
3
+ const HEX = "0123456789ABCDEF";
4
+ const UNRESERVED = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~";
5
+ function rawTable(chars) {
6
+ const table = new Uint8Array(128);
7
+ for (let i = 0; i < chars.length; i++)
8
+ table[chars.charCodeAt(i)] = 1;
9
+ return table;
10
+ }
11
+ // RFC 3986 `pchar` minus `;`: the unreserved set, the sub-delimiters, `:` and `@`. `;` delimits path
12
+ // parameters (RFC 3986 section 3.3) and servlet containers strip them; `[`, `]` and `|` are not valid in
13
+ // a path at all and Tomcat rejects them unencoded by default.
14
+ const CANONICAL = /* @__PURE__ */ rawTable(`${UNRESERVED}!$&'()*+,:=@`);
15
+ // What a browser leaves as written in a path: the canonical set plus `;`, `[`, `]` and `|`.
16
+ const BROWSER = /* @__PURE__ */ rawTable(`${UNRESERVED}!$&'()*+,:=@;[]|`);
17
+ function encodeNonAscii(run) {
18
+ try {
19
+ return encodeURIComponent(run);
20
+ }
21
+ catch {
22
+ throw new RangeError("[nifra/core] a path segment cannot hold a lone surrogate");
23
+ }
24
+ }
25
+ function encodeWith(raw, value) {
26
+ if (value === "." || value === "..") {
27
+ throw new RangeError(`[nifra/core] a path segment cannot be ${JSON.stringify(value)}: every spelling of it is a dot segment to a URL parser`);
28
+ }
29
+ const length = value.length;
30
+ let out = "";
31
+ let start = 0;
32
+ let i = 0;
33
+ while (i < length) {
34
+ const code = value.charCodeAt(i);
35
+ if (code < 128 && raw[code] === 1) {
36
+ i++;
37
+ continue;
38
+ }
39
+ out += value.slice(start, i);
40
+ if (code < 128) {
41
+ out += `%${HEX[code >> 4]}${HEX[code & 15]}`;
42
+ i++;
43
+ }
44
+ else {
45
+ let end = i + 1;
46
+ while (end < length && value.charCodeAt(end) >= 128)
47
+ end++;
48
+ out += encodeNonAscii(value.slice(i, end));
49
+ i = end;
50
+ }
51
+ start = i;
52
+ }
53
+ return start === 0 ? value : out + value.slice(start);
54
+ }
55
+ /**
56
+ * `value` as one path segment. Left as written: letters, digits, the at sign and `- . _ ~ ! $ & ' ( ) * + , : =`.
57
+ * Everything else is percent-encoded, UTF-8 and upper-case hex, including `; [ ] | / ? # % \`.
58
+ *
59
+ * Throws a `RangeError` for a value that no segment can carry: exactly `.` or `..` (a URL parser reads
60
+ * `%2E` and `%2E%2E` as dot segments too) and a lone surrogate (substituting U+FFFD would map distinct
61
+ * values to one URL). The empty string is returned as is; a caller that cannot use it checks for it.
62
+ */
63
+ export function encodePathSegment(value) {
64
+ return encodeWith(CANONICAL, value);
65
+ }
66
+ /**
67
+ * `value` as a browser spells it in a request URL: {@link encodePathSegment} with `; [ ] |` left as
68
+ * written. Used for one thing, registering a public file under the spelling its page links request;
69
+ * it differs from the canonical form on those four characters only.
70
+ */
71
+ export function browserPathSegment(value) {
72
+ return encodeWith(BROWSER, value);
73
+ }
74
+ /**
75
+ * `raw` with its percent-escapes decoded, or `undefined` when one is malformed. The inverse of
76
+ * {@link encodePathSegment} and of {@link browserPathSegment}; a segment in any other spelling decodes
77
+ * too. What a malformed escape means is the caller's policy.
78
+ */
79
+ export function decodePathSegment(raw) {
80
+ try {
81
+ return decodeURIComponent(raw);
82
+ }
83
+ catch {
84
+ return undefined;
85
+ }
86
+ }
87
+ //# sourceMappingURL=path-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-codec.js","sourceRoot":"","sources":["../../src/router/path-codec.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ export { browserPathSegment, decodePathSegment, encodePathSegment } from "./path-codec.js";
2
+ export { isSameOriginPath } from "./same-origin-path.js";
1
3
  declare const COMPILED_ROUTE_PATTERN: unique symbol;
2
4
  export type RoutePatternSegment = {
3
5
  readonly kind: "static";
@@ -185,7 +187,25 @@ export declare function sortRoutesBySpecificity<T extends {
185
187
  /** Decode router captures under one rule. Plain values take the zero-allocation path; malformed
186
188
  * escapes return `null`, allowing HTTP to emit 400 while client navigation declines the match. */
187
189
  export declare function decodeRouteParams(raw: Record<string, string>): Record<string, string> | null;
190
+ export type FilledRoutePath = {
191
+ readonly ok: true;
192
+ readonly path: string;
193
+ } | {
194
+ readonly ok: false;
195
+ /** Params the pattern names that `params` leaves out or holds as the empty string. */
196
+ readonly missing: readonly string[];
197
+ /** Params whose value cannot be carried or would be split differently by this pattern. */
198
+ readonly invalid: readonly string[];
199
+ };
200
+ /**
201
+ * The path `pattern` names for `params`, every value spelled by {@link encodePathSegment}. A wildcard
202
+ * value is split on `/` and each part encoded, empty parts dropped; a `.` or `..` part is invalid, as
203
+ * a whole-segment value is. Nothing is thrown for a bad value: the caller decides what a missing or
204
+ * invalid param means. A param inside a mixed segment is invalid when its value holds the literal that ends it (`name` = `a.b` in
205
+ * `:name.:ext`), or when it touches the next param and encodes to more than one character, because the
206
+ * router would split it differently. A param's constraint (`:id{[0-9]+}`) is not checked here.
207
+ */
208
+ export declare function fillRoutePath(pattern: string | CompiledRoutePattern, params: Readonly<Record<string, string | undefined>>): FilledRoutePath;
188
209
  /** Match one compiled pattern and return decoded captures. The caller decides cross-pattern order. */
189
210
  export declare function matchRoutePattern(compiled: CompiledRoutePattern, pathname: string): RoutePatternMatch;
190
- export {};
191
211
  //# sourceMappingURL=pattern.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/router/pattern.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/router/pattern.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
1
  import { RouteConfigError } from "../errors.js";
2
+ import { encodePathSegment } from "./path-codec.js";
3
+ export { browserPathSegment, decodePathSegment, encodePathSegment } from "./path-codec.js";
4
+ export { isSameOriginPath } from "./same-origin-path.js";
2
5
  const PARAM_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
3
6
  const RESERVED_PARAM_NAMES = new Set(["__proto__", "constructor", "prototype"]);
4
7
  const COMPILED_ROUTE_PATTERN = Symbol("nifra.compiled-route-pattern");
@@ -517,6 +520,120 @@ export function decodeRouteParams(raw) {
517
520
  }
518
521
  return out ?? raw;
519
522
  }
523
+ /**
524
+ * The path `pattern` names for `params`, every value spelled by {@link encodePathSegment}. A wildcard
525
+ * value is split on `/` and each part encoded, empty parts dropped; a `.` or `..` part is invalid, as
526
+ * a whole-segment value is. Nothing is thrown for a bad value: the caller decides what a missing or
527
+ * invalid param means. A param inside a mixed segment is invalid when its value holds the literal that ends it (`name` = `a.b` in
528
+ * `:name.:ext`), or when it touches the next param and encodes to more than one character, because the
529
+ * router would split it differently. A param's constraint (`:id{[0-9]+}`) is not checked here.
530
+ */
531
+ export function fillRoutePath(pattern, params) {
532
+ const compiled = typeof pattern === "string" ? compileRoutePattern(pattern) : pattern;
533
+ // Built as one string, with the two problem lists made only when a param is bad: a path that fills
534
+ // allocates nothing else.
535
+ let path = "";
536
+ let missing;
537
+ let invalid;
538
+ const segments = compiled.segments;
539
+ for (let s = 0; s < segments.length; s++) {
540
+ const segment = segments[s];
541
+ if (segment.kind === "static") {
542
+ path += `/${segment.value}`;
543
+ }
544
+ else if (segment.kind === "param") {
545
+ const value = fillValue(params, segment.name);
546
+ if (value === undefined) {
547
+ missing = noted(missing, segment.name);
548
+ path += "/";
549
+ continue;
550
+ }
551
+ const encoded = spell(value);
552
+ if (encoded === undefined)
553
+ invalid = noted(invalid, segment.name);
554
+ path += `/${encoded ?? ""}`;
555
+ }
556
+ else if (segment.kind === "wildcard") {
557
+ const value = fillValue(params, segment.name);
558
+ let joined = "";
559
+ let any = false;
560
+ if (value !== undefined) {
561
+ for (const piece of value.split("/")) {
562
+ if (piece === "")
563
+ continue;
564
+ const encoded = spell(piece);
565
+ if (encoded === undefined)
566
+ invalid = noted(invalid, segment.name);
567
+ joined += any ? `/${encoded ?? ""}` : (encoded ?? "");
568
+ any = true;
569
+ }
570
+ }
571
+ if (!any)
572
+ missing = noted(missing, segment.name);
573
+ path += `/${joined}`;
574
+ }
575
+ else {
576
+ let text = "";
577
+ const shape = segment.parts;
578
+ for (let i = 0; i < shape.length; i++) {
579
+ const part = shape[i];
580
+ if (part.t === "lit") {
581
+ text += part.v;
582
+ continue;
583
+ }
584
+ const value = fillValue(params, part.name);
585
+ if (value === undefined) {
586
+ missing = noted(missing, part.name);
587
+ continue;
588
+ }
589
+ const encoded = spell(value);
590
+ if (encoded === undefined) {
591
+ invalid = noted(invalid, part.name);
592
+ continue;
593
+ }
594
+ // matchMixedSegment ends a parameter at the first occurrence of the literal after it, one
595
+ // character in or later. A value holding that literal earlier would come back as different
596
+ // params. A literal in the last place is the segment's tail, which is anchored to its end.
597
+ const next = shape[i + 1];
598
+ // With no separating literal the matcher gives this parameter exactly one raw character.
599
+ // Splitting a percent-escape here would also make the captured parameters malformed.
600
+ if (next?.t === "param" && encoded.length !== 1)
601
+ invalid = noted(invalid, part.name);
602
+ else if (next?.t === "lit" && shape[i + 2] !== undefined) {
603
+ if ((encoded + next.v).indexOf(next.v, 1) !== encoded.length)
604
+ invalid = noted(invalid, part.name);
605
+ }
606
+ text += encoded;
607
+ }
608
+ path += `/${text}`;
609
+ }
610
+ }
611
+ return missing !== undefined || invalid !== undefined
612
+ ? { ok: false, missing: missing ?? [], invalid: invalid ?? [] }
613
+ : { ok: true, path: path === "" ? "/" : path };
614
+ }
615
+ /** A param's value when it is a non-empty string the caller gave, not one inherited from the prototype. */
616
+ function fillValue(params, name) {
617
+ const value = Object.hasOwn(params, name) ? params[name] : undefined;
618
+ return typeof value === "string" && value !== "" ? value : undefined;
619
+ }
620
+ /** `value` spelled as one path segment, or undefined when no segment can carry it. */
621
+ function spell(value) {
622
+ try {
623
+ return encodePathSegment(value);
624
+ }
625
+ catch {
626
+ return undefined;
627
+ }
628
+ }
629
+ /** `list` with `name` in it once, made when there was none. */
630
+ function noted(list, name) {
631
+ if (list === undefined)
632
+ return [name];
633
+ if (!list.includes(name))
634
+ list.push(name);
635
+ return list;
636
+ }
520
637
  /** Match one compiled pattern and return decoded captures. The caller decides cross-pattern order. */
521
638
  export function matchRoutePattern(compiled, pathname) {
522
639
  const matcher = matcherOf(compiled);
@@ -1 +1 @@
1
- {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/router/pattern.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/router/pattern.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Is `value` a destination that stays on this origin?
3
+ *
4
+ * True only for an absolute path: one leading `/`, never `//` (protocol-relative → another origin),
5
+ * and free of any character a URL parser turns into an origin escape. A leading `/` alone is not
6
+ * enough: under a special scheme `\` parses as `/`, and tab/CR/LF are STRIPPED before parsing, so
7
+ * `/\evil.example` and `/<TAB>/evil.example` both resolve to the external host `evil.example` while
8
+ * passing a `//` test. Rejecting CR/LF here also keeps a validated destination out of the
9
+ * response-splitting sink it usually flows into.
10
+ *
11
+ * One implementation, because every caller is the same open-redirect gate: `redirect()` and
12
+ * `rawHref()` in `@nifrajs/web`, the `redirectTo` of the `@nifrajs/auth` and `@nifrajs/better-auth` guards. Three
13
+ * copies of a security predicate is three chances for one of them to be hardened alone.
14
+ *
15
+ * It answers about a PATH, not a URL: an absolute `https://this.host/x` is false even for the
16
+ * current origin, because the whole point is that the value never got to name a host.
17
+ *
18
+ * It sits in a leaf with no imports, so browser code (`rawHref` in `@nifrajs/web`) can use it without
19
+ * the server entry; `@nifrajs/core/server` and `@nifrajs/core/pattern` both export it.
20
+ */
21
+ export declare function isSameOriginPath(value: string): boolean;
22
+ //# sourceMappingURL=same-origin-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"same-origin-path.d.ts","sourceRoot":"","sources":["../../src/router/same-origin-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAevD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Is `value` a destination that stays on this origin?
3
+ *
4
+ * True only for an absolute path: one leading `/`, never `//` (protocol-relative → another origin),
5
+ * and free of any character a URL parser turns into an origin escape. A leading `/` alone is not
6
+ * enough: under a special scheme `\` parses as `/`, and tab/CR/LF are STRIPPED before parsing, so
7
+ * `/\evil.example` and `/<TAB>/evil.example` both resolve to the external host `evil.example` while
8
+ * passing a `//` test. Rejecting CR/LF here also keeps a validated destination out of the
9
+ * response-splitting sink it usually flows into.
10
+ *
11
+ * One implementation, because every caller is the same open-redirect gate: `redirect()` and
12
+ * `rawHref()` in `@nifrajs/web`, the `redirectTo` of the `@nifrajs/auth` and `@nifrajs/better-auth` guards. Three
13
+ * copies of a security predicate is three chances for one of them to be hardened alone.
14
+ *
15
+ * It answers about a PATH, not a URL: an absolute `https://this.host/x` is false even for the
16
+ * current origin, because the whole point is that the value never got to name a host.
17
+ *
18
+ * It sits in a leaf with no imports, so browser code (`rawHref` in `@nifrajs/web`) can use it without
19
+ * the server entry; `@nifrajs/core/server` and `@nifrajs/core/pattern` both export it.
20
+ */
21
+ export function isSameOriginPath(value) {
22
+ if (!value.startsWith("/") || value.startsWith("//"))
23
+ return false;
24
+ // Scanned by character code rather than matched by regex: no control characters have to be written
25
+ // into a pattern, and the check is a single pass over a short string.
26
+ for (let i = 1; i < value.length; i++) {
27
+ const code = value.charCodeAt(i);
28
+ if (code === 0x5c /* \ */ || code <= 0x1f || code === 0x7f)
29
+ return false;
30
+ }
31
+ // `/.//host` and `/a/..//host` (or their `%2e` forms) resolve to the path `//host`, which any
32
+ // relative reference later built from that path - a client router's redirect - reads as a host.
33
+ // A path-absolute reference against a valid base always parses, so this cannot throw.
34
+ return (!(value.includes(".") || value.includes("%")) ||
35
+ !new URL(value, "http://n.invalid").pathname.startsWith("//"));
36
+ }
37
+ //# sourceMappingURL=same-origin-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"same-origin-path.js","sourceRoot":"","sources":["../../src/router/same-origin-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAClE,mGAAmG;IACnG,sEAAsE;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAChC,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;IAC1E,CAAC;IACD,8FAA8F;IAC9F,gGAAgG;IAChG,sFAAsF;IACtF,OAAO,CACL,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAC9D,CAAA;AACH,CAAC"}
@@ -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.9.0";
25
+ const COPY_VERSION = "5.10.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() {
@@ -1 +1 @@
1
- {"version":3,"file":"core-copies.js","sourceRoot":"","sources":["../../src/server/core-copies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,QAAQ,GAAG,UAA6D,CAAA;AAC9E,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AACvD,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;AACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAW,CAAA;AAE5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACpD,qGAAqG;IACrG,sGAAsG;IACtG,6EAA6E;IAC7E,OAAO,CAAC,IAAI,CACV,mCAAmC,MAAM,CAAC,MAAM,mDAAmD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,gMAAgM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClc,CAAA;AACH,CAAC;AAED;iFACiF;AACjF,MAAM,YAAY,GAAG,OAAO,CAAA;AAE5B;oGACoG;AACpG,MAAM,UAAU,iBAAiB;IAC/B,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;AACzC,CAAC;AAED,6DAA6D;AAC7D,MAAM,aAAa,GAAG,GAA0B,EAAE;IAChD,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACxD,IAAI,KAAK,YAAY,GAAG;QAAE,OAAO,KAAK,CAAA;IACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAA;IAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC1C,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE;IACvC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACxC,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;AAClE,CAAC,CAAA;AAED;;oGAEoG;AACpG,MAAM,UAAU,YAAY;IAC1B,MAAM,IAAI,GAAG,6DAA6D,CAAA;IAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,OAAO;QACL,GAAG,IAAI,SAAS,MAAM,CAAC,MAAM,qBAAqB;QAClD,iBAAiB,QAAQ,CAAC,IAAI,CAAC,EAAE;QACjC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,gQAAgQ;KACjQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"core-copies.js","sourceRoot":"","sources":["../../src/server/core-copies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,QAAQ,GAAG,UAA6D,CAAA;AAC9E,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AACvD,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;AACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAW,CAAA;AAE5D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACpD,qGAAqG;IACrG,sGAAsG;IACtG,6EAA6E;IAC7E,OAAO,CAAC,IAAI,CACV,mCAAmC,MAAM,CAAC,MAAM,mDAAmD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,gMAAgM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClc,CAAA;AACH,CAAC;AAED;iFACiF;AACjF,MAAM,YAAY,GAAG,QAAQ,CAAA;AAE7B;oGACoG;AACpG,MAAM,UAAU,iBAAiB;IAC/B,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;AACzC,CAAC;AAED,6DAA6D;AAC7D,MAAM,aAAa,GAAG,GAA0B,EAAE;IAChD,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACxD,IAAI,KAAK,YAAY,GAAG;QAAE,OAAO,KAAK,CAAA;IACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAA;IAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IAC1C,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE;IACvC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACxC,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;AAClE,CAAC,CAAA;AAED;;oGAEoG;AACpG,MAAM,UAAU,YAAY;IAC1B,MAAM,IAAI,GAAG,6DAA6D,CAAA;IAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACpC,OAAO;QACL,GAAG,IAAI,SAAS,MAAM,CAAC,MAAM,qBAAqB;QAClD,iBAAiB,QAAQ,CAAC,IAAI,CAAC,EAAE;QACjC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,gQAAgQ;KACjQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
@@ -4,24 +4,7 @@
4
4
  * server, and so the server can reuse them without pulling a lane's feature code into the base bundle.
5
5
  */
6
6
  import { type ResponseResult } from "./runtime-core.js";
7
- /**
8
- * Is `value` a destination that stays on this origin?
9
- *
10
- * True only for an absolute path: one leading `/`, never `//` (protocol-relative → another origin),
11
- * and free of any character a URL parser turns into an origin escape. A leading `/` alone is not
12
- * enough: under a special scheme `\` parses as `/`, and tab/CR/LF are STRIPPED before parsing, so
13
- * `/\evil.example` and `/<TAB>/evil.example` both resolve to the external host `evil.example` while
14
- * passing a `//` test. Rejecting CR/LF here also keeps a validated destination out of the
15
- * response-splitting sink it usually flows into.
16
- *
17
- * One implementation, because every caller is the same open-redirect gate: `redirect()` in
18
- * `@nifrajs/web`, the `redirectTo` of the `@nifrajs/auth` and `@nifrajs/better-auth` guards. Three
19
- * copies of a security predicate is three chances for one of them to be hardened alone.
20
- *
21
- * It answers about a PATH, not a URL: an absolute `https://this.host/x` is false even for the
22
- * current origin, because the whole point is that the value never got to name a host.
23
- */
24
- export declare function isSameOriginPath(value: string): boolean;
7
+ export { isSameOriginPath } from "../router/same-origin-path.js";
25
8
  /**
26
9
  * Whether `method` is a token a route can be registered under: uppercase ASCII letters, digits and
27
10
  * hyphens, a letter first, 1 to 32 characters. That covers every method in the IANA registry.
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,mBAAmB,CAAA;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAevD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAsBxD;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,QAAQ,CAKV;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,cAAc,CAEhB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAMD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAehD;AAKD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAc9C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAM7E"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,mBAAmB,CAAA;AAE/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAEhE;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAsBxD;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,QAAQ,CAKV;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,cAAc,CAEhB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAMD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAehD;AAKD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAc9C;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAM7E"}
@@ -4,39 +4,7 @@
4
4
  * server, and so the server can reuse them without pulling a lane's feature code into the base bundle.
5
5
  */
6
6
  import { status as statusResult } from "./runtime-core.js";
7
- /**
8
- * Is `value` a destination that stays on this origin?
9
- *
10
- * True only for an absolute path: one leading `/`, never `//` (protocol-relative → another origin),
11
- * and free of any character a URL parser turns into an origin escape. A leading `/` alone is not
12
- * enough: under a special scheme `\` parses as `/`, and tab/CR/LF are STRIPPED before parsing, so
13
- * `/\evil.example` and `/<TAB>/evil.example` both resolve to the external host `evil.example` while
14
- * passing a `//` test. Rejecting CR/LF here also keeps a validated destination out of the
15
- * response-splitting sink it usually flows into.
16
- *
17
- * One implementation, because every caller is the same open-redirect gate: `redirect()` in
18
- * `@nifrajs/web`, the `redirectTo` of the `@nifrajs/auth` and `@nifrajs/better-auth` guards. Three
19
- * copies of a security predicate is three chances for one of them to be hardened alone.
20
- *
21
- * It answers about a PATH, not a URL: an absolute `https://this.host/x` is false even for the
22
- * current origin, because the whole point is that the value never got to name a host.
23
- */
24
- export function isSameOriginPath(value) {
25
- if (!value.startsWith("/") || value.startsWith("//"))
26
- return false;
27
- // Scanned by character code rather than matched by regex: no control characters have to be written
28
- // into a pattern, and the check is a single pass over a short string.
29
- for (let i = 1; i < value.length; i++) {
30
- const code = value.charCodeAt(i);
31
- if (code === 0x5c /* \ */ || code <= 0x1f || code === 0x7f)
32
- return false;
33
- }
34
- // `/.//host` and `/a/..//host` (or their `%2e` forms) resolve to the path `//host`, which any
35
- // relative reference later built from that path - a client router's redirect - reads as a host.
36
- // A path-absolute reference against a valid base always parses, so this cannot throw.
37
- return (!(value.includes(".") || value.includes("%")) ||
38
- !new URL(value, "http://n.invalid").pathname.startsWith("//"));
39
- }
7
+ export { isSameOriginPath } from "../router/same-origin-path.js";
40
8
  /**
41
9
  * Whether `method` is a token a route can be registered under: uppercase ASCII letters, digits and
42
10
  * hyphens, a letter first, 1 to 32 characters. That covers every method in the IANA registry.
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.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.9.0",
3
+ "version": "5.10.0",
4
4
  "description": "Bun-native, contract-first HTTP framework - the router, server, and route descriptor.",
5
5
  "keywords": [
6
6
  "bun",
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.9.0" as const
19
+ export const VERSION = "5.10.0" as const
20
20
 
21
21
  export type Version = typeof VERSION
22
22
 
@@ -0,0 +1,93 @@
1
+ // One URL path segment, encoded and decoded. Every place that spells a value into a path calls this
2
+ // module, so a link, a prerendered file, a client request and a public asset agree on one spelling.
3
+
4
+ const HEX = "0123456789ABCDEF"
5
+
6
+ const UNRESERVED = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~"
7
+
8
+ function rawTable(chars: string): Uint8Array {
9
+ const table = new Uint8Array(128)
10
+ for (let i = 0; i < chars.length; i++) table[chars.charCodeAt(i)] = 1
11
+ return table
12
+ }
13
+
14
+ // RFC 3986 `pchar` minus `;`: the unreserved set, the sub-delimiters, `:` and `@`. `;` delimits path
15
+ // parameters (RFC 3986 section 3.3) and servlet containers strip them; `[`, `]` and `|` are not valid in
16
+ // a path at all and Tomcat rejects them unencoded by default.
17
+ const CANONICAL = /* @__PURE__ */ rawTable(`${UNRESERVED}!$&'()*+,:=@`)
18
+
19
+ // What a browser leaves as written in a path: the canonical set plus `;`, `[`, `]` and `|`.
20
+ const BROWSER = /* @__PURE__ */ rawTable(`${UNRESERVED}!$&'()*+,:=@;[]|`)
21
+
22
+ function encodeNonAscii(run: string): string {
23
+ try {
24
+ return encodeURIComponent(run)
25
+ } catch {
26
+ throw new RangeError("[nifra/core] a path segment cannot hold a lone surrogate")
27
+ }
28
+ }
29
+
30
+ function encodeWith(raw: Uint8Array, value: string): string {
31
+ if (value === "." || value === "..") {
32
+ throw new RangeError(
33
+ `[nifra/core] a path segment cannot be ${JSON.stringify(value)}: every spelling of it is a dot segment to a URL parser`,
34
+ )
35
+ }
36
+ const length = value.length
37
+ let out = ""
38
+ let start = 0
39
+ let i = 0
40
+ while (i < length) {
41
+ const code = value.charCodeAt(i)
42
+ if (code < 128 && raw[code] === 1) {
43
+ i++
44
+ continue
45
+ }
46
+ out += value.slice(start, i)
47
+ if (code < 128) {
48
+ out += `%${HEX[code >> 4]}${HEX[code & 15]}`
49
+ i++
50
+ } else {
51
+ let end = i + 1
52
+ while (end < length && value.charCodeAt(end) >= 128) end++
53
+ out += encodeNonAscii(value.slice(i, end))
54
+ i = end
55
+ }
56
+ start = i
57
+ }
58
+ return start === 0 ? value : out + value.slice(start)
59
+ }
60
+
61
+ /**
62
+ * `value` as one path segment. Left as written: letters, digits, the at sign and `- . _ ~ ! $ & ' ( ) * + , : =`.
63
+ * Everything else is percent-encoded, UTF-8 and upper-case hex, including `; [ ] | / ? # % \`.
64
+ *
65
+ * Throws a `RangeError` for a value that no segment can carry: exactly `.` or `..` (a URL parser reads
66
+ * `%2E` and `%2E%2E` as dot segments too) and a lone surrogate (substituting U+FFFD would map distinct
67
+ * values to one URL). The empty string is returned as is; a caller that cannot use it checks for it.
68
+ */
69
+ export function encodePathSegment(value: string): string {
70
+ return encodeWith(CANONICAL, value)
71
+ }
72
+
73
+ /**
74
+ * `value` as a browser spells it in a request URL: {@link encodePathSegment} with `; [ ] |` left as
75
+ * written. Used for one thing, registering a public file under the spelling its page links request;
76
+ * it differs from the canonical form on those four characters only.
77
+ */
78
+ export function browserPathSegment(value: string): string {
79
+ return encodeWith(BROWSER, value)
80
+ }
81
+
82
+ /**
83
+ * `raw` with its percent-escapes decoded, or `undefined` when one is malformed. The inverse of
84
+ * {@link encodePathSegment} and of {@link browserPathSegment}; a segment in any other spelling decodes
85
+ * too. What a malformed escape means is the caller's policy.
86
+ */
87
+ export function decodePathSegment(raw: string): string | undefined {
88
+ try {
89
+ return decodeURIComponent(raw)
90
+ } catch {
91
+ return undefined
92
+ }
93
+ }
@@ -1,4 +1,8 @@
1
1
  import { RouteConfigError } from "../errors.ts"
2
+ import { encodePathSegment } from "./path-codec.ts"
3
+
4
+ export { browserPathSegment, decodePathSegment, encodePathSegment } from "./path-codec.ts"
5
+ export { isSameOriginPath } from "./same-origin-path.ts"
2
6
 
3
7
  const PARAM_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/
4
8
  const RESERVED_PARAM_NAMES = new Set(["__proto__", "constructor", "prototype"])
@@ -649,6 +653,129 @@ export function decodeRouteParams(raw: Record<string, string>): Record<string, s
649
653
  return out ?? raw
650
654
  }
651
655
 
656
+ export type FilledRoutePath =
657
+ | { readonly ok: true; readonly path: string }
658
+ | {
659
+ readonly ok: false
660
+ /** Params the pattern names that `params` leaves out or holds as the empty string. */
661
+ readonly missing: readonly string[]
662
+ /** Params whose value cannot be carried or would be split differently by this pattern. */
663
+ readonly invalid: readonly string[]
664
+ }
665
+
666
+ /**
667
+ * The path `pattern` names for `params`, every value spelled by {@link encodePathSegment}. A wildcard
668
+ * value is split on `/` and each part encoded, empty parts dropped; a `.` or `..` part is invalid, as
669
+ * a whole-segment value is. Nothing is thrown for a bad value: the caller decides what a missing or
670
+ * invalid param means. A param inside a mixed segment is invalid when its value holds the literal that ends it (`name` = `a.b` in
671
+ * `:name.:ext`), or when it touches the next param and encodes to more than one character, because the
672
+ * router would split it differently. A param's constraint (`:id{[0-9]+}`) is not checked here.
673
+ */
674
+ export function fillRoutePath(
675
+ pattern: string | CompiledRoutePattern,
676
+ params: Readonly<Record<string, string | undefined>>,
677
+ ): FilledRoutePath {
678
+ const compiled = typeof pattern === "string" ? compileRoutePattern(pattern) : pattern
679
+ // Built as one string, with the two problem lists made only when a param is bad: a path that fills
680
+ // allocates nothing else.
681
+ let path = ""
682
+ let missing: string[] | undefined
683
+ let invalid: string[] | undefined
684
+ const segments = compiled.segments
685
+ for (let s = 0; s < segments.length; s++) {
686
+ const segment = segments[s]!
687
+ if (segment.kind === "static") {
688
+ path += `/${segment.value}`
689
+ } else if (segment.kind === "param") {
690
+ const value = fillValue(params, segment.name)
691
+ if (value === undefined) {
692
+ missing = noted(missing, segment.name)
693
+ path += "/"
694
+ continue
695
+ }
696
+ const encoded = spell(value)
697
+ if (encoded === undefined) invalid = noted(invalid, segment.name)
698
+ path += `/${encoded ?? ""}`
699
+ } else if (segment.kind === "wildcard") {
700
+ const value = fillValue(params, segment.name)
701
+ let joined = ""
702
+ let any = false
703
+ if (value !== undefined) {
704
+ for (const piece of value.split("/")) {
705
+ if (piece === "") continue
706
+ const encoded = spell(piece)
707
+ if (encoded === undefined) invalid = noted(invalid, segment.name)
708
+ joined += any ? `/${encoded ?? ""}` : (encoded ?? "")
709
+ any = true
710
+ }
711
+ }
712
+ if (!any) missing = noted(missing, segment.name)
713
+ path += `/${joined}`
714
+ } else {
715
+ let text = ""
716
+ const shape = segment.parts
717
+ for (let i = 0; i < shape.length; i++) {
718
+ const part = shape[i]!
719
+ if (part.t === "lit") {
720
+ text += part.v
721
+ continue
722
+ }
723
+ const value = fillValue(params, part.name)
724
+ if (value === undefined) {
725
+ missing = noted(missing, part.name)
726
+ continue
727
+ }
728
+ const encoded = spell(value)
729
+ if (encoded === undefined) {
730
+ invalid = noted(invalid, part.name)
731
+ continue
732
+ }
733
+ // matchMixedSegment ends a parameter at the first occurrence of the literal after it, one
734
+ // character in or later. A value holding that literal earlier would come back as different
735
+ // params. A literal in the last place is the segment's tail, which is anchored to its end.
736
+ const next = shape[i + 1]
737
+ // With no separating literal the matcher gives this parameter exactly one raw character.
738
+ // Splitting a percent-escape here would also make the captured parameters malformed.
739
+ if (next?.t === "param" && encoded.length !== 1) invalid = noted(invalid, part.name)
740
+ else if (next?.t === "lit" && shape[i + 2] !== undefined) {
741
+ if ((encoded + next.v).indexOf(next.v, 1) !== encoded.length)
742
+ invalid = noted(invalid, part.name)
743
+ }
744
+ text += encoded
745
+ }
746
+ path += `/${text}`
747
+ }
748
+ }
749
+ return missing !== undefined || invalid !== undefined
750
+ ? { ok: false, missing: missing ?? [], invalid: invalid ?? [] }
751
+ : { ok: true, path: path === "" ? "/" : path }
752
+ }
753
+
754
+ /** A param's value when it is a non-empty string the caller gave, not one inherited from the prototype. */
755
+ function fillValue(
756
+ params: Readonly<Record<string, string | undefined>>,
757
+ name: string,
758
+ ): string | undefined {
759
+ const value = Object.hasOwn(params, name) ? params[name] : undefined
760
+ return typeof value === "string" && value !== "" ? value : undefined
761
+ }
762
+
763
+ /** `value` spelled as one path segment, or undefined when no segment can carry it. */
764
+ function spell(value: string): string | undefined {
765
+ try {
766
+ return encodePathSegment(value)
767
+ } catch {
768
+ return undefined
769
+ }
770
+ }
771
+
772
+ /** `list` with `name` in it once, made when there was none. */
773
+ function noted(list: string[] | undefined, name: string): string[] {
774
+ if (list === undefined) return [name]
775
+ if (!list.includes(name)) list.push(name)
776
+ return list
777
+ }
778
+
652
779
  /** Match one compiled pattern and return decoded captures. The caller decides cross-pattern order. */
653
780
  export function matchRoutePattern(
654
781
  compiled: CompiledRoutePattern,
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Is `value` a destination that stays on this origin?
3
+ *
4
+ * True only for an absolute path: one leading `/`, never `//` (protocol-relative → another origin),
5
+ * and free of any character a URL parser turns into an origin escape. A leading `/` alone is not
6
+ * enough: under a special scheme `\` parses as `/`, and tab/CR/LF are STRIPPED before parsing, so
7
+ * `/\evil.example` and `/<TAB>/evil.example` both resolve to the external host `evil.example` while
8
+ * passing a `//` test. Rejecting CR/LF here also keeps a validated destination out of the
9
+ * response-splitting sink it usually flows into.
10
+ *
11
+ * One implementation, because every caller is the same open-redirect gate: `redirect()` and
12
+ * `rawHref()` in `@nifrajs/web`, the `redirectTo` of the `@nifrajs/auth` and `@nifrajs/better-auth` guards. Three
13
+ * copies of a security predicate is three chances for one of them to be hardened alone.
14
+ *
15
+ * It answers about a PATH, not a URL: an absolute `https://this.host/x` is false even for the
16
+ * current origin, because the whole point is that the value never got to name a host.
17
+ *
18
+ * It sits in a leaf with no imports, so browser code (`rawHref` in `@nifrajs/web`) can use it without
19
+ * the server entry; `@nifrajs/core/server` and `@nifrajs/core/pattern` both export it.
20
+ */
21
+ export function isSameOriginPath(value: string): boolean {
22
+ if (!value.startsWith("/") || value.startsWith("//")) return false
23
+ // Scanned by character code rather than matched by regex: no control characters have to be written
24
+ // into a pattern, and the check is a single pass over a short string.
25
+ for (let i = 1; i < value.length; i++) {
26
+ const code = value.charCodeAt(i)
27
+ if (code === 0x5c /* \ */ || code <= 0x1f || code === 0x7f) return false
28
+ }
29
+ // `/.//host` and `/a/..//host` (or their `%2e` forms) resolve to the path `//host`, which any
30
+ // relative reference later built from that path - a client router's redirect - reads as a host.
31
+ // A path-absolute reference against a valid base always parses, so this cannot throw.
32
+ return (
33
+ !(value.includes(".") || value.includes("%")) ||
34
+ !new URL(value, "http://n.invalid").pathname.startsWith("//")
35
+ )
36
+ }
@@ -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.9.0"
29
+ const COPY_VERSION = "5.10.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. */
@@ -5,39 +5,7 @@
5
5
  */
6
6
  import { type ResponseResult, status as statusResult } from "./runtime-core.ts"
7
7
 
8
- /**
9
- * Is `value` a destination that stays on this origin?
10
- *
11
- * True only for an absolute path: one leading `/`, never `//` (protocol-relative → another origin),
12
- * and free of any character a URL parser turns into an origin escape. A leading `/` alone is not
13
- * enough: under a special scheme `\` parses as `/`, and tab/CR/LF are STRIPPED before parsing, so
14
- * `/\evil.example` and `/<TAB>/evil.example` both resolve to the external host `evil.example` while
15
- * passing a `//` test. Rejecting CR/LF here also keeps a validated destination out of the
16
- * response-splitting sink it usually flows into.
17
- *
18
- * One implementation, because every caller is the same open-redirect gate: `redirect()` in
19
- * `@nifrajs/web`, the `redirectTo` of the `@nifrajs/auth` and `@nifrajs/better-auth` guards. Three
20
- * copies of a security predicate is three chances for one of them to be hardened alone.
21
- *
22
- * It answers about a PATH, not a URL: an absolute `https://this.host/x` is false even for the
23
- * current origin, because the whole point is that the value never got to name a host.
24
- */
25
- export function isSameOriginPath(value: string): boolean {
26
- if (!value.startsWith("/") || value.startsWith("//")) return false
27
- // Scanned by character code rather than matched by regex: no control characters have to be written
28
- // into a pattern, and the check is a single pass over a short string.
29
- for (let i = 1; i < value.length; i++) {
30
- const code = value.charCodeAt(i)
31
- if (code === 0x5c /* \ */ || code <= 0x1f || code === 0x7f) return false
32
- }
33
- // `/.//host` and `/a/..//host` (or their `%2e` forms) resolve to the path `//host`, which any
34
- // relative reference later built from that path - a client router's redirect - reads as a host.
35
- // A path-absolute reference against a valid base always parses, so this cannot throw.
36
- return (
37
- !(value.includes(".") || value.includes("%")) ||
38
- !new URL(value, "http://n.invalid").pathname.startsWith("//")
39
- )
40
- }
8
+ export { isSameOriginPath } from "../router/same-origin-path.ts"
41
9
 
42
10
  /**
43
11
  * Whether `method` is a token a route can be registered under: uppercase ASCII letters, digits and