mirror of
https://github.com/actualbudget/actual.git
synced 2026-03-21 06:58:47 -05:00
The API package was previously Node.js-only due to its dependency on better-sqlite3 and Node.js fs/path modules. This adds a browser build that uses loot-core's existing browser platform implementations (sql.js/WASM, IndexedDB, absurd-sql) instead. Changes: - Add index.web.ts: browser entry point (no Node.js version check or node-fetch polyfill) - Add vite.browser.config.ts: browser-targeted Vite build that resolves to browser platform files (index.ts) instead of Node.js ones (index.api.ts -> index.electron.ts) - Update package.json: conditional exports (browser vs default/node), module field, build:browser script - Update tsconfig.json: exclude new config file from type checking The browser build outputs dist/browser.js (ESM) alongside the existing dist/index.js (CJS/Node). Bundlers that support the "browser" condition in package.json exports will automatically use the browser build. https://claude.ai/code/session_01MnxRXLNjqXrVb5CdsC85Fb
33 lines
807 B
TypeScript
33 lines
807 B
TypeScript
import path from 'path';
|
|
|
|
import { defineConfig } from 'vite';
|
|
import peggyLoader from 'vite-plugin-peggy-loader';
|
|
|
|
const distDir = path.resolve(__dirname, 'dist');
|
|
|
|
export default defineConfig({
|
|
build: {
|
|
target: 'esnext',
|
|
outDir: distDir,
|
|
emptyOutDir: false,
|
|
sourcemap: true,
|
|
lib: {
|
|
entry: path.resolve(__dirname, 'index.web.ts'),
|
|
formats: ['es'],
|
|
fileName: () => 'browser.js',
|
|
},
|
|
rollupOptions: {
|
|
external: [
|
|
// These are browser APIs provided by the environment
|
|
/^node:/,
|
|
],
|
|
},
|
|
},
|
|
plugins: [peggyLoader()],
|
|
resolve: {
|
|
// Default extensions — picks up browser implementations (index.ts)
|
|
// instead of .api.ts (which resolves to Node.js/Electron code)
|
|
extensions: ['.js', '.ts', '.tsx', '.json'],
|
|
},
|
|
});
|