@actual-app/core 26.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/.swcrc +11 -0
  2. package/bin/build-browser +40 -0
  3. package/bin/copy-migrations +9 -0
  4. package/db.sqlite +0 -0
  5. package/default-db.sqlite +0 -0
  6. package/migrations/.force-copy-windows +0 -0
  7. package/migrations/1548957970627_remove-db-version.sql +5 -0
  8. package/migrations/1550601598648_payees.sql +23 -0
  9. package/migrations/1555786194328_remove_category_group_unique.sql +25 -0
  10. package/migrations/1561751833510_indexes.sql +7 -0
  11. package/migrations/1567699552727_budget.sql +38 -0
  12. package/migrations/1582384163573_cleared.sql +6 -0
  13. package/migrations/1597756566448_rules.sql +10 -0
  14. package/migrations/1608652596043_parent_field.sql +13 -0
  15. package/migrations/1608652596044_trans_views.sql +56 -0
  16. package/migrations/1612625548236_optimize.sql +7 -0
  17. package/migrations/1614782639336_trans_views2.sql +33 -0
  18. package/migrations/1615745967948_meta.sql +10 -0
  19. package/migrations/1616167010796_accounts_order.sql +5 -0
  20. package/migrations/1618975177358_schedules.sql +28 -0
  21. package/migrations/1632571489012_remove_cache.js +136 -0
  22. package/migrations/1679728867040_rules_conditions.sql +5 -0
  23. package/migrations/1681115033845_add_schedule_name.sql +5 -0
  24. package/migrations/1682974838138_remove_payee_rules.sql +5 -0
  25. package/migrations/1685007876842_add_category_hidden.sql +6 -0
  26. package/migrations/1686139660866_remove_account_type.sql +5 -0
  27. package/migrations/1688749527273_transaction_filters.sql +10 -0
  28. package/migrations/1688841238000_add_account_type.sql +5 -0
  29. package/migrations/1691233396000_add_schedule_next_date_tombstone.sql +5 -0
  30. package/migrations/1694438752000_add_goal_targets.sql +7 -0
  31. package/migrations/1697046240000_add_reconciled.sql +5 -0
  32. package/migrations/1704572023730_add_account_sync_source.sql +5 -0
  33. package/migrations/1704572023731_add_missing_goCardless_sync_source.sql +9 -0
  34. package/migrations/1707267033000_reports.sql +28 -0
  35. package/migrations/1712784523000_unhide_input_group.sql +8 -0
  36. package/migrations/1716359441000_include_current.sql +5 -0
  37. package/migrations/1720310586000_link_transfer_schedules.sql +19 -0
  38. package/migrations/1720664867241_add_payee_favorite.sql +5 -0
  39. package/migrations/1720665000000_goal_context.sql +6 -0
  40. package/migrations/1722717601000_reports_move_selected_categories.js +55 -0
  41. package/migrations/1722804019000_create_dashboard_table.js +69 -0
  42. package/migrations/1723665565000_prefs.js +59 -0
  43. package/migrations/1730744182000_fix_dashboard_table.sql +7 -0
  44. package/migrations/1736640000000_custom_report_sorting.sql +7 -0
  45. package/migrations/1737158400000_add_learn_categories_to_payees.sql +5 -0
  46. package/migrations/1738491452000_sorting_rename.sql +13 -0
  47. package/migrations/1739139550000_bank_sync_page.sql +7 -0
  48. package/migrations/1740506588539_add_last_reconciled_at.sql +5 -0
  49. package/migrations/1745425408000_update_budgetType_pref.sql +7 -0
  50. package/migrations/1749799110000_add_tags.sql +10 -0
  51. package/migrations/1749799110001_tags_tombstone.sql +5 -0
  52. package/migrations/1754611200000_add_category_template_settings.sql +5 -0
  53. package/migrations/1759260219000_add_trim_interval_report_setting.sql +6 -0
  54. package/migrations/1759842823172_add_isGlobal_to_preferences.sql +1 -0
  55. package/migrations/1762178745667_rename_csv_skip_lines_pref.sql +8 -0
  56. package/migrations/1765518577215_multiple_dashboards.js +30 -0
  57. package/migrations/1768872504000_add_payee_locations.sql +21 -0
  58. package/package.json +128 -0
  59. package/src/mocks/arbitrary-schema.ts +162 -0
  60. package/src/mocks/budget.ts +901 -0
  61. package/src/mocks/files/8859-1.qfx +63 -0
  62. package/src/mocks/files/best.data-ever$.QFX +124 -0
  63. package/src/mocks/files/big.data.QiF +91 -0
  64. package/src/mocks/files/budgets/.commit-to-git +0 -0
  65. package/src/mocks/files/camt/camt.053.payee-memo.xml +127 -0
  66. package/src/mocks/files/camt/camt.053.xml +463 -0
  67. package/src/mocks/files/credit-card.ofx +11 -0
  68. package/src/mocks/files/data-multi-decimal.ofx +64 -0
  69. package/src/mocks/files/data-payee-memo.ofx +75 -0
  70. package/src/mocks/files/data-payee-memo.qif +17 -0
  71. package/src/mocks/files/data.ofx +124 -0
  72. package/src/mocks/files/data.qfx +124 -0
  73. package/src/mocks/files/data.qif +91 -0
  74. package/src/mocks/files/default-budget-template/db.sqlite +0 -0
  75. package/src/mocks/files/default-budget-template/metadata.json +6 -0
  76. package/src/mocks/files/html-vals.qfx +17 -0
  77. package/src/mocks/index.ts +221 -0
  78. package/src/mocks/migrations/1508717984291_up_add-poop.sql +13 -0
  79. package/src/mocks/migrations/1508718036311_up_modify-poop.sql +2 -0
  80. package/src/mocks/migrations/1508727787513_remove-is_income.sql +15 -0
  81. package/src/mocks/random.ts +16 -0
  82. package/src/mocks/setup.ts +180 -0
  83. package/src/mocks/spreadsheet.ts +101 -0
  84. package/src/mocks/util.ts +82 -0
  85. package/src/platform/client/connection/README.md +3 -0
  86. package/src/platform/client/connection/__mocks__/index.ts +67 -0
  87. package/src/platform/client/connection/index-types.ts +95 -0
  88. package/src/platform/client/connection/index.browser.ts +213 -0
  89. package/src/platform/client/connection/index.ts +155 -0
  90. package/src/platform/client/undo/index.ts +59 -0
  91. package/src/platform/exceptions/__mocks__/index.ts +7 -0
  92. package/src/platform/exceptions/index.ts +9 -0
  93. package/src/platform/server/asyncStorage/__mocks__/index.ts +50 -0
  94. package/src/platform/server/asyncStorage/index-types.ts +35 -0
  95. package/src/platform/server/asyncStorage/index.api.ts +2 -0
  96. package/src/platform/server/asyncStorage/index.electron.ts +88 -0
  97. package/src/platform/server/asyncStorage/index.ts +126 -0
  98. package/src/platform/server/connection/README.md +3 -0
  99. package/src/platform/server/connection/__mocks__/index.ts +15 -0
  100. package/src/platform/server/connection/index-types.ts +20 -0
  101. package/src/platform/server/connection/index.api.ts +13 -0
  102. package/src/platform/server/connection/index.electron.ts +102 -0
  103. package/src/platform/server/connection/index.ts +154 -0
  104. package/src/platform/server/fetch/__mocks__/index.ts +3 -0
  105. package/src/platform/server/fetch/index.api.ts +1 -0
  106. package/src/platform/server/fetch/index.electron.ts +18 -0
  107. package/src/platform/server/fetch/index.ts +20 -0
  108. package/src/platform/server/fs/index.api.ts +198 -0
  109. package/src/platform/server/fs/index.electron.ts +208 -0
  110. package/src/platform/server/fs/index.test.ts +117 -0
  111. package/src/platform/server/fs/index.ts +416 -0
  112. package/src/platform/server/fs/path-join.api.ts +1 -0
  113. package/src/platform/server/fs/path-join.electron.ts +1 -0
  114. package/src/platform/server/fs/path-join.ts +97 -0
  115. package/src/platform/server/fs/shared.ts +33 -0
  116. package/src/platform/server/indexeddb/index.ts +115 -0
  117. package/src/platform/server/log/index.ts +43 -0
  118. package/src/platform/server/sqlite/index.api.ts +2 -0
  119. package/src/platform/server/sqlite/index.electron.ts +134 -0
  120. package/src/platform/server/sqlite/index.test.ts +108 -0
  121. package/src/platform/server/sqlite/index.ts +241 -0
  122. package/src/platform/server/sqlite/normalise.ts +9 -0
  123. package/src/platform/server/sqlite/unicodeLike.test.ts +58 -0
  124. package/src/platform/server/sqlite/unicodeLike.ts +31 -0
  125. package/src/server/__mocks__/post.ts +9 -0
  126. package/src/server/__snapshots__/main.test.ts.snap +199 -0
  127. package/src/server/__snapshots__/sheet.test.ts.snap +9 -0
  128. package/src/server/accounts/__snapshots__/sync.test.ts.snap +136 -0
  129. package/src/server/accounts/app-bank-sync.test.ts +136 -0
  130. package/src/server/accounts/app.ts +1294 -0
  131. package/src/server/accounts/link.ts +25 -0
  132. package/src/server/accounts/payees.ts +36 -0
  133. package/src/server/accounts/sync.test.ts +679 -0
  134. package/src/server/accounts/sync.ts +1168 -0
  135. package/src/server/accounts/title/index.ts +60 -0
  136. package/src/server/accounts/title/lower-case.ts +93 -0
  137. package/src/server/accounts/title/specials.ts +21 -0
  138. package/src/server/admin/app.ts +241 -0
  139. package/src/server/api-models.ts +244 -0
  140. package/src/server/api.test.ts +36 -0
  141. package/src/server/api.ts +1030 -0
  142. package/src/server/app.ts +91 -0
  143. package/src/server/aql/compiler.test.ts +966 -0
  144. package/src/server/aql/compiler.ts +1222 -0
  145. package/src/server/aql/exec.test.ts +289 -0
  146. package/src/server/aql/exec.ts +128 -0
  147. package/src/server/aql/index.ts +41 -0
  148. package/src/server/aql/schema/executors.test.ts +420 -0
  149. package/src/server/aql/schema/executors.ts +345 -0
  150. package/src/server/aql/schema/index.test.ts +67 -0
  151. package/src/server/aql/schema/index.ts +409 -0
  152. package/src/server/aql/schema-helpers.test.ts +242 -0
  153. package/src/server/aql/schema-helpers.ts +208 -0
  154. package/src/server/aql/views.test.ts +62 -0
  155. package/src/server/aql/views.ts +57 -0
  156. package/src/server/auth/app.ts +387 -0
  157. package/src/server/bench.ts +29 -0
  158. package/src/server/budget/actions.ts +686 -0
  159. package/src/server/budget/app.ts +469 -0
  160. package/src/server/budget/base.test.ts +340 -0
  161. package/src/server/budget/base.ts +339 -0
  162. package/src/server/budget/category-template-context.test.ts +1658 -0
  163. package/src/server/budget/category-template-context.ts +862 -0
  164. package/src/server/budget/cleanup-template.pegjs +27 -0
  165. package/src/server/budget/cleanup-template.ts +408 -0
  166. package/src/server/budget/envelope.ts +403 -0
  167. package/src/server/budget/goal-template.pegjs +110 -0
  168. package/src/server/budget/goal-template.ts +309 -0
  169. package/src/server/budget/report.ts +308 -0
  170. package/src/server/budget/schedule-template.test.ts +184 -0
  171. package/src/server/budget/schedule-template.ts +351 -0
  172. package/src/server/budget/statements.ts +60 -0
  173. package/src/server/budget/template-notes.test.ts +393 -0
  174. package/src/server/budget/template-notes.ts +323 -0
  175. package/src/server/budget/util.ts +25 -0
  176. package/src/server/budgetfiles/__snapshots__/backups.test.ts.snap +101 -0
  177. package/src/server/budgetfiles/app.ts +672 -0
  178. package/src/server/budgetfiles/backups.test.ts +79 -0
  179. package/src/server/budgetfiles/backups.ts +251 -0
  180. package/src/server/cloud-storage.ts +467 -0
  181. package/src/server/dashboard/app.ts +373 -0
  182. package/src/server/db/__snapshots__/index.test.ts.snap +271 -0
  183. package/src/server/db/index.test.ts +300 -0
  184. package/src/server/db/index.ts +855 -0
  185. package/src/server/db/mappings.ts +59 -0
  186. package/src/server/db/sort.ts +58 -0
  187. package/src/server/db/types/index.ts +342 -0
  188. package/src/server/db/util.ts +36 -0
  189. package/src/server/encryption/app.ts +133 -0
  190. package/src/server/encryption/encryption-internals.api.ts +2 -0
  191. package/src/server/encryption/encryption-internals.electron.ts +89 -0
  192. package/src/server/encryption/encryption-internals.ts +109 -0
  193. package/src/server/encryption/encryption.test.ts +19 -0
  194. package/src/server/encryption/index.test.ts +19 -0
  195. package/src/server/encryption/index.ts +89 -0
  196. package/src/server/errors.ts +110 -0
  197. package/src/server/filters/app.ts +191 -0
  198. package/src/server/importers/actual.ts +49 -0
  199. package/src/server/importers/index.ts +58 -0
  200. package/src/server/importers/ynab4-types.ts +163 -0
  201. package/src/server/importers/ynab4.ts +470 -0
  202. package/src/server/importers/ynab5-types.ts +290 -0
  203. package/src/server/importers/ynab5.ts +1193 -0
  204. package/src/server/main-app.ts +25 -0
  205. package/src/server/main.test.ts +392 -0
  206. package/src/server/main.ts +336 -0
  207. package/src/server/migrate/__snapshots__/migrations.test.ts.snap +17 -0
  208. package/src/server/migrate/cli.ts +100 -0
  209. package/src/server/migrate/migrations.test.ts +81 -0
  210. package/src/server/migrate/migrations.ts +192 -0
  211. package/src/server/models.ts +184 -0
  212. package/src/server/mutators.ts +139 -0
  213. package/src/server/notes/app.ts +18 -0
  214. package/src/server/payees/app.ts +351 -0
  215. package/src/server/polyfills.ts +26 -0
  216. package/src/server/post.ts +219 -0
  217. package/src/server/preferences/app.ts +249 -0
  218. package/src/server/prefs.ts +91 -0
  219. package/src/server/reports/app.ts +187 -0
  220. package/src/server/rules/action.ts +344 -0
  221. package/src/server/rules/app.ts +193 -0
  222. package/src/server/rules/condition.ts +436 -0
  223. package/src/server/rules/customFunctions.ts +61 -0
  224. package/src/server/rules/formula-action.test.ts +175 -0
  225. package/src/server/rules/handlebars-helpers.ts +131 -0
  226. package/src/server/rules/index.test.ts +1095 -0
  227. package/src/server/rules/index.ts +22 -0
  228. package/src/server/rules/rule-indexer.ts +89 -0
  229. package/src/server/rules/rule-utils.ts +274 -0
  230. package/src/server/rules/rule.ts +193 -0
  231. package/src/server/schedules/app.test.ts +502 -0
  232. package/src/server/schedules/app.ts +644 -0
  233. package/src/server/schedules/find-schedules.ts +391 -0
  234. package/src/server/server-config.ts +59 -0
  235. package/src/server/sheet.test.ts +101 -0
  236. package/src/server/sheet.ts +280 -0
  237. package/src/server/spreadsheet/__snapshots__/spreadsheet.test.ts.snap +5 -0
  238. package/src/server/spreadsheet/app.ts +54 -0
  239. package/src/server/spreadsheet/globals.ts +13 -0
  240. package/src/server/spreadsheet/graph-data-structure.ts +165 -0
  241. package/src/server/spreadsheet/scratch +60 -0
  242. package/src/server/spreadsheet/spreadsheet.test.ts +191 -0
  243. package/src/server/spreadsheet/spreadsheet.ts +523 -0
  244. package/src/server/spreadsheet/util.ts +15 -0
  245. package/src/server/sql/init.sql +88 -0
  246. package/src/server/sync/__snapshots__/sync.test.ts.snap +31 -0
  247. package/src/server/sync/app.ts +29 -0
  248. package/src/server/sync/encoder.ts +129 -0
  249. package/src/server/sync/index.ts +820 -0
  250. package/src/server/sync/make-test-message.ts +19 -0
  251. package/src/server/sync/migrate.test.ts +169 -0
  252. package/src/server/sync/migrate.ts +48 -0
  253. package/src/server/sync/repair.ts +39 -0
  254. package/src/server/sync/reset.ts +91 -0
  255. package/src/server/sync/sync.property.test.ts +385 -0
  256. package/src/server/sync/sync.test.ts +349 -0
  257. package/src/server/sync/utils.ts +3 -0
  258. package/src/server/tags/app.ts +101 -0
  259. package/src/server/tests/mockData.json +9352 -0
  260. package/src/server/tests/mockSyncServer.ts +119 -0
  261. package/src/server/tools/app.ts +152 -0
  262. package/src/server/transactions/__snapshots__/transaction-rules.test.ts.snap +173 -0
  263. package/src/server/transactions/__snapshots__/transfer.test.ts.snap +655 -0
  264. package/src/server/transactions/app.ts +136 -0
  265. package/src/server/transactions/export/export-to-csv.ts +132 -0
  266. package/src/server/transactions/import/__snapshots__/parse-file.test.ts.snap +1582 -0
  267. package/src/server/transactions/import/ofx2json.test.ts +33 -0
  268. package/src/server/transactions/import/ofx2json.ts +157 -0
  269. package/src/server/transactions/import/parse-file.test.ts +224 -0
  270. package/src/server/transactions/import/parse-file.ts +286 -0
  271. package/src/server/transactions/import/qif2json.ts +110 -0
  272. package/src/server/transactions/import/xmlcamt2json.ts +168 -0
  273. package/src/server/transactions/index.ts +196 -0
  274. package/src/server/transactions/merge.test.ts +370 -0
  275. package/src/server/transactions/merge.ts +139 -0
  276. package/src/server/transactions/transaction-rules.test.ts +994 -0
  277. package/src/server/transactions/transaction-rules.ts +1038 -0
  278. package/src/server/transactions/transfer.test.ts +221 -0
  279. package/src/server/transactions/transfer.ts +173 -0
  280. package/src/server/undo.ts +271 -0
  281. package/src/server/update.ts +37 -0
  282. package/src/server/util/budget-name.ts +61 -0
  283. package/src/server/util/custom-sync-mapping.ts +48 -0
  284. package/src/server/util/rschedule.ts +9 -0
  285. package/src/shared/__mocks__/platform.ts +7 -0
  286. package/src/shared/__snapshots__/months.test.ts.snap +21 -0
  287. package/src/shared/arithmetic.test.ts +112 -0
  288. package/src/shared/arithmetic.ts +170 -0
  289. package/src/shared/async.test.ts +135 -0
  290. package/src/shared/async.ts +76 -0
  291. package/src/shared/constants.ts +5 -0
  292. package/src/shared/currencies.ts +70 -0
  293. package/src/shared/dashboard.ts +260 -0
  294. package/src/shared/environment.ts +18 -0
  295. package/src/shared/errors.ts +195 -0
  296. package/src/shared/locale.ts +27 -0
  297. package/src/shared/location-utils.test.ts +69 -0
  298. package/src/shared/location-utils.ts +49 -0
  299. package/src/shared/months.test.ts +5 -0
  300. package/src/shared/months.ts +485 -0
  301. package/src/shared/normalisation.ts +6 -0
  302. package/src/shared/platform.electron.ts +21 -0
  303. package/src/shared/platform.ts +20 -0
  304. package/src/shared/query.ts +176 -0
  305. package/src/shared/rules.test.ts +56 -0
  306. package/src/shared/rules.ts +371 -0
  307. package/src/shared/schedules.test.ts +570 -0
  308. package/src/shared/schedules.ts +560 -0
  309. package/src/shared/test-helpers.ts +156 -0
  310. package/src/shared/transactions.test.ts +275 -0
  311. package/src/shared/transactions.ts +433 -0
  312. package/src/shared/transfer.test.ts +75 -0
  313. package/src/shared/transfer.ts +16 -0
  314. package/src/shared/user.ts +4 -0
  315. package/src/shared/util.test.ts +240 -0
  316. package/src/shared/util.ts +633 -0
  317. package/src/types/api-handlers.ts +287 -0
  318. package/src/types/budget.ts +8 -0
  319. package/src/types/file.ts +47 -0
  320. package/src/types/handlers.ts +46 -0
  321. package/src/types/models/account.ts +24 -0
  322. package/src/types/models/bank-sync.ts +23 -0
  323. package/src/types/models/bank.ts +6 -0
  324. package/src/types/models/category-group.ts +11 -0
  325. package/src/types/models/category.ts +13 -0
  326. package/src/types/models/dashboard.ts +199 -0
  327. package/src/types/models/gocardless.ts +84 -0
  328. package/src/types/models/import-transaction.ts +56 -0
  329. package/src/types/models/index.ts +23 -0
  330. package/src/types/models/nearby-payee.ts +7 -0
  331. package/src/types/models/note.ts +4 -0
  332. package/src/types/models/openid.ts +8 -0
  333. package/src/types/models/payee-location.ts +8 -0
  334. package/src/types/models/payee.ts +10 -0
  335. package/src/types/models/pluggyai.ts +19 -0
  336. package/src/types/models/reports.ts +144 -0
  337. package/src/types/models/rule.ts +174 -0
  338. package/src/types/models/schedule.ts +49 -0
  339. package/src/types/models/simplefin.ts +28 -0
  340. package/src/types/models/tags.ts +6 -0
  341. package/src/types/models/templates.ts +135 -0
  342. package/src/types/models/transaction-filter.ts +9 -0
  343. package/src/types/models/transaction.ts +39 -0
  344. package/src/types/models/user-access.ts +10 -0
  345. package/src/types/models/user.ts +25 -0
  346. package/src/types/prefs.ts +167 -0
  347. package/src/types/server-events.ts +86 -0
  348. package/src/types/server-handlers.ts +27 -0
  349. package/src/types/util.ts +26 -0
  350. package/tsconfig.json +34 -0
  351. package/typings/pegjs.ts +1 -0
  352. package/typings/process-worker.ts +12 -0
  353. package/typings/vite-plugin-peggy-loader.ts +1 -0
  354. package/typings/window.ts +62 -0
  355. package/vite.config.ts +109 -0
  356. package/vite.desktop.config.ts +59 -0
  357. package/vitest.config.ts +43 -0
  358. package/vitest.web.config.ts +38 -0
package/.swcrc ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "jsc": {
3
+ "target": "es2022",
4
+ "externalHelpers": true,
5
+ "parser": {
6
+ "syntax": "typescript",
7
+ "tsx": true
8
+ }
9
+ },
10
+ "sourceMaps": true
11
+ }
@@ -0,0 +1,40 @@
1
+ #!/bin/bash -e
2
+
3
+ cd `dirname "$0"`
4
+ ROOT=`pwd -P`
5
+ VITE_ARGS=""
6
+
7
+ PUBLIC_DIR="$ROOT"/../../desktop-client/public
8
+ DATA_DIR="$PUBLIC_DIR"/data
9
+ mkdir -p "$DATA_DIR"
10
+ "$ROOT"/copy-migrations "$DATA_DIR"
11
+
12
+ cd "$DATA_DIR"
13
+ find * -type f | sort > ../data-file-index.txt
14
+ cd "$ROOT"
15
+
16
+ # Clean out previous build files
17
+ rm -f ../lib-dist/browser/*
18
+ rm -rf ../../desktop-client/public/kcab
19
+
20
+ if [ $NODE_ENV == 'development' ]; then
21
+ # In dev mode, always enable watch mode and symlink the build files.
22
+ # Make sure to do this before starting the build since watch mode
23
+ # will block
24
+ VITE_ARGS="$VITE_ARGS --watch"
25
+ if [ "$OSTYPE" == "msys" ]; then
26
+ # Ensure symlinks are created as native Windows symlinks.
27
+ export MSYS=winsymlinks:nativestrict
28
+ fi
29
+ ln -snf "$ROOT"/../lib-dist/browser ../../desktop-client/public/kcab
30
+ fi
31
+
32
+ cp ../../../node_modules/@jlongster/sql.js/dist/sql-wasm.wasm "$PUBLIC_DIR"/sql-wasm.wasm
33
+
34
+ yarn vite build --config ../vite.config.ts --mode $NODE_ENV $VITE_ARGS
35
+
36
+ if [ $NODE_ENV == 'production' ]; then
37
+ # In production, just copy the built files
38
+ mkdir ../../desktop-client/public/kcab
39
+ cp -r ../lib-dist/browser/* ../../desktop-client/public/kcab
40
+ fi
@@ -0,0 +1,9 @@
1
+ #!/bin/bash -e
2
+
3
+ ROOT=`dirname $(dirname "$0")`
4
+ DEST="$1"
5
+
6
+ rm -rf "$DEST"/migrations
7
+ mkdir -p "$DEST"/migrations
8
+ cp "$ROOT"/migrations/* "$DEST"/migrations/
9
+ cp "$ROOT"/default-db.sqlite "$DEST"
package/db.sqlite ADDED
File without changes
Binary file
File without changes
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ DROP TABLE db_version;
4
+
5
+ COMMIT;
@@ -0,0 +1,23 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ CREATE TABLE payees
4
+ (id TEXT PRIMARY KEY,
5
+ name TEXT,
6
+ category TEXT,
7
+ tombstone INTEGER DEFAULT 0,
8
+ transfer_acct TEXT);
9
+
10
+ CREATE TABLE payee_rules
11
+ (id TEXT PRIMARY KEY,
12
+ payee_id TEXT,
13
+ type TEXT,
14
+ value TEXT,
15
+ tombstone INTEGER DEFAULT 0);
16
+
17
+ CREATE INDEX payee_rules_lowercase_index ON payee_rules(LOWER(value));
18
+
19
+ CREATE TABLE payee_mapping
20
+ (id TEXT PRIMARY KEY,
21
+ targetId TEXT);
22
+
23
+ COMMIT;
@@ -0,0 +1,25 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ CREATE TEMPORARY TABLE category_groups_tmp
4
+ (id TEXT PRIMARY KEY,
5
+ name TEXT UNIQUE,
6
+ is_income INTEGER DEFAULT 0,
7
+ sort_order REAL,
8
+ tombstone INTEGER DEFAULT 0);
9
+
10
+ INSERT INTO category_groups_tmp SELECT * FROM category_groups;
11
+
12
+ DROP TABLE category_groups;
13
+
14
+ CREATE TABLE category_groups
15
+ (id TEXT PRIMARY KEY,
16
+ name TEXT,
17
+ is_income INTEGER DEFAULT 0,
18
+ sort_order REAL,
19
+ tombstone INTEGER DEFAULT 0);
20
+
21
+ INSERT INTO category_groups SELECT * FROM category_groups_tmp;
22
+
23
+ DROP TABLE category_groups_tmp;
24
+
25
+ COMMIT;
@@ -0,0 +1,7 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ CREATE INDEX trans_category_date ON transactions(category, date);
4
+ CREATE INDEX trans_category ON transactions(category);
5
+ CREATE INDEX trans_date ON transactions(date);
6
+
7
+ COMMIT;
@@ -0,0 +1,38 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ DELETE FROM spreadsheet_cells WHERE
4
+ name NOT LIKE '%!budget\_%' ESCAPE '\' AND
5
+ name NOT LIKE '%!carryover\_%' ESCAPE '\' AND
6
+ name NOT LIKE '%!buffered';
7
+
8
+ UPDATE OR REPLACE spreadsheet_cells SET name = REPLACE(name, '_', '-');
9
+
10
+ UPDATE OR REPLACE spreadsheet_cells SET
11
+ name =
12
+ SUBSTR(name, 1, 28) ||
13
+ '-' ||
14
+ SUBSTR(name, 29, 4) ||
15
+ '-' ||
16
+ SUBSTR(name, 33, 4) ||
17
+ '-' ||
18
+ SUBSTR(name, 37, 4) ||
19
+ '-' ||
20
+ SUBSTR(name, 41, 12)
21
+ WHERE name LIKE '%!budget-%' AND LENGTH(name) = 52;
22
+
23
+ UPDATE OR REPLACE spreadsheet_cells SET
24
+ name =
25
+ SUBSTR(name, 1, 31) ||
26
+ '-' ||
27
+ SUBSTR(name, 32, 4) ||
28
+ '-' ||
29
+ SUBSTR(name, 36, 4) ||
30
+ '-' ||
31
+ SUBSTR(name, 40, 4) ||
32
+ '-' ||
33
+ SUBSTR(name, 44, 12)
34
+ WHERE name LIKE '%!carryover-%' AND LENGTH(name) = 55;
35
+
36
+ UPDATE spreadsheet_cells SET expr = SUBSTR(expr, 2) WHERE name LIKE '%!carryover-%';
37
+
38
+ COMMIT;
@@ -0,0 +1,6 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE transactions ADD COLUMN cleared INTEGER DEFAULT 1;
4
+ ALTER TABLE transactions ADD COLUMN pending INTEGER DEFAULT 0;
5
+
6
+ COMMIT;
@@ -0,0 +1,10 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ CREATE TABLE rules
4
+ (id TEXT PRIMARY KEY,
5
+ stage TEXT,
6
+ conditions TEXT,
7
+ actions TEXT,
8
+ tombstone INTEGER DEFAULT 0);
9
+
10
+ COMMIT;
@@ -0,0 +1,13 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE transactions ADD COLUMN parent_id TEXT;
4
+
5
+ UPDATE transactions SET
6
+ parent_id = CASE
7
+ WHEN isChild THEN SUBSTR(id, 1, INSTR(id, '/') - 1)
8
+ ELSE NULL
9
+ END;
10
+
11
+ CREATE INDEX trans_parent_id ON transactions(parent_id);
12
+
13
+ COMMIT;
@@ -0,0 +1,56 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ DROP VIEW IF EXISTS v_transactions_layer2;
4
+ CREATE VIEW v_transactions_layer2 AS
5
+ SELECT
6
+ t.id AS id,
7
+ t.isParent AS is_parent,
8
+ t.isChild AS is_child,
9
+ t.acct AS account,
10
+ CASE WHEN t.isChild = 0 THEN NULL ELSE t.parent_id END AS parent_id,
11
+ CASE WHEN t.isParent = 1 THEN NULL ELSE cm.transferId END AS category,
12
+ pm.targetId AS payee,
13
+ t.imported_description AS imported_payee,
14
+ IFNULL(t.amount, 0) AS amount,
15
+ t.notes AS notes,
16
+ t.date AS date,
17
+ t.financial_id AS imported_id,
18
+ t.error AS error,
19
+ t.starting_balance_flag AS starting_balance_flag,
20
+ t.transferred_id AS transfer_id,
21
+ t.sort_order AS sort_order,
22
+ t.cleared AS cleared,
23
+ t.tombstone AS tombstone
24
+ FROM transactions t
25
+ LEFT JOIN category_mapping cm ON cm.id = t.category
26
+ LEFT JOIN payee_mapping pm ON pm.id = t.description
27
+ WHERE
28
+ t.date IS NOT NULL AND
29
+ t.acct IS NOT NULL;
30
+
31
+ CREATE INDEX trans_sorted ON transactions(date desc, starting_balance_flag, sort_order desc, id);
32
+
33
+ DROP VIEW IF EXISTS v_transactions_layer1;
34
+ CREATE VIEW v_transactions_layer1 AS
35
+ SELECT t.* FROM v_transactions_layer2 t
36
+ LEFT JOIN transactions t2 ON (t.is_child = 1 AND t2.id = t.parent_id)
37
+ WHERE IFNULL(t.tombstone, 0) = 0 AND IFNULL(t2.tombstone, 0) = 0;
38
+
39
+ DROP VIEW IF EXISTS v_transactions;
40
+ CREATE VIEW v_transactions AS
41
+ SELECT t.* FROM v_transactions_layer1 t
42
+ ORDER BY t.date desc, t.starting_balance_flag, t.sort_order desc, t.id;
43
+
44
+
45
+ DROP VIEW IF EXISTS v_categories;
46
+ CREATE VIEW v_categories AS
47
+ SELECT
48
+ id,
49
+ name,
50
+ is_income,
51
+ cat_group AS "group",
52
+ sort_order,
53
+ tombstone
54
+ FROM categories;
55
+
56
+ COMMIT;
@@ -0,0 +1,7 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ CREATE INDEX messages_crdt_search ON messages_crdt(dataset, row, column, timestamp);
4
+
5
+ ANALYZE;
6
+
7
+ COMMIT;
@@ -0,0 +1,33 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ -- This adds the isChild/parent_id constraint in `where`
4
+ DROP VIEW IF EXISTS v_transactions_layer2;
5
+ CREATE VIEW v_transactions_layer2 AS
6
+ SELECT
7
+ t.id AS id,
8
+ t.isParent AS is_parent,
9
+ t.isChild AS is_child,
10
+ t.acct AS account,
11
+ CASE WHEN t.isChild = 0 THEN NULL ELSE t.parent_id END AS parent_id,
12
+ CASE WHEN t.isParent = 1 THEN NULL ELSE cm.transferId END AS category,
13
+ pm.targetId AS payee,
14
+ t.imported_description AS imported_payee,
15
+ IFNULL(t.amount, 0) AS amount,
16
+ t.notes AS notes,
17
+ t.date AS date,
18
+ t.financial_id AS imported_id,
19
+ t.error AS error,
20
+ t.starting_balance_flag AS starting_balance_flag,
21
+ t.transferred_id AS transfer_id,
22
+ t.sort_order AS sort_order,
23
+ t.cleared AS cleared,
24
+ t.tombstone AS tombstone
25
+ FROM transactions t
26
+ LEFT JOIN category_mapping cm ON cm.id = t.category
27
+ LEFT JOIN payee_mapping pm ON pm.id = t.description
28
+ WHERE
29
+ t.date IS NOT NULL AND
30
+ t.acct IS NOT NULL AND
31
+ (t.isChild = 0 OR t.parent_id IS NOT NULL);
32
+
33
+ COMMIT;
@@ -0,0 +1,10 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ CREATE TABLE __meta__ (key TEXT PRIMARY KEY, value TEXT);
4
+
5
+ DROP VIEW IF EXISTS v_transactions_layer2;
6
+ DROP VIEW IF EXISTS v_transactions_layer1;
7
+ DROP VIEW IF EXISTS v_transactions;
8
+ DROP VIEW IF EXISTS v_categories;
9
+
10
+ COMMIT;
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE accounts ADD COLUMN sort_order REAL;
4
+
5
+ COMMIT;
@@ -0,0 +1,28 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ CREATE TABLE schedules
4
+ (id TEXT PRIMARY KEY,
5
+ rule TEXT,
6
+ active INTEGER DEFAULT 0,
7
+ completed INTEGER DEFAULT 0,
8
+ posts_transaction INTEGER DEFAULT 0,
9
+ tombstone INTEGER DEFAULT 0);
10
+
11
+ CREATE TABLE schedules_next_date
12
+ (id TEXT PRIMARY KEY,
13
+ schedule_id TEXT,
14
+ local_next_date INTEGER,
15
+ local_next_date_ts INTEGER,
16
+ base_next_date INTEGER,
17
+ base_next_date_ts INTEGER);
18
+
19
+ CREATE TABLE schedules_json_paths
20
+ (schedule_id TEXT PRIMARY KEY,
21
+ payee TEXT,
22
+ account TEXT,
23
+ amount TEXT,
24
+ date TEXT);
25
+
26
+ ALTER TABLE transactions ADD COLUMN schedule TEXT;
27
+
28
+ COMMIT;
@@ -0,0 +1,136 @@
1
+ export default async function runMigration(db) {
2
+ function getValue(node) {
3
+ return node.expr != null ? node.expr : node.cachedValue;
4
+ }
5
+
6
+ db.execQuery(`
7
+ CREATE TABLE zero_budget_months
8
+ (id TEXT PRIMARY KEY,
9
+ buffered INTEGER DEFAULT 0);
10
+
11
+ CREATE TABLE zero_budgets
12
+ (id TEXT PRIMARY KEY,
13
+ month INTEGER,
14
+ category TEXT,
15
+ amount INTEGER DEFAULT 0,
16
+ carryover INTEGER DEFAULT 0);
17
+
18
+ CREATE TABLE reflect_budgets
19
+ (id TEXT PRIMARY KEY,
20
+ month INTEGER,
21
+ category TEXT,
22
+ amount INTEGER DEFAULT 0,
23
+ carryover INTEGER DEFAULT 0);
24
+
25
+ CREATE TABLE notes
26
+ (id TEXT PRIMARY KEY,
27
+ note TEXT);
28
+
29
+ CREATE TABLE kvcache (key TEXT PRIMARY KEY, value TEXT);
30
+ CREATE TABLE kvcache_key (id INTEGER PRIMARY KEY, key REAL);
31
+ `);
32
+
33
+ // Migrate budget amounts and carryover
34
+ const budget = db.runQuery(
35
+ `SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!budget-%'`,
36
+ [],
37
+ true,
38
+ );
39
+ db.transaction(() => {
40
+ budget.forEach(monthBudget => {
41
+ const match = monthBudget.name.match(
42
+ /^(budget-report|budget)(\d+)!budget-(.+)$/,
43
+ );
44
+ if (match == null) {
45
+ console.log('Warning: invalid budget month name', monthBudget.name);
46
+ return;
47
+ }
48
+
49
+ const type = match[1];
50
+ const month = match[2].slice(0, 4) + '-' + match[2].slice(4);
51
+ const dbmonth = parseInt(match[2]);
52
+ const cat = match[3];
53
+
54
+ let amount = parseInt(getValue(monthBudget));
55
+ if (isNaN(amount)) {
56
+ amount = 0;
57
+ }
58
+
59
+ const sheetName = monthBudget.name.split('!')[0];
60
+ const carryover = db.runQuery(
61
+ 'SELECT * FROM spreadsheet_cells WHERE name = ?',
62
+ [`${sheetName}!carryover-${cat}`],
63
+ true,
64
+ );
65
+
66
+ const table =
67
+ type === 'budget-report' ? 'reflect_budgets' : 'zero_budgets';
68
+ db.runQuery(
69
+ `INSERT INTO ${table} (id, month, category, amount, carryover) VALUES (?, ?, ?, ?, ?)`,
70
+ [
71
+ `${month}-${cat}`,
72
+ dbmonth,
73
+ cat,
74
+ amount,
75
+ carryover.length > 0 && getValue(carryover[0]) === 'true' ? 1 : 0,
76
+ ],
77
+ );
78
+ });
79
+ });
80
+
81
+ // Migrate buffers
82
+ const buffers = db.runQuery(
83
+ `SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!buffered'`,
84
+ [],
85
+ true,
86
+ );
87
+ db.transaction(() => {
88
+ buffers.forEach(buffer => {
89
+ const match = buffer.name.match(/^budget(\d+)!buffered$/);
90
+ if (match) {
91
+ const month = match[1].slice(0, 4) + '-' + match[1].slice(4);
92
+ let amount = parseInt(getValue(buffer));
93
+ if (isNaN(amount)) {
94
+ amount = 0;
95
+ }
96
+
97
+ db.runQuery(
98
+ `INSERT INTO zero_budget_months (id, buffered) VALUES (?, ?)`,
99
+ [month, amount],
100
+ );
101
+ }
102
+ });
103
+ });
104
+
105
+ // Migrate notes
106
+ const notes = db.runQuery(
107
+ `SELECT * FROM spreadsheet_cells WHERE name LIKE 'notes!%'`,
108
+ [],
109
+ true,
110
+ );
111
+
112
+ const parseNote = str => {
113
+ try {
114
+ const value = JSON.parse(str);
115
+ return value && value !== '' ? value : null;
116
+ } catch {
117
+ return null;
118
+ }
119
+ };
120
+
121
+ db.transaction(() => {
122
+ notes.forEach(note => {
123
+ const parsed = parseNote(getValue(note));
124
+ if (parsed) {
125
+ const [, id] = note.name.split('!');
126
+ db.runQuery(`INSERT INTO notes (id, note) VALUES (?, ?)`, [id, parsed]);
127
+ }
128
+ });
129
+ });
130
+
131
+ db.execQuery(`
132
+ DROP TABLE spreadsheet_cells;
133
+ ANALYZE;
134
+ VACUUM;
135
+ `);
136
+ }
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE rules ADD COLUMN conditions_op TEXT DEFAULT 'and';
4
+
5
+ COMMIT;
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE schedules ADD COLUMN name TEXT DEFAULT NULL;
4
+
5
+ COMMIT;
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ DROP TABLE payee_rules;
4
+
5
+ COMMIT;
@@ -0,0 +1,6 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE categories ADD COLUMN hidden BOOLEAN NOT NULL DEFAULT 0;
4
+ ALTER TABLE category_groups ADD COLUMN hidden BOOLEAN NOT NULL DEFAULT 0;
5
+
6
+ COMMIT;
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE accounts DROP COLUMN type;
4
+
5
+ COMMIT;
@@ -0,0 +1,10 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ CREATE TABLE transaction_filters
4
+ (id TEXT PRIMARY KEY,
5
+ name TEXT,
6
+ conditions TEXT,
7
+ conditions_op TEXT DEFAULT 'and',
8
+ tombstone INTEGER DEFAULT 0);
9
+
10
+ COMMIT;
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE accounts ADD COLUMN type TEXT;
4
+
5
+ COMMIT;
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE schedules_next_date ADD COLUMN tombstone INTEGER DEFAULT 0;
4
+
5
+ COMMIT;
@@ -0,0 +1,7 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE zero_budgets ADD column goal INTEGER DEFAULT null;
4
+ ALTER TABLE reflect_budgets ADD column goal INTEGER DEFAULT null;
5
+ ALTER TABLE categories ADD column goal_def TEXT DEFAULT null;
6
+
7
+ COMMIT;
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE transactions ADD COLUMN reconciled INTEGER DEFAULT 0;
4
+
5
+ COMMIT;
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE accounts ADD COLUMN account_sync_source TEXT;
4
+
5
+ COMMIT;
@@ -0,0 +1,9 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ UPDATE accounts
4
+ SET
5
+ account_sync_source = 'goCardless'
6
+ WHERE account_id IS NOT NULL
7
+ AND account_sync_source IS NULL;
8
+
9
+ COMMIT;
@@ -0,0 +1,28 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ CREATE TABLE custom_reports
4
+ (
5
+ id TEXT PRIMARY KEY,
6
+ name TEXT,
7
+ start_date TEXT,
8
+ end_date TEXT,
9
+ date_static INTEGER DEFAULT 0,
10
+ date_range TEXT,
11
+ mode TEXT DEFAULT 'total',
12
+ group_by TEXT DEFAULT 'Category',
13
+ balance_type TEXT DEFAULT 'Expense',
14
+ show_empty INTEGER DEFAULT 0,
15
+ show_offbudget INTEGER DEFAULT 0,
16
+ show_hidden INTEGER DEFAULT 0,
17
+ show_uncategorized INTEGER DEFAULT 0,
18
+ selected_categories TEXT,
19
+ graph_type TEXT DEFAULT 'BarGraph',
20
+ conditions TEXT,
21
+ conditions_op TEXT DEFAULT 'and',
22
+ metadata TEXT,
23
+ interval TEXT DEFAULT 'Monthly',
24
+ color_scheme TEXT,
25
+ tombstone INTEGER DEFAULT 0
26
+ );
27
+
28
+ COMMIT;
@@ -0,0 +1,8 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ UPDATE category_groups
4
+ SET
5
+ hidden = 0
6
+ WHERE is_income = 1;
7
+
8
+ COMMIT;
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE custom_reports ADD COLUMN include_current INTEGER DEFAULT 0;
4
+
5
+ COMMIT;
@@ -0,0 +1,19 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ UPDATE transactions AS t1
4
+ SET schedule = (
5
+ SELECT t2.schedule FROM transactions AS t2
6
+ WHERE t2.id = t1.transferred_id
7
+ AND t2.schedule IS NOT NULL
8
+ LIMIT 1
9
+ )
10
+ WHERE t1.schedule IS NULL
11
+ AND t1.transferred_id IS NOT NULL
12
+ AND EXISTS (
13
+ SELECT 1 FROM transactions AS t2
14
+ WHERE t2.id = t1.transferred_id
15
+ AND t2.schedule IS NOT NULL
16
+ LIMIT 1
17
+ );
18
+
19
+ COMMIT;
@@ -0,0 +1,5 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE payees ADD COLUMN favorite INTEGER DEFAULT 0 DEFAULT FALSE;
4
+
5
+ COMMIT;
@@ -0,0 +1,6 @@
1
+ BEGIN TRANSACTION;
2
+
3
+ ALTER TABLE zero_budgets ADD COLUMN long_goal INTEGER DEFAULT null;
4
+ ALTER TABLE reflect_budgets ADD COLUMN long_goal INTEGER DEFAULT null;
5
+
6
+ COMMIT;