@multiplayer-app/agent 0.1.20 → 0.1.22

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 (298) hide show
  1. package/README.md +14 -7
  2. package/dist/agent/definition.test.js +8 -3
  3. package/dist/agent/definition.test.js.map +1 -1
  4. package/dist/agent/profiles/coding.d.ts +1 -1
  5. package/dist/agent/profiles/coding.d.ts.map +1 -1
  6. package/dist/agent/profiles/coding.js +21 -4
  7. package/dist/agent/profiles/coding.js.map +1 -1
  8. package/dist/agent/profiles/index.js +1 -1
  9. package/dist/agent/profiles/index.js.map +1 -1
  10. package/dist/agent/profiles/research.d.ts.map +1 -1
  11. package/dist/agent/profiles/research.js +2 -2
  12. package/dist/agent/profiles/research.js.map +1 -1
  13. package/dist/agent/turn-history.d.ts.map +1 -1
  14. package/dist/agent/turn-history.js +7 -1
  15. package/dist/agent/turn-history.js.map +1 -1
  16. package/dist/agent/turn-runner.d.ts +8 -0
  17. package/dist/agent/turn-runner.d.ts.map +1 -1
  18. package/dist/agent/turn-runner.js +35 -10
  19. package/dist/agent/turn-runner.js.map +1 -1
  20. package/dist/app/app-host.d.ts +57 -0
  21. package/dist/app/app-host.d.ts.map +1 -0
  22. package/dist/app/app-host.js +252 -0
  23. package/dist/app/app-host.js.map +1 -0
  24. package/dist/app/app-host.test.d.ts +2 -0
  25. package/dist/app/app-host.test.d.ts.map +1 -0
  26. package/dist/app/app-host.test.js +639 -0
  27. package/dist/app/app-host.test.js.map +1 -0
  28. package/dist/app/build-log.d.ts +14 -0
  29. package/dist/app/build-log.d.ts.map +1 -0
  30. package/dist/app/build-log.js +173 -0
  31. package/dist/app/build-log.js.map +1 -0
  32. package/dist/app/build-log.test.d.ts +2 -0
  33. package/dist/app/build-log.test.d.ts.map +1 -0
  34. package/dist/app/build-log.test.js +255 -0
  35. package/dist/app/build-log.test.js.map +1 -0
  36. package/dist/app/config.d.ts +196 -0
  37. package/dist/app/config.d.ts.map +1 -0
  38. package/dist/app/config.js +362 -0
  39. package/dist/app/config.js.map +1 -0
  40. package/dist/app/config.test.d.ts +2 -0
  41. package/dist/app/config.test.d.ts.map +1 -0
  42. package/dist/app/config.test.js +224 -0
  43. package/dist/app/config.test.js.map +1 -0
  44. package/dist/app/detect.d.ts +68 -0
  45. package/dist/app/detect.d.ts.map +1 -0
  46. package/dist/app/detect.js +449 -0
  47. package/dist/app/detect.js.map +1 -0
  48. package/dist/app/detect.test.d.ts +2 -0
  49. package/dist/app/detect.test.d.ts.map +1 -0
  50. package/dist/app/detect.test.js +267 -0
  51. package/dist/app/detect.test.js.map +1 -0
  52. package/dist/app/env.d.ts +5 -0
  53. package/dist/app/env.d.ts.map +1 -0
  54. package/dist/app/env.js +22 -0
  55. package/dist/app/env.js.map +1 -0
  56. package/dist/app/functions-cli.d.ts +3 -0
  57. package/dist/app/functions-cli.d.ts.map +1 -0
  58. package/dist/app/functions-cli.js +27 -0
  59. package/dist/app/functions-cli.js.map +1 -0
  60. package/dist/app/functions-host.d.ts +15 -0
  61. package/dist/app/functions-host.d.ts.map +1 -0
  62. package/dist/app/functions-host.js +276 -0
  63. package/dist/app/functions-host.js.map +1 -0
  64. package/dist/app/functions-host.test.d.ts +2 -0
  65. package/dist/app/functions-host.test.d.ts.map +1 -0
  66. package/dist/app/functions-host.test.js +117 -0
  67. package/dist/app/functions-host.test.js.map +1 -0
  68. package/dist/app/functions-routes.d.ts +23 -0
  69. package/dist/app/functions-routes.d.ts.map +1 -0
  70. package/dist/app/functions-routes.js +85 -0
  71. package/dist/app/functions-routes.js.map +1 -0
  72. package/dist/app/functions-routes.test.d.ts +2 -0
  73. package/dist/app/functions-routes.test.d.ts.map +1 -0
  74. package/dist/app/functions-routes.test.js +40 -0
  75. package/dist/app/functions-routes.test.js.map +1 -0
  76. package/dist/app/manifest.d.ts +17 -0
  77. package/dist/app/manifest.d.ts.map +1 -0
  78. package/dist/app/manifest.js +64 -0
  79. package/dist/app/manifest.js.map +1 -0
  80. package/dist/app/manifest.test.d.ts +2 -0
  81. package/dist/app/manifest.test.d.ts.map +1 -0
  82. package/dist/app/manifest.test.js +173 -0
  83. package/dist/app/manifest.test.js.map +1 -0
  84. package/dist/app/release-artifacts.d.ts +43 -0
  85. package/dist/app/release-artifacts.d.ts.map +1 -0
  86. package/dist/app/release-artifacts.js +239 -0
  87. package/dist/app/release-artifacts.js.map +1 -0
  88. package/dist/app/release-artifacts.test.d.ts +2 -0
  89. package/dist/app/release-artifacts.test.d.ts.map +1 -0
  90. package/dist/app/release-artifacts.test.js +326 -0
  91. package/dist/app/release-artifacts.test.js.map +1 -0
  92. package/dist/app/route-pattern.d.ts +23 -0
  93. package/dist/app/route-pattern.d.ts.map +1 -0
  94. package/dist/app/route-pattern.js +339 -0
  95. package/dist/app/route-pattern.js.map +1 -0
  96. package/dist/app/route-pattern.test.d.ts +2 -0
  97. package/dist/app/route-pattern.test.d.ts.map +1 -0
  98. package/dist/app/route-pattern.test.js +187 -0
  99. package/dist/app/route-pattern.test.js.map +1 -0
  100. package/dist/app/rules.d.ts +61 -0
  101. package/dist/app/rules.d.ts.map +1 -0
  102. package/dist/app/rules.js +90 -0
  103. package/dist/app/rules.js.map +1 -0
  104. package/dist/app/rules.test.d.ts +2 -0
  105. package/dist/app/rules.test.d.ts.map +1 -0
  106. package/dist/app/rules.test.js +69 -0
  107. package/dist/app/rules.test.js.map +1 -0
  108. package/dist/app/runner.d.ts +109 -0
  109. package/dist/app/runner.d.ts.map +1 -0
  110. package/dist/app/runner.js +429 -0
  111. package/dist/app/runner.js.map +1 -0
  112. package/dist/app/site.d.ts +73 -0
  113. package/dist/app/site.d.ts.map +1 -0
  114. package/dist/app/site.js +161 -0
  115. package/dist/app/site.js.map +1 -0
  116. package/dist/app/site.test.d.ts +2 -0
  117. package/dist/app/site.test.d.ts.map +1 -0
  118. package/dist/app/site.test.js +291 -0
  119. package/dist/app/site.test.js.map +1 -0
  120. package/dist/app/static-server.d.ts +20 -0
  121. package/dist/app/static-server.d.ts.map +1 -0
  122. package/dist/app/static-server.js +145 -0
  123. package/dist/app/static-server.js.map +1 -0
  124. package/dist/persistence/conversation-store.d.ts +21 -0
  125. package/dist/persistence/conversation-store.d.ts.map +1 -0
  126. package/dist/persistence/conversation-store.js +59 -0
  127. package/dist/persistence/conversation-store.js.map +1 -0
  128. package/dist/persistence/conversation-store.test.d.ts +2 -0
  129. package/dist/persistence/conversation-store.test.d.ts.map +1 -0
  130. package/dist/persistence/conversation-store.test.js +98 -0
  131. package/dist/persistence/conversation-store.test.js.map +1 -0
  132. package/dist/persistence/git-sync.d.ts +14 -1
  133. package/dist/persistence/git-sync.d.ts.map +1 -1
  134. package/dist/persistence/git-sync.js +73 -17
  135. package/dist/persistence/git-sync.js.map +1 -1
  136. package/dist/persistence/git-sync.test.js +155 -6
  137. package/dist/persistence/git-sync.test.js.map +1 -1
  138. package/dist/persistence/snapshot-sync.d.ts +19 -2
  139. package/dist/persistence/snapshot-sync.d.ts.map +1 -1
  140. package/dist/persistence/snapshot-sync.js +194 -83
  141. package/dist/persistence/snapshot-sync.js.map +1 -1
  142. package/dist/persistence/snapshot-sync.test.js +145 -27
  143. package/dist/persistence/snapshot-sync.test.js.map +1 -1
  144. package/dist/persistence/workspace.d.ts +3 -0
  145. package/dist/persistence/workspace.d.ts.map +1 -1
  146. package/dist/persistence/workspace.js +1 -0
  147. package/dist/persistence/workspace.js.map +1 -1
  148. package/dist/research/extract-texts.d.ts.map +1 -1
  149. package/dist/research/extract-texts.js +6 -13
  150. package/dist/research/extract-texts.js.map +1 -1
  151. package/dist/research/filingramp/attachment-tools.d.ts.map +1 -1
  152. package/dist/research/filingramp/attachment-tools.js +7 -4
  153. package/dist/research/filingramp/attachment-tools.js.map +1 -1
  154. package/dist/research/filingramp/shared.d.ts.map +1 -1
  155. package/dist/research/filingramp/shared.js +5 -5
  156. package/dist/research/filingramp/shared.js.map +1 -1
  157. package/dist/runtime/app-mode.d.ts +10 -0
  158. package/dist/runtime/app-mode.d.ts.map +1 -0
  159. package/dist/runtime/app-mode.js +172 -0
  160. package/dist/runtime/app-mode.js.map +1 -0
  161. package/dist/runtime/app-mode.test.d.ts +2 -0
  162. package/dist/runtime/app-mode.test.d.ts.map +1 -0
  163. package/dist/runtime/app-mode.test.js +130 -0
  164. package/dist/runtime/app-mode.test.js.map +1 -0
  165. package/dist/runtime/app-rehearsal.d.ts +2 -0
  166. package/dist/runtime/app-rehearsal.d.ts.map +1 -0
  167. package/dist/runtime/app-rehearsal.js +56 -0
  168. package/dist/runtime/app-rehearsal.js.map +1 -0
  169. package/dist/runtime/build-mode.d.ts +18 -0
  170. package/dist/runtime/build-mode.d.ts.map +1 -0
  171. package/dist/runtime/build-mode.js +108 -0
  172. package/dist/runtime/build-mode.js.map +1 -0
  173. package/dist/runtime/build-mode.test.d.ts +2 -0
  174. package/dist/runtime/build-mode.test.d.ts.map +1 -0
  175. package/dist/runtime/build-mode.test.js +159 -0
  176. package/dist/runtime/build-mode.test.js.map +1 -0
  177. package/dist/runtime/cli.js +7 -2
  178. package/dist/runtime/cli.js.map +1 -1
  179. package/dist/runtime/config.d.ts +4 -0
  180. package/dist/runtime/config.d.ts.map +1 -1
  181. package/dist/runtime/config.js +13 -2
  182. package/dist/runtime/config.js.map +1 -1
  183. package/dist/runtime/guest-server.d.ts +3 -0
  184. package/dist/runtime/guest-server.d.ts.map +1 -0
  185. package/dist/runtime/{lambda-microvm.js → guest-server.js} +49 -18
  186. package/dist/runtime/guest-server.js.map +1 -0
  187. package/dist/runtime/image-hooks.d.ts +5 -0
  188. package/dist/runtime/image-hooks.d.ts.map +1 -0
  189. package/dist/runtime/image-hooks.js +68 -0
  190. package/dist/runtime/image-hooks.js.map +1 -0
  191. package/dist/runtime/image-hooks.test.d.ts +2 -0
  192. package/dist/runtime/image-hooks.test.d.ts.map +1 -0
  193. package/dist/runtime/image-hooks.test.js +74 -0
  194. package/dist/runtime/image-hooks.test.js.map +1 -0
  195. package/dist/runtime/index.d.ts +8 -3
  196. package/dist/runtime/index.d.ts.map +1 -1
  197. package/dist/runtime/index.js +53 -35
  198. package/dist/runtime/index.js.map +1 -1
  199. package/dist/runtime/listening-ports.d.ts +13 -0
  200. package/dist/runtime/listening-ports.d.ts.map +1 -0
  201. package/dist/runtime/listening-ports.js +78 -0
  202. package/dist/runtime/listening-ports.js.map +1 -0
  203. package/dist/runtime/listening-ports.test.d.ts +2 -0
  204. package/dist/runtime/listening-ports.test.d.ts.map +1 -0
  205. package/dist/runtime/listening-ports.test.js +39 -0
  206. package/dist/runtime/listening-ports.test.js.map +1 -0
  207. package/dist/runtime/preview-proxy.d.ts +56 -0
  208. package/dist/runtime/preview-proxy.d.ts.map +1 -0
  209. package/dist/runtime/preview-proxy.js +302 -0
  210. package/dist/runtime/preview-proxy.js.map +1 -0
  211. package/dist/runtime/preview-proxy.test.d.ts +2 -0
  212. package/dist/runtime/preview-proxy.test.d.ts.map +1 -0
  213. package/dist/runtime/preview-proxy.test.js +122 -0
  214. package/dist/runtime/preview-proxy.test.js.map +1 -0
  215. package/dist/runtime/session-mode.d.ts +3 -0
  216. package/dist/runtime/session-mode.d.ts.map +1 -0
  217. package/dist/runtime/session-mode.js +60 -0
  218. package/dist/runtime/session-mode.js.map +1 -0
  219. package/dist/runtime/workload.d.ts +44 -0
  220. package/dist/runtime/workload.d.ts.map +1 -0
  221. package/dist/runtime/workload.js +222 -0
  222. package/dist/runtime/workload.js.map +1 -0
  223. package/dist/runtime/workload.test.d.ts +2 -0
  224. package/dist/runtime/workload.test.d.ts.map +1 -0
  225. package/dist/runtime/workload.test.js +235 -0
  226. package/dist/runtime/workload.test.js.map +1 -0
  227. package/dist/session/conversation.d.ts +3 -2
  228. package/dist/session/conversation.d.ts.map +1 -1
  229. package/dist/session/conversation.js +11 -7
  230. package/dist/session/conversation.js.map +1 -1
  231. package/dist/session/conversation.test.js +2 -3
  232. package/dist/session/conversation.test.js.map +1 -1
  233. package/dist/session/runtime.d.ts +16 -3
  234. package/dist/session/runtime.d.ts.map +1 -1
  235. package/dist/session/runtime.js +80 -13
  236. package/dist/session/runtime.js.map +1 -1
  237. package/dist/session/runtime.test.js +18 -7
  238. package/dist/session/runtime.test.js.map +1 -1
  239. package/dist/session/tools.d.ts.map +1 -1
  240. package/dist/session/tools.js +3 -3
  241. package/dist/session/tools.js.map +1 -1
  242. package/dist/task/loop.d.ts.map +1 -1
  243. package/dist/task/loop.js +6 -4
  244. package/dist/task/loop.js.map +1 -1
  245. package/dist/tools/exec-tools.d.ts +12 -0
  246. package/dist/tools/exec-tools.d.ts.map +1 -1
  247. package/dist/tools/exec-tools.js +46 -3
  248. package/dist/tools/exec-tools.js.map +1 -1
  249. package/dist/tools/exec-tools.test.d.ts +2 -0
  250. package/dist/tools/exec-tools.test.d.ts.map +1 -0
  251. package/dist/tools/exec-tools.test.js +48 -0
  252. package/dist/tools/exec-tools.test.js.map +1 -0
  253. package/dist/tools/fs-tools.d.ts.map +1 -1
  254. package/dist/tools/fs-tools.js +5 -5
  255. package/dist/tools/fs-tools.js.map +1 -1
  256. package/dist/transport/link.d.ts.map +1 -1
  257. package/dist/transport/link.js +16 -5
  258. package/dist/transport/link.js.map +1 -1
  259. package/dist/transport/link.test.js +24 -0
  260. package/dist/transport/link.test.js.map +1 -1
  261. package/dist/transport/protocol.d.ts +215 -3
  262. package/dist/transport/protocol.d.ts.map +1 -1
  263. package/dist/transport/protocol.js +163 -7
  264. package/dist/transport/protocol.js.map +1 -1
  265. package/dist/transport/protocol.test.js +41 -0
  266. package/dist/transport/protocol.test.js.map +1 -1
  267. package/dist/workspace-sync/eligibility.d.ts +14 -0
  268. package/dist/workspace-sync/eligibility.d.ts.map +1 -0
  269. package/dist/workspace-sync/eligibility.js +53 -0
  270. package/dist/workspace-sync/eligibility.js.map +1 -0
  271. package/dist/workspace-sync/merge.d.ts +15 -0
  272. package/dist/workspace-sync/merge.d.ts.map +1 -0
  273. package/dist/workspace-sync/merge.js +66 -0
  274. package/dist/workspace-sync/merge.js.map +1 -0
  275. package/dist/workspace-sync/merge.test.d.ts +2 -0
  276. package/dist/workspace-sync/merge.test.d.ts.map +1 -0
  277. package/dist/workspace-sync/merge.test.js +28 -0
  278. package/dist/workspace-sync/merge.test.js.map +1 -0
  279. package/dist/workspace-sync/workspace-sync.d.ts +48 -0
  280. package/dist/workspace-sync/workspace-sync.d.ts.map +1 -0
  281. package/dist/workspace-sync/workspace-sync.js +308 -0
  282. package/dist/workspace-sync/workspace-sync.js.map +1 -0
  283. package/dist/workspace-sync/workspace-sync.test.d.ts +2 -0
  284. package/dist/workspace-sync/workspace-sync.test.d.ts.map +1 -0
  285. package/dist/workspace-sync/workspace-sync.test.js +111 -0
  286. package/dist/workspace-sync/workspace-sync.test.js.map +1 -0
  287. package/dist/workspace-sync/write-drafts.d.ts +24 -0
  288. package/dist/workspace-sync/write-drafts.d.ts.map +1 -0
  289. package/dist/workspace-sync/write-drafts.js +87 -0
  290. package/dist/workspace-sync/write-drafts.js.map +1 -0
  291. package/dist/workspace-sync/write-drafts.test.d.ts +2 -0
  292. package/dist/workspace-sync/write-drafts.test.d.ts.map +1 -0
  293. package/dist/workspace-sync/write-drafts.test.js +36 -0
  294. package/dist/workspace-sync/write-drafts.test.js.map +1 -0
  295. package/package.json +12 -2
  296. package/dist/runtime/lambda-microvm.d.ts +0 -3
  297. package/dist/runtime/lambda-microvm.d.ts.map +0 -1
  298. package/dist/runtime/lambda-microvm.js.map +0 -1
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compileRules = compileRules;
4
+ exports.redirectFor = redirectFor;
5
+ exports.rewriteFor = rewriteFor;
6
+ exports.headersFor = headersFor;
7
+ // A service's routing rules, in vercel.json's order: clean URLs, trailing slash and redirects answer
8
+ // first, headers go on whatever answers, and rewrites come after a static site's files (or, for a
9
+ // server, right before it gets the request). Paths here are as the request spells them: percent-
10
+ // encoded values stay encoded in what they are filled into.
11
+ const route_pattern_1 = require("./route-pattern");
12
+ const PERMANENT_REDIRECT = 308;
13
+ const TEMPORARY_REDIRECT = 307;
14
+ function compileRules(settings) {
15
+ var _a, _b, _c, _d;
16
+ return {
17
+ redirects: ((_a = settings.redirects) !== null && _a !== void 0 ? _a : []).map((rule) => {
18
+ var _a;
19
+ return ({
20
+ pattern: (0, route_pattern_1.compileRoute)(rule.source),
21
+ destination: rule.destination,
22
+ status: (_a = rule.statusCode) !== null && _a !== void 0 ? _a : (rule.permanent === false ? TEMPORARY_REDIRECT : PERMANENT_REDIRECT),
23
+ });
24
+ }),
25
+ rewrites: ((_b = settings.rewrites) !== null && _b !== void 0 ? _b : []).map((rule) => ({ pattern: (0, route_pattern_1.compileRoute)(rule.source), destination: rule.destination })),
26
+ headers: ((_c = settings.headers) !== null && _c !== void 0 ? _c : []).map((rule) => ({ pattern: (0, route_pattern_1.compileRoute)(rule.source), headers: rule.headers })),
27
+ cleanUrls: (_d = settings.cleanUrls) !== null && _d !== void 0 ? _d : false,
28
+ trailingSlash: settings.trailingSlash,
29
+ };
30
+ }
31
+ /** `path` on this site: leading slashes collapsed, so `//evil.example` can never become another host. */
32
+ function localPath(path) {
33
+ return `/${path.replace(/^[/\\]+/, '')}`;
34
+ }
35
+ function withSearch(location, search) {
36
+ if (!search)
37
+ return location;
38
+ return location.includes('?') ? `${location}&${search.slice(1)}` : `${location}${search}`;
39
+ }
40
+ function canonicalPath(rules, pathname) {
41
+ var _a;
42
+ if (rules.cleanUrls) {
43
+ const index = /^\/(?:(.+)\/)?index(?:\.html)?\/?$/.exec(pathname);
44
+ if (index)
45
+ return `/${(_a = index[1]) !== null && _a !== void 0 ? _a : ''}`;
46
+ const page = /^\/(.+)\.html\/?$/.exec(pathname);
47
+ if (page)
48
+ return `/${page[1]}`;
49
+ }
50
+ if (rules.trailingSlash === true) {
51
+ // A path naming a file keeps none: /app.js, not /app.js/.
52
+ const file = /^\/((?:[^/]+\/)*[^/]+\.\w+)\/$/.exec(pathname);
53
+ if (file)
54
+ return `/${file[1]}`;
55
+ if (/^\/(?:[^/]+\/)*[^/.]+$/.test(pathname))
56
+ return `${pathname}/`;
57
+ }
58
+ else if (rules.trailingSlash === false && pathname !== '/' && pathname.endsWith('/')) {
59
+ return pathname.replace(/\/+$/, '');
60
+ }
61
+ return undefined;
62
+ }
63
+ /** The redirect that answers `pathname`, if any; `search` (with its `?`) carries over to it. */
64
+ function redirectFor(rules, pathname, search) {
65
+ const canonical = canonicalPath(rules, pathname);
66
+ if (canonical !== undefined)
67
+ return { status: PERMANENT_REDIRECT, location: withSearch(localPath(canonical), search) };
68
+ for (const rule of rules.redirects) {
69
+ const values = (0, route_pattern_1.matchRoute)(rule.pattern, pathname);
70
+ if (!values)
71
+ continue;
72
+ const filled = (0, route_pattern_1.fillDestination)(rule.destination, values);
73
+ return { status: rule.status, location: withSearch(/^https?:\/\//i.test(filled) ? filled : localPath(filled), search) };
74
+ }
75
+ return undefined;
76
+ }
77
+ /** The URL a rewrite turns `pathname` into, `search` included; undefined when none matches. */
78
+ function rewriteFor(rules, pathname, search = '') {
79
+ for (const rule of rules.rewrites) {
80
+ const values = (0, route_pattern_1.matchRoute)(rule.pattern, pathname);
81
+ if (values)
82
+ return withSearch(localPath((0, route_pattern_1.fillDestination)(rule.destination, values)), search);
83
+ }
84
+ return undefined;
85
+ }
86
+ /** The headers every matching rule sets on the answer to `pathname`. */
87
+ function headersFor(rules, pathname) {
88
+ return rules.headers.flatMap((rule) => ((0, route_pattern_1.matchRoute)(rule.pattern, pathname) ? rule.headers : []));
89
+ }
90
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/app/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rules.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.test.d.ts","sourceRoot":"","sources":["../../src/app/rules.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const node_test_1 = require("node:test");
8
+ const rules_1 = require("./rules");
9
+ (0, node_test_1.describe)('routing rules', () => {
10
+ (0, node_test_1.it)('redirects as vercel.json does: permanent 308 by default, with parameters and the query carried over', () => {
11
+ const rules = (0, rules_1.compileRules)({
12
+ redirects: [
13
+ { source: '/old/:slug', destination: '/new/:slug' },
14
+ { source: '/temp', destination: '/there', permanent: false },
15
+ { source: '/moved', destination: '/here', statusCode: 301 },
16
+ { source: '/docs/(.*)', destination: 'https://docs.example.com/$1?from=app' },
17
+ ],
18
+ });
19
+ strict_1.default.deepEqual((0, rules_1.redirectFor)(rules, '/old/a', '?x=1'), { status: 308, location: '/new/a?x=1' });
20
+ strict_1.default.deepEqual((0, rules_1.redirectFor)(rules, '/temp', ''), { status: 307, location: '/there' });
21
+ strict_1.default.deepEqual((0, rules_1.redirectFor)(rules, '/moved', ''), { status: 301, location: '/here' });
22
+ strict_1.default.deepEqual((0, rules_1.redirectFor)(rules, '/docs/a/b', '?x=1'), { status: 308, location: 'https://docs.example.com/a/b?from=app&x=1' });
23
+ strict_1.default.equal((0, rules_1.redirectFor)(rules, '/other', ''), undefined);
24
+ });
25
+ (0, node_test_1.it)('makes clean URLs canonical', () => {
26
+ var _a, _b, _c;
27
+ const rules = (0, rules_1.compileRules)({ cleanUrls: true });
28
+ strict_1.default.equal((_a = (0, rules_1.redirectFor)(rules, '/about.html', '')) === null || _a === void 0 ? void 0 : _a.location, '/about');
29
+ strict_1.default.equal((_b = (0, rules_1.redirectFor)(rules, '/index.html', '?a=1')) === null || _b === void 0 ? void 0 : _b.location, '/?a=1');
30
+ strict_1.default.equal((_c = (0, rules_1.redirectFor)(rules, '/blog/index.html', '')) === null || _c === void 0 ? void 0 : _c.location, '/blog');
31
+ strict_1.default.equal((0, rules_1.redirectFor)(rules, '/about', ''), undefined);
32
+ strict_1.default.equal((0, rules_1.redirectFor)(rules, '/', ''), undefined);
33
+ });
34
+ (0, node_test_1.it)('adds or removes the trailing slash, leaving files alone', () => {
35
+ var _a, _b, _c;
36
+ const add = (0, rules_1.compileRules)({ trailingSlash: true });
37
+ strict_1.default.equal((_a = (0, rules_1.redirectFor)(add, '/about', '')) === null || _a === void 0 ? void 0 : _a.location, '/about/');
38
+ strict_1.default.equal((0, rules_1.redirectFor)(add, '/app.js', ''), undefined);
39
+ strict_1.default.equal((_b = (0, rules_1.redirectFor)(add, '/app.js/', '')) === null || _b === void 0 ? void 0 : _b.location, '/app.js');
40
+ strict_1.default.equal((0, rules_1.redirectFor)(add, '/about/', ''), undefined);
41
+ strict_1.default.equal((0, rules_1.redirectFor)(add, '/', ''), undefined);
42
+ const remove = (0, rules_1.compileRules)({ trailingSlash: false });
43
+ strict_1.default.equal((_c = (0, rules_1.redirectFor)(remove, '/about/', '')) === null || _c === void 0 ? void 0 : _c.location, '/about');
44
+ strict_1.default.equal((0, rules_1.redirectFor)(remove, '/about', ''), undefined);
45
+ strict_1.default.equal((0, rules_1.redirectFor)(remove, '/', ''), undefined);
46
+ });
47
+ (0, node_test_1.it)('never redirects to another site through the path someone asked for', () => {
48
+ var _a, _b, _c, _d;
49
+ strict_1.default.equal((_a = (0, rules_1.redirectFor)((0, rules_1.compileRules)({ trailingSlash: false }), '//evil.example/', '')) === null || _a === void 0 ? void 0 : _a.location, '/evil.example');
50
+ strict_1.default.equal((_b = (0, rules_1.redirectFor)((0, rules_1.compileRules)({ cleanUrls: true }), '//evil.example/x.html', '')) === null || _b === void 0 ? void 0 : _b.location, '/evil.example/x');
51
+ const rules = (0, rules_1.compileRules)({ redirects: [{ source: '/go/(.*)', destination: '/$1' }] });
52
+ strict_1.default.equal((_c = (0, rules_1.redirectFor)(rules, '/go//evil.example', '')) === null || _c === void 0 ? void 0 : _c.location, '/evil.example');
53
+ strict_1.default.equal((_d = (0, rules_1.redirectFor)(rules, '/go/\\evil.example', '')) === null || _d === void 0 ? void 0 : _d.location, '/evil.example');
54
+ });
55
+ (0, node_test_1.it)('rewrites and sets headers by the path asked for', () => {
56
+ const rules = (0, rules_1.compileRules)({
57
+ rewrites: [{ source: '/v1/(.*)', destination: '/api/$1?version=1' }],
58
+ headers: [
59
+ { source: '/(.*)', headers: [{ key: 'X-Frame-Options', value: 'DENY' }] },
60
+ { source: '/v1/(.*)', headers: [{ key: 'Cache-Control', value: 'no-store' }] },
61
+ ],
62
+ });
63
+ strict_1.default.equal((0, rules_1.rewriteFor)(rules, '/v1/users', '?a=1'), '/api/users?version=1&a=1');
64
+ strict_1.default.equal((0, rules_1.rewriteFor)(rules, '/other'), undefined);
65
+ strict_1.default.deepEqual((0, rules_1.headersFor)(rules, '/v1/users').map((header) => header.key), ['X-Frame-Options', 'Cache-Control']);
66
+ strict_1.default.deepEqual((0, rules_1.headersFor)(rules, '/').map((header) => header.key), ['X-Frame-Options']);
67
+ });
68
+ });
69
+ //# sourceMappingURL=rules.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.test.js","sourceRoot":"","sources":["../../src/app/rules.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { spawn as spawnProcess } from 'node:child_process';
2
+ import { type AgentAppProcess, type AgentAppStatus } from '../transport/protocol';
3
+ import { type AppConfig, type AppMode } from './config';
4
+ import { type RoutingRules } from './rules';
5
+ import { type StaticSite } from './static-server';
6
+ /** Where the app's logs go, relative to its directory (kept out of snapshots and commits). */
7
+ export declare const APP_LOG_DIR = ".builder/logs";
8
+ export interface AppRunnerOptions {
9
+ /** The app's directory: the workspace, or a deployment's. */
10
+ dir: string;
11
+ mode: AppMode;
12
+ /** The processes' environment; the runner adds PORT. */
13
+ env: NodeJS.ProcessEnv;
14
+ /** Copy process output to the guest's own stdout too (a deployment's only log). */
15
+ echoOutput?: boolean;
16
+ /** A deployment's build: once done, a marker by this name lets a restart on the same disk skip install and build. */
17
+ buildId?: string;
18
+ /** The release was built ahead of time and brought its output and dependencies: only start it. */
19
+ prebuilt?: boolean;
20
+ onStatus?: (status: AgentAppStatus) => void;
21
+ spawn?: typeof spawnProcess;
22
+ isListening?: (port: number) => Promise<boolean>;
23
+ backoff?: {
24
+ initialMs: number;
25
+ maxMs: number;
26
+ resetAfterMs: number;
27
+ };
28
+ readyPollMs?: number;
29
+ }
30
+ /** Where a request path goes. */
31
+ export type AppRoute = {
32
+ kind: 'port';
33
+ port: number;
34
+ rules: RoutingRules;
35
+ } | {
36
+ kind: 'static';
37
+ site: StaticSite;
38
+ rules: RoutingRules;
39
+ }
40
+ /** The service that would answer isn't up (or the app never got that far): say so. */
41
+ | {
42
+ kind: 'unavailable';
43
+ process?: AgentAppProcess;
44
+ } | {
45
+ kind: 'none';
46
+ };
47
+ export declare class AppRunner {
48
+ private readonly config;
49
+ private readonly options;
50
+ private readonly processes;
51
+ private readonly rewrites;
52
+ private phase;
53
+ /** Its processes are all known: until then, none running doesn't mean all of them are. */
54
+ private launched;
55
+ private error?;
56
+ private stopped;
57
+ private readonly spawn;
58
+ private readonly isListening;
59
+ private readonly backoff;
60
+ private readonly readyPollMs;
61
+ private readonly logs;
62
+ /** The install or build running now, so stop() ends it too. */
63
+ private step?;
64
+ constructor(config: AppConfig, options: AppRunnerOptions);
65
+ status(): AgentAppStatus;
66
+ private currentPhase;
67
+ /**
68
+ * A service is on its first start, so what a page calls may not be there yet. One that has
69
+ * crashed and is restarting doesn't count: it might never come up.
70
+ */
71
+ firstStartPending(): boolean;
72
+ private changed;
73
+ private logPath;
74
+ private relativeLog;
75
+ private openLog;
76
+ private launch;
77
+ /** The processes' env in `cwd`: its own installed tools (node_modules/.bin, a .venv) come first. */
78
+ private envFor;
79
+ /** Runs a one-off step (an install or a build) to completion: its exit code (null when it couldn't run). */
80
+ private runStep;
81
+ private resolveDir;
82
+ /** Ports for services that name none: DEFAULT_APP_PORT upward, past reserved and busy ones. */
83
+ private assignPorts;
84
+ private buildMarker;
85
+ /** Installs and builds as this mode does, starting nothing. False when a step failed (status says why) or it was stopped. */
86
+ prepare(): Promise<boolean>;
87
+ /** Installs (and builds, deployed), then starts every process. Resolves once they're launched. */
88
+ start(): Promise<void>;
89
+ private fail;
90
+ private install;
91
+ private build;
92
+ private startProcess;
93
+ private pollReady;
94
+ private exited;
95
+ private routeTo;
96
+ /**
97
+ * Where a request for `pathname` goes: a service's port, its static files, or nowhere yet, for
98
+ * every rewrite that matches, in order. A static service without the file passes it to the next.
99
+ */
100
+ routes(pathname: string): AppRoute[];
101
+ /** Resolves once every service is running or has crashed (or the app failed), or after `timeoutMs`. */
102
+ settled(timeoutMs: number): Promise<AgentAppStatus>;
103
+ private kill;
104
+ /** Stops every process (SIGTERM, then SIGKILL after a grace period). */
105
+ stop(): Promise<void>;
106
+ }
107
+ /** A log's last `lines` lines, for telling the model or a person why something failed. */
108
+ export declare function logTail(dir: string, relativeLog: string, lines?: number): Promise<string>;
109
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/app/runner.ts"],"names":[],"mappings":"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"}