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