Files
actual/packages/loot-core/package.json
github-actions[bot] 59e7f858a7 [AI] core: move browser-preload multi-tab coordinator into loot-core
Extracts the WorkerBridge class + the Worker/SharedWorker transport
selector out of packages/desktop-client/src/browser-preload.js and into
a new loot-core module at packages/loot-core/src/platform/client/
browser-preload/. desktop-client's preload shrinks to a thin shell that
only wires its PWA service worker, package.json version, SharedWorker
factory, and the global.Actual shim — everything else is a one-line
startBrowserBackend({ ... }) call into loot-core.

The api package still uses the lighter-weight createBackendWorker entry
in the sibling loot-core module; both packages now consume the worker-
bootstrap primitives from loot-core rather than duplicating them.

Verified end-to-end in the browser via playwright — the api playground
still loads, downloads the budget, and renders accounts+transactions
identically.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 16:02:07 +01:00

225 lines
9.3 KiB
JSON

{
"name": "@actual-app/core",
"version": "26.4.0",
"description": "",
"license": "ISC",
"files": [
"src",
"@types",
"migrations",
"typings",
"default-db.sqlite",
"!src/**/*.test.ts",
"!src/**/__tests__/**",
"!src/**/__snapshots__/**",
"!src/**/__mocks__/**"
],
"imports": {
"#platform/server/asyncStorage": {
"electron": "./src/platform/server/asyncStorage/index.electron.ts",
"api": "./src/platform/server/asyncStorage/index.api.ts",
"default": "./src/platform/server/asyncStorage/index.ts"
},
"#platform/server/connection": {
"electron": "./src/platform/server/connection/index.electron.ts",
"api": "./src/platform/server/connection/index.api.ts",
"default": "./src/platform/server/connection/index.ts"
},
"#platform/server/fetch": {
"electron": "./src/platform/server/fetch/index.electron.ts",
"api": "./src/platform/server/fetch/index.api.ts",
"default": "./src/platform/server/fetch/index.ts"
},
"#platform/server/fs": {
"electron": "./src/platform/server/fs/index.electron.ts",
"api": "./src/platform/server/fs/index.api.ts",
"default": "./src/platform/server/fs/index.ts"
},
"#platform/server/fs/path-join": {
"electron": "./src/platform/server/fs/path-join.electron.ts",
"api": "./src/platform/server/fs/path-join.api.ts",
"default": "./src/platform/server/fs/path-join.ts"
},
"#platform/server/sqlite": {
"electron": "./src/platform/server/sqlite/index.electron.ts",
"api": "./src/platform/server/sqlite/index.api.ts",
"default": "./src/platform/server/sqlite/index.ts"
},
"#platform/client/connection": {
"electron-renderer": "./src/platform/client/connection/index.electron.ts",
"default": "./src/platform/client/connection/index.ts"
},
"#server/encryption/encryption-internals": {
"electron": "./src/server/encryption/encryption-internals.electron.ts",
"api": "./src/server/encryption/encryption-internals.api.ts",
"default": "./src/server/encryption/encryption-internals.ts"
},
"#shared/platform": {
"electron": "./src/shared/platform.electron.ts",
"api": "./src/shared/platform.api.ts",
"default": "./src/shared/platform.ts"
},
"#mocks": "./src/mocks/index.ts",
"#platform/client/backend-worker": "./src/platform/client/backend-worker/index.ts",
"#platform/client/browser-preload": "./src/platform/client/browser-preload/index.ts",
"#platform/client/undo": "./src/platform/client/undo/index.ts",
"#platform/exceptions": "./src/platform/exceptions/index.ts",
"#platform/server/indexeddb": "./src/platform/server/indexeddb/index.ts",
"#platform/server/log": "./src/platform/server/log/index.ts",
"#server/aql": "./src/server/aql/index.ts",
"#server/db": "./src/server/db/index.ts",
"#server/encryption": "./src/server/encryption/index.ts",
"#server/importers": "./src/server/importers/index.ts",
"#server/rules": "./src/server/rules/index.ts",
"#server/sync": "./src/server/sync/index.ts",
"#server/transactions": "./src/server/transactions/index.ts",
"#types/models": "./src/types/models/index.ts",
"#platform/client/*": "./src/platform/client/*.ts",
"#platform/server/*": "./src/platform/server/*.ts",
"#platform/*": "./src/platform/*.ts",
"#server/*": "./src/server/*.ts",
"#shared/*": "./src/shared/*.ts",
"#types/*": "./src/types/*.ts",
"#mocks/*": "./src/mocks/*.ts",
"#*": "./src/*.ts"
},
"exports": {
"./client/accounts/*": "./src/client/accounts/*.ts",
"./client/app/*": "./src/client/app/*.ts",
"./client/budgets/*": "./src/client/budgets/*.ts",
"./client/data-hooks/schedules": "./src/client/data-hooks/schedules.tsx",
"./client/data-hooks/*": "./src/client/data-hooks/*.ts",
"./client/modals/*": "./src/client/modals/*.ts",
"./client/notifications/*": "./src/client/notifications/*.ts",
"./client/prefs/*": "./src/client/prefs/*.ts",
"./client/queries/*": "./src/client/queries/*.ts",
"./client/redux": "./src/client/redux/index.ts",
"./client/store": "./src/client/store/index.ts",
"./client/store/mock": "./src/client/store/mock.ts",
"./client/users/*": "./src/client/users/*.ts",
"./client/queries": "./src/client/queries.ts",
"./client/query-helpers": "./src/client/query-helpers.ts",
"./client/query-hooks": "./src/client/query-hooks.ts",
"./client/reports": "./src/client/reports.ts",
"./client/shared-listeners": "./src/client/shared-listeners.ts",
"./client/SpreadsheetProvider": "./src/client/SpreadsheetProvider.tsx",
"./client/transfer": "./src/client/transfer.ts",
"./client/undo": "./src/client/undo.ts",
"./mocks": "./src/mocks/index.ts",
"./platform/client/backend-worker": "./src/platform/client/backend-worker/index.ts",
"./platform/client/browser-preload": "./src/platform/client/browser-preload/index.ts",
"./platform/client/connection": {
"electron-renderer": "./src/platform/client/connection/index.electron.ts",
"default": "./src/platform/client/connection/index.ts"
},
"./platform/client/undo": "./src/platform/client/undo/index.ts",
"./platform/exceptions": "./src/platform/exceptions/index.ts",
"./platform/server/asyncStorage": {
"electron": "./src/platform/server/asyncStorage/index.electron.ts",
"api": "./src/platform/server/asyncStorage/index.api.ts",
"default": "./src/platform/server/asyncStorage/index.ts"
},
"./platform/server/connection": {
"electron": "./src/platform/server/connection/index.electron.ts",
"api": "./src/platform/server/connection/index.api.ts",
"default": "./src/platform/server/connection/index.ts"
},
"./platform/server/fetch": {
"electron": "./src/platform/server/fetch/index.electron.ts",
"api": "./src/platform/server/fetch/index.api.ts",
"default": "./src/platform/server/fetch/index.ts"
},
"./platform/server/fs": {
"electron": "./src/platform/server/fs/index.electron.ts",
"api": "./src/platform/server/fs/index.api.ts",
"default": "./src/platform/server/fs/index.ts"
},
"./platform/server/log": "./src/platform/server/log/index.ts",
"./platform/server/sqlite": {
"electron": "./src/platform/server/sqlite/index.electron.ts",
"api": "./src/platform/server/sqlite/index.api.ts",
"default": "./src/platform/server/sqlite/index.ts"
},
"./server/budget/types/*": "./src/server/budget/types/*.d.ts",
"./server/*": "./src/server/*.ts",
"./shared/platform": {
"electron": "./src/shared/platform.electron.ts",
"api": "./src/shared/platform.api.ts",
"default": "./src/shared/platform.ts"
},
"./shared/*": "./src/shared/*.ts",
"./types/models": "./src/types/models/index.ts",
"./types/*": "./src/types/*.ts",
"./typings/*": "./typings/*.ts",
"./lib-dist/electron/bundle.desktop.js": "./lib-dist/electron/bundle.desktop.js"
},
"scripts": {
"build:node": "cross-env NODE_ENV=production vite build --config ./vite.desktop.config.mts",
"watch:node": "cross-env NODE_ENV=development vite build --config ./vite.desktop.config.mts --watch",
"build:browser": "cross-env NODE_ENV=production ./bin/build-browser",
"watch:browser": "cross-env NODE_ENV=development ./bin/build-browser",
"generate:i18n": "i18next",
"test": "npm-run-all -cp 'test:*'",
"test:node": "ENV=node vitest --run",
"test:web": "ENV=web vitest --run -c vitest.web.config.ts",
"typecheck": "tsgo -b && tsc-strict",
"build": "tsgo -b",
"prepack": "yarn build && ts-node scripts/add-types-conditions.mts",
"postpack": "ts-node scripts/restore-package-json.mts"
},
"dependencies": {
"@jlongster/sql.js": "^1.6.7",
"@rschedule/core": "^1.5.0",
"@rschedule/standard-date-adapter": "^1.5.0",
"absurd-sql": "0.0.54",
"adm-zip": "^0.5.17",
"better-sqlite3": "^12.8.0",
"csv-parse": "^6.2.1",
"csv-stringify": "^6.7.0",
"date-fns": "^4.1.0",
"google-protobuf": "^3.21.4",
"handlebars": "^4.7.9",
"hyperformula": "^3.2.0",
"lodash": "^4.18.1",
"lru-cache": "^11.2.7",
"memoize-one": "^6.0.0",
"mitt": "^3.0.1",
"promise-retry": "^2.0.1",
"typescript-strict-plugin": "^2.4.4",
"ua-parser-js": "^2.0.9",
"xml2js": "^0.6.2"
},
"devDependencies": {
"@actual-app/crdt": "workspace:*",
"@types/adm-zip": "^0.5.8",
"@types/better-sqlite3": "^7.6.13",
"@types/jlongster__sql.js": "npm:@types/sql.js@latest",
"@types/node": "^22.19.17",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"assert": "^2.1.0",
"browserify-zlib": "^0.2.0",
"buffer": "^6.0.3",
"cross-env": "^10.1.0",
"crypto-browserify": "^3.12.1",
"fake-indexeddb": "^6.2.5",
"fast-check": "^4.6.0",
"i18next": "^25.10.10",
"jest-diff": "^30.3.0",
"jsverify": "^0.8.4",
"mockdate": "^3.0.5",
"npm-run-all": "^4.1.5",
"path-browserify": "^1.0.1",
"peggy": "5.1.0",
"rollup-plugin-visualizer": "^7.0.1",
"stream-browserify": "^3.0.0",
"timers-browserify": "^2.0.12",
"ts-node": "^10.9.2",
"util": "^0.12.5",
"vite": "^8.0.5",
"vite-plugin-node-polyfills": "^0.26.0",
"vite-plugin-peggy-loader": "^2.0.1",
"vitest": "^4.1.2",
"yargs": "^18.0.0"
}
}