From c0f244703d5035650104a488f8e70b33b49e1a32 Mon Sep 17 00:00:00 2001 From: Juan Galeas Date: Mon, 9 Mar 2026 14:15:22 -0700 Subject: [PATCH 1/2] fix: use pathToFileURL for dynamic imports on Windows On Windows, Node.js ESM requires file:// URLs for dynamic import() calls. Raw absolute paths like C:\... cause ERR_UNSUPPORTED_ESM_URL_SCHEME since Node interprets 'C:' as a URL protocol scheme. Co-Authored-By: Claude Opus 4.6 --- .../core/controller/workspace-controller.js | 11 +++--- packages/markdown/index.js | 5 +-- packages/markdown/package.json | 34 +++++++++---------- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/packages/loopar/core/controller/workspace-controller.js b/packages/loopar/core/controller/workspace-controller.js index 539bc798..daef37f5 100755 --- a/packages/loopar/core/controller/workspace-controller.js +++ b/packages/loopar/core/controller/workspace-controller.js @@ -2,6 +2,7 @@ import AuthController from "./auth-controller.js"; import { loopar, fileManager } from "loopar"; +import { pathToFileURL } from 'url'; import fs from 'fs'; export default class WorkspaceController extends AuthController { @@ -42,7 +43,7 @@ export default class WorkspaceController extends AuthController { if (checkAuth) { await this.beforeAction(); } - + global.File = class SimulatedFile { constructor(buffer, fileName, options = {}) { this.buffer = Buffer.from(buffer); @@ -57,9 +58,9 @@ export default class WorkspaceController extends AuthController { let HTML, template; const _p = (path) => loopar.makePath(loopar.pathRoot, path); - + if(isProduction) { - const { render } = await import(_p("dist/server/entry-server.js")); + const { render } = await import(pathToFileURL(_p("dist/server/entry-server.js")).href); HTML = await render(url, __META__, this.req, this.res); template = fs.readFileSync("dist/client/main.html", 'utf-8'); }else{ @@ -68,7 +69,7 @@ export default class WorkspaceController extends AuthController { HTML = await render(url, __META__, this.req, this.res); template = await vite.transformIndexHtml(url, fs.readFileSync(_p("main.html"), 'utf-8')); } - + let html = template.replace(``, HTML.HTML); html = html.replace('${THEME}', loopar.cookie.get('vite-ui-theme') || 'dark'); @@ -120,4 +121,4 @@ export default class WorkspaceController extends AuthController { async actionSidebar() { return { sidebarData: await WorkspaceController.sidebarData() } } -} \ No newline at end of file +} diff --git a/packages/markdown/index.js b/packages/markdown/index.js index 45418ebe..bc8cfe51 100755 --- a/packages/markdown/index.js +++ b/packages/markdown/index.js @@ -1,4 +1,5 @@ import path from 'pathe'; +import { pathToFileURL } from 'url'; import fs from 'fs'; import { build } from 'vite'; @@ -22,6 +23,6 @@ if (!fs.existsSync(distPath)) { }); } -const { renderMarkdown } = await import(path.resolve(selfRoute, "dist/ssr/markdown-render.js")); +const { renderMarkdown } = await import(pathToFileURL(path.resolve(selfRoute, "dist/ssr/markdown-render.js")).href); -export const markdownRenderer = (markdown) => renderMarkdown(markdown); \ No newline at end of file +export const markdownRenderer = (markdown) => renderMarkdown(markdown); diff --git a/packages/markdown/package.json b/packages/markdown/package.json index 07c9f438..ee33abf9 100755 --- a/packages/markdown/package.json +++ b/packages/markdown/package.json @@ -3,30 +3,30 @@ "version": "1.0.0", "type": "module", "dependencies": { - "@uiw/react-markdown-preview": "5.1.5", - "quill": "2.0.3", + "@codemirror/lang-json": "6.0.2", + "@codemirror/view": "6.39.9", + "@mdx-js/mdx": "3.1.0", + "@mdx-js/react": "3.1.0", "@mdxeditor/editor": "3.52.3", - - "@uiw/react-markdown-editor": "6.1.4", "@uiw/codemirror-extensions-basic-setup": "4.25.4", - "@uiw/react-codemirror": "4.25.4", "@uiw/codemirror-theme-vscode": "4.25.4", - "@codemirror/lang-json": "6.0.2", - "@codemirror/view": "6.39.9", + "@uiw/react-codemirror": "4.25.4", + "@uiw/react-markdown-editor": "6.1.4", + "@uiw/react-markdown-preview": "5.1.5", + "@uiw/react-textarea-code-editor": "3.1.1", "prism-react-renderer": "2.4.1", - + "quill": "2.0.3", "react-simplemde-editor": "5.2.0", - "@mdx-js/mdx": "3.1.0", - "@mdx-js/react": "3.1.0", - - "unified": "^11.0.4", - "remark-parse": "^11.0.0", - "remark-gfm": "^4.0.0", - "remark-rehype": "^11.1.0", "rehype-raw": "^7.0.0", "rehype-sanitize": "^6.0.0", "rehype-stringify": "^10.0.0", - - "@uiw/react-textarea-code-editor":"3.1.1" + "remark-gfm": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.0", + "unified": "^11.0.4" + }, + "main": "./index.js", + "exports": { + ".": "./index.js" } } From 3e50b950af89193533ea72c36871b813236fd0b7 Mon Sep 17 00:00:00 2001 From: Juan Galeas Date: Mon, 9 Mar 2026 14:31:13 -0700 Subject: [PATCH 2/2] Remove exports field from package.json this was the original solution but dit not worked. Is usseles --- packages/markdown/package.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/markdown/package.json b/packages/markdown/package.json index ee33abf9..9386b1de 100755 --- a/packages/markdown/package.json +++ b/packages/markdown/package.json @@ -25,8 +25,5 @@ "remark-rehype": "^11.1.0", "unified": "^11.0.4" }, - "main": "./index.js", - "exports": { - ".": "./index.js" - } + "main": "./index.js" }