diff --git a/packages/loot-core/package.json b/packages/loot-core/package.json index b87a4a4eeaf2ca879975831b0437d260fe22d601..eef1020b0f9b64a7dfea8a006aeee050ddf5c8f1 100644 --- a/packages/loot-core/package.json +++ b/packages/loot-core/package.json @@ -47,7 +47,6 @@ "babel-loader": "^8.0.6", "buffer": "^5.5.0", "cross-env": "^7.0.3", - "damerau-levenshtein": "^1.0.4", "date-fns": "2.0.0-alpha.27", "eslint": "5.6.0", "eslint-plugin-import": "^2.26.0", diff --git a/packages/loot-core/src/client/actions/budgets.js b/packages/loot-core/src/client/actions/budgets.js index 0a8435143f4bbb63163cf216ac97474b15213357..9c1ec2e215ae7615968e535121a74e6191fc1d9a 100644 --- a/packages/loot-core/src/client/actions/budgets.js +++ b/packages/loot-core/src/client/actions/budgets.js @@ -6,8 +6,6 @@ import { closeModal, pushModal } from './modals'; import { loadPrefs, loadGlobalPrefs } from './prefs'; import { startTutorialFirstTime } from './tutorial'; -const uuid = require('../../platform/uuid'); - export function updateStatusText(text) { return (dispatch, getState) => { const { loadingText } = getState().app; diff --git a/packages/loot-core/src/client/actions/queries.js b/packages/loot-core/src/client/actions/queries.js index 7bd94c7d75758e9c4f9c5fb1aa3079283e25157d..e33a0c7fd2f34984935f0ff93b36e0b936435324 100644 --- a/packages/loot-core/src/client/actions/queries.js +++ b/packages/loot-core/src/client/actions/queries.js @@ -96,7 +96,6 @@ export function deleteCategory(id, transferId) { let { error } = await send('category-delete', { id, transferId }); if (error) { - let msg; switch (error) { case 'category-type': dispatch( @@ -164,7 +163,6 @@ export function updateGroup(group) { export function deleteGroup(id, transferId) { return async function(dispatch, getState) { - const group = getState().queries.categories.grouped.find(g => g.id === id); await send('category-group-delete', { id, transferId }); await dispatch(getCategories()); // See `deleteCategory` for why we need this diff --git a/packages/loot-core/src/client/actions/user.js b/packages/loot-core/src/client/actions/user.js index a3168f13597bb59f71e2b5480fc4ef991d5dedae..30da53705d511603d6d8e9c11674f880a412a43f 100644 --- a/packages/loot-core/src/client/actions/user.js +++ b/packages/loot-core/src/client/actions/user.js @@ -39,7 +39,7 @@ export function loggedIn() { export function signOut() { return async dispatch => { - const data = await send('subscribe-sign-out'); + await send('subscribe-sign-out'); dispatch(getUserData()); dispatch(loadGlobalPrefs()); diff --git a/packages/loot-core/src/client/query-helpers.test.js b/packages/loot-core/src/client/query-helpers.test.js index 0eba14bc5c32986eadce23b58437d4751a61be12..318a1371080d1597286f079283653fc1481c04f6 100644 --- a/packages/loot-core/src/client/query-helpers.test.js +++ b/packages/loot-core/src/client/query-helpers.test.js @@ -337,7 +337,7 @@ describe('query helpers', () => { tracer.start(); let query = q('transactions').select('id'); - let paged = pagedQuery(query, data => tracer.event('data', data), { + pagedQuery(query, data => tracer.event('data', data), { pageCount: 10 }); @@ -349,7 +349,7 @@ describe('query helpers', () => { }); it('pagedQuery only runs `fetchNext` once at a time', async () => { - let data = initPagingServer(1000, { delay: 200 }); + initPagingServer(1000, { delay: 200 }); tracer.start(); let query = q('transactions').select('id'); diff --git a/packages/loot-core/src/client/query-hooks.js b/packages/loot-core/src/client/query-hooks.js index 97ef446c18301c367baeacf4f3cae59810f383bc..4cedb29ca4e4713ae88cb381f111915477dbd151 100644 --- a/packages/loot-core/src/client/query-hooks.js +++ b/packages/loot-core/src/client/query-hooks.js @@ -114,7 +114,3 @@ export function useLiveQuery(query, opts) { return { data }; } - -function usePagedQuery(query) { - // TODO -} diff --git a/packages/loot-core/src/client/shared-listeners.js b/packages/loot-core/src/client/shared-listeners.js index f22386d1ec5fc2bdb4ef85848cca246c3927a802..287a860f4df753216fc3e7b1033d3abeee7c94f4 100644 --- a/packages/loot-core/src/client/shared-listeners.js +++ b/packages/loot-core/src/client/shared-listeners.js @@ -170,7 +170,7 @@ export function listenForSyncEvent(actions, store) { // the server does not match the local one. This can mean a // few things depending on the state, and we try to show an // appropriate message and call to action to fix it. - let { groupId, cloudFileId } = store.getState().prefs.local; + let { cloudFileId } = store.getState().prefs.local; notif = { title: 'Syncing has been reset on this cloud file', diff --git a/packages/loot-core/src/mocks/budget.js b/packages/loot-core/src/mocks/budget.js index 1a1dd18fd7037d516ba2669b5cb07c95168c27d4..8647338e1b209b0685686309447bb5c5d19cd156 100644 --- a/packages/loot-core/src/mocks/budget.js +++ b/packages/loot-core/src/mocks/budget.js @@ -265,12 +265,7 @@ async function fillChecking(handlers, account, payees, groups) { } async function fillInvestment(handlers, account, payees, groups) { - let { - incomePayee, - expensePayees, - incomeGroup, - expenseCategories - } = extractCommonThings(payees, groups); + let { incomePayee, incomeGroup } = extractCommonThings(payees, groups); let numTransactions = integer(10, 30); @@ -355,12 +350,7 @@ async function fillSavings(handlers, account, payees, groups) { } async function fillMortgage(handlers, account, payees, groups) { - let { - incomePayee, - expensePayees, - incomeGroup, - expenseCategories - } = extractCommonThings(payees, groups); + let { incomePayee, incomeGroup } = extractCommonThings(payees, groups); let numTransactions = integer(7, 10); let amount = integer(100000, 200000); @@ -397,12 +387,7 @@ async function fillMortgage(handlers, account, payees, groups) { } async function fillOther(handlers, account, payees, groups) { - let { - incomePayee, - expensePayees, - incomeGroup, - expenseCategories - } = extractCommonThings(payees, groups); + let { incomePayee, incomeGroup } = extractCommonThings(payees, groups); let numTransactions = integer(3, 6); let category = incomeGroup.categories.find(c => c.name === 'Income'); diff --git a/packages/loot-core/src/platform/client/undo/index.web.js b/packages/loot-core/src/platform/client/undo/index.web.js index bd57f412d8636b13ec73c502e40e9fa017f9fdd9..01911ff540f03a8555edd6e112a0d709a033366b 100644 --- a/packages/loot-core/src/platform/client/undo/index.web.js +++ b/packages/loot-core/src/platform/client/undo/index.web.js @@ -1,4 +1,3 @@ -const { getChangedValues } = require('../../../shared/util'); const uuid = require('../../uuid'); // List of recently used states. We don't use a true MRU structure diff --git a/packages/loot-core/src/platform/server/asyncStorage/index.web.js b/packages/loot-core/src/platform/server/asyncStorage/index.web.js index 7f7d5078ee54d98d391f7c29b09eaa231ff92e1b..71d5e6dcb624991a387bcf61d378ba2bd38d7429 100644 --- a/packages/loot-core/src/platform/server/asyncStorage/index.web.js +++ b/packages/loot-core/src/platform/server/asyncStorage/index.web.js @@ -32,7 +32,7 @@ async function setItem(key, value) { let transaction = db.transaction(['asyncStorage'], 'readwrite'); let objectStore = transaction.objectStore('asyncStorage'); - let promise = new Promise((resolve, reject) => { + new Promise((resolve, reject) => { let req = objectStore.put(value, key); req.onerror = e => reject(e); req.onsuccess = e => resolve(); diff --git a/packages/loot-core/src/platform/server/connection/index.web.js b/packages/loot-core/src/platform/server/connection/index.web.js index f9daff8b095c1235c35ed363d18b4019cb4bd4f7..93bb7228d44153c58f9b61a4105aab81b8665e29 100644 --- a/packages/loot-core/src/platform/server/connection/index.web.js +++ b/packages/loot-core/src/platform/server/connection/index.web.js @@ -1,5 +1,4 @@ const { runHandler, isMutating } = require('../../../server/mutators'); -const { sequential } = require('../../../shared/async'); const { captureException } = require('../../exceptions'); function getGlobalObject() { diff --git a/packages/loot-core/src/platform/server/indexeddb/index.web.js b/packages/loot-core/src/platform/server/indexeddb/index.web.js index 49d30fcce61adf73182f5244b5b12967795c868e..2fc7d29fd646434a6196d307a4009d249da8957a 100644 --- a/packages/loot-core/src/platform/server/indexeddb/index.web.js +++ b/packages/loot-core/src/platform/server/indexeddb/index.web.js @@ -131,7 +131,7 @@ function openDatabase() { function closeDatabase() { if (openedDb) { - let promise = openedDb.then(db => { + openedDb.then(db => { db.close(); }); openedDb = null; diff --git a/packages/loot-core/src/platform/server/sqlite/index.web.test.js b/packages/loot-core/src/platform/server/sqlite/index.web.test.js index 3d343f1c4481a32fe4d3c66d0b6979dfe7cb7cf7..8ba9b1c19e34dcb850cf4dbde32658ee77a388d8 100644 --- a/packages/loot-core/src/platform/server/sqlite/index.web.test.js +++ b/packages/loot-core/src/platform/server/sqlite/index.web.test.js @@ -6,8 +6,6 @@ import { runQuery } from './index.web'; -let os = require('os'); - beforeAll(() => { process.env.PUBLIC_URL = __dirname + '/../../../../../../node_modules/@jlongster/sql.js/dist/'; diff --git a/packages/loot-core/src/server/accounts/parse-file.test.js b/packages/loot-core/src/server/accounts/parse-file.test.js index ee3cc1a9b872ef7a26cc7a6bde50e5da44a7c7d0..4c4b305819932692ca83120c999e26231ca01d7e 100644 --- a/packages/loot-core/src/server/accounts/parse-file.test.js +++ b/packages/loot-core/src/server/accounts/parse-file.test.js @@ -44,7 +44,7 @@ describe('File import', () => { test('qif import works', async () => { prefs.loadPrefs(); await db.insertAccount({ id: 'one', name: 'one' }); - let { errors, added } = await importFileWithRealTime( + let { errors } = await importFileWithRealTime( 'one', __dirname + '/../../mocks/files/data.qif', 'MM/dd/yy' @@ -57,7 +57,7 @@ describe('File import', () => { prefs.loadPrefs(); await db.insertAccount({ id: 'one', name: 'one' }); - let { errors, added } = await importFileWithRealTime( + let { errors } = await importFileWithRealTime( 'one', __dirname + '/../../mocks/files/data.ofx' ); @@ -69,7 +69,7 @@ describe('File import', () => { prefs.loadPrefs(); await db.insertAccount({ id: 'one', name: 'one' }); - let { errors, added } = await importFileWithRealTime( + let { errors } = await importFileWithRealTime( 'one', __dirname + '/../../mocks/files/data.qfx' ); diff --git a/packages/loot-core/src/server/accounts/rules.js b/packages/loot-core/src/server/accounts/rules.js index 3667bf0c481b4b310ab94252809beeb163648ad2..51d110d985fcc75bf342ed162123233bcece88bc 100644 --- a/packages/loot-core/src/server/accounts/rules.js +++ b/packages/loot-core/src/server/accounts/rules.js @@ -15,14 +15,6 @@ import { fastSetMerge } from '../../shared/util'; import { RuleError } from '../errors'; import { Schedule as RSchedule } from '../util/rschedule'; -function safeNumber(n) { - return isNaN(n) ? null : n; -} - -function safeParseInt(n) { - return safeNumber(parseInt(n)); -} - function assert(test, type, msg) { if (!test) { throw new RuleError(type, msg); @@ -703,7 +695,6 @@ export function migrateIds(rule, mappings) { // This finds all the rules that reference the `id` export function iterateIds(rules, fieldName, func) { - let counts = {}; let i; ruleiter: for (i = 0; i < rules.length; i++) { diff --git a/packages/loot-core/src/server/accounts/rules.test.js b/packages/loot-core/src/server/accounts/rules.test.js index 1b6db9900b9a04ddf03b984a21881d31ec52829e..9f284b2e5f51862e7d80d3c3c6236951508610f0 100644 --- a/packages/loot-core/src/server/accounts/rules.test.js +++ b/packages/loot-core/src/server/accounts/rules.test.js @@ -72,19 +72,19 @@ describe('Condition', () => { test('date restricts operators for each type', () => { expect(() => { - let cond = new Condition('isapprox', 'date', '2020-08', null, fieldTypes); + new Condition('isapprox', 'date', '2020-08', null, fieldTypes); }).toThrow('Invalid date value for'); expect(() => { - let cond = new Condition('gt', 'date', '2020-08', null, fieldTypes); + new Condition('gt', 'date', '2020-08', null, fieldTypes); }).toThrow('Invalid date value for'); expect(() => { - let cond = new Condition('gte', 'date', '2020-08', null, fieldTypes); + new Condition('gte', 'date', '2020-08', null, fieldTypes); }).toThrow('Invalid date value for'); expect(() => { - let cond = new Condition('lt', 'date', '2020-08', null, fieldTypes); + new Condition('lt', 'date', '2020-08', null, fieldTypes); }).toThrow('Invalid date value for'); expect(() => { - let cond = new Condition('lte', 'date', '2020-08', null, fieldTypes); + new Condition('lte', 'date', '2020-08', null, fieldTypes); }).toThrow('Invalid date value for'); }); @@ -224,23 +224,17 @@ describe('Condition', () => { }); test('number validates value', () => { - let cond = new Condition('isapprox', 'amount', 34, null, fieldTypes); + new Condition('isapprox', 'amount', 34, null, fieldTypes); expect(() => { - cond = new Condition('isapprox', 'amount', 'hello', null, fieldTypes); + new Condition('isapprox', 'amount', 'hello', null, fieldTypes); }).toThrow('Value must be a number or between amount'); expect(() => { - cond = new Condition( - 'is', - 'amount', - { num1: 0, num2: 10 }, - null, - fieldTypes - ); + new Condition('is', 'amount', { num1: 0, num2: 10 }, null, fieldTypes); }).toThrow('Invalid number value for'); - cond = new Condition( + new Condition( 'isbetween', 'amount', { num1: 0, num2: 10 }, @@ -249,16 +243,10 @@ describe('Condition', () => { ); expect(() => { - cond = new Condition('isbetween', 'amount', 34.22, null, fieldTypes); + new Condition('isbetween', 'amount', 34.22, null, fieldTypes); }).toThrow('Invalid between value for'); expect(() => { - cond = new Condition( - 'isbetween', - 'amount', - { num1: 0 }, - null, - fieldTypes - ); + new Condition('isbetween', 'amount', { num1: 0 }, null, fieldTypes); }).toThrow('Value must be a number or between amount'); }); @@ -326,11 +314,11 @@ describe('Action', () => { expect(item.name).toBe('James'); expect(() => { - let action = new Action('set', 'foo', 'James', null, new Map()); + new Action('set', 'foo', 'James', null, new Map()); }).toThrow(/invalid field/i); expect(() => { - let action = new Action('noop', 'name', 'James', null, fieldTypes); + new Action('noop', 'name', 'James', null, fieldTypes); }).toThrow(/invalid action operation/i); }); }); diff --git a/packages/loot-core/src/server/accounts/sync.js b/packages/loot-core/src/server/accounts/sync.js index b242d02ecddf22c95ead3575ddbe9bcf6f81c20a..3b1e34d0f1a0d53f0e0f375284889dd423909b28 100644 --- a/packages/loot-core/src/server/accounts/sync.js +++ b/packages/loot-core/src/server/accounts/sync.js @@ -13,7 +13,6 @@ import title from './title'; import { runRules } from './transaction-rules'; import { batchUpdateTransactions } from './transactions'; -const levenshtein = require('damerau-levenshtein'); const dateFns = require('date-fns'); const uuid = require('../../platform/uuid'); @@ -331,7 +330,7 @@ export async function reconcileTransactions(acctId, transactions) { }); // Finally, generate & commit the changes - for (let { payee_name, trans, subtransactions, match } of transactionsStep3) { + for (let { trans, subtransactions, match } of transactionsStep3) { if (match) { // TODO: change the above sql query to use aql let existing = { @@ -395,7 +394,7 @@ export async function addTransactions( { rawPayeeName: true } ); - for (let { payee_name, trans, subtransactions } of normalized) { + for (let { trans, subtransactions } of normalized) { // Run the rules trans = runRules(trans); diff --git a/packages/loot-core/src/server/accounts/sync.test.js b/packages/loot-core/src/server/accounts/sync.test.js index 8aec8fe7f59ea4a6fe7ce7be1f442ff1baf6297b..c5ac09e1f2a203628a490bb8d485481258685453 100644 --- a/packages/loot-core/src/server/accounts/sync.test.js +++ b/packages/loot-core/src/server/accounts/sync.test.js @@ -101,8 +101,7 @@ async function getAllPayees() { describe('Account sync', () => { test('reconcile creates payees correctly', async () => { monthUtils.currentDay = () => '2017-10-15'; - let mockTransactions = prepMockTransactions(); - let { id, account_id } = await prepareDatabase(); + let { id } = await prepareDatabase(); let payees = await getAllPayees(); expect(payees.length).toBe(0); @@ -134,7 +133,6 @@ describe('Account sync', () => { // The payee can be anything, all that matters is the amount is the same let mockTransaction = mockTransactions.find(t => t.date === '2017-10-17'); - let payeeName = mockTransaction.name; mockTransaction.amount = 29.47; let payeeId = await db.insertPayee({ name: 'macy' }); @@ -359,7 +357,7 @@ describe('Account sync', () => { test('reconcile handles transactions with undefined fields', async () => { const { id: acctId } = await prepareDatabase(); - const transactionId = await db.insertTransaction({ + await db.insertTransaction({ id: 'one', account: acctId, amount: 2948, @@ -523,7 +521,7 @@ describe('Account sync', () => { payee: null }); - let { added, updated } = await reconcileTransactions(acctId, [ + let { updated } = await reconcileTransactions(acctId, [ { date: '2017-10-17', payee_name: 'bakkerij', diff --git a/packages/loot-core/src/server/accounts/transaction-rules.js b/packages/loot-core/src/server/accounts/transaction-rules.js index 26309cbc88b6d2e9407b66cb42a7750eb3025f9b..04df4b17743fa88c683bf45ef5467593d25647ba 100644 --- a/packages/loot-core/src/server/accounts/transaction-rules.js +++ b/packages/loot-core/src/server/accounts/transaction-rules.js @@ -257,7 +257,6 @@ function onApplySync(oldValues, newValues) { // Runner export function runRules(trans) { let finalTrans = { ...trans }; - let allChanges = {}; let rules = rankRules( fastSetMerge( @@ -346,8 +345,6 @@ export function conditionsToAQL(conditions, { recurDateBounds = 100 } = {}) { .toArray() .map(d => dayFromDate(d.date)); - let compare = d => ({ $eq: d }); - return { $or: dates.map(d => { if (op === 'isapprox') { @@ -362,8 +359,6 @@ export function conditionsToAQL(conditions, { recurDateBounds = 100 } = {}) { }) }; } else { - let { date } = value; - if (op === 'isapprox') { let fullDate = parseDate(value.date); let high = addDays(fullDate, 2); diff --git a/packages/loot-core/src/server/accounts/transfer.js b/packages/loot-core/src/server/accounts/transfer.js index 716c8fe40034547e0820137d5ae55d9e6d782c1d..015a867676c1fd27075948d29d00630554b8361c 100644 --- a/packages/loot-core/src/server/accounts/transfer.js +++ b/packages/loot-core/src/server/accounts/transfer.js @@ -7,8 +7,7 @@ async function getPayee(acct) { async function getTransferredAccount(transaction) { if (transaction.payee) { let { - transfer_acct, - id + transfer_acct } = await db.first('SELECT id, transfer_acct FROM v_payees WHERE id = ?', [ transaction.payee ]); diff --git a/packages/loot-core/src/server/aql/compiler.js b/packages/loot-core/src/server/aql/compiler.js index beacd52b8db98bad84e3be8e2d56ce4bae05afb8..8dd4544d88ceb71e021c5f518715dc1646766934 100644 --- a/packages/loot-core/src/server/aql/compiler.js +++ b/packages/loot-core/src/server/aql/compiler.js @@ -104,7 +104,6 @@ function makePath(state, path) { function resolvePath(state, path) { let paths = path.split('.'); - let tableId; paths = paths.reduce( (acc, name) => { @@ -504,24 +503,6 @@ const compileExpr = saveStack('expr', (state, expr) => { return compileLiteral(expr); }); -function assertType(name, data, acceptedTypes) { - if (acceptedTypes.indexOf(data.type) === -1) { - throw new CompileError( - `Invalid type of expression to ${name}, must be one of ${JSON.stringify( - acceptedTypes - )}: ${JSON.stringify(data.value)}` - ); - } -} - -function assertArgLength(name, args, len) { - if (args.length !== len) { - throw new CompileError( - `Invalid number of args to ${name}: expected ${len} but received ${args.length}` - )(); - } -} - const compileFunction = saveStack('function', (state, func) => { let [name] = Object.keys(func); let argExprs = func[name]; @@ -587,20 +568,17 @@ const compileFunction = saveStack('function', (state, func) => { case '$neg': { validateArgLength(args, 1); let [arg1] = valArray(state, args, ['float']); - return typed(`(-${val(state, args[0])})`, args[0].type); + return typed(`(-${val(state, arg1)})`, arg1.type); } case '$abs': { validateArgLength(args, 1); let [arg1] = valArray(state, args, ['float']); - return typed(`ABS(${val(state, args[0])})`, args[0].type); + return typed(`ABS(${val(state, arg1)})`, arg1.type); } case '$idiv': { validateArgLength(args, 2); let [arg1, arg2] = valArray(state, args, ['integer', 'integer']); - return typed( - `(${val(state, args[0])} / ${val(state, args[1])})`, - args[0].type - ); + return typed(`(${val(state, arg1)} / ${val(state, arg2)})`, arg1.type); } // date functions @@ -965,7 +943,7 @@ export function isAggregateQuery(queryState) { return queryState.selectExpressions.find(expr => { if (typeof expr !== 'string') { - let [name, value] = Object.entries(expr)[0]; + let [, value] = Object.entries(expr)[0]; return isAggregateFunction(value); } return false; @@ -1015,8 +993,7 @@ export function compileQuery(queryState, schema, schemaConfig = {}) { groupExpressions, orderExpressions, limit, - offset, - calculation + offset } = customizeQuery(queryState); let select = ''; @@ -1024,7 +1001,6 @@ export function compileQuery(queryState, schema, schemaConfig = {}) { let joins = ''; let groupBy = ''; let orderBy = ''; - let dependences = []; let state = { schema, implicitTableName: tableName, diff --git a/packages/loot-core/src/server/aql/schema/executors.js b/packages/loot-core/src/server/aql/schema/executors.js index d389effcfd456aaba12e957149dd399e73bf1084..f7a1b2ccef9b4f132456efdf39b39fa0139ab610 100644 --- a/packages/loot-core/src/server/aql/schema/executors.js +++ b/packages/loot-core/src/server/aql/schema/executors.js @@ -82,7 +82,7 @@ async function execTransactionsGrouped( splitType, outputTypes ) { - let { table: tableName, withDead } = queryState; + let { withDead } = queryState; let whereDead = withDead ? '' : `AND ${sql.from}.tombstone = 0`; if (isAggregateQuery(queryState)) { @@ -160,7 +160,6 @@ async function execTransactionsGrouped( ${sql.orderBy} `; - let start = Date.now(); let allRows = await db.all(finalSql); // Group the parents and children up diff --git a/packages/loot-core/src/server/aql/schema/index.js b/packages/loot-core/src/server/aql/schema/index.js index 85547c21c9d4d4b1e3991c5a05628636868a9cc5..4c0b2dd81fd7669cb8a14e6b6f59fc549622aaa5 100644 --- a/packages/loot-core/src/server/aql/schema/index.js +++ b/packages/loot-core/src/server/aql/schema/index.js @@ -153,7 +153,7 @@ export const schemaConfig = { }, customizeQuery(queryState) { - let { table: tableName, tableOptions = {} } = queryState; + let { table: tableName } = queryState; function orderBy(orders) { // If order was specified, always add id as the last sort to make diff --git a/packages/loot-core/src/server/budget/actions.js b/packages/loot-core/src/server/budget/actions.js index bbad221acefc4c690cfbad3cf9d71616fa290e25..47f98f1cc19aa931410408eed99e20ed387d58fc 100644 --- a/packages/loot-core/src/server/budget/actions.js +++ b/packages/loot-core/src/server/budget/actions.js @@ -29,11 +29,6 @@ function isReflectBudget() { return budgetType === 'report'; } -function isZeroBudget() { - let { budgetType } = prefs.getPrefs(); - return budgetType === 'rollover'; -} - function dbMonth(month) { return parseInt(month.replace('-', '')); } diff --git a/packages/loot-core/src/server/budget/base.js b/packages/loot-core/src/server/budget/base.js index 5aa4a04e28eb5c814901f1bfa4bebf63eed37bd1..2df8f425a589e4c7e1f2809b0009666f80c7556c 100644 --- a/packages/loot-core/src/server/budget/base.js +++ b/packages/loot-core/src/server/budget/base.js @@ -8,20 +8,6 @@ import * as report from './report'; import * as rollover from './rollover'; import { sumAmounts } from './util'; -function mergeUpdates(updates) { - const merged = {}; - updates.forEach(update => { - Object.keys(update).forEach(sheet => { - if (merged[sheet]) { - merged[sheet] = { ...merged[sheet], ...update[sheet] }; - } else { - merged[sheet] = update[sheet]; - } - }); - }); - return merged; -} - export function getBudgetType() { let meta = sheet.get().meta(); return meta.budgetType || 'rollover'; diff --git a/packages/loot-core/src/server/cloud-storage.js b/packages/loot-core/src/server/cloud-storage.js index bf41351348283c80230b9eb36d44fb40eaf5d085..e9092955e6dbf85c953d5442578476185a09a825 100644 --- a/packages/loot-core/src/server/cloud-storage.js +++ b/packages/loot-core/src/server/cloud-storage.js @@ -273,8 +273,6 @@ export async function upload() { } catch (err) { console.log('Upload failure', err); - let reason = err instanceof PostError ? err.reason : 'network'; - if (err instanceof PostError) { throw new FileUploadError( err.reason === 'unauthorized' ? 'unauthorized' : err.reason || 'network' @@ -299,7 +297,7 @@ export async function upload() { } export async function possiblyUpload() { - let { cloudFileId, groupId, lastUploaded, id } = prefs.getPrefs(); + let { cloudFileId, groupId, lastUploaded } = prefs.getPrefs(); let threshold = lastUploaded && monthUtils.addDays(lastUploaded, UPLOAD_FREQUENCY_IN_DAYS); diff --git a/packages/loot-core/src/server/crdt/merkle.test.js b/packages/loot-core/src/server/crdt/merkle.test.js index f7bef4d7d9b746fb39e70856f8fe34eeec4338c2..fd1a51d07a89ba0a654e59e902009408a095e7bb 100644 --- a/packages/loot-core/src/server/crdt/merkle.test.js +++ b/packages/loot-core/src/server/crdt/merkle.test.js @@ -1,28 +1,6 @@ import * as merkle from './merkle'; import { Timestamp } from './timestamp'; -function pretty(n) { - if (n < 60) { - console.log(`${n} (${n} min)`); - } else if (n < 24 * 60) { - console.log(`${n} (${n / 60} hours)`); - } else { - console.log(`${n} (${n / (24 * 60)} days)`); - } -} - -function printBase3Buckets() { - for (let i = 0; i < 14; i++) { - let left = '0000000000000'.slice(0, i); - let rightLow = '0000000000000'.slice(0, 13 - i); - let rightHigh = '2222222222222'.slice(0, 13 - i); - const min = left + '2' + rightLow; - const max = left + '2' + rightHigh; - - pretty(parseInt(max, 3) - parseInt(min, 3)); - } -} - function message(timestamp, hash) { timestamp = Timestamp.parse(timestamp); timestamp.hash = () => hash; @@ -96,13 +74,6 @@ describe('merkle trie', () => { expect(merkle.diff(trie1, trie2)).toBe(0); }); - function debug(k, trie) { - return { - name: `[${k}] Hash: ${trie.hash}`, - children: merkle.getKeys(trie).map(k => debug(k, trie[k])) - }; - } - test('pruning works and keeps correct hashes', () => { let messages = [ message('2018-11-01T01:00:00.000Z-0000-0123456789ABCDEF', 1000), diff --git a/packages/loot-core/src/server/db/index.js b/packages/loot-core/src/server/db/index.js index 0fb1d1ca59c38887ff8d1c59d02d92a0cb7a45f4..4c6f7e9989363f58adae2c505e89f0bce696fa24 100644 --- a/packages/loot-core/src/server/db/index.js +++ b/packages/loot-core/src/server/db/index.js @@ -612,38 +612,6 @@ export async function getTransaction(id) { return rows[0]; } -function _addFragmentForAccount(accountId, addWhere, options = {}) { - let { showClosed = false, showOffbudget = true } = options; - - let fragment = addWhere ? ' WHERE (' : ' AND '; - let params = []; - - if (accountId) { - if (accountId === 'offbudget') { - fragment += 'a.closed = 0 AND a.offbudget = 1 '; - } else if (accountId === 'budgeted') { - fragment += 'a.closed = 0 AND a.offbudget = 0 '; - } else if (accountId === 'uncategorized') { - fragment += ` - t.category IS NULL AND a.offbudget = 0 AND isParent = 0 AND ( - ta.offbudget IS NULL OR ta.offbudget = 1 - ) - `; - } else { - fragment += 'a.id = ? '; - params.push(accountId); - } - } else { - fragment += showClosed ? '1' : 'a.closed = 0'; - - if (!showOffbudget) { - fragment += ' AND a.offbudget = 0'; - } - } - - return { fragment, params }; -} - export async function getTransactionsByDate( accountId, startDate, diff --git a/packages/loot-core/src/server/main.js b/packages/loot-core/src/server/main.js index 2ff712dcd6b7f2a56f01de522a8f6109da198551..f8f410637768664b9fabf32049c2e17ef50a9263 100644 --- a/packages/loot-core/src/server/main.js +++ b/packages/loot-core/src/server/main.js @@ -468,7 +468,6 @@ handlers['payees-get'] = async function() { handlers['payees-get-rule-counts'] = async function() { let payeeCounts = {}; - let allRules = rules.getRules(); rules.iterateIds(rules.getRules(), 'payee', (rule, id) => { if (payeeCounts[id] == null) { @@ -1063,8 +1062,6 @@ handlers['accounts-sync'] = async function({ id }) { let matchedTransactions = []; let updatedAccounts = []; - let { groupId } = prefs.getPrefs(); - for (var i = 0; i < accounts.length; i++) { const acct = accounts[i]; if (acct.bankId) { @@ -1291,8 +1288,6 @@ handlers['key-make'] = async function({ password }) { throw new Error('user-set-key must be called with file loaded'); } - let cloudFileId = prefs.getPrefs().cloudFileId; - let salt = encryption.randomBytes(32).toString('base64'); let id = uuid.v4Sync(); let key = await encryption.createKey({ id, password, salt }); @@ -1461,9 +1456,8 @@ handlers['subscribe-get-user'] = async function() { handlers['subscribe-change-password'] = async function({ password }) { let userToken = await asyncStorage.getItem('user-token'); - let res; try { - res = await post(getServer().SIGNUP_SERVER + '/change-password', { + await post(getServer().SIGNUP_SERVER + '/change-password', { token: userToken, password }); @@ -1922,7 +1916,7 @@ async function loadBudget(id, appVersion, { showUpdate } = {}) { prefs.savePrefs({ userId }); } - let { budgetVersion, budgetId } = prefs.getPrefs(); + let { budgetVersion } = prefs.getPrefs(); try { await updateVersion(budgetVersion, showUpdate); @@ -2146,12 +2140,12 @@ export async function initApp(version, isDev, socketName) { } } - if (isDev) { - const lastBudget = await asyncStorage.getItem('lastBudget'); - // if (lastBudget) { - // loadBudget(lastBudget, VERSION); - // } - } + // if (isDev) { + // const lastBudget = await asyncStorage.getItem('lastBudget'); + // if (lastBudget) { + // loadBudget(lastBudget, VERSION); + // } + // } const url = await asyncStorage.getItem('server-url'); if (url) { diff --git a/packages/loot-core/src/server/main.test.js b/packages/loot-core/src/server/main.test.js index 4f3d8f98ea54e9250522f11058e4abd3e2c454be..88f768084fc4e2935532b5c19a904a8db8f3fd00 100644 --- a/packages/loot-core/src/server/main.test.js +++ b/packages/loot-core/src/server/main.test.js @@ -80,7 +80,7 @@ describe('Budgets', () => { await createTestBudget('default-budget-template'); await db.openDatabase('test-budget'); - let r = await db.runQuery('INSERT INTO __migrations__ (id) VALUES (1000)'); + await db.runQuery('INSERT INTO __migrations__ (id) VALUES (1000)'); const spy = jest.spyOn(console, 'warn').mockImplementation(); @@ -331,7 +331,7 @@ describe('Budget', () => { describe('Categories', () => { test('can be deleted', async () => { - let spreadsheet = await sheet.loadSpreadsheet(db); + await sheet.loadSpreadsheet(db); await runMutator(async () => { await db.insertCategoryGroup({ id: 'group1', name: 'group1' }); diff --git a/packages/loot-core/src/server/post.js b/packages/loot-core/src/server/post.js index 5f711dfe33870e25aee09d469c74ceb814853e6a..21b6145ab12f0ff92d3402f1a1c57581bf6bfea3 100644 --- a/packages/loot-core/src/server/post.js +++ b/packages/loot-core/src/server/post.js @@ -22,8 +22,6 @@ export async function post(url, data) { let text; let res; - let s = new Error().stack; - try { res = await fetch(url, { method: 'POST', diff --git a/packages/loot-core/src/server/schedules/app.js b/packages/loot-core/src/server/schedules/app.js index 9f813ecef71233bc96919211f98261548133881a..0adc795a21072022e2b73c46e0372ab5a05fd22b 100644 --- a/packages/loot-core/src/server/schedules/app.js +++ b/packages/loot-core/src/server/schedules/app.js @@ -204,7 +204,7 @@ export async function createSchedule({ schedule, conditions = [] } = {}) { }); let now = Date.now(); - let nextDateId = await db.insertWithUUID('schedules_next_date', { + await db.insertWithUUID('schedules_next_date', { schedule_id: scheduleId, local_next_date: nextDateRepr, local_next_date_ts: now, @@ -212,7 +212,7 @@ export async function createSchedule({ schedule, conditions = [] } = {}) { base_next_date_ts: now }); - let id = await db.insertWithSchema('schedules', { + await db.insertWithSchema('schedules', { ...schedule, id: scheduleId, rule: ruleId @@ -380,10 +380,8 @@ function trackJSONPaths() { } function onApplySync(oldValues, newValues) { - let found = false; newValues.forEach((items, table) => { if (table === 'rules') { - found = true; items.forEach(newValue => { onRuleUpdate(newValue); }); diff --git a/packages/loot-core/src/server/schedules/find-schedules.js b/packages/loot-core/src/server/schedules/find-schedules.js index 8ac25801696b27be2a493517978c1f35a75f9ce4..679870e16d9ff436e85f7dfeb891594ed5e6eadb 100644 --- a/packages/loot-core/src/server/schedules/find-schedules.js +++ b/packages/loot-core/src/server/schedules/find-schedules.js @@ -58,7 +58,6 @@ export function matchSchedules(allOccurs, config, partialMatchRank = 0.5) { for (let trans of baseOccur.transactions) { let threshold = getApproxNumberThreshold(trans.amount); let payee = trans.payee; - let account = trans.account; let found = occurs.map(occur => { let matched = occur.transactions.find( @@ -113,7 +112,6 @@ async function schedulesForPattern( ) { let schedules = []; - let i = 0; for (let i = 0; i < numDays; i++) { let start = d.addDays(baseStart, i); let config; diff --git a/packages/loot-core/src/server/spreadsheet/new/compiler.js b/packages/loot-core/src/server/spreadsheet/new/compiler.js index 7f1c3636e9f75b4d407a8ca0b9239aacece54943..76c62176d769c48da82d6e8db2657710190139e6 100644 --- a/packages/loot-core/src/server/spreadsheet/new/compiler.js +++ b/packages/loot-core/src/server/spreadsheet/new/compiler.js @@ -101,7 +101,7 @@ class Compiler { .concat(getSqlFields(node.table, node.groupby)) .concat(...node.select.map(s => getSqlFields(node.table, s.expr))); - const { sql, where, dependencies } = generateSql( + const { sql, where } = generateSql( node.table, node.where, node.groupby, diff --git a/packages/loot-core/src/server/spreadsheet/new/parser.js b/packages/loot-core/src/server/spreadsheet/new/parser.js index 2bf3b04919a4b5b661fd2846f8214c21a484710f..39abe8aceaa6ed923d05ae76dad87aba8ca5910b 100644 --- a/packages/loot-core/src/server/spreadsheet/new/parser.js +++ b/packages/loot-core/src/server/spreadsheet/new/parser.js @@ -132,6 +132,7 @@ function parseAnd(state) { function parseNot(state) { let left = parseCompare(state); while (skipValue(state, types.TOKEN_OPERATOR, 'not')) { + // eslint-disable-next-line no-unused-vars const right = parseCompare(state); left = new nodes.UnaryOp(left.lineno, left.colno, 'not', parseNot(state)); } @@ -221,7 +222,6 @@ function parseUnary(state) { function parsePrimary(state) { var tok = nextToken(state); var val = null; - var node = null; if (!tok) { fail(state, 'expected expression, got end of file'); diff --git a/packages/loot-core/src/server/spreadsheet/new/sqlgen.js b/packages/loot-core/src/server/spreadsheet/new/sqlgen.js index b076edb82a430c5a7265d3821ae61e13506659b8..665464c73a937c119f0db7bb8039a1900463e04f 100644 --- a/packages/loot-core/src/server/spreadsheet/new/sqlgen.js +++ b/packages/loot-core/src/server/spreadsheet/new/sqlgen.js @@ -227,7 +227,6 @@ export default function generate(table, where, groupby, select, deps) { let dependencies = []; let joins = []; - let uid = 1; allPaths.forEach(path => { let currentTable = { name: table, id: table }; for (var i = 0; i < path.length - 1; i++) { diff --git a/packages/loot-core/src/server/spreadsheet/spreadsheet.test.js b/packages/loot-core/src/server/spreadsheet/spreadsheet.test.js index b2ced4f015a400f34557de563569427a6be5cd4d..e1bb3fa029ce2c3e92cee9fadde79dcb9382e0c3 100644 --- a/packages/loot-core/src/server/spreadsheet/spreadsheet.test.js +++ b/packages/loot-core/src/server/spreadsheet/spreadsheet.test.js @@ -8,6 +8,8 @@ function wait(n) { return new Promise(resolve => setTimeout(resolve, n)); } +// TODO: re-enable and fix these tests +// eslint-disable-next-line no-unused-vars async function insertTransactions(payeeId = null) { await db.insertAccount({ id: '1', name: 'checking', offbudget: 0 }); await db.insertAccount({ id: '2', name: 'checking', offbudget: 1 }); diff --git a/packages/loot-core/src/server/spreadsheet/sqlinterp.test.js b/packages/loot-core/src/server/spreadsheet/sqlinterp.test.js index f19cd3369854b77210da774d1be1a8ab873919f6..75b7168fe0838c2e835b6d6c331458c5c220f533 100644 --- a/packages/loot-core/src/server/spreadsheet/sqlinterp.test.js +++ b/packages/loot-core/src/server/spreadsheet/sqlinterp.test.js @@ -16,7 +16,7 @@ test('sql interpretation works', async () => { category: 1 }; - const { ops, dependencies, sqlDependencies } = compile(` + const { sqlDependencies } = compile(` =from transactions where date >= 20170101 and date <= 20170131 and category = 1 diff --git a/packages/loot-core/src/server/spreadsheet/tests/data-propagation.js b/packages/loot-core/src/server/spreadsheet/tests/data-propagation.js deleted file mode 100644 index 8268ef7a297f76f092a89b5e9af746b22f47dc75..0000000000000000000000000000000000000000 --- a/packages/loot-core/src/server/spreadsheet/tests/data-propagation.js +++ /dev/null @@ -1,9 +0,0 @@ -const expect = require('expect'); - -const propagate = require('../data-compute/propagate.js'); - -describe('data propagation', () => { - it('should work', () => { - expect(true).toExist(); - }); -}); diff --git a/packages/loot-core/src/server/spreadsheet/usage.js b/packages/loot-core/src/server/spreadsheet/usage.js index efedaa4cf9e530d42ab9a6c2d985ebdfa62c555e..cbcd85fb3e2e5aa3325a46596efd1f906cfbac47 100644 --- a/packages/loot-core/src/server/spreadsheet/usage.js +++ b/packages/loot-core/src/server/spreadsheet/usage.js @@ -43,7 +43,6 @@ const sheet = new Spreadsheet({ }, run: sql => { return new Promise(resolve => { - const start = Date.now(); db.all(sql, function(err, rows) { if (err) { throw new Error(err); diff --git a/packages/loot-core/src/server/spreadsheet/util.js b/packages/loot-core/src/server/spreadsheet/util.js index e88bcb98038a5d0d65da9fc71168c7c6073b4901..fc0493a37a6abbbb7075271e8496440a44655fcd 100644 --- a/packages/loot-core/src/server/spreadsheet/util.js +++ b/packages/loot-core/src/server/spreadsheet/util.js @@ -32,7 +32,6 @@ function resolveNamesAsArrays(sheets) { const sheet = sheets[sheetName]; sheet.forEach(name => { - const expr = sheet[name]; cells.push(resolveName(sheetName, name)); }); }); diff --git a/packages/loot-core/src/server/sync/index.js b/packages/loot-core/src/server/sync/index.js index 20d59fc584e1ef6102ad0509e63b0008958689fb..5f51b1c61838423c214ce56a2b88b44f141f9503 100644 --- a/packages/loot-core/src/server/sync/index.js +++ b/packages/loot-core/src/server/sync/index.js @@ -210,7 +210,7 @@ function applyMessagesForImport(messages) { db.transaction(() => { for (let i = 0; i < messages.length; i++) { let msg = messages[i]; - let { dataset, row, column, timestamp, value } = msg; + let { dataset } = msg; if (!msg.old) { try { @@ -662,7 +662,6 @@ async function _fullSync(sinceTimestamp, count, prevDiffTime) { } let diffTime = merkle.diff(res.merkle, getClock().merkle); - let result = res.messages; if (diffTime !== null) { // This is a bit wonky, but we loop until we are in sync with the diff --git a/packages/loot-core/src/server/sync/migrate.js b/packages/loot-core/src/server/sync/migrate.js index 20f055c1bd4fc2251506cbdd415677e2ecc0af4b..4a79d73eb22c4c9ff767547257b8a571691325d8 100644 --- a/packages/loot-core/src/server/sync/migrate.js +++ b/packages/loot-core/src/server/sync/migrate.js @@ -2,10 +2,9 @@ import { Timestamp } from '../crdt'; import { addSyncListener, applyMessages } from './index'; -function migrateParentIds(oldValues, newValues) { +function migrateParentIds(_oldValues, newValues) { newValues.forEach((items, table) => { if (table === 'transactions') { - let old = oldValues.get(table); let toApply = []; items.forEach(newValue => { diff --git a/packages/loot-core/src/server/sync/sync.test.js b/packages/loot-core/src/server/sync/sync.test.js index 5cc86445b53a5d857120514a7d8cf40b4361c1f4..6379679bb9fe4fc39f2b811f4a79a9533a11da70 100644 --- a/packages/loot-core/src/server/sync/sync.test.js +++ b/packages/loot-core/src/server/sync/sync.test.js @@ -2,7 +2,6 @@ import { getClock, Timestamp } from '../crdt'; import * as db from '../db'; import * as prefs from '../prefs'; import * as sheet from '../sheet'; -import { resolveName } from '../spreadsheet/util'; import * as encoder from './encoder'; import { setSyncingMode, sendMessages, applyMessages, fullSync } from './index'; @@ -183,13 +182,13 @@ describe('Sync projections', () => { barId = await db.insertCategory({ name: 'bar', cat_group: 'group1' }); }); - const spreadsheet = await sheet.loadSpreadsheet(db); + await sheet.loadSpreadsheet(db); registerBudgetMonths(['2017-01', '2017-02']); expectCellNotToExist('budget201701', 'sum-amount-' + fooId); expectCellNotToExist('budget201701', 'sum-amount-' + barId); expectCellNotToExist('budget201701', 'group-sum-amount-' + barId); - const { messages } = await fullSync(); + await fullSync(); // Make sure the budget cells have been created expectCellToExist('budget201701', 'sum-amount-' + fooId); @@ -203,26 +202,26 @@ describe('Sync projections', () => { test('creating and deleting categories in same sync', async () => { // It should work when the client creates a category and deletes // it in the same sync (should do nothing) - let groupId, fooId; + let fooId; await asSecondClient(async () => { await sheet.loadSpreadsheet(db); - groupId = await db.insertCategoryGroup({ id: 'group1', name: 'group1' }); + await db.insertCategoryGroup({ id: 'group1', name: 'group1' }); fooId = await db.insertCategory({ name: 'foo', cat_group: 'group1' }); await db.deleteCategory({ id: fooId }); }); - const spreadsheet = await sheet.loadSpreadsheet(db); + await sheet.loadSpreadsheet(db); registerBudgetMonths(['2017-01', '2017-02']); expectCellNotToExist('budget201701', 'sum-amount-' + fooId); - const { messages } = await fullSync(); + await fullSync(); expectCellNotToExist('budget201701', 'sum-amount-' + fooId); }); test('synced categories should have budgets deleted', async () => { - let groupId, fooId; + let fooId; await asSecondClient(async () => { await sheet.loadSpreadsheet(db); - groupId = await db.insertCategoryGroup({ + await db.insertCategoryGroup({ id: 'group1', name: 'group1' }); @@ -230,7 +229,7 @@ describe('Sync projections', () => { await db.deleteCategory({ id: fooId }); }); - const spreadsheet = await sheet.loadSpreadsheet(db); + await sheet.loadSpreadsheet(db); registerBudgetMonths(['2017-01', '2017-02']); // Get all the messages. We'll apply them in two passes @@ -261,7 +260,7 @@ describe('Sync projections', () => { await db.deleteCategoryGroup({ id: groupId }); }); - const spreadsheet = await sheet.loadSpreadsheet(db); + await sheet.loadSpreadsheet(db); registerBudgetMonths(['2017-01', '2017-02']); expectCellNotToExist('budget201701', 'group-sum-amount-' + groupId); await fullSync(); @@ -284,7 +283,7 @@ describe('Sync projections', () => { await db.deleteCategoryGroup({ id: groupId }); }); - const spreadsheet = await sheet.loadSpreadsheet(db); + await sheet.loadSpreadsheet(db); registerBudgetMonths(['2017-01', '2017-02']); // Get all the messages. We'll apply them in two passes @@ -312,16 +311,16 @@ describe('Sync projections', () => { }); test('categories should update the budget when moved', async () => { - let groupId, group2Id, fooId; + let groupId, fooId; await asSecondClient(async () => { await sheet.loadSpreadsheet(db); groupId = await db.insertCategoryGroup({ id: 'group1', name: 'group1' }); - group2Id = await db.insertCategoryGroup({ id: 'group2', name: 'group2' }); + await db.insertCategoryGroup({ id: 'group2', name: 'group2' }); fooId = await db.insertCategory({ name: 'foo', cat_group: 'group1' }); await db.moveCategory(fooId, 'group2'); }); - const spreadsheet = await sheet.loadSpreadsheet(db); + await sheet.loadSpreadsheet(db); registerBudgetMonths(['2017-01', '2017-02']); // Get all the messages. We'll apply them in two passes diff --git a/packages/loot-core/src/server/tests/mockSyncServer.js b/packages/loot-core/src/server/tests/mockSyncServer.js index 1894eadd2b8f6d06f06a3d01df591fd74946d790..1584c1144289516b8cddcbebac4ad20e0854b309 100644 --- a/packages/loot-core/src/server/tests/mockSyncServer.js +++ b/packages/loot-core/src/server/tests/mockSyncServer.js @@ -1,5 +1,3 @@ -import dateFns from 'date-fns'; - import { makeClock, Timestamp, merkle } from '../crdt'; const SyncPb = require('../sync/proto/sync_pb'); @@ -113,7 +111,7 @@ module.exports.getClock = () => { module.exports.getMessages = () => { return currentMessages.map(msg => { - let { timestamp, is_encrypted, content } = msg; + let { timestamp, content } = msg; let fields = SyncPb.Message.deserializeBinary(content); return { diff --git a/packages/loot-core/src/shared/arithmetic.js b/packages/loot-core/src/shared/arithmetic.js index e659833f65d80fcb5681671c4f88c014e1cecd4b..2c532378ca70e639c8e589d2754b63aa960f6acf 100644 --- a/packages/loot-core/src/shared/arithmetic.js +++ b/packages/loot-core/src/shared/arithmetic.js @@ -20,10 +20,6 @@ function next(state) { return ch; } -function isEnd(state) { - return state.index >= state.str.length; -} - function nextOperator(state, op) { if (char(state) === op) { next(state); diff --git a/packages/loot-core/src/shared/async.test.js b/packages/loot-core/src/shared/async.test.js index 549c3e85be2c03845fe7e8bf49fc0fe3791cff14..1bafca0c457dc3dfa121b73a6f5164b39ef30d11 100644 --- a/packages/loot-core/src/shared/async.test.js +++ b/packages/loot-core/src/shared/async.test.js @@ -6,7 +6,6 @@ function timeout(n) { function makeFunction(data) { return async function fn(n, { throwError } = {}) { - const x = Math.random(); data.push(n); await timeout(10); diff --git a/yarn.lock b/yarn.lock index 69f69afe82d1257880eeb50a494298d749b0882c..ad8d2a6f274608ae0d73dad8d32f0f8370475327 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14701,7 +14701,6 @@ __metadata: cross-env: ^7.0.3 csv-parse: ^4.10.1 csv-stringify: ^5.3.6 - damerau-levenshtein: ^1.0.4 date-fns: 2.0.0-alpha.27 deep-equal: ^2.0.5 eslint: 5.6.0