@zuplo/editor 0.1.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.
Files changed (167) hide show
  1. package/dist/client/assets/local-editor-C-tz9jAp.js +2048 -0
  2. package/dist/client/assets/local-editor-DTOl6Htj.css +1 -0
  3. package/dist/client/burglar.png +0 -0
  4. package/dist/client/dot-pattern.png +0 -0
  5. package/dist/client/example-image.png +0 -0
  6. package/dist/client/favicon.ico +0 -0
  7. package/dist/client/favicon.png +0 -0
  8. package/dist/client/frame0.png +0 -0
  9. package/dist/client/icons/arrow_head_down.svg +7 -0
  10. package/dist/client/icons/arrow_head_up.svg +7 -0
  11. package/dist/client/icons/arrow_line.svg +7 -0
  12. package/dist/client/icons/arrow_picker_black.svg +3 -0
  13. package/dist/client/icons/arrow_picker_pink.svg +3 -0
  14. package/dist/client/icons/discord.svg +10 -0
  15. package/dist/client/icons/drag-handle-minor.svg +1 -0
  16. package/dist/client/icons/drag_2x8.svg +28 -0
  17. package/dist/client/icons/edit_mode.svg +4 -0
  18. package/dist/client/local-editor.html +19 -0
  19. package/dist/client/manifest.json +25 -0
  20. package/dist/client/monaco/min/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  21. package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.de.js +8 -0
  22. package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.es.js +8 -0
  23. package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.fr.js +8 -0
  24. package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.it.js +8 -0
  25. package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.ja.js +8 -0
  26. package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.js +8 -0
  27. package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.ko.js +8 -0
  28. package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.ru.js +8 -0
  29. package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.zh-cn.js +8 -0
  30. package/dist/client/monaco/min/vs/base/common/worker/simpleWorker.nls.zh-tw.js +8 -0
  31. package/dist/client/monaco/min/vs/base/worker/workerMain.js +30 -0
  32. package/dist/client/monaco/min/vs/basic-languages/abap/abap.js +10 -0
  33. package/dist/client/monaco/min/vs/basic-languages/apex/apex.js +10 -0
  34. package/dist/client/monaco/min/vs/basic-languages/azcli/azcli.js +10 -0
  35. package/dist/client/monaco/min/vs/basic-languages/bat/bat.js +10 -0
  36. package/dist/client/monaco/min/vs/basic-languages/bicep/bicep.js +11 -0
  37. package/dist/client/monaco/min/vs/basic-languages/cameligo/cameligo.js +10 -0
  38. package/dist/client/monaco/min/vs/basic-languages/clojure/clojure.js +10 -0
  39. package/dist/client/monaco/min/vs/basic-languages/coffee/coffee.js +10 -0
  40. package/dist/client/monaco/min/vs/basic-languages/cpp/cpp.js +10 -0
  41. package/dist/client/monaco/min/vs/basic-languages/csharp/csharp.js +10 -0
  42. package/dist/client/monaco/min/vs/basic-languages/csp/csp.js +10 -0
  43. package/dist/client/monaco/min/vs/basic-languages/css/css.js +12 -0
  44. package/dist/client/monaco/min/vs/basic-languages/cypher/cypher.js +10 -0
  45. package/dist/client/monaco/min/vs/basic-languages/dart/dart.js +10 -0
  46. package/dist/client/monaco/min/vs/basic-languages/dockerfile/dockerfile.js +10 -0
  47. package/dist/client/monaco/min/vs/basic-languages/ecl/ecl.js +10 -0
  48. package/dist/client/monaco/min/vs/basic-languages/elixir/elixir.js +10 -0
  49. package/dist/client/monaco/min/vs/basic-languages/flow9/flow9.js +10 -0
  50. package/dist/client/monaco/min/vs/basic-languages/freemarker2/freemarker2.js +12 -0
  51. package/dist/client/monaco/min/vs/basic-languages/fsharp/fsharp.js +10 -0
  52. package/dist/client/monaco/min/vs/basic-languages/go/go.js +10 -0
  53. package/dist/client/monaco/min/vs/basic-languages/graphql/graphql.js +10 -0
  54. package/dist/client/monaco/min/vs/basic-languages/handlebars/handlebars.js +10 -0
  55. package/dist/client/monaco/min/vs/basic-languages/hcl/hcl.js +10 -0
  56. package/dist/client/monaco/min/vs/basic-languages/html/html.js +10 -0
  57. package/dist/client/monaco/min/vs/basic-languages/ini/ini.js +10 -0
  58. package/dist/client/monaco/min/vs/basic-languages/java/java.js +10 -0
  59. package/dist/client/monaco/min/vs/basic-languages/javascript/javascript.js +10 -0
  60. package/dist/client/monaco/min/vs/basic-languages/julia/julia.js +10 -0
  61. package/dist/client/monaco/min/vs/basic-languages/kotlin/kotlin.js +10 -0
  62. package/dist/client/monaco/min/vs/basic-languages/less/less.js +11 -0
  63. package/dist/client/monaco/min/vs/basic-languages/lexon/lexon.js +10 -0
  64. package/dist/client/monaco/min/vs/basic-languages/liquid/liquid.js +10 -0
  65. package/dist/client/monaco/min/vs/basic-languages/lua/lua.js +10 -0
  66. package/dist/client/monaco/min/vs/basic-languages/m3/m3.js +10 -0
  67. package/dist/client/monaco/min/vs/basic-languages/markdown/markdown.js +10 -0
  68. package/dist/client/monaco/min/vs/basic-languages/mdx/mdx.js +10 -0
  69. package/dist/client/monaco/min/vs/basic-languages/mips/mips.js +10 -0
  70. package/dist/client/monaco/min/vs/basic-languages/msdax/msdax.js +10 -0
  71. package/dist/client/monaco/min/vs/basic-languages/mysql/mysql.js +10 -0
  72. package/dist/client/monaco/min/vs/basic-languages/objective-c/objective-c.js +10 -0
  73. package/dist/client/monaco/min/vs/basic-languages/pascal/pascal.js +10 -0
  74. package/dist/client/monaco/min/vs/basic-languages/pascaligo/pascaligo.js +10 -0
  75. package/dist/client/monaco/min/vs/basic-languages/perl/perl.js +10 -0
  76. package/dist/client/monaco/min/vs/basic-languages/pgsql/pgsql.js +10 -0
  77. package/dist/client/monaco/min/vs/basic-languages/php/php.js +10 -0
  78. package/dist/client/monaco/min/vs/basic-languages/pla/pla.js +10 -0
  79. package/dist/client/monaco/min/vs/basic-languages/postiats/postiats.js +10 -0
  80. package/dist/client/monaco/min/vs/basic-languages/powerquery/powerquery.js +10 -0
  81. package/dist/client/monaco/min/vs/basic-languages/powershell/powershell.js +10 -0
  82. package/dist/client/monaco/min/vs/basic-languages/protobuf/protobuf.js +11 -0
  83. package/dist/client/monaco/min/vs/basic-languages/pug/pug.js +10 -0
  84. package/dist/client/monaco/min/vs/basic-languages/python/python.js +10 -0
  85. package/dist/client/monaco/min/vs/basic-languages/qsharp/qsharp.js +10 -0
  86. package/dist/client/monaco/min/vs/basic-languages/r/r.js +10 -0
  87. package/dist/client/monaco/min/vs/basic-languages/razor/razor.js +10 -0
  88. package/dist/client/monaco/min/vs/basic-languages/redis/redis.js +10 -0
  89. package/dist/client/monaco/min/vs/basic-languages/redshift/redshift.js +10 -0
  90. package/dist/client/monaco/min/vs/basic-languages/restructuredtext/restructuredtext.js +10 -0
  91. package/dist/client/monaco/min/vs/basic-languages/ruby/ruby.js +10 -0
  92. package/dist/client/monaco/min/vs/basic-languages/rust/rust.js +10 -0
  93. package/dist/client/monaco/min/vs/basic-languages/sb/sb.js +10 -0
  94. package/dist/client/monaco/min/vs/basic-languages/scala/scala.js +10 -0
  95. package/dist/client/monaco/min/vs/basic-languages/scheme/scheme.js +10 -0
  96. package/dist/client/monaco/min/vs/basic-languages/scss/scss.js +12 -0
  97. package/dist/client/monaco/min/vs/basic-languages/shell/shell.js +10 -0
  98. package/dist/client/monaco/min/vs/basic-languages/solidity/solidity.js +10 -0
  99. package/dist/client/monaco/min/vs/basic-languages/sophia/sophia.js +10 -0
  100. package/dist/client/monaco/min/vs/basic-languages/sparql/sparql.js +10 -0
  101. package/dist/client/monaco/min/vs/basic-languages/sql/sql.js +10 -0
  102. package/dist/client/monaco/min/vs/basic-languages/st/st.js +10 -0
  103. package/dist/client/monaco/min/vs/basic-languages/swift/swift.js +13 -0
  104. package/dist/client/monaco/min/vs/basic-languages/systemverilog/systemverilog.js +10 -0
  105. package/dist/client/monaco/min/vs/basic-languages/tcl/tcl.js +10 -0
  106. package/dist/client/monaco/min/vs/basic-languages/twig/twig.js +10 -0
  107. package/dist/client/monaco/min/vs/basic-languages/typescript/typescript.js +10 -0
  108. package/dist/client/monaco/min/vs/basic-languages/typespec/typespec.js +10 -0
  109. package/dist/client/monaco/min/vs/basic-languages/vb/vb.js +10 -0
  110. package/dist/client/monaco/min/vs/basic-languages/wgsl/wgsl.js +307 -0
  111. package/dist/client/monaco/min/vs/basic-languages/xml/xml.js +10 -0
  112. package/dist/client/monaco/min/vs/basic-languages/yaml/yaml.js +10 -0
  113. package/dist/client/monaco/min/vs/editor/editor.main.css +8 -0
  114. package/dist/client/monaco/min/vs/editor/editor.main.js +768 -0
  115. package/dist/client/monaco/min/vs/editor/editor.main.nls.de.js +17 -0
  116. package/dist/client/monaco/min/vs/editor/editor.main.nls.es.js +17 -0
  117. package/dist/client/monaco/min/vs/editor/editor.main.nls.fr.js +15 -0
  118. package/dist/client/monaco/min/vs/editor/editor.main.nls.it.js +15 -0
  119. package/dist/client/monaco/min/vs/editor/editor.main.nls.ja.js +17 -0
  120. package/dist/client/monaco/min/vs/editor/editor.main.nls.js +15 -0
  121. package/dist/client/monaco/min/vs/editor/editor.main.nls.ko.js +15 -0
  122. package/dist/client/monaco/min/vs/editor/editor.main.nls.ru.js +17 -0
  123. package/dist/client/monaco/min/vs/editor/editor.main.nls.zh-cn.js +17 -0
  124. package/dist/client/monaco/min/vs/editor/editor.main.nls.zh-tw.js +15 -0
  125. package/dist/client/monaco/min/vs/language/css/cssMode.js +13 -0
  126. package/dist/client/monaco/min/vs/language/css/cssWorker.js +77 -0
  127. package/dist/client/monaco/min/vs/language/html/htmlMode.js +13 -0
  128. package/dist/client/monaco/min/vs/language/html/htmlWorker.js +454 -0
  129. package/dist/client/monaco/min/vs/language/json/jsonMode.js +19 -0
  130. package/dist/client/monaco/min/vs/language/json/jsonWorker.js +42 -0
  131. package/dist/client/monaco/min/vs/language/typescript/tsMode.js +20 -0
  132. package/dist/client/monaco/min/vs/language/typescript/tsWorker.js +51328 -0
  133. package/dist/client/monaco/min/vs/loader.js +11 -0
  134. package/dist/client/old_z.svg +25 -0
  135. package/dist/client/question_mark.svg +19 -0
  136. package/dist/client/robots.txt +2 -0
  137. package/dist/client/z_slice_spinner.svg +25 -0
  138. package/dist/client/z_spinner.svg +46 -0
  139. package/dist/client/zuplo.apng +0 -0
  140. package/dist/client/zuplo.svg +11 -0
  141. package/dist/client/zuplo_black.svg +11 -0
  142. package/dist/client/zuplo_white.svg +11 -0
  143. package/dist/index.d.ts +2 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +2 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/routes/files.d.ts +3 -0
  148. package/dist/routes/files.d.ts.map +1 -0
  149. package/dist/routes/files.js +10 -0
  150. package/dist/routes/files.js.map +1 -0
  151. package/dist/routes/fs.d.ts +7 -0
  152. package/dist/routes/fs.d.ts.map +1 -0
  153. package/dist/routes/fs.js +232 -0
  154. package/dist/routes/fs.js.map +1 -0
  155. package/dist/routes/modules.d.ts +3 -0
  156. package/dist/routes/modules.d.ts.map +1 -0
  157. package/dist/routes/modules.js +47 -0
  158. package/dist/routes/modules.js.map +1 -0
  159. package/dist/routes/types.d.ts +7 -0
  160. package/dist/routes/types.d.ts.map +1 -0
  161. package/dist/routes/types.js +37 -0
  162. package/dist/routes/types.js.map +1 -0
  163. package/dist/server.d.ts +35 -0
  164. package/dist/server.d.ts.map +1 -0
  165. package/dist/server.js +163 -0
  166. package/dist/server.js.map +1 -0
  167. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/routes/modules.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,IAAI,MAAM,WAAW,CAAC;AAa7B,KAAK,UAAU,SAAS,CAAC,OAAe;IACtC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAErD,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACpC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,eAAe,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CACzD,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC5B,CAAC;QAEF,MAAM,OAAO,GAA2B,EAAE,CAAC;QAE3C,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;YAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAC9D,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAEjE,MAAM,WAAW,GAAG,uCAAuC,CAAC;YAC5D,IAAI,KAAK,CAAC;YACV,MAAM,OAAO,GAA2B,EAAE,CAAC;YAE3C,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,kBAAkB,EAAE,IAAI;iBACzB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,aAAa,cAAc,EAAE;gBACvC,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { FastifyInstance, FastifyPluginOptions } from "fastify";
2
+ interface TypesRoutesOptions extends FastifyPluginOptions {
3
+ portalRoot: string;
4
+ }
5
+ export declare function createTypesRoutes(fastify: FastifyInstance, options: TypesRoutesOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/routes/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAIrE,UAAU,kBAAmB,SAAQ,oBAAoB;IACvD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAsCf"}
@@ -0,0 +1,37 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ export async function createTypesRoutes(fastify, options) {
4
+ const { portalRoot } = options;
5
+ // Serve TypeScript definition files from node_modules
6
+ // GET /api/types/node_modules/@types/node/index.d.ts
7
+ fastify.get("/node_modules/*", async (request, reply) => {
8
+ try {
9
+ // Get the path after /node_modules/
10
+ const requestedPath = request.params["*"];
11
+ const fullPath = path.join(portalRoot, "node_modules", requestedPath);
12
+ // Security: ensure the path is within node_modules
13
+ const resolvedPath = path.resolve(fullPath);
14
+ const node_modules_path = path.resolve(portalRoot, "node_modules");
15
+ if (!resolvedPath.startsWith(node_modules_path)) {
16
+ return reply.status(403).send("Access denied");
17
+ }
18
+ // Check if file exists
19
+ try {
20
+ const stat = await fs.stat(resolvedPath);
21
+ if (!stat.isFile()) {
22
+ return reply.status(404).send("Not found");
23
+ }
24
+ }
25
+ catch {
26
+ return reply.status(404).send("Not found");
27
+ }
28
+ // Read and return the file
29
+ const content = await fs.readFile(resolvedPath, "utf-8");
30
+ reply.type("application/typescript").send(content);
31
+ }
32
+ catch (err) {
33
+ reply.status(500).send(`Error reading file: ${err.message}`);
34
+ }
35
+ });
36
+ }
37
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/routes/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAwB,EACxB,OAA2B;IAE3B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAE/B,sDAAsD;IACtD,qDAAqD;IACrD,OAAO,CAAC,GAAG,CACT,iBAAiB,EACjB,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,oCAAoC;YACpC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;YAEtE,mDAAmD;YACnD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACnE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAChD,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACjD,CAAC;YAED,uBAAuB;YACvB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;oBACnB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,CAAC;YAED,2BAA2B;YAC3B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { type FastifyInstance } from "fastify";
2
+ import type { Logger } from "pino";
3
+ interface ServerOptions {
4
+ workingDir: string;
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
+ logger: Logger;
17
+ }
18
+ export declare class LocalEditorServer {
19
+ app: FastifyInstance;
20
+ private listenerHost;
21
+ private watcher;
22
+ private sseClients;
23
+ private workingDir;
24
+ private listenerPort;
25
+ private clientPath?;
26
+ private viteConfigPath?;
27
+ private vite;
28
+ private logger;
29
+ constructor(options: ServerOptions);
30
+ init: () => Promise<void>;
31
+ start: () => Promise<void>;
32
+ stop: () => Promise<void>;
33
+ }
34
+ export {};
35
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAIA,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAGxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAQnC,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,MAAM,EAAE,MAAM,CAAC;CAChB;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,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,aAAa;IAkBlC,IAAI,QAAa,OAAO,CAAC,IAAI,CAAC,CA4I5B;IAEF,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAM7B;IAEF,IAAI,QAAa,OAAO,CAAC,IAAI,CAAC,CAI5B;CACH"}
package/dist/server.js ADDED
@@ -0,0 +1,163 @@
1
+ import fastifyCors from "@fastify/cors";
2
+ import fastifyMiddie from "@fastify/middie";
3
+ import fastifyStatic from "@fastify/static";
4
+ import { watch } from "chokidar";
5
+ import Fastify from "fastify";
6
+ import fs from "node:fs/promises";
7
+ import path from "node:path";
8
+ import { createServer as createViteServer } from "vite";
9
+ import { createFsRoutes } from "./routes/fs.js";
10
+ import { createTypesRoutes } from "./routes/types.js";
11
+ const POLICIES_FILENAME = "policies.json";
12
+ const CONFIG_DIR = "config";
13
+ export class LocalEditorServer {
14
+ app;
15
+ listenerHost;
16
+ watcher;
17
+ sseClients = new Set();
18
+ workingDir;
19
+ listenerPort;
20
+ clientPath;
21
+ viteConfigPath;
22
+ vite;
23
+ logger;
24
+ constructor(options) {
25
+ this.workingDir = options.workingDir;
26
+ this.listenerPort = options.port;
27
+ this.clientPath = options.clientPath;
28
+ this.viteConfigPath = options.viteConfigPath;
29
+ this.logger = options.logger;
30
+ this.listenerHost = "localhost";
31
+ this.watcher = watch(path.join(this.workingDir, CONFIG_DIR));
32
+ this.app = Fastify({
33
+ // logger: {
34
+ // },
35
+ bodyLimit: 100 * 1024 * 1024, // 100mb
36
+ trustProxy: true,
37
+ });
38
+ }
39
+ init = async () => {
40
+ // Register CORS
41
+ await this.app.register(fastifyCors, {
42
+ origin: "*",
43
+ methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
44
+ allowedHeaders: ["Content-Type", "Authorization"],
45
+ });
46
+ // Add support for text/plain and application/* content types
47
+ this.app.addContentTypeParser("text/plain", { parseAs: "string" }, (_req, body, done) => {
48
+ done(null, body);
49
+ });
50
+ this.app.addContentTypeParser("application/*", { parseAs: "buffer" }, (_req, body, done) => {
51
+ done(null, body);
52
+ });
53
+ // API routes MUST be registered before Vite middleware to avoid proxy conflicts
54
+ // Register filesystem routes at the path expected by the management API
55
+ // Format: /api/v1/deployments/{environmentName}/fs/...
56
+ await this.app.register(createFsRoutes, {
57
+ prefix: "/api/v1/deployments/local/fs",
58
+ workingDir: this.workingDir,
59
+ });
60
+ // Determine portal root for types routes
61
+ const portalRootForTypes = this.viteConfigPath
62
+ ? path.resolve(path.dirname(this.viteConfigPath), "../..")
63
+ : path.resolve(path.dirname(this.clientPath), "../../..");
64
+ // Register types routes for serving TypeScript definitions from node_modules
65
+ await this.app.register(createTypesRoutes, {
66
+ prefix: "/api/types",
67
+ portalRoot: portalRootForTypes,
68
+ });
69
+ // Server-Sent Events for file changes
70
+ this.app.get("/api/changes", async (request, reply) => {
71
+ reply.raw.writeHead(200, {
72
+ "Content-Type": "text/event-stream",
73
+ "Cache-Control": "no-cache",
74
+ Connection: "keep-alive",
75
+ });
76
+ // Send initial event
77
+ reply.raw.write(`data: ${JSON.stringify({ type: "init", filePath: POLICIES_FILENAME })}\n\n`);
78
+ this.sseClients.add(reply.raw);
79
+ request.raw.on("close", () => {
80
+ this.sseClients.delete(reply.raw);
81
+ });
82
+ });
83
+ // Health check
84
+ this.app.get("/api/ping", async (_request, reply) => {
85
+ reply.status(200).send();
86
+ });
87
+ // Setup file watcher
88
+ this.watcher.on("change", async (filePath) => {
89
+ const configPath = path.join(this.workingDir, CONFIG_DIR);
90
+ const filePathRelative = path.relative(configPath, filePath);
91
+ const fileNameRelative = path.basename(filePath);
92
+ // Broadcast to all SSE clients
93
+ const data = JSON.stringify({
94
+ type: "change",
95
+ filePath: filePathRelative,
96
+ });
97
+ for (const client of this.sseClients) {
98
+ client.write(`event: change\ndata: ${data}\n\n`);
99
+ }
100
+ this.logger.info(`File changed: ${fileNameRelative}`);
101
+ });
102
+ // Determine portal root - Vite config is always at portal root
103
+ const portalRoot = this.viteConfigPath
104
+ ? path.resolve(path.dirname(this.viteConfigPath), "../..")
105
+ : path.resolve(path.dirname(this.clientPath), "../../..");
106
+ // Serve Monaco editor files from node_modules
107
+ const monacoPath = path.join(portalRoot, "node_modules/monaco-editor");
108
+ await this.app.register(fastifyStatic, {
109
+ root: monacoPath,
110
+ prefix: "/monaco/",
111
+ });
112
+ // Enable Express-compatible middleware support
113
+ await this.app.register(fastifyMiddie);
114
+ // Use the root vite.config.ts with local-editor mode
115
+ const viteConfigPath = path.join(portalRoot, "vite.config.ts");
116
+ this.vite = await createViteServer({
117
+ configFile: viteConfigPath,
118
+ root: portalRoot,
119
+ server: { middlewareMode: true },
120
+ appType: "custom",
121
+ base: "/",
122
+ mode: "local-editor",
123
+ });
124
+ // Use Vite's middleware via @fastify/middie for non-API requests only
125
+ // This prevents Vite from intercepting API routes that Fastify handles
126
+ this.app.use((req, res, next) => {
127
+ // Skip Vite middleware for API routes - let Fastify handle them
128
+ if (req.url?.startsWith("/api/")) {
129
+ return next();
130
+ }
131
+ // Use Vite middleware for everything else
132
+ this.vite.middlewares(req, res, next);
133
+ });
134
+ const htmlPath = path.join(portalRoot, "local-editor.html");
135
+ const rawHtml = await fs.readFile(htmlPath, "utf-8");
136
+ // Serve the local-editor.html for SPA routing
137
+ this.app.get("*", async (request, reply) => {
138
+ const url = request.url;
139
+ try {
140
+ const template = await this.vite.transformIndexHtml(url, rawHtml);
141
+ reply.type("text/html").send(template);
142
+ }
143
+ catch (e) {
144
+ this.logger.error(e);
145
+ this.vite?.ssrFixStacktrace(e);
146
+ reply.status(500).send(e.message);
147
+ }
148
+ });
149
+ };
150
+ start = async () => {
151
+ await this.init();
152
+ await this.app.listen({
153
+ port: this.listenerPort,
154
+ host: this.listenerHost,
155
+ });
156
+ };
157
+ stop = async () => {
158
+ await this.watcher.close();
159
+ await this.vite?.close();
160
+ await this.app.close();
161
+ };
162
+ }
163
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@zuplo/editor",
3
+ "version": "0.1.0",
4
+ "description": "Local development server for Zuplo API Gateway projects",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "pnpm run build:client && pnpm run build:server",
19
+ "build:client": "cd ../.. && vite build --mode local-editor",
20
+ "build:server": "tsc",
21
+ "dev": "tsx watch --ignore '../../node_modules/.vite-temp/**' --ignore 'node_modules/**' --ignore 'dist/**' ./scripts/dev.ts",
22
+ "clean": "rm -rf dist"
23
+ },
24
+ "keywords": [
25
+ "zuplo",
26
+ "api-gateway",
27
+ "local-development",
28
+ "editor"
29
+ ],
30
+ "author": "Zuplo, Inc.",
31
+ "license": "MIT",
32
+ "dependencies": {
33
+ "@fastify/cors": "^11.1.0",
34
+ "@fastify/middie": "^9.0.3",
35
+ "@fastify/multipart": "^9.2.1",
36
+ "@fastify/static": "^8.2.0",
37
+ "@fastify/vite": "^8.2.0",
38
+ "chokidar": "^4.0.3",
39
+ "fastify": "^5.6.1",
40
+ "pino": "^10.0.0",
41
+ "pino-http": "^11.0.0",
42
+ "pino-http-print": "^3.1.0",
43
+ "pino-pretty": "^13.0.0"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^18.19.33",
47
+ "tsx": "^4.19.4",
48
+ "typescript": "5.8.3",
49
+ "vite": "6.3.5"
50
+ },
51
+ "engines": {
52
+ "node": ">=18"
53
+ }
54
+ }