@zuplo/editor 0.1.0 → 1.0.18282379434-dev
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/client/favicon-local.ico +0 -0
- package/dist/client/geist/Geist-Black.woff2 +0 -0
- package/dist/client/geist/Geist-Bold.woff2 +0 -0
- package/dist/client/geist/Geist-Light.woff2 +0 -0
- package/dist/client/geist/Geist-Medium.woff2 +0 -0
- package/dist/client/geist/Geist-Regular.woff2 +0 -0
- package/dist/client/geist/Geist-SemiBold.woff2 +0 -0
- package/dist/client/geist/Geist-Thin.woff2 +0 -0
- package/dist/client/geist/Geist-UltraBlack.woff2 +2151 -0
- package/dist/client/geist/Geist-UltraLight.woff2 +2151 -0
- package/dist/client/geist/fonts.css +71 -0
- package/dist/client/local-editor.html +5 -6
- package/dist/client/static/css/main-D3M2tKfG.css +1 -0
- package/dist/client/static/img/hero-CA-QKTbm.svg +28 -0
- package/dist/client/static/js/local-worker-CfP0n5rz.js +2 -0
- package/dist/client/static/js/local-worker-CfP0n5rz.js.map +1 -0
- package/dist/client/static/js/main-KuPTzIza.js +2074 -0
- package/dist/client/static/js/main-KuPTzIza.js.map +1 -0
- package/dist/routes/api.d.ts +12 -0
- package/dist/routes/api.d.ts.map +1 -0
- package/dist/routes/api.js +112 -0
- package/dist/routes/api.js.map +1 -0
- package/dist/routes/editor.d.ts +7 -0
- package/dist/routes/editor.d.ts.map +1 -0
- package/dist/routes/editor.js +151 -0
- package/dist/routes/editor.js.map +1 -0
- package/dist/routes/fs.d.ts.map +1 -1
- package/dist/routes/fs.js +97 -4
- package/dist/routes/fs.js.map +1 -1
- package/dist/routes/test.d.ts +10 -0
- package/dist/routes/test.d.ts.map +1 -0
- package/dist/routes/test.js +68 -0
- package/dist/routes/test.js.map +1 -0
- package/dist/server.d.ts +4 -13
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +106 -90
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/dist/client/assets/local-editor-C-tz9jAp.js +0 -2048
- package/dist/client/assets/local-editor-DTOl6Htj.css +0 -1
- package/dist/client/manifest.json +0 -25
- package/dist/client/monaco/min/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.de.js +0 -8
- package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.es.js +0 -8
- package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.fr.js +0 -8
- package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.it.js +0 -8
- package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.ja.js +0 -8
- package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.js +0 -8
- package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.ko.js +0 -8
- package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.ru.js +0 -8
- package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.zh-cn.js +0 -8
- package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.zh-tw.js +0 -8
- package/dist/client/monaco/min/vs/base/worker/workerMain.js +0 -30
- package/dist/client/monaco/min/vs/basic-languages/abap/abap.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/apex/apex.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/azcli/azcli.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/bat/bat.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/bicep/bicep.js +0 -11
- package/dist/client/monaco/min/vs/basic-languages/cameligo/cameligo.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/clojure/clojure.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/coffee/coffee.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/cpp/cpp.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/csharp/csharp.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/csp/csp.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/css/css.js +0 -12
- package/dist/client/monaco/min/vs/basic-languages/cypher/cypher.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/dart/dart.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/dockerfile/dockerfile.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/ecl/ecl.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/elixir/elixir.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/flow9/flow9.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/freemarker2/freemarker2.js +0 -12
- package/dist/client/monaco/min/vs/basic-languages/fsharp/fsharp.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/go/go.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/graphql/graphql.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/handlebars/handlebars.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/hcl/hcl.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/html/html.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/ini/ini.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/java/java.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/javascript/javascript.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/julia/julia.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/kotlin/kotlin.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/less/less.js +0 -11
- package/dist/client/monaco/min/vs/basic-languages/lexon/lexon.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/liquid/liquid.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/lua/lua.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/m3/m3.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/markdown/markdown.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/mdx/mdx.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/mips/mips.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/msdax/msdax.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/mysql/mysql.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/objective-c/objective-c.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/pascal/pascal.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/pascaligo/pascaligo.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/perl/perl.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/pgsql/pgsql.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/php/php.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/pla/pla.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/postiats/postiats.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/powerquery/powerquery.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/powershell/powershell.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/protobuf/protobuf.js +0 -11
- package/dist/client/monaco/min/vs/basic-languages/pug/pug.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/python/python.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/qsharp/qsharp.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/r/r.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/razor/razor.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/redis/redis.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/redshift/redshift.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/restructuredtext/restructuredtext.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/ruby/ruby.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/rust/rust.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/sb/sb.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/scala/scala.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/scheme/scheme.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/scss/scss.js +0 -12
- package/dist/client/monaco/min/vs/basic-languages/shell/shell.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/solidity/solidity.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/sophia/sophia.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/sparql/sparql.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/sql/sql.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/st/st.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/swift/swift.js +0 -13
- package/dist/client/monaco/min/vs/basic-languages/systemverilog/systemverilog.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/tcl/tcl.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/twig/twig.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/typescript/typescript.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/typespec/typespec.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/vb/vb.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/wgsl/wgsl.js +0 -307
- package/dist/client/monaco/min/vs/basic-languages/xml/xml.js +0 -10
- package/dist/client/monaco/min/vs/basic-languages/yaml/yaml.js +0 -10
- package/dist/client/monaco/min/vs/editor/editor.main.css +0 -8
- package/dist/client/monaco/min/vs/editor/editor.main.js +0 -768
- package/dist/client/monaco/min/vs/editor/editor.main.nls.de.js +0 -17
- package/dist/client/monaco/min/vs/editor/editor.main.nls.es.js +0 -17
- package/dist/client/monaco/min/vs/editor/editor.main.nls.fr.js +0 -15
- package/dist/client/monaco/min/vs/editor/editor.main.nls.it.js +0 -15
- package/dist/client/monaco/min/vs/editor/editor.main.nls.ja.js +0 -17
- package/dist/client/monaco/min/vs/editor/editor.main.nls.js +0 -15
- package/dist/client/monaco/min/vs/editor/editor.main.nls.ko.js +0 -15
- package/dist/client/monaco/min/vs/editor/editor.main.nls.ru.js +0 -17
- package/dist/client/monaco/min/vs/editor/editor.main.nls.zh-cn.js +0 -17
- package/dist/client/monaco/min/vs/editor/editor.main.nls.zh-tw.js +0 -15
- package/dist/client/monaco/min/vs/language/css/cssMode.js +0 -13
- package/dist/client/monaco/min/vs/language/css/cssWorker.js +0 -77
- package/dist/client/monaco/min/vs/language/html/htmlMode.js +0 -13
- package/dist/client/monaco/min/vs/language/html/htmlWorker.js +0 -454
- package/dist/client/monaco/min/vs/language/json/jsonMode.js +0 -19
- package/dist/client/monaco/min/vs/language/json/jsonWorker.js +0 -42
- package/dist/client/monaco/min/vs/language/typescript/tsMode.js +0 -20
- package/dist/client/monaco/min/vs/language/typescript/tsWorker.js +0 -51328
- package/dist/client/monaco/min/vs/loader.js +0 -11
- package/dist/routes/files.d.ts +0 -3
- package/dist/routes/files.d.ts.map +0 -1
- package/dist/routes/files.js +0 -10
- package/dist/routes/files.js.map +0 -1
- package/dist/routes/modules.d.ts +0 -3
- package/dist/routes/modules.d.ts.map +0 -1
- package/dist/routes/modules.js +0 -47
- package/dist/routes/modules.js.map +0 -1
@@ -0,0 +1,12 @@
|
|
1
|
+
import { FastifyInstance } from "fastify";
|
2
|
+
import type { Logger } from "pino";
|
3
|
+
interface ApiRoutesOptions {
|
4
|
+
workingDir: string;
|
5
|
+
portalRoot: string;
|
6
|
+
logger: Logger;
|
7
|
+
sseClients: Set<any>;
|
8
|
+
deploymentUrl: string;
|
9
|
+
}
|
10
|
+
export declare function createApiRoutes(fastify: FastifyInstance, options: ApiRoutesOptions): Promise<void>;
|
11
|
+
export {};
|
12
|
+
//# sourceMappingURL=api.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/routes/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAQnC,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA4Hf"}
|
@@ -0,0 +1,112 @@
|
|
1
|
+
import { createEditorRoutes } from "./editor.js";
|
2
|
+
import { createFsRoutes } from "./fs.js";
|
3
|
+
import { createTestRoutes } from "./test.js";
|
4
|
+
import { createTypesRoutes } from "./types.js";
|
5
|
+
const POLICIES_FILENAME = "policies.json";
|
6
|
+
export async function createApiRoutes(fastify, options) {
|
7
|
+
const { workingDir, portalRoot, logger, sseClients, deploymentUrl } = options;
|
8
|
+
// Filesystem routes
|
9
|
+
await fastify.register(createFsRoutes, {
|
10
|
+
prefix: "/v1/deployments/local/fs",
|
11
|
+
workingDir,
|
12
|
+
});
|
13
|
+
// Types routes (for serving TypeScript definitions)
|
14
|
+
await fastify.register(createTypesRoutes, {
|
15
|
+
prefix: "/types",
|
16
|
+
portalRoot,
|
17
|
+
});
|
18
|
+
// Editor routes (for opening files in external editor)
|
19
|
+
await fastify.register(createEditorRoutes, {
|
20
|
+
prefix: "/v1/editor",
|
21
|
+
workingDir,
|
22
|
+
});
|
23
|
+
// Test routes (for proxying test requests to local Zuplo gateway)
|
24
|
+
await fastify.register(createTestRoutes, {
|
25
|
+
prefix: "/v1",
|
26
|
+
workingDir,
|
27
|
+
logger,
|
28
|
+
deploymentUrl,
|
29
|
+
});
|
30
|
+
// Server-Sent Events for file changes
|
31
|
+
fastify.get("/changes", async (request, reply) => {
|
32
|
+
// Hijack the reply to keep connection open
|
33
|
+
reply.hijack();
|
34
|
+
reply.raw.writeHead(200, {
|
35
|
+
"Content-Type": "text/event-stream",
|
36
|
+
"Cache-Control": "no-cache",
|
37
|
+
Connection: "keep-alive",
|
38
|
+
"X-Accel-Buffering": "no", // Disable nginx buffering
|
39
|
+
});
|
40
|
+
// Flush headers immediately
|
41
|
+
if (typeof reply.raw.flushHeaders === "function") {
|
42
|
+
reply.raw.flushHeaders();
|
43
|
+
}
|
44
|
+
// Send initial event
|
45
|
+
reply.raw.write(`data: ${JSON.stringify({ type: "init", filePath: POLICIES_FILENAME })}\n\n`);
|
46
|
+
sseClients.add(reply.raw);
|
47
|
+
// Send keep-alive comments every 30 seconds to prevent timeouts
|
48
|
+
const keepAliveInterval = setInterval(() => {
|
49
|
+
try {
|
50
|
+
reply.raw.write(": keep-alive\n\n");
|
51
|
+
}
|
52
|
+
catch {
|
53
|
+
clearInterval(keepAliveInterval);
|
54
|
+
}
|
55
|
+
}, 30000);
|
56
|
+
request.raw.on("close", () => {
|
57
|
+
clearInterval(keepAliveInterval);
|
58
|
+
sseClients.delete(reply.raw);
|
59
|
+
});
|
60
|
+
request.raw.on("error", (err) => {
|
61
|
+
logger.error(`SSE connection error: ${err.message}`);
|
62
|
+
clearInterval(keepAliveInterval);
|
63
|
+
sseClients.delete(reply.raw);
|
64
|
+
});
|
65
|
+
});
|
66
|
+
// Health check
|
67
|
+
fastify.get("/ping", async (_request, reply) => {
|
68
|
+
reply.status(200).send();
|
69
|
+
});
|
70
|
+
// Get deployment info (includes URL for local gateway)
|
71
|
+
fastify.get("/v1/deployments/local", async (_request, reply) => {
|
72
|
+
reply.status(200).send({
|
73
|
+
deploymentVersion: {
|
74
|
+
stages: [
|
75
|
+
{
|
76
|
+
stage: "api",
|
77
|
+
url: deploymentUrl,
|
78
|
+
},
|
79
|
+
],
|
80
|
+
},
|
81
|
+
});
|
82
|
+
});
|
83
|
+
// Serve CDN content (schemas, etc) by proxying to the real Zuplo CDN
|
84
|
+
// The frontend is configured with CDN_URL="/api" in local mode
|
85
|
+
// So requests like /api/schemas/openapi-v3.1-zuplo.json need to be proxied
|
86
|
+
fastify.get("/schemas/*", async (request, reply) => {
|
87
|
+
// Remove /api prefix and fetch from CDN
|
88
|
+
const cdnPath = request.url.replace("/api", "");
|
89
|
+
const cdnUrl = `https://cdn.zuplo.com${cdnPath}`;
|
90
|
+
try {
|
91
|
+
const response = await fetch(cdnUrl);
|
92
|
+
if (!response.ok) {
|
93
|
+
return reply.status(response.status).send("Not found");
|
94
|
+
}
|
95
|
+
const contentType = response.headers.get("content-type");
|
96
|
+
if (contentType) {
|
97
|
+
reply.header("Content-Type", contentType);
|
98
|
+
}
|
99
|
+
const data = await response.text();
|
100
|
+
reply.send(data);
|
101
|
+
}
|
102
|
+
catch {
|
103
|
+
logger.error(`Failed to fetch from CDN: ${cdnUrl}`);
|
104
|
+
reply.status(404).send("Not found");
|
105
|
+
}
|
106
|
+
});
|
107
|
+
// Catch-all for unhandled API routes - return 404
|
108
|
+
fastify.all("/*", async (_request, reply) => {
|
109
|
+
reply.status(404).send({ error: "Not found" });
|
110
|
+
});
|
111
|
+
}
|
112
|
+
//# sourceMappingURL=api.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/routes/api.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import type { FastifyInstance, FastifyPluginOptions } from "fastify";
|
2
|
+
interface EditorRoutesOptions extends FastifyPluginOptions {
|
3
|
+
workingDir: string;
|
4
|
+
}
|
5
|
+
export declare function createEditorRoutes(fastify: FastifyInstance, options: EditorRoutesOptions): Promise<void>;
|
6
|
+
export {};
|
7
|
+
//# sourceMappingURL=editor.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/routes/editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAgErE,UAAU,mBAAoB,SAAQ,oBAAoB;IACxD,UAAU,EAAE,MAAM,CAAC;CACpB;AAqBD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAkGf"}
|
@@ -0,0 +1,151 @@
|
|
1
|
+
import fs from "node:fs/promises";
|
2
|
+
import { homedir } from "node:os";
|
3
|
+
import path from "node:path";
|
4
|
+
// XDG config directory helpers
|
5
|
+
function getXdgConfigHome() {
|
6
|
+
return process.env.XDG_CONFIG_HOME ?? path.join(homedir(), ".config");
|
7
|
+
}
|
8
|
+
function getZuploConfigDir() {
|
9
|
+
return path.join(getXdgConfigHome(), "zuplo");
|
10
|
+
}
|
11
|
+
function getEditorConfigPath() {
|
12
|
+
return path.join(getZuploConfigDir(), "editor.json");
|
13
|
+
}
|
14
|
+
const EDITORS = {
|
15
|
+
vscode: {
|
16
|
+
name: "Visual Studio Code",
|
17
|
+
protocol: "vscode",
|
18
|
+
urlTemplate: "vscode://file{file}:{line}:{column}",
|
19
|
+
detectFiles: [".vscode/settings.json"],
|
20
|
+
},
|
21
|
+
cursor: {
|
22
|
+
name: "Cursor",
|
23
|
+
protocol: "cursor",
|
24
|
+
urlTemplate: "cursor://file{file}:{line}:{column}",
|
25
|
+
detectFiles: [".cursor"],
|
26
|
+
},
|
27
|
+
webstorm: {
|
28
|
+
name: "WebStorm",
|
29
|
+
protocol: "webstorm",
|
30
|
+
urlTemplate: "webstorm://open?file={file}&line={line}",
|
31
|
+
detectFiles: [".idea"],
|
32
|
+
},
|
33
|
+
phpstorm: {
|
34
|
+
name: "PhpStorm",
|
35
|
+
protocol: "phpstorm",
|
36
|
+
urlTemplate: "phpstorm://open?file={file}&line={line}",
|
37
|
+
detectFiles: [".idea"],
|
38
|
+
},
|
39
|
+
intellij: {
|
40
|
+
name: "IntelliJ IDEA",
|
41
|
+
protocol: "idea",
|
42
|
+
urlTemplate: "idea://open?file={file}&line={line}",
|
43
|
+
detectFiles: [".idea"],
|
44
|
+
},
|
45
|
+
sublimetext: {
|
46
|
+
name: "Sublime Text",
|
47
|
+
protocol: "subl",
|
48
|
+
urlTemplate: "subl://open?url=file://{file}&line={line}&column={column}",
|
49
|
+
},
|
50
|
+
};
|
51
|
+
async function loadEditorPreference() {
|
52
|
+
try {
|
53
|
+
const configPath = getEditorConfigPath();
|
54
|
+
const data = await fs.readFile(configPath, "utf-8");
|
55
|
+
const config = JSON.parse(data);
|
56
|
+
return config.editor ?? null;
|
57
|
+
}
|
58
|
+
catch {
|
59
|
+
return null;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
async function saveEditorPreference(editor) {
|
63
|
+
const configDir = getZuploConfigDir();
|
64
|
+
await fs.mkdir(configDir, { recursive: true });
|
65
|
+
const configPath = getEditorConfigPath();
|
66
|
+
await fs.writeFile(configPath, JSON.stringify({ editor }, null, 2), "utf-8");
|
67
|
+
}
|
68
|
+
export async function createEditorRoutes(fastify, options) {
|
69
|
+
const { workingDir } = options;
|
70
|
+
// Detect editor: GET /editor/detect
|
71
|
+
fastify.get("/detect", async (_request, reply) => {
|
72
|
+
try {
|
73
|
+
// Check saved preference
|
74
|
+
const savedEditor = await loadEditorPreference();
|
75
|
+
if (savedEditor && EDITORS[savedEditor]) {
|
76
|
+
return reply.status(200).send({
|
77
|
+
editor: savedEditor,
|
78
|
+
name: EDITORS[savedEditor].name,
|
79
|
+
});
|
80
|
+
}
|
81
|
+
// No editor found
|
82
|
+
return reply.status(200).send({
|
83
|
+
editor: null,
|
84
|
+
name: null,
|
85
|
+
});
|
86
|
+
}
|
87
|
+
catch (err) {
|
88
|
+
return reply.status(500).send({
|
89
|
+
message: `Error detecting editor: ${err.message}`,
|
90
|
+
});
|
91
|
+
}
|
92
|
+
});
|
93
|
+
// Get available editors: GET /editor/list
|
94
|
+
fastify.get("/list", async (_request, reply) => {
|
95
|
+
const editors = Object.entries(EDITORS).map(([id, info]) => ({
|
96
|
+
id,
|
97
|
+
name: info.name,
|
98
|
+
}));
|
99
|
+
return reply.status(200).send({ editors });
|
100
|
+
});
|
101
|
+
// Save editor preference: POST /editor/preference
|
102
|
+
fastify.post("/preference", async (request, reply) => {
|
103
|
+
const { editor } = request.body;
|
104
|
+
if (!EDITORS[editor]) {
|
105
|
+
return reply.status(400).send({
|
106
|
+
message: `Unknown editor: ${editor}`,
|
107
|
+
});
|
108
|
+
}
|
109
|
+
try {
|
110
|
+
await saveEditorPreference(editor);
|
111
|
+
return reply.status(200).send({ success: true });
|
112
|
+
}
|
113
|
+
catch (err) {
|
114
|
+
return reply.status(500).send({
|
115
|
+
message: `Error saving preference: ${err.message}`,
|
116
|
+
});
|
117
|
+
}
|
118
|
+
});
|
119
|
+
// Get URL to open file in editor: POST /editor/open
|
120
|
+
fastify.post("/open", async (request, reply) => {
|
121
|
+
const { file, line = 1, column = 1 } = request.body;
|
122
|
+
if (!file) {
|
123
|
+
return reply.status(400).send({ message: "File path is required" });
|
124
|
+
}
|
125
|
+
try {
|
126
|
+
// Get editor preference
|
127
|
+
const savedEditor = await loadEditorPreference();
|
128
|
+
if (!savedEditor || !EDITORS[savedEditor]) {
|
129
|
+
return reply.status(400).send({
|
130
|
+
message: "No editor preference set",
|
131
|
+
});
|
132
|
+
}
|
133
|
+
const editor = EDITORS[savedEditor];
|
134
|
+
// Build file path
|
135
|
+
const relativePath = file.startsWith("/") ? file.slice(1) : file;
|
136
|
+
const fullPath = path.join(workingDir, relativePath);
|
137
|
+
// Build URL from template
|
138
|
+
const url = editor.urlTemplate
|
139
|
+
.replace("{file}", fullPath)
|
140
|
+
.replace("{line}", String(line))
|
141
|
+
.replace("{column}", String(column));
|
142
|
+
return reply.status(200).send({ url });
|
143
|
+
}
|
144
|
+
catch (err) {
|
145
|
+
return reply.status(500).send({
|
146
|
+
message: `Error building editor URL: ${err.message}`,
|
147
|
+
});
|
148
|
+
}
|
149
|
+
});
|
150
|
+
}
|
151
|
+
//# sourceMappingURL=editor.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/routes/editor.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/fs.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/routes/fs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAsBrE,UAAU,eAAgB,SAAQ,oBAAoB;IACpD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/routes/fs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAsBrE,UAAU,eAAgB,SAAQ,oBAAoB;IACpD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAkXf"}
|
package/dist/routes/fs.js
CHANGED
@@ -23,7 +23,7 @@ export async function createFsRoutes(fastify, options) {
|
|
23
23
|
// Match portal's file API shape but simplified for local: /api/fs/dir
|
24
24
|
fastify.get("/dir", async (request, reply) => {
|
25
25
|
try {
|
26
|
-
const requestPath = request.query.path
|
26
|
+
const requestPath = request.query.path ?? "/";
|
27
27
|
const recursive = request.query.recursive === "true";
|
28
28
|
const fileTree = [];
|
29
29
|
// Helper function to recursively read directory
|
@@ -54,7 +54,7 @@ export async function createFsRoutes(fastify, options) {
|
|
54
54
|
}
|
55
55
|
catch (err) {
|
56
56
|
// Silently skip directories that can't be read
|
57
|
-
|
57
|
+
request.log.warn(`Warning: Could not read directory ${dirPath}: ${err.message}`);
|
58
58
|
}
|
59
59
|
};
|
60
60
|
if (requestPath === "/") {
|
@@ -109,9 +109,15 @@ export async function createFsRoutes(fastify, options) {
|
|
109
109
|
return reply.status(404).send(`Cannot find file: ${filePath}`);
|
110
110
|
}
|
111
111
|
try {
|
112
|
+
// Get file stats for Last-Modified header
|
113
|
+
const stats = await fs.stat(fullPath);
|
112
114
|
const content = await fs.readFile(fullPath, "utf-8");
|
113
|
-
// Return raw content as text
|
114
|
-
reply
|
115
|
+
// Return raw content as text with Last-Modified header
|
116
|
+
reply
|
117
|
+
.status(200)
|
118
|
+
.type("text/plain")
|
119
|
+
.header("Last-Modified", stats.mtime.toUTCString())
|
120
|
+
.send(content);
|
115
121
|
}
|
116
122
|
catch (err) {
|
117
123
|
reply.status(500).send(`Error reading file: ${err.message}`);
|
@@ -129,6 +135,29 @@ export async function createFsRoutes(fastify, options) {
|
|
129
135
|
: filePath;
|
130
136
|
const fullPath = path.join(workingDir, relativePath);
|
131
137
|
try {
|
138
|
+
// Check if file exists and has been modified since client loaded it
|
139
|
+
// Skip conflict check if x-force-save header is present (user resolved conflict)
|
140
|
+
const forceSave = request.headers["x-force-save"];
|
141
|
+
if (!forceSave && (await fileExists(fullPath))) {
|
142
|
+
const stats = await fs.stat(fullPath);
|
143
|
+
const ifUnmodifiedSince = request.headers["if-unmodified-since"];
|
144
|
+
if (ifUnmodifiedSince) {
|
145
|
+
const clientTimestamp = new Date(ifUnmodifiedSince).getTime();
|
146
|
+
const fileTimestamp = stats.mtime.getTime();
|
147
|
+
// Allow 2 second tolerance for filesystem timestamp precision
|
148
|
+
// This prevents false positives from write operations
|
149
|
+
const TOLERANCE_MS = 2000;
|
150
|
+
// If file has been modified since client loaded it (beyond tolerance), return conflict error
|
151
|
+
if (fileTimestamp > clientTimestamp + TOLERANCE_MS) {
|
152
|
+
return reply.status(409).send({
|
153
|
+
type: "https://zup.fail/file-conflict",
|
154
|
+
title: "File has been modified",
|
155
|
+
status: 409,
|
156
|
+
detail: "The file has been modified on disk since you loaded it. Please resolve the conflict before saving.",
|
157
|
+
});
|
158
|
+
}
|
159
|
+
}
|
160
|
+
}
|
132
161
|
// Ensure parent directory exists
|
133
162
|
const dir = path.dirname(fullPath);
|
134
163
|
await fs.mkdir(dir, { recursive: true });
|
@@ -155,6 +184,70 @@ export async function createFsRoutes(fastify, options) {
|
|
155
184
|
});
|
156
185
|
}
|
157
186
|
});
|
187
|
+
// Write/create multiple files: POST /files (multipart)
|
188
|
+
fastify.post("/files", async (request, reply) => {
|
189
|
+
if (!request.isMultipart()) {
|
190
|
+
return reply.status(400).send({
|
191
|
+
type: "https://zup.fail/invalid-request",
|
192
|
+
title: "Request must be multipart/form-data",
|
193
|
+
status: 400,
|
194
|
+
});
|
195
|
+
}
|
196
|
+
try {
|
197
|
+
const parts = request.parts({ preservePath: true });
|
198
|
+
const conflictedFiles = [];
|
199
|
+
for await (const part of parts) {
|
200
|
+
if (part.type === "file" && part.filename) {
|
201
|
+
// Remove leading slash for path.join to work correctly
|
202
|
+
const relativePath = part.filename.startsWith("/")
|
203
|
+
? part.filename.slice(1)
|
204
|
+
: part.filename;
|
205
|
+
const fullPath = path.join(workingDir, relativePath);
|
206
|
+
// Check for conflicts using custom header
|
207
|
+
if (await fileExists(fullPath)) {
|
208
|
+
const headerKey = `x-if-unmodified-since-${encodeURIComponent(`/${relativePath}`)}`.toLowerCase();
|
209
|
+
const ifUnmodifiedSince = request.headers[headerKey];
|
210
|
+
if (ifUnmodifiedSince) {
|
211
|
+
const stats = await fs.stat(fullPath);
|
212
|
+
const clientTimestamp = new Date(ifUnmodifiedSince).getTime();
|
213
|
+
const fileTimestamp = stats.mtime.getTime();
|
214
|
+
// Allow 2 second tolerance for filesystem timestamp precision
|
215
|
+
const TOLERANCE_MS = 2000;
|
216
|
+
if (fileTimestamp > clientTimestamp + TOLERANCE_MS) {
|
217
|
+
conflictedFiles.push(`/${relativePath}`);
|
218
|
+
continue;
|
219
|
+
}
|
220
|
+
}
|
221
|
+
}
|
222
|
+
// Ensure parent directory exists
|
223
|
+
const dir = path.dirname(fullPath);
|
224
|
+
await fs.mkdir(dir, { recursive: true });
|
225
|
+
// Write the file using the stream
|
226
|
+
const buffer = await part.toBuffer();
|
227
|
+
await fs.writeFile(fullPath, buffer);
|
228
|
+
}
|
229
|
+
}
|
230
|
+
// If any files had conflicts, return 409
|
231
|
+
if (conflictedFiles.length > 0) {
|
232
|
+
return reply.status(409).send({
|
233
|
+
type: "https://zup.fail/file-conflict",
|
234
|
+
title: "File conflicts detected",
|
235
|
+
status: 409,
|
236
|
+
detail: `The following files have been modified on disk since you loaded them: ${conflictedFiles.join(", ")}`,
|
237
|
+
conflictedFiles,
|
238
|
+
});
|
239
|
+
}
|
240
|
+
reply.status(200).send({ buildId: "local-build-" + Date.now() });
|
241
|
+
}
|
242
|
+
catch (err) {
|
243
|
+
reply.status(500).send({
|
244
|
+
type: "https://zup.fail/file-write-failed",
|
245
|
+
title: "File write failed",
|
246
|
+
status: 500,
|
247
|
+
message: err.message,
|
248
|
+
});
|
249
|
+
}
|
250
|
+
});
|
158
251
|
// Rename a file: PATCH /api/fs/file?path=...
|
159
252
|
fastify.patch("/file", async (request, reply) => {
|
160
253
|
const oldPath = request.query.path;
|
package/dist/routes/fs.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/routes/fs.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/routes/fs.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { FastifyInstance } from "fastify";
|
2
|
+
import type { Logger } from "pino";
|
3
|
+
interface TestRoutesOptions {
|
4
|
+
workingDir: string;
|
5
|
+
logger: Logger;
|
6
|
+
deploymentUrl: string;
|
7
|
+
}
|
8
|
+
export declare function createTestRoutes(fastify: FastifyInstance, options: TestRoutesOptions): Promise<void>;
|
9
|
+
export {};
|
10
|
+
//# sourceMappingURL=test.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/routes/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,UAAU,iBAAiB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAUD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CA6Ef"}
|
@@ -0,0 +1,68 @@
|
|
1
|
+
export async function createTestRoutes(fastify, options) {
|
2
|
+
const { logger } = options;
|
3
|
+
// Test endpoint that proxies requests to the local Zuplo gateway
|
4
|
+
fastify.post("/test", async (request, reply) => {
|
5
|
+
const testRequest = request.body;
|
6
|
+
const { method, path, headers = {}, body, overrideUrl } = testRequest;
|
7
|
+
// Default to localhost:9000 for local Zuplo gateway
|
8
|
+
const targetUrl = overrideUrl ?? options.deploymentUrl;
|
9
|
+
const fullUrl = `${targetUrl}${path}`;
|
10
|
+
try {
|
11
|
+
logger.info(`Proxying test request: ${method} ${fullUrl}`);
|
12
|
+
// Clean headers - remove host and other problematic headers
|
13
|
+
const cleanHeaders = {};
|
14
|
+
for (const [key, value] of Object.entries(headers)) {
|
15
|
+
const lowerKey = key.toLowerCase();
|
16
|
+
// Skip headers that shouldn't be forwarded
|
17
|
+
if (lowerKey !== "host" && lowerKey !== "connection") {
|
18
|
+
cleanHeaders[key] = value;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
// Create fetch options
|
22
|
+
const fetchOptions = {
|
23
|
+
method,
|
24
|
+
headers: cleanHeaders,
|
25
|
+
};
|
26
|
+
// Add body for non-GET/HEAD requests
|
27
|
+
if (body && !["GET", "HEAD"].includes(method.toUpperCase())) {
|
28
|
+
fetchOptions.body = body;
|
29
|
+
}
|
30
|
+
// Make the request to the local gateway
|
31
|
+
const response = await fetch(fullUrl, fetchOptions);
|
32
|
+
// Capture response
|
33
|
+
const responseBody = await response.text();
|
34
|
+
const responseHeaders = {};
|
35
|
+
// Convert headers to plain object
|
36
|
+
response.headers.forEach((value, key) => {
|
37
|
+
responseHeaders[key] = value;
|
38
|
+
});
|
39
|
+
// Return test result in the format expected by the frontend
|
40
|
+
reply.status(200).send({
|
41
|
+
status: response.status,
|
42
|
+
statusText: response.statusText,
|
43
|
+
headers: responseHeaders,
|
44
|
+
body: responseBody,
|
45
|
+
});
|
46
|
+
}
|
47
|
+
catch (err) {
|
48
|
+
logger.error(`Error proxying test request: ${err.message}`);
|
49
|
+
// Return a proper problem details response
|
50
|
+
const problemDetails = {
|
51
|
+
type: "https://zuplo.com/problems/local-gateway-unavailable",
|
52
|
+
title: "Local Gateway Unavailable",
|
53
|
+
status: 503,
|
54
|
+
detail: `Could not connect to the local Zuplo gateway at ${targetUrl}. Make sure your local gateway is running.`,
|
55
|
+
instance: fullUrl,
|
56
|
+
};
|
57
|
+
reply.status(200).send({
|
58
|
+
status: 503,
|
59
|
+
statusText: "Service Unavailable",
|
60
|
+
headers: {
|
61
|
+
"content-type": "application/problem+json",
|
62
|
+
},
|
63
|
+
body: JSON.stringify(problemDetails, null, 2),
|
64
|
+
});
|
65
|
+
}
|
66
|
+
});
|
67
|
+
}
|
68
|
+
//# sourceMappingURL=test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/routes/test.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
@@ -3,17 +3,8 @@ import type { Logger } from "pino";
|
|
3
3
|
interface ServerOptions {
|
4
4
|
workingDir: string;
|
5
5
|
port: number;
|
6
|
-
/**
|
7
|
-
* Path to the built client assets directory.
|
8
|
-
* If not provided, will use Vite dev server (development mode only).
|
9
|
-
*/
|
10
|
-
clientPath?: string;
|
11
|
-
/**
|
12
|
-
* Path to vite.config.ts for development mode.
|
13
|
-
* Only used when clientPath is not provided.
|
14
|
-
*/
|
15
|
-
viteConfigPath?: string;
|
16
6
|
logger: Logger;
|
7
|
+
deploymentUrl: string;
|
17
8
|
}
|
18
9
|
export declare class LocalEditorServer {
|
19
10
|
app: FastifyInstance;
|
@@ -22,10 +13,10 @@ export declare class LocalEditorServer {
|
|
22
13
|
private sseClients;
|
23
14
|
private workingDir;
|
24
15
|
private listenerPort;
|
25
|
-
private clientPath?;
|
26
|
-
private viteConfigPath?;
|
27
|
-
private vite;
|
28
16
|
private logger;
|
17
|
+
private vite;
|
18
|
+
private portalRoot;
|
19
|
+
private deploymentUrl;
|
29
20
|
constructor(options: ServerOptions);
|
30
21
|
init: () => Promise<void>;
|
31
22
|
start: () => Promise<void>;
|
package/dist/server.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAMA,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAIxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAUnC,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAiB;IACrB,GAAG,EAAE,eAAe,CAAC;IAC5B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;gBAElB,OAAO,EAAE,aAAa;IAsBlC,IAAI,QAAa,OAAO,CAAC,IAAI,CAAC,CAuJ5B;IAEF,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAM7B;IAEF,IAAI,QAAa,OAAO,CAAC,IAAI,CAAC,CAM5B;CACH"}
|