@multiplayer-app/agent 0.1.20 → 0.1.21

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 (290) 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/config.d.ts +196 -0
  29. package/dist/app/config.d.ts.map +1 -0
  30. package/dist/app/config.js +362 -0
  31. package/dist/app/config.js.map +1 -0
  32. package/dist/app/config.test.d.ts +2 -0
  33. package/dist/app/config.test.d.ts.map +1 -0
  34. package/dist/app/config.test.js +224 -0
  35. package/dist/app/config.test.js.map +1 -0
  36. package/dist/app/detect.d.ts +68 -0
  37. package/dist/app/detect.d.ts.map +1 -0
  38. package/dist/app/detect.js +449 -0
  39. package/dist/app/detect.js.map +1 -0
  40. package/dist/app/detect.test.d.ts +2 -0
  41. package/dist/app/detect.test.d.ts.map +1 -0
  42. package/dist/app/detect.test.js +267 -0
  43. package/dist/app/detect.test.js.map +1 -0
  44. package/dist/app/env.d.ts +5 -0
  45. package/dist/app/env.d.ts.map +1 -0
  46. package/dist/app/env.js +22 -0
  47. package/dist/app/env.js.map +1 -0
  48. package/dist/app/functions-cli.d.ts +3 -0
  49. package/dist/app/functions-cli.d.ts.map +1 -0
  50. package/dist/app/functions-cli.js +27 -0
  51. package/dist/app/functions-cli.js.map +1 -0
  52. package/dist/app/functions-host.d.ts +15 -0
  53. package/dist/app/functions-host.d.ts.map +1 -0
  54. package/dist/app/functions-host.js +276 -0
  55. package/dist/app/functions-host.js.map +1 -0
  56. package/dist/app/functions-host.test.d.ts +2 -0
  57. package/dist/app/functions-host.test.d.ts.map +1 -0
  58. package/dist/app/functions-host.test.js +117 -0
  59. package/dist/app/functions-host.test.js.map +1 -0
  60. package/dist/app/functions-routes.d.ts +23 -0
  61. package/dist/app/functions-routes.d.ts.map +1 -0
  62. package/dist/app/functions-routes.js +85 -0
  63. package/dist/app/functions-routes.js.map +1 -0
  64. package/dist/app/functions-routes.test.d.ts +2 -0
  65. package/dist/app/functions-routes.test.d.ts.map +1 -0
  66. package/dist/app/functions-routes.test.js +40 -0
  67. package/dist/app/functions-routes.test.js.map +1 -0
  68. package/dist/app/manifest.d.ts +17 -0
  69. package/dist/app/manifest.d.ts.map +1 -0
  70. package/dist/app/manifest.js +64 -0
  71. package/dist/app/manifest.js.map +1 -0
  72. package/dist/app/manifest.test.d.ts +2 -0
  73. package/dist/app/manifest.test.d.ts.map +1 -0
  74. package/dist/app/manifest.test.js +173 -0
  75. package/dist/app/manifest.test.js.map +1 -0
  76. package/dist/app/release-artifacts.d.ts +39 -0
  77. package/dist/app/release-artifacts.d.ts.map +1 -0
  78. package/dist/app/release-artifacts.js +229 -0
  79. package/dist/app/release-artifacts.js.map +1 -0
  80. package/dist/app/release-artifacts.test.d.ts +2 -0
  81. package/dist/app/release-artifacts.test.d.ts.map +1 -0
  82. package/dist/app/release-artifacts.test.js +295 -0
  83. package/dist/app/release-artifacts.test.js.map +1 -0
  84. package/dist/app/route-pattern.d.ts +23 -0
  85. package/dist/app/route-pattern.d.ts.map +1 -0
  86. package/dist/app/route-pattern.js +339 -0
  87. package/dist/app/route-pattern.js.map +1 -0
  88. package/dist/app/route-pattern.test.d.ts +2 -0
  89. package/dist/app/route-pattern.test.d.ts.map +1 -0
  90. package/dist/app/route-pattern.test.js +187 -0
  91. package/dist/app/route-pattern.test.js.map +1 -0
  92. package/dist/app/rules.d.ts +61 -0
  93. package/dist/app/rules.d.ts.map +1 -0
  94. package/dist/app/rules.js +90 -0
  95. package/dist/app/rules.js.map +1 -0
  96. package/dist/app/rules.test.d.ts +2 -0
  97. package/dist/app/rules.test.d.ts.map +1 -0
  98. package/dist/app/rules.test.js +69 -0
  99. package/dist/app/rules.test.js.map +1 -0
  100. package/dist/app/runner.d.ts +109 -0
  101. package/dist/app/runner.d.ts.map +1 -0
  102. package/dist/app/runner.js +429 -0
  103. package/dist/app/runner.js.map +1 -0
  104. package/dist/app/site.d.ts +73 -0
  105. package/dist/app/site.d.ts.map +1 -0
  106. package/dist/app/site.js +161 -0
  107. package/dist/app/site.js.map +1 -0
  108. package/dist/app/site.test.d.ts +2 -0
  109. package/dist/app/site.test.d.ts.map +1 -0
  110. package/dist/app/site.test.js +291 -0
  111. package/dist/app/site.test.js.map +1 -0
  112. package/dist/app/static-server.d.ts +20 -0
  113. package/dist/app/static-server.d.ts.map +1 -0
  114. package/dist/app/static-server.js +145 -0
  115. package/dist/app/static-server.js.map +1 -0
  116. package/dist/persistence/conversation-store.d.ts +21 -0
  117. package/dist/persistence/conversation-store.d.ts.map +1 -0
  118. package/dist/persistence/conversation-store.js +59 -0
  119. package/dist/persistence/conversation-store.js.map +1 -0
  120. package/dist/persistence/conversation-store.test.d.ts +2 -0
  121. package/dist/persistence/conversation-store.test.d.ts.map +1 -0
  122. package/dist/persistence/conversation-store.test.js +98 -0
  123. package/dist/persistence/conversation-store.test.js.map +1 -0
  124. package/dist/persistence/git-sync.d.ts +14 -1
  125. package/dist/persistence/git-sync.d.ts.map +1 -1
  126. package/dist/persistence/git-sync.js +73 -17
  127. package/dist/persistence/git-sync.js.map +1 -1
  128. package/dist/persistence/git-sync.test.js +155 -6
  129. package/dist/persistence/git-sync.test.js.map +1 -1
  130. package/dist/persistence/snapshot-sync.d.ts +19 -2
  131. package/dist/persistence/snapshot-sync.d.ts.map +1 -1
  132. package/dist/persistence/snapshot-sync.js +194 -83
  133. package/dist/persistence/snapshot-sync.js.map +1 -1
  134. package/dist/persistence/snapshot-sync.test.js +145 -27
  135. package/dist/persistence/snapshot-sync.test.js.map +1 -1
  136. package/dist/persistence/workspace.d.ts +3 -0
  137. package/dist/persistence/workspace.d.ts.map +1 -1
  138. package/dist/persistence/workspace.js +1 -0
  139. package/dist/persistence/workspace.js.map +1 -1
  140. package/dist/research/extract-texts.d.ts.map +1 -1
  141. package/dist/research/extract-texts.js +6 -13
  142. package/dist/research/extract-texts.js.map +1 -1
  143. package/dist/research/filingramp/attachment-tools.d.ts.map +1 -1
  144. package/dist/research/filingramp/attachment-tools.js +7 -4
  145. package/dist/research/filingramp/attachment-tools.js.map +1 -1
  146. package/dist/research/filingramp/shared.d.ts.map +1 -1
  147. package/dist/research/filingramp/shared.js +5 -5
  148. package/dist/research/filingramp/shared.js.map +1 -1
  149. package/dist/runtime/app-mode.d.ts +10 -0
  150. package/dist/runtime/app-mode.d.ts.map +1 -0
  151. package/dist/runtime/app-mode.js +172 -0
  152. package/dist/runtime/app-mode.js.map +1 -0
  153. package/dist/runtime/app-mode.test.d.ts +2 -0
  154. package/dist/runtime/app-mode.test.d.ts.map +1 -0
  155. package/dist/runtime/app-mode.test.js +130 -0
  156. package/dist/runtime/app-mode.test.js.map +1 -0
  157. package/dist/runtime/app-rehearsal.d.ts +2 -0
  158. package/dist/runtime/app-rehearsal.d.ts.map +1 -0
  159. package/dist/runtime/app-rehearsal.js +56 -0
  160. package/dist/runtime/app-rehearsal.js.map +1 -0
  161. package/dist/runtime/build-mode.d.ts +12 -0
  162. package/dist/runtime/build-mode.d.ts.map +1 -0
  163. package/dist/runtime/build-mode.js +116 -0
  164. package/dist/runtime/build-mode.js.map +1 -0
  165. package/dist/runtime/build-mode.test.d.ts +2 -0
  166. package/dist/runtime/build-mode.test.d.ts.map +1 -0
  167. package/dist/runtime/build-mode.test.js +121 -0
  168. package/dist/runtime/build-mode.test.js.map +1 -0
  169. package/dist/runtime/cli.js +7 -2
  170. package/dist/runtime/cli.js.map +1 -1
  171. package/dist/runtime/config.d.ts +4 -0
  172. package/dist/runtime/config.d.ts.map +1 -1
  173. package/dist/runtime/config.js +13 -2
  174. package/dist/runtime/config.js.map +1 -1
  175. package/dist/runtime/guest-server.d.ts +3 -0
  176. package/dist/runtime/guest-server.d.ts.map +1 -0
  177. package/dist/runtime/{lambda-microvm.js → guest-server.js} +49 -18
  178. package/dist/runtime/guest-server.js.map +1 -0
  179. package/dist/runtime/image-hooks.d.ts +5 -0
  180. package/dist/runtime/image-hooks.d.ts.map +1 -0
  181. package/dist/runtime/image-hooks.js +68 -0
  182. package/dist/runtime/image-hooks.js.map +1 -0
  183. package/dist/runtime/image-hooks.test.d.ts +2 -0
  184. package/dist/runtime/image-hooks.test.d.ts.map +1 -0
  185. package/dist/runtime/image-hooks.test.js +74 -0
  186. package/dist/runtime/image-hooks.test.js.map +1 -0
  187. package/dist/runtime/index.d.ts +8 -3
  188. package/dist/runtime/index.d.ts.map +1 -1
  189. package/dist/runtime/index.js +53 -35
  190. package/dist/runtime/index.js.map +1 -1
  191. package/dist/runtime/listening-ports.d.ts +13 -0
  192. package/dist/runtime/listening-ports.d.ts.map +1 -0
  193. package/dist/runtime/listening-ports.js +78 -0
  194. package/dist/runtime/listening-ports.js.map +1 -0
  195. package/dist/runtime/listening-ports.test.d.ts +2 -0
  196. package/dist/runtime/listening-ports.test.d.ts.map +1 -0
  197. package/dist/runtime/listening-ports.test.js +39 -0
  198. package/dist/runtime/listening-ports.test.js.map +1 -0
  199. package/dist/runtime/preview-proxy.d.ts +56 -0
  200. package/dist/runtime/preview-proxy.d.ts.map +1 -0
  201. package/dist/runtime/preview-proxy.js +302 -0
  202. package/dist/runtime/preview-proxy.js.map +1 -0
  203. package/dist/runtime/preview-proxy.test.d.ts +2 -0
  204. package/dist/runtime/preview-proxy.test.d.ts.map +1 -0
  205. package/dist/runtime/preview-proxy.test.js +122 -0
  206. package/dist/runtime/preview-proxy.test.js.map +1 -0
  207. package/dist/runtime/session-mode.d.ts +3 -0
  208. package/dist/runtime/session-mode.d.ts.map +1 -0
  209. package/dist/runtime/session-mode.js +60 -0
  210. package/dist/runtime/session-mode.js.map +1 -0
  211. package/dist/runtime/workload.d.ts +44 -0
  212. package/dist/runtime/workload.d.ts.map +1 -0
  213. package/dist/runtime/workload.js +222 -0
  214. package/dist/runtime/workload.js.map +1 -0
  215. package/dist/runtime/workload.test.d.ts +2 -0
  216. package/dist/runtime/workload.test.d.ts.map +1 -0
  217. package/dist/runtime/workload.test.js +235 -0
  218. package/dist/runtime/workload.test.js.map +1 -0
  219. package/dist/session/conversation.d.ts +3 -2
  220. package/dist/session/conversation.d.ts.map +1 -1
  221. package/dist/session/conversation.js +11 -7
  222. package/dist/session/conversation.js.map +1 -1
  223. package/dist/session/conversation.test.js +2 -3
  224. package/dist/session/conversation.test.js.map +1 -1
  225. package/dist/session/runtime.d.ts +16 -3
  226. package/dist/session/runtime.d.ts.map +1 -1
  227. package/dist/session/runtime.js +80 -13
  228. package/dist/session/runtime.js.map +1 -1
  229. package/dist/session/runtime.test.js +18 -7
  230. package/dist/session/runtime.test.js.map +1 -1
  231. package/dist/session/tools.d.ts.map +1 -1
  232. package/dist/session/tools.js +3 -3
  233. package/dist/session/tools.js.map +1 -1
  234. package/dist/task/loop.d.ts.map +1 -1
  235. package/dist/task/loop.js +6 -4
  236. package/dist/task/loop.js.map +1 -1
  237. package/dist/tools/exec-tools.d.ts +12 -0
  238. package/dist/tools/exec-tools.d.ts.map +1 -1
  239. package/dist/tools/exec-tools.js +46 -3
  240. package/dist/tools/exec-tools.js.map +1 -1
  241. package/dist/tools/exec-tools.test.d.ts +2 -0
  242. package/dist/tools/exec-tools.test.d.ts.map +1 -0
  243. package/dist/tools/exec-tools.test.js +48 -0
  244. package/dist/tools/exec-tools.test.js.map +1 -0
  245. package/dist/tools/fs-tools.d.ts.map +1 -1
  246. package/dist/tools/fs-tools.js +5 -5
  247. package/dist/tools/fs-tools.js.map +1 -1
  248. package/dist/transport/link.d.ts.map +1 -1
  249. package/dist/transport/link.js +16 -5
  250. package/dist/transport/link.js.map +1 -1
  251. package/dist/transport/link.test.js +24 -0
  252. package/dist/transport/link.test.js.map +1 -1
  253. package/dist/transport/protocol.d.ts +190 -3
  254. package/dist/transport/protocol.d.ts.map +1 -1
  255. package/dist/transport/protocol.js +147 -7
  256. package/dist/transport/protocol.js.map +1 -1
  257. package/dist/transport/protocol.test.js +41 -0
  258. package/dist/transport/protocol.test.js.map +1 -1
  259. package/dist/workspace-sync/eligibility.d.ts +14 -0
  260. package/dist/workspace-sync/eligibility.d.ts.map +1 -0
  261. package/dist/workspace-sync/eligibility.js +53 -0
  262. package/dist/workspace-sync/eligibility.js.map +1 -0
  263. package/dist/workspace-sync/merge.d.ts +15 -0
  264. package/dist/workspace-sync/merge.d.ts.map +1 -0
  265. package/dist/workspace-sync/merge.js +66 -0
  266. package/dist/workspace-sync/merge.js.map +1 -0
  267. package/dist/workspace-sync/merge.test.d.ts +2 -0
  268. package/dist/workspace-sync/merge.test.d.ts.map +1 -0
  269. package/dist/workspace-sync/merge.test.js +28 -0
  270. package/dist/workspace-sync/merge.test.js.map +1 -0
  271. package/dist/workspace-sync/workspace-sync.d.ts +48 -0
  272. package/dist/workspace-sync/workspace-sync.d.ts.map +1 -0
  273. package/dist/workspace-sync/workspace-sync.js +308 -0
  274. package/dist/workspace-sync/workspace-sync.js.map +1 -0
  275. package/dist/workspace-sync/workspace-sync.test.d.ts +2 -0
  276. package/dist/workspace-sync/workspace-sync.test.d.ts.map +1 -0
  277. package/dist/workspace-sync/workspace-sync.test.js +111 -0
  278. package/dist/workspace-sync/workspace-sync.test.js.map +1 -0
  279. package/dist/workspace-sync/write-drafts.d.ts +24 -0
  280. package/dist/workspace-sync/write-drafts.d.ts.map +1 -0
  281. package/dist/workspace-sync/write-drafts.js +87 -0
  282. package/dist/workspace-sync/write-drafts.js.map +1 -0
  283. package/dist/workspace-sync/write-drafts.test.d.ts +2 -0
  284. package/dist/workspace-sync/write-drafts.test.d.ts.map +1 -0
  285. package/dist/workspace-sync/write-drafts.test.js +36 -0
  286. package/dist/workspace-sync/write-drafts.test.js.map +1 -0
  287. package/package.json +12 -2
  288. package/dist/runtime/lambda-microvm.d.ts +0 -3
  289. package/dist/runtime/lambda-microvm.d.ts.map +0 -1
  290. package/dist/runtime/lambda-microvm.js.map +0 -1
@@ -0,0 +1,295 @@
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_crypto_1 = require("node:crypto");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_http_1 = __importDefault(require("node:http"));
10
+ const node_os_1 = __importDefault(require("node:os"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const node_stream_1 = require("node:stream");
13
+ const node_test_1 = require("node:test");
14
+ const node_zlib_1 = require("node:zlib");
15
+ const workload_1 = require("../runtime/workload");
16
+ const release_artifacts_1 = require("./release-artifacts");
17
+ const paths = (files) => files.map((file) => file.path).sort();
18
+ (0, node_test_1.describe)('what goes in a release', () => {
19
+ let dir;
20
+ const write = async (files) => {
21
+ for (const [name, content] of Object.entries(files)) {
22
+ await node_fs_1.promises.mkdir(node_path_1.default.dirname(node_path_1.default.join(dir, name)), { recursive: true });
23
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, name), content);
24
+ }
25
+ };
26
+ (0, node_test_1.beforeEach)(async () => {
27
+ dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'builder-release-'));
28
+ });
29
+ (0, node_test_1.afterEach)(() => node_fs_1.promises.rm(dir, { recursive: true, force: true }));
30
+ (0, node_test_1.it)('is a static service\'s output, and a server\'s whole folder', async () => {
31
+ await write({
32
+ 'packages/web/src/app.ts': '',
33
+ 'packages/web/dist/index.html': '',
34
+ 'packages/web/dist/assets/a.js': '',
35
+ 'packages/web/dist/node_modules/x/index.js': '',
36
+ 'packages/api/server.ts': '',
37
+ '.builder/conversation.json': '',
38
+ });
39
+ const { site, run } = await (0, release_artifacts_1.collectReleaseFiles)({
40
+ services: {
41
+ web: { root: 'packages/web', outputDirectory: 'dist' },
42
+ api: { root: 'packages/api', startCommand: 'node dist/server.js' },
43
+ },
44
+ }, dir);
45
+ strict_1.default.deepEqual(paths(site), ['packages/web/dist/assets/a.js', 'packages/web/dist/index.html']);
46
+ strict_1.default.deepEqual(run, ['packages/api']);
47
+ });
48
+ (0, node_test_1.it)('leaves out of a site what it would never serve', async () => {
49
+ await write({ 'packages/web/index.html': '', 'packages/web/package.json': '{}', 'packages/web/package-lock.json': '{}', 'packages/web/.env': 'SECRET=1', 'packages/web/node_modules/x.js': '', 'packages/web/docs/package.json': '{}' });
50
+ const { site } = await (0, release_artifacts_1.collectReleaseFiles)({ services: { web: { root: 'packages/web', outputDirectory: '.' } } }, dir);
51
+ strict_1.default.deepEqual(paths(site), ['packages/web/docs/package.json', 'packages/web/index.html']);
52
+ });
53
+ (0, node_test_1.it)('takes what\'s around a server in a workspace, which it installs from', async () => {
54
+ await write({ 'pnpm-workspace.yaml': '', 'pnpm-lock.yaml': '', 'packages/shared/index.js': '', 'packages/api/server.js': '' });
55
+ const { run } = await (0, release_artifacts_1.collectReleaseFiles)({ services: { api: { root: 'packages/api', startCommand: 'node server.js' } } }, dir);
56
+ strict_1.default.deepEqual(run, ['.']);
57
+ });
58
+ (0, node_test_1.it)('takes a daemon\'s folder as it does a server\'s', async () => {
59
+ await write({ 'packages/web/index.html': '', 'worker/run.js': '' });
60
+ const { run } = await (0, release_artifacts_1.collectReleaseFiles)({ services: { web: { root: 'packages/web', outputDirectory: '.' } }, daemons: { worker: { root: 'worker', command: 'node run.js' } } }, dir);
61
+ strict_1.default.deepEqual(run, ['worker']);
62
+ });
63
+ (0, node_test_1.it)('refuses a server outside the app', async () => {
64
+ await strict_1.default.rejects((0, release_artifacts_1.collectReleaseFiles)({ services: { api: { root: '../elsewhere', startCommand: 'node server.js' } } }, dir), (error) => error instanceof release_artifacts_1.ReleaseOutputError && /outside the app/.test(error.message));
65
+ });
66
+ (0, node_test_1.it)('refuses a static service whose build left nothing, with its name', async () => {
67
+ await write({ 'packages/web/src/app.ts': '' });
68
+ await strict_1.default.rejects((0, release_artifacts_1.collectReleaseFiles)({ services: { web: { root: 'packages/web', outputDirectory: 'dist' } } }, dir), (error) => error instanceof release_artifacts_1.ReleaseOutputError && /web: .*packages\/web\/dist/.test(error.message));
69
+ });
70
+ (0, node_test_1.it)('refuses a file over the limit rather than leave it out', async () => {
71
+ await write({ 'dist/index.html': '' });
72
+ const big = await node_fs_1.promises.open(node_path_1.default.join(dir, 'dist/big.bin'), 'w');
73
+ await big.truncate(65 * 1024 * 1024);
74
+ await big.close();
75
+ await strict_1.default.rejects((0, release_artifacts_1.collectReleaseFiles)({ services: { web: { root: '.', outputDirectory: 'dist' } } }, dir), (error) => error instanceof release_artifacts_1.ReleaseOutputError && /dist\/big\.bin is 65 MiB/.test(error.message));
76
+ });
77
+ });
78
+ (0, node_test_1.describe)('uploading a release', () => {
79
+ let dir;
80
+ let server;
81
+ let url;
82
+ let received;
83
+ let answer;
84
+ const attempts = new Map();
85
+ const config = {
86
+ services: {
87
+ web: { root: 'web', outputDirectory: 'dist' },
88
+ api: { root: 'api', startCommand: 'node server.js' },
89
+ },
90
+ rewrites: [{ source: '/api/(.*)', destination: { service: 'api' } }, { source: '/(.*)', destination: { service: 'web' } }],
91
+ };
92
+ (0, node_test_1.before)(async () => {
93
+ server = node_http_1.default.createServer((req, res) => {
94
+ const chunks = [];
95
+ req.on('data', (chunk) => chunks.push(chunk));
96
+ req.on('end', () => {
97
+ var _a;
98
+ const attempt = ((_a = attempts.get(req.url)) !== null && _a !== void 0 ? _a : 0) + 1;
99
+ attempts.set(req.url, attempt);
100
+ // As the git service: a release with a manifest is finished, and takes nothing more.
101
+ const finished = received.some((item) => item.url.endsWith('/manifest.json'));
102
+ const status = finished ? 409 : answer(req.url, attempt);
103
+ if (status < 300)
104
+ received.push({ url: req.url, auth: req.headers.authorization, body: Buffer.concat(chunks).toString('utf8'), bytes: Buffer.concat(chunks) });
105
+ res.writeHead(status).end();
106
+ });
107
+ });
108
+ await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
109
+ url = `http://127.0.0.1:${server.address().port}/release-artifacts/a/r`;
110
+ });
111
+ (0, node_test_1.after)(() => {
112
+ server.closeAllConnections();
113
+ server.close();
114
+ });
115
+ (0, node_test_1.beforeEach)(async () => {
116
+ received = [];
117
+ attempts.clear();
118
+ answer = () => 204;
119
+ dir = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'builder-release-'));
120
+ await node_fs_1.promises.mkdir(node_path_1.default.join(dir, 'web/dist'), { recursive: true });
121
+ await node_fs_1.promises.mkdir(node_path_1.default.join(dir, 'api/bin'), { recursive: true });
122
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'web/dist/index.html'), '<h1>web</h1>');
123
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'api/server.js'), 'server');
124
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'api/bin/run'), 'run', { mode: 0o755 });
125
+ await node_fs_1.promises.chmod(dir, 0o755);
126
+ await (0, workload_1.handOverToWorkload)(dir);
127
+ });
128
+ (0, node_test_1.afterEach)(() => node_fs_1.promises.rm(dir, { recursive: true, force: true }));
129
+ (0, node_test_1.it)('sends the site and what a VM runs apart, with the token, and the manifest last', async () => {
130
+ const manifest = await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
131
+ const route = (name) => `/release-artifacts/a/r${name}`;
132
+ strict_1.default.deepEqual(received.map((item) => item.url).sort(), [
133
+ route('/files/.builder/builder.json'),
134
+ route('/manifest.json'),
135
+ route('/run.tar.zst'),
136
+ route('/site/web/dist/index.html'),
137
+ ].sort());
138
+ strict_1.default.equal(received[received.length - 1].url, route('/manifest.json'));
139
+ strict_1.default.ok(received.every((item) => item.auth === 'Bearer t'));
140
+ strict_1.default.deepEqual(manifest.site, [{ path: 'web/dist/index.html', size: '<h1>web</h1>'.length, hash: (0, node_crypto_1.createHash)('sha256').update('<h1>web</h1>').digest('base64url') }]);
141
+ const body = (name) => JSON.parse(received.find((item) => item.url === route(name)).body);
142
+ strict_1.default.deepEqual(body('/files/.builder/builder.json'), config);
143
+ strict_1.default.deepEqual(body('/manifest.json').site, manifest.site);
144
+ strict_1.default.deepEqual(Object.keys(body('/manifest.json')).sort(), ['site', 'version'], 'builder.json is the config: one copy');
145
+ });
146
+ (0, node_test_1.describe)('a site\'s text files', () => {
147
+ const JS = 'console.log("a repeated line of a script")\n'.repeat(200);
148
+ const write = (name, content) => node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'web/dist', name), content);
149
+ const uploaded = (route) => { var _a; return (_a = received.find((item) => item.url === `/release-artifacts/a/r${route}`)) === null || _a === void 0 ? void 0 : _a.bytes; };
150
+ (0, node_test_1.it)('get brotli and gzip copies that decompress to the file, and the manifest says so', async () => {
151
+ await write('app.js', JS);
152
+ const manifest = await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
153
+ strict_1.default.equal((0, node_zlib_1.brotliDecompressSync)(uploaded('/encoded/br/web/dist/app.js')).toString(), JS);
154
+ strict_1.default.equal((0, node_zlib_1.gunzipSync)(uploaded('/encoded/gzip/web/dist/app.js')).toString(), JS);
155
+ strict_1.default.equal(uploaded('/site/web/dist/app.js').toString(), JS);
156
+ const entry = manifest.site.find((file) => file.path === 'web/dist/app.js');
157
+ strict_1.default.deepEqual(entry.encodings, { br: uploaded('/encoded/br/web/dist/app.js').length, gzip: uploaded('/encoded/gzip/web/dist/app.js').length });
158
+ strict_1.default.ok(entry.encodings.br < entry.encodings.gzip);
159
+ strict_1.default.equal(entry.hash, (0, node_crypto_1.createHash)('sha256').update(JS).digest('base64url'));
160
+ });
161
+ (0, node_test_1.it)('don\'t get them under 1 KiB, nor does what\'s already compressed', async () => {
162
+ await write('small.js', 'x'.repeat(1023));
163
+ await write('photo.png', Buffer.alloc(4096, 7));
164
+ const manifest = await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
165
+ strict_1.default.ok(!received.some((item) => item.url.includes('/encoded/')));
166
+ strict_1.default.ok(manifest.site.every((file) => !file.encodings));
167
+ });
168
+ (0, node_test_1.it)('keep only a copy that came out smaller', async () => {
169
+ var _a;
170
+ await write('random.json', Buffer.from(Array.from({ length: 2048 }, (_, index) => (index * 7919 + 13) % 251)).toString('latin1').repeat(1));
171
+ const random = await node_fs_1.promises.readFile(node_path_1.default.join(dir, 'web/dist/random.json'));
172
+ const manifest = await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
173
+ const entry = manifest.site.find((file) => file.path === 'web/dist/random.json');
174
+ for (const size of Object.values((_a = entry.encodings) !== null && _a !== void 0 ? _a : {}))
175
+ strict_1.default.ok(size < random.length);
176
+ });
177
+ (0, node_test_1.it)('go up with the same care: a refused copy leaves no manifest', async () => {
178
+ await write('app.js', JS);
179
+ answer = (target) => (target.includes('/encoded/') ? 403 : 204);
180
+ await strict_1.default.rejects((0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir), /403/);
181
+ strict_1.default.ok(!received.some((item) => item.url.endsWith('/manifest.json')));
182
+ });
183
+ });
184
+ (0, node_test_1.describe)('what a VM runs', () => {
185
+ /** The archive it uploaded, unpacked where a VM would. */
186
+ async function uploaded(app = config) {
187
+ await (0, workload_1.handOverToWorkload)(dir);
188
+ await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, app, dir);
189
+ const into = await node_fs_1.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'builder-unpacked-'));
190
+ await node_fs_1.promises.chmod(into, 0o755);
191
+ await (0, workload_1.handOverToWorkload)(into);
192
+ await (0, workload_1.unpackAsWorkload)(into, node_stream_1.Readable.from([received.find((item) => item.url.endsWith('/run.tar.zst')).bytes]));
193
+ return into;
194
+ }
195
+ const listed = async (root) => (await node_fs_1.promises.readdir(root, { recursive: true, withFileTypes: true }))
196
+ .filter((entry) => !entry.isDirectory())
197
+ .map((entry) => node_path_1.default.relative(root, node_path_1.default.join(entry.parentPath, entry.name)))
198
+ .sort();
199
+ (0, node_test_1.it)('carries the folder as it was built, dependencies and all, less caches and history', async () => {
200
+ const write = async (name, content = 'x') => {
201
+ await node_fs_1.promises.mkdir(node_path_1.default.dirname(node_path_1.default.join(dir, name)), { recursive: true });
202
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, name), content);
203
+ };
204
+ for (const name of [
205
+ 'api/node_modules/x/index.js', 'api/.venv/lib/a.py', 'api/__pycache__/a.pyc', 'api/.next/server.js', 'api/.env',
206
+ 'api/.next/cache/big', 'api/node_modules/.cache/big', 'api/.git/HEAD', 'api/.builder/logs/a.log', 'api/.turbo/a',
207
+ ])
208
+ await write(name);
209
+ const into = await uploaded();
210
+ strict_1.default.deepEqual(await listed(into), [
211
+ 'api/.env', 'api/.next/server.js', 'api/.venv/lib/a.py', 'api/__pycache__/a.pyc', 'api/bin/run',
212
+ 'api/node_modules/x/index.js', 'api/server.js',
213
+ ]);
214
+ strict_1.default.ok(!(await listed(into)).some((name) => name.startsWith('web/')), 'a static service\'s output is the site\'s');
215
+ await node_fs_1.promises.rm(into, { recursive: true, force: true });
216
+ });
217
+ (0, node_test_1.it)('keeps what can be run, and links as links, so a package manager\'s layout still works', async () => {
218
+ await node_fs_1.promises.mkdir(node_path_1.default.join(dir, 'api/node_modules/.pnpm/x'), { recursive: true });
219
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, 'api/node_modules/.pnpm/x/index.js'), 'dep');
220
+ await node_fs_1.promises.symlink('.pnpm/x', node_path_1.default.join(dir, 'api/node_modules/x'));
221
+ await node_fs_1.promises.link(node_path_1.default.join(dir, 'api/node_modules/.pnpm/x/index.js'), node_path_1.default.join(dir, 'api/hard.js'));
222
+ await node_fs_1.promises.symlink('/usr/bin/env', node_path_1.default.join(dir, 'api/outside'));
223
+ const into = await uploaded();
224
+ strict_1.default.notEqual((await node_fs_1.promises.stat(node_path_1.default.join(into, 'api/bin/run'))).mode & 0o100, 0);
225
+ strict_1.default.equal(await node_fs_1.promises.readlink(node_path_1.default.join(into, 'api/node_modules/x')), '.pnpm/x');
226
+ strict_1.default.equal(await node_fs_1.promises.readFile(node_path_1.default.join(into, 'api/node_modules/x/index.js'), 'utf8'), 'dep');
227
+ strict_1.default.equal(await node_fs_1.promises.readFile(node_path_1.default.join(into, 'api/hard.js'), 'utf8'), 'dep');
228
+ strict_1.default.equal(await node_fs_1.promises.readlink(node_path_1.default.join(into, 'api/outside')), '/usr/bin/env');
229
+ await node_fs_1.promises.rm(into, { recursive: true, force: true });
230
+ });
231
+ (0, node_test_1.it)('takes a file too big for the site, as it\'s only compressed together', async () => {
232
+ const big = await node_fs_1.promises.open(node_path_1.default.join(dir, 'api/engine.node'), 'w');
233
+ await big.truncate(65 * 1024 * 1024);
234
+ await big.close();
235
+ const into = await uploaded();
236
+ strict_1.default.equal((await node_fs_1.promises.stat(node_path_1.default.join(into, 'api/engine.node'))).size, 65 * 1024 * 1024);
237
+ strict_1.default.ok(received.find((item) => item.url.endsWith('/run.tar.zst')).bytes.length < 1024 * 1024);
238
+ await node_fs_1.promises.rm(into, { recursive: true, force: true });
239
+ });
240
+ (0, node_test_1.it)('tries again with the same archive when the service stumbles', async () => {
241
+ answer = (target, attempt) => (target.endsWith('/run.tar.zst') && attempt < 3 ? 503 : 204);
242
+ const into = await uploaded();
243
+ strict_1.default.equal(attempts.get('/release-artifacts/a/r/run.tar.zst'), 3);
244
+ strict_1.default.equal(await node_fs_1.promises.readFile(node_path_1.default.join(into, 'api/server.js'), 'utf8'), 'server');
245
+ await node_fs_1.promises.rm(into, { recursive: true, force: true });
246
+ });
247
+ (0, node_test_1.it)('leaves no manifest when it can\'t be stored', async () => {
248
+ answer = (target) => (target.endsWith('/run.tar.zst') ? 400 : 204);
249
+ await strict_1.default.rejects((0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir), /run\.tar\.zst failed: 400/);
250
+ strict_1.default.equal(attempts.get('/release-artifacts/a/r/run.tar.zst'), 1);
251
+ strict_1.default.ok(!received.some((item) => item.url.endsWith('/manifest.json')));
252
+ });
253
+ (0, node_test_1.it)('fails the build when the folder it needs isn\'t there', async () => {
254
+ const missing = { services: { api: { root: 'gone', startCommand: 'node server.js' } } };
255
+ await strict_1.default.rejects((0, release_artifacts_1.uploadRelease)({ url, token: 't' }, missing, dir), /tar failed/);
256
+ strict_1.default.ok(!received.some((item) => item.url.endsWith('/manifest.json')));
257
+ });
258
+ (0, node_test_1.it)('has none for an app that\'s only a site', async () => {
259
+ await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, { services: { web: { root: 'web', outputDirectory: 'dist' } } }, dir);
260
+ strict_1.default.ok(!received.some((item) => item.url.endsWith('/run.tar.zst')));
261
+ });
262
+ });
263
+ (0, node_test_1.it)('sends the logs with the output, before the manifest closes the release', async () => {
264
+ await node_fs_1.promises.mkdir(node_path_1.default.join(dir, '.builder/logs'), { recursive: true });
265
+ await node_fs_1.promises.writeFile(node_path_1.default.join(dir, '.builder/logs/web.build.log'), 'built');
266
+ await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
267
+ const order = received.map((item) => item.url);
268
+ strict_1.default.ok(order.includes('/release-artifacts/a/r/logs/web.build.log'));
269
+ strict_1.default.equal(order[order.length - 1], '/release-artifacts/a/r/manifest.json');
270
+ });
271
+ (0, node_test_1.it)('writes no manifest when a file can\'t be stored', async () => {
272
+ answer = (target) => (target.includes('/site/') ? 403 : 204);
273
+ await strict_1.default.rejects((0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir), /403/);
274
+ strict_1.default.ok(!received.some((item) => item.url.endsWith('/manifest.json')));
275
+ // Refused: asking again gets the same answer.
276
+ strict_1.default.equal(attempts.get('/release-artifacts/a/r/site/web/dist/index.html'), 1);
277
+ });
278
+ (0, node_test_1.it)('tries again when the service stumbles', async () => {
279
+ answer = (target, attempt) => (target.includes('/site/') && attempt < 3 ? 503 : 204);
280
+ await (0, release_artifacts_1.uploadRelease)({ url, token: 't' }, config, dir);
281
+ strict_1.default.equal(attempts.get('/release-artifacts/a/r/site/web/dist/index.html'), 3);
282
+ });
283
+ (0, node_test_1.it)('sends logs under their own route', async () => {
284
+ const logs = node_path_1.default.join(dir, 'logs');
285
+ await node_fs_1.promises.mkdir(logs);
286
+ await node_fs_1.promises.writeFile(node_path_1.default.join(logs, 'web.build.log'), 'built');
287
+ await (0, release_artifacts_1.uploadReleaseLogs)({ url, token: 't' }, logs);
288
+ strict_1.default.deepEqual(received.map((item) => [item.url, item.body]), [['/release-artifacts/a/r/logs/web.build.log', 'built']]);
289
+ });
290
+ (0, node_test_1.it)('has nothing to send when there are no logs', async () => {
291
+ await (0, release_artifacts_1.uploadReleaseLogs)({ url, token: 't' }, node_path_1.default.join(dir, 'none'));
292
+ strict_1.default.deepEqual(received, []);
293
+ });
294
+ });
295
+ //# sourceMappingURL=release-artifacts.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-artifacts.test.js","sourceRoot":"","sources":["../../src/app/release-artifacts.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface RoutePattern {
2
+ source: string;
3
+ regexp: RegExp;
4
+ /** Each capture group's name: a `:name`, or the position of an unnamed `(…)` group. */
5
+ keys: Array<string | number>;
6
+ /** It can't take more than a number of steps proportional to the path, so it needs no time limit. */
7
+ linear: boolean;
8
+ }
9
+ /** Compiles a `source` pattern; throws an Error saying what is wrong with an invalid or dangerous one. */
10
+ export declare function compileRoute(source: string): RoutePattern;
11
+ /** What is wrong with `source`, in a sentence; undefined when it's fine. */
12
+ export declare function routeSourceProblem(source: string): string | undefined;
13
+ /** Whether `source` compiles. */
14
+ export declare function isValidRouteSource(source: string): boolean;
15
+ /** Whether `source` will run under the time limit. */
16
+ export declare function runsOnTimeLimit(source: string): boolean;
17
+ /** Tests only. */
18
+ export declare function forgetRouteStrikes(): void;
19
+ /** The pattern's values for `pathname` (by key), or undefined when it doesn't match. */
20
+ export declare function matchRoute(pattern: RoutePattern, pathname: string): Map<string | number, string> | undefined;
21
+ /** A rewrite destination with `:name` and `$1`-style references to a match filled in. */
22
+ export declare function fillDestination(destination: string, values: Map<string | number, string>): string;
23
+ //# sourceMappingURL=route-pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-pattern.d.ts","sourceRoot":"","sources":["../../src/app/route-pattern.ts"],"names":[],"mappings":"AAyCA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,uFAAuF;IACvF,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IAC5B,qGAAqG;IACrG,MAAM,EAAE,OAAO,CAAA;CAChB;AA6JD,0GAA0G;AAC1G,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA0BzD;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOrE;AAED,iCAAiC;AACjC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEvD;AA0BD,kBAAkB;AAClB,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAiBD,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAM5G;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAKjG"}