diff --git a/next.config.js b/next.config.js index 42ebcb3..1301a2e 100644 --- a/next.config.js +++ b/next.config.js @@ -30,6 +30,7 @@ try { /** @type {import('next').NextConfig} */ module.exports = bundleAnalyzer({ enabled: !!process.env.ANALYZE })({ + output: "standalone", images: { unoptimized: true }, diff --git a/package.json b/package.json index 3ee262a..37dc60f 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,11 @@ "version": "0.1.0", "private": true, "license": "0BSD", + "bin": "server.js", "scripts": { "dev": "next dev", "build": "next build", "build:analyze": "(export ANALYZE=true || set ANALYZE=true) && npm run build", "start": "next start", "lint": "next lint", "migrate:up": "dotenvx run -f .env.local -- node db-migrate.cjs up", @@ -55,6 +57,7 @@ "@types/react-dom": "^18", "@types/react-grid-layout": "^1.3.5", "@types/react-resizable": "^3.0.7", + "@yao-pkg/pkg": "^5.11.5", "autoprefixer": "^10.4.19", "eslint": "^8", "eslint-config-next": "14.2.0", @@ -64,5 +67,27 @@ "ts-node": "^10.9.2", "type-fest": "^4.15.0", "typescript": "^5" + }, + "pkg": { + "assets": [ + ".next/**/*", + ".db-migraterc", + "node_modules/**/*.node" + ], + "scripts": [ + ".next/server/**/*.js", + "next.config.js" + ], + "patches": { + "node_modules/next/dist/server/next-server.js": [ + "(0, _path.join)(this.dir, _constants.CLIENT_PUBLIC_FILES_PATH)", + "(0, _path.join)(process.cwd(), _constants.CLIENT_PUBLIC_FILES_PATH)" + ], + "node_modules/next/dist/server/lib/router-utils/filesystem.js": [ + "const publicFolderPath = _path.default.join(opts.dir, \"public\");", + "const publicFolderPath = _path.default.join(process.cwd(), \"public\");" + ] + }, + "targets": ["host"] } } diff --git a/src/app/(with-header)/header-sidebar.tsx b/src/app/(with-header)/header-sidebar.tsx index 15f4d40..51dc8fb 100644 --- a/src/app/(with-header)/header-sidebar.tsx +++ b/src/app/(with-header)/header-sidebar.tsx @@ -143,6 +143,7 @@ export const HeaderSidebar = ({ children }: HeaderSidebarProps) => { } }) as { ref: RefCallback; }; + // @ts-ignore useEffect(() => { ref(document); return () => ref({} as any); diff --git a/src/components/select-modal.tsx b/src/components/select-modal.tsx index 1e961e7..0d1eb32 100644 --- a/src/components/select-modal.tsx +++ b/src/components/select-modal.tsx @@ -44,6 +44,7 @@ const SelectModalList = ({ onSelectionChanged getScrollElement: () => listRef.current, estimateSize: () => lastHeight.current, overscan: 5, + // @ts-ignore scrollingDelay: 0, measureElement: el => { return lastHeight.current = el.clientHeight; @@ -91,6 +92,7 @@ const SelectModalGrid = ({ onSelectionChanged getScrollElement: () => listRef.current, estimateSize: () => lastHeight.current, overscan: 5, + // @ts-ignore scrollingDelay: 0, measureElement: el => { return lastHeight.current = el.clientHeight; diff --git a/src/components/window-scroller-grid.tsx b/src/components/window-scroller-grid.tsx index 5284a66..39c0e21 100644 --- a/src/components/window-scroller-grid.tsx +++ b/src/components/window-scroller-grid.tsx @@ -24,6 +24,7 @@ export const WindowScrollerGrid = ({ rowSize, colSize, items, chi estimateSize: () => rowSize, scrollMargin: listRef.current?.offsetTop ?? 0, overscan: 5, + // @ts-ignore scrollingDelay: 0 }); diff --git a/src/instrumentation.ts b/src/instrumentation.ts index 64708a7..f5f6d2c 100644 --- a/src/instrumentation.ts +++ b/src/instrumentation.ts @@ -57,7 +57,8 @@ export async function register() { if (['true', 'yes', '1'].includes(process.env.AUTOMIGRATE?.toLowerCase()!)) { process.env.DATABASE_URL = url.toString(); // using require here increases build times to like 10 minutes for some reason - const DBMigrate = await eval('imp' + 'ort("db-migrate")'); + // beerpsi (2024/04/24): required for actaeon-portable since `pkg` is really fussy about es modules + const DBMigrate = eval('req' + 'uire("db-migrate")'); const dbmigrate = DBMigrate.getInstance(true); await dbmigrate.up(); diff --git a/server.patch b/server.patch index 64708a7..f5f6d2c 100644 --- a/server.patch +++ b/server.patch @@ -0,0 +0,13 @@ +--- .\server.js ++++ .\server.js +@@ -1,9 +1,9 @@ + const path = require('path') ++require("@next/env").loadEnvConfig(process.cwd(), false, console, true) + + const dir = path.join(__dirname) + + process.env.NODE_ENV = 'production' +-process.chdir(__dirname) + + const currentPort = parseInt(process.env.PORT, 10) || 3000 + const hostname = process.env.HOSTNAME || '0.0.0.0' diff --git a/build-exe.sh b/build-exe.sh index 64708a7..f5f6d2c 100644 --- a/build-exe.sh +++ a/build-exe.sh @@ -0,0 +0,15 @@ +npm run build +cp -r .next/static .next/standalone/.next/ +cp .db-migraterc .next/standalone/ +patch .next/standalone/server.js server.patch + +TEMPDIR="$(mktemp -d)" +echo $TEMPDIR +cp -r .next/standalone/* "$TEMPDIR/" + +pushd "$TEMPDIR" +npx @yao-pkg/pkg . --compress brotli +popd + +cp "$TEMPDIR/actaeon.exe" . +rm -r "$TEMPDIR"