diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 46f74f11125..00000000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,197 +0,0 @@ -// @ts-check -const { defineConfig } = require('eslint-define-config'); -const { readGitignoreFiles } = require('eslint-gitignore'); - -/// -/// -/// -/// -/// - -module.exports = defineConfig({ - ignorePatterns: [ - ...readGitignoreFiles(), - '.eslintrc.cjs', // Skip self linting - ], - root: true, - env: { - browser: true, - node: true, - }, - reportUnusedDisableDirectives: true, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/strict-type-checked', - 'plugin:prettier/recommended', - 'plugin:deprecation/recommended', - 'plugin:jsdoc/recommended-typescript-error', - 'plugin:unicorn/recommended', - ], - parserOptions: { - project: ['./tsconfig.json'], - warnOnUnsupportedTypeScriptVersion: false, - }, - rules: { - eqeqeq: ['error', 'always', { null: 'ignore' }], - 'logical-assignment-operators': 'error', - 'no-else-return': 'error', - 'no-restricted-globals': ['error', 'Intl'], - 'prefer-exponentiation-operator': 'error', - 'prefer-template': 'error', - - 'unicorn/import-style': 'off', // subjective & doesn't do anything for us - 'unicorn/no-array-callback-reference': 'off', // reduces readability - 'unicorn/no-nested-ternary': 'off', // incompatible with prettier - 'unicorn/no-null': 'off', // incompatible with TypeScript - 'unicorn/no-zero-fractions': 'off', // deactivated to raise awareness of floating operations - 'unicorn/number-literal-case': 'off', // incompatible with prettier - 'unicorn/prefer-ternary': 'off', // ternaries aren't always better - - // TODO @Shinigami92 2023-09-23: The following rules currently conflict with our code. - // Each rule should be checked whether it should be enabled/configured and the problems fixed, or stay disabled permanently. - 'unicorn/better-regex': 'off', - 'unicorn/consistent-function-scoping': 'off', - 'unicorn/no-object-as-default-parameter': 'off', - 'unicorn/numeric-separators-style': 'off', - 'unicorn/prefer-export-from': 'off', - 'unicorn/prefer-string-slice': 'off', - 'unicorn/prevent-abbreviations': 'off', - - '@typescript-eslint/array-type': [ - 'error', - { default: 'array-simple', readonly: 'generic' }, - ], - '@typescript-eslint/consistent-type-exports': 'error', - '@typescript-eslint/consistent-type-imports': 'error', - '@typescript-eslint/explicit-module-boundary-types': 'error', - '@typescript-eslint/naming-convention': [ - 'error', - { - format: ['PascalCase'], - selector: ['class', 'interface', 'typeAlias', 'enumMember'], - leadingUnderscore: 'forbid', - trailingUnderscore: 'forbid', - }, - { - format: ['PascalCase'], - selector: ['typeParameter'], - prefix: ['T'], - leadingUnderscore: 'forbid', - trailingUnderscore: 'forbid', - }, - ], - '@typescript-eslint/no-confusing-void-expression': [ - 'error', - { - ignoreArrowShorthand: true, - }, - ], - '@typescript-eslint/no-inferrable-types': [ - 'error', - { ignoreParameters: true }, - ], - '@typescript-eslint/no-unnecessary-condition': 'off', // requires `strictNullChecks` to be enabled - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/padding-line-between-statements': [ - 'error', - { blankLine: 'always', prev: 'block-like', next: '*' }, - ], - '@typescript-eslint/prefer-regexp-exec': 'error', - '@typescript-eslint/restrict-plus-operands': [ - 'error', - { - allowAny: false, - allowBoolean: false, - allowNullish: false, - allowNumberAndString: true, - allowRegExp: false, - }, - ], - '@typescript-eslint/restrict-template-expressions': [ - 'error', - { allowNumber: true, allowBoolean: true }, - ], - '@typescript-eslint/switch-exhaustiveness-check': [ - 'error', - { requireDefaultForNonUnion: true }, - ], - '@typescript-eslint/unbound-method': 'off', - '@typescript-eslint/unified-signatures': 'off', // incompatible with our api docs generation - - 'jsdoc/require-jsdoc': 'off', // Enabled only for src/**/*.ts - 'jsdoc/require-returns': 'off', - 'jsdoc/sort-tags': [ - 'error', - { - tagSequence: [ - { tags: ['template'] }, - { tags: ['internal'] }, - { tags: ['param'] }, - { tags: ['returns'] }, - { tags: ['throws'] }, - { tags: ['see'] }, - { tags: ['example'] }, - { tags: ['since'] }, - { tags: ['default'] }, - { tags: ['deprecated'] }, - ], - }, - ], - 'jsdoc/tag-lines': 'off', - }, - settings: { - jsdoc: { - mode: 'typescript', - }, - }, - overrides: [ - { - files: ['src/**/*.ts'], - rules: { - 'jsdoc/require-jsdoc': 'error', - }, - }, - { - files: ['src/locale/**/*.ts'], - rules: { - 'unicorn/filename-case': 'off', // our locale files have a custom naming scheme - }, - }, - { - files: ['src/definitions/**/*.ts', 'src/locales/**/*.ts'], - rules: { - 'unicorn/filename-case': [ - 'error', - { - case: 'snakeCase', - }, - ], - 'unicorn/text-encoding-identifier-case': 'off', - }, - }, - { - files: ['test/**/*.spec.ts'], - extends: ['plugin:vitest/recommended'], - rules: { - 'deprecation/deprecation': 'off', - - '@typescript-eslint/restrict-template-expressions': [ - 'error', - { - allowNumber: true, - allowBoolean: true, - allowAny: true, - }, - ], - - 'vitest/expect-expect': 'off', - 'vitest/no-alias-methods': 'error', - 'vitest/prefer-each': 'error', - 'vitest/prefer-to-have-length': 'error', - 'vitest/valid-expect': ['error', { maxArgs: 2 }], - }, - }, - ], -}); diff --git a/.gitignore b/.gitignore index d50069baccf..af973543236 100644 --- a/.gitignore +++ b/.gitignore @@ -66,20 +66,21 @@ node_modules/ .github/workflows/*.js # IDE -/.idea -/nbproject +.idea +nbproject # Meteor build and version .build* versions.json # Dist -/dist -/docs/.vitepress/cache -/docs/.vitepress/dist -/docs/api/typedoc.json -/docs/public/api-diff-index.json -/lib +dist + +# Docs +docs/.vitepress/cache +docs/.vitepress/dist +docs/api/typedoc.json +docs/public/api-diff-index.json # Faker TAGS diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index b226f441971..845c46d0b43 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -91,9 +91,11 @@ function getSideBarWithExpandedEntry(entryToExpand: string): SidebarItem[] { ], }, ]; + for (const entry of links) { entry.collapsed = entry.text !== entryToExpand; } + return links; } diff --git a/docs/.vitepress/versions.ts b/docs/.vitepress/versions.ts index 9d693e3d730..db92130f99b 100644 --- a/docs/.vitepress/versions.ts +++ b/docs/.vitepress/versions.ts @@ -16,6 +16,7 @@ function readOtherLatestReleaseTagNames(): string[] { // Only consider tags for our deployed website versions .filter((tag) => semver.major(tag) >= 6) // Find the latest tag for each major version + // eslint-disable-next-line unicorn/no-array-reduce .reduce>((latestTagByMajor, tag) => { const majorVersion = semver.major(tag); @@ -42,12 +43,15 @@ export const versionBannerInfix: string | null = (() => { if (deployContext === 'production') { return null; } + if (isReleaseBranch) { return '"an old version"'; } + if (branchName === 'next') { return '"the next (unreleased) version"'; } + return '"a development version"'; })(); diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000000..3dae584e0a2 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,273 @@ +// @ts-check +import eslint from '@eslint/js'; +import { readGitignoreFiles } from 'eslint-gitignore'; +import eslintPluginDeprecation from 'eslint-plugin-deprecation'; +import eslintPluginJsdoc from 'eslint-plugin-jsdoc'; +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; +import eslintPluginUnicorn from 'eslint-plugin-unicorn'; +import vitest from 'eslint-plugin-vitest'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + //#region global + { + ignores: [ + ...readGitignoreFiles(), + // Skip self linting + 'eslint.config.js', + // Skip some files that don't need linting right now + '.github/workflows/commentCodeGeneration.ts', + '.prettierrc.js', + 'docs/.vitepress/components/shims.d.ts', + 'docs/.vitepress/shared/utils/slugify.ts', + 'docs/.vitepress/theme/index.ts', + ], + }, + { + linterOptions: { + reportUnusedDisableDirectives: 'error', + }, + }, + //#endregion + + //#region eslint (js) + eslint.configs.recommended, + { + rules: { + eqeqeq: ['error', 'always', { null: 'ignore' }], + 'logical-assignment-operators': 'error', + 'no-else-return': 'error', + 'no-restricted-globals': ['error', 'Intl'], + 'prefer-exponentiation-operator': 'error', + 'prefer-template': 'error', + }, + }, + //#endregion + + //#region typescript-eslint + ...tseslint.configs.strictTypeChecked, + { + plugins: { + '@typescript-eslint': tseslint.plugin, + }, + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: true, + warnOnUnsupportedTypeScriptVersion: false, + }, + }, + rules: { + '@typescript-eslint/array-type': [ + 'error', + { default: 'array-simple', readonly: 'generic' }, + ], + '@typescript-eslint/consistent-type-exports': 'error', + '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/explicit-module-boundary-types': 'error', + '@typescript-eslint/naming-convention': [ + 'error', + { + format: ['PascalCase'], + selector: ['class', 'interface', 'typeAlias', 'enumMember'], + leadingUnderscore: 'forbid', + trailingUnderscore: 'forbid', + }, + { + format: ['PascalCase'], + selector: ['typeParameter'], + prefix: ['T'], + leadingUnderscore: 'forbid', + trailingUnderscore: 'forbid', + }, + ], + '@typescript-eslint/no-confusing-void-expression': [ + 'error', + { + ignoreArrowShorthand: true, + }, + ], + '@typescript-eslint/no-inferrable-types': [ + 'error', + { ignoreParameters: true }, + ], + '@typescript-eslint/no-unnecessary-condition': 'off', // requires `strictNullChecks` to be enabled + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/padding-line-between-statements': [ + 'error', + { blankLine: 'always', prev: 'block-like', next: '*' }, + ], + '@typescript-eslint/prefer-regexp-exec': 'error', + '@typescript-eslint/restrict-plus-operands': [ + 'error', + { + allowAny: false, + allowBoolean: false, + allowNullish: false, + allowNumberAndString: true, + allowRegExp: false, + }, + ], + '@typescript-eslint/restrict-template-expressions': [ + 'error', + { allowNumber: true, allowBoolean: true }, + ], + '@typescript-eslint/switch-exhaustiveness-check': [ + 'error', + { requireDefaultForNonUnion: true }, + ], + '@typescript-eslint/unbound-method': 'off', + '@typescript-eslint/unified-signatures': 'off', // incompatible with our api docs generation + }, + }, + //#endregion + + //#region deprecation + { + plugins: { + deprecation: eslintPluginDeprecation, + }, + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: true, + warnOnUnsupportedTypeScriptVersion: false, + }, + }, + rules: { + // TODO @Shinigami92 2024-04-08: Add eslint-plugin-deprecation later + // https://github.com/gund/eslint-plugin-deprecation/issues/78 + // 'deprecation/deprecation': 'error', + }, + }, + //#endregion + + //#region unicorn + // @ts-expect-error: Ignore for now + eslintPluginUnicorn.configs['flat/recommended'], + { + rules: { + 'unicorn/import-style': 'off', // subjective & doesn't do anything for us + 'unicorn/no-array-callback-reference': 'off', // reduces readability + 'unicorn/no-nested-ternary': 'off', // incompatible with prettier + 'unicorn/no-null': 'off', // incompatible with TypeScript + 'unicorn/no-zero-fractions': 'off', // deactivated to raise awareness of floating operations + 'unicorn/number-literal-case': 'off', // incompatible with prettier + 'unicorn/prefer-ternary': 'off', // ternaries aren't always better + + // TODO @Shinigami92 2023-09-23: The following rules currently conflict with our code. + // Each rule should be checked whether it should be enabled/configured and the problems fixed, or stay disabled permanently. + 'unicorn/better-regex': 'off', + 'unicorn/consistent-function-scoping': 'off', + 'unicorn/no-object-as-default-parameter': 'off', + 'unicorn/numeric-separators-style': 'off', + 'unicorn/prefer-export-from': 'off', + 'unicorn/prefer-string-raw': 'off', + 'unicorn/prefer-string-slice': 'off', + 'unicorn/prevent-abbreviations': 'off', + }, + }, + //#endregion + + //#region jsdoc + eslintPluginJsdoc.configs['flat/recommended-typescript-error'], + { + rules: { + 'jsdoc/require-jsdoc': 'off', // Enabled only for src/**/*.ts + 'jsdoc/require-returns': 'off', + 'jsdoc/sort-tags': [ + 'error', + { + tagSequence: [ + { tags: ['template'] }, + { tags: ['internal'] }, + { tags: ['param'] }, + { tags: ['returns'] }, + { tags: ['throws'] }, + { tags: ['see'] }, + { tags: ['example'] }, + { tags: ['since'] }, + { tags: ['default'] }, + { tags: ['deprecated'] }, + ], + }, + ], + 'jsdoc/tag-lines': 'off', + }, + settings: { + jsdoc: { + mode: 'typescript', + }, + }, + }, + //#endregion + + //#region vitest + // TODO @Shinigami92 2024-04-08: Add vitest later + // https://github.com/veritem/eslint-plugin-vitest/issues/413 + //#endregion + + //#region prettier + eslintPluginPrettierRecommended, + //#endregion, + + //#region overrides + { + files: ['src/**/*.ts'], + rules: { + 'jsdoc/require-jsdoc': 'error', + }, + }, + { + files: ['src/locale/**/*.ts'], + rules: { + 'unicorn/filename-case': 'off', // our locale files have a custom naming scheme + }, + }, + { + files: ['src/definitions/**/*.ts', 'src/locales/**/*.ts'], + rules: { + 'unicorn/filename-case': [ + 'error', + { + case: 'snakeCase', + }, + ], + 'unicorn/text-encoding-identifier-case': 'off', + }, + }, + { + files: ['test/**/*.spec.ts', 'test/**/*.spec.d.ts'], + plugins: { + vitest, + }, + rules: { + 'deprecation/deprecation': 'off', + + '@typescript-eslint/restrict-template-expressions': [ + 'error', + { + allowNumber: true, + allowBoolean: true, + allowAny: true, + }, + ], + + ...vitest.configs.recommended.rules, + + 'vitest/expect-expect': 'off', + 'vitest/no-alias-methods': 'error', + 'vitest/prefer-each': 'error', + 'vitest/prefer-to-have-length': 'error', + 'vitest/valid-expect': ['error', { maxArgs: 2 }], + }, + settings: { + vitest: { + typecheck: true, + }, + }, + } + //#endregion +); diff --git a/package.json b/package.json index 3571625fd92..f2e8ef2056f 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "docs:serve": "vitepress serve docs --port 5173", "docs:diff": "tsx ./scripts/diff.ts", "format": "prettier --cache --write .", - "lint": "eslint --cache --cache-strategy content --report-unused-disable-directives .", + "lint": "eslint --cache --cache-strategy content .", "ts-check": "tsc", "test": "vitest", "test:update-snapshots": "vitest run -u", @@ -97,15 +97,15 @@ "@eslint-types/prettier": "5.1.3", "@eslint-types/typescript-eslint": "7.5.0", "@eslint-types/unicorn": "52.0.0", + "@eslint/js": "9.4.0", "@types/node": "20.12.12", "@types/sanitize-html": "2.11.0", "@types/semver": "7.5.8", "@types/validator": "13.11.10", - "@typescript-eslint/eslint-plugin": "7.8.0", - "@typescript-eslint/parser": "7.8.0", "@vitest/coverage-v8": "1.6.0", "@vitest/ui": "1.6.0", "@vueuse/core": "10.9.0", + "commit-and-tag-version": "12.4.1", "cypress": "13.10.0", "eslint": "9.4.0", "eslint-config-prettier": "9.1.0", @@ -122,11 +122,11 @@ "rimraf": "5.0.7", "sanitize-html": "2.13.0", "semver": "7.6.2", - "commit-and-tag-version": "12.4.1", "ts-morph": "22.0.0", "tsup": "8.0.2", "tsx": "4.11.0", "typescript": "5.4.5", + "typescript-eslint": "7.11.0", "validator": "13.12.0", "vite": "5.2.11", "vitepress": "1.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e43f0425cb1..bceb0f665fd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: '@eslint-types/unicorn': specifier: 52.0.0 version: 52.0.0 + '@eslint/js': + specifier: 9.4.0 + version: 9.4.0 '@types/node': specifier: 20.12.12 version: 20.12.12 @@ -41,12 +44,6 @@ importers: '@types/validator': specifier: 13.11.10 version: 13.11.10 - '@typescript-eslint/eslint-plugin': - specifier: 7.8.0 - version: 7.8.0(@typescript-eslint/parser@7.8.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: 7.8.0 - version: 7.8.0(eslint@9.4.0)(typescript@5.4.5) '@vitest/coverage-v8': specifier: 1.6.0 version: 1.6.0(vitest@1.6.0(@types/node@20.12.12)(@vitest/ui@1.6.0)(jsdom@23.2.0)) @@ -88,7 +85,7 @@ importers: version: 53.0.0(eslint@9.4.0) eslint-plugin-vitest: specifier: 0.5.4 - version: 0.5.4(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(@vitest/ui@1.6.0)(jsdom@23.2.0)) + version: 0.5.4(eslint@9.4.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(@vitest/ui@1.6.0)(jsdom@23.2.0)) npm-run-all2: specifier: 6.2.0 version: 6.2.0 @@ -119,6 +116,9 @@ importers: typescript: specifier: 5.4.5 version: 5.4.5 + typescript-eslint: + specifier: 7.11.0 + version: 7.11.0(eslint@9.4.0)(typescript@5.4.5) validator: specifier: 13.12.0 version: 13.12.0 @@ -859,8 +859,8 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@7.8.0': - resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==} + '@typescript-eslint/eslint-plugin@7.11.0': + resolution: {integrity: sha512-P+qEahbgeHW4JQ/87FuItjBj8O3MYv5gELDzr8QaQ7fsll1gSMTYb6j87MYyxwf3DtD7uGFB9ShwgmCJB5KmaQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -870,8 +870,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.8.0': - resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} + '@typescript-eslint/parser@7.11.0': + resolution: {integrity: sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -884,12 +884,12 @@ packages: resolution: {integrity: sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@7.8.0': - resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} + '@typescript-eslint/scope-manager@7.11.0': + resolution: {integrity: sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/type-utils@7.8.0': - resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==} + '@typescript-eslint/type-utils@7.11.0': + resolution: {integrity: sha512-WmppUEgYy+y1NTseNMJ6mCFxt03/7jTOy08bcg7bxJJdsM4nuhnchyBbE8vryveaJUf62noH7LodPSo5Z0WUCg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -902,8 +902,8 @@ packages: resolution: {integrity: sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@7.8.0': - resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} + '@typescript-eslint/types@7.11.0': + resolution: {integrity: sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==} engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/typescript-estree@7.10.0': @@ -915,8 +915,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.8.0': - resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} + '@typescript-eslint/typescript-estree@7.11.0': + resolution: {integrity: sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -930,8 +930,8 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@7.8.0': - resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} + '@typescript-eslint/utils@7.11.0': + resolution: {integrity: sha512-xlAWwPleNRHwF37AhrZurOxA1wyXowW4PqVXZVUNCLjB48CqdPJoJWkrpH2nij9Q3Lb7rtWindtoXwxjxlKKCA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -940,8 +940,8 @@ packages: resolution: {integrity: sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@7.8.0': - resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} + '@typescript-eslint/visitor-keys@7.11.0': + resolution: {integrity: sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==} engines: {node: ^18.18.0 || >=20.0.0} '@vitejs/plugin-vue@5.0.4': @@ -3460,6 +3460,16 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + typescript-eslint@7.11.0: + resolution: {integrity: sha512-ZKe3yHF/IS/kCUE4CGE3UgtK+Q7yRk1e9kwEI0rqm9XxMTd9P1eHe0LVVtrZ3oFuIQ2unJ9Xn0vTsLApzJ3aPw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -4385,32 +4395,30 @@ snapshots: '@types/node': 20.12.12 optional: true - '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.8.0(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.8.0 - '@typescript-eslint/type-utils': 7.8.0(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.8.0(eslint@9.4.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.8.0 - debug: 4.3.4(supports-color@8.1.1) + '@typescript-eslint/parser': 7.11.0(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.11.0 + '@typescript-eslint/type-utils': 7.11.0(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.11.0(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.11.0 eslint: 9.4.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.8.0(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/parser@7.11.0(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.8.0 - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.8.0 + '@typescript-eslint/scope-manager': 7.11.0 + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.11.0 debug: 4.3.4(supports-color@8.1.1) eslint: 9.4.0 optionalDependencies: @@ -4423,15 +4431,15 @@ snapshots: '@typescript-eslint/types': 7.10.0 '@typescript-eslint/visitor-keys': 7.10.0 - '@typescript-eslint/scope-manager@7.8.0': + '@typescript-eslint/scope-manager@7.11.0': dependencies: - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/visitor-keys': 7.8.0 + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/visitor-keys': 7.11.0 - '@typescript-eslint/type-utils@7.8.0(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@7.11.0(eslint@9.4.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.8.0(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.11.0(eslint@9.4.0)(typescript@5.4.5) debug: 4.3.4(supports-color@8.1.1) eslint: 9.4.0 ts-api-utils: 1.3.0(typescript@5.4.5) @@ -4442,7 +4450,7 @@ snapshots: '@typescript-eslint/types@7.10.0': {} - '@typescript-eslint/types@7.8.0': {} + '@typescript-eslint/types@7.11.0': {} '@typescript-eslint/typescript-estree@7.10.0(typescript@5.4.5)': dependencies: @@ -4459,10 +4467,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.11.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/visitor-keys': 7.8.0 + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/visitor-keys': 7.11.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -4485,16 +4493,13 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@7.8.0(eslint@9.4.0)(typescript@5.4.5)': + '@typescript-eslint/utils@7.11.0(eslint@9.4.0)(typescript@5.4.5)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.8.0 - '@typescript-eslint/types': 7.8.0 - '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.11.0 + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) eslint: 9.4.0 - semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript @@ -4504,9 +4509,9 @@ snapshots: '@typescript-eslint/types': 7.10.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.8.0': + '@typescript-eslint/visitor-keys@7.11.0': dependencies: - '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/types': 7.11.0 eslint-visitor-keys: 3.4.3 '@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@20.12.12))(vue@3.4.27(typescript@5.4.5))': @@ -5586,12 +5591,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(@vitest/ui@1.6.0)(jsdom@23.2.0)): + eslint-plugin-vitest@0.5.4(eslint@9.4.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(@vitest/ui@1.6.0)(jsdom@23.2.0)): dependencies: '@typescript-eslint/utils': 7.10.0(eslint@9.4.0)(typescript@5.4.5) eslint: 9.4.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) vitest: 1.6.0(@types/node@20.12.12)(@vitest/ui@1.6.0)(jsdom@23.2.0) transitivePeerDependencies: - supports-color @@ -7316,6 +7320,17 @@ snapshots: typedarray@0.0.6: {} + typescript-eslint@7.11.0(eslint@9.4.0)(typescript@5.4.5): + dependencies: + '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.11.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.11.0(eslint@9.4.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.11.0(eslint@9.4.0)(typescript@5.4.5) + eslint: 9.4.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + typescript@5.4.5: {} ufo@1.5.3: {} diff --git a/src/locales/de/location/street_name.ts b/src/locales/de/location/street_name.ts index 6a8dd8503d0..a477dc7e5a0 100644 --- a/src/locales/de/location/street_name.ts +++ b/src/locales/de/location/street_name.ts @@ -954,7 +954,7 @@ export default [ 'Unterölbach', 'Unterstr.', 'Uppersberg', - "Van\\'t-Hoff-Str.", + "Van't-Hoff-Str.", 'Veit-Stoß-Str.', 'Vereinsstr.', 'Viktor-Meyer-Str.',