@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.
- 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/build-log.d.ts +14 -0
- package/dist/app/build-log.d.ts.map +1 -0
- package/dist/app/build-log.js +173 -0
- package/dist/app/build-log.js.map +1 -0
- package/dist/app/build-log.test.d.ts +2 -0
- package/dist/app/build-log.test.d.ts.map +1 -0
- package/dist/app/build-log.test.js +255 -0
- package/dist/app/build-log.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 +43 -0
- package/dist/app/release-artifacts.d.ts.map +1 -0
- package/dist/app/release-artifacts.js +239 -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 +326 -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 +18 -0
- package/dist/runtime/build-mode.d.ts.map +1 -0
- package/dist/runtime/build-mode.js +108 -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 +159 -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 +215 -3
- package/dist/transport/protocol.d.ts.map +1 -1
- package/dist/transport/protocol.js +163 -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,196 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type AppFileReader, type Framework } from './detect';
|
|
3
|
+
import type { ReleaseManifest } from './release-artifacts';
|
|
4
|
+
export { detectApp, detectProject, fileListReader, FRAMEWORKS, type AppFileReader, type AppSettings, type DetectedManifest, type DetectedService, type Framework } from './detect';
|
|
5
|
+
/** Where the app runs: a session VM's dev servers, or a deployment's build. */
|
|
6
|
+
export type AppMode = 'dev' | 'production';
|
|
7
|
+
declare const service: z.ZodObject<{
|
|
8
|
+
root: z.ZodOptional<z.ZodString>;
|
|
9
|
+
framework: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
10
|
+
nextjs: "nextjs";
|
|
11
|
+
nuxtjs: "nuxtjs";
|
|
12
|
+
sveltekit: "sveltekit";
|
|
13
|
+
astro: "astro";
|
|
14
|
+
"create-react-app": "create-react-app";
|
|
15
|
+
vite: "vite";
|
|
16
|
+
nestjs: "nestjs";
|
|
17
|
+
express: "express";
|
|
18
|
+
fastify: "fastify";
|
|
19
|
+
hono: "hono";
|
|
20
|
+
koa: "koa";
|
|
21
|
+
fastapi: "fastapi";
|
|
22
|
+
flask: "flask";
|
|
23
|
+
python: "python";
|
|
24
|
+
}>>>;
|
|
25
|
+
installCommand: z.ZodOptional<z.ZodString>;
|
|
26
|
+
devCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
27
|
+
buildCommand: z.ZodOptional<z.ZodString>;
|
|
28
|
+
startCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
29
|
+
outputDirectory: z.ZodOptional<z.ZodString>;
|
|
30
|
+
functions: z.ZodOptional<z.ZodObject<{
|
|
31
|
+
directory: z.ZodString;
|
|
32
|
+
path: z.ZodOptional<z.ZodString>;
|
|
33
|
+
}, z.core.$strict>>;
|
|
34
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
35
|
+
rewrites: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
36
|
+
source: z.ZodString;
|
|
37
|
+
destination: z.ZodString;
|
|
38
|
+
}, z.core.$strict>>>;
|
|
39
|
+
headers: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
40
|
+
source: z.ZodString;
|
|
41
|
+
headers: z.ZodArray<z.ZodObject<{
|
|
42
|
+
key: z.ZodString;
|
|
43
|
+
value: z.ZodString;
|
|
44
|
+
}, z.core.$strict>>;
|
|
45
|
+
}, z.core.$strict>>>;
|
|
46
|
+
redirects: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
47
|
+
source: z.ZodString;
|
|
48
|
+
destination: z.ZodString;
|
|
49
|
+
permanent: z.ZodOptional<z.ZodBoolean>;
|
|
50
|
+
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
51
|
+
}, z.core.$strict>>>;
|
|
52
|
+
cleanUrls: z.ZodOptional<z.ZodBoolean>;
|
|
53
|
+
trailingSlash: z.ZodOptional<z.ZodBoolean>;
|
|
54
|
+
}, z.core.$strict>;
|
|
55
|
+
declare const daemon: z.ZodObject<{
|
|
56
|
+
root: z.ZodOptional<z.ZodString>;
|
|
57
|
+
installCommand: z.ZodOptional<z.ZodString>;
|
|
58
|
+
command: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
|
|
59
|
+
devCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
60
|
+
}, z.core.$strict>;
|
|
61
|
+
export declare const appConfigSchema: z.ZodObject<{
|
|
62
|
+
$schema: z.ZodOptional<z.ZodString>;
|
|
63
|
+
$generated: z.ZodOptional<z.ZodString>;
|
|
64
|
+
services: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
65
|
+
root: z.ZodOptional<z.ZodString>;
|
|
66
|
+
framework: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
67
|
+
nextjs: "nextjs";
|
|
68
|
+
nuxtjs: "nuxtjs";
|
|
69
|
+
sveltekit: "sveltekit";
|
|
70
|
+
astro: "astro";
|
|
71
|
+
"create-react-app": "create-react-app";
|
|
72
|
+
vite: "vite";
|
|
73
|
+
nestjs: "nestjs";
|
|
74
|
+
express: "express";
|
|
75
|
+
fastify: "fastify";
|
|
76
|
+
hono: "hono";
|
|
77
|
+
koa: "koa";
|
|
78
|
+
fastapi: "fastapi";
|
|
79
|
+
flask: "flask";
|
|
80
|
+
python: "python";
|
|
81
|
+
}>>>;
|
|
82
|
+
installCommand: z.ZodOptional<z.ZodString>;
|
|
83
|
+
devCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
84
|
+
buildCommand: z.ZodOptional<z.ZodString>;
|
|
85
|
+
startCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
86
|
+
outputDirectory: z.ZodOptional<z.ZodString>;
|
|
87
|
+
functions: z.ZodOptional<z.ZodObject<{
|
|
88
|
+
directory: z.ZodString;
|
|
89
|
+
path: z.ZodOptional<z.ZodString>;
|
|
90
|
+
}, z.core.$strict>>;
|
|
91
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
92
|
+
rewrites: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
93
|
+
source: z.ZodString;
|
|
94
|
+
destination: z.ZodString;
|
|
95
|
+
}, z.core.$strict>>>;
|
|
96
|
+
headers: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
97
|
+
source: z.ZodString;
|
|
98
|
+
headers: z.ZodArray<z.ZodObject<{
|
|
99
|
+
key: z.ZodString;
|
|
100
|
+
value: z.ZodString;
|
|
101
|
+
}, z.core.$strict>>;
|
|
102
|
+
}, z.core.$strict>>>;
|
|
103
|
+
redirects: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
104
|
+
source: z.ZodString;
|
|
105
|
+
destination: z.ZodString;
|
|
106
|
+
permanent: z.ZodOptional<z.ZodBoolean>;
|
|
107
|
+
statusCode: z.ZodOptional<z.ZodNumber>;
|
|
108
|
+
}, z.core.$strict>>>;
|
|
109
|
+
cleanUrls: z.ZodOptional<z.ZodBoolean>;
|
|
110
|
+
trailingSlash: z.ZodOptional<z.ZodBoolean>;
|
|
111
|
+
}, z.core.$strict>>>;
|
|
112
|
+
rewrites: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
113
|
+
source: z.ZodString;
|
|
114
|
+
destination: z.ZodObject<{
|
|
115
|
+
service: z.ZodString;
|
|
116
|
+
}, z.core.$strict>;
|
|
117
|
+
}, z.core.$strict>>>;
|
|
118
|
+
daemons: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
119
|
+
root: z.ZodOptional<z.ZodString>;
|
|
120
|
+
installCommand: z.ZodOptional<z.ZodString>;
|
|
121
|
+
command: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
|
|
122
|
+
devCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
123
|
+
}, z.core.$strict>>>;
|
|
124
|
+
}, z.core.$strict>;
|
|
125
|
+
/**
|
|
126
|
+
* builder.json's JSON Schema, for editors (what its `$schema` points at; the api serves it). The
|
|
127
|
+
* same rules as parseAppManifest, except those only code can check: paths that leave the app,
|
|
128
|
+
* reserved ports, rewrites naming a service that isn't there. parseAppManifest still has the last word.
|
|
129
|
+
*/
|
|
130
|
+
export declare function appConfigJsonSchema(): Record<string, unknown>;
|
|
131
|
+
/** builder.json as written. */
|
|
132
|
+
export type AppManifest = z.infer<typeof appConfigSchema>;
|
|
133
|
+
export type AppServiceConfig = Omit<z.infer<typeof service>, 'functions'>;
|
|
134
|
+
export type AppDaemonConfig = z.infer<typeof daemon>;
|
|
135
|
+
export type AppCommand = string | string[];
|
|
136
|
+
/** What the runner runs: builder.json with each service's framework preset and functions filled in. */
|
|
137
|
+
export interface AppConfig {
|
|
138
|
+
services: Record<string, AppServiceConfig>;
|
|
139
|
+
rewrites?: Array<{
|
|
140
|
+
source: string;
|
|
141
|
+
destination: {
|
|
142
|
+
service: string;
|
|
143
|
+
};
|
|
144
|
+
}>;
|
|
145
|
+
daemons?: Record<string, AppDaemonConfig>;
|
|
146
|
+
}
|
|
147
|
+
/** The command a service runs in `mode`; undefined for a static one. */
|
|
148
|
+
export declare function serviceCommand(service: AppServiceConfig, mode: AppMode): AppCommand | undefined;
|
|
149
|
+
export declare function daemonCommand(daemon: AppDaemonConfig, mode: AppMode): AppCommand;
|
|
150
|
+
/** Whether the app runs any process in `mode` (a static-only one is served without one). */
|
|
151
|
+
export declare function appRunsProcesses(config: AppConfig, mode: AppMode): boolean;
|
|
152
|
+
/** What keeps an app from running in `mode`: a deployed service needs a start command or built output. */
|
|
153
|
+
export declare function appConfigProblems(config: AppConfig, mode: AppMode): string[];
|
|
154
|
+
export type AppManifestResult = {
|
|
155
|
+
ok: true;
|
|
156
|
+
manifest: AppManifest;
|
|
157
|
+
} | {
|
|
158
|
+
ok: false;
|
|
159
|
+
error: string;
|
|
160
|
+
};
|
|
161
|
+
/** Parses builder.json text, with every problem in one readable line. */
|
|
162
|
+
export declare function parseAppManifest(text: string): AppManifestResult;
|
|
163
|
+
/** A finished release's manifest, or undefined when it can't be one. */
|
|
164
|
+
export declare function parseReleaseManifest(text: string): ReleaseManifest | undefined;
|
|
165
|
+
/**
|
|
166
|
+
* A finished release's builder.json, or undefined when it can't be used. The build that uploaded it
|
|
167
|
+
* ran the app's own code, so it is read like any other, patterns and paths included.
|
|
168
|
+
*/
|
|
169
|
+
export declare function parseReleaseConfig(text: string): AppConfig | undefined;
|
|
170
|
+
export type AppResolution = {
|
|
171
|
+
ok: true;
|
|
172
|
+
config: AppConfig;
|
|
173
|
+
/** The framework its first service to name one runs as; null for none. */
|
|
174
|
+
framework: Framework | null;
|
|
175
|
+
/** Whether builder.json said how it runs, or it was only detected. */
|
|
176
|
+
source: 'detected' | 'builder.json';
|
|
177
|
+
} | {
|
|
178
|
+
ok: false;
|
|
179
|
+
error: string;
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* The app as the reader's builder.json says, with no looking at anything else unless a service
|
|
183
|
+
* names a framework: undefined when there is no file, not ok when it is invalid or can't run in `mode`.
|
|
184
|
+
*/
|
|
185
|
+
export declare function configuredApp(reader: AppFileReader, mode: AppMode): Promise<AppResolution | undefined>;
|
|
186
|
+
/**
|
|
187
|
+
* The app in the reader's directory: as its builder.json says, or what is detected when it has
|
|
188
|
+
* none (a deployment of a git tree nothing has written one for). Undefined when there is neither.
|
|
189
|
+
*/
|
|
190
|
+
export declare function resolveApp(reader: AppFileReader, mode: AppMode): Promise<AppResolution | undefined>;
|
|
191
|
+
export { appSite, resolveSitePath, siteLocationOf, siteRunsProcess, type AppSite, type SiteAnswer, type SiteLocation } from './site';
|
|
192
|
+
export { siteContentType } from './static-server';
|
|
193
|
+
export type { ReleaseManifest } from './release-artifacts';
|
|
194
|
+
/** Reads an app's files from its directory on disk. */
|
|
195
|
+
export declare function directoryReader(dir: string): AppFileReader;
|
|
196
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/app/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,362 @@
|
|
|
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
|
+
exports.siteContentType = exports.siteRunsProcess = exports.siteLocationOf = exports.resolveSitePath = exports.appSite = exports.appConfigSchema = exports.FRAMEWORKS = exports.fileListReader = exports.detectProject = exports.detectApp = void 0;
|
|
7
|
+
exports.appConfigJsonSchema = appConfigJsonSchema;
|
|
8
|
+
exports.serviceCommand = serviceCommand;
|
|
9
|
+
exports.daemonCommand = daemonCommand;
|
|
10
|
+
exports.appRunsProcesses = appRunsProcesses;
|
|
11
|
+
exports.appConfigProblems = appConfigProblems;
|
|
12
|
+
exports.parseAppManifest = parseAppManifest;
|
|
13
|
+
exports.parseReleaseManifest = parseReleaseManifest;
|
|
14
|
+
exports.parseReleaseConfig = parseReleaseConfig;
|
|
15
|
+
exports.configuredApp = configuredApp;
|
|
16
|
+
exports.resolveApp = resolveApp;
|
|
17
|
+
exports.directoryReader = directoryReader;
|
|
18
|
+
// builder.json: how an app runs, in the shape of vercel.json's services — `services`, `rewrites` that
|
|
19
|
+
// pick one by path (a static service that has no such file passes the request to the next match, as
|
|
20
|
+
// Vercel's filesystem comes before its routes), and `daemons` that run with no port. With no file the
|
|
21
|
+
// app is detected (detect.ts), and a session VM writes the result into one (manifest.ts); once there
|
|
22
|
+
// is a file it alone says what runs and where, whatever folders the app has. A service's named
|
|
23
|
+
// `framework` supplies what it leaves out, and nothing else is guessed. Dev commands run in the session
|
|
24
|
+
// VM; build and start commands in a deployment. Imported by the api as `@multiplayer-app/agent/app-config`.
|
|
25
|
+
const node_fs_1 = require("node:fs");
|
|
26
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
27
|
+
const zod_1 = require("zod");
|
|
28
|
+
const workload_1 = require("../runtime/workload");
|
|
29
|
+
const protocol_1 = require("../transport/protocol");
|
|
30
|
+
const detect_1 = require("./detect");
|
|
31
|
+
const route_pattern_1 = require("./route-pattern");
|
|
32
|
+
var detect_2 = require("./detect");
|
|
33
|
+
Object.defineProperty(exports, "detectApp", { enumerable: true, get: function () { return detect_2.detectApp; } });
|
|
34
|
+
Object.defineProperty(exports, "detectProject", { enumerable: true, get: function () { return detect_2.detectProject; } });
|
|
35
|
+
Object.defineProperty(exports, "fileListReader", { enumerable: true, get: function () { return detect_2.fileListReader; } });
|
|
36
|
+
Object.defineProperty(exports, "FRAMEWORKS", { enumerable: true, get: function () { return detect_2.FRAMEWORKS; } });
|
|
37
|
+
/** The functions host (functions-host.ts), which the agent package installs on PATH. */
|
|
38
|
+
const FUNCTIONS_BIN = 'builder-functions';
|
|
39
|
+
const NAME = /^[A-Za-z0-9][A-Za-z0-9_-]{0,39}$/;
|
|
40
|
+
/** A workspace-relative directory that stays inside it. */
|
|
41
|
+
function isInsideDir(value) {
|
|
42
|
+
if (!value || value.includes('\\') || value.includes('\0') || node_path_1.default.posix.isAbsolute(value))
|
|
43
|
+
return false;
|
|
44
|
+
return !node_path_1.default.posix.normalize(value).split('/').includes('..');
|
|
45
|
+
}
|
|
46
|
+
const directory = zod_1.z.string().max(500).refine(isInsideDir, 'must be a relative path inside the app');
|
|
47
|
+
const shellCommand = zod_1.z.string().trim().min(1).max(4000);
|
|
48
|
+
/** A shell command line, or an argv run without a shell (as vercel.json's daemon `command`). */
|
|
49
|
+
const command = zod_1.z.union([shellCommand, zod_1.z.array(zod_1.z.string().min(1).max(4000)).min(1).max(64)]);
|
|
50
|
+
const source = zod_1.z
|
|
51
|
+
.string()
|
|
52
|
+
.min(1)
|
|
53
|
+
.max(500)
|
|
54
|
+
.superRefine((value, context) => {
|
|
55
|
+
const problem = (0, route_pattern_1.routeSourceProblem)(value);
|
|
56
|
+
if (problem)
|
|
57
|
+
context.addIssue({ code: 'custom', message: `is not a usable path pattern: ${problem}` });
|
|
58
|
+
});
|
|
59
|
+
/** Each can use up its time limit on a request, so a file can't hold many. Plain paths and wildcards don't count. */
|
|
60
|
+
const MAX_TIME_LIMITED_PATTERNS = 32;
|
|
61
|
+
const port = zod_1.z
|
|
62
|
+
.number()
|
|
63
|
+
.int()
|
|
64
|
+
.min(1)
|
|
65
|
+
.max(65535)
|
|
66
|
+
.refine((value) => !protocol_1.GUEST_RESERVED_PORTS.includes(value), `is reserved by the VM (${protocol_1.GUEST_RESERVED_PORTS.join(', ')})`);
|
|
67
|
+
const headerRule = zod_1.z.strictObject({
|
|
68
|
+
source,
|
|
69
|
+
headers: zod_1.z.array(zod_1.z.strictObject({ key: zod_1.z.string().min(1).max(200), value: zod_1.z.string().max(4000) })).min(1).max(50),
|
|
70
|
+
});
|
|
71
|
+
const pathRewrite = zod_1.z.strictObject({ source, destination: zod_1.z.string().regex(/^\//, 'must be a path').max(500) });
|
|
72
|
+
const REDIRECT_STATUSES = [301, 302, 303, 307, 308];
|
|
73
|
+
const redirect = zod_1.z
|
|
74
|
+
.strictObject({
|
|
75
|
+
source,
|
|
76
|
+
destination: zod_1.z.string().max(2000).regex(/^(\/|https?:\/\/)/i, 'must be a path or an http(s) URL'),
|
|
77
|
+
permanent: zod_1.z.boolean().optional(),
|
|
78
|
+
statusCode: zod_1.z.number().refine((status) => REDIRECT_STATUSES.includes(status), `must be one of ${REDIRECT_STATUSES.join(', ')}`).optional(),
|
|
79
|
+
})
|
|
80
|
+
.refine((rule) => rule.permanent === undefined || rule.statusCode === undefined, 'takes permanent or statusCode, not both');
|
|
81
|
+
const serviceRewrite = zod_1.z.strictObject({
|
|
82
|
+
source: source.describe('The request path: /api/(.*), /blog/:slug.'),
|
|
83
|
+
destination: zod_1.z.strictObject({ service: zod_1.z.string().min(1).describe('A name in "services".') }),
|
|
84
|
+
});
|
|
85
|
+
const functionsConfig = zod_1.z.strictObject({
|
|
86
|
+
directory: directory.describe('The folder of function files, relative to root.'),
|
|
87
|
+
path: zod_1.z.string().max(200).regex(/^\/[A-Za-z0-9/_.-]*$/, 'must be a URL path such as /api').optional().describe("The URL they answer below. Default: the folder's own path."),
|
|
88
|
+
});
|
|
89
|
+
const service = zod_1.z.strictObject({
|
|
90
|
+
root: directory.optional().describe("The service's folder, relative to the workspace. Default: the workspace."),
|
|
91
|
+
framework: zod_1.z.enum(detect_1.FRAMEWORKS).nullable().optional().describe('A framework whose preset supplies the commands this service leaves out; null for none.'),
|
|
92
|
+
installCommand: shellCommand.optional().describe('Installs its dependencies.'),
|
|
93
|
+
devCommand: command.optional().describe('Runs it in a session VM, listening on $PORT. A shell command, or an argv run without a shell.'),
|
|
94
|
+
buildCommand: shellCommand.optional().describe('Builds it for a deployment, or for a session VM when it has no devCommand.'),
|
|
95
|
+
startCommand: command.optional().describe('Runs it in a deployment, listening on $PORT. Without one, outputDirectory is served.'),
|
|
96
|
+
outputDirectory: directory.optional().describe('The static files to serve, relative to root.'),
|
|
97
|
+
functions: functionsConfig.optional().describe('This service is the functions in this folder, run by the platform.'),
|
|
98
|
+
port: port.optional().describe('The port it listens on, also given as $PORT. Default: the next free one from 3000.'),
|
|
99
|
+
rewrites: zod_1.z.array(pathRewrite).max(100).optional().describe("For a static site, a path with no file is served as destination (an SPA's index.html); a server gets destination as the path."),
|
|
100
|
+
headers: zod_1.z.array(headerRule).max(100).optional().describe('Headers set on what this service answers, by path.'),
|
|
101
|
+
redirects: zod_1.z.array(redirect).max(100).optional().describe('To a path or another site; 308 unless permanent: false (307) or a statusCode says otherwise.'),
|
|
102
|
+
cleanUrls: zod_1.z.boolean().optional().describe('Static sites: /about serves about.html, and /about.html redirects to /about.'),
|
|
103
|
+
trailingSlash: zod_1.z.boolean().optional().describe('true: /about redirects to /about/; false: /about/ redirects to /about.'),
|
|
104
|
+
});
|
|
105
|
+
const daemon = zod_1.z.strictObject({
|
|
106
|
+
root: directory.optional().describe("The daemon's folder, relative to the workspace. Default: the workspace."),
|
|
107
|
+
installCommand: shellCommand.optional().describe('Installs its dependencies.'),
|
|
108
|
+
command: command.describe('Runs it. A shell command, or an argv run without a shell.'),
|
|
109
|
+
devCommand: command.optional().describe('Runs it in a session VM instead of command.'),
|
|
110
|
+
});
|
|
111
|
+
/** Those that compiled: an invalid one has its own issue. */
|
|
112
|
+
function timeLimitedPatterns(manifest) {
|
|
113
|
+
var _a, _b;
|
|
114
|
+
const rules = [
|
|
115
|
+
...((_a = manifest.rewrites) !== null && _a !== void 0 ? _a : []),
|
|
116
|
+
...Object.values((_b = manifest.services) !== null && _b !== void 0 ? _b : {}).flatMap((value) => { var _a, _b, _c; return [...((_a = value.rewrites) !== null && _a !== void 0 ? _a : []), ...((_b = value.headers) !== null && _b !== void 0 ? _b : []), ...((_c = value.redirects) !== null && _c !== void 0 ? _c : [])]; }),
|
|
117
|
+
];
|
|
118
|
+
return rules.filter((rule) => !(0, route_pattern_1.routeSourceProblem)(rule.source) && (0, route_pattern_1.runsOnTimeLimit)(rule.source)).length;
|
|
119
|
+
}
|
|
120
|
+
exports.appConfigSchema = zod_1.z
|
|
121
|
+
.strictObject({
|
|
122
|
+
$schema: zod_1.z.string().optional().describe('The JSON schema of this file.'),
|
|
123
|
+
$generated: zod_1.z.string().optional().describe('Set by the platform on a file it wrote, which it then keeps up with the project. Change anything else and the file is yours from then on.'),
|
|
124
|
+
services: zod_1.z.record(zod_1.z.string().regex(NAME, 'must be a short name'), service).optional().describe('What runs and answers requests, by name.'),
|
|
125
|
+
rewrites: zod_1.z
|
|
126
|
+
.array(serviceRewrite)
|
|
127
|
+
.max(100)
|
|
128
|
+
.optional()
|
|
129
|
+
.describe('Which service answers a path, first match first; needed with more than one. A static service with no file for the path passes the request to the next match.'),
|
|
130
|
+
daemons: zod_1.z.record(zod_1.z.string().regex(NAME, 'must be a short name'), daemon).optional().describe('Processes that run with no port, by name.'),
|
|
131
|
+
})
|
|
132
|
+
.superRefine((manifest, context) => {
|
|
133
|
+
var _a, _b, _c, _d, _e, _f;
|
|
134
|
+
const services = Object.keys((_a = manifest.services) !== null && _a !== void 0 ? _a : {});
|
|
135
|
+
if (!services.length && !Object.keys((_b = manifest.daemons) !== null && _b !== void 0 ? _b : {}).length) {
|
|
136
|
+
context.addIssue({ code: 'custom', path: ['services'], message: 'are needed: nothing here runs' });
|
|
137
|
+
}
|
|
138
|
+
(_c = manifest.rewrites) === null || _c === void 0 ? void 0 : _c.forEach((rewrite, index) => {
|
|
139
|
+
if (!services.includes(rewrite.destination.service)) {
|
|
140
|
+
context.addIssue({ code: 'custom', path: ['rewrites', index, 'destination', 'service'], message: 'names no service in "services"' });
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
if (services.length > 1 && !((_d = manifest.rewrites) === null || _d === void 0 ? void 0 : _d.length)) {
|
|
144
|
+
context.addIssue({ code: 'custom', path: ['rewrites'], message: 'are needed to choose between more than one service' });
|
|
145
|
+
}
|
|
146
|
+
for (const name of Object.keys((_e = manifest.daemons) !== null && _e !== void 0 ? _e : {})) {
|
|
147
|
+
if (services.includes(name))
|
|
148
|
+
context.addIssue({ code: 'custom', path: ['daemons', name], message: 'has the same name as a service' });
|
|
149
|
+
}
|
|
150
|
+
if (timeLimitedPatterns(manifest) > MAX_TIME_LIMITED_PATTERNS) {
|
|
151
|
+
context.addIssue({ code: 'custom', message: `has more than ${MAX_TIME_LIMITED_PATTERNS} path patterns with optional parts, alternatives or more than one wildcard` });
|
|
152
|
+
}
|
|
153
|
+
const ports = new Map();
|
|
154
|
+
for (const [name, value] of Object.entries((_f = manifest.services) !== null && _f !== void 0 ? _f : {})) {
|
|
155
|
+
if (value.port === undefined)
|
|
156
|
+
continue;
|
|
157
|
+
const other = ports.get(value.port);
|
|
158
|
+
if (other)
|
|
159
|
+
context.addIssue({ code: 'custom', path: ['services', name, 'port'], message: `is also ${other}'s port` });
|
|
160
|
+
ports.set(value.port, name);
|
|
161
|
+
}
|
|
162
|
+
})
|
|
163
|
+
.meta({ title: 'builder.json', description: 'How a workspace\'s app runs: its services, the rewrites between them, and its daemons.' });
|
|
164
|
+
/**
|
|
165
|
+
* builder.json's JSON Schema, for editors (what its `$schema` points at; the api serves it). The
|
|
166
|
+
* same rules as parseAppManifest, except those only code can check: paths that leave the app,
|
|
167
|
+
* reserved ports, rewrites naming a service that isn't there. parseAppManifest still has the last word.
|
|
168
|
+
*/
|
|
169
|
+
function appConfigJsonSchema() {
|
|
170
|
+
return zod_1.z.toJSONSchema(exports.appConfigSchema, { target: 'draft-7' });
|
|
171
|
+
}
|
|
172
|
+
/** The command a service runs in `mode`; undefined for a static one. */
|
|
173
|
+
function serviceCommand(service, mode) {
|
|
174
|
+
return mode === 'dev' ? service.devCommand : service.startCommand;
|
|
175
|
+
}
|
|
176
|
+
function daemonCommand(daemon, mode) {
|
|
177
|
+
return (mode === 'dev' && daemon.devCommand) || daemon.command;
|
|
178
|
+
}
|
|
179
|
+
/** Whether the app runs any process in `mode` (a static-only one is served without one). */
|
|
180
|
+
function appRunsProcesses(config, mode) {
|
|
181
|
+
var _a;
|
|
182
|
+
return Object.keys((_a = config.daemons) !== null && _a !== void 0 ? _a : {}).length > 0 || Object.values(config.services).some((service) => serviceCommand(service, mode));
|
|
183
|
+
}
|
|
184
|
+
/** What keeps an app from running in `mode`: a deployed service needs a start command or built output. */
|
|
185
|
+
function appConfigProblems(config, mode) {
|
|
186
|
+
if (mode === 'dev')
|
|
187
|
+
return [];
|
|
188
|
+
return Object.entries(config.services)
|
|
189
|
+
.filter(([, service]) => !service.startCommand && !service.outputDirectory)
|
|
190
|
+
.map(([name]) => `services.${name} needs a startCommand or an outputDirectory to deploy`);
|
|
191
|
+
}
|
|
192
|
+
function describeIssues(error) {
|
|
193
|
+
return error.issues
|
|
194
|
+
.map((issue) => {
|
|
195
|
+
const where = issue.path.map(String).join('.');
|
|
196
|
+
return where ? `${where}: ${issue.message}` : issue.message;
|
|
197
|
+
})
|
|
198
|
+
.join('; ');
|
|
199
|
+
}
|
|
200
|
+
/** Parses builder.json text, with every problem in one readable line. */
|
|
201
|
+
function parseAppManifest(text) {
|
|
202
|
+
let json;
|
|
203
|
+
try {
|
|
204
|
+
json = JSON.parse(text);
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
return { ok: false, error: `${protocol_1.APP_CONFIG_FILE} is not valid JSON: ${error.message}` };
|
|
208
|
+
}
|
|
209
|
+
const parsed = exports.appConfigSchema.safeParse(json);
|
|
210
|
+
if (!parsed.success)
|
|
211
|
+
return { ok: false, error: `${protocol_1.APP_CONFIG_FILE}: ${describeIssues(parsed.error)}` };
|
|
212
|
+
return { ok: true, manifest: parsed.data };
|
|
213
|
+
}
|
|
214
|
+
const encodedSize = zod_1.z.number().int().positive().optional();
|
|
215
|
+
const releaseManifestSchema = zod_1.z.looseObject({
|
|
216
|
+
site: zod_1.z.array(zod_1.z.looseObject({
|
|
217
|
+
path: zod_1.z.string().min(1).max(1024),
|
|
218
|
+
size: zod_1.z.number().int().nonnegative().optional(),
|
|
219
|
+
// Goes in a header as it is. An older release has neither of these.
|
|
220
|
+
hash: zod_1.z.string().regex(/^[\w-]{1,128}$/).optional(),
|
|
221
|
+
encodings: zod_1.z.object({ br: encodedSize, gzip: encodedSize }).optional(),
|
|
222
|
+
})),
|
|
223
|
+
});
|
|
224
|
+
/** A finished release's manifest, or undefined when it can't be one. */
|
|
225
|
+
function parseReleaseManifest(text) {
|
|
226
|
+
try {
|
|
227
|
+
return releaseManifestSchema.parse(JSON.parse(text));
|
|
228
|
+
}
|
|
229
|
+
catch (_a) {
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* A finished release's builder.json, or undefined when it can't be used. The build that uploaded it
|
|
235
|
+
* ran the app's own code, so it is read like any other, patterns and paths included.
|
|
236
|
+
*/
|
|
237
|
+
function parseReleaseConfig(text) {
|
|
238
|
+
try {
|
|
239
|
+
const parsed = exports.appConfigSchema.safeParse(JSON.parse(text));
|
|
240
|
+
return parsed.success && parsed.data.services ? parsed.data : undefined;
|
|
241
|
+
}
|
|
242
|
+
catch (_a) {
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/** An object without its undefined values, so spreading it never clears what it overrides. */
|
|
247
|
+
function defined(value) {
|
|
248
|
+
return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
|
|
249
|
+
}
|
|
250
|
+
function runsSomething(service) {
|
|
251
|
+
return Boolean(service.devCommand || service.startCommand || service.buildCommand || service.outputDirectory);
|
|
252
|
+
}
|
|
253
|
+
function folderOf(functions) {
|
|
254
|
+
return node_path_1.default.posix.normalize(functions.directory).replace(/\/+$/, '');
|
|
255
|
+
}
|
|
256
|
+
/** The URL `functions` answer below, without a trailing slash: '' for the root. */
|
|
257
|
+
function functionsUrlPath(functions) {
|
|
258
|
+
var _a;
|
|
259
|
+
const folder = folderOf(functions);
|
|
260
|
+
return ((_a = functions.path) !== null && _a !== void 0 ? _a : (folder === '.' ? '/' : `/${folder}`)).replace(/\/+$/, '');
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* The manifest as the runner runs it. A service's framework supplies what it leaves out; functions
|
|
264
|
+
* become the platform's commands. Their folder's own path reaches them too (they answer 404), so a
|
|
265
|
+
* static site at the app's root never serves their source.
|
|
266
|
+
*/
|
|
267
|
+
async function toConfig(manifest, reader, mode, from) {
|
|
268
|
+
var _a, _b, _c, _d, _e, _f;
|
|
269
|
+
const services = {};
|
|
270
|
+
const hidden = [];
|
|
271
|
+
let framework = null;
|
|
272
|
+
for (const [name, { framework: chosen, functions, ...declared }] of Object.entries((_a = manifest.services) !== null && _a !== void 0 ? _a : {})) {
|
|
273
|
+
const preset = chosen ? await (0, detect_1.detectApp)(reader, (_b = declared.root) !== null && _b !== void 0 ? _b : '.', chosen) : undefined;
|
|
274
|
+
const merged = { ...defined((_c = preset === null || preset === void 0 ? void 0 : preset.settings) !== null && _c !== void 0 ? _c : {}), ...defined(declared), ...(chosen ? { framework: chosen } : {}) };
|
|
275
|
+
framework !== null && framework !== void 0 ? framework : (framework = chosen !== null && chosen !== void 0 ? chosen : null);
|
|
276
|
+
if (functions) {
|
|
277
|
+
const args = ['--dir', functions.directory, '--path', functionsUrlPath(functions) || '/'];
|
|
278
|
+
(_d = merged.devCommand) !== null && _d !== void 0 ? _d : (merged.devCommand = [FUNCTIONS_BIN, '--watch', ...args]);
|
|
279
|
+
(_e = merged.startCommand) !== null && _e !== void 0 ? _e : (merged.startCommand = [FUNCTIONS_BIN, ...args]);
|
|
280
|
+
const folder = `/${folderOf(functions)}`;
|
|
281
|
+
if (folder !== '/.' && folder !== functionsUrlPath(functions)) {
|
|
282
|
+
for (const source of [folder, `${folder}/(.*)`])
|
|
283
|
+
hidden.push({ source, destination: { service: name } });
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (!runsSomething(merged)) {
|
|
287
|
+
return { ok: false, error: `${protocol_1.APP_CONFIG_FILE}: services.${name} sets nothing to run; set a devCommand, a startCommand, an outputDirectory, functions or a framework` };
|
|
288
|
+
}
|
|
289
|
+
services[name] = merged;
|
|
290
|
+
}
|
|
291
|
+
const rewrites = [...(Object.keys(services).length > 1 ? hidden : []), ...((_f = manifest.rewrites) !== null && _f !== void 0 ? _f : [])];
|
|
292
|
+
const config = {
|
|
293
|
+
services,
|
|
294
|
+
...(rewrites.length ? { rewrites } : {}),
|
|
295
|
+
...(manifest.daemons ? { daemons: manifest.daemons } : {}),
|
|
296
|
+
};
|
|
297
|
+
const problems = appConfigProblems(config, mode);
|
|
298
|
+
if (problems.length)
|
|
299
|
+
return { ok: false, error: `${from === 'detected' ? 'Detected app' : protocol_1.APP_CONFIG_FILE}: ${problems.join('; ')}` };
|
|
300
|
+
return { ok: true, config, framework, source: from };
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* The app as the reader's builder.json says, with no looking at anything else unless a service
|
|
304
|
+
* names a framework: undefined when there is no file, not ok when it is invalid or can't run in `mode`.
|
|
305
|
+
*/
|
|
306
|
+
async function configuredApp(reader, mode) {
|
|
307
|
+
const text = await reader.read(protocol_1.APP_CONFIG_FILE);
|
|
308
|
+
if (text === undefined)
|
|
309
|
+
return undefined;
|
|
310
|
+
const parsed = parseAppManifest(text);
|
|
311
|
+
if (!parsed.ok)
|
|
312
|
+
return parsed;
|
|
313
|
+
return toConfig(parsed.manifest, reader, mode, 'builder.json');
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* The app in the reader's directory: as its builder.json says, or what is detected when it has
|
|
317
|
+
* none (a deployment of a git tree nothing has written one for). Undefined when there is neither.
|
|
318
|
+
*/
|
|
319
|
+
async function resolveApp(reader, mode) {
|
|
320
|
+
const configured = await configuredApp(reader, mode);
|
|
321
|
+
if (configured)
|
|
322
|
+
return configured;
|
|
323
|
+
const detected = await (0, detect_1.detectProject)(reader);
|
|
324
|
+
return detected && toConfig(detected, reader, mode, 'detected');
|
|
325
|
+
}
|
|
326
|
+
var site_1 = require("./site");
|
|
327
|
+
Object.defineProperty(exports, "appSite", { enumerable: true, get: function () { return site_1.appSite; } });
|
|
328
|
+
Object.defineProperty(exports, "resolveSitePath", { enumerable: true, get: function () { return site_1.resolveSitePath; } });
|
|
329
|
+
Object.defineProperty(exports, "siteLocationOf", { enumerable: true, get: function () { return site_1.siteLocationOf; } });
|
|
330
|
+
Object.defineProperty(exports, "siteRunsProcess", { enumerable: true, get: function () { return site_1.siteRunsProcess; } });
|
|
331
|
+
var static_server_1 = require("./static-server");
|
|
332
|
+
Object.defineProperty(exports, "siteContentType", { enumerable: true, get: function () { return static_server_1.siteContentType; } });
|
|
333
|
+
/** Reads an app's files from its directory on disk. */
|
|
334
|
+
function directoryReader(dir) {
|
|
335
|
+
const inside = (file) => node_path_1.default.resolve(dir, file);
|
|
336
|
+
return {
|
|
337
|
+
exists: (file) => node_fs_1.promises.access(inside(file)).then(() => true, () => false),
|
|
338
|
+
read: async (file) => {
|
|
339
|
+
try {
|
|
340
|
+
return (await (0, workload_1.readInside)(dir, inside(file))).toString('utf8');
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
const code = error.code;
|
|
344
|
+
if (code === 'ENOENT' || code === 'EISDIR' || code === 'ENOTDIR')
|
|
345
|
+
return undefined;
|
|
346
|
+
throw error;
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
directories: async (relative) => {
|
|
350
|
+
const entries = await node_fs_1.promises.readdir(inside(relative), { withFileTypes: true }).catch(() => []);
|
|
351
|
+
return entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
352
|
+
},
|
|
353
|
+
list: async (relative) => {
|
|
354
|
+
const entries = await node_fs_1.promises.readdir(inside(relative), { recursive: true, withFileTypes: true }).catch(() => []);
|
|
355
|
+
return entries
|
|
356
|
+
.filter((entry) => entry.isFile())
|
|
357
|
+
.map((entry) => node_path_1.default.relative(inside(relative), node_path_1.default.join(entry.parentPath, entry.name)).split(node_path_1.default.sep).join('/'))
|
|
358
|
+
.filter((file) => !file.split('/').includes('node_modules'));
|
|
359
|
+
},
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/app/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/app/config.test.ts"],"names":[],"mappings":""}
|