@nextcloud/eslint-config 9.0.0-rc.0 → 9.0.0-rc.2

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 (63) hide show
  1. package/CHANGELOG.md +80 -40
  2. package/README.md +142 -29
  3. package/dist/configs/codeStyle.d.ts +13 -0
  4. package/dist/configs/codeStyle.js +184 -0
  5. package/dist/configs/documentation.d.ts +12 -0
  6. package/dist/configs/documentation.js +123 -0
  7. package/dist/configs/filesystem.d.ts +9 -0
  8. package/dist/configs/filesystem.js +20 -0
  9. package/dist/configs/imports.d.ts +12 -0
  10. package/dist/configs/imports.js +114 -0
  11. package/dist/configs/javascript.d.ts +14 -0
  12. package/dist/configs/javascript.js +118 -0
  13. package/dist/configs/json.d.ts +9 -0
  14. package/dist/configs/json.js +45 -0
  15. package/dist/configs/node.d.ts +10 -0
  16. package/dist/configs/node.js +24 -0
  17. package/dist/configs/typescript.d.ts +12 -0
  18. package/dist/configs/typescript.js +60 -0
  19. package/dist/configs/vue.d.ts +12 -0
  20. package/dist/configs/vue.js +152 -0
  21. package/dist/configs/vue2.d.ts +12 -0
  22. package/dist/configs/vue2.js +30 -0
  23. package/dist/configs/vue3.d.ts +12 -0
  24. package/dist/configs/vue3.js +26 -0
  25. package/dist/globs.d.ts +20 -0
  26. package/dist/globs.js +39 -0
  27. package/dist/index.d.ts +27 -31
  28. package/dist/index.js +78 -0
  29. package/dist/plugins/l10n/index.d.ts +10 -0
  30. package/dist/plugins/l10n/index.js +17 -0
  31. package/dist/plugins/l10n/rules/enforce-ellipsis.d.ts +7 -0
  32. package/dist/plugins/l10n/rules/enforce-ellipsis.js +32 -0
  33. package/dist/plugins/l10n/rules/non-breaking-space.d.ts +7 -0
  34. package/dist/plugins/l10n/rules/non-breaking-space.js +30 -0
  35. package/dist/plugins/nextcloud/index.d.ts +7 -0
  36. package/dist/plugins/nextcloud/index.js +9 -0
  37. package/dist/plugins/nextcloud/rules/index.d.ts +6 -0
  38. package/dist/plugins/nextcloud/rules/index.js +6 -0
  39. package/dist/plugins/nextcloud/rules/no-deprecations.d.ts +7 -0
  40. package/dist/plugins/nextcloud/rules/no-deprecations.js +196 -0
  41. package/dist/plugins/nextcloud/rules/no-removed-apis.d.ts +7 -0
  42. package/dist/plugins/nextcloud/rules/no-removed-apis.js +152 -0
  43. package/dist/plugins/nextcloud/utils/version-parser.d.ts +41 -0
  44. package/dist/plugins/nextcloud/utils/version-parser.js +106 -0
  45. package/dist/plugins/nextcloud-vue/index.d.ts +28 -0
  46. package/dist/plugins/nextcloud-vue/index.js +13 -0
  47. package/dist/plugins/nextcloud-vue/rules/index.d.ts +17 -0
  48. package/dist/plugins/nextcloud-vue/rules/index.js +10 -0
  49. package/dist/plugins/nextcloud-vue/rules/no-deprecated-exports.d.ts +7 -0
  50. package/dist/plugins/nextcloud-vue/rules/no-deprecated-exports.js +44 -0
  51. package/dist/plugins/nextcloud-vue/rules/no-deprecated-props.d.ts +20 -0
  52. package/dist/plugins/nextcloud-vue/rules/no-deprecated-props.js +61 -0
  53. package/dist/plugins/nextcloud-vue/utils/lib-version-parser.d.ts +33 -0
  54. package/dist/plugins/nextcloud-vue/utils/lib-version-parser.js +94 -0
  55. package/dist/plugins/packageJson.d.ts +10 -0
  56. package/dist/plugins/packageJson.js +66 -0
  57. package/dist/utils.d.ts +23 -0
  58. package/dist/utils.js +19 -0
  59. package/dist/version.d.ts +1 -0
  60. package/dist/version.js +6 -0
  61. package/package.json +26 -22
  62. package/dist/index.mjs +0 -1464
  63. package/dist/index.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sources":["../lib/globs.ts","../lib/configs/codeStyle.ts","../lib/configs/documentation.ts","../lib/configs/filesystem.ts","../node_modules/@eslint/js/src/configs/eslint-all.js","../node_modules/@eslint/js/src/configs/eslint-recommended.js","../node_modules/@eslint/js/src/index.js","../lib/plugins/nextcloud/utils/version-parser.ts","../lib/plugins/nextcloud/rules/no-deprecations.ts","../lib/plugins/nextcloud/rules/no-removed-apis.ts","../lib/plugins/nextcloud/rules/index.ts","../lib/plugins/nextcloud/index.ts","../lib/configs/javascript.ts","../lib/plugins/packageJson.ts","../lib/configs/json.ts","../lib/configs/node.ts","../lib/utils.ts","../lib/configs/typescript.ts","../lib/configs/vue.ts","../lib/configs/vue2.ts","../lib/configs/vue3.ts","../lib/index.ts"],"sourcesContent":["/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/** Glob pattern for test files (specs) */\nexport const GLOB_FILES_TESTING = [\n\t'**.test.*',\n\t'**.spec.*',\n\t'**.cy.*',\n\t'**/test',\n\t'**/tests',\n]\n\n/** Glob pattern for Typescript files */\nexport const GLOB_FILES_TYPESCRIPT = [\n\t'**/*.ts',\n\t'**/*.mts',\n\t'**/*.cts',\n\t'**/*.tsx',\n]\n\n/** Glob pattern for Javascript files */\nexport const GLOB_FILES_JAVASCRIPT = [\n\t'**/*.js',\n\t'**/*.cjs',\n\t'**/*.mjs',\n\t'**/*.jsx',\n]\n\n/** Glob pattern for JSON files */\nexport const GLOB_FILES_JSON = ['**/*.json']\n\n/** Glob pattern for JSONC files */\nexport const GLOB_FILES_JSONC = ['**/*.jsonc']\n\n/** Glob pattern for Microsoft JSON files which use a slightly different JSONC implementation */\nexport const GLOB_FILES_MS_JSON = [\n\t'**/tsconfig.json',\n\t'.vscode/*.json',\n]\n\n/** Glob pattern for Vue.JS files */\nexport const GLOB_FILES_VUE = ['**/*.vue']\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Linter } from 'eslint'\nimport stylistic from '@stylistic/eslint-plugin'\nimport {\n\tGLOB_FILES_JAVASCRIPT,\n\tGLOB_FILES_TYPESCRIPT,\n\tGLOB_FILES_VUE,\n} from '../globs.ts'\nimport { ConfigOptions } from '../types'\n\n/**\n * Config factory for general code style related rules\n * See also: https://docs.nextcloud.com/server/latest/developer_manual/getting_started/coding_standards/javascript.html#code-style\n *\n * @param options options defining the config preset flavor\n */\nexport function codeStyle(options: ConfigOptions): (Linter.Config | Linter.BaseConfig)[] {\n\treturn [\n\t\t// Nextcloud code style\n\t\t{\n\t\t\tname: '@stylistic/configs/recommended',\n\t\t\tfiles: [\n\t\t\t\t...GLOB_FILES_JAVASCRIPT,\n\t\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t\t...GLOB_FILES_VUE,\n\t\t\t],\n\t\t\t...stylistic.configs.customize({\n\t\t\t\tindent: 'tab',\n\t\t\t\tsemi: false,\n\t\t\t\tquotes: 'single',\n\t\t\t\tquoteProps: 'as-needed',\n\t\t\t\tcommaDangle: 'always-multiline',\n\t\t\t\tarrowParens: true,\n\t\t\t\tbraceStyle: '1tbs',\n\t\t\t}),\n\t\t},\n\n\t\t{\n\t\t\tfiles: [\n\t\t\t\t...GLOB_FILES_JAVASCRIPT,\n\t\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t\t...GLOB_FILES_VUE,\n\t\t\t],\n\t\t\trules: {\n\t\t\t\t// Overrides for the stylistic recommended rules\n\n\t\t\t\t// Tabs should only be used for indention\n\t\t\t\t'@stylistic/no-tabs': [\n\t\t\t\t\t'error',\n\t\t\t\t\t{ allowIndentationTabs: true },\n\t\t\t\t],\n\t\t\t\t// allow spaces after tabs for alignment\n\t\t\t\t'@stylistic/no-mixed-spaces-and-tabs': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'smart-tabs',\n\t\t\t\t],\n\t\t\t\t// allow backticks for strings that contain single quotes\n\t\t\t\t'@stylistic/quotes': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'single',\n\t\t\t\t\t{\n\t\t\t\t\t\tallowTemplateLiterals: false,\n\t\t\t\t\t\tavoidEscape: true,\n\t\t\t\t\t},\n\t\t\t\t],\n\n\t\t\t\t// Not included in stylistic preset but set by us:\n\n\t\t\t\t// Enforce camelCase but allow legacy webpack variables\n\t\t\t\tcamelcase: [\n\t\t\t\t\t'error',\n\t\t\t\t\t{\n\t\t\t\t\t\tallow: ['^__webpack_'],\n\t\t\t\t\t\tproperties: 'never',\n\t\t\t\t\t\tignoreGlobals: true,\n\t\t\t\t\t},\n\t\t\t\t],\n\n\t\t\t\t// Make sure to use object shorthand properties\n\t\t\t\t'object-shorthand': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'properties',\n\t\t\t\t\t{ avoidQuotes: true },\n\t\t\t\t],\n\n\t\t\t\t// Enforce new lines after [ and before ] if there are multiline entries or more than 1 item in the array (better git diff)\n\t\t\t\t'@stylistic/array-bracket-newline': [\n\t\t\t\t\t'error',\n\t\t\t\t\t{\n\t\t\t\t\t\tmultiline: true,\n\t\t\t\t\t\tminItems: 2,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t// Enforce new lines between array elements (better git diff)\n\t\t\t\t'@stylistic/array-element-newline': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'always',\n\t\t\t\t],\n\t\t\t\t// Same for objects as for arrays\n\t\t\t\t'@stylistic/object-curly-newline': [\n\t\t\t\t\t'error',\n\t\t\t\t\t{\n\t\t\t\t\t\tconsistent: true,\n\t\t\t\t\t\tmultiline: true,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t'@stylistic/object-property-newline': 'error',\n\n\t\t\t\t// No space between function name and parenthesis. Enforce fn() instead of fn ()\n\t\t\t\t'@stylistic/function-call-spacing': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'never',\n\t\t\t\t],\n\t\t\t\t// No space between function name and parenthesis on definition. Enforce `function foo()` instead of `function foo ()`.\n\t\t\t\t'@stylistic/space-before-function-paren': [\n\t\t\t\t\t'error',\n\t\t\t\t\t{\n\t\t\t\t\t\t// good: `function() {}` bad: `function () {}`\n\t\t\t\t\t\tanonymous: 'never',\n\t\t\t\t\t\t// good `function foo() {}` bad: `function foo () {}`\n\t\t\t\t\t\tnamed: 'never',\n\t\t\t\t\t\t// consistency for arrow functions regardless of async or sync:\n\t\t\t\t\t\t// good `async () => {}` bad `async() => {}`\n\t\t\t\t\t\tasyncArrow: 'always',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t// Enforce consistent newlines in function parameters, if one parameter is separated by newline, than all should\n\t\t\t\t'@stylistic/function-call-argument-newline': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'consistent',\n\t\t\t\t],\n\t\t\t\t// If parameters are separated by newlines, then the first one should also be separated by a newline from the parenthesis\n\t\t\t\t'@stylistic/function-paren-newline': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'multiline',\n\t\t\t\t],\n\t\t\t\t// Generator functions should have the * on the function keyword as this defines the type of function. \"function* generator()\"\n\t\t\t\t'@stylistic/generator-star-spacing': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'after',\n\t\t\t\t],\n\t\t\t\t// Arrow functions with implicit return should not have line breaks\n\t\t\t\t// TODO: Discuss\n\t\t\t\t'@stylistic/implicit-arrow-linebreak': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'beside',\n\t\t\t\t],\n\t\t\t\t// Prevent issues with different OS by enforcing single line feed for new lien\n\t\t\t\t'@stylistic/linebreak-style': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'unix',\n\t\t\t\t],\n\t\t\t\t// Chained calls should be separated by newline (e.g. foo().forEach().map()...)\n\t\t\t\t'@stylistic/newline-per-chained-call': ['error'],\n\t\t\t\t// No useless semicolons\n\t\t\t\t'@stylistic/no-extra-semi': ['error'],\n\t\t\t\t'no-useless-concat': 'error',\n\t\t\t\t// Prefer { ...foo } over Object.assign({}, foo)\n\t\t\t\t'prefer-object-spread': 'warn',\n\t\t\t\t// Prefer string templates\n\t\t\t\t'prefer-template': 'warn',\n\t\t\t},\n\t\t\tname: 'nextcloud/stylistic/rules',\n\t\t},\n\n\t\t{\n\t\t\tfiles: [\n\t\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t\t...(options.vueIsTypescript ? GLOB_FILES_VUE : []),\n\t\t\t],\n\t\t\trules: {\n\t\t\t\t// consistent spacing for types\n\t\t\t\t'@stylistic/type-annotation-spacing': 'error',\n\t\t\t\t// consistent spacing for generics\n\t\t\t\t'@stylistic/type-generic-spacing': 'error',\n\t\t\t\t'@stylistic/type-named-tuple-spacing': 'error',\n\t\t\t},\n\t\t\tname: 'nextcloud/stylistic/ts-rules',\n\t\t},\n\t]\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Linter } from 'eslint'\nimport type { ConfigOptions } from '../types'\n\nimport {\n\tGLOB_FILES_JAVASCRIPT,\n\tGLOB_FILES_TESTING,\n\tGLOB_FILES_TYPESCRIPT,\n\tGLOB_FILES_VUE,\n} from '../globs'\nimport jsdocPlugin from 'eslint-plugin-jsdoc'\n\n/**\n * Config factory for code documentation related rules (JSDoc)\n *\n * @param options options defining the config preset flavor\n */\nexport function documentation(options: ConfigOptions): Linter.Config[] {\n\treturn [\n\t\t{\n\t\t\t...jsdocPlugin.configs['flat/recommended-typescript'],\n\t\t\tfiles: [\n\t\t\t\t...GLOB_FILES_JAVASCRIPT,\n\t\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t\t...GLOB_FILES_VUE,\n\t\t\t],\n\t\t\tplugins: {\n\t\t\t\tjsdoc: jsdocPlugin,\n\t\t\t},\n\t\t},\n\n\t\t{\n\t\t\t...jsdocPlugin.configs['flat/recommended'],\n\t\t\tfiles: [\n\t\t\t\t...GLOB_FILES_JAVASCRIPT,\n\t\t\t\t...(options.vueIsTypescript ? [] : GLOB_FILES_VUE),\n\t\t\t],\n\t\t\tignores: GLOB_FILES_TESTING,\n\t\t},\n\n\t\t{\n\t\t\t...jsdocPlugin.configs['flat/recommended-typescript'],\n\t\t\tfiles: [\n\t\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t\t...(options.vueIsTypescript ? GLOB_FILES_VUE : []),\n\t\t\t],\n\t\t\tignores: GLOB_FILES_TESTING,\n\t\t},\n\n\t\t{\n\t\t\trules: {\n\t\t\t// Force proper documentation\n\t\t\t\t'jsdoc/check-tag-names': 'error',\n\t\t\t\t// But ignore return values\n\t\t\t\t'jsdoc/require-returns': 'off',\n\t\t\t\t'jsdoc/require-returns-description': 'off',\n\t\t\t\t// Allow one empty line in jsdoc blocks\n\t\t\t\t'jsdoc/tag-lines': [\n\t\t\t\t\t'warn',\n\t\t\t\t\t'any',\n\t\t\t\t\t{ startLines: 1 },\n\t\t\t\t],\n\t\t\t},\n\t\t\tfiles: [\n\t\t\t\t...GLOB_FILES_JAVASCRIPT,\n\t\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t\t...GLOB_FILES_VUE,\n\t\t\t],\n\t\t\tname: 'nextcloud/documentation/rules',\n\t\t},\n\n\t\t{\n\t\t\trules: {\n\t\t\t// Overwrites for documentation as types are already provided by Typescript\n\t\t\t\t'jsdoc/require-param-type': 'off',\n\t\t\t\t'jsdoc/require-property-type': 'off',\n\t\t\t\t'jsdoc/require-returns-type': 'off',\n\t\t\t},\n\t\t\tfiles: [\n\t\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t\t...(options.vueIsTypescript ? GLOB_FILES_VUE : []),\n\t\t\t],\n\t\t\tname: 'nextcloud/documentation/rules-typescript',\n\t\t},\n\t]\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { Linter } from 'eslint'\n\n/**\n * General config to exclude known non-source directories from linting\n */\nexport const filesystem: Linter.Config[] = [\n\t{\n\t\tname: 'nextcloud/filesystem/ignores',\n\t\tignores: [\n\t\t\t'**/dist',\n\t\t\t'**/vendor',\n\t\t\t'**/vendor-bin',\n\t\t\t'**/package-lock.json',\n\t\t],\n\t},\n]\n","/*\n * WARNING: This file is autogenerated using the tools/update-eslint-all.js\n * script. Do not edit manually.\n */\n\"use strict\";\n\n/*\n * IMPORTANT!\n *\n * We cannot add a \"name\" property to this object because it's still used in eslintrc\n * which doesn't support the \"name\" property. If we add a \"name\" property, it will\n * cause an error.\n */\n\nmodule.exports = Object.freeze({\n \"rules\": {\n \"accessor-pairs\": \"error\",\n \"array-callback-return\": \"error\",\n \"arrow-body-style\": \"error\",\n \"block-scoped-var\": \"error\",\n \"camelcase\": \"error\",\n \"capitalized-comments\": \"error\",\n \"class-methods-use-this\": \"error\",\n \"complexity\": \"error\",\n \"consistent-return\": \"error\",\n \"consistent-this\": \"error\",\n \"constructor-super\": \"error\",\n \"curly\": \"error\",\n \"default-case\": \"error\",\n \"default-case-last\": \"error\",\n \"default-param-last\": \"error\",\n \"dot-notation\": \"error\",\n \"eqeqeq\": \"error\",\n \"for-direction\": \"error\",\n \"func-name-matching\": \"error\",\n \"func-names\": \"error\",\n \"func-style\": \"error\",\n \"getter-return\": \"error\",\n \"grouped-accessor-pairs\": \"error\",\n \"guard-for-in\": \"error\",\n \"id-denylist\": \"error\",\n \"id-length\": \"error\",\n \"id-match\": \"error\",\n \"init-declarations\": \"error\",\n \"logical-assignment-operators\": \"error\",\n \"max-classes-per-file\": \"error\",\n \"max-depth\": \"error\",\n \"max-lines\": \"error\",\n \"max-lines-per-function\": \"error\",\n \"max-nested-callbacks\": \"error\",\n \"max-params\": \"error\",\n \"max-statements\": \"error\",\n \"new-cap\": \"error\",\n \"no-alert\": \"error\",\n \"no-array-constructor\": \"error\",\n \"no-async-promise-executor\": \"error\",\n \"no-await-in-loop\": \"error\",\n \"no-bitwise\": \"error\",\n \"no-caller\": \"error\",\n \"no-case-declarations\": \"error\",\n \"no-class-assign\": \"error\",\n \"no-compare-neg-zero\": \"error\",\n \"no-cond-assign\": \"error\",\n \"no-console\": \"error\",\n \"no-const-assign\": \"error\",\n \"no-constant-binary-expression\": \"error\",\n \"no-constant-condition\": \"error\",\n \"no-constructor-return\": \"error\",\n \"no-continue\": \"error\",\n \"no-control-regex\": \"error\",\n \"no-debugger\": \"error\",\n \"no-delete-var\": \"error\",\n \"no-div-regex\": \"error\",\n \"no-dupe-args\": \"error\",\n \"no-dupe-class-members\": \"error\",\n \"no-dupe-else-if\": \"error\",\n \"no-dupe-keys\": \"error\",\n \"no-duplicate-case\": \"error\",\n \"no-duplicate-imports\": \"error\",\n \"no-else-return\": \"error\",\n \"no-empty\": \"error\",\n \"no-empty-character-class\": \"error\",\n \"no-empty-function\": \"error\",\n \"no-empty-pattern\": \"error\",\n \"no-empty-static-block\": \"error\",\n \"no-eq-null\": \"error\",\n \"no-eval\": \"error\",\n \"no-ex-assign\": \"error\",\n \"no-extend-native\": \"error\",\n \"no-extra-bind\": \"error\",\n \"no-extra-boolean-cast\": \"error\",\n \"no-extra-label\": \"error\",\n \"no-fallthrough\": \"error\",\n \"no-func-assign\": \"error\",\n \"no-global-assign\": \"error\",\n \"no-implicit-coercion\": \"error\",\n \"no-implicit-globals\": \"error\",\n \"no-implied-eval\": \"error\",\n \"no-import-assign\": \"error\",\n \"no-inline-comments\": \"error\",\n \"no-inner-declarations\": \"error\",\n \"no-invalid-regexp\": \"error\",\n \"no-invalid-this\": \"error\",\n \"no-irregular-whitespace\": \"error\",\n \"no-iterator\": \"error\",\n \"no-label-var\": \"error\",\n \"no-labels\": \"error\",\n \"no-lone-blocks\": \"error\",\n \"no-lonely-if\": \"error\",\n \"no-loop-func\": \"error\",\n \"no-loss-of-precision\": \"error\",\n \"no-magic-numbers\": \"error\",\n \"no-misleading-character-class\": \"error\",\n \"no-multi-assign\": \"error\",\n \"no-multi-str\": \"error\",\n \"no-negated-condition\": \"error\",\n \"no-nested-ternary\": \"error\",\n \"no-new\": \"error\",\n \"no-new-func\": \"error\",\n \"no-new-native-nonconstructor\": \"error\",\n \"no-new-wrappers\": \"error\",\n \"no-nonoctal-decimal-escape\": \"error\",\n \"no-obj-calls\": \"error\",\n \"no-object-constructor\": \"error\",\n \"no-octal\": \"error\",\n \"no-octal-escape\": \"error\",\n \"no-param-reassign\": \"error\",\n \"no-plusplus\": \"error\",\n \"no-promise-executor-return\": \"error\",\n \"no-proto\": \"error\",\n \"no-prototype-builtins\": \"error\",\n \"no-redeclare\": \"error\",\n \"no-regex-spaces\": \"error\",\n \"no-restricted-exports\": \"error\",\n \"no-restricted-globals\": \"error\",\n \"no-restricted-imports\": \"error\",\n \"no-restricted-properties\": \"error\",\n \"no-restricted-syntax\": \"error\",\n \"no-return-assign\": \"error\",\n \"no-script-url\": \"error\",\n \"no-self-assign\": \"error\",\n \"no-self-compare\": \"error\",\n \"no-sequences\": \"error\",\n \"no-setter-return\": \"error\",\n \"no-shadow\": \"error\",\n \"no-shadow-restricted-names\": \"error\",\n \"no-sparse-arrays\": \"error\",\n \"no-template-curly-in-string\": \"error\",\n \"no-ternary\": \"error\",\n \"no-this-before-super\": \"error\",\n \"no-throw-literal\": \"error\",\n \"no-undef\": \"error\",\n \"no-undef-init\": \"error\",\n \"no-undefined\": \"error\",\n \"no-underscore-dangle\": \"error\",\n \"no-unexpected-multiline\": \"error\",\n \"no-unmodified-loop-condition\": \"error\",\n \"no-unneeded-ternary\": \"error\",\n \"no-unreachable\": \"error\",\n \"no-unreachable-loop\": \"error\",\n \"no-unsafe-finally\": \"error\",\n \"no-unsafe-negation\": \"error\",\n \"no-unsafe-optional-chaining\": \"error\",\n \"no-unused-expressions\": \"error\",\n \"no-unused-labels\": \"error\",\n \"no-unused-private-class-members\": \"error\",\n \"no-unused-vars\": \"error\",\n \"no-use-before-define\": \"error\",\n \"no-useless-assignment\": \"error\",\n \"no-useless-backreference\": \"error\",\n \"no-useless-call\": \"error\",\n \"no-useless-catch\": \"error\",\n \"no-useless-computed-key\": \"error\",\n \"no-useless-concat\": \"error\",\n \"no-useless-constructor\": \"error\",\n \"no-useless-escape\": \"error\",\n \"no-useless-rename\": \"error\",\n \"no-useless-return\": \"error\",\n \"no-var\": \"error\",\n \"no-void\": \"error\",\n \"no-warning-comments\": \"error\",\n \"no-with\": \"error\",\n \"object-shorthand\": \"error\",\n \"one-var\": \"error\",\n \"operator-assignment\": \"error\",\n \"prefer-arrow-callback\": \"error\",\n \"prefer-const\": \"error\",\n \"prefer-destructuring\": \"error\",\n \"prefer-exponentiation-operator\": \"error\",\n \"prefer-named-capture-group\": \"error\",\n \"prefer-numeric-literals\": \"error\",\n \"prefer-object-has-own\": \"error\",\n \"prefer-object-spread\": \"error\",\n \"prefer-promise-reject-errors\": \"error\",\n \"prefer-regex-literals\": \"error\",\n \"prefer-rest-params\": \"error\",\n \"prefer-spread\": \"error\",\n \"prefer-template\": \"error\",\n \"radix\": \"error\",\n \"require-atomic-updates\": \"error\",\n \"require-await\": \"error\",\n \"require-unicode-regexp\": \"error\",\n \"require-yield\": \"error\",\n \"sort-imports\": \"error\",\n \"sort-keys\": \"error\",\n \"sort-vars\": \"error\",\n \"strict\": \"error\",\n \"symbol-description\": \"error\",\n \"unicode-bom\": \"error\",\n \"use-isnan\": \"error\",\n \"valid-typeof\": \"error\",\n \"vars-on-top\": \"error\",\n \"yoda\": \"error\"\n }\n});\n","/**\n * @fileoverview Configuration applied when a user configuration extends from\n * eslint:recommended.\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\n/* eslint sort-keys: [\"error\", \"asc\"] -- Long, so make more readable */\n\n/*\n * IMPORTANT!\n *\n * We cannot add a \"name\" property to this object because it's still used in eslintrc\n * which doesn't support the \"name\" property. If we add a \"name\" property, it will\n * cause an error.\n */\n\nmodule.exports = Object.freeze({\n\trules: Object.freeze({\n\t\t\"constructor-super\": \"error\",\n\t\t\"for-direction\": \"error\",\n\t\t\"getter-return\": \"error\",\n\t\t\"no-async-promise-executor\": \"error\",\n\t\t\"no-case-declarations\": \"error\",\n\t\t\"no-class-assign\": \"error\",\n\t\t\"no-compare-neg-zero\": \"error\",\n\t\t\"no-cond-assign\": \"error\",\n\t\t\"no-const-assign\": \"error\",\n\t\t\"no-constant-binary-expression\": \"error\",\n\t\t\"no-constant-condition\": \"error\",\n\t\t\"no-control-regex\": \"error\",\n\t\t\"no-debugger\": \"error\",\n\t\t\"no-delete-var\": \"error\",\n\t\t\"no-dupe-args\": \"error\",\n\t\t\"no-dupe-class-members\": \"error\",\n\t\t\"no-dupe-else-if\": \"error\",\n\t\t\"no-dupe-keys\": \"error\",\n\t\t\"no-duplicate-case\": \"error\",\n\t\t\"no-empty\": \"error\",\n\t\t\"no-empty-character-class\": \"error\",\n\t\t\"no-empty-pattern\": \"error\",\n\t\t\"no-empty-static-block\": \"error\",\n\t\t\"no-ex-assign\": \"error\",\n\t\t\"no-extra-boolean-cast\": \"error\",\n\t\t\"no-fallthrough\": \"error\",\n\t\t\"no-func-assign\": \"error\",\n\t\t\"no-global-assign\": \"error\",\n\t\t\"no-import-assign\": \"error\",\n\t\t\"no-invalid-regexp\": \"error\",\n\t\t\"no-irregular-whitespace\": \"error\",\n\t\t\"no-loss-of-precision\": \"error\",\n\t\t\"no-misleading-character-class\": \"error\",\n\t\t\"no-new-native-nonconstructor\": \"error\",\n\t\t\"no-nonoctal-decimal-escape\": \"error\",\n\t\t\"no-obj-calls\": \"error\",\n\t\t\"no-octal\": \"error\",\n\t\t\"no-prototype-builtins\": \"error\",\n\t\t\"no-redeclare\": \"error\",\n\t\t\"no-regex-spaces\": \"error\",\n\t\t\"no-self-assign\": \"error\",\n\t\t\"no-setter-return\": \"error\",\n\t\t\"no-shadow-restricted-names\": \"error\",\n\t\t\"no-sparse-arrays\": \"error\",\n\t\t\"no-this-before-super\": \"error\",\n\t\t\"no-undef\": \"error\",\n\t\t\"no-unexpected-multiline\": \"error\",\n\t\t\"no-unreachable\": \"error\",\n\t\t\"no-unsafe-finally\": \"error\",\n\t\t\"no-unsafe-negation\": \"error\",\n\t\t\"no-unsafe-optional-chaining\": \"error\",\n\t\t\"no-unused-labels\": \"error\",\n\t\t\"no-unused-private-class-members\": \"error\",\n\t\t\"no-unused-vars\": \"error\",\n\t\t\"no-useless-backreference\": \"error\",\n\t\t\"no-useless-catch\": \"error\",\n\t\t\"no-useless-escape\": \"error\",\n\t\t\"no-with\": \"error\",\n\t\t\"require-yield\": \"error\",\n\t\t\"use-isnan\": \"error\",\n\t\t\"valid-typeof\": \"error\",\n\t}),\n});\n","/**\n * @fileoverview Main package entrypoint.\n * @author Nicholas C. Zakas\n */\n\n\"use strict\";\n\nconst { name, version } = require(\"../package.json\");\n\n//------------------------------------------------------------------------------\n// Public Interface\n//------------------------------------------------------------------------------\n\nmodule.exports = {\n\tmeta: {\n\t\tname,\n\t\tversion,\n\t},\n\tconfigs: {\n\t\tall: require(\"./configs/eslint-all\"),\n\t\trecommended: require(\"./configs/eslint-recommended\"),\n\t},\n};\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { XMLParser } from 'fast-xml-parser'\nimport { lstatSync, readFileSync } from 'node:fs'\nimport { sep, resolve, isAbsolute, dirname } from 'node:path'\nimport { valid, lte } from 'semver'\n\n/**\n * Check if a given path exists and is a directory\n *\n * @param filePath The path\n */\nexport function isDirectory(filePath: string): boolean {\n\tconst stats = lstatSync(filePath, { throwIfNoEntry: false })\n\treturn stats !== undefined && stats.isDirectory()\n}\n\n/**\n * Check if a given path exists and is a directory\n *\n * @param filePath The path\n */\nexport function isFile(filePath: string): boolean {\n\tconst stats = lstatSync(filePath, { throwIfNoEntry: false })\n\treturn stats !== undefined && stats.isFile()\n}\n\n/**\n * Find the path of nearest `appinfo/info.xml` relative to given path\n *\n * @param currentPath Path to lookup\n * @returns Either the full path including the `info.xml` part or `undefined` if no found\n */\nexport function findAppinfo(currentPath: string): string | undefined {\n\twhile (currentPath && currentPath !== sep) {\n\t\tconst appinfoPath = `${currentPath}${sep}appinfo`\n\t\tif (\n\t\t\tisDirectory(appinfoPath)\n\t\t\t&& isFile(`${appinfoPath}${sep}info.xml`)\n\t\t) {\n\t\t\treturn `${appinfoPath}${sep}info.xml`\n\t\t}\n\t\tcurrentPath = resolve(currentPath, '..')\n\t}\n\treturn undefined\n}\n\n/**\n * Make sure that versions like '25' can be handled by semver\n *\n * @param version The pure version string\n * @returns Sanitized version string\n */\nexport function sanitizeTargetVersion(version: string): string {\n\tlet sanitizedVersion = version\n\tconst sections = sanitizedVersion.split('.').length\n\tif (sections < 3) {\n\t\tsanitizedVersion = sanitizedVersion + '.0'.repeat(3 - sections)\n\t}\n\t// now version should look like '25.0.0'\n\tif (!valid(sanitizedVersion)) {\n\t\tthrow Error(`[@nextcloud/eslint-plugin] Invalid target version ${version} found`)\n\t}\n\treturn sanitizedVersion\n}\n\n/**\n * Create a callback that takes a version number an checks if the version\n * is valid compared to configured version / detected version.\n *\n * @param options Options\n * @param options.cwd The current working directory\n * @param options.physicalFilename The real filename where ESLint is linting currently\n * @param options.options The plugin options\n */\nexport function createVersionValidator({ cwd, physicalFilename, options }): ((version: string) => boolean) {\n\tconst settings = options[0]\n\n\tif (settings?.targetVersion) {\n\t\t// check if the rule version is lower than the current target version\n\t\tconst maxVersion = sanitizeTargetVersion(settings.targetVersion)\n\t\treturn (version) => lte(version, maxVersion)\n\t}\n\n\t// Try to find appinfo and parse the supported version\n\tif (settings?.parseAppInfo !== false) {\n\t\t// Current working directory, either the filename (can be empty) or the cwd property\n\t\tconst currentDirectory = isAbsolute(physicalFilename)\n\t\t\t? resolve(dirname(physicalFilename))\n\t\t\t: dirname(resolve(cwd, physicalFilename))\n\n\t\t// The nearest appinfo\n\t\tconst appinfoPath = findAppinfo(currentDirectory)\n\t\tif (appinfoPath) {\n\t\t\tconst parser = new XMLParser({\n\t\t\t\tattributeNamePrefix: '@',\n\t\t\t\tignoreAttributes: false,\n\t\t\t})\n\t\t\tconst xml = parser.parse(readFileSync(appinfoPath))\n\t\t\tlet maxVersion = xml?.info?.dependencies?.nextcloud?.['@max-version']\n\t\t\tif (typeof maxVersion !== 'string') {\n\t\t\t\tthrow new Error(`[@nextcloud/eslint-plugin] AppInfo does not contain a max-version (location: ${appinfoPath})`)\n\t\t\t}\n\t\t\tmaxVersion = sanitizeTargetVersion(maxVersion)\n\t\t\treturn (version) => lte(version, maxVersion)\n\t\t}\n\n\t\tif (settings?.parseAppInfo === true) {\n\t\t\t// User enforced app info parsing, so we throw an error - otherwise just fallback to default\n\t\t\tthrow new Error('[@nextcloud/eslint-plugin] AppInfo parsing was enabled, but no `appinfo/info.xml` was found.')\n\t\t}\n\t}\n\n\t// If not configured or parsing is disabled, every rule should be handled\n\treturn () => true\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport type { Rule } from 'eslint'\nimport { createVersionValidator } from '../utils/version-parser.js'\n\n// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\n\nconst global = {\n\t$: '19.0.0',\n\tBackbone: '18.0.0',\n\tClipboard: '18.0.0',\n\tClipboardJs: '18.0.0',\n\tDOMPurify: '18.0.0',\n\tformatDate: '16.0.0',\n\tgetURLParameter: '16.0.0',\n\tHandlebars: '18.0.0',\n\thumanFileSize: '16.0.0',\n\tinitCore: '17.0.0',\n\tjQuery: '19.0.0',\n\tjstimezonedetect: '18.0.0',\n\tjstz: '18.0.0',\n\tmd5: '18.0.0',\n\tmoment: '18.0.0',\n\toc_appconfig: '17.0.0',\n\toc_appswebroots: '17.0.0',\n\toc_capabilities: '17.0.0',\n\toc_config: '17.0.0',\n\toc_current_user: '17.0.0',\n\toc_debug: '17.0.0',\n\toc_isadmin: '17.0.0',\n\toc_requesttoken: '17.0.0',\n\toc_webroot: '17.0.0',\n\tOCDialogs: '17.0.0',\n\trelative_modified_date: '16.0.0',\n}\n\nconst oc = {\n\tL10n: '26.0.0',\n\t_capabilities: '17.0.0',\n\taddTranslations: '17.0.0',\n\tbasename: '18.0.0',\n\tcoreApps: '17.0.0',\n\tcurrentUser: '19.0.0',\n\tdirname: '18.0.0',\n\tencodePath: '18.0.0',\n\tfileIsBlacklisted: '17.0.0',\n\tfilePath: '19.0.0',\n\tgenerateUrl: '19.0.0',\n\tget: '19.0.0',\n\tgetCanonicalLocale: '20.0.0',\n\tgetCurrentUser: '19.0.0',\n\tgetHost: '17.0.0',\n\tgetHostName: '17.0.0',\n\tgetPort: '17.0.0',\n\tgetProtocol: '17.0.0',\n\tgetRootPath: '19.0.0',\n\timagePath: '19.0.0',\n\tisSamePath: '18.0.0',\n\tjoinPaths: '18.0.0',\n\tlinkTo: '19.0.0',\n\tlinkToOCS: '19.0.0',\n\tlinkToRemote: '19.0.0',\n\tset: '19.0.0',\n\twebroot: '19.0.0',\n}\n\nconst oca = {\n\tSearch: '20.0.0',\n}\n\nconst ocp = {\n\tToast: '19.0.0',\n}\n\nconst ocNested = {\n\tUtil: {\n\t\tformatDate: '20.0.0',\n\t\thumanFileSize: '20.0.0',\n\t\trelativeModifiedDate: '20.0.0',\n\t},\n}\n\nconst rule: Rule.RuleModule = {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'Deprecated Nextcloud APIs',\n\t\t\tcategory: 'Nextcloud',\n\t\t\trecommended: true,\n\t\t},\n\t\t// fixable: null or \"code\" or \"whitespace\"\n\t\tschema: [\n\t\t\t{\n\t\t\t\t// We accept one option which is an object\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\t// if we should try to find an appinfo and only handle APIs removed before the max-version\n\t\t\t\t\tparseAppInfo: {\n\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t},\n\t\t\t\t\t// Set a Nextcloud target version, only APIs removed before that versions are checked\n\t\t\t\t\ttargetVersion: {\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false,\n\t\t\t},\n\t\t],\n\t\tmessages: {\n\t\t\tdeprecatedGlobal:\n\t\t\t\t'The global property or function {{name}} was deprecated in Nextcloud {{version}}',\n\t\t},\n\t},\n\n\tcreate: function(context) {\n\t\tconst checkTargetVersion = createVersionValidator(context)\n\n\t\treturn {\n\t\t\tMemberExpression: function(node) {\n\t\t\t\t// OC.x\n\t\t\t\tif (\n\t\t\t\t\t'name' in node.object\n\t\t\t\t\t&& 'name' in node.property\n\t\t\t\t\t&& node.object.name === 'OC'\n\t\t\t\t\t&& Object.hasOwn(oc, node.property.name)\n\t\t\t\t\t&& checkTargetVersion(oc[node.property.name])\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessage: `The property or function OC.${node.property.name} was deprecated in Nextcloud ${oc[node.property.name]}`,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t// OCA.x\n\t\t\t\tif (\n\t\t\t\t\t'name' in node.object\n\t\t\t\t\t&& 'name' in node.property\n\t\t\t\t\t&& node.object.name === 'OCA'\n\t\t\t\t\t&& Object.hasOwn(oca, node.property.name)\n\t\t\t\t\t&& checkTargetVersion(oca[node.property.name])\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessage: `The property or function OCA.${node.property.name} was deprecated in Nextcloud ${oca[node.property.name]}`,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t// OCP.x\n\t\t\t\tif (\n\t\t\t\t\t'name' in node.object\n\t\t\t\t\t&& 'name' in node.property\n\t\t\t\t\t&& node.object.name === 'OCP'\n\t\t\t\t\t&& Object.hasOwn(ocp, node.property.name)\n\t\t\t\t\t&& checkTargetVersion(ocp[node.property.name])\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessage: `The property or function OCP.${node.property.name} was deprecated in Nextcloud ${ocp[node.property.name]}`,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// OC.x.y\n\t\t\t\tif (\n\t\t\t\t\tnode.object.type === 'MemberExpression'\n\t\t\t\t\t&& 'name' in node.object.object\n\t\t\t\t\t&& node.object.object.name === 'OC'\n\t\t\t\t\t&& 'name' in node.property\n\t\t\t\t\t&& 'name' in node.object.property\n\t\t\t\t\t&& Object.hasOwn(ocNested, node.object.property.name)\n\t\t\t\t\t&& Object.hasOwn(ocNested[node.object.property.name], node.property.name)\n\t\t\t\t) {\n\t\t\t\t\tconst version = ocNested[node.object.property.name][node.property.name]\n\t\t\t\t\tif (checkTargetVersion(version)) {\n\t\t\t\t\t\tconst prop = [\n\t\t\t\t\t\t\t'OC',\n\t\t\t\t\t\t\tnode.object.property.name,\n\t\t\t\t\t\t\tnode.property.name,\n\t\t\t\t\t\t].join('.')\n\t\t\t\t\t\tconst deprecatedSince = ocNested[node.object.property.name][node.property.name]\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessage: `The property or function ${prop} was deprecated in Nextcloud ${deprecatedSince}`,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tProgram(node) {\n\t\t\t\t// Logic adapted from https://github.com/eslint/eslint/blob/master/lib/rules/no-restricted-globals.js\n\t\t\t\tconst scope = context.sourceCode.getScope(node)\n\t\t\t\tconst report = ({ identifier }) => {\n\t\t\t\t\tif (checkTargetVersion(global[identifier.name])) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessageId: 'deprecatedGlobal',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tname: identifier.name,\n\t\t\t\t\t\t\t\tversion: global[identifier.name],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Report variables declared elsewhere (ex: variables defined as \"global\" by eslint)\n\t\t\t\tscope.variables.forEach((variable) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!variable.defs.length\n\t\t\t\t\t\t&& Object.hasOwn(global, variable.name)\n\t\t\t\t\t) {\n\t\t\t\t\t\tvariable.references.forEach(report)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// Report variables not declared at all\n\t\t\t\tscope.through.forEach((reference) => {\n\t\t\t\t\tif (Object.hasOwn(global, reference.identifier.name)) {\n\t\t\t\t\t\treport(reference)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t},\n}\n\nexport default rule\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { Rule } from 'eslint'\nimport { createVersionValidator } from '../utils/version-parser.js'\n\n// ------------------------------------------------------------------------------\n// Rule Definition\n// ------------------------------------------------------------------------------\n\nconst global = {\n\tautosize: '29.0.0',\n\tescapeHTML: '20.0.0',\n\tfileDownloadPath: '15.0.0',\n\tformatDate: '19.0.0',\n\tgetScrollBarWidth: '15.0.0',\n\tgetURLParameter: '19.0.0',\n\thumanFileSize: '19.0.0',\n\tmarked: '19.0.0',\n\trelative_modified_date: '19.0.0',\n}\n\nconst oc = {\n\tgetScrollBarWidth: '15.0.0',\n\taddTranslations: '26.0.0',\n\tappSettings: '28.0.0',\n\tloadScript: '28.0.0',\n\tloadStyle: '28.0.0',\n}\n\nconst ocNested = {\n\tAppConfig: {\n\t\thasKey: '15.0.0',\n\t\tdeleteApp: '15.0.0',\n\t},\n\tUtil: {\n\t\thasSVGSupport: '15.0.0',\n\t\treplaceSVGIcon: '15.0.0',\n\t\treplaceSVG: '15.0.0',\n\t\tscaleFixForIE8: '15.0.0',\n\t\tisIE8: '15.0.0',\n\t},\n}\n\nconst oca = {\n\t// ref: https://github.com/nextcloud/server/commit/6eced42b7a40f5b0ea0489244583219d0ee2e7af\n\tSearch: '20.0.0',\n}\n\n// TODO: handle OC.x.y.z like OC.Share.ShareConfigModel.areAvatarsEnabled()\n// ref https://github.com/nextcloud/server/issues/11045\n\nconst rule: Rule.RuleModule = {\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: 'Removed Nextcloud APIs',\n\t\t\tcategory: 'Nextcloud',\n\t\t\trecommended: true,\n\t\t},\n\t\t// fixable: \"code\" or \"whitespace\"\n\t\tschema: [\n\t\t\t{\n\t\t\t\t// We accept one option which is an object\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\t// if we should try to find an appinfo and only handle APIs removed before the max-version\n\t\t\t\t\tparseAppInfo: {\n\t\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\t},\n\t\t\t\t\t// Set a Nextcloud target version, only APIs removed before that versions are checked\n\t\t\t\t\ttargetVersion: {\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false,\n\t\t\t},\n\t\t],\n\t\tmessages: {\n\t\t\tremovedGlobal:\n\t\t\t\t'The global property or function {{name}} was removed in Nextcloud {{version}}',\n\t\t},\n\t},\n\n\tcreate: function(context) {\n\t\tconst checkTargetVersion = createVersionValidator(context)\n\n\t\treturn {\n\t\t\tMemberExpression: function(node) {\n\t\t\t\t// OCA.x\n\t\t\t\tif (\n\t\t\t\t\t'name' in node.object\n\t\t\t\t\t&& 'name' in node.property\n\t\t\t\t\t&& node.object.name === 'OCA'\n\t\t\t\t\t&& Object.hasOwn(oca, node.property.name)\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessage: `The property or function OCA.${node.property.name} was removed in Nextcloud ${oc[node.property.name]}`,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// OC.x\n\t\t\t\tif (\n\t\t\t\t\t'name' in node.object\n\t\t\t\t\t&& 'name' in node.property\n\t\t\t\t\t&& node.object.name === 'OC'\n\t\t\t\t\t&& Object.hasOwn(oc, node.property.name)\n\t\t\t\t\t&& checkTargetVersion(oc[node.property.name])\n\t\t\t\t) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tmessage: `The property or function OC.${node.property.name} was removed in Nextcloud ${oc[node.property.name]}`,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// OC.x.y\n\t\t\t\tif (\n\t\t\t\t\tnode.object.type === 'MemberExpression'\n\t\t\t\t\t&& 'name' in node.object.object\n\t\t\t\t\t&& node.object.object.name === 'OC'\n\t\t\t\t\t&& 'name' in node.object.property\n\t\t\t\t\t&& Object.hasOwn(ocNested, node.object.property.name)\n\t\t\t\t\t&& 'name' in node.property\n\t\t\t\t\t&& Object.hasOwn(ocNested[node.object.property.name], node.property.name)\n\t\t\t\t) {\n\t\t\t\t\tconst version\n\t\t\t\t\t\t= ocNested[node.object.property.name][node.property.name]\n\t\t\t\t\tif (checkTargetVersion(version)) {\n\t\t\t\t\t\tconst prop = [\n\t\t\t\t\t\t\t'OC',\n\t\t\t\t\t\t\tnode.object.property.name,\n\t\t\t\t\t\t\tnode.property.name,\n\t\t\t\t\t\t].join('.')\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessage: `The property or function ${prop} was removed in Nextcloud ${version}`,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tProgram(node) {\n\t\t\t\t// Logic adapted from https://github.com/eslint/eslint/blob/master/lib/rules/no-restricted-globals.js\n\t\t\t\tconst scope = context.sourceCode.getScope(node)\n\n\t\t\t\tconst report = (ref) => {\n\t\t\t\t\tconst { identifier } = ref\n\t\t\t\t\tif (checkTargetVersion(global[identifier.name])) {\n\t\t\t\t\t\tcontext.report({\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tmessageId: 'removedGlobal',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tname: identifier.name,\n\t\t\t\t\t\t\t\tversion: global[identifier.name],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Report variables declared elsewhere (ex: variables defined as \"global\" by eslint)\n\t\t\t\tscope.variables.forEach((variable) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!variable.defs.length\n\t\t\t\t\t\t&& Object.hasOwn(global, variable.name)\n\t\t\t\t\t) {\n\t\t\t\t\t\tvariable.references.forEach(report)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// Report variables not declared at all\n\t\t\t\tscope.through.forEach((reference) => {\n\t\t\t\t\tif (Object.hasOwn(global, reference.identifier.name)) {\n\t\t\t\t\t\treport(reference)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t},\n}\n\nexport default rule\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport type { Rule } from 'eslint'\nimport noDeprecations from './no-deprecations.ts'\nimport noRemovedApis from './no-removed-apis.ts'\n\nexport const rules: Record<string, Rule.RuleModule> = {\n\t'no-deprecations': noDeprecations,\n\t'no-removed-apis': noRemovedApis,\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { ESLint } from 'eslint'\nimport { rules } from './rules/index.ts'\n\nexport default {\n\trules,\n\tmeta: {\n\t\tname: '@nextcloud/eslint-plugin',\n\t\tversion: __PACKAGE_VERSION__,\n\t},\n} as ESLint.Plugin\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Linter } from 'eslint'\nimport eslintRules from '@eslint/js'\nimport { GLOB_FILES_JAVASCRIPT, GLOB_FILES_TESTING, GLOB_FILES_TYPESCRIPT, GLOB_FILES_VUE } from '../globs'\nimport globals from 'globals'\nimport nextcloudPlugin from '../plugins/nextcloud/index.ts'\n\n/**\n * This config provides the base rules for code quality,\n * the target is a good code quality -> prevent bugs,\n * code style is handled by another config.\n */\nexport const javascript: Linter.Config[] = [\n\t{\n\t\tname: 'nextcloud/javascript/setup',\n\t\tlanguageOptions: {\n\t\t\tecmaVersion: 'latest',\n\t\t\tglobals: {\n\t\t\t\t...globals.browser,\n\t\t\t\t...globals.es2025,\n\t\t\t\tOC: 'writable',\n\t\t\t\tOCA: 'readonly',\n\t\t\t\tOCP: 'readonly',\n\t\t\t\t// legacy global Nextcloud translation function\n\t\t\t\tt: 'readonly',\n\t\t\t\tn: 'readonly',\n\t\t\t\t// webpack support\n\t\t\t\t__webpack_nonce__: 'writable',\n\t\t\t},\n\t\t\tparserOptions: {\n\t\t\t\tecmaFeatures: {\n\t\t\t\t\tjsx: true,\n\t\t\t\t},\n\t\t\t\tecmaVersion: 'latest',\n\t\t\t\tsourceType: 'module',\n\t\t\t},\n\t\t\tsourceType: 'module',\n\t\t},\n\t\tlinterOptions: {\n\t\t\treportUnusedDisableDirectives: true,\n\t\t},\n\t},\n\n\t// General rules we built upon\n\t{\n\t\tname: 'eslint/configs/recommended',\n\t\tfiles: [\n\t\t\t...GLOB_FILES_JAVASCRIPT,\n\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t...GLOB_FILES_VUE,\n\t\t],\n\t\t...eslintRules.configs.recommended,\n\t},\n\n\t// The Nextcloud plugin for detecting deprecated and removed global API\n\t{\n\t\tname: 'nextcloud/javascript/plugin',\n\t\tplugins: {\n\t\t\t'@nextcloud': nextcloudPlugin,\n\t\t},\n\t\trules: {\n\t\t\t'@nextcloud/no-deprecations': ['warn'],\n\t\t\t'@nextcloud/no-removed-apis': ['error'],\n\t\t},\n\t\tfiles: [\n\t\t\t...GLOB_FILES_JAVASCRIPT,\n\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t...GLOB_FILES_VUE,\n\t\t],\n\t},\n\n\t// Nextcloud specific overwrite\n\t{\n\t\tname: 'nextcloud/javascript/rules',\n\t\tfiles: [\n\t\t\t...GLOB_FILES_JAVASCRIPT,\n\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t...GLOB_FILES_VUE,\n\t\t],\n\t\trules: {\n\t\t\t'no-eval': 'error',\n\t\t\t// Require strict checks\n\t\t\teqeqeq: 'error',\n\t\t\t// Use dot notation where possible as we also only use quote where needed\n\t\t\t'dot-notation': 'error',\n\t\t\t// prevent bugs and increasing code clarity by ensuring that block statements are wrapped in curly braces\n\t\t\tcurly: [\n\t\t\t\t'error',\n\t\t\t\t'all',\n\t\t\t],\n\t\t\t// disallow use of \"var\", use let and const - see rule description for reasons.\n\t\t\t'no-var': 'error',\n\t\t\t// Prevent bugs by enforce const if variable is not changed.\n\t\t\t'prefer-const': 'error',\n\t\t\t// `@nextcloud/logger` should be used\n\t\t\t'no-console': 'error',\n\t\t\t// We support ES2022 so we should use `hasOwn` instead\n\t\t\t'prefer-object-has-own': 'error',\n\t\t},\n\t},\n\n\t// Testing related overwrites\n\t{\n\t\tname: 'nextcloud/javascript/testing-overwrites',\n\t\tfiles: GLOB_FILES_TESTING,\n\t\trules: {\n\t\t\t// Allow to test console output\n\t\t\t'no-console': 'off',\n\t\t},\n\t},\n]\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { ESLint, Rule } from 'eslint'\n\nimport path from 'node:path'\nimport sortPackageJson from 'sort-package-json'\n\nconst SortPackageJsonRule: Rule.RuleModule = {\n\tmeta: {\n\t\tfixable: 'code',\n\t\tdocs: {\n\t\t\trecommended: true,\n\t\t\tdescription: 'Sort package json in consistent order',\n\t\t},\n\t\tschema: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\tsortOrder: {\n\t\t\t\t\t\ttype: 'array',\n\t\t\t\t\t\tminItems: 0,\n\t\t\t\t\t\titems: {\n\t\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tadditionalProperties: false,\n\t\t\t},\n\t\t],\n\t},\n\n\tcreate(context: Rule.RuleContext): Rule.RuleListener {\n\t\tconst filename = context.getFilename()\n\t\tif (path.basename(filename) !== 'package.json') {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst options = context.options ? context.options[0] : undefined\n\n\t\treturn {\n\t\t\tDocument({ body }) {\n\t\t\t\tconst sourceCode = context.sourceCode.text\n\t\t\t\tconst packageJsonText = sourceCode.slice(...body.range)\n\t\t\t\tconst sortedPackageJsonText = sortPackageJson(packageJsonText, options)\n\n\t\t\t\tif (packageJsonText !== sortedPackageJsonText) {\n\t\t\t\t\tcontext.report({\n\t\t\t\t\t\tnode: body,\n\t\t\t\t\t\tmessage: 'package.json is not sorted correctly',\n\t\t\t\t\t\tfix(fixer: Rule.RuleFixer): Rule.Fix {\n\t\t\t\t\t\t\treturn fixer.replaceText(body, sortedPackageJsonText)\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t},\n}\n\n/**\n * ESLint plugin to sort package.json files in a consistent way.\n */\nconst Plugin: ESLint.Plugin = {\n\tmeta: {\n\t\tname: '@nextcloud/package-json',\n\t\tversion: __PACKAGE_VERSION__,\n\t},\n\trules: {\n\t\t'sort-package-json': SortPackageJsonRule,\n\t},\n}\n\nexport default Plugin\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { ESLint, Linter } from 'eslint'\nimport jsonPlugin from '@eslint/json'\nimport packageJsonPlugin from '../plugins/packageJson.ts'\nimport { GLOB_FILES_JSON, GLOB_FILES_JSONC, GLOB_FILES_MS_JSON } from '../globs.ts'\n\n/**\n * JSON related ESLint rules for Nextcloud\n */\nexport const json: Linter.Config[] = [\n\t{\n\t\tlanguage: 'json/json',\n\t\tplugins: {\n\t\t\tjson: jsonPlugin as ESLint.Plugin,\n\t\t\t'package-json': packageJsonPlugin,\n\t\t},\n\t\trules: {\n\t\t\t...jsonPlugin.configs.recommended.rules,\n\t\t},\n\t\tfiles: GLOB_FILES_JSON,\n\t\tname: 'nextcloud/json',\n\t},\n\n\t// lint package.json files\n\t{\n\t\tfiles: ['**/package.json'],\n\t\tlanguage: 'json/json',\n\t\trules: {\n\t\t\t'package-json/sort-package-json': 'error',\n\t\t},\n\t},\n\n\t// Special handing of JSONC\n\t{\n\t\tfiles: GLOB_FILES_JSONC,\n\t\tlanguage: 'json/jsonc',\n\t\t...jsonPlugin.configs.recommended,\n\t\tname: 'nextcloud/jsonc',\n\t},\n\n\t// Microsoft specific JSONC (e.g. Typescript config)\n\t{\n\t\tfiles: GLOB_FILES_MS_JSON,\n\t\tlanguage: 'json/jsonc',\n\t\tlanguageOptions: {\n\t\t\tallowTrailingCommas: true,\n\t\t},\n\t\t...jsonPlugin.configs.recommended,\n\t\tname: 'nextcloud/ms-json',\n\t},\n]\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Linter } from 'eslint'\n\nimport { GLOB_FILES_TESTING } from '../globs'\nimport globals from 'globals'\n\n/**\n * Config setup for the node environment.\n * Config files should be parsed as Node.JS scripts with Node globals etc.\n */\nexport const node: Linter.Config[] = [\n\t{\n\t\tname: 'nextcloud/node/setup',\n\t\tfiles: [\n\t\t\t'**/*.config.*',\n\t\t\t'**/*.cjs',\n\t\t\t'**/*.cts',\n\t\t\t...GLOB_FILES_TESTING,\n\t\t],\n\t\tlanguageOptions: {\n\t\t\tglobals: {\n\t\t\t\t...globals.es2023,\n\t\t\t\t...globals.node,\n\t\t\t\t...globals.nodeBuiltin,\n\t\t\t},\n\t\t},\n\t},\n]\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Linter } from 'eslint'\n\n/**\n * Restrict a set of configurations to a given glob pattern\n *\n * @param configs The configs to restrict\n * @param files The glob pattern to assign\n */\nexport function restrictConfigFiles(configs: Linter.Config[], files: string[]) {\n\treturn configs.map((config) => ({\n\t\t...config,\n\t\tfiles: [\n\t\t\t...(config.files ?? []),\n\t\t\t...files,\n\t\t],\n\t}))\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Linter } from 'eslint'\nimport typescriptPlugin from 'typescript-eslint'\nimport { GLOB_FILES_TESTING, GLOB_FILES_TYPESCRIPT, GLOB_FILES_VUE } from '../globs'\nimport { restrictConfigFiles } from '../utils'\nimport { ConfigOptions } from '../types'\n\n/**\n * Typescript related ESLint rules for Nextcloud\n *\n * @param options options defining the config preset flavor\n */\nexport function typescript(options: ConfigOptions): Linter.Config[] {\n\treturn [\n\t\t...restrictConfigFiles(\n\t\t\ttypescriptPlugin.configs.recommended as Linter.Config[],\n\t\t\t[\n\t\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t\t...(options.vueIsTypescript ? GLOB_FILES_VUE : []),\n\t\t\t],\n\t\t),\n\n\t\t{\n\t\t\tfiles: [\n\t\t\t\t...GLOB_FILES_TYPESCRIPT,\n\t\t\t\t...(options.vueIsTypescript ? GLOB_FILES_VUE : []),\n\t\t\t],\n\t\t\trules: {\n\t\t\t// Allow expect-error as we can sometimes not prevent it...\n\t\t\t\t'@typescript-eslint/ban-ts-comment': [\n\t\t\t\t\t'error',\n\t\t\t\t\t{\n\t\t\t\t\t\t'ts-expect-error': 'allow-with-description',\n\t\t\t\t\t\tminimumDescriptionLength: 9,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t// No nullish coalescing if left side can not be nullish\n\t\t\t\t'@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error',\n\t\t\t\t// Do not use types, variables etc before they are defined\n\t\t\t\t'no-use-before-define': 'off',\n\t\t\t\t'@typescript-eslint/no-use-before-define': 'error',\n\t\t\t\t// Do not shadow outer variables / functions - this can lead to wrong assumptions\n\t\t\t\t'no-shadow': 'off',\n\t\t\t\t'@typescript-eslint/no-shadow': 'error',\n\t\t\t},\n\t\t\tname: 'nextcloud/typescript/rules',\n\t\t},\n\n\t\t{\n\t\t\tfiles: GLOB_FILES_TESTING,\n\t\t\trules: {\n\t\t\t// Allow \"any\" in tests\n\t\t\t\t'@typescript-eslint/no-explicit-any': 'off',\n\t\t\t},\n\t\t\tname: 'nextcloud/typescript/test-rules',\n\t\t},\n\t]\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Linter } from 'eslint'\n\nimport vuePlugin from 'eslint-plugin-vue'\nimport { codeStyle } from './codeStyle'\nimport { GLOB_FILES_VUE } from '../globs'\nimport { ConfigOptions } from '../types'\n\nconst stylisticRules = codeStyle({ vueIsTypescript: false })\n\t.reduce((rules, config) => ({\n\t\t...rules,\n\t\t...(config.rules ?? {}),\n\t}), {})\n\nconst vueStylisticRules = Object.keys(vuePlugin.rules)\n\t.filter((rule) => `@stylistic/${rule}` in stylisticRules)\n\t.map((rule) => [\n\t\t`vue/${rule}`,\n\t\tstylisticRules[`@stylistic/${rule}`],\n\t])\n\n/**\n * General vue related rules for both versions\n *\n * @param options options defining the config preset flavor\n */\nexport function vue(options: ConfigOptions): Linter.Config[] {\n\treturn [\n\t\t...(options.vueIsTypescript\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tlanguageOptions: {\n\t\t\t\t\t\t\tparserOptions: {\n\t\t\t\t\t\t\t\tparser: '@typescript-eslint/parser',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t: []),\n\n\t\t{\n\t\t\tfiles: GLOB_FILES_VUE,\n\t\t\trules: {\n\t\t\t// PascalCase components names for vuejs\n\t\t\t\t'vue/component-name-in-template-casing': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'PascalCase',\n\t\t\t\t],\n\t\t\t\t// space before self-closing elements\n\t\t\t\t'vue/html-closing-bracket-spacing': 'error',\n\t\t\t\t// no ending html tag on a new line\n\t\t\t\t'vue/html-closing-bracket-newline': [\n\t\t\t\t\t'error',\n\t\t\t\t\t{\n\t\t\t\t\t\tmultiline: 'never',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t// Enforce documentation of properties\n\t\t\t\t'vue/require-prop-comment': [\n\t\t\t\t\t'error',\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'JSDoc',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t// When a prop allows Boolean and some other type, then Boolean should come first to allow short-hand properties\n\t\t\t\t'vue/prefer-prop-type-boolean-first': 'error',\n\t\t\t\t// Prevent useless string interpolation where not needed\n\t\t\t\t'vue/no-useless-mustaches': 'error',\n\t\t\t\t// If there is a default then it is not required - this is either way a bug\n\t\t\t\t'vue/no-required-prop-with-default': 'error',\n\t\t\t\t// Omit empty blocks\n\t\t\t\t'vue/no-empty-component-block': 'error',\n\t\t\t\t// Boolean properties should behave like HTML properties\n\t\t\t\t'vue/no-boolean-default': [\n\t\t\t\t\t'warn',\n\t\t\t\t\t'default-false',\n\t\t\t\t],\n\t\t\t\t// Allow 3 attributes on the same line if singe line\n\t\t\t\t'vue/max-attributes-per-line': [\n\t\t\t\t\t'error',\n\t\t\t\t\t{\n\t\t\t\t\t\tsingleline: {\n\t\t\t\t\t\t\tmax: 3,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t// Component names should match their export names - readability and maintainability (\"where does this component come from?\")\n\t\t\t\t'vue/match-component-import-name': 'error',\n\t\t\t\t'vue/match-component-file-name': 'error',\n\t\t\t\t// Warn on undefined components - we need this on warning level as long as people use mixins (then we can move to error)\n\t\t\t\t'vue/no-undef-components': [\n\t\t\t\t\t'warn',\n\t\t\t\t\t{\n\t\t\t\t\t// Ignore the router view as this is most often globally registered\n\t\t\t\t\t\tignorePatterns: ['router-?view'],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\t// Warn on unused refs\n\t\t\t\t'vue/no-unused-refs': 'warn',\n\t\t\t\t// Warn on unused props\n\t\t\t\t'vue/no-unused-properties': 'warn',\n\t\t\t},\n\t\t\tname: 'nextcloud/vue/rules',\n\t\t},\n\n\t\t{\n\t\t\tfiles: GLOB_FILES_VUE,\n\t\t\trules: {\n\t\t\t// same as the stylistic rules but for the <template> in Vue files\n\t\t\t\t...Object.fromEntries(vueStylisticRules),\n\t\t\t\t// Also enforce tabs for template\n\t\t\t\t'vue/html-indent': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'tab',\n\t\t\t\t],\n\t\t\t\t// Consistent style of props\n\t\t\t\t'vue/new-line-between-multi-line-property': 'error',\n\t\t\t},\n\t\t\tname: 'nextcloud/vue/stylistic-rules',\n\t\t},\n\t]\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type {\n\tLinter,\n} from 'eslint'\nimport vuePlugin from 'eslint-plugin-vue'\nimport {\n\tvue,\n} from './vue.ts'\nimport { restrictConfigFiles } from '../utils.ts'\nimport { GLOB_FILES_VUE } from '../globs.ts'\nimport { ConfigOptions } from '../types'\n\n/**\n * Vue2 related ESLint rules for Nextcloud\n *\n * @param option options defining the config preset flavor\n */\nexport function vue2(option: ConfigOptions): Linter.Config[] {\n\treturn [\n\t\t...restrictConfigFiles(\n\t\t\tvuePlugin.configs['flat/vue2-recommended'],\n\t\t\tGLOB_FILES_VUE,\n\t\t),\n\n\t\t...vue(option),\n\n\t\t{\n\t\t\trules: {\n\t\t\t// custom event naming convention\n\t\t\t\t'vue/custom-event-name-casing': [\n\t\t\t\t\t'error',\n\t\t\t\t\t'kebab-case',\n\t\t\t\t\t{\n\t\t\t\t\t\t// allows custom xxxx:xxx events formats\n\t\t\t\t\t\tignores: ['/^[a-z]+(?:-[a-z]+)*:[a-z]+(?:-[a-z]+)*$/u'],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\tfiles: GLOB_FILES_VUE,\n\t\t\tname: 'nextcloud/vue2/rules',\n\t\t},\n\t]\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Linter } from 'eslint'\nimport vuePlugin from 'eslint-plugin-vue'\nimport { vue } from './vue.ts'\nimport { GLOB_FILES_VUE } from '../globs.ts'\nimport { restrictConfigFiles } from '../utils.ts'\nimport { ConfigOptions } from '../types'\n\n/**\n * Vue3 related ESLint rules for Nextcloud\n *\n * @param options options defining the config preset flavor\n */\nexport function vue3(options: ConfigOptions): Linter.Config[] {\n\treturn [\n\t\t...restrictConfigFiles(\n\t\t\tvuePlugin.configs['flat/recommended'],\n\t\t\tGLOB_FILES_VUE,\n\t\t),\n\n\t\t...vue(options),\n\n\t\t// Vue3 specific overrides\n\t\t{\n\t\t\tfiles: GLOB_FILES_VUE,\n\t\t\trules: {\n\t\t\t// Deprecated thus we should not use it\n\t\t\t\t'vue/no-deprecated-delete-set': 'error',\n\t\t\t},\n\t\t\tname: 'nextcloud/vue3/rules',\n\t\t},\n\t]\n}\n","/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { codeStyle } from './configs/codeStyle'\nimport { documentation } from './configs/documentation.ts'\nimport { filesystem } from './configs/filesystem.ts'\nimport { javascript } from './configs/javascript'\nimport { json } from './configs/json.ts'\nimport { node } from './configs/node.ts'\nimport { typescript } from './configs/typescript.ts'\nimport { vue2 } from './configs/vue2'\nimport { vue3 } from './configs/vue3.ts'\n\n/**\n * Nextcloud shared configuration for projects using Vue 2 with Javascript <script> blocks\n */\nexport const recommendedVue2Javascript = [\n\t...filesystem,\n\t...javascript,\n\t...json,\n\t...node,\n\t...typescript({ vueIsTypescript: false }),\n\t...vue2({ vueIsTypescript: false }),\n\t...documentation({ vueIsTypescript: false }),\n\t...codeStyle({ vueIsTypescript: false }),\n]\n\n/**\n * Nextcloud shared configuration for projects using Vue 2 with Typescript <script> blocks\n */\nexport const recommendedVue2 = [\n\t...filesystem,\n\t...javascript,\n\t...json,\n\t...node,\n\t...typescript({ vueIsTypescript: true }),\n\t...vue2({ vueIsTypescript: true }),\n\t...documentation({ vueIsTypescript: true }),\n\t...codeStyle({ vueIsTypescript: true }),\n]\n\n/**\n * Nextcloud shared configuration for projects using Vue 3 with Javascript <script> blocks\n */\nexport const recommendedJavascript = [\n\t...filesystem,\n\t...javascript,\n\t...json,\n\t...node,\n\t...typescript({ vueIsTypescript: false }),\n\t...vue3({ vueIsTypescript: false }),\n\t...documentation({ vueIsTypescript: false }),\n\t...codeStyle({ vueIsTypescript: false }),\n]\n\n/**\n * Nextcloud shared configuration for projects using Vue 3 with Typescript <script> blocks\n */\nexport const recommended = [\n\t...filesystem,\n\t...javascript,\n\t...json,\n\t...node,\n\t...typescript({ vueIsTypescript: true }),\n\t...vue3({ vueIsTypescript: true }),\n\t...documentation({ vueIsTypescript: true }),\n\t...codeStyle({ vueIsTypescript: true }),\n]\n\nexport { default as packageJsonPlugin } from './plugins/packageJson.ts'\nexport { default as nextcloudPlugin } from './plugins/nextcloud/index.ts'\n"],"names":["name","version","require$$1","require$$2","global","oc","oca","ocNested","rule","node","noDeprecations","noRemovedApis","packageJsonPlugin","rules"],"mappings":"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","x_google_ignoreList":[4,5,6]}