Compare commits

...

2 Commits

Author SHA1 Message Date
Claude
952abe5734 [AI] Fix type errors for @actual-app/api consumers with strict TypeScript
Add `publishConfig.exports` to @actual-app/core's package.json with
`types` conditions pointing to compiled `.d.ts` declarations. This way
the development exports stay clean (raw `.ts` for monorepo use), while
published consumers get proper type resolution via `.d.ts` files.

Previously, consumers of @actual-app/api with `strict: true` in their
tsconfig would encounter type errors because TypeScript followed the
exports into loot-core's uncompiled source files (compiled with
`strict: false`).

Also add .npmignore to ensure `lib-dist/decl` (declaration files) are
included when publishing to npm, overriding the root .gitignore `*.d.ts`
exclusion pattern.

Closes #7410

https://claude.ai/code/session_01UmSBeYnpkWMiCU6R9Wd7ou
2026-04-08 20:04:19 +00:00
Claude
d90f00de82 [AI] Fix type errors for @actual-app/api consumers with strict TypeScript
Add `types` conditions to @actual-app/core's package.json exports so that
TypeScript resolves to compiled `.d.ts` declarations instead of raw `.ts`
source files. Previously, consumers of @actual-app/api with
`strict: true` in their tsconfig would encounter type errors because
TypeScript followed the exports into loot-core's uncompiled source files
which have `strict: false`.

Also add .npmignore to ensure `lib-dist/decl` (declaration files) are
included when publishing to npm, overriding the root .gitignore `*.d.ts`
exclusion pattern.

Closes #7410

https://claude.ai/code/session_01UmSBeYnpkWMiCU6R9Wd7ou
2026-04-08 19:34:17 +00:00
2 changed files with 171 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
lib-node
lib-dist
!lib-dist/decl
!*.d.ts

View File

@@ -129,6 +129,173 @@
"./typings/*": "./typings/*.ts",
"./lib-dist/electron/bundle.desktop.js": "./lib-dist/electron/bundle.desktop.js"
},
"publishConfig": {
"exports": {
"./client/accounts/*": {
"types": "./lib-dist/decl/src/client/accounts/*.d.ts",
"default": "./src/client/accounts/*.ts"
},
"./client/app/*": {
"types": "./lib-dist/decl/src/client/app/*.d.ts",
"default": "./src/client/app/*.ts"
},
"./client/budgets/*": {
"types": "./lib-dist/decl/src/client/budgets/*.d.ts",
"default": "./src/client/budgets/*.ts"
},
"./client/data-hooks/schedules": {
"types": "./lib-dist/decl/src/client/data-hooks/schedules.d.ts",
"default": "./src/client/data-hooks/schedules.tsx"
},
"./client/data-hooks/*": {
"types": "./lib-dist/decl/src/client/data-hooks/*.d.ts",
"default": "./src/client/data-hooks/*.ts"
},
"./client/modals/*": {
"types": "./lib-dist/decl/src/client/modals/*.d.ts",
"default": "./src/client/modals/*.ts"
},
"./client/notifications/*": {
"types": "./lib-dist/decl/src/client/notifications/*.d.ts",
"default": "./src/client/notifications/*.ts"
},
"./client/prefs/*": {
"types": "./lib-dist/decl/src/client/prefs/*.d.ts",
"default": "./src/client/prefs/*.ts"
},
"./client/queries/*": {
"types": "./lib-dist/decl/src/client/queries/*.d.ts",
"default": "./src/client/queries/*.ts"
},
"./client/redux": {
"types": "./lib-dist/decl/src/client/redux/index.d.ts",
"default": "./src/client/redux/index.ts"
},
"./client/store": {
"types": "./lib-dist/decl/src/client/store/index.d.ts",
"default": "./src/client/store/index.ts"
},
"./client/store/mock": {
"types": "./lib-dist/decl/src/client/store/mock.d.ts",
"default": "./src/client/store/mock.ts"
},
"./client/users/*": {
"types": "./lib-dist/decl/src/client/users/*.d.ts",
"default": "./src/client/users/*.ts"
},
"./client/queries": {
"types": "./lib-dist/decl/src/client/queries.d.ts",
"default": "./src/client/queries.ts"
},
"./client/query-helpers": {
"types": "./lib-dist/decl/src/client/query-helpers.d.ts",
"default": "./src/client/query-helpers.ts"
},
"./client/query-hooks": {
"types": "./lib-dist/decl/src/client/query-hooks.d.ts",
"default": "./src/client/query-hooks.ts"
},
"./client/reports": {
"types": "./lib-dist/decl/src/client/reports.d.ts",
"default": "./src/client/reports.ts"
},
"./client/shared-listeners": {
"types": "./lib-dist/decl/src/client/shared-listeners.d.ts",
"default": "./src/client/shared-listeners.ts"
},
"./client/SpreadsheetProvider": {
"types": "./lib-dist/decl/src/client/SpreadsheetProvider.d.ts",
"default": "./src/client/SpreadsheetProvider.tsx"
},
"./client/transfer": {
"types": "./lib-dist/decl/src/client/transfer.d.ts",
"default": "./src/client/transfer.ts"
},
"./client/undo": {
"types": "./lib-dist/decl/src/client/undo.d.ts",
"default": "./src/client/undo.ts"
},
"./mocks": {
"types": "./lib-dist/decl/src/mocks/index.d.ts",
"default": "./src/mocks/index.ts"
},
"./platform/client/connection": {
"types": "./lib-dist/decl/src/platform/client/connection/index.d.ts",
"electron": "./src/platform/client/connection/index.ts",
"default": "./src/platform/client/connection/index.browser.ts"
},
"./platform/client/undo": {
"types": "./lib-dist/decl/src/platform/client/undo/index.d.ts",
"default": "./src/platform/client/undo/index.ts"
},
"./platform/exceptions": {
"types": "./lib-dist/decl/src/platform/exceptions/index.d.ts",
"default": "./src/platform/exceptions/index.ts"
},
"./platform/server/asyncStorage": {
"types": "./lib-dist/decl/src/platform/server/asyncStorage/index.d.ts",
"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": {
"types": "./lib-dist/decl/src/platform/server/connection/index.d.ts",
"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": {
"types": "./lib-dist/decl/src/platform/server/fetch/index.d.ts",
"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": {
"types": "./lib-dist/decl/src/platform/server/fs/index.d.ts",
"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": {
"types": "./lib-dist/decl/src/platform/server/log/index.d.ts",
"default": "./src/platform/server/log/index.ts"
},
"./platform/server/sqlite": {
"types": "./lib-dist/decl/src/platform/server/sqlite/index.d.ts",
"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/*": {
"types": "./lib-dist/decl/src/server/*.d.ts",
"default": "./src/server/*.ts"
},
"./shared/platform": {
"types": "./lib-dist/decl/src/shared/platform.d.ts",
"electron": "./src/shared/platform.electron.ts",
"api": "./src/shared/platform.api.ts",
"default": "./src/shared/platform.ts"
},
"./shared/*": {
"types": "./lib-dist/decl/src/shared/*.d.ts",
"default": "./src/shared/*.ts"
},
"./types/models": {
"types": "./lib-dist/decl/src/types/models/index.d.ts",
"default": "./src/types/models/index.ts"
},
"./types/*": {
"types": "./lib-dist/decl/src/types/*.d.ts",
"default": "./src/types/*.ts"
},
"./typings/*": {
"types": "./lib-dist/decl/typings/*.d.ts",
"default": "./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.ts",
"watch:node": "cross-env NODE_ENV=development vite build --config ./vite.desktop.config.ts --watch",