diff --git a/eslint.config.js b/eslint.config.js index 0bd447486..3a654acc0 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -6,6 +6,47 @@ import { defineConfig } from 'eslint/config'; import globals from 'globals'; import controlStructureSpacing from './control-structure-spacing.js'; +const rules = { + 'no-unused-vars': ['error', { + 'vars': 'all', + 'args': 'after-used', + 'caughtErrors': 'all', + 'ignoreRestSiblings': false, + 'ignoreUsingDeclarations': false, + 'reportUsedIgnorePattern': false, + 'argsIgnorePattern': '^_', + 'caughtErrorsIgnorePattern': '^_', + 'destructuredArrayIgnorePattern': '^_', + + }], + curly: ['error', 'multi-line'], + '@stylistic/curly-newline': ['error', 'always'], + '@stylistic/object-curly-spacing': ['error', 'always'], + '@stylistic/indent': ['error', 4, { + CallExpression: { + arguments: 4, + }, + }], + '@stylistic/indent-binary-ops': ['error', 4], + '@stylistic/array-bracket-newline': ['error', 'consistent'], + '@stylistic/semi': ['error', 'always'], + '@stylistic/quotes': ['error', 'single', { 'avoidEscape': true }], + '@stylistic/function-call-argument-newline': ['error', 'consistent'], + '@stylistic/arrow-spacing': ['error', { before: true, after: true }], + '@stylistic/space-before-function-paren': ['error', { 'anonymous': 'never', 'named': 'never', 'asyncArrow': 'always', 'catch': 'always' }], + '@stylistic/key-spacing': ['error', { 'beforeColon': false, 'afterColon': true }], + '@stylistic/keyword-spacing': ['error', { 'before': true, 'after': true }], + '@stylistic/no-multiple-empty-lines': ['error', { max: 1, maxEOF: 0 }], + '@stylistic/comma-spacing': ['error', { 'before': false, 'after': true }], + '@stylistic/comma-dangle': ['error', 'always-multiline'], + '@stylistic/object-property-newline': ['error', { allowAllPropertiesOnSameLine: true }], + '@stylistic/dot-location': ['error', 'property'], + '@stylistic/space-infix-ops': ['error'], + 'no-undef': 'error', + 'custom/control-structure-spacing': 'error', + '@stylistic/no-trailing-spaces': 'error', +}; + export default defineConfig([ // TypeScript support block { @@ -39,47 +80,7 @@ export default defineConfig([ { files: ['src/backend/**/*.{js,mjs,cjs,ts}'], languageOptions: { globals: globals.node }, - rules: { - 'no-unused-vars': ['error', { - 'vars': 'all', - 'args': 'after-used', - 'caughtErrors': 'all', - 'ignoreRestSiblings': false, - 'ignoreUsingDeclarations': false, - 'reportUsedIgnorePattern': false, - 'argsIgnorePattern': '^_', - 'caughtErrorsIgnorePattern': '^_', - 'destructuredArrayIgnorePattern': '^_', - - }], - curly: ['error', 'multi-line'], - '@stylistic/curly-newline': ['error', 'always'], - '@stylistic/object-curly-spacing': ['error', 'always'], - '@stylistic/indent': ['error', 4, { - CallExpression: { - arguments: 4, - }, - }], - '@stylistic/indent-binary-ops': ['error', 4], - '@stylistic/array-bracket-newline': ['error', 'consistent'], - '@stylistic/semi': ['error', 'always'], - '@stylistic/quotes': ['error', 'single', { 'avoidEscape': true }], - '@stylistic/function-call-argument-newline': ['error', 'consistent'], - '@stylistic/arrow-spacing': ['error', { before: true, after: true }], - '@stylistic/space-before-function-paren': ['error', { 'anonymous': 'never', 'named': 'never', 'asyncArrow': 'always', 'catch': 'always' }], - '@stylistic/key-spacing': ['error', { 'beforeColon': false, 'afterColon': true }], - '@stylistic/keyword-spacing': ['error', { 'before': true, 'after': true }], - '@stylistic/no-multiple-empty-lines': ['error', { max: 1, maxEOF: 0 }], - '@stylistic/comma-spacing': ['error', { 'before': false, 'after': true }], - '@stylistic/comma-dangle': ['error', 'always-multiline'], - '@stylistic/object-property-newline': ['error', { allowAllPropertiesOnSameLine: true }], - '@stylistic/dot-location': ['error', 'property'], - '@stylistic/space-infix-ops': ['error'], - 'no-undef': 'error', - 'custom/control-structure-spacing': 'error', - '@stylistic/no-trailing-spaces': 'error', - - }, + rules, extends: ['js/recommended'], plugins: { js, @@ -92,46 +93,11 @@ export default defineConfig([ globals: { extension: 'readonly', config: 'readonly', + global_config: 'readonly', ...globals.node, }, }, - rules: { - 'no-unused-vars': ['error', { - 'vars': 'all', - 'args': 'after-used', - 'caughtErrors': 'all', - 'ignoreRestSiblings': false, - 'ignoreUsingDeclarations': false, - 'reportUsedIgnorePattern': false, - 'argsIgnorePattern': '^_', - 'caughtErrorsIgnorePattern': '^_', - 'destructuredArrayIgnorePattern': '^_', - - }], - curly: ['error', 'multi-line'], - '@stylistic/curly-newline': ['error', 'always'], - '@stylistic/object-curly-spacing': ['error', 'always'], - '@stylistic/indent': ['error', 4, { CallExpression: { arguments: 4 } }], - '@stylistic/indent-binary-ops': ['error', 4], - '@stylistic/array-bracket-newline': ['error', 'consistent'], - '@stylistic/semi': ['error', 'always'], - '@stylistic/quotes': ['error', 'single', { 'avoidEscape': true }], - '@stylistic/function-call-argument-newline': ['error', 'consistent'], - '@stylistic/arrow-spacing': ['error', { before: true, after: true }], - '@stylistic/space-before-function-paren': ['error', { 'anonymous': 'never', 'named': 'never', 'asyncArrow': 'always', 'catch': 'always' }], - '@stylistic/key-spacing': ['error', { 'beforeColon': false, 'afterColon': true }], - '@stylistic/keyword-spacing': ['error', { 'before': true, 'after': true }], - '@stylistic/no-multiple-empty-lines': ['error', { max: 1, maxEOF: 0 }], - '@stylistic/comma-spacing': ['error', { 'before': false, 'after': true }], - '@stylistic/comma-dangle': ['error', 'always-multiline'], - '@stylistic/object-property-newline': ['error', { allowAllPropertiesOnSameLine: true }], - '@stylistic/dot-location': ['error', 'property'], - '@stylistic/space-infix-ops': ['error'], - 'no-undef': 'error', - 'custom/control-structure-spacing': 'error', - '@stylistic/no-trailing-spaces': 'error', - - }, + rules, extends: ['js/recommended'], plugins: { js, diff --git a/extensions/api.d.ts b/extensions/api.d.ts index a8cb9df7c..fd4adf398 100644 --- a/extensions/api.d.ts +++ b/extensions/api.d.ts @@ -51,7 +51,7 @@ type StripPrefix = T extends `${TPrefi // TODO DS: define this globally in core to use it there too interface ServiceNameMap { 'meteringService': Pick & MeteringService // TODO DS: squash into a single class without wrapper - 'puter-kv': DBKVStore + 'puter-kvstore': DBKVStore 'su': SUService } interface Extension extends RouterMethods { diff --git a/src/backend/src/services/SUService.d.ts b/src/backend/src/services/SUService.d.ts index 9e24dbfca..18ec7f8c9 100644 --- a/src/backend/src/services/SUService.d.ts +++ b/src/backend/src/services/SUService.d.ts @@ -1,8 +1,8 @@ -import type { Actor } from "./auth/Actor"; +import type { Actor } from './auth/Actor'; export class SUService { _construct(): void; - get_system_actor(): Promise; + get_system_actor(): Promise; sudo(callback: () => Promise): Promise; sudo(actorOrCallback: Actor, callback: () => Promise): Promise; } \ No newline at end of file diff --git a/src/backend/src/services/repositories/DBKVStore/DBKVStore.ts b/src/backend/src/services/repositories/DBKVStore/DBKVStore.ts index ac2de578d..27e6447ad 100644 --- a/src/backend/src/services/repositories/DBKVStore/DBKVStore.ts +++ b/src/backend/src/services/repositories/DBKVStore/DBKVStore.ts @@ -309,8 +309,8 @@ export class DBKVStore { return currVal as T extends { '': number } ? number : RecursiveRecord; } - async decr(...params: Parameters): ReturnType { - return await this.incr(...params); + async decr({ key, pathAndAmountMap }: Parameters[0]): ReturnType { + return await this.incr({ key, pathAndAmountMap: Object.fromEntries(Object.entries(pathAndAmountMap).map(([k, v]) => [k, -v])) }); } async #expireat(key: string, timestamp: number){