@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.
- package/README.md +14 -7
- package/dist/agent/definition.test.js +8 -3
- package/dist/agent/definition.test.js.map +1 -1
- package/dist/agent/profiles/coding.d.ts +1 -1
- package/dist/agent/profiles/coding.d.ts.map +1 -1
- package/dist/agent/profiles/coding.js +21 -4
- package/dist/agent/profiles/coding.js.map +1 -1
- package/dist/agent/profiles/index.js +1 -1
- package/dist/agent/profiles/index.js.map +1 -1
- package/dist/agent/profiles/research.d.ts.map +1 -1
- package/dist/agent/profiles/research.js +2 -2
- package/dist/agent/profiles/research.js.map +1 -1
- package/dist/agent/turn-history.d.ts.map +1 -1
- package/dist/agent/turn-history.js +7 -1
- package/dist/agent/turn-history.js.map +1 -1
- package/dist/agent/turn-runner.d.ts +8 -0
- package/dist/agent/turn-runner.d.ts.map +1 -1
- package/dist/agent/turn-runner.js +35 -10
- package/dist/agent/turn-runner.js.map +1 -1
- package/dist/app/app-host.d.ts +57 -0
- package/dist/app/app-host.d.ts.map +1 -0
- package/dist/app/app-host.js +252 -0
- package/dist/app/app-host.js.map +1 -0
- package/dist/app/app-host.test.d.ts +2 -0
- package/dist/app/app-host.test.d.ts.map +1 -0
- package/dist/app/app-host.test.js +639 -0
- package/dist/app/app-host.test.js.map +1 -0
- package/dist/app/config.d.ts +196 -0
- package/dist/app/config.d.ts.map +1 -0
- package/dist/app/config.js +362 -0
- package/dist/app/config.js.map +1 -0
- package/dist/app/config.test.d.ts +2 -0
- package/dist/app/config.test.d.ts.map +1 -0
- package/dist/app/config.test.js +224 -0
- package/dist/app/config.test.js.map +1 -0
- package/dist/app/detect.d.ts +68 -0
- package/dist/app/detect.d.ts.map +1 -0
- package/dist/app/detect.js +449 -0
- package/dist/app/detect.js.map +1 -0
- package/dist/app/detect.test.d.ts +2 -0
- package/dist/app/detect.test.d.ts.map +1 -0
- package/dist/app/detect.test.js +267 -0
- package/dist/app/detect.test.js.map +1 -0
- package/dist/app/env.d.ts +5 -0
- package/dist/app/env.d.ts.map +1 -0
- package/dist/app/env.js +22 -0
- package/dist/app/env.js.map +1 -0
- package/dist/app/functions-cli.d.ts +3 -0
- package/dist/app/functions-cli.d.ts.map +1 -0
- package/dist/app/functions-cli.js +27 -0
- package/dist/app/functions-cli.js.map +1 -0
- package/dist/app/functions-host.d.ts +15 -0
- package/dist/app/functions-host.d.ts.map +1 -0
- package/dist/app/functions-host.js +276 -0
- package/dist/app/functions-host.js.map +1 -0
- package/dist/app/functions-host.test.d.ts +2 -0
- package/dist/app/functions-host.test.d.ts.map +1 -0
- package/dist/app/functions-host.test.js +117 -0
- package/dist/app/functions-host.test.js.map +1 -0
- package/dist/app/functions-routes.d.ts +23 -0
- package/dist/app/functions-routes.d.ts.map +1 -0
- package/dist/app/functions-routes.js +85 -0
- package/dist/app/functions-routes.js.map +1 -0
- package/dist/app/functions-routes.test.d.ts +2 -0
- package/dist/app/functions-routes.test.d.ts.map +1 -0
- package/dist/app/functions-routes.test.js +40 -0
- package/dist/app/functions-routes.test.js.map +1 -0
- package/dist/app/manifest.d.ts +17 -0
- package/dist/app/manifest.d.ts.map +1 -0
- package/dist/app/manifest.js +64 -0
- package/dist/app/manifest.js.map +1 -0
- package/dist/app/manifest.test.d.ts +2 -0
- package/dist/app/manifest.test.d.ts.map +1 -0
- package/dist/app/manifest.test.js +173 -0
- package/dist/app/manifest.test.js.map +1 -0
- package/dist/app/release-artifacts.d.ts +39 -0
- package/dist/app/release-artifacts.d.ts.map +1 -0
- package/dist/app/release-artifacts.js +229 -0
- package/dist/app/release-artifacts.js.map +1 -0
- package/dist/app/release-artifacts.test.d.ts +2 -0
- package/dist/app/release-artifacts.test.d.ts.map +1 -0
- package/dist/app/release-artifacts.test.js +295 -0
- package/dist/app/release-artifacts.test.js.map +1 -0
- package/dist/app/route-pattern.d.ts +23 -0
- package/dist/app/route-pattern.d.ts.map +1 -0
- package/dist/app/route-pattern.js +339 -0
- package/dist/app/route-pattern.js.map +1 -0
- package/dist/app/route-pattern.test.d.ts +2 -0
- package/dist/app/route-pattern.test.d.ts.map +1 -0
- package/dist/app/route-pattern.test.js +187 -0
- package/dist/app/route-pattern.test.js.map +1 -0
- package/dist/app/rules.d.ts +61 -0
- package/dist/app/rules.d.ts.map +1 -0
- package/dist/app/rules.js +90 -0
- package/dist/app/rules.js.map +1 -0
- package/dist/app/rules.test.d.ts +2 -0
- package/dist/app/rules.test.d.ts.map +1 -0
- package/dist/app/rules.test.js +69 -0
- package/dist/app/rules.test.js.map +1 -0
- package/dist/app/runner.d.ts +109 -0
- package/dist/app/runner.d.ts.map +1 -0
- package/dist/app/runner.js +429 -0
- package/dist/app/runner.js.map +1 -0
- package/dist/app/site.d.ts +73 -0
- package/dist/app/site.d.ts.map +1 -0
- package/dist/app/site.js +161 -0
- package/dist/app/site.js.map +1 -0
- package/dist/app/site.test.d.ts +2 -0
- package/dist/app/site.test.d.ts.map +1 -0
- package/dist/app/site.test.js +291 -0
- package/dist/app/site.test.js.map +1 -0
- package/dist/app/static-server.d.ts +20 -0
- package/dist/app/static-server.d.ts.map +1 -0
- package/dist/app/static-server.js +145 -0
- package/dist/app/static-server.js.map +1 -0
- package/dist/persistence/conversation-store.d.ts +21 -0
- package/dist/persistence/conversation-store.d.ts.map +1 -0
- package/dist/persistence/conversation-store.js +59 -0
- package/dist/persistence/conversation-store.js.map +1 -0
- package/dist/persistence/conversation-store.test.d.ts +2 -0
- package/dist/persistence/conversation-store.test.d.ts.map +1 -0
- package/dist/persistence/conversation-store.test.js +98 -0
- package/dist/persistence/conversation-store.test.js.map +1 -0
- package/dist/persistence/git-sync.d.ts +14 -1
- package/dist/persistence/git-sync.d.ts.map +1 -1
- package/dist/persistence/git-sync.js +73 -17
- package/dist/persistence/git-sync.js.map +1 -1
- package/dist/persistence/git-sync.test.js +155 -6
- package/dist/persistence/git-sync.test.js.map +1 -1
- package/dist/persistence/snapshot-sync.d.ts +19 -2
- package/dist/persistence/snapshot-sync.d.ts.map +1 -1
- package/dist/persistence/snapshot-sync.js +194 -83
- package/dist/persistence/snapshot-sync.js.map +1 -1
- package/dist/persistence/snapshot-sync.test.js +145 -27
- package/dist/persistence/snapshot-sync.test.js.map +1 -1
- package/dist/persistence/workspace.d.ts +3 -0
- package/dist/persistence/workspace.d.ts.map +1 -1
- package/dist/persistence/workspace.js +1 -0
- package/dist/persistence/workspace.js.map +1 -1
- package/dist/research/extract-texts.d.ts.map +1 -1
- package/dist/research/extract-texts.js +6 -13
- package/dist/research/extract-texts.js.map +1 -1
- package/dist/research/filingramp/attachment-tools.d.ts.map +1 -1
- package/dist/research/filingramp/attachment-tools.js +7 -4
- package/dist/research/filingramp/attachment-tools.js.map +1 -1
- package/dist/research/filingramp/shared.d.ts.map +1 -1
- package/dist/research/filingramp/shared.js +5 -5
- package/dist/research/filingramp/shared.js.map +1 -1
- package/dist/runtime/app-mode.d.ts +10 -0
- package/dist/runtime/app-mode.d.ts.map +1 -0
- package/dist/runtime/app-mode.js +172 -0
- package/dist/runtime/app-mode.js.map +1 -0
- package/dist/runtime/app-mode.test.d.ts +2 -0
- package/dist/runtime/app-mode.test.d.ts.map +1 -0
- package/dist/runtime/app-mode.test.js +130 -0
- package/dist/runtime/app-mode.test.js.map +1 -0
- package/dist/runtime/app-rehearsal.d.ts +2 -0
- package/dist/runtime/app-rehearsal.d.ts.map +1 -0
- package/dist/runtime/app-rehearsal.js +56 -0
- package/dist/runtime/app-rehearsal.js.map +1 -0
- package/dist/runtime/build-mode.d.ts +12 -0
- package/dist/runtime/build-mode.d.ts.map +1 -0
- package/dist/runtime/build-mode.js +116 -0
- package/dist/runtime/build-mode.js.map +1 -0
- package/dist/runtime/build-mode.test.d.ts +2 -0
- package/dist/runtime/build-mode.test.d.ts.map +1 -0
- package/dist/runtime/build-mode.test.js +121 -0
- package/dist/runtime/build-mode.test.js.map +1 -0
- package/dist/runtime/cli.js +7 -2
- package/dist/runtime/cli.js.map +1 -1
- package/dist/runtime/config.d.ts +4 -0
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +13 -2
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/guest-server.d.ts +3 -0
- package/dist/runtime/guest-server.d.ts.map +1 -0
- package/dist/runtime/{lambda-microvm.js → guest-server.js} +49 -18
- package/dist/runtime/guest-server.js.map +1 -0
- package/dist/runtime/image-hooks.d.ts +5 -0
- package/dist/runtime/image-hooks.d.ts.map +1 -0
- package/dist/runtime/image-hooks.js +68 -0
- package/dist/runtime/image-hooks.js.map +1 -0
- package/dist/runtime/image-hooks.test.d.ts +2 -0
- package/dist/runtime/image-hooks.test.d.ts.map +1 -0
- package/dist/runtime/image-hooks.test.js +74 -0
- package/dist/runtime/image-hooks.test.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -3
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +53 -35
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/listening-ports.d.ts +13 -0
- package/dist/runtime/listening-ports.d.ts.map +1 -0
- package/dist/runtime/listening-ports.js +78 -0
- package/dist/runtime/listening-ports.js.map +1 -0
- package/dist/runtime/listening-ports.test.d.ts +2 -0
- package/dist/runtime/listening-ports.test.d.ts.map +1 -0
- package/dist/runtime/listening-ports.test.js +39 -0
- package/dist/runtime/listening-ports.test.js.map +1 -0
- package/dist/runtime/preview-proxy.d.ts +56 -0
- package/dist/runtime/preview-proxy.d.ts.map +1 -0
- package/dist/runtime/preview-proxy.js +302 -0
- package/dist/runtime/preview-proxy.js.map +1 -0
- package/dist/runtime/preview-proxy.test.d.ts +2 -0
- package/dist/runtime/preview-proxy.test.d.ts.map +1 -0
- package/dist/runtime/preview-proxy.test.js +122 -0
- package/dist/runtime/preview-proxy.test.js.map +1 -0
- package/dist/runtime/session-mode.d.ts +3 -0
- package/dist/runtime/session-mode.d.ts.map +1 -0
- package/dist/runtime/session-mode.js +60 -0
- package/dist/runtime/session-mode.js.map +1 -0
- package/dist/runtime/workload.d.ts +44 -0
- package/dist/runtime/workload.d.ts.map +1 -0
- package/dist/runtime/workload.js +222 -0
- package/dist/runtime/workload.js.map +1 -0
- package/dist/runtime/workload.test.d.ts +2 -0
- package/dist/runtime/workload.test.d.ts.map +1 -0
- package/dist/runtime/workload.test.js +235 -0
- package/dist/runtime/workload.test.js.map +1 -0
- package/dist/session/conversation.d.ts +3 -2
- package/dist/session/conversation.d.ts.map +1 -1
- package/dist/session/conversation.js +11 -7
- package/dist/session/conversation.js.map +1 -1
- package/dist/session/conversation.test.js +2 -3
- package/dist/session/conversation.test.js.map +1 -1
- package/dist/session/runtime.d.ts +16 -3
- package/dist/session/runtime.d.ts.map +1 -1
- package/dist/session/runtime.js +80 -13
- package/dist/session/runtime.js.map +1 -1
- package/dist/session/runtime.test.js +18 -7
- package/dist/session/runtime.test.js.map +1 -1
- package/dist/session/tools.d.ts.map +1 -1
- package/dist/session/tools.js +3 -3
- package/dist/session/tools.js.map +1 -1
- package/dist/task/loop.d.ts.map +1 -1
- package/dist/task/loop.js +6 -4
- package/dist/task/loop.js.map +1 -1
- package/dist/tools/exec-tools.d.ts +12 -0
- package/dist/tools/exec-tools.d.ts.map +1 -1
- package/dist/tools/exec-tools.js +46 -3
- package/dist/tools/exec-tools.js.map +1 -1
- package/dist/tools/exec-tools.test.d.ts +2 -0
- package/dist/tools/exec-tools.test.d.ts.map +1 -0
- package/dist/tools/exec-tools.test.js +48 -0
- package/dist/tools/exec-tools.test.js.map +1 -0
- package/dist/tools/fs-tools.d.ts.map +1 -1
- package/dist/tools/fs-tools.js +5 -5
- package/dist/tools/fs-tools.js.map +1 -1
- package/dist/transport/link.d.ts.map +1 -1
- package/dist/transport/link.js +16 -5
- package/dist/transport/link.js.map +1 -1
- package/dist/transport/link.test.js +24 -0
- package/dist/transport/link.test.js.map +1 -1
- package/dist/transport/protocol.d.ts +190 -3
- package/dist/transport/protocol.d.ts.map +1 -1
- package/dist/transport/protocol.js +147 -7
- package/dist/transport/protocol.js.map +1 -1
- package/dist/transport/protocol.test.js +41 -0
- package/dist/transport/protocol.test.js.map +1 -1
- package/dist/workspace-sync/eligibility.d.ts +14 -0
- package/dist/workspace-sync/eligibility.d.ts.map +1 -0
- package/dist/workspace-sync/eligibility.js +53 -0
- package/dist/workspace-sync/eligibility.js.map +1 -0
- package/dist/workspace-sync/merge.d.ts +15 -0
- package/dist/workspace-sync/merge.d.ts.map +1 -0
- package/dist/workspace-sync/merge.js +66 -0
- package/dist/workspace-sync/merge.js.map +1 -0
- package/dist/workspace-sync/merge.test.d.ts +2 -0
- package/dist/workspace-sync/merge.test.d.ts.map +1 -0
- package/dist/workspace-sync/merge.test.js +28 -0
- package/dist/workspace-sync/merge.test.js.map +1 -0
- package/dist/workspace-sync/workspace-sync.d.ts +48 -0
- package/dist/workspace-sync/workspace-sync.d.ts.map +1 -0
- package/dist/workspace-sync/workspace-sync.js +308 -0
- package/dist/workspace-sync/workspace-sync.js.map +1 -0
- package/dist/workspace-sync/workspace-sync.test.d.ts +2 -0
- package/dist/workspace-sync/workspace-sync.test.d.ts.map +1 -0
- package/dist/workspace-sync/workspace-sync.test.js +111 -0
- package/dist/workspace-sync/workspace-sync.test.js.map +1 -0
- package/dist/workspace-sync/write-drafts.d.ts +24 -0
- package/dist/workspace-sync/write-drafts.d.ts.map +1 -0
- package/dist/workspace-sync/write-drafts.js +87 -0
- package/dist/workspace-sync/write-drafts.js.map +1 -0
- package/dist/workspace-sync/write-drafts.test.d.ts +2 -0
- package/dist/workspace-sync/write-drafts.test.d.ts.map +1 -0
- package/dist/workspace-sync/write-drafts.test.js +36 -0
- package/dist/workspace-sync/write-drafts.test.js.map +1 -0
- package/package.json +12 -2
- package/dist/runtime/lambda-microvm.d.ts +0 -3
- package/dist/runtime/lambda-microvm.d.ts.map +0 -1
- 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 @@
|
|
|
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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"}
|