From 4e7b2be7302e9a39d8cd24b07a75dc1a148a325a Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Fri, 3 Oct 2025 12:58:43 -0400 Subject: [PATCH] add eslint rule to ban .delete({}) and .update({}, {...}) --- packages/backend/eslint.config.js | 8 ++++++++ packages/backend/test-federation/eslint.config.js | 13 +++++++++++++ packages/backend/test-server/eslint.config.js | 11 +++++++++++ packages/backend/test/eslint.config.js | 13 +++++++++++++ 4 files changed, 45 insertions(+) diff --git a/packages/backend/eslint.config.js b/packages/backend/eslint.config.js index 934ddc5fd5..1c2c4d8a0a 100644 --- a/packages/backend/eslint.config.js +++ b/packages/backend/eslint.config.js @@ -117,6 +117,14 @@ export default [ "selector": "NewExpression[callee.name='QuantumKVCache']", "message": "Cache constructor will produce an unmanaged instance. Use CacheManagementService.createQuantumKVCache() instead." }, + { + "selector": "CallExpression[callee.property.name='delete'][arguments.length=1] > ObjectExpression[properties.length=0]", + "message": "repository.delete({}) will produce a runtime error. Use repository.deleteAll() instead." + }, + { + "selector": "CallExpression[callee.property.name='update'][arguments.length>=1] > ObjectExpression[properties.length=0]", + "message": "repository.update({}, {...}) will produce a runtime error. Use repository.updateAll({...}) instead." + }, ], }, }, diff --git a/packages/backend/test-federation/eslint.config.js b/packages/backend/test-federation/eslint.config.js index b4e7eab0ed..0df1c7a23a 100644 --- a/packages/backend/test-federation/eslint.config.js +++ b/packages/backend/test-federation/eslint.config.js @@ -27,5 +27,18 @@ export default [ tsconfigRootDir: import.meta.dirname, }, }, + rules: { + 'no-restricted-syntax': [ + 'error', + { + "selector": "CallExpression[callee.property.name='delete'][arguments.length=1] > ObjectExpression[properties.length=0]", + "message": "repository.delete({}) will produce a runtime error. Use repository.deleteAll() instead." + }, + { + "selector": "CallExpression[callee.property.name='update'][arguments.length>=1] > ObjectExpression[properties.length=0]", + "message": "repository.update({}, {...}) will produce a runtime error. Use repository.updateAll({...}) instead." + }, + ], + } }, ]; diff --git a/packages/backend/test-server/eslint.config.js b/packages/backend/test-server/eslint.config.js index 63f2cf159f..34f163853c 100644 --- a/packages/backend/test-server/eslint.config.js +++ b/packages/backend/test-server/eslint.config.js @@ -38,6 +38,17 @@ export default [ name: '__filename', message: 'Not in ESModule. Use `import.meta.url` instead.', }], + 'no-restricted-syntax': [ + 'error', + { + "selector": "CallExpression[callee.property.name='delete'][arguments.length=1] > ObjectExpression[properties.length=0]", + "message": "repository.delete({}) will produce a runtime error. Use repository.deleteAll() instead." + }, + { + "selector": "CallExpression[callee.property.name='update'][arguments.length>=1] > ObjectExpression[properties.length=0]", + "message": "repository.update({}, {...}) will produce a runtime error. Use repository.updateAll({...}) instead." + }, + ], }, }, { diff --git a/packages/backend/test/eslint.config.js b/packages/backend/test/eslint.config.js index ba64144999..54c14e92a4 100644 --- a/packages/backend/test/eslint.config.js +++ b/packages/backend/test/eslint.config.js @@ -18,6 +18,19 @@ export default [ tsconfigRootDir: import.meta.dirname, }, }, + rules: { + 'no-restricted-syntax': [ + 'error', + { + "selector": "CallExpression[callee.property.name='delete'][arguments.length=1] > ObjectExpression[properties.length=0]", + "message": "repository.deleteAll() will produce a runtime error. Use repository.deleteAll() instead." + }, + { + "selector": "CallExpression[callee.property.name='update'][arguments.length>=1] > ObjectExpression[properties.length=0]", + "message": "repository.update({}, {...}) will produce a runtime error. Use repository.updateAll({...}) instead." + }, + ], + } }, { ignores: [