Commit 003bf43
committed
fix: encode NTFS-reserved characters in route-derived artifact filenames
Dynamic-route patterns (/:param, /*) and concrete generateStaticParams values
flow into generated artifact names: preload/loader assets via cleanUrl() and
the static HTML path in buildPage. The characters < > : " | ? * are reserved
on Windows filesystems - a colon-led segment fails the write outright and a
mid-name colon silently creates an NTFS alternate data stream. The per-page
build error is caught and logged as "skipping page" while the build exits 0,
so on Windows every root-level (or route-group-rooted) dynamic route and
every non-SSR dynamic route silently disappears from routeToBuildInfo and
`one serve` returns a bare 404 for it; surviving nested +ssr routes write
their preloads into invisible ADS streams that vanish from any copied or
deployed dist.
Encode reserved characters as =hh (hex char code, with literal = self-escaped
first so decoding is unambiguous) in cleanUrl()'s filename transform and in
the htmlPath artifact, and decode them in getPathFromLoaderPath(). The
encoding is identity for paths without reserved characters, so artifact names
for every currently-working route are byte-identical; serve-side postfix
matching (PRELOAD_JS_POSTFIX_REGEX etc.) is unaffected.
Validated on Windows 11: tests/test-app-cases dynamic-route-at-root and
catch-all prod phases go 404 -> 200 (routes restored to the manifest, zero
"skipping page" warnings) and test-spa-shell-routing goes from 8 failed prod
tests to 27/27 in both dev and prod; packages/one vitest 534 passed with 11
new roundtrip/reserved-character tests. On Linux/macOS output is unchanged
for clean paths, and pattern-named artifacts become portable (no more :/* in
dist filenames for deploy tooling to reject).1 parent ddd092a commit 003bf43
4 files changed
Lines changed: 102 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
8 | 13 | | |
9 | 14 | | |
10 | 15 | | |
| |||
64 | 69 | | |
65 | 70 | | |
66 | 71 | | |
67 | | - | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
68 | 78 | | |
69 | 79 | | |
70 | 80 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
3 | 8 | | |
4 | 9 | | |
5 | 10 | | |
| |||
91 | 96 | | |
92 | 97 | | |
93 | 98 | | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
94 | 156 | | |
95 | 157 | | |
96 | 158 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
11 | 32 | | |
12 | | - | |
13 | | - | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
14 | 36 | | |
15 | 37 | | |
16 | 38 | | |
| |||
43 | 65 | | |
44 | 66 | | |
45 | 67 | | |
46 | | - | |
| 68 | + | |
47 | 69 | | |
48 | 70 | | |
49 | 71 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
1 | 3 | | |
2 | 4 | | |
3 | 5 | | |
| |||
0 commit comments