diff --git a/apps/server/src/routes/assets.ts b/apps/server/src/routes/assets.ts index efcb5a3350..1e2ff30b14 100644 --- a/apps/server/src/routes/assets.ts +++ b/apps/server/src/routes/assets.ts @@ -32,7 +32,6 @@ async function register(app: express.Application) { req.url = `/${assetUrlFragment}` + req.url; vite.middlewares(req, res, next); }); - app.use(`/share/assets/`, express.static(path.join(srcRoot, "../../packages/share-theme/dist"))); } else { const publicDir = path.join(resourceDir, "public"); if (!existsSync(publicDir)) { @@ -43,9 +42,9 @@ async function register(app: express.Application) { app.use(`/${assetUrlFragment}/stylesheets`, persistentCacheStatic(path.join(publicDir, "stylesheets"))); app.use(`/${assetUrlFragment}/fonts`, persistentCacheStatic(path.join(publicDir, "fonts"))); app.use(`/${assetUrlFragment}/translations/`, persistentCacheStatic(path.join(publicDir, "translations"))); - app.use(`/share/assets/`, persistentCacheStatic(path.join(resourceDir, "share-theme/assets"))); app.use(`/node_modules/`, persistentCacheStatic(path.join(publicDir, "node_modules"))); } + app.use(`/share/assets/`, express.static(getShareThemeAssetDir())); app.use(`/${assetUrlFragment}/images`, persistentCacheStatic(path.join(resourceDir, "assets", "images"))); app.use(`/${assetUrlFragment}/doc_notes`, persistentCacheStatic(path.join(resourceDir, "assets", "doc_notes"))); app.use(`/assets/vX/fonts`, express.static(path.join(srcRoot, "public/fonts"))); @@ -53,6 +52,16 @@ async function register(app: express.Application) { app.use(`/assets/vX/stylesheets`, express.static(path.join(srcRoot, "public/stylesheets"))); } +export function getShareThemeAssetDir() { + if (process.env.NODE_ENV === "development") { + const srcRoot = path.join(__dirname, "..", ".."); + return path.join(srcRoot, "../../packages/share-theme/dist"); + } else { + const resourceDir = getResourceDir(); + return path.join(resourceDir, "share-theme/assets"); + } +} + export default { register }; diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index 06609b0313..3439fe3e47 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -3,10 +3,13 @@ import NoteMeta, { NoteMetaFile } from "../../meta/note_meta"; import { ExportFormat, ZipExportProvider } from "./abstract_provider.js"; import { RESOURCE_DIR } from "../../resource_dir"; import { getResourceDir, isDev } from "../../utils"; -import fs from "fs"; +import fs, { readdirSync } from "fs"; import { renderNoteForExport } from "../../../share/content_renderer"; import type BNote from "../../../becca/entities/bnote.js"; import type BBranch from "../../../becca/entities/bbranch.js"; +import { getShareThemeAssetDir } from "../../../routes/assets"; + +const shareThemeAssetDir = getShareThemeAssetDir(); export default class ShareThemeExportProvider extends ZipExportProvider { @@ -14,6 +17,7 @@ export default class ShareThemeExportProvider extends ZipExportProvider { private indexMeta: NoteMeta | null = null; prepareMeta(metaFile: NoteMetaFile): void { + const assets = [ "style.css", "script.js", @@ -26,6 +30,10 @@ export default class ShareThemeExportProvider extends ZipExportProvider { "icon-color.svg" ]; + for (const file of readdirSync(shareThemeAssetDir)) { + assets.push(`assets/${file}`); + } + for (const asset of assets) { const assetMeta = { noImport: true, @@ -107,6 +115,8 @@ function getShareThemeAssets(nameWithExtension: string) { let path: string | undefined; if (nameWithExtension === "icon-color.svg") { path = join(RESOURCE_DIR, "images", nameWithExtension); + } else if (nameWithExtension.startsWith("assets")) { + path = join(shareThemeAssetDir, nameWithExtension.replace(/^assets\//, "")); } else if (isDev) { path = join(getResourceDir(), "..", "..", "client", "dist", "src", nameWithExtension); } else {