diff --git a/package.json b/package.json index 9d5ad3e5..63ff0678 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "testTsc": "tsc --noEmit" }, "dependencies": { + "@intrnl/xxhash64": "^0.1.2", "@sapphi-red/web-noise-suppressor": "0.3.5", "@vap/core": "0.0.12", "@vap/shiki": "0.10.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eaa6b537..eeec0536 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,13 +9,16 @@ patchedDependencies: hash: japuwsqfkulviwgkm4kd2oi3ky path: patches/eslint-plugin-path-alias@2.1.0.patch eslint@9.8.0: - hash: xm46kqcmdgzlmm4aifkfpxaho4 + hash: pxhhii6sqtzo2kyx3geekthd3a path: patches/eslint@9.8.0.patch importers: .: dependencies: + '@intrnl/xxhash64': + specifier: ^0.1.2 + version: 0.1.2 '@sapphi-red/web-noise-suppressor': specifier: 0.3.5 version: 0.3.5 @@ -43,7 +46,7 @@ importers: devDependencies: '@stylistic/eslint-plugin': specifier: ^2.6.1 - version: 2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) + version: 2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) '@types/chrome': specifier: ^0.0.269 version: 0.0.269 @@ -76,22 +79,22 @@ importers: version: 0.15.18 eslint: specifier: ^9.8.0 - version: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + version: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))) + version: 1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))) eslint-plugin-path-alias: specifier: 2.1.0 - version: 2.1.0(patch_hash=japuwsqfkulviwgkm4kd2oi3ky)(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + version: 2.1.0(patch_hash=japuwsqfkulviwgkm4kd2oi3ky)(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) eslint-plugin-simple-header: specifier: ^1.1.1 version: 1.1.1 eslint-plugin-simple-import-sort: specifier: ^12.1.1 - version: 12.1.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + version: 12.1.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) eslint-plugin-unused-imports: specifier: ^4.0.1 - version: 4.0.1(@typescript-eslint/eslint-plugin@8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + version: 4.0.1(@typescript-eslint/eslint-plugin@8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) highlight.js: specifier: 10.7.3 version: 10.7.3 @@ -130,7 +133,7 @@ importers: version: 5.5.4 typescript-eslint: specifier: ^8.0.0 - version: 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) + version: 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) typescript-transform-paths: specifier: ^3.4.7 version: 3.4.7(typescript@5.5.4) @@ -537,6 +540,9 @@ packages: resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} engines: {node: '>=18.18'} + '@intrnl/xxhash64@0.1.2': + resolution: {integrity: sha512-1+lx7j99fdph+uy3EnjQyr39KQZ7LP56+aWOr6finJWpgYpvb7XrhFUqDwnEk/wpPC98nCjAT6RulpW3crWjlg==} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -2902,9 +2908,9 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))': + '@eslint-community/eslint-utils@4.4.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))': dependencies: - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) eslint-visitor-keys: 3.4.2 '@eslint-community/regexpp@4.11.0': {} @@ -2939,6 +2945,8 @@ snapshots: '@humanwhocodes/retry@0.3.0': {} + '@intrnl/xxhash64@0.1.2': {} + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -2988,49 +2996,49 @@ snapshots: '@sapphi-red/web-noise-suppressor@0.3.5': {} - '@stylistic/eslint-plugin-js@2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))': + '@stylistic/eslint-plugin-js@2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))': dependencies: '@types/eslint': 9.6.0 acorn: 8.12.1 - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) eslint-visitor-keys: 4.0.0 espree: 10.1.0 - '@stylistic/eslint-plugin-jsx@2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))': + '@stylistic/eslint-plugin-jsx@2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))': dependencies: - '@stylistic/eslint-plugin-js': 2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + '@stylistic/eslint-plugin-js': 2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) '@types/eslint': 9.6.0 - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) estraverse: 5.3.0 picomatch: 4.0.2 - '@stylistic/eslint-plugin-plus@2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4)': + '@stylistic/eslint-plugin-plus@2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4)': dependencies: '@types/eslint': 9.6.0 - '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) transitivePeerDependencies: - supports-color - typescript - '@stylistic/eslint-plugin-ts@2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4)': + '@stylistic/eslint-plugin-ts@2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4)': dependencies: - '@stylistic/eslint-plugin-js': 2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + '@stylistic/eslint-plugin-js': 2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) '@types/eslint': 9.6.0 - '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) transitivePeerDependencies: - supports-color - typescript - '@stylistic/eslint-plugin@2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4)': + '@stylistic/eslint-plugin@2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4)': dependencies: - '@stylistic/eslint-plugin-js': 2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) - '@stylistic/eslint-plugin-jsx': 2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) - '@stylistic/eslint-plugin-plus': 2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) - '@stylistic/eslint-plugin-ts': 2.6.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) + '@stylistic/eslint-plugin-js': 2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) + '@stylistic/eslint-plugin-jsx': 2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) + '@stylistic/eslint-plugin-plus': 2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) + '@stylistic/eslint-plugin-ts': 2.6.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) '@types/eslint': 9.6.0 - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) transitivePeerDependencies: - supports-color - typescript @@ -3125,15 +3133,15 @@ snapshots: dependencies: '@types/node': 22.0.3 - '@typescript-eslint/eslint-plugin@8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) + '@typescript-eslint/parser': 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) '@typescript-eslint/scope-manager': 8.0.0 - '@typescript-eslint/type-utils': 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) + '@typescript-eslint/type-utils': 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) + '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) '@typescript-eslint/visitor-keys': 8.0.0 - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -3143,14 +3151,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4)': + '@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 8.0.0 '@typescript-eslint/types': 8.0.0 '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 8.0.0 debug: 4.3.6 - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -3161,10 +3169,10 @@ snapshots: '@typescript-eslint/types': 8.0.0 '@typescript-eslint/visitor-keys': 8.0.0 - '@typescript-eslint/type-utils@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4)': + '@typescript-eslint/type-utils@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4)': dependencies: '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) + '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) debug: 4.3.6 ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: @@ -3190,13 +3198,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4)': + '@typescript-eslint/utils@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) '@typescript-eslint/scope-manager': 8.0.0 '@typescript-eslint/types': 8.0.0 '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4) - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) transitivePeerDependencies: - supports-color - typescript @@ -3848,9 +3856,9 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))): + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))): dependencies: - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) eslint-import-resolver-node@0.3.9: dependencies: @@ -3860,17 +3868,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + eslint-module-utils@2.8.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + '@typescript-eslint/parser': 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -3878,9 +3886,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) hasown: 2.0.2 is-core-module: 2.15.0 is-glob: 4.0.3 @@ -3891,15 +3899,15 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) + '@typescript-eslint/parser': 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-path-alias@2.1.0(patch_hash=japuwsqfkulviwgkm4kd2oi3ky)(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + eslint-plugin-path-alias@2.1.0(patch_hash=japuwsqfkulviwgkm4kd2oi3ky)(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)): dependencies: - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) find-pkg: 2.0.0 get-tsconfig: 4.7.5 nanomatch: 1.2.13 @@ -3908,16 +3916,16 @@ snapshots: eslint-plugin-simple-header@1.1.1: {} - eslint-plugin-simple-import-sort@12.1.1(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + eslint-plugin-simple-import-sort@12.1.1(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)): dependencies: - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) - eslint-plugin-unused-imports@4.0.1(@typescript-eslint/eslint-plugin@8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)): + eslint-plugin-unused-imports@4.0.1(@typescript-eslint/eslint-plugin@8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)): dependencies: - eslint: 9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4) + eslint: 9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a) eslint-rule-composer: 0.3.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) eslint-rule-composer@0.3.0: {} @@ -3932,9 +3940,9 @@ snapshots: eslint-visitor-keys@4.0.0: {} - eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4): + eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a)) '@eslint-community/regexpp': 4.11.0 '@eslint/config-array': 0.17.1 '@eslint/eslintrc': 3.1.0 @@ -5232,11 +5240,11 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript-eslint@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4): + typescript-eslint@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4): dependencies: - '@typescript-eslint/eslint-plugin': 8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4))(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) - '@typescript-eslint/parser': 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4))(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) + '@typescript-eslint/parser': 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) + '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=pxhhii6sqtzo2kyx3geekthd3a))(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: diff --git a/src/plugins/_api/memberListDecorators.ts b/src/plugins/_api/memberListDecorators.ts index 5e3e5ed1..8e5fe50a 100644 --- a/src/plugins/_api/memberListDecorators.ts +++ b/src/plugins/_api/memberListDecorators.ts @@ -31,7 +31,7 @@ export default definePlugin({ match: /let\{[^}]*lostPermissionTooltipText:\i[^}]*\}=(\i),/, replace: "$&vencordProps=$1," }, { - match: /\.Messages\.GUILD_OWNER(?=.+?decorators:(\i)\(\)).+?\1=?\(\)=>.+?children:\[/, + match: /#intl(?=.+?decorators:(\i)\(\)).+?\1=?\(\)=>.+?children:\[/, replace: "$&...(typeof vencordProps=='undefined'?[]:Vencord.Api.MemberListDecorators.__getDecorators(vencordProps))," } ] diff --git a/src/plugins/_api/messageAccessories.ts b/src/plugins/_api/messageAccessories.ts index a98fdb32..dbf36338 100644 --- a/src/plugins/_api/messageAccessories.ts +++ b/src/plugins/_api/messageAccessories.ts @@ -25,7 +25,7 @@ export default definePlugin({ authors: [Devs.Cyn], patches: [ { - find: ".Messages.REMOVE_ATTACHMENT_BODY", + find: "#intl", replacement: { match: /(?<=.container\)?,children:)(\[.+?\])/, replace: "Vencord.Api.MessageAccessories._modifyAccessories($1,this.props)", diff --git a/src/plugins/_api/messageDecorations.ts b/src/plugins/_api/messageDecorations.ts index b41ec0be..a5fb50c6 100644 --- a/src/plugins/_api/messageDecorations.ts +++ b/src/plugins/_api/messageDecorations.ts @@ -27,7 +27,7 @@ export default definePlugin({ { find: '"Message Username"', replacement: { - match: /\.Messages\.GUILD_COMMUNICATION_DISABLED_BOTTOM_SHEET_TITLE.+?}\),\i(?=\])/, + match: /#intl.+?}\),\i(?=\])/, replace: "$&,...Vencord.Api.MessageDecorations.__addDecorationsToMessage(arguments[0])" } } diff --git a/src/plugins/_api/messageEvents.ts b/src/plugins/_api/messageEvents.ts index 0347d544..a7ddaa49 100644 --- a/src/plugins/_api/messageEvents.ts +++ b/src/plugins/_api/messageEvents.ts @@ -25,7 +25,7 @@ export default definePlugin({ authors: [Devs.Arjix, Devs.hunt, Devs.Ven], patches: [ { - find: ".Messages.EDIT_TEXTAREA_HELP", + find: "#intl", replacement: { match: /(?<=,channel:\i\}\)\.then\().+?(?=return \i\.content!==this\.props\.message\.content&&\i\((.+?)\))/, replace: (match, args) => "" + diff --git a/src/plugins/_api/messagePopover.ts b/src/plugins/_api/messagePopover.ts index 57b9b119..c904017c 100644 --- a/src/plugins/_api/messagePopover.ts +++ b/src/plugins/_api/messagePopover.ts @@ -24,9 +24,9 @@ export default definePlugin({ description: "API to add buttons to message popovers.", authors: [Devs.KingFish, Devs.Ven, Devs.Nuckyz], patches: [{ - find: "Messages.MESSAGE_UTILITIES_A11Y_LABEL", + find: "#intl", replacement: { - match: /\.jsx\)\((\i\.\i),\{label:\i\.\i\.Messages\.MESSAGE_ACTION_REPLY.{0,200}?"reply-self".{0,50}?\}\):null(?=,.+?message:(\i))/, + match: /\.jsx\)\((\i\.\i),\{label:\i\.\i\.string\(\i\.\i#intl.{0,200}?"reply-self".{0,50}?\}\):null(?=,.+?message:(\i))/, replace: "$&,Vencord.Api.MessagePopover._buildPopoverElements($1,$2)" } }], diff --git a/src/plugins/_api/serverList.ts b/src/plugins/_api/serverList.ts index 7904e78b..6b14de70 100644 --- a/src/plugins/_api/serverList.ts +++ b/src/plugins/_api/serverList.ts @@ -25,16 +25,16 @@ export default definePlugin({ description: "Api required for plugins that modify the server list", patches: [ { - find: "Messages.DISCODO_DISABLED", + find: "#intl", replacement: { - match: /(?<=Messages\.DISCODO_DISABLED.+?return)(\(.{0,75}?tutorialContainer.+?}\))(?=}function)/, + match: /(?<=#intl.+?return)(\(.{0,75}?tutorialContainer.+?}\))(?=}function)/, replace: "[$1].concat(Vencord.Api.ServerList.renderAll(Vencord.Api.ServerList.ServerListRenderPosition.Above))" } }, { find: "Messages.SERVERS,children", replacement: { - match: /(?<=Messages\.SERVERS,children:)\i\.map\(\i\)/, + match: /(?<=#intl\),children:)\i\.map\(\i\)/, replace: "Vencord.Api.ServerList.renderAll(Vencord.Api.ServerList.ServerListRenderPosition.In).concat($&)" } } diff --git a/src/plugins/_core/settings.tsx b/src/plugins/_core/settings.tsx index 329c389c..c99e606f 100644 --- a/src/plugins/_core/settings.tsx +++ b/src/plugins/_core/settings.tsx @@ -57,7 +57,7 @@ export default definePlugin({ ] }, { - find: "Messages.ACTIVITY_SETTINGS", + find: "#intl", replacement: [ { match: /(?<=section:(.{0,50})\.DIVIDER\}\))([,;])(?=.{0,200}(\i)\.push.{0,100}label:(\i)\.header)/, @@ -70,7 +70,7 @@ export default definePlugin({ ] }, { - find: "Messages.USER_SETTINGS_ACTIONS_MENU_LABEL", + find: "#intl", replacement: { match: /(?<=function\((\i),\i\)\{)(?=let \i=Object.values\(\i.\i\).*?(\i\.\i)\.open\()/, replace: "$2.open($1);return;" diff --git a/src/plugins/_core/supportHelper.tsx b/src/plugins/_core/supportHelper.tsx index cb8d1d05..dee61a57 100644 --- a/src/plugins/_core/supportHelper.tsx +++ b/src/plugins/_core/supportHelper.tsx @@ -147,7 +147,7 @@ export default definePlugin({ settings, patches: [{ - find: ".BEGINNING_DM.format", + find: "#intl", replacement: { match: /BEGINNING_DM\.format\(\{.+?\}\),(?=.{0,300}(\i)\.isMultiUserDM)/, replace: "$& $self.renderContributorDmWarningCard({ channel: $1 })," diff --git a/src/plugins/accountPanelServerProfile/index.tsx b/src/plugins/accountPanelServerProfile/index.tsx index fe5df48a..dc95fabd 100644 --- a/src/plugins/accountPanelServerProfile/index.tsx +++ b/src/plugins/accountPanelServerProfile/index.tsx @@ -69,7 +69,7 @@ export default definePlugin({ patches: [ { - find: ".Messages.ACCOUNT_SPEAKING_WHILE_MUTED", + find: "#intl", group: true, replacement: [ { diff --git a/src/plugins/betterFolders/index.tsx b/src/plugins/betterFolders/index.tsx index bb1a67eb..8a8de9d9 100644 --- a/src/plugins/betterFolders/index.tsx +++ b/src/plugins/betterFolders/index.tsx @@ -172,7 +172,7 @@ export default definePlugin({ // Disable expanding and collapsing folders transition in the normal GuildsBar sidebar { predicate: () => !settings.store.keepIcons, - match: /(?<=\.Messages\.SERVER_FOLDER_PLACEHOLDER.+?useTransition\)\()/, + match: /(?<=#intl.+?useTransition\)\()/, replace: "$self.shouldShowTransition(arguments[0])&&" }, // If we are rendering the normal GuildsBar sidebar, we avoid rendering guilds from folders that are expanded @@ -205,7 +205,7 @@ export default definePlugin({ } }, { - find: ".Messages.DISCODO_DISABLED", + find: "#intl", predicate: () => settings.store.closeAllHomeButton, replacement: { // Close all folders when clicking the home button diff --git a/src/plugins/decor/index.tsx b/src/plugins/decor/index.tsx index 33d1d40b..f3a28105 100644 --- a/src/plugins/decor/index.tsx +++ b/src/plugins/decor/index.tsx @@ -41,7 +41,7 @@ export default definePlugin({ { find: "DefaultCustomizationSections", replacement: { - match: /(?<=USER_SETTINGS_AVATAR_DECORATION},"decoration"\),)/, + match: /(?<=#intl\)},"decoration"\),)/, replace: "$self.DecorSection()," } }, diff --git a/src/plugins/friendsSince/index.tsx b/src/plugins/friendsSince/index.tsx index cb5634c8..5cb2f674 100644 --- a/src/plugins/friendsSince/index.tsx +++ b/src/plugins/friendsSince/index.tsx @@ -26,7 +26,7 @@ export default definePlugin({ { find: ".PANEL}),nicknameIcons", replacement: { - match: /USER_PROFILE_MEMBER_SINCE,.{0,100}userId:(\i\.id)}\)}\)/, + match: /#intl,.{0,100}userId:(\i\.id)}\)}\)/, replace: "$&,$self.FriendsSinceComponent({userId:$1,isSidebar:true})" } }, @@ -34,7 +34,7 @@ export default definePlugin({ { find: "action:\"PRESS_APP_CONNECTION\"", replacement: { - match: /USER_PROFILE_MEMBER_SINCE,.{0,100}userId:(\i\.id),.{0,100}}\)}\),/, + match: /#intl,.{0,100}userId:(\i\.id),.{0,100}}\)}\),/, replace: "$&,$self.FriendsSinceComponent({userId:$1,isSidebar:false})," } } diff --git a/src/plugins/memberCount/index.tsx b/src/plugins/memberCount/index.tsx index 85dcc4b2..6809832a 100644 --- a/src/plugins/memberCount/index.tsx +++ b/src/plugins/memberCount/index.tsx @@ -74,7 +74,7 @@ export default definePlugin({ { find: ".invitesDisabledTooltip", replacement: { - match: /\.VIEW_AS_ROLES_MENTIONS_WARNING.{0,100}(?=])/, + match: /#intl.{0,100}(?=])/, replace: "$&,$self.renderTooltip(arguments[0].guild)" }, predicate: () => settings.store.toolTip diff --git a/src/plugins/noUnblockToJump/index.ts b/src/plugins/noUnblockToJump/index.ts index cba6bb9a..e2207880 100644 --- a/src/plugins/noUnblockToJump/index.ts +++ b/src/plugins/noUnblockToJump/index.ts @@ -28,21 +28,21 @@ export default definePlugin({ { find: '.id,"Search Results"', replacement: { - match: /if\(.{1,10}\)(.{1,10}\.show\({.{1,50}UNBLOCK_TO_JUMP_TITLE)/, + match: /if\(.{1,10}\)(.{1,10}\.show\({.{1,50}#intl)/, replace: "if(false)$1" } }, { find: "renderJumpButton()", replacement: { - match: /if\(.{1,10}\)(.{1,10}\.show\({.{1,50}UNBLOCK_TO_JUMP_TITLE)/, + match: /if\(.{1,10}\)(.{1,10}\.show\({.{1,50}#intl)/, replace: "if(false)$1" } }, { find: "flash:!0,returnMessageId", replacement: { - match: /.\?(.{1,10}\.show\({.{1,50}UNBLOCK_TO_JUMP_TITLE)/, + match: /.\?(.{1,10}\.show\({.{1,50}#intl)/, replace: "false?$1" } } diff --git a/src/plugins/volumeBooster/index.ts b/src/plugins/volumeBooster/index.ts index c38b2d1a..36b4ce41 100644 --- a/src/plugins/volumeBooster/index.ts +++ b/src/plugins/volumeBooster/index.ts @@ -57,7 +57,7 @@ export default definePlugin({ patches: [ // Change the max volume for sliders to allow for values above 200 ...[ - ".Messages.USER_VOLUME", + "#intl", "currentVolume:" ].map(find => ({ find, diff --git a/src/plugins/webContextMenus.web/index.ts b/src/plugins/webContextMenus.web/index.ts index bae78010..f5d71c28 100644 --- a/src/plugins/webContextMenus.web/index.ts +++ b/src/plugins/webContextMenus.web/index.ts @@ -127,11 +127,11 @@ export default definePlugin({ replace: "return [true" }, { - match: /(?<=COPY_IMAGE_MENU_ITEM,)action:/, + match: /(?<=#intl,)action:/, replace: "action:()=>$self.copyImage(arguments[0]),oldAction:" }, { - match: /(?<=SAVE_IMAGE_MENU_ITEM,)action:/, + match: /(?<=#intl,)action:/, replace: "action:()=>$self.saveImage(arguments[0]),oldAction:" }, ] @@ -224,10 +224,10 @@ export default definePlugin({ { find: '("interactionUsernameProfile', replacement: - { - match: /\i\.isPlatformEmbedded(?=.{0,50}\.tagName)/, - replace: "true" - }, + { + match: /\i\.isPlatformEmbedded(?=.{0,50}\.tagName)/, + replace: "true" + }, } ], diff --git a/src/utils/intlHash.ts b/src/utils/intlHash.ts new file mode 100644 index 00000000..069f8f80 --- /dev/null +++ b/src/utils/intlHash.ts @@ -0,0 +1,53 @@ +/* eslint-disable simple-header/header */ + +/** + * discord-intl + * + * @copyright 2024 Discord, Inc. + * @link https://github.com/discord/discord-intl + * @license MIT + */ + + +import { hash as h64 } from "@intrnl/xxhash64"; + +const BASE64_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""); +const IS_BIG_ENDIAN = (() => { + const array = new Uint8Array(4); + const view = new Uint32Array(array.buffer); + return !((view[0] = 1) & array[0]); +})(); + +function numberToBytes(number: number | bigint) { + number = BigInt(number); + const array: number[] = []; + const byteCount = Math.ceil(Math.floor(Math.log2(Number(number)) + 1) / 8); + for (let i = 0; i < byteCount; i++) { + array.unshift(Number((number >> BigInt(8 * i)) & BigInt(255))); + } + + const bytes = new Uint8Array(array); + // The native `hashToMessageKey` always works in Big/Network Endian bytes, so this array + // needs to be converted to the same endianness to get the same base64 result. + return IS_BIG_ENDIAN ? bytes : bytes.reverse(); +} + +/** + * Returns a consistent, short hash of the given key by first processing it through a hash digest, + * then encoding the first few bytes to base64. + * + * This function is specifically written to mirror the native backend hashing function used by + * `@discord/intl-loader-core`, to be able to hash names at runtime. + */ +export function runtimeHashMessageKey(key: string): string { + const hash = h64(key, 0); + const bytes = numberToBytes(hash); + return [ + BASE64_TABLE[bytes[0] >> 2], + BASE64_TABLE[((bytes[0] & 0x03) << 4) | (bytes[1] >> 4)], + BASE64_TABLE[((bytes[1] & 0x0f) << 2) | (bytes[2] >> 6)], + BASE64_TABLE[bytes[2] & 0x3f], + BASE64_TABLE[bytes[3] >> 2], + BASE64_TABLE[((bytes[3] & 0x03) << 4) | (bytes[3] >> 4)], + ].join(""); +} diff --git a/src/utils/patches.ts b/src/utils/patches.ts index 87f3ce78..b247dd13 100644 --- a/src/utils/patches.ts +++ b/src/utils/patches.ts @@ -16,12 +16,24 @@ * along with this program. If not, see . */ +import { runtimeHashMessageKey } from "./intlHash"; import { Patch, PatchReplacement, ReplaceFn } from "./types"; export function canonicalizeMatch(match: T): T { - if (typeof match === "string") return match; - const canonSource = match.source - .replaceAll("\\i", "[A-Za-z_$][\\w$]*"); + let partialCanon = typeof match === "string" ? match : match.source; + partialCanon = partialCanon.replaceAll(/#intl?<([A-Za-z_$][\w$]*)>/g, (_, key) => { + const hashed = runtimeHashMessageKey(key); + const isStr = typeof match === "string"; + + return /^[\d]/.test(hashed) || !/^[\w$]+$/.test(hashed) + ? isStr ? `["${hashed}` : `(?:\\["${hashed}"\\])` + : isStr ? `.${hashed}` : `(?:\\.${hashed})`; + }); + + if (typeof match === "string") return partialCanon as T; + + const canonSource = partialCanon + .replaceAll(String.raw`\i`, String.raw`(?:[A-Za-z_$][\w$]*)`); return new RegExp(canonSource, match.flags) as T; }