@jmfederico/pi-web 1.202605.13 → 1.202606.0
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 +4 -0
- package/dist/cli.js +181 -24
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/{CodeViewer-ncgSvOQM.js → CodeViewer-N88Bx8F6.js} +1 -1
- package/dist/client/assets/TerminalPanel-DKiL51Xi.js +122 -0
- package/dist/client/assets/index-DeSR1RUE.js +1446 -0
- package/dist/client/index.html +1 -1
- package/dist/pi-web-plugins/pi-web/pi-web-plugin.js +23 -12
- package/dist/piWebVersionReport.js +221 -0
- package/dist/piWebVersionReport.js.map +1 -0
- package/dist/server/app.js +3 -2
- package/dist/server/app.js.map +1 -1
- package/dist/server/piWebStatus.js +166 -75
- package/dist/server/piWebStatus.js.map +1 -1
- package/dist/server/sessiond/sessionProxyRoutes.js +1 -1
- package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
- package/dist/server/sessiond.js +1 -1
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +122 -22
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/terminalProxyRoutes.js +1 -1
- package/dist/server/terminalProxyRoutes.js.map +1 -1
- package/dist/server/workspaces/fileSuggestions.js +76 -13
- package/dist/server/workspaces/fileSuggestions.js.map +1 -1
- package/dist/server/workspaces/fileTreeService.js +3 -3
- package/dist/server/workspaces/fileTreeService.js.map +1 -1
- package/dist/{server/sessiond → sessiond}/config.js +1 -1
- package/dist/sessiond/config.js.map +1 -0
- package/dist/sessiond/sessionDaemonClient.js.map +1 -0
- package/dist/shared/piWebStatusParsing.js +62 -0
- package/dist/shared/piWebStatusParsing.js.map +1 -0
- package/extensions/pi-web.ts +2 -1
- package/package.json +1 -1
- package/dist/client/assets/TerminalPanel-DjuVNsp5.js +0 -75
- package/dist/client/assets/index-CDGTKzLD.js +0 -1239
- package/dist/server/sessiond/config.js.map +0 -1
- package/dist/server/sessiond/sessionDaemonClient.js.map +0 -1
- /package/dist/{server/sessiond → sessiond}/sessionDaemonClient.js +0 -0
package/dist/client/index.html
CHANGED
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
html, body { margin: 0; height: 100%; overflow: hidden; background: var(--pi-bg); color: var(--pi-text); }
|
|
51
51
|
body { min-height: 100dvh; }
|
|
52
52
|
</style>
|
|
53
|
-
<script type="module" crossorigin src="/assets/index-
|
|
53
|
+
<script type="module" crossorigin src="/assets/index-DeSR1RUE.js"></script>
|
|
54
54
|
<link rel="modulepreload" crossorigin href="/assets/vendor-editor-core-B4Sq6exx.js">
|
|
55
55
|
<link rel="modulepreload" crossorigin href="/assets/vendor-editor-languages-DznYbTkJ.js">
|
|
56
56
|
</head>
|
|
@@ -61,12 +61,29 @@ function renderCommand(html, label, command) {
|
|
|
61
61
|
</div>
|
|
62
62
|
`;
|
|
63
63
|
}
|
|
64
|
+
function renderCommands(html, status) {
|
|
65
|
+
const commands = [
|
|
66
|
+
["Update", status.commands.update],
|
|
67
|
+
["Restart all", status.commands.restart],
|
|
68
|
+
["Restart Web/UI", status.commands.restartWeb],
|
|
69
|
+
["Restart session daemon", status.commands.restartSessiond],
|
|
70
|
+
["Status", status.commands.status],
|
|
71
|
+
].filter((entry) => typeof entry[1] === "string" && entry[1] !== "");
|
|
72
|
+
if (commands.length === 0)
|
|
73
|
+
return undefined;
|
|
74
|
+
return html `
|
|
75
|
+
<section>
|
|
76
|
+
<strong>Suggested commands</strong>
|
|
77
|
+
${commands.map(([label, command]) => renderCommand(html, label, command))}
|
|
78
|
+
</section>
|
|
79
|
+
`;
|
|
80
|
+
}
|
|
64
81
|
function renderStatusPanel(html, state) {
|
|
65
82
|
const status = statusFor(state);
|
|
66
83
|
if (status === undefined) {
|
|
67
84
|
return html `
|
|
68
|
-
<section class="toolbar"><strong>
|
|
69
|
-
<section class="viewer"><p class="muted">Checking PI WEB status…</p></section>
|
|
85
|
+
<section class="toolbar"><strong>Updates</strong></section>
|
|
86
|
+
<section class="viewer"><p class="muted">Checking PI WEB update status…</p></section>
|
|
70
87
|
`;
|
|
71
88
|
}
|
|
72
89
|
const messages = status.messages;
|
|
@@ -89,7 +106,7 @@ function renderStatusPanel(html, state) {
|
|
|
89
106
|
.pi-web-command > span { grid-column: 1 / -1; }
|
|
90
107
|
}
|
|
91
108
|
</style>
|
|
92
|
-
<section class="toolbar"><strong>
|
|
109
|
+
<section class="toolbar"><strong>Updates</strong><span class="stale">beta</span>${messages.length > 0 ? html `<span class="stale">${String(messages.length)}</span>` : null}</section>
|
|
93
110
|
<section class="viewer pi-web-status">
|
|
94
111
|
<section>
|
|
95
112
|
${messages.length === 0 ? html `<p class="muted">No PI WEB update or restart messages.</p>` : messages.map((message) => html `
|
|
@@ -107,13 +124,7 @@ function renderStatusPanel(html, state) {
|
|
|
107
124
|
${renderComponent(html, status.components.sessiond)}
|
|
108
125
|
</section>
|
|
109
126
|
|
|
110
|
-
|
|
111
|
-
<strong>Commands</strong>
|
|
112
|
-
${renderCommand(html, "Update", status.commands.update)}
|
|
113
|
-
${renderCommand(html, "Restart", status.commands.restart)}
|
|
114
|
-
${renderCommand(html, "systemd", status.commands.restartSystemd)}
|
|
115
|
-
${renderCommand(html, "dev", status.commands.restartDev)}
|
|
116
|
-
</section>
|
|
127
|
+
${renderCommands(html, status)}
|
|
117
128
|
|
|
118
129
|
<section class="pi-web-meta">
|
|
119
130
|
<span>Generated ${status.generatedAt}</span>
|
|
@@ -126,13 +137,13 @@ function renderStatusPanel(html, state) {
|
|
|
126
137
|
}
|
|
127
138
|
const plugin = {
|
|
128
139
|
apiVersion: 1,
|
|
129
|
-
name: "PI WEB
|
|
140
|
+
name: "PI WEB Updates",
|
|
130
141
|
activate: ({ html }) => ({
|
|
131
142
|
contributions: {
|
|
132
143
|
workspacePanels: [
|
|
133
144
|
{
|
|
134
145
|
id: "workspace.status",
|
|
135
|
-
title: "
|
|
146
|
+
title: "Updates",
|
|
136
147
|
order: 100,
|
|
137
148
|
visible: (context) => shouldShowStatusPanel(context.state),
|
|
138
149
|
badge: (context) => {
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { effectivePiWebConfig } from "./config.js";
|
|
5
|
+
import { SessionDaemonClient } from "./sessiond/sessionDaemonClient.js";
|
|
6
|
+
import { parsePiWebComponentStatus, parsePiWebVersionResponse } from "./shared/piWebStatusParsing.js";
|
|
7
|
+
const PI_WEB_PACKAGE_NAME = "@jmfederico/pi-web";
|
|
8
|
+
const PI_WEB_VERSION_TIMEOUT_MS = 2000;
|
|
9
|
+
const PI_WEB_VERSION_ENDPOINT_PATH = "/api/pi-web/version";
|
|
10
|
+
const PI_WEB_STATUS_ENDPOINT_PATH = "/api/pi-web/status";
|
|
11
|
+
const DEFAULT_PACKAGE_VERSION = "0.0.0-dev";
|
|
12
|
+
export function packageVersion() {
|
|
13
|
+
return readPackageInfo()?.version ?? DEFAULT_PACKAGE_VERSION;
|
|
14
|
+
}
|
|
15
|
+
export async function printPiWebVersionReport() {
|
|
16
|
+
console.log("PI WEB version");
|
|
17
|
+
printInstalledPackageVersions();
|
|
18
|
+
printRunningVersionInfo(await collectRunningVersionInfo());
|
|
19
|
+
}
|
|
20
|
+
function packageRootPath() {
|
|
21
|
+
return dirname(dirname(fileURLToPath(import.meta.url)));
|
|
22
|
+
}
|
|
23
|
+
function packageJsonPath() {
|
|
24
|
+
return join(packageRootPath(), "package.json");
|
|
25
|
+
}
|
|
26
|
+
function readPackageInfo() {
|
|
27
|
+
const path = packageJsonPath();
|
|
28
|
+
try {
|
|
29
|
+
return parsePackageInfo(JSON.parse(readFileSync(path, "utf8")), path);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function parsePackageInfo(value, path) {
|
|
36
|
+
if (!isRecord(value))
|
|
37
|
+
return undefined;
|
|
38
|
+
const name = value["name"];
|
|
39
|
+
const version = value["version"];
|
|
40
|
+
if (typeof name !== "string" || name === "" || typeof version !== "string" || version === "")
|
|
41
|
+
return undefined;
|
|
42
|
+
return { name, version, path };
|
|
43
|
+
}
|
|
44
|
+
function webVersionEndpoint() {
|
|
45
|
+
try {
|
|
46
|
+
const { config } = effectivePiWebConfig();
|
|
47
|
+
const host = httpClientHost(config.host);
|
|
48
|
+
const port = config.port ?? 8504;
|
|
49
|
+
return { endpoint: `http://${urlHost(host)}:${String(port)}${PI_WEB_VERSION_ENDPOINT_PATH}` };
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return { error: `could not read PI WEB config: ${errorMessage(error)}` };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function httpClientHost(configuredHost) {
|
|
56
|
+
const host = configuredHost === undefined || configuredHost === "" ? "127.0.0.1" : configuredHost;
|
|
57
|
+
if (host === "0.0.0.0" || host === "::" || host === "[::]")
|
|
58
|
+
return "127.0.0.1";
|
|
59
|
+
return host;
|
|
60
|
+
}
|
|
61
|
+
function urlHost(host) {
|
|
62
|
+
if (host.startsWith("[") || !host.includes(":"))
|
|
63
|
+
return host;
|
|
64
|
+
return `[${host}]`;
|
|
65
|
+
}
|
|
66
|
+
function statusEndpointFor(versionEndpoint) {
|
|
67
|
+
if (!versionEndpoint.endsWith(PI_WEB_VERSION_ENDPOINT_PATH))
|
|
68
|
+
return versionEndpoint;
|
|
69
|
+
return `${versionEndpoint.slice(0, -PI_WEB_VERSION_ENDPOINT_PATH.length)}${PI_WEB_STATUS_ENDPOINT_PATH}`;
|
|
70
|
+
}
|
|
71
|
+
async function fetchPiWebVersionResponse(endpoint) {
|
|
72
|
+
const response = await fetch(endpoint, {
|
|
73
|
+
headers: { accept: "application/json" },
|
|
74
|
+
signal: AbortSignal.timeout(PI_WEB_VERSION_TIMEOUT_MS),
|
|
75
|
+
});
|
|
76
|
+
if (!response.ok)
|
|
77
|
+
throw new Error(`HTTP ${String(response.status)}`);
|
|
78
|
+
const parsed = await response.json();
|
|
79
|
+
const status = parsePiWebVersionResponse(parsed);
|
|
80
|
+
if (status === undefined)
|
|
81
|
+
throw new Error("response did not include PI WEB version information");
|
|
82
|
+
return status;
|
|
83
|
+
}
|
|
84
|
+
async function collectRunningVersionInfo() {
|
|
85
|
+
const endpoint = webVersionEndpoint();
|
|
86
|
+
if (endpoint.endpoint !== undefined) {
|
|
87
|
+
try {
|
|
88
|
+
const status = await fetchPiWebVersionResponse(endpoint.endpoint);
|
|
89
|
+
return { generatedAt: status.generatedAt, web: status.components.web, sessiond: status.components.sessiond };
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
let webError = `${endpoint.endpoint}: ${errorMessage(error)}`;
|
|
93
|
+
const statusEndpoint = statusEndpointFor(endpoint.endpoint);
|
|
94
|
+
if (statusEndpoint !== endpoint.endpoint && isHttpNotFound(error)) {
|
|
95
|
+
try {
|
|
96
|
+
const status = await fetchPiWebVersionResponse(statusEndpoint);
|
|
97
|
+
return { generatedAt: status.generatedAt, web: status.components.web, sessiond: status.components.sessiond };
|
|
98
|
+
}
|
|
99
|
+
catch (statusError) {
|
|
100
|
+
webError = `${webError}; ${statusEndpoint}: ${errorMessage(statusError)}`;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return runningVersionInfoWithSessiondFallback({ webError });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return runningVersionInfoWithSessiondFallback({ webError: endpoint.error ?? "web/API status endpoint unavailable" });
|
|
107
|
+
}
|
|
108
|
+
async function runningVersionInfoWithSessiondFallback(base) {
|
|
109
|
+
const sessiond = await collectRunningSessiondInfo();
|
|
110
|
+
return {
|
|
111
|
+
webError: base.webError,
|
|
112
|
+
...(sessiond.component === undefined ? {} : { sessiond: sessiond.component }),
|
|
113
|
+
...(sessiond.error === undefined ? {} : { sessiondError: sessiond.error }),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
async function collectRunningSessiondInfo() {
|
|
117
|
+
try {
|
|
118
|
+
const response = await withTimeout(new SessionDaemonClient().request("GET", "/health"), PI_WEB_VERSION_TIMEOUT_MS, "session daemon health check timed out");
|
|
119
|
+
if (response.statusCode < 200 || response.statusCode >= 300)
|
|
120
|
+
throw new Error(`HTTP ${String(response.statusCode)}`);
|
|
121
|
+
const parsed = response.body === "" ? undefined : JSON.parse(response.body);
|
|
122
|
+
const version = isRecord(parsed) ? parsed["version"] : undefined;
|
|
123
|
+
const component = parsePiWebComponentStatus(version);
|
|
124
|
+
if (component === undefined)
|
|
125
|
+
throw new Error("health response did not include version information");
|
|
126
|
+
return { component };
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
return { error: errorMessage(error) };
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async function withTimeout(promise, timeoutMs, timeoutMessage) {
|
|
133
|
+
let timeout;
|
|
134
|
+
try {
|
|
135
|
+
return await Promise.race([
|
|
136
|
+
promise,
|
|
137
|
+
new Promise((_, reject) => {
|
|
138
|
+
timeout = setTimeout(() => {
|
|
139
|
+
reject(new Error(timeoutMessage));
|
|
140
|
+
}, timeoutMs);
|
|
141
|
+
}),
|
|
142
|
+
]);
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
if (timeout !== undefined)
|
|
146
|
+
clearTimeout(timeout);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function isHttpNotFound(error) {
|
|
150
|
+
return error instanceof Error && error.message === "HTTP 404";
|
|
151
|
+
}
|
|
152
|
+
function printInstalledPackageVersions() {
|
|
153
|
+
const info = readPackageInfo();
|
|
154
|
+
console.log("Installed packages:");
|
|
155
|
+
if (info === undefined) {
|
|
156
|
+
console.log(`? ${PI_WEB_PACKAGE_NAME}: unknown`);
|
|
157
|
+
console.log(` missing package metadata: ${packageJsonPath()}`);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
console.log(`✓ ${info.name}: ${info.version}`);
|
|
161
|
+
console.log(` ${info.path}`);
|
|
162
|
+
}
|
|
163
|
+
function printRunningVersionInfo(info) {
|
|
164
|
+
console.log("Running services:");
|
|
165
|
+
if (info.web === undefined)
|
|
166
|
+
printUnavailableComponent("Web/UI", info.webError);
|
|
167
|
+
else
|
|
168
|
+
printComponentVersion(info.web);
|
|
169
|
+
if (info.sessiond === undefined)
|
|
170
|
+
printUnavailableComponent("Session daemon", info.sessiondError);
|
|
171
|
+
else
|
|
172
|
+
printComponentVersion(info.sessiond);
|
|
173
|
+
if (info.generatedAt !== undefined)
|
|
174
|
+
console.log(` reported by web/API at ${info.generatedAt}`);
|
|
175
|
+
}
|
|
176
|
+
function printComponentVersion(component) {
|
|
177
|
+
const icon = component.available ? component.stale ? "!" : "✓" : "?";
|
|
178
|
+
const status = !component.available ? "unavailable" : component.stale ? "restart needed" : "current";
|
|
179
|
+
console.log(`${icon} ${component.label}: ${status}`);
|
|
180
|
+
if (component.available || component.runtimeVersion !== undefined || component.installedVersion !== undefined) {
|
|
181
|
+
console.log(` running: ${formatVersion(component.runtimeVersion)}; installed: ${formatVersion(component.installedVersion)}`);
|
|
182
|
+
}
|
|
183
|
+
const installation = installationLabel(component.installation);
|
|
184
|
+
if (installation !== undefined)
|
|
185
|
+
console.log(` installation: ${installation}`);
|
|
186
|
+
if (component.error !== undefined)
|
|
187
|
+
console.log(` ${component.error}`);
|
|
188
|
+
}
|
|
189
|
+
function printUnavailableComponent(label, error) {
|
|
190
|
+
console.log(`? ${label}: unavailable`);
|
|
191
|
+
if (error !== undefined && error !== "")
|
|
192
|
+
console.log(` ${error}`);
|
|
193
|
+
}
|
|
194
|
+
function installationLabel(installation) {
|
|
195
|
+
if (installation === undefined)
|
|
196
|
+
return undefined;
|
|
197
|
+
if (installation.kind === "pi-package") {
|
|
198
|
+
const source = installation.source ?? "Pi package";
|
|
199
|
+
const scope = installation.scope === undefined ? "" : ` · ${installation.scope}`;
|
|
200
|
+
const path = installation.path === undefined ? "" : ` · ${installation.path}`;
|
|
201
|
+
return `${source}${scope}${path}`;
|
|
202
|
+
}
|
|
203
|
+
if (installation.kind === "npm-global") {
|
|
204
|
+
const npmRoot = installation.npmRoot === undefined ? "" : ` · ${installation.npmRoot}`;
|
|
205
|
+
const path = installation.path === undefined ? "" : ` · ${installation.path}`;
|
|
206
|
+
return `global npm package${npmRoot}${path}`;
|
|
207
|
+
}
|
|
208
|
+
if (installation.kind === "local")
|
|
209
|
+
return installation.path === undefined ? "local checkout" : `local checkout · ${installation.path}`;
|
|
210
|
+
return installation.path === undefined ? "installation unknown" : `installation unknown · ${installation.path}`;
|
|
211
|
+
}
|
|
212
|
+
function formatVersion(version) {
|
|
213
|
+
return version === undefined || version === "" ? "unknown" : version;
|
|
214
|
+
}
|
|
215
|
+
function errorMessage(error) {
|
|
216
|
+
return error instanceof Error ? error.message : String(error);
|
|
217
|
+
}
|
|
218
|
+
function isRecord(value) {
|
|
219
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=piWebVersionReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"piWebVersionReport.js","sourceRoot":"","sources":["../src/piWebVersionReport.ts"],"names":[],"mappings":"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"}
|
package/dist/server/app.js
CHANGED
|
@@ -14,7 +14,7 @@ import { registerWorkspaceExplorerRoutes } from "./workspaceExplorerRoutes.js";
|
|
|
14
14
|
import { registerGitRoutes } from "./gitRoutes.js";
|
|
15
15
|
import { registerTerminalProxyRoutes } from "./terminalProxyRoutes.js";
|
|
16
16
|
import { PiWebPluginService } from "./piWebPluginService.js";
|
|
17
|
-
import { getPiWebStatus } from "./piWebStatus.js";
|
|
17
|
+
import { getPiWebStatus, getPiWebVersionStatus } from "./piWebStatus.js";
|
|
18
18
|
export async function buildApp(deps = {}) {
|
|
19
19
|
const app = Fastify({ logger: deps.logger ?? true });
|
|
20
20
|
await app.register(fastifyWebsocket);
|
|
@@ -29,6 +29,7 @@ export async function buildApp(deps = {}) {
|
|
|
29
29
|
return reply.type(asset.contentType).send(asset.content);
|
|
30
30
|
});
|
|
31
31
|
app.get("/api/pi-web/status", async () => getPiWebStatus());
|
|
32
|
+
app.get("/api/pi-web/version", async () => getPiWebVersionStatus());
|
|
32
33
|
app.get("/api/projects", async () => projects.list());
|
|
33
34
|
app.post("/api/projects", async (request, reply) => {
|
|
34
35
|
try {
|
|
@@ -74,7 +75,7 @@ export async function buildApp(deps = {}) {
|
|
|
74
75
|
try {
|
|
75
76
|
if (request.query.mode === "path")
|
|
76
77
|
return await listPathSuggestions(request.query.cwd, request.query.q ?? "");
|
|
77
|
-
return await listFileSuggestions(request.query.cwd, request.query.q ?? "", request.query.kind);
|
|
78
|
+
return await listFileSuggestions(request.query.cwd, request.query.q ?? "", { kind: request.query.kind, scope: request.query.scope });
|
|
78
79
|
}
|
|
79
80
|
catch (error) {
|
|
80
81
|
return reply.code(400).send({ error: error instanceof Error ? error.message : String(error) });
|
package/dist/server/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,OAA4D,MAAM,SAAS,CAAC;AACnF,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
|