365 lines
10 KiB
TypeScript
365 lines
10 KiB
TypeScript
import { resolve } from "node:path";
|
|
import { defineConfig } from "vite";
|
|
import wasm from "vite-plugin-wasm";
|
|
|
|
export default defineConfig({
|
|
root: "website",
|
|
plugins: [
|
|
wasm(),
|
|
// Build service worker as a separate, unhashed JS file
|
|
{
|
|
name: "build-sw",
|
|
apply: "build",
|
|
closeBundle: {
|
|
sequential: true,
|
|
async handler() {
|
|
const { build } = await import("vite");
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "website"),
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist"),
|
|
lib: {
|
|
entry: resolve(__dirname, "website/sw.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "sw.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "sw.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Build shell.ts as a standalone JS bundle
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "website"),
|
|
resolve: {
|
|
alias: {
|
|
"@lib": resolve(__dirname, "./lib"),
|
|
"@shared": resolve(__dirname, "./shared"),
|
|
},
|
|
},
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist"),
|
|
lib: {
|
|
entry: resolve(__dirname, "website/shell.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "shell.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "shell.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Build books module components
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "modules/books/components"),
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist/modules/books"),
|
|
lib: {
|
|
entry: resolve(__dirname, "modules/books/components/folk-book-shelf.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "folk-book-shelf.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "folk-book-shelf.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "modules/books/components"),
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist/modules/books"),
|
|
lib: {
|
|
entry: resolve(__dirname, "modules/books/components/folk-book-reader.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "folk-book-reader.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "folk-book-reader.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Copy books CSS
|
|
const { copyFileSync, mkdirSync } = await import("node:fs");
|
|
mkdirSync(resolve(__dirname, "dist/modules/books"), { recursive: true });
|
|
copyFileSync(
|
|
resolve(__dirname, "modules/books/components/books.css"),
|
|
resolve(__dirname, "dist/modules/books/books.css"),
|
|
);
|
|
|
|
// Build pubs module component
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "modules/pubs/components"),
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist/modules/pubs"),
|
|
lib: {
|
|
entry: resolve(__dirname, "modules/pubs/components/folk-pubs-editor.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "folk-pubs-editor.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "folk-pubs-editor.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Copy pubs CSS
|
|
mkdirSync(resolve(__dirname, "dist/modules/pubs"), { recursive: true });
|
|
copyFileSync(
|
|
resolve(__dirname, "modules/pubs/components/pubs.css"),
|
|
resolve(__dirname, "dist/modules/pubs/pubs.css"),
|
|
);
|
|
|
|
// Build cart module component
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "modules/cart/components"),
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist/modules/cart"),
|
|
lib: {
|
|
entry: resolve(__dirname, "modules/cart/components/folk-cart-shop.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "folk-cart-shop.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "folk-cart-shop.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Copy cart CSS
|
|
mkdirSync(resolve(__dirname, "dist/modules/cart"), { recursive: true });
|
|
copyFileSync(
|
|
resolve(__dirname, "modules/cart/components/cart.css"),
|
|
resolve(__dirname, "dist/modules/cart/cart.css"),
|
|
);
|
|
|
|
// Build providers module component
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "modules/providers/components"),
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist/modules/providers"),
|
|
lib: {
|
|
entry: resolve(__dirname, "modules/providers/components/folk-provider-directory.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "folk-provider-directory.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "folk-provider-directory.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Copy providers CSS
|
|
mkdirSync(resolve(__dirname, "dist/modules/providers"), { recursive: true });
|
|
copyFileSync(
|
|
resolve(__dirname, "modules/providers/components/providers.css"),
|
|
resolve(__dirname, "dist/modules/providers/providers.css"),
|
|
);
|
|
|
|
// Build swag module component
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "modules/swag/components"),
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist/modules/swag"),
|
|
lib: {
|
|
entry: resolve(__dirname, "modules/swag/components/folk-swag-designer.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "folk-swag-designer.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "folk-swag-designer.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Copy swag CSS
|
|
mkdirSync(resolve(__dirname, "dist/modules/swag"), { recursive: true });
|
|
copyFileSync(
|
|
resolve(__dirname, "modules/swag/components/swag.css"),
|
|
resolve(__dirname, "dist/modules/swag/swag.css"),
|
|
);
|
|
|
|
// Build choices module component
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "modules/choices/components"),
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist/modules/choices"),
|
|
lib: {
|
|
entry: resolve(__dirname, "modules/choices/components/folk-choices-dashboard.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "folk-choices-dashboard.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "folk-choices-dashboard.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Copy choices CSS
|
|
mkdirSync(resolve(__dirname, "dist/modules/choices"), { recursive: true });
|
|
copyFileSync(
|
|
resolve(__dirname, "modules/choices/components/choices.css"),
|
|
resolve(__dirname, "dist/modules/choices/choices.css"),
|
|
);
|
|
|
|
// Build funds module component
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "modules/funds/components"),
|
|
resolve: {
|
|
alias: {
|
|
"../lib/types": resolve(__dirname, "modules/funds/lib/types.ts"),
|
|
"../lib/simulation": resolve(__dirname, "modules/funds/lib/simulation.ts"),
|
|
"../lib/presets": resolve(__dirname, "modules/funds/lib/presets.ts"),
|
|
},
|
|
},
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist/modules/funds"),
|
|
lib: {
|
|
entry: resolve(__dirname, "modules/funds/components/folk-budget-river.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "folk-budget-river.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "folk-budget-river.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Copy funds CSS
|
|
mkdirSync(resolve(__dirname, "dist/modules/funds"), { recursive: true });
|
|
copyFileSync(
|
|
resolve(__dirname, "modules/funds/components/funds.css"),
|
|
resolve(__dirname, "dist/modules/funds/funds.css"),
|
|
);
|
|
|
|
// Build files module component
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "modules/files/components"),
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist/modules/files"),
|
|
lib: {
|
|
entry: resolve(__dirname, "modules/files/components/folk-file-browser.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "folk-file-browser.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "folk-file-browser.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Copy files CSS
|
|
mkdirSync(resolve(__dirname, "dist/modules/files"), { recursive: true });
|
|
copyFileSync(
|
|
resolve(__dirname, "modules/files/components/files.css"),
|
|
resolve(__dirname, "dist/modules/files/files.css"),
|
|
);
|
|
|
|
// Build forum module component
|
|
await build({
|
|
configFile: false,
|
|
root: resolve(__dirname, "modules/forum/components"),
|
|
build: {
|
|
emptyOutDir: false,
|
|
outDir: resolve(__dirname, "dist/modules/forum"),
|
|
lib: {
|
|
entry: resolve(__dirname, "modules/forum/components/folk-forum-dashboard.ts"),
|
|
formats: ["es"],
|
|
fileName: () => "folk-forum-dashboard.js",
|
|
},
|
|
rollupOptions: {
|
|
output: {
|
|
entryFileNames: "folk-forum-dashboard.js",
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// Copy forum CSS
|
|
mkdirSync(resolve(__dirname, "dist/modules/forum"), { recursive: true });
|
|
copyFileSync(
|
|
resolve(__dirname, "modules/forum/components/forum.css"),
|
|
resolve(__dirname, "dist/modules/forum/forum.css"),
|
|
);
|
|
},
|
|
},
|
|
},
|
|
],
|
|
resolve: {
|
|
alias: {
|
|
"@lib": resolve(__dirname, "./lib"),
|
|
"@encryptid": resolve(__dirname, "./src/encryptid"),
|
|
"@shared": resolve(__dirname, "./shared"),
|
|
},
|
|
},
|
|
build: {
|
|
target: "esnext",
|
|
rollupOptions: {
|
|
input: {
|
|
index: resolve(__dirname, "./website/index.html"),
|
|
canvas: resolve(__dirname, "./website/canvas.html"),
|
|
},
|
|
},
|
|
modulePreload: {
|
|
polyfill: false,
|
|
},
|
|
outDir: "../dist",
|
|
emptyOutDir: true,
|
|
// Copy shell.css to dist
|
|
cssCodeSplit: false,
|
|
},
|
|
server: {
|
|
port: 5173,
|
|
},
|
|
optimizeDeps: {
|
|
exclude: ["@automerge/automerge"],
|
|
},
|
|
});
|