@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,267 @@
|
|
|
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 detect_1 = require("./detect");
|
|
9
|
+
function detect(files) {
|
|
10
|
+
const texts = Object.fromEntries(Object.entries(files).map(([file, content]) => [file, typeof content === 'string' ? content : JSON.stringify(content)]));
|
|
11
|
+
return (0, detect_1.detectApp)((0, detect_1.fileListReader)(Object.keys(texts), async (file) => texts[file]));
|
|
12
|
+
}
|
|
13
|
+
const pkg = (dependencies, scripts = {}) => ({ dependencies, scripts });
|
|
14
|
+
(0, node_test_1.describe)('detecting an app the way Vercel does', () => {
|
|
15
|
+
(0, node_test_1.it)('knows the frameworks by their dependency, and installs with the lockfile\'s package manager', async () => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
const next = await detect({ 'package.json': pkg({ next: '15', react: '19' }), 'pnpm-lock.yaml': '' });
|
|
18
|
+
strict_1.default.deepEqual(next, {
|
|
19
|
+
framework: 'nextjs',
|
|
20
|
+
settings: {
|
|
21
|
+
installCommand: 'pnpm install',
|
|
22
|
+
devCommand: 'next dev -H 0.0.0.0 -p $PORT',
|
|
23
|
+
buildCommand: 'next build',
|
|
24
|
+
startCommand: 'next start -H 0.0.0.0 -p $PORT',
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
const vite = await detect({ 'package.json': { devDependencies: { vite: '7' } }, 'yarn.lock': '' });
|
|
28
|
+
strict_1.default.equal(vite === null || vite === void 0 ? void 0 : vite.framework, 'vite');
|
|
29
|
+
strict_1.default.equal(vite === null || vite === void 0 ? void 0 : vite.settings.installCommand, 'npx --yes yarn install');
|
|
30
|
+
strict_1.default.equal(vite === null || vite === void 0 ? void 0 : vite.settings.outputDirectory, 'dist');
|
|
31
|
+
strict_1.default.deepEqual(vite === null || vite === void 0 ? void 0 : vite.settings.rewrites, [{ source: '/(.*)', destination: '/index.html' }]);
|
|
32
|
+
// SvelteKit builds with Vite: the more specific framework wins.
|
|
33
|
+
strict_1.default.equal((_a = (await detect({ 'package.json': pkg({ '@sveltejs/kit': '2', vite: '7', '@sveltejs/adapter-node': '5' }) }))) === null || _a === void 0 ? void 0 : _a.settings.startCommand, 'node build');
|
|
34
|
+
strict_1.default.equal((_b = (await detect({ 'package.json': pkg({ astro: '5' }) }))) === null || _b === void 0 ? void 0 : _b.settings.outputDirectory, 'dist');
|
|
35
|
+
});
|
|
36
|
+
(0, node_test_1.it)('runs a node server by its scripts, else its entry file', async () => {
|
|
37
|
+
const scripted = await detect({ 'package.json': pkg({ express: '5' }, { dev: 'node --watch server.js', start: 'node server.js' }), 'bun.lock': '' });
|
|
38
|
+
strict_1.default.deepEqual(scripted === null || scripted === void 0 ? void 0 : scripted.settings, { installCommand: 'npx --yes bun install', devCommand: 'npx --yes bun run dev', buildCommand: undefined, startCommand: 'npx --yes bun run start' });
|
|
39
|
+
const bare = await detect({ 'package.json': pkg({ hono: '4' }), 'src/index.ts': '' });
|
|
40
|
+
strict_1.default.equal(bare === null || bare === void 0 ? void 0 : bare.framework, 'hono');
|
|
41
|
+
strict_1.default.equal(bare === null || bare === void 0 ? void 0 : bare.settings.devCommand, 'node src/index.ts');
|
|
42
|
+
});
|
|
43
|
+
(0, node_test_1.it)('falls back to the package\'s own scripts ("Other")', async () => {
|
|
44
|
+
const scripts = await detect({ 'package.json': pkg({}, { dev: 'parcel', build: 'parcel build' }), 'public/index.html': '' });
|
|
45
|
+
strict_1.default.deepEqual(scripts, { framework: null, settings: { installCommand: 'npm install', devCommand: 'npm run dev', buildCommand: 'npm run build', outputDirectory: 'public' } });
|
|
46
|
+
// A package.json that only holds a script's dependencies is no app.
|
|
47
|
+
strict_1.default.equal(await detect({ 'package.json': pkg({ lodash: '4' }), 'build-data.js': '' }), undefined);
|
|
48
|
+
});
|
|
49
|
+
(0, node_test_1.it)('runs FastAPI, Flask and a plain Python server in a virtualenv', async () => {
|
|
50
|
+
var _a, _b;
|
|
51
|
+
const fastapi = await detect({ 'requirements.txt': 'fastapi==0.115\nuvicorn\n', 'src/main.py': 'from fastapi import FastAPI\napi = FastAPI()\n' });
|
|
52
|
+
strict_1.default.deepEqual(fastapi, {
|
|
53
|
+
framework: 'fastapi',
|
|
54
|
+
settings: {
|
|
55
|
+
installCommand: 'python3 -m venv .venv && .venv/bin/pip install -r requirements.txt',
|
|
56
|
+
devCommand: 'uvicorn --app-dir src main:api --host 0.0.0.0 --port $PORT --reload',
|
|
57
|
+
startCommand: 'uvicorn --app-dir src main:api --host 0.0.0.0 --port $PORT',
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
strict_1.default.equal((_a = (await detect({ 'app.py': 'from flask import Flask\n' }))) === null || _a === void 0 ? void 0 : _a.settings.devCommand, 'flask --app app.py run --host 0.0.0.0 --port $PORT --debug');
|
|
61
|
+
strict_1.default.equal((_b = (await detect({ 'server.py': 'port = int(os.environ["PORT"])' }))) === null || _b === void 0 ? void 0 : _b.framework, 'python');
|
|
62
|
+
// An analysis script serves nothing.
|
|
63
|
+
strict_1.default.equal(await detect({ 'main.py': 'import pandas\nprint(1)\n' }), undefined);
|
|
64
|
+
});
|
|
65
|
+
(0, node_test_1.it)('serves static files from public/, else the root', async () => {
|
|
66
|
+
strict_1.default.deepEqual(await detect({ 'public/index.html': '', 'build-data.js': '', 'data/raw/a.json': '' }), { framework: null, settings: { outputDirectory: 'public' } });
|
|
67
|
+
strict_1.default.deepEqual(await detect({ 'index.html': '' }), { framework: null, settings: { outputDirectory: '.' } });
|
|
68
|
+
strict_1.default.equal(await detect({ 'research/findings.md': '', 'data/results.csv': '' }), undefined);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
function project(files) {
|
|
72
|
+
const texts = Object.fromEntries(Object.entries(files).map(([file, content]) => [file, typeof content === 'string' ? content : JSON.stringify(content)]));
|
|
73
|
+
// As the file says it, without the keys left unset.
|
|
74
|
+
return (0, detect_1.detectProject)((0, detect_1.fileListReader)(Object.keys(texts), async (file) => texts[file])).then((manifest) => manifest && JSON.parse(JSON.stringify(manifest)));
|
|
75
|
+
}
|
|
76
|
+
/** `/source -> service`, in order, without the bare `/x` that goes with each `/x/(.*)`. */
|
|
77
|
+
function routes(manifest) {
|
|
78
|
+
const sources = new Set(manifest === null || manifest === void 0 ? void 0 : manifest.rewrites.map((rule) => rule.source));
|
|
79
|
+
return manifest === null || manifest === void 0 ? void 0 : manifest.rewrites.filter((rule) => !sources.has(`${rule.source}/(.*)`)).map((rule) => `${rule.source} -> ${rule.destination.service}`);
|
|
80
|
+
}
|
|
81
|
+
const VITE = { scripts: { dev: 'vite', build: 'vite build' }, devDependencies: { vite: '7' } };
|
|
82
|
+
const EXPRESS = pkg({ express: '5' }, { start: 'node index.js' });
|
|
83
|
+
(0, node_test_1.describe)('detecting a project\'s services', () => {
|
|
84
|
+
(0, node_test_1.it)('writes one service the same way as many, with its route', async () => {
|
|
85
|
+
strict_1.default.deepEqual(await project({ 'package.json': EXPRESS, 'index.js': '', 'data/filings.js': '' }), {
|
|
86
|
+
services: { api: { root: '.', framework: 'express', installCommand: 'npm install', devCommand: 'npm run start', startCommand: 'npm run start' } },
|
|
87
|
+
rewrites: [{ source: '/(.*)', destination: { service: 'api' } }],
|
|
88
|
+
});
|
|
89
|
+
strict_1.default.deepEqual(await project({ 'index.html': '' }), {
|
|
90
|
+
services: { web: { root: '.', framework: null, outputDirectory: '.' } },
|
|
91
|
+
rewrites: [{ source: '/(.*)', destination: { service: 'web' } }],
|
|
92
|
+
});
|
|
93
|
+
strict_1.default.equal(await project({ 'research/findings.md': '' }), undefined);
|
|
94
|
+
});
|
|
95
|
+
(0, node_test_1.it)('finds a site and its server in their folders, and routes between them', async () => {
|
|
96
|
+
const manifest = await project({ 'web/package.json': VITE, 'server/package.json': EXPRESS, 'server/index.js': '' });
|
|
97
|
+
strict_1.default.deepEqual(Object.keys(manifest.services), ['server', 'web']);
|
|
98
|
+
strict_1.default.equal(manifest.services.web.root, 'web');
|
|
99
|
+
strict_1.default.equal(manifest.services.web.framework, 'vite');
|
|
100
|
+
strict_1.default.equal(manifest.services.server.root, 'server');
|
|
101
|
+
strict_1.default.deepEqual(routes(manifest), ['/api/(.*) -> server', '/(.*) -> web']);
|
|
102
|
+
strict_1.default.deepEqual(manifest.rewrites[0], { source: '/api', destination: { service: 'server' } });
|
|
103
|
+
});
|
|
104
|
+
(0, node_test_1.it)('looks in apps/ and services/, past a monorepo root that only runs them', async () => {
|
|
105
|
+
const manifest = await project({
|
|
106
|
+
'package.json': { scripts: { dev: 'turbo run dev', build: 'turbo run build' }, devDependencies: { turbo: '2' } },
|
|
107
|
+
'pnpm-workspace.yaml': '',
|
|
108
|
+
'pnpm-lock.yaml': '',
|
|
109
|
+
'apps/web/package.json': VITE,
|
|
110
|
+
'apps/docs/package.json': pkg({ next: '15' }),
|
|
111
|
+
'services/billing/package.json': EXPRESS,
|
|
112
|
+
'services/billing/index.js': '',
|
|
113
|
+
'services/api/requirements.txt': 'fastapi\n',
|
|
114
|
+
'services/api/main.py': 'app = FastAPI()\n',
|
|
115
|
+
'packages/ui/package.json': VITE,
|
|
116
|
+
});
|
|
117
|
+
strict_1.default.deepEqual(Object.keys(manifest.services).sort(), ['api', 'billing', 'docs', 'web']);
|
|
118
|
+
strict_1.default.deepEqual(routes(manifest), ['/api/(.*) -> api', '/billing/(.*) -> billing', '/docs/(.*) -> docs', '/(.*) -> web']);
|
|
119
|
+
// The lockfile at the top of a monorepo says how its packages install.
|
|
120
|
+
strict_1.default.equal(manifest.services.web.installCommand, 'pnpm install');
|
|
121
|
+
});
|
|
122
|
+
(0, node_test_1.it)('reads a child\'s own lockfile before the root\'s', async () => {
|
|
123
|
+
const manifest = await project({ 'pnpm-lock.yaml': '', 'web/package.json': VITE, 'web/yarn.lock': '' });
|
|
124
|
+
strict_1.default.equal(manifest.services.web.installCommand, 'npx --yes yarn install');
|
|
125
|
+
});
|
|
126
|
+
(0, node_test_1.it)('takes every service in packages/, by any name, and routes them', async () => {
|
|
127
|
+
const manifest = await project({
|
|
128
|
+
'README.md': '',
|
|
129
|
+
'packages/web/index.html': '',
|
|
130
|
+
'packages/admin/index.html': '',
|
|
131
|
+
'packages/api/package.json': EXPRESS,
|
|
132
|
+
'packages/api/index.js': '',
|
|
133
|
+
'packages/billing/requirements.txt': 'fastapi\n',
|
|
134
|
+
'packages/billing/main.py': 'app = FastAPI()\n',
|
|
135
|
+
});
|
|
136
|
+
strict_1.default.deepEqual(Object.fromEntries(Object.entries(manifest.services).map(([name, service]) => [name, service.root])), { admin: 'packages/admin', api: 'packages/api', billing: 'packages/billing', web: 'packages/web' });
|
|
137
|
+
strict_1.default.deepEqual(routes(manifest), ['/api/(.*) -> api', '/billing/(.*) -> billing', '/admin/(.*) -> admin', '/(.*) -> web']);
|
|
138
|
+
});
|
|
139
|
+
(0, node_test_1.it)('takes a lone service in packages/, which gets everything', async () => {
|
|
140
|
+
const api = await project({ 'packages/api/package.json': EXPRESS, 'packages/api/index.js': '' });
|
|
141
|
+
strict_1.default.deepEqual(routes(api), ['/(.*) -> api']);
|
|
142
|
+
const page = await project({ 'packages/web/index.html': '' });
|
|
143
|
+
strict_1.default.deepEqual(page.services.web, { root: 'packages/web', framework: null, outputDirectory: '.' });
|
|
144
|
+
});
|
|
145
|
+
(0, node_test_1.it)('leaves what only builds in packages/: nothing to run, or a bundler with no page', async () => {
|
|
146
|
+
const manifest = await project({
|
|
147
|
+
'package.json': { workspaces: ['packages/*'] },
|
|
148
|
+
'packages/web/package.json': VITE,
|
|
149
|
+
'packages/web/index.html': '',
|
|
150
|
+
'packages/shared/package.json': { scripts: { dev: 'tsc -w' } },
|
|
151
|
+
'packages/ui/package.json': VITE,
|
|
152
|
+
});
|
|
153
|
+
strict_1.default.deepEqual(Object.keys(manifest.services), ['web']);
|
|
154
|
+
});
|
|
155
|
+
(0, node_test_1.it)('leaves packages/ as shared code beside apps/ or services/, or under a root that is an app', async () => {
|
|
156
|
+
const next = pkg({ next: '15' });
|
|
157
|
+
const apps = await project({ 'apps/web/package.json': VITE, 'packages/docs/package.json': next });
|
|
158
|
+
strict_1.default.deepEqual(Object.keys(apps.services), ['web']);
|
|
159
|
+
const root = await project({ 'package.json': next, 'packages/docs/package.json': next });
|
|
160
|
+
strict_1.default.deepEqual(Object.keys(root.services), ['web']);
|
|
161
|
+
});
|
|
162
|
+
(0, node_test_1.it)('adds a service in packages/ to a project that started elsewhere', async () => {
|
|
163
|
+
const site = await project({ 'index.html': '', 'packages/api/package.json': EXPRESS, 'packages/api/index.js': '' });
|
|
164
|
+
strict_1.default.deepEqual(Object.keys(site.services).sort(), ['api', 'web']);
|
|
165
|
+
const folder = await project({ 'web/index.html': '', 'packages/api/package.json': EXPRESS, 'packages/api/index.js': '' });
|
|
166
|
+
strict_1.default.deepEqual(routes(folder), ['/api/(.*) -> api', '/(.*) -> web']);
|
|
167
|
+
});
|
|
168
|
+
(0, node_test_1.it)('sets a further site up to work below its name, and leaves a framework\'s own base path to it', async () => {
|
|
169
|
+
const manifest = await project({
|
|
170
|
+
'packages/web/index.html': '',
|
|
171
|
+
'packages/admin/index.html': '',
|
|
172
|
+
'packages/shop/package.json': VITE,
|
|
173
|
+
'packages/shop/index.html': '',
|
|
174
|
+
'packages/docs/package.json': pkg({ next: '15' }),
|
|
175
|
+
});
|
|
176
|
+
strict_1.default.equal(manifest.services.web.rewrites, undefined);
|
|
177
|
+
strict_1.default.deepEqual(manifest.services.admin.redirects, [{ source: '/(admin(?!/))', destination: '/admin/', permanent: false }]);
|
|
178
|
+
strict_1.default.deepEqual(manifest.services.admin.rewrites, [{ source: '/admin/(.*)', destination: '/$1' }]);
|
|
179
|
+
strict_1.default.match(manifest.services.shop.devCommand, / --base \/shop\/$/);
|
|
180
|
+
strict_1.default.match(manifest.services.shop.buildCommand, / --base \/shop\/$/);
|
|
181
|
+
strict_1.default.deepEqual(manifest.services.shop.rewrites, [
|
|
182
|
+
{ source: '/shop/(.*\\.\\w+)', destination: '/$1' },
|
|
183
|
+
{ source: '/shop/(.*)', destination: '/index.html' },
|
|
184
|
+
]);
|
|
185
|
+
strict_1.default.equal(manifest.services.docs.redirects, undefined);
|
|
186
|
+
strict_1.default.ok(!manifest.services.docs.devCommand.includes('--base'));
|
|
187
|
+
});
|
|
188
|
+
(0, node_test_1.it)('keeps a root that is a service of its own beside its folders', async () => {
|
|
189
|
+
const root = await project({ 'package.json': EXPRESS, 'index.js': '', 'client/package.json': VITE });
|
|
190
|
+
strict_1.default.deepEqual(Object.keys(root.services), ['api', 'client']);
|
|
191
|
+
strict_1.default.deepEqual(routes(root), ['/api/(.*) -> api', '/(.*) -> client']);
|
|
192
|
+
// Only scripts, but they run nothing in its folders.
|
|
193
|
+
const scripted = await project({ 'package.json': { scripts: { start: 'node server.js' } }, 'client/package.json': VITE });
|
|
194
|
+
strict_1.default.deepEqual(routes(scripted), ['/api/(.*) -> api', '/(.*) -> client']);
|
|
195
|
+
// Scripts that run its folders: starting them too would run everything twice.
|
|
196
|
+
const runner = await project({ 'package.json': pkg({}, { dev: 'concurrently "npm run dev --prefix web" "npm start --prefix server"' }), 'web/package.json': VITE, 'server/package.json': EXPRESS, 'server/index.js': '' });
|
|
197
|
+
strict_1.default.deepEqual(Object.keys(runner.services), ['server', 'web']);
|
|
198
|
+
});
|
|
199
|
+
(0, node_test_1.it)('serves a server\'s public/ in front of it', async () => {
|
|
200
|
+
const manifest = await project({ 'package.json': EXPRESS, 'index.js': '', 'public/index.html': '' });
|
|
201
|
+
strict_1.default.deepEqual(manifest.services.web, { root: '.', framework: null, outputDirectory: 'public' });
|
|
202
|
+
strict_1.default.deepEqual(routes(manifest), ['/(.*) -> web', '/(.*) -> api']);
|
|
203
|
+
});
|
|
204
|
+
(0, node_test_1.it)('leaves a root index.html beside a server to the server: serving the root would hand out its source', async () => {
|
|
205
|
+
const manifest = await project({ 'package.json': EXPRESS, 'index.js': '', 'index.html': '' });
|
|
206
|
+
strict_1.default.deepEqual(Object.keys(manifest.services), ['api']);
|
|
207
|
+
});
|
|
208
|
+
(0, node_test_1.it)('keeps a static root from handing out the source of the services inside it', async () => {
|
|
209
|
+
const manifest = await project({ 'index.html': '', 'server/package.json': EXPRESS, 'server/index.js': '' });
|
|
210
|
+
strict_1.default.deepEqual(routes(manifest), ['/api/(.*) -> server', '/server/(.*) -> server', '/(.*) -> web']);
|
|
211
|
+
});
|
|
212
|
+
(0, node_test_1.it)('takes no folder for a service that is part of the app', async () => {
|
|
213
|
+
const manifest = await project({
|
|
214
|
+
'index.html': '',
|
|
215
|
+
'reports/index.html': '',
|
|
216
|
+
'public/package.json': VITE,
|
|
217
|
+
'lib/package.json': EXPRESS,
|
|
218
|
+
'node_modules/x/package.json': EXPRESS,
|
|
219
|
+
'shared/package.json': { scripts: { dev: 'tsc -w', build: 'tsc' } },
|
|
220
|
+
});
|
|
221
|
+
strict_1.default.deepEqual(Object.keys(manifest.services), ['web']);
|
|
222
|
+
});
|
|
223
|
+
(0, node_test_1.it)('takes a folder of pages under a site\'s name, and one with its own package', async () => {
|
|
224
|
+
strict_1.default.deepEqual(Object.keys((await project({ 'frontend/index.html': '' })).services), ['frontend']);
|
|
225
|
+
strict_1.default.deepEqual(Object.keys((await project({ 'reports/index.html': '', 'reports/package.json': {} })).services), ['reports']);
|
|
226
|
+
});
|
|
227
|
+
(0, node_test_1.it)('leaves a Python app\'s entry folder to it', async () => {
|
|
228
|
+
const manifest = await project({ 'requirements.txt': 'flask\n', 'app/app.py': '' });
|
|
229
|
+
strict_1.default.deepEqual(Object.keys(manifest.services), ['api']);
|
|
230
|
+
strict_1.default.equal(manifest.services.api.root, '.');
|
|
231
|
+
});
|
|
232
|
+
(0, node_test_1.it)('finds an api/ folder of functions beside a static app, or alone', async () => {
|
|
233
|
+
const functions = { directory: 'api', path: '/api' };
|
|
234
|
+
const beside = await project({ 'public/index.html': '', 'api/hello.js': '' });
|
|
235
|
+
strict_1.default.deepEqual(beside.services, {
|
|
236
|
+
web: { root: '.', framework: null, outputDirectory: 'public' },
|
|
237
|
+
api: { root: '.', framework: null, functions },
|
|
238
|
+
});
|
|
239
|
+
strict_1.default.deepEqual(routes(beside), ['/api/(.*) -> api', '/(.*) -> web']);
|
|
240
|
+
const vite = await project({ 'package.json': VITE, 'pnpm-lock.yaml': '', 'api/users/[id].ts': '' });
|
|
241
|
+
strict_1.default.deepEqual(vite.services.api, { root: '.', framework: null, installCommand: 'pnpm install', functions });
|
|
242
|
+
const alone = await project({ 'api/hello.js': '' });
|
|
243
|
+
strict_1.default.deepEqual(alone.services, { api: { root: '.', framework: null, functions } });
|
|
244
|
+
strict_1.default.deepEqual((await project({ 'package.json': {}, 'api/hello.js': '' })).services.api.installCommand, 'npm install');
|
|
245
|
+
// A site in its own folder has its own.
|
|
246
|
+
strict_1.default.deepEqual((await project({ 'web/index.html': '', 'web/api/hello.js': '' })).services.api, { root: 'web', framework: null, functions });
|
|
247
|
+
// Helpers alone are no functions.
|
|
248
|
+
strict_1.default.equal(await project({ 'api/_db.js': '', 'api/types.d.ts': '' }), undefined);
|
|
249
|
+
});
|
|
250
|
+
(0, node_test_1.it)('leaves api/ to a server or a full-stack framework: there it is their own code', async () => {
|
|
251
|
+
const express = await project({ 'package.json': EXPRESS, 'api/routes.js': '' });
|
|
252
|
+
strict_1.default.deepEqual(Object.keys(express.services), ['api']);
|
|
253
|
+
strict_1.default.equal(express.services.api.functions, undefined);
|
|
254
|
+
const next = await project({ 'package.json': pkg({ next: '15' }), 'api/hello.js': '' });
|
|
255
|
+
strict_1.default.deepEqual(Object.keys(next.services), ['web']);
|
|
256
|
+
strict_1.default.equal(next.services.web.framework, 'nextjs');
|
|
257
|
+
// An api/ that is a service of its own.
|
|
258
|
+
const own = await project({ 'index.html': '', 'api/package.json': EXPRESS, 'api/index.js': '' });
|
|
259
|
+
strict_1.default.equal(own.services.api.framework, 'express');
|
|
260
|
+
strict_1.default.equal(own.services.api.functions, undefined);
|
|
261
|
+
});
|
|
262
|
+
(0, node_test_1.it)('gives every service a usable name, once', async () => {
|
|
263
|
+
const manifest = await project({ 'package.json': EXPRESS, 'index.js': '', 'api/package.json': EXPRESS, 'api/index.js': '', 'services/api/package.json': EXPRESS, 'services/api/index.js': '', 'my.app/package.json': EXPRESS, 'my.app/index.js': '' });
|
|
264
|
+
strict_1.default.deepEqual(Object.keys(manifest.services).sort(), ['api', 'api-2', 'api-3', 'my-app']);
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
//# sourceMappingURL=detect.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.test.js","sourceRoot":"","sources":["../../src/app/detect.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** A session VM's app: none of the agent's own settings (every AGENT_ENV name) or SSH keys. */
|
|
2
|
+
export declare function sessionAppEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
3
|
+
/** A deployment's app: the deployment's env, without what delivered its release. */
|
|
4
|
+
export declare function deployedAppEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
5
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/app/env.ts"],"names":[],"mappings":"AAUA,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAEvE;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAExE"}
|
package/dist/app/env.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sessionAppEnv = sessionAppEnv;
|
|
4
|
+
exports.deployedAppEnv = deployedAppEnv;
|
|
5
|
+
// What an app's processes see of the guest's environment: their own settings, never the
|
|
6
|
+
// platform's — no model keys, FilingRamp credentials or VM token in a dev server or a deployment.
|
|
7
|
+
const protocol_1 = require("../transport/protocol");
|
|
8
|
+
function without(env, names) {
|
|
9
|
+
const result = { ...env };
|
|
10
|
+
for (const name of names)
|
|
11
|
+
delete result[name];
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
/** A session VM's app: none of the agent's own settings (every AGENT_ENV name) or SSH keys. */
|
|
15
|
+
function sessionAppEnv(env) {
|
|
16
|
+
return without(env, [...Object.values(protocol_1.AGENT_ENV), 'AGENT_SSH_PUBLIC_KEYS_B64']);
|
|
17
|
+
}
|
|
18
|
+
/** A deployment's app: the deployment's env, without what delivered its release. */
|
|
19
|
+
function deployedAppEnv(env) {
|
|
20
|
+
return without(env, protocol_1.RELEASE_DELIVERY_ENV);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/app/env.ts"],"names":[],"mappings":";;AAWA,sCAEC;AAGD,wCAEC;AAlBD,wFAAwF;AACxF,kGAAkG;AAClG,oDAAuE;AAEvE,SAAS,OAAO,CAAC,GAAsB,EAAE,KAAwB;IAC/D,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7C,OAAO,MAAM,CAAA;AACf,CAAC;AAED,+FAA+F;AAC/F,SAAgB,aAAa,CAAC,GAAsB;IAClD,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAS,CAAC,EAAE,2BAA2B,CAAC,CAAC,CAAA;AACjF,CAAC;AAED,oFAAoF;AACpF,SAAgB,cAAc,CAAC,GAAsB;IACnD,OAAO,OAAO,CAAC,GAAG,EAAE,+BAAoB,CAAC,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions-cli.d.ts","sourceRoot":"","sources":["../../src/app/functions-cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
// builder-functions: serves the current directory's functions on $PORT (functions-host.ts), from
|
|
5
|
+
// the folder and URL in --dir and --path (builder.json's `functions`). With --watch (a session VM),
|
|
6
|
+
// node restarts it whenever a loaded file changes.
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const functions_host_1 = require("./functions-host");
|
|
9
|
+
const args = process.argv.slice(2);
|
|
10
|
+
const flag = (name) => {
|
|
11
|
+
const index = args.indexOf(name);
|
|
12
|
+
return index >= 0 ? args[index + 1] : undefined;
|
|
13
|
+
};
|
|
14
|
+
if (args.includes('--watch')) {
|
|
15
|
+
// In the runner's process group, so stopping the app stops this child too.
|
|
16
|
+
const forwarded = args.filter((arg) => arg !== '--watch');
|
|
17
|
+
const child = (0, node_child_process_1.spawn)(process.execPath, ['--watch', '--watch-preserve-output', __filename, ...forwarded], { stdio: 'inherit' });
|
|
18
|
+
child.on('exit', (code) => process.exit(code !== null && code !== void 0 ? code : 1));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
(0, functions_host_1.resolveLikeABundler)();
|
|
22
|
+
// One function's stray error must not take down the others.
|
|
23
|
+
process.on('uncaughtException', (error) => console.error('[functions] uncaught:', error));
|
|
24
|
+
process.on('unhandledRejection', (error) => console.error('[functions] unhandled rejection:', error));
|
|
25
|
+
(0, functions_host_1.createFunctionsServer)(process.cwd(), { directory: flag('--dir'), path: flag('--path') }).listen(Number(process.env.PORT) || 3000, '0.0.0.0');
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=functions-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions-cli.js","sourceRoot":"","sources":["../../src/app/functions-cli.ts"],"names":[],"mappings":";;;AACA,iGAAiG;AACjG,oGAAoG;AACpG,mDAAmD;AACnD,2DAA0C;AAC1C,qDAA6E;AAE7E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACjD,CAAC,CAAA;AAED,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;IAC7B,2EAA2E;IAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAA;IACzD,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,yBAAyB,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IAC7H,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,CAAC,CAAC,CAAC,CAAA;AACrD,CAAC;KAAM,CAAC;IACN,IAAA,oCAAmB,GAAE,CAAA;IACrB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC,CAAA;IACzF,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC,CAAA;IACrG,IAAA,sCAAqB,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,SAAS,CAAC,CAAA;AAC9I,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
/**
|
|
3
|
+
* Vercel bundles a function, so `import db from '../lib/db'` works without an extension, and
|
|
4
|
+
* TypeScript's `./db.js` finds db.ts. Node needs both spelled out; this finds them as a bundler would.
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveLikeABundler(): void;
|
|
7
|
+
export interface FunctionsOptions {
|
|
8
|
+
/** The functions' folder, relative to the app. */
|
|
9
|
+
directory?: string;
|
|
10
|
+
/** The URL they answer below; the folder's own path by default. */
|
|
11
|
+
path?: string;
|
|
12
|
+
}
|
|
13
|
+
/** A server answering requests from the functions in `dir` (a new file is picked up within a second). */
|
|
14
|
+
export declare function createFunctionsServer(dir: string, options?: FunctionsOptions): http.Server;
|
|
15
|
+
//# sourceMappingURL=functions-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions-host.d.ts","sourceRoot":"","sources":["../../src/app/functions-host.ts"],"names":[],"mappings":"AAKA,OAAO,IAAI,MAAM,WAAW,CAAA;AA2B5B;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAuB1C;AAoLD,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,yGAAyG;AACzG,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,IAAI,CAAC,MAAM,CAgB9F"}
|