diff --git a/README.md b/README.md index ab56a80..8761a0e 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ bknd simplifies app development by providing a fully functional backend for data **For documentation and examples, please visit https://docs.bknd.io.** > [!WARNING] -> This project requires Node.js 22 or higher (because of `node:sqlite`). +> This project requires Node.js 22.13 or higher (because of `node:sqlite`). > > Please keep in mind that **bknd** is still under active development > and therefore full backward compatibility is not guaranteed before reaching v1.0.0. diff --git a/app/build.ts b/app/build.ts index 2d0caa9..eb15450 100644 --- a/app/build.ts +++ b/app/build.ts @@ -86,10 +86,10 @@ async function buildApi() { outDir: "dist", external: [...external], metafile: true, - platform: "browser", + target: "esnext", + platform: "neutral", format: ["esm"], splitting: false, - treeshake: true, loader: { ".svg": "dataurl", }, @@ -245,6 +245,8 @@ async function buildAdapters() { // base adapter handles tsup.build({ ...baseConfig(""), + target: "esnext", + platform: "neutral", entry: ["src/adapter/index.ts"], outDir: "dist/adapter", }), diff --git a/app/package.json b/app/package.json index c398fa5..aea0395 100644 --- a/app/package.json +++ b/app/package.json @@ -15,7 +15,7 @@ }, "packageManager": "bun@1.2.19", "engines": { - "node": ">=22" + "node": ">=22.13" }, "scripts": { "dev": "BKND_CLI_LOG_LEVEL=debug vite", diff --git a/app/src/adapter/index.ts b/app/src/adapter/index.ts index 91ffcf7..17827f7 100644 --- a/app/src/adapter/index.ts +++ b/app/src/adapter/index.ts @@ -173,7 +173,9 @@ export function serveStaticViaImport(opts?: { manifest?: Manifest }) { return async (c: Context, next: Next) => { if (!files) { const manifest = - opts?.manifest || ((await import("bknd/dist/manifest.json")).default as Manifest); + opts?.manifest || + ((await import("bknd/dist/manifest.json", { with: { type: "json" } })) + .default as Manifest); files = Object.values(manifest).flatMap((asset) => [asset.file, ...(asset.css || [])]); } @@ -181,7 +183,7 @@ export function serveStaticViaImport(opts?: { manifest?: Manifest }) { if (files.includes(path)) { try { const content = await import(/* @vite-ignore */ `bknd/static/${path}?raw`, { - assert: { type: "text" }, + with: { type: "text" }, }).then((m) => m.default); if (content) { diff --git a/app/src/modules/server/AdminController.tsx b/app/src/modules/server/AdminController.tsx index d15eefe..a68519d 100644 --- a/app/src/modules/server/AdminController.tsx +++ b/app/src/modules/server/AdminController.tsx @@ -11,6 +11,7 @@ import { css, Style } from "hono/css"; import { Controller } from "modules/Controller"; import * as SystemPermissions from "modules/permissions"; import type { TApiUser } from "Api"; +import type { Manifest } from "vite"; const htmlBkndContextReplace = ""; @@ -32,6 +33,7 @@ export type AdminControllerOptions = { debugRerenders?: boolean; theme?: "dark" | "light" | "system"; logoReturnPath?: string; + manifest?: Manifest; }; export class AdminController extends Controller { @@ -194,8 +196,10 @@ export class AdminController extends Controller { }; if (isProd) { - let manifest: any; - if (this.options.assetsPath.startsWith("http")) { + let manifest: Manifest; + if (this.options.manifest) { + manifest = this.options.manifest; + } else if (this.options.assetsPath.startsWith("http")) { manifest = await fetch(this.options.assetsPath + ".vite/manifest.json", { headers: { Accept: "application/json", @@ -204,14 +208,14 @@ export class AdminController extends Controller { } else { // @ts-ignore manifest = await import("bknd/dist/manifest.json", { - assert: { type: "json" }, + with: { type: "json" }, }).then((res) => res.default); } try { // @todo: load all marked as entry (incl. css) - assets.js = manifest["src/ui/main.tsx"].file; - assets.css = manifest["src/ui/main.tsx"].css[0] as any; + assets.js = manifest["src/ui/main.tsx"]?.file!; + assets.css = manifest["src/ui/main.tsx"]?.css?.[0] as any; } catch (e) { $console.warn("Couldn't find assets in manifest", e); } diff --git a/bun.lock b/bun.lock index d9765f6..c7350b2 100644 --- a/bun.lock +++ b/bun.lock @@ -15,7 +15,7 @@ }, "app": { "name": "bknd", - "version": "0.17.0-rc.1", + "version": "0.17.1", "bin": "./dist/cli/index.js", "dependencies": { "@cfworker/json-schema": "^4.1.1", @@ -1232,7 +1232,7 @@ "@types/babel__traverse": ["@types/babel__traverse@7.20.6", "", { "dependencies": { "@babel/types": "^7.20.7" } }, "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg=="], - "@types/bun": ["@types/bun@1.2.20", "", { "dependencies": { "bun-types": "1.2.20" } }, "sha512-dX3RGzQ8+KgmMw7CsW4xT5ITBSCrSbfHc36SNT31EOUg/LA9JWq0VDdEXDRSe1InVWpd2yLUM1FUF/kEOyTzYA=="], + "@types/bun": ["@types/bun@1.2.21", "", { "dependencies": { "bun-types": "1.2.21" } }, "sha512-NiDnvEqmbfQ6dmZ3EeUO577s4P5bf4HCTXtI6trMc6f6RzirY5IrF3aIookuSpyslFzrnvv2lmEWv5HyC1X79A=="], "@types/cookie": ["@types/cookie@0.6.0", "", {}, "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="], @@ -4078,7 +4078,7 @@ "@testing-library/jest-dom/chalk": ["chalk@3.0.0", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg=="], - "@types/bun/bun-types": ["bun-types@1.2.20", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-pxTnQYOrKvdOwyiyd/7sMt9yFOenN004Y6O4lCcCUoKVej48FS5cvTw9geRaEcB9TsDZaJKAxPTVvi8tFsVuXA=="], + "@types/bun/bun-types": ["bun-types@1.2.21", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-sa2Tj77Ijc/NTLS0/Odjq/qngmEPZfbfnOERi0KRUYhT9R8M4VBioWVmMWE5GrYbKMc+5lVybXygLdibHaqVqw=="], "@typescript-eslint/experimental-utils/eslint-utils": ["eslint-utils@2.1.0", "", { "dependencies": { "eslint-visitor-keys": "^1.1.0" } }, "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg=="],