@workbench-ai/workbench 0.0.67 → 0.0.68
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/dist/dev-open/client.css +37 -246
- package/dist/dev-open/client.js +245 -286
- package/dist/index.d.ts +2 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1261 -5183
- package/dist/open-server.d.ts +12 -0
- package/dist/open-server.d.ts.map +1 -0
- package/dist/open-server.js +180 -0
- package/package.json +5 -5
- package/dist/adapter-command-env.d.ts +0 -8
- package/dist/adapter-command-env.d.ts.map +0 -1
- package/dist/adapter-command-env.js +0 -80
- package/dist/adapter-project.d.ts +0 -29
- package/dist/adapter-project.d.ts.map +0 -1
- package/dist/adapter-project.js +0 -332
- package/dist/benchmark-fingerprint.d.ts +0 -6
- package/dist/benchmark-fingerprint.d.ts.map +0 -1
- package/dist/benchmark-fingerprint.js +0 -42
- package/dist/command-model.d.ts +0 -5
- package/dist/command-model.d.ts.map +0 -1
- package/dist/command-model.js +0 -537
- package/dist/dev-open-server.d.ts +0 -18
- package/dist/dev-open-server.d.ts.map +0 -1
- package/dist/dev-open-server.js +0 -297
- package/dist/init-scaffold.d.ts +0 -22
- package/dist/init-scaffold.d.ts.map +0 -1
- package/dist/init-scaffold.js +0 -30
- package/dist/init-template-pack.d.ts +0 -19
- package/dist/init-template-pack.d.ts.map +0 -1
- package/dist/init-template-pack.js +0 -262
- package/dist/local-archive.d.ts +0 -48
- package/dist/local-archive.d.ts.map +0 -1
- package/dist/local-archive.js +0 -838
- package/dist/local-inspection.d.ts +0 -9
- package/dist/local-inspection.d.ts.map +0 -1
- package/dist/local-inspection.js +0 -354
- package/dist/project-source.d.ts +0 -63
- package/dist/project-source.d.ts.map +0 -1
- package/dist/project-source.js +0 -682
- package/dist/workspace-snapshot.d.ts +0 -10
- package/dist/workspace-snapshot.d.ts.map +0 -1
- package/dist/workspace-snapshot.js +0 -81
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface StartWorkbenchOpenServerOptions {
|
|
2
|
+
dir?: string;
|
|
3
|
+
authToken?: string;
|
|
4
|
+
host?: string;
|
|
5
|
+
port?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface StartedWorkbenchOpenServer {
|
|
8
|
+
url: string;
|
|
9
|
+
close(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare function startWorkbenchOpenServer(options?: StartWorkbenchOpenServerOptions): Promise<StartedWorkbenchOpenServer>;
|
|
12
|
+
//# sourceMappingURL=open-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-server.d.ts","sourceRoot":"","sources":["../src/open-server.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,+BAA+B;IAC9C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,0BAA0B,CAAC,CA+BrC"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
import { promises as fs } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { createWorkbenchInspectionSnapshot, workbenchInspectionFileContent, workbenchInspectionFileManifest, WorkbenchUserError, } from "@workbench-ai/workbench-core";
|
|
6
|
+
export async function startWorkbenchOpenServer(options = {}) {
|
|
7
|
+
const host = options.host ?? "127.0.0.1";
|
|
8
|
+
const port = options.port ?? 0;
|
|
9
|
+
const assetRoot = path.join(path.dirname(fileURLToPath(import.meta.url)), "dev-open");
|
|
10
|
+
const server = createServer((request, response) => {
|
|
11
|
+
void handleRequest({ request, response, assetRoot, dir: options.dir, authToken: options.authToken });
|
|
12
|
+
});
|
|
13
|
+
await new Promise((resolve, reject) => {
|
|
14
|
+
server.once("error", reject);
|
|
15
|
+
server.listen(port, host, () => {
|
|
16
|
+
server.off("error", reject);
|
|
17
|
+
resolve();
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
const address = server.address();
|
|
21
|
+
if (!address || typeof address === "string") {
|
|
22
|
+
throw new WorkbenchUserError("Could not determine Workbench open server address.");
|
|
23
|
+
}
|
|
24
|
+
const display = displayHost(host);
|
|
25
|
+
return {
|
|
26
|
+
url: `http://${display}:${address.port}/`,
|
|
27
|
+
close: () => new Promise((resolve, reject) => {
|
|
28
|
+
server.close((error) => {
|
|
29
|
+
if (error) {
|
|
30
|
+
reject(error);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
resolve();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
async function handleRequest({ request, response, assetRoot, dir, authToken, }) {
|
|
40
|
+
try {
|
|
41
|
+
const url = new URL(request.url ?? "/", "http://workbench.local");
|
|
42
|
+
if (url.pathname === "/api/snapshot") {
|
|
43
|
+
const snapshot = await createWorkbenchInspectionSnapshot({ dir, authToken });
|
|
44
|
+
sendText(response, 200, `${JSON.stringify(inspectionSnapshotManifest(snapshot), null, 2)}\n`, "application/json; charset=utf-8");
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const fileRoute = parseInspectionFileApiPath(url.pathname);
|
|
48
|
+
if (fileRoute) {
|
|
49
|
+
const snapshot = await createWorkbenchInspectionSnapshot({ dir, authToken });
|
|
50
|
+
const content = inspectionFileContentForSnapshot(snapshot, fileRoute);
|
|
51
|
+
if (!content) {
|
|
52
|
+
sendText(response, 404, `${JSON.stringify({ message: "File not found" })}\n`, "application/json; charset=utf-8");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
sendText(response, 200, `${JSON.stringify(content, null, 2)}\n`, "application/json; charset=utf-8");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (url.pathname.startsWith("/api/")) {
|
|
59
|
+
sendText(response, 404, `${JSON.stringify({ message: "Not found" })}\n`, "application/json; charset=utf-8");
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (url.pathname === "/" || url.pathname === "/index.html") {
|
|
63
|
+
sendText(response, 200, html(), "text/html; charset=utf-8");
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (url.pathname === "/client.js" || url.pathname === "/client.css" || url.pathname.startsWith("/fonts/")) {
|
|
67
|
+
await sendAsset(response, assetRoot, url.pathname.slice(1));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
sendText(response, 200, html(), "text/html; charset=utf-8");
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
sendText(response, 500, `${error instanceof Error ? error.message : String(error)}\n`, "text/plain; charset=utf-8");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function inspectionSnapshotManifest(snapshot) {
|
|
77
|
+
return {
|
|
78
|
+
...snapshot,
|
|
79
|
+
versions: snapshot.versions.map((version) => ({
|
|
80
|
+
...version,
|
|
81
|
+
files: inspectionFileManifests(version.files),
|
|
82
|
+
})),
|
|
83
|
+
traces: snapshot.traces.map((trace) => ({
|
|
84
|
+
...trace,
|
|
85
|
+
files: inspectionFileManifests(trace.files),
|
|
86
|
+
})),
|
|
87
|
+
artifacts: snapshot.artifacts.map((artifact) => ({
|
|
88
|
+
...artifact,
|
|
89
|
+
files: inspectionFileManifests(artifact.files),
|
|
90
|
+
})),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function inspectionFileManifests(files) {
|
|
94
|
+
return files.map(workbenchInspectionFileManifest);
|
|
95
|
+
}
|
|
96
|
+
function parseInspectionFileApiPath(pathname) {
|
|
97
|
+
const segments = pathname.split("/").filter(Boolean).map((segment) => decodeURIComponent(segment));
|
|
98
|
+
const [api, ownerKind, ownerId, files, ...filePath] = segments;
|
|
99
|
+
if (api !== "api" || files !== "files" || !ownerId || filePath.length === 0) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
if (ownerKind !== "versions" && ownerKind !== "traces" && ownerKind !== "artifacts") {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
ownerKind: ownerKind.slice(0, -1),
|
|
107
|
+
ownerId,
|
|
108
|
+
path: filePath.join("/"),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function inspectionFileContentForSnapshot(snapshot, route) {
|
|
112
|
+
const owner = findInspectionFileOwner(snapshot, route.ownerKind, route.ownerId);
|
|
113
|
+
const file = owner?.files.find((entry) => entry.path === route.path);
|
|
114
|
+
return file ? workbenchInspectionFileContent(file) : null;
|
|
115
|
+
}
|
|
116
|
+
function findInspectionFileOwner(snapshot, ownerKind, ownerId) {
|
|
117
|
+
if (ownerKind === "version") {
|
|
118
|
+
return snapshot.versions.find((entry) => entry.id === ownerId);
|
|
119
|
+
}
|
|
120
|
+
if (ownerKind === "trace") {
|
|
121
|
+
return snapshot.traces.find((entry) => entry.id === ownerId);
|
|
122
|
+
}
|
|
123
|
+
return snapshot.artifacts.find((entry) => entry.id === ownerId);
|
|
124
|
+
}
|
|
125
|
+
async function sendAsset(response, assetRoot, relativePath) {
|
|
126
|
+
const normalized = path.normalize(relativePath);
|
|
127
|
+
if (normalized.startsWith("..") || path.isAbsolute(normalized)) {
|
|
128
|
+
sendText(response, 404, "Not found\n", "text/plain; charset=utf-8");
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const content = await fs.readFile(path.join(assetRoot, normalized)).catch(() => null);
|
|
132
|
+
if (!content) {
|
|
133
|
+
sendText(response, 404, "Not found\n", "text/plain; charset=utf-8");
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
response.statusCode = 200;
|
|
137
|
+
response.setHeader("content-type", contentType(normalized));
|
|
138
|
+
response.end(content);
|
|
139
|
+
}
|
|
140
|
+
function sendText(response, status, content, type) {
|
|
141
|
+
response.statusCode = status;
|
|
142
|
+
response.setHeader("content-type", type);
|
|
143
|
+
response.end(content);
|
|
144
|
+
}
|
|
145
|
+
function html() {
|
|
146
|
+
return [
|
|
147
|
+
"<!doctype html>",
|
|
148
|
+
"<html lang=\"en\">",
|
|
149
|
+
"<head>",
|
|
150
|
+
"<meta charset=\"utf-8\">",
|
|
151
|
+
"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">",
|
|
152
|
+
"<title>Workbench</title>",
|
|
153
|
+
"<link rel=\"stylesheet\" href=\"/client.css\">",
|
|
154
|
+
"</head>",
|
|
155
|
+
"<body>",
|
|
156
|
+
"<div id=\"root\"></div>",
|
|
157
|
+
"<script type=\"module\" src=\"/client.js\"></script>",
|
|
158
|
+
"</body>",
|
|
159
|
+
"</html>",
|
|
160
|
+
"",
|
|
161
|
+
].join("\n");
|
|
162
|
+
}
|
|
163
|
+
function contentType(filePath) {
|
|
164
|
+
if (filePath.endsWith(".js")) {
|
|
165
|
+
return "text/javascript; charset=utf-8";
|
|
166
|
+
}
|
|
167
|
+
if (filePath.endsWith(".css")) {
|
|
168
|
+
return "text/css; charset=utf-8";
|
|
169
|
+
}
|
|
170
|
+
if (filePath.endsWith(".woff2")) {
|
|
171
|
+
return "font/woff2";
|
|
172
|
+
}
|
|
173
|
+
return "application/octet-stream";
|
|
174
|
+
}
|
|
175
|
+
function displayHost(host) {
|
|
176
|
+
if (host === "0.0.0.0" || host === "::") {
|
|
177
|
+
return "127.0.0.1";
|
|
178
|
+
}
|
|
179
|
+
return host.includes(":") && !host.startsWith("[") ? `[${host}]` : host;
|
|
180
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workbench-ai/workbench",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.68",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/workbench-ai/workbench.git",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"yaml": "^2.8.2",
|
|
24
|
-
"@workbench-ai/workbench-
|
|
25
|
-
"@workbench-ai/workbench-
|
|
26
|
-
"@workbench-ai/workbench-protocol": "0.0.
|
|
24
|
+
"@workbench-ai/workbench-core": "0.0.68",
|
|
25
|
+
"@workbench-ai/workbench-built-in-adapters": "0.0.68",
|
|
26
|
+
"@workbench-ai/workbench-protocol": "0.0.68"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@tailwindcss/postcss": "^4.2.2",
|
|
@@ -40,6 +40,6 @@
|
|
|
40
40
|
"build": "rm -rf dist && tsc -p tsconfig.json && chmod 755 dist/workbench.js && node ./scripts/build-dev-open-assets.mjs",
|
|
41
41
|
"lint": "tsc -p tsconfig.lint.json",
|
|
42
42
|
"test": "vitest run --config vitest.config.ts",
|
|
43
|
-
"test:e2e": "
|
|
43
|
+
"test:e2e": "vitest run --config vitest.config.ts tests/cli.test.ts"
|
|
44
44
|
}
|
|
45
45
|
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export interface AdapterCommandEnvOptions {
|
|
2
|
-
workspaceRoot?: string;
|
|
3
|
-
adapterRoot?: string;
|
|
4
|
-
env?: NodeJS.ProcessEnv;
|
|
5
|
-
extraEnv?: Record<string, string | undefined>;
|
|
6
|
-
}
|
|
7
|
-
export declare function createAdapterCommandEnv(options?: AdapterCommandEnvOptions): NodeJS.ProcessEnv;
|
|
8
|
-
//# sourceMappingURL=adapter-command-env.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-command-env.d.ts","sourceRoot":"","sources":["../src/adapter-command-env.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC/C;AAED,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,wBAA6B,GAAG,MAAM,CAAC,UAAU,CAmBjG"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { fileURLToPath } from "node:url";
|
|
3
|
-
const SYSTEM_PATH_ENTRIES = [
|
|
4
|
-
"/usr/local/sbin",
|
|
5
|
-
"/usr/local/bin",
|
|
6
|
-
"/usr/sbin",
|
|
7
|
-
"/usr/bin",
|
|
8
|
-
"/sbin",
|
|
9
|
-
"/bin",
|
|
10
|
-
];
|
|
11
|
-
export function createAdapterCommandEnv(options = {}) {
|
|
12
|
-
const baseEnv = options.env ?? process.env;
|
|
13
|
-
const env = {};
|
|
14
|
-
for (const [key, value] of Object.entries(baseEnv)) {
|
|
15
|
-
if (typeof value === "string" && !key.startsWith("WORKBENCH_")) {
|
|
16
|
-
env[key] = value;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
env.PATH = adapterCommandPath({
|
|
20
|
-
workspaceRoot: options.workspaceRoot,
|
|
21
|
-
adapterRoot: options.adapterRoot,
|
|
22
|
-
basePath: baseEnv.PATH,
|
|
23
|
-
});
|
|
24
|
-
for (const [key, value] of Object.entries(options.extraEnv ?? {})) {
|
|
25
|
-
if (value !== undefined) {
|
|
26
|
-
env[key] = value;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return env;
|
|
30
|
-
}
|
|
31
|
-
function adapterCommandPath(options) {
|
|
32
|
-
return uniquePathEntries([
|
|
33
|
-
path.dirname(process.execPath),
|
|
34
|
-
...optionalProjectBinDirs(options.workspaceRoot),
|
|
35
|
-
...optionalProjectBinDirs(options.adapterRoot),
|
|
36
|
-
...nodeModuleBinDirsForAncestors(process.cwd()),
|
|
37
|
-
...nodeModuleBinDirsForAncestors(path.dirname(fileURLToPath(import.meta.url))),
|
|
38
|
-
...optionalAncestorBinDirs(options.workspaceRoot),
|
|
39
|
-
...optionalAncestorBinDirs(options.adapterRoot),
|
|
40
|
-
...SYSTEM_PATH_ENTRIES,
|
|
41
|
-
...(options.basePath ? options.basePath.split(path.delimiter) : []),
|
|
42
|
-
]).join(path.delimiter);
|
|
43
|
-
}
|
|
44
|
-
function optionalProjectBinDirs(root) {
|
|
45
|
-
return root
|
|
46
|
-
? [
|
|
47
|
-
path.join(root, "node_modules", ".bin"),
|
|
48
|
-
path.join(root, "products", "workbench", "node_modules", ".bin"),
|
|
49
|
-
]
|
|
50
|
-
: [];
|
|
51
|
-
}
|
|
52
|
-
function optionalAncestorBinDirs(root) {
|
|
53
|
-
return root ? nodeModuleBinDirsForAncestors(root) : [];
|
|
54
|
-
}
|
|
55
|
-
function nodeModuleBinDirsForAncestors(start) {
|
|
56
|
-
const dirs = [];
|
|
57
|
-
let current = path.resolve(start);
|
|
58
|
-
for (let depth = 0; depth < 12; depth += 1) {
|
|
59
|
-
dirs.push(path.join(current, "node_modules", ".bin"));
|
|
60
|
-
const parent = path.dirname(current);
|
|
61
|
-
if (parent === current) {
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
current = parent;
|
|
65
|
-
}
|
|
66
|
-
return dirs;
|
|
67
|
-
}
|
|
68
|
-
function uniquePathEntries(entries) {
|
|
69
|
-
const seen = new Set();
|
|
70
|
-
const output = [];
|
|
71
|
-
for (const entry of entries) {
|
|
72
|
-
const trimmed = entry.trim();
|
|
73
|
-
if (!trimmed || seen.has(trimmed)) {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
seen.add(trimmed);
|
|
77
|
-
output.push(trimmed);
|
|
78
|
-
}
|
|
79
|
-
return output;
|
|
80
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { type WorkbenchAdapterManifest } from "@workbench-ai/workbench-protocol";
|
|
2
|
-
import { type resolveWorkbenchResolvedSourceYaml } from "@workbench-ai/workbench-core";
|
|
3
|
-
export declare const WORKBENCH_ADAPTER_MANIFEST_FILE = "workbench.adapter.yaml";
|
|
4
|
-
export interface ResolvedWorkbenchAdapter {
|
|
5
|
-
source: string;
|
|
6
|
-
declaredSource: string;
|
|
7
|
-
kind: "default" | "path" | "npm" | "git";
|
|
8
|
-
stability: "default" | "local" | "pinned" | "floating";
|
|
9
|
-
overridesDefault?: boolean;
|
|
10
|
-
manifest: WorkbenchAdapterManifest;
|
|
11
|
-
root?: string;
|
|
12
|
-
files?: WorkbenchAdapterSourceFile[];
|
|
13
|
-
integrity?: string;
|
|
14
|
-
contentHash: string;
|
|
15
|
-
manifestHash: string;
|
|
16
|
-
}
|
|
17
|
-
export interface WorkbenchAdapterSourceFile {
|
|
18
|
-
path: string;
|
|
19
|
-
content: string;
|
|
20
|
-
executable: boolean;
|
|
21
|
-
}
|
|
22
|
-
type GenericSpec = ReturnType<typeof resolveWorkbenchResolvedSourceYaml>;
|
|
23
|
-
export declare function defaultAdapterManifests(): WorkbenchAdapterManifest[];
|
|
24
|
-
export declare function resolveDefaultWorkbenchAdapter(id: string): ResolvedWorkbenchAdapter | null;
|
|
25
|
-
export declare function resolveWorkbenchAdaptersForProject(dir: string, spec: GenericSpec): Promise<ResolvedWorkbenchAdapter[]>;
|
|
26
|
-
export declare function resolveProjectAdapterSource(dir: string, source: string): Promise<ResolvedWorkbenchAdapter>;
|
|
27
|
-
export declare function composeRuntimeDockerfileWithAdapters(dockerfile: string, adapters: readonly ResolvedWorkbenchAdapter[]): Promise<string>;
|
|
28
|
-
export {};
|
|
29
|
-
//# sourceMappingURL=adapter-project.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-project.d.ts","sourceRoot":"","sources":["../src/adapter-project.ts"],"names":[],"mappings":"AAWA,OAAO,EAKL,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAGL,KAAK,kCAAkC,EACxC,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AAIxE,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACzC,SAAS,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACvD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,wBAAwB,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,0BAA0B,EAAE,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAEzE,wBAAgB,uBAAuB,IAAI,wBAAwB,EAAE,CAEpE;AAED,wBAAgB,8BAA8B,CAAC,EAAE,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAG1F;AAED,wBAAsB,kCAAkC,CACtD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAmDrC;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC,CAwBnC;AAED,wBAAsB,oCAAoC,CACxD,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,SAAS,wBAAwB,EAAE,GAC5C,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|