@textjs/app 0.0.0-stage → 1.0.2

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.
Files changed (335) hide show
  1. package/README.md +34 -2
  2. package/bin/text.js +29 -0
  3. package/bin/text.ts +13 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/cli/build.d.ts +39 -0
  6. package/dist/cli/build.d.ts.map +1 -0
  7. package/dist/cli/build.js +157 -0
  8. package/dist/cli/build.js.map +1 -0
  9. package/dist/cli/config.d.ts +22 -0
  10. package/dist/cli/config.d.ts.map +1 -0
  11. package/dist/cli/config.js +73 -0
  12. package/dist/cli/config.js.map +1 -0
  13. package/dist/cli/dev.d.ts +12 -0
  14. package/dist/cli/dev.d.ts.map +1 -0
  15. package/dist/cli/dev.js +49 -0
  16. package/dist/cli/dev.js.map +1 -0
  17. package/dist/cli/index.d.ts +26 -0
  18. package/dist/cli/index.d.ts.map +1 -0
  19. package/dist/cli/index.js +192 -0
  20. package/dist/cli/index.js.map +1 -0
  21. package/dist/cli/run.d.ts +31 -0
  22. package/dist/cli/run.d.ts.map +1 -0
  23. package/dist/cli/run.js +111 -0
  24. package/dist/cli/run.js.map +1 -0
  25. package/dist/cli/start.d.ts +14 -0
  26. package/dist/cli/start.d.ts.map +1 -0
  27. package/dist/cli/start.js +183 -0
  28. package/dist/cli/start.js.map +1 -0
  29. package/dist/cli/ui.d.ts +35 -0
  30. package/dist/cli/ui.d.ts.map +1 -0
  31. package/dist/cli/ui.js +73 -0
  32. package/dist/cli/ui.js.map +1 -0
  33. package/dist/client.d.ts +34 -0
  34. package/dist/client.d.ts.map +1 -0
  35. package/dist/client.js +93 -0
  36. package/dist/client.js.map +1 -0
  37. package/dist/config.d.ts +143 -0
  38. package/dist/config.d.ts.map +1 -0
  39. package/dist/config.js +28 -0
  40. package/dist/config.js.map +1 -0
  41. package/dist/context.d.ts +44 -0
  42. package/dist/context.d.ts.map +1 -0
  43. package/dist/context.js +26 -0
  44. package/dist/context.js.map +1 -0
  45. package/dist/dev-errors.d.ts +68 -0
  46. package/dist/dev-errors.d.ts.map +1 -0
  47. package/dist/dev-errors.js +121 -0
  48. package/dist/dev-errors.js.map +1 -0
  49. package/dist/devtools.d.ts +64 -0
  50. package/dist/devtools.d.ts.map +1 -0
  51. package/dist/devtools.js +186 -0
  52. package/dist/devtools.js.map +1 -0
  53. package/dist/frame-mirror.d.ts +19 -0
  54. package/dist/frame-mirror.d.ts.map +1 -0
  55. package/dist/frame-mirror.js +141 -0
  56. package/dist/frame-mirror.js.map +1 -0
  57. package/dist/frame-protocol.d.ts +175 -0
  58. package/dist/frame-protocol.d.ts.map +1 -0
  59. package/dist/frame-protocol.js +369 -0
  60. package/dist/frame-protocol.js.map +1 -0
  61. package/dist/history.d.ts +54 -0
  62. package/dist/history.d.ts.map +1 -0
  63. package/dist/history.js +152 -0
  64. package/dist/history.js.map +1 -0
  65. package/dist/index.d.ts +9 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +8 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/link.d.ts +32 -0
  70. package/dist/link.d.ts.map +1 -0
  71. package/dist/link.js +54 -0
  72. package/dist/link.js.map +1 -0
  73. package/dist/live-player.d.ts +83 -0
  74. package/dist/live-player.d.ts.map +1 -0
  75. package/dist/live-player.js +413 -0
  76. package/dist/live-player.js.map +1 -0
  77. package/dist/live-protocol.d.ts +132 -0
  78. package/dist/live-protocol.d.ts.map +1 -0
  79. package/dist/live-protocol.js +278 -0
  80. package/dist/live-protocol.js.map +1 -0
  81. package/dist/live-stub.d.ts +10 -0
  82. package/dist/live-stub.d.ts.map +1 -0
  83. package/dist/live-stub.js +32 -0
  84. package/dist/live-stub.js.map +1 -0
  85. package/dist/mcp/cli.d.ts +22 -0
  86. package/dist/mcp/cli.d.ts.map +1 -0
  87. package/dist/mcp/cli.js +177 -0
  88. package/dist/mcp/cli.js.map +1 -0
  89. package/dist/mcp/frame.d.ts +58 -0
  90. package/dist/mcp/frame.d.ts.map +1 -0
  91. package/dist/mcp/frame.js +169 -0
  92. package/dist/mcp/frame.js.map +1 -0
  93. package/dist/mcp/index.d.ts +15 -0
  94. package/dist/mcp/index.d.ts.map +1 -0
  95. package/dist/mcp/index.js +15 -0
  96. package/dist/mcp/index.js.map +1 -0
  97. package/dist/mcp/inspect.d.ts +95 -0
  98. package/dist/mcp/inspect.d.ts.map +1 -0
  99. package/dist/mcp/inspect.js +386 -0
  100. package/dist/mcp/inspect.js.map +1 -0
  101. package/dist/mcp/keys.d.ts +20 -0
  102. package/dist/mcp/keys.d.ts.map +1 -0
  103. package/dist/mcp/keys.js +87 -0
  104. package/dist/mcp/keys.js.map +1 -0
  105. package/dist/mcp/logs.d.ts +63 -0
  106. package/dist/mcp/logs.d.ts.map +1 -0
  107. package/dist/mcp/logs.js +217 -0
  108. package/dist/mcp/logs.js.map +1 -0
  109. package/dist/mcp/server.d.ts +64 -0
  110. package/dist/mcp/server.d.ts.map +1 -0
  111. package/dist/mcp/server.js +485 -0
  112. package/dist/mcp/server.js.map +1 -0
  113. package/dist/mcp/session.d.ts +230 -0
  114. package/dist/mcp/session.d.ts.map +1 -0
  115. package/dist/mcp/session.js +742 -0
  116. package/dist/mcp/session.js.map +1 -0
  117. package/dist/navigation-errors.d.ts +28 -0
  118. package/dist/navigation-errors.d.ts.map +1 -0
  119. package/dist/navigation-errors.js +43 -0
  120. package/dist/navigation-errors.js.map +1 -0
  121. package/dist/navigation.d.ts +21 -0
  122. package/dist/navigation.d.ts.map +1 -0
  123. package/dist/navigation.js +33 -0
  124. package/dist/navigation.js.map +1 -0
  125. package/dist/router.d.ts +76 -0
  126. package/dist/router.d.ts.map +1 -0
  127. package/dist/router.js +296 -0
  128. package/dist/router.js.map +1 -0
  129. package/dist/routing.d.ts +101 -0
  130. package/dist/routing.d.ts.map +1 -0
  131. package/dist/routing.js +286 -0
  132. package/dist/routing.js.map +1 -0
  133. package/dist/server/adapters/build-step.d.ts +34 -0
  134. package/dist/server/adapters/build-step.d.ts.map +1 -0
  135. package/dist/server/adapters/build-step.js +112 -0
  136. package/dist/server/adapters/build-step.js.map +1 -0
  137. package/dist/server/adapters/bun.d.ts +8 -0
  138. package/dist/server/adapters/bun.d.ts.map +1 -0
  139. package/dist/server/adapters/bun.js +89 -0
  140. package/dist/server/adapters/bun.js.map +1 -0
  141. package/dist/server/adapters/bundle.d.ts +21 -0
  142. package/dist/server/adapters/bundle.d.ts.map +1 -0
  143. package/dist/server/adapters/bundle.js +86 -0
  144. package/dist/server/adapters/bundle.js.map +1 -0
  145. package/dist/server/adapters/cloudflare.d.ts +29 -0
  146. package/dist/server/adapters/cloudflare.d.ts.map +1 -0
  147. package/dist/server/adapters/cloudflare.js +105 -0
  148. package/dist/server/adapters/cloudflare.js.map +1 -0
  149. package/dist/server/adapters/index.d.ts +10 -0
  150. package/dist/server/adapters/index.d.ts.map +1 -0
  151. package/dist/server/adapters/index.js +24 -0
  152. package/dist/server/adapters/index.js.map +1 -0
  153. package/dist/server/adapters/runtime-node.d.ts +16 -0
  154. package/dist/server/adapters/runtime-node.d.ts.map +1 -0
  155. package/dist/server/adapters/runtime-node.js +29 -0
  156. package/dist/server/adapters/runtime-node.js.map +1 -0
  157. package/dist/server/adapters/runtime.d.ts +42 -0
  158. package/dist/server/adapters/runtime.d.ts.map +1 -0
  159. package/dist/server/adapters/runtime.js +115 -0
  160. package/dist/server/adapters/runtime.js.map +1 -0
  161. package/dist/server/adapters/shared.d.ts +66 -0
  162. package/dist/server/adapters/shared.d.ts.map +1 -0
  163. package/dist/server/adapters/shared.js +124 -0
  164. package/dist/server/adapters/shared.js.map +1 -0
  165. package/dist/server/adapters/static.d.ts +9 -0
  166. package/dist/server/adapters/static.d.ts.map +1 -0
  167. package/dist/server/adapters/static.js +70 -0
  168. package/dist/server/adapters/static.js.map +1 -0
  169. package/dist/server/adapters/vercel.d.ts +43 -0
  170. package/dist/server/adapters/vercel.d.ts.map +1 -0
  171. package/dist/server/adapters/vercel.js +119 -0
  172. package/dist/server/adapters/vercel.js.map +1 -0
  173. package/dist/server/bun-jsx.d.ts +18 -0
  174. package/dist/server/bun-jsx.d.ts.map +1 -0
  175. package/dist/server/bun-jsx.js +56 -0
  176. package/dist/server/bun-jsx.js.map +1 -0
  177. package/dist/server/cache-route.d.ts +38 -0
  178. package/dist/server/cache-route.d.ts.map +1 -0
  179. package/dist/server/cache-route.js +109 -0
  180. package/dist/server/cache-route.js.map +1 -0
  181. package/dist/server/cache.d.ts +131 -0
  182. package/dist/server/cache.d.ts.map +1 -0
  183. package/dist/server/cache.js +409 -0
  184. package/dist/server/cache.js.map +1 -0
  185. package/dist/server/frames.d.ts +45 -0
  186. package/dist/server/frames.d.ts.map +1 -0
  187. package/dist/server/frames.js +294 -0
  188. package/dist/server/frames.js.map +1 -0
  189. package/dist/server/http.d.ts +80 -0
  190. package/dist/server/http.d.ts.map +1 -0
  191. package/dist/server/http.js +453 -0
  192. package/dist/server/http.js.map +1 -0
  193. package/dist/server/jsx-dev-runtime.d.ts +5 -0
  194. package/dist/server/jsx-dev-runtime.d.ts.map +1 -0
  195. package/dist/server/jsx-dev-runtime.js +6 -0
  196. package/dist/server/jsx-dev-runtime.js.map +1 -0
  197. package/dist/server/jsx-runtime.d.ts +10 -0
  198. package/dist/server/jsx-runtime.d.ts.map +1 -0
  199. package/dist/server/jsx-runtime.js +11 -0
  200. package/dist/server/jsx-runtime.js.map +1 -0
  201. package/dist/server/live-app.d.ts +87 -0
  202. package/dist/server/live-app.d.ts.map +1 -0
  203. package/dist/server/live-app.js +307 -0
  204. package/dist/server/live-app.js.map +1 -0
  205. package/dist/server/live-build.d.ts +70 -0
  206. package/dist/server/live-build.d.ts.map +1 -0
  207. package/dist/server/live-build.js +222 -0
  208. package/dist/server/live-build.js.map +1 -0
  209. package/dist/server/live-dev.d.ts +62 -0
  210. package/dist/server/live-dev.d.ts.map +1 -0
  211. package/dist/server/live-dev.js +313 -0
  212. package/dist/server/live-dev.js.map +1 -0
  213. package/dist/server/live-manifest.d.ts +23 -0
  214. package/dist/server/live-manifest.d.ts.map +1 -0
  215. package/dist/server/live-manifest.js +7 -0
  216. package/dist/server/live-manifest.js.map +1 -0
  217. package/dist/server/live-prod.d.ts +30 -0
  218. package/dist/server/live-prod.d.ts.map +1 -0
  219. package/dist/server/live-prod.js +97 -0
  220. package/dist/server/live-prod.js.map +1 -0
  221. package/dist/server/live-routes.d.ts +72 -0
  222. package/dist/server/live-routes.d.ts.map +1 -0
  223. package/dist/server/live-routes.js +274 -0
  224. package/dist/server/live-routes.js.map +1 -0
  225. package/dist/server/live-web.d.ts +16 -0
  226. package/dist/server/live-web.d.ts.map +1 -0
  227. package/dist/server/live-web.js +159 -0
  228. package/dist/server/live-web.js.map +1 -0
  229. package/dist/server/live.d.ts +138 -0
  230. package/dist/server/live.d.ts.map +1 -0
  231. package/dist/server/live.js +542 -0
  232. package/dist/server/live.js.map +1 -0
  233. package/dist/server/middleware-node.d.ts +48 -0
  234. package/dist/server/middleware-node.d.ts.map +1 -0
  235. package/dist/server/middleware-node.js +167 -0
  236. package/dist/server/middleware-node.js.map +1 -0
  237. package/dist/server/middleware-runtime.d.ts +97 -0
  238. package/dist/server/middleware-runtime.d.ts.map +1 -0
  239. package/dist/server/middleware-runtime.js +447 -0
  240. package/dist/server/middleware-runtime.js.map +1 -0
  241. package/dist/server/middleware.d.ts +145 -0
  242. package/dist/server/middleware.d.ts.map +1 -0
  243. package/dist/server/middleware.js +365 -0
  244. package/dist/server/middleware.js.map +1 -0
  245. package/dist/server/ppr.d.ts +22 -0
  246. package/dist/server/ppr.d.ts.map +1 -0
  247. package/dist/server/ppr.js +58 -0
  248. package/dist/server/ppr.js.map +1 -0
  249. package/dist/server/scan.d.ts +48 -0
  250. package/dist/server/scan.d.ts.map +1 -0
  251. package/dist/server/scan.js +161 -0
  252. package/dist/server/scan.js.map +1 -0
  253. package/dist/server/server-components.d.ts +65 -0
  254. package/dist/server/server-components.d.ts.map +1 -0
  255. package/dist/server/server-components.js +215 -0
  256. package/dist/server/server-components.js.map +1 -0
  257. package/dist/terminal.d.ts +5 -0
  258. package/dist/terminal.d.ts.map +1 -0
  259. package/dist/terminal.js +5 -0
  260. package/dist/terminal.js.map +1 -0
  261. package/dist/testing.d.ts +5 -0
  262. package/dist/testing.d.ts.map +1 -0
  263. package/dist/testing.js +5 -0
  264. package/dist/testing.js.map +1 -0
  265. package/dist/vite-plugin.d.ts +51 -0
  266. package/dist/vite-plugin.d.ts.map +1 -0
  267. package/dist/vite-plugin.js +403 -0
  268. package/dist/vite-plugin.js.map +1 -0
  269. package/package.json +130 -4
  270. package/src/cli/build.ts +182 -0
  271. package/src/cli/config.ts +72 -0
  272. package/src/cli/dev.ts +54 -0
  273. package/src/cli/index.ts +185 -0
  274. package/src/cli/run.ts +124 -0
  275. package/src/cli/start.ts +194 -0
  276. package/src/cli/ui.ts +93 -0
  277. package/src/client.tsx +122 -0
  278. package/src/config.ts +155 -0
  279. package/src/context.ts +69 -0
  280. package/src/dev-errors.ts +167 -0
  281. package/src/devtools.tsx +419 -0
  282. package/src/frame-mirror.ts +145 -0
  283. package/src/frame-protocol.ts +435 -0
  284. package/src/history.ts +201 -0
  285. package/src/index.ts +9 -0
  286. package/src/link.tsx +108 -0
  287. package/src/live-player.ts +449 -0
  288. package/src/live-protocol.ts +317 -0
  289. package/src/live-stub.tsx +32 -0
  290. package/src/mcp/cli.ts +188 -0
  291. package/src/mcp/frame.ts +224 -0
  292. package/src/mcp/index.ts +15 -0
  293. package/src/mcp/inspect.ts +445 -0
  294. package/src/mcp/keys.ts +86 -0
  295. package/src/mcp/logs.ts +225 -0
  296. package/src/mcp/server.ts +595 -0
  297. package/src/mcp/session.ts +821 -0
  298. package/src/navigation-errors.ts +60 -0
  299. package/src/navigation.ts +44 -0
  300. package/src/router.tsx +497 -0
  301. package/src/routing.ts +344 -0
  302. package/src/server/adapters/build-step.ts +135 -0
  303. package/src/server/adapters/bun.ts +92 -0
  304. package/src/server/adapters/bundle.ts +97 -0
  305. package/src/server/adapters/cloudflare.ts +111 -0
  306. package/src/server/adapters/index.ts +29 -0
  307. package/src/server/adapters/runtime-node.ts +34 -0
  308. package/src/server/adapters/runtime.ts +145 -0
  309. package/src/server/adapters/shared.ts +159 -0
  310. package/src/server/adapters/static.ts +68 -0
  311. package/src/server/adapters/vercel.ts +149 -0
  312. package/src/server/bun-jsx.ts +65 -0
  313. package/src/server/cache-route.ts +139 -0
  314. package/src/server/cache.ts +498 -0
  315. package/src/server/frames.ts +326 -0
  316. package/src/server/http.ts +467 -0
  317. package/src/server/jsx-dev-runtime.ts +9 -0
  318. package/src/server/jsx-runtime.ts +13 -0
  319. package/src/server/live-app.tsx +374 -0
  320. package/src/server/live-build.ts +258 -0
  321. package/src/server/live-dev.ts +357 -0
  322. package/src/server/live-manifest.ts +25 -0
  323. package/src/server/live-prod.ts +120 -0
  324. package/src/server/live-routes.ts +298 -0
  325. package/src/server/live-web.ts +170 -0
  326. package/src/server/live.ts +551 -0
  327. package/src/server/middleware-node.ts +168 -0
  328. package/src/server/middleware-runtime.ts +478 -0
  329. package/src/server/middleware.ts +451 -0
  330. package/src/server/ppr.ts +62 -0
  331. package/src/server/scan.ts +190 -0
  332. package/src/server/server-components.ts +224 -0
  333. package/src/terminal.ts +5 -0
  334. package/src/testing.ts +5 -0
  335. package/src/vite-plugin.ts +413 -0
@@ -0,0 +1,447 @@
1
+ /**
2
+ * Platform-agnostic `middleware.ts` execution: matcher compilation, the
3
+ * `x-middleware-*` response protocol and request forwarding. Used by
4
+ * `text dev`, `text start` and every deploy adapter.
5
+ */
6
+ import { hasGeneratedCacheControl, PRIVATE_CACHE_CONTROL, requestOrigin } from "./http.js";
7
+ import { isMiddlewareControl, MIDDLEWARE_NEXT, MIDDLEWARE_OVERRIDE_HEADERS, MIDDLEWARE_REQUEST_PREFIX, MIDDLEWARE_REWRITE, NextRequest, parseCookieHeader, parseSetCookie, } from "./middleware.js";
8
+ /** Candidate file names, relative to the project root (first match wins). */
9
+ export { proxyFetch } from "./http.js";
10
+ export const MIDDLEWARE_FILES = ["middleware.ts", "middleware.tsx", "middleware.js", "middleware.mjs", "src/middleware.ts", "src/middleware.js"];
11
+ const DEFAULT_SEGMENT = "[^/#?]+?";
12
+ function escapeRe(s) {
13
+ return s.replace(/[.+*?^${}()|[\]\\]/g, "\\$&");
14
+ }
15
+ /** Read a balanced `( … )` group starting at `i` (which must be `(`). Returns the inner source and the index after `)`. */
16
+ function readGroup(src, i) {
17
+ let depth = 0;
18
+ let j = i;
19
+ for (; j < src.length; j++) {
20
+ const ch = src[j];
21
+ if (ch === "\\") {
22
+ j++;
23
+ continue;
24
+ }
25
+ if (ch === "(")
26
+ depth++;
27
+ else if (ch === ")") {
28
+ depth--;
29
+ if (depth === 0)
30
+ return [src.slice(i + 1, j), j + 1];
31
+ }
32
+ }
33
+ throw new SyntaxError(`Unbalanced parentheses in middleware matcher ${JSON.stringify(src)}`);
34
+ }
35
+ /** Capturing groups in a regular-expression source (escapes and character classes skipped). */
36
+ function capturingGroups(src) {
37
+ let n = 0;
38
+ let inClass = false;
39
+ for (let i = 0; i < src.length; i++) {
40
+ const ch = src[i];
41
+ if (ch === "\\") {
42
+ i++;
43
+ continue;
44
+ }
45
+ if (inClass) {
46
+ if (ch === "]")
47
+ inClass = false;
48
+ continue;
49
+ }
50
+ if (ch === "[")
51
+ inClass = true;
52
+ else if (ch === "(" && (src[i + 1] !== "?" || (src[i + 2] === "<" && src[i + 3] !== "=" && src[i + 3] !== "!")))
53
+ n++;
54
+ }
55
+ return n;
56
+ }
57
+ /** Parameter names in capture-group order (`null` for unnamed groups) of a matcher source. */
58
+ export function matcherKeys(source) {
59
+ const keys = [];
60
+ compileMatcherSource(source, keys);
61
+ return keys;
62
+ }
63
+ /**
64
+ * Compile a matcher source: `/about`, `/blog/:slug`, `/docs/:path*`,
65
+ * `/a/:rest+`, `/:locale?/x`, `/user/:id(\\d+)` and raw groups such as
66
+ * `/((?!api|assets|favicon.ico).*)`. A trailing slash is optional.
67
+ */
68
+ export function compileMatcherSource(source, keys = []) {
69
+ if (!source.startsWith("/"))
70
+ throw new SyntaxError(`Middleware matcher must start with "/": ${JSON.stringify(source)}`);
71
+ let re = "";
72
+ let i = 0;
73
+ while (i < source.length) {
74
+ const ch = source[i];
75
+ const prefix = ch === "/" && (source[i + 1] === ":" || source[i + 1] === "(") ? "/" : "";
76
+ let j = prefix ? i + 1 : i;
77
+ const c = source[j];
78
+ if (c === ":" || c === "(") {
79
+ let pattern = DEFAULT_SEGMENT;
80
+ let key = null;
81
+ if (c === ":") {
82
+ const m = /^:([A-Za-z_]\w*)/.exec(source.slice(j));
83
+ if (!m)
84
+ throw new SyntaxError(`Missing parameter name at ${j} in ${JSON.stringify(source)}`);
85
+ key = m[1];
86
+ j += m[0].length;
87
+ if (source[j] === "(") {
88
+ const [inner, end] = readGroup(source, j);
89
+ pattern = inner;
90
+ j = end;
91
+ }
92
+ }
93
+ else {
94
+ const [inner, end] = readGroup(source, j);
95
+ pattern = inner;
96
+ j = end;
97
+ }
98
+ const mod = source[j];
99
+ const p = escapeRe(prefix);
100
+ keys.push(key);
101
+ // `*` / `+` repeat the pattern once more in the emitted regex.
102
+ for (let n = capturingGroups(pattern) * (mod === "*" || mod === "+" ? 2 : 1); n > 0; n--)
103
+ keys.push(null);
104
+ if (!prefix && pattern === DEFAULT_SEGMENT && (mod === "*" || mod === "+")) {
105
+ // No separator between repetitions: `(?:x+?)*` would backtrack exponentially.
106
+ re += mod === "*" ? "([^/#?]*)" : "([^/#?]+)";
107
+ i = j + 1;
108
+ continue;
109
+ }
110
+ if (mod === "*") {
111
+ re += `(?:${p}((?:${pattern})(?:${p}(?:${pattern}))*))?`;
112
+ j++;
113
+ }
114
+ else if (mod === "+") {
115
+ re += `${p}((?:${pattern})(?:${p}(?:${pattern}))*)`;
116
+ j++;
117
+ }
118
+ else if (mod === "?") {
119
+ re += `(?:${p}(${pattern}))?`;
120
+ j++;
121
+ }
122
+ else
123
+ re += `${p}(${pattern})`;
124
+ i = j;
125
+ continue;
126
+ }
127
+ re += escapeRe(ch);
128
+ i++;
129
+ }
130
+ if (re.endsWith("\\/"))
131
+ re = re.slice(0, -2);
132
+ return `^${re}(?:\\/)?$`;
133
+ }
134
+ export function compileMatcher(matcher) {
135
+ if (matcher === undefined)
136
+ return null;
137
+ const list = Array.isArray(matcher) ? matcher : [matcher];
138
+ return list.map((m) => {
139
+ const o = typeof m === "string" ? { source: m } : m;
140
+ return { source: o.source, regex: compileMatcherSource(o.source), ...(o.has ? { has: o.has } : {}), ...(o.missing ? { missing: o.missing } : {}) };
141
+ });
142
+ }
143
+ function conditionHolds(cond, request, url, cookies) {
144
+ let actual;
145
+ if (cond.type === "header")
146
+ actual = request.headers.get(cond.key);
147
+ else if (cond.type === "cookie")
148
+ actual = cookies.get(cond.key);
149
+ else if (cond.type === "query")
150
+ actual = url.searchParams.get(cond.key);
151
+ else
152
+ actual = url.hostname;
153
+ if (actual === null || actual === undefined)
154
+ return false;
155
+ if (cond.value === undefined)
156
+ return true;
157
+ return new RegExp(`^(?:${cond.value})$`).test(actual);
158
+ }
159
+ const regexCache = new Map();
160
+ /** `true` when some matcher's path pattern covers `pathname`, ignoring `has` / `missing` (build-time routing decisions). */
161
+ export function matcherCouldMatch(matchers, pathname) {
162
+ if (matchers === null)
163
+ return true;
164
+ return matchers.some((m) => new RegExp(m.regex).test(pathname));
165
+ }
166
+ /** `true` when `pathname` (without basePath) is covered by the compiled matchers (`null` = every path). */
167
+ export function matchesMiddleware(matchers, pathname, request) {
168
+ if (matchers === null)
169
+ return true;
170
+ const url = request ? new URL(request.url) : null;
171
+ const cookies = request ? parseCookieHeader(request.headers.get("cookie")) : new Map();
172
+ for (const m of matchers) {
173
+ let re = regexCache.get(m.regex);
174
+ if (!re) {
175
+ re = new RegExp(m.regex);
176
+ regexCache.set(m.regex, re);
177
+ }
178
+ if (!re.test(pathname))
179
+ continue;
180
+ if (m.has || m.missing) {
181
+ if (!request || !url)
182
+ return false;
183
+ if (m.has && !m.has.every((c) => conditionHolds(c, request, url, cookies)))
184
+ continue;
185
+ if (m.missing && m.missing.some((c) => conditionHolds(c, request, url, cookies)))
186
+ continue;
187
+ }
188
+ return true;
189
+ }
190
+ return false;
191
+ }
192
+ const compiledByModule = new WeakMap();
193
+ export function middlewareFunction(mod) {
194
+ const fn = mod.middleware ?? mod.default;
195
+ if (typeof fn !== "function")
196
+ throw new TypeError("The middleware file must export a `middleware` function (or a default export).");
197
+ return fn;
198
+ }
199
+ export function middlewareMatchers(mod) {
200
+ let m = compiledByModule.get(mod);
201
+ if (m === undefined) {
202
+ m = compileMatcher(mod.config?.matcher);
203
+ compiledByModule.set(mod, m);
204
+ }
205
+ return m;
206
+ }
207
+ function stripBase(pathname, basePath) {
208
+ if (!basePath)
209
+ return pathname;
210
+ if (pathname === basePath)
211
+ return "/";
212
+ return pathname.startsWith(`${basePath}/`) ? pathname.slice(basePath.length) : pathname;
213
+ }
214
+ const INTERNAL = [MIDDLEWARE_NEXT, MIDDLEWARE_REWRITE, MIDDLEWARE_OVERRIDE_HEADERS];
215
+ function cancelUnread(request) {
216
+ if (request.body && !request.bodyUsed && !request.body.locked)
217
+ request.body.cancel().catch(() => undefined);
218
+ }
219
+ /** Drop `x-middleware-*` headers from a response that is returned to the client as-is. */
220
+ function stripInternal(response) {
221
+ let found = false;
222
+ response.headers.forEach((_, key) => {
223
+ if (key.startsWith("x-middleware-"))
224
+ found = true;
225
+ });
226
+ if (!found)
227
+ return response;
228
+ const headers = new Headers(response.headers);
229
+ for (const key of [...headers.keys()])
230
+ if (key.startsWith("x-middleware-"))
231
+ headers.delete(key);
232
+ return new Response(response.body, { status: response.status, statusText: response.statusText, headers });
233
+ }
234
+ /**
235
+ * Run middleware for `request`. `request` is never consumed: middleware gets a
236
+ * tee'd clone, and the outcome's `request` carries the original body.
237
+ */
238
+ export async function runMiddleware(mod, request, options = {}) {
239
+ const basePath = options.basePath ?? "";
240
+ const url = new URL(request.url);
241
+ const matchers = options.matchers !== undefined ? options.matchers : middlewareMatchers(mod);
242
+ if (!matchesMiddleware(matchers, stripBase(url.pathname, basePath), request)) {
243
+ return { type: "next", request, headers: new Headers(), matched: false };
244
+ }
245
+ const fn = middlewareFunction(mod);
246
+ const forwarded = request.body ? request.clone() : request;
247
+ const nextRequest = new NextRequest(request, { basePath });
248
+ const pending = [];
249
+ const event = {
250
+ waitUntil(p) {
251
+ if (options.waitUntil)
252
+ options.waitUntil(p);
253
+ else
254
+ pending.push(p.catch(() => undefined));
255
+ },
256
+ };
257
+ let result;
258
+ try {
259
+ result = await fn(nextRequest, event);
260
+ }
261
+ finally {
262
+ // The tee buffers whatever one branch doesn't read: release middleware's copy
263
+ // (Bun keeps the wrapped request's own stream separate, so release both).
264
+ cancelUnread(nextRequest);
265
+ if (forwarded !== request)
266
+ cancelUnread(request);
267
+ }
268
+ // Cookies the middleware set on `request.cookies` are forwarded, like Next.js.
269
+ const requestHeaders = new Headers(forwarded.headers);
270
+ const mutatedCookie = nextRequest.headers.get("cookie");
271
+ if (mutatedCookie !== request.headers.get("cookie")) {
272
+ if (mutatedCookie === null)
273
+ requestHeaders.delete("cookie");
274
+ else
275
+ requestHeaders.set("cookie", mutatedCookie);
276
+ }
277
+ if (!result)
278
+ return { type: "next", request: rebuild(forwarded, requestHeaders), headers: new Headers(), matched: true };
279
+ if (!(result instanceof Response)) {
280
+ cancelUnread(forwarded);
281
+ throw new TypeError("Middleware must return a `Response`, `NextResponse` or nothing.");
282
+ }
283
+ const control = isMiddlewareControl(result);
284
+ const rewriteTo = control ? result.headers.get(MIDDLEWARE_REWRITE) : null;
285
+ const isNext = control && result.headers.get(MIDDLEWARE_NEXT) === "1";
286
+ if (!rewriteTo && !isNext) {
287
+ cancelUnread(forwarded);
288
+ return { type: "response", response: stripInternal(result) };
289
+ }
290
+ const override = result.headers.get(MIDDLEWARE_OVERRIDE_HEADERS);
291
+ let finalHeaders = requestHeaders;
292
+ if (override !== null) {
293
+ finalHeaders = new Headers();
294
+ for (const key of override.split(",").map((k) => k.trim()).filter(Boolean)) {
295
+ const v = result.headers.get(`${MIDDLEWARE_REQUEST_PREFIX}${key}`);
296
+ if (v !== null)
297
+ finalHeaders.set(key, v);
298
+ }
299
+ const host = request.headers.get("host");
300
+ if (host && !finalHeaders.has("host"))
301
+ finalHeaders.set("host", host);
302
+ }
303
+ // Cookies set on the `next()` / `rewrite()` response are visible downstream too.
304
+ const setCookies = result.headers.getSetCookie();
305
+ if (setCookies.length > 0) {
306
+ const jar = parseCookieHeader(finalHeaders.get("cookie"));
307
+ for (const line of setCookies) {
308
+ const c = parseSetCookie(line);
309
+ if (!c)
310
+ continue;
311
+ if (c.maxAge === 0 || (c.expires !== undefined && new Date(c.expires).getTime() <= Date.now()))
312
+ jar.delete(c.name);
313
+ else
314
+ jar.set(c.name, c.value);
315
+ }
316
+ if (jar.size === 0)
317
+ finalHeaders.delete("cookie");
318
+ else
319
+ finalHeaders.set("cookie", [...jar].map(([n, v]) => `${n}=${encodeURIComponent(v)}`).join("; "));
320
+ }
321
+ const responseHeaders = new Headers();
322
+ result.headers.forEach((value, key) => {
323
+ if (key === "set-cookie" || INTERNAL.includes(key) || key.startsWith(MIDDLEWARE_REQUEST_PREFIX))
324
+ return;
325
+ responseHeaders.set(key, value);
326
+ });
327
+ for (const c of setCookies)
328
+ responseHeaders.append("set-cookie", c);
329
+ const target = rewriteTo ? new URL(rewriteTo, url) : undefined;
330
+ const nextUrl = target && target.origin === url.origin ? target : undefined;
331
+ if (pending.length > 0)
332
+ void Promise.all(pending);
333
+ const isPrivate = setCookies.length > 0 || target !== undefined || override !== null;
334
+ return {
335
+ type: "next",
336
+ request: rebuild(forwarded, finalHeaders, nextUrl),
337
+ headers: responseHeaders,
338
+ rewrite: target,
339
+ matched: true,
340
+ ...(result.status !== 200 ? { status: result.status } : {}),
341
+ ...(isPrivate ? { private: true } : {}),
342
+ };
343
+ }
344
+ /** Copy `request` with new headers (and optionally a new URL), moving its body. */
345
+ export function rebuild(request, headers, url) {
346
+ const init = { method: request.method, headers, signal: request.signal, redirect: request.redirect };
347
+ if (request.body) {
348
+ init.body = request.body;
349
+ init.duplex = "half";
350
+ }
351
+ return new Request(url ?? request.url, init);
352
+ }
353
+ function sameHeaders(a, b) {
354
+ const x = [...a].map(([k, v]) => `${k}:${v}`).sort();
355
+ const y = [...b].map(([k, v]) => `${k}:${v}`).sort();
356
+ return x.length === y.length && x.every((v, i) => v === y[i]);
357
+ }
358
+ /**
359
+ * Re-encode an outcome as the `x-middleware-*` response protocol, for
360
+ * platforms that run middleware at the edge and route afterwards (Vercel).
361
+ */
362
+ export function toMiddlewareResponse(outcome, original) {
363
+ if (outcome.type === "response")
364
+ return stripInternal(outcome.response);
365
+ const headers = new Headers(outcome.headers);
366
+ if (outcome.rewrite)
367
+ headers.set(MIDDLEWARE_REWRITE, outcome.rewrite.href);
368
+ else
369
+ headers.set(MIDDLEWARE_NEXT, "1");
370
+ if (!sameHeaders(original.headers, outcome.request.headers)) {
371
+ const keys = [];
372
+ outcome.request.headers.forEach((value, key) => {
373
+ keys.push(key);
374
+ headers.set(`${MIDDLEWARE_REQUEST_PREFIX}${key}`, value);
375
+ });
376
+ headers.set(MIDDLEWARE_OVERRIDE_HEADERS, keys.join(","));
377
+ }
378
+ return new Response(null, { headers, status: outcome.status ?? 200 });
379
+ }
380
+ /**
381
+ * Return a copy of `response` with middleware headers applied: middleware
382
+ * cookies first, then the response's own; other headers only when absent.
383
+ */
384
+ export function withMiddlewareHeaders(response, headers, merge = {}) {
385
+ let empty = true;
386
+ headers.forEach(() => {
387
+ empty = false;
388
+ });
389
+ const downgrade = merge.private === true && hasGeneratedCacheControl(response);
390
+ if (empty && merge.status === undefined && !downgrade)
391
+ return response;
392
+ const out = new Headers();
393
+ headers.forEach((value, key) => {
394
+ if (key !== "set-cookie")
395
+ out.set(key, value);
396
+ });
397
+ response.headers.forEach((value, key) => {
398
+ if (key !== "set-cookie")
399
+ out.set(key, value);
400
+ });
401
+ for (const c of headers.getSetCookie())
402
+ out.append("set-cookie", c);
403
+ for (const c of response.headers.getSetCookie())
404
+ out.append("set-cookie", c);
405
+ if (downgrade)
406
+ out.set("cache-control", PRIVATE_CACHE_CONTROL);
407
+ const status = merge.status ?? response.status;
408
+ const body = status === 204 || status === 205 || status === 304 ? null : response.body;
409
+ if (body === null && response.body)
410
+ response.body.cancel().catch(() => undefined);
411
+ return new Response(body, { status, statusText: merge.status === undefined ? response.statusText : "", headers: out });
412
+ }
413
+ /**
414
+ * Would `middleware.ts` let a document request for `href` (an app path,
415
+ * without basePath) through unchanged? Used to authorize what a live session
416
+ * renders: anything else (redirect, 401, rewrite elsewhere) is handed back to
417
+ * the browser as a document load, where middleware answers over HTTP.
418
+ */
419
+ export async function authorizeWithMiddleware(mod, href, init) {
420
+ const basePath = init.basePath ?? "";
421
+ const url = new URL(basePath + href, init.origin);
422
+ if (url.origin !== new URL(init.origin).origin)
423
+ return false;
424
+ const headers = new Headers(init.headers);
425
+ for (const h of ["content-type", "content-length", "last-event-id", "x-textjs-live", "origin"])
426
+ headers.delete(h);
427
+ headers.set("accept", "text/html,application/xhtml+xml,*/*;q=0.8");
428
+ headers.set("sec-fetch-dest", "document");
429
+ headers.set("sec-fetch-mode", "navigate");
430
+ const outcome = await runMiddleware(mod, new Request(url, { method: "GET", headers }), { basePath });
431
+ if (outcome.type === "response")
432
+ return false;
433
+ if (outcome.rewrite)
434
+ return outcome.rewrite.origin === url.origin && outcome.rewrite.pathname === url.pathname;
435
+ return outcome.status === undefined || outcome.status < 400;
436
+ }
437
+ /** `LiveServer` `authorize` backed by a middleware module (`null` = no middleware: allow). */
438
+ export function createLiveAuthorizer(load, options = {}) {
439
+ return async (href, headers) => {
440
+ const mod = await load();
441
+ if (!mod)
442
+ return true;
443
+ const origin = requestOrigin({ headers: Object.fromEntries(headers) }, options);
444
+ return authorizeWithMiddleware(mod, href, { origin, basePath: options.basePath, headers });
445
+ };
446
+ }
447
+ //# sourceMappingURL=middleware-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-runtime.js","sourceRoot":"","sources":["../../src/server/middleware-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * `@textjs/app/server` — the `middleware.ts` API: `NextRequest`, `NextResponse`,
3
+ * request / response cookies and the matcher config types.
4
+ *
5
+ * Web-standard only (no Node imports), so the same middleware runs on
6
+ * `text dev`, `text start`, Bun, Vercel Edge and Cloudflare Workers.
7
+ */
8
+ export declare const MIDDLEWARE_NEXT = "x-middleware-next";
9
+ export declare const MIDDLEWARE_REWRITE = "x-middleware-rewrite";
10
+ export declare const MIDDLEWARE_OVERRIDE_HEADERS = "x-middleware-override-headers";
11
+ export declare const MIDDLEWARE_REQUEST_PREFIX = "x-middleware-request-";
12
+ /**
13
+ * Brands `NextResponse.next()` / `NextResponse.rewrite()` results. Only these
14
+ * steer routing: an arbitrary `Response` (say, a proxied `fetch()`) carrying
15
+ * `x-middleware-*` headers is returned to the client as-is.
16
+ */
17
+ export declare const MIDDLEWARE_CONTROL: unique symbol;
18
+ /** `true` for responses created by `NextResponse.next()` / `NextResponse.rewrite()` (from any copy of this module). */
19
+ export declare function isMiddlewareControl(response: Response): boolean;
20
+ export interface RequestCookie {
21
+ name: string;
22
+ value: string;
23
+ }
24
+ export interface ResponseCookie extends RequestCookie {
25
+ domain?: string;
26
+ path?: string;
27
+ expires?: Date | number;
28
+ maxAge?: number;
29
+ httpOnly?: boolean;
30
+ secure?: boolean;
31
+ sameSite?: "strict" | "lax" | "none" | boolean;
32
+ priority?: "low" | "medium" | "high";
33
+ partitioned?: boolean;
34
+ }
35
+ export type CookieOptions = Omit<ResponseCookie, "name" | "value">;
36
+ /** Parse a `Cookie` request header. The first occurrence of a name wins. */
37
+ export declare function parseCookieHeader(header: string | null | undefined): Map<string, string>;
38
+ /** Serialize one `Set-Cookie` header value (RFC 6265bis). `path` defaults to `/`. */
39
+ export declare function serializeCookie(cookie: ResponseCookie): string;
40
+ /** Parse a `Set-Cookie` header value back into a cookie (name, value and attributes). */
41
+ export declare function parseSetCookie(header: string): ResponseCookie | null;
42
+ /** `request.cookies`: reads the `Cookie` header; `set()` / `delete()` update it for downstream handlers. */
43
+ export declare class RequestCookies {
44
+ #private;
45
+ constructor(headers: Headers);
46
+ get size(): number;
47
+ get(name: string | RequestCookie): RequestCookie | undefined;
48
+ getAll(name?: string | RequestCookie): RequestCookie[];
49
+ has(name: string): boolean;
50
+ set(name: string | RequestCookie, value?: string): this;
51
+ delete(names: string | string[]): boolean | boolean[];
52
+ clear(): this;
53
+ [Symbol.iterator](): IterableIterator<[string, RequestCookie]>;
54
+ toString(): string;
55
+ }
56
+ /** `response.cookies`: a typed view over the response's `Set-Cookie` headers. */
57
+ export declare class ResponseCookies {
58
+ #private;
59
+ constructor(headers: Headers);
60
+ get(name: string | ResponseCookie): ResponseCookie | undefined;
61
+ getAll(name?: string | ResponseCookie): ResponseCookie[];
62
+ has(name: string): boolean;
63
+ set(name: string | ResponseCookie, value?: string, options?: CookieOptions): this;
64
+ /** Expire a cookie on the client (`Max-Age=0`). */
65
+ delete(name: string | (CookieOptions & {
66
+ name: string;
67
+ })): this;
68
+ [Symbol.iterator](): IterableIterator<[string, ResponseCookie]>;
69
+ toString(): string;
70
+ }
71
+ /**
72
+ * A `URL` whose `pathname` excludes the app's `basePath`. `href`, `toString()`
73
+ * and `toJSON()` include it, so `new URL("/x", request.nextUrl)` and
74
+ * `redirect(request.nextUrl)` stay inside the app.
75
+ */
76
+ export declare class NextURL extends URL {
77
+ basePath: string;
78
+ constructor(input: string | URL, base?: string | URL, basePath?: string);
79
+ /** Recognizes `NextURL`s from other copies of this module (dev SSR vs the CLI). */
80
+ static [Symbol.hasInstance](value: unknown): boolean;
81
+ /** The full URL including `basePath`. */
82
+ toAbsolute(): URL;
83
+ clone(): NextURL;
84
+ toString(): string;
85
+ toJSON(): string;
86
+ }
87
+ export interface NextRequestInit extends RequestInit {
88
+ basePath?: string;
89
+ }
90
+ /** The request passed to `middleware()`: a Web `Request` plus `nextUrl` and `cookies`. */
91
+ export declare class NextRequest extends Request {
92
+ readonly nextUrl: NextURL;
93
+ readonly cookies: RequestCookies;
94
+ constructor(input: Request | string | URL, init?: NextRequestInit);
95
+ }
96
+ export interface MiddlewareResponseInit extends ResponseInit {
97
+ /** Replace the headers forwarded to route handlers, static files and pages. */
98
+ request?: {
99
+ headers?: HeadersInit;
100
+ };
101
+ }
102
+ export declare class NextResponse<Body = unknown> extends Response {
103
+ readonly cookies: ResponseCookies;
104
+ /** Type-only marker for `NextResponse.json<T>()`. */
105
+ readonly __body?: Body;
106
+ constructor(body?: BodyInit | null, init?: ResponseInit);
107
+ static [Symbol.hasInstance](value: unknown): boolean;
108
+ static json<T>(body: T, init?: ResponseInit): NextResponse<T>;
109
+ /** Redirect (`307` by default). The URL must be absolute: `new URL("/login", request.url)`. */
110
+ static redirect(url: string | URL, init?: number | ResponseInit): NextResponse;
111
+ /** Serve another URL without changing the address bar. External origins are proxied. */
112
+ static rewrite(url: string | URL, init?: MiddlewareResponseInit): NextResponse;
113
+ /** Continue to the route handler / page, optionally adding response or request headers. */
114
+ static next(init?: MiddlewareResponseInit): NextResponse;
115
+ }
116
+ export type MatcherCondition = {
117
+ type: "header" | "cookie" | "query";
118
+ key: string;
119
+ value?: string;
120
+ } | {
121
+ type: "host";
122
+ key?: undefined;
123
+ value: string;
124
+ };
125
+ export interface MatcherObject {
126
+ source: string;
127
+ has?: MatcherCondition[];
128
+ missing?: MatcherCondition[];
129
+ }
130
+ export type Matcher = string | MatcherObject | Array<string | MatcherObject>;
131
+ export interface MiddlewareConfig {
132
+ matcher?: Matcher;
133
+ }
134
+ export interface NextFetchEvent {
135
+ /** Keep the runtime alive for background work after the response is sent. */
136
+ waitUntil(promise: Promise<unknown>): void;
137
+ }
138
+ export type MiddlewareResult = Response | NextResponse | null | undefined | void;
139
+ export type NextMiddleware = (request: NextRequest, event: NextFetchEvent) => MiddlewareResult | Promise<MiddlewareResult>;
140
+ export interface MiddlewareModule {
141
+ middleware?: NextMiddleware;
142
+ default?: NextMiddleware;
143
+ config?: MiddlewareConfig;
144
+ }
145
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"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"}