perf(frontend): ahocorasickを使ったワードミュート
This commit is contained in:
		
							parent
							
								
									9230ee52a0
								
							
						
					
					
						commit
						1d2f2eda30
					
				|  | @ -54,6 +54,7 @@ | |||
| 		"misskey-bubble-game": "workspace:*", | ||||
| 		"misskey-js": "workspace:*", | ||||
| 		"misskey-reversi": "workspace:*", | ||||
| 		"modern-ahocorasick": "2.0.2", | ||||
| 		"photoswipe": "5.4.4", | ||||
| 		"punycode.js": "2.3.1", | ||||
| 		"rollup": "4.26.0", | ||||
|  |  | |||
|  | @ -3,41 +3,53 @@ | |||
|  * SPDX-License-Identifier: AGPL-3.0-only | ||||
|  */ | ||||
| import * as Misskey from 'misskey-js'; | ||||
| 
 | ||||
| export function checkWordMute(note: Misskey.entities.Note, me: Misskey.entities.UserLite | null | undefined, mutedWords: Array<string | string[]>): Array<string | string[]> | false { | ||||
| 	// 自分自身
 | ||||
| import * as AhoCorasick from 'modern-ahocorasick'; | ||||
| export function checkWordMute( | ||||
| 	note: Misskey.entities.Note, | ||||
| 	me: Misskey.entities.UserLite | null | undefined, | ||||
| 	mutedWords: Array<string | string[]>, | ||||
| ): Array<string | string[]> | false { | ||||
| 	// 自分自身の投稿は対象外
 | ||||
| 	if (me && (note.userId === me.id)) return false; | ||||
| 	if (mutedWords.length <= 0) return false; | ||||
| 
 | ||||
| 	if (mutedWords.length > 0) { | ||||
| 		const text = ((note.cw ?? '') + '\n' + (note.text ?? '')).trim(); | ||||
| 	const text = ((note.cw ?? '') + '\n' + (note.text ?? '')).trim(); | ||||
| 	if (text === '') return false; | ||||
| 
 | ||||
| 		if (text === '') return false; | ||||
| 	const normalTexts: string[] = []; | ||||
| 	const andTexts: string[][] = []; | ||||
| 	const regexTexts: Array<{ originaL: string; regex: RegExp }> = []; | ||||
| 
 | ||||
| 		const matched = mutedWords.filter(filter => { | ||||
| 			if (Array.isArray(filter)) { | ||||
| 				// Clean up
 | ||||
| 				const filteredFilter = filter.filter(keyword => keyword !== ''); | ||||
| 				if (filteredFilter.length === 0) return false; | ||||
| 
 | ||||
| 				return filteredFilter.every(keyword => text.includes(keyword)); | ||||
| 	for (const filter of mutedWords) { | ||||
| 		if (Array.isArray(filter)) { | ||||
| 			if (filter.length === 1) { | ||||
| 				normalTexts.push(filter[0]); | ||||
| 			} else { | ||||
| 				// represents RegExp
 | ||||
| 				const regexp = filter.match(/^\/(.+)\/(.*)$/); | ||||
| 
 | ||||
| 				// This should never happen due to input sanitisation.
 | ||||
| 				if (!regexp) return false; | ||||
| 
 | ||||
| 				try { | ||||
| 					return new RegExp(regexp[1], regexp[2]).test(text); | ||||
| 				} catch (err) { | ||||
| 					// This should never happen due to input sanitisation.
 | ||||
| 					return false; | ||||
| 				} | ||||
| 				andTexts.push(filter); | ||||
| 			} | ||||
| 		}); | ||||
| 
 | ||||
| 		if (matched.length > 0) return matched; | ||||
| 		} else if (filter.startsWith('/') && filter.endsWith('/')) { | ||||
| 			const regExp = filter.match(/^\/(.+)\/(.*)$/); | ||||
| 			if (!regExp) continue; | ||||
| 			try { | ||||
| 				regexTexts.push({ originaL: filter, regex: new RegExp(filter.slice(1, -1)) }); | ||||
| 			} catch { | ||||
| 				// 無効な正規表現はスキップ
 | ||||
| 			} | ||||
| 		} else { | ||||
| 			normalTexts.push(filter); | ||||
| 		} | ||||
| 	} | ||||
| 	// normal wordmute with AhoCorasick
 | ||||
| 	const ac = new AhoCorasick.default(normalTexts); | ||||
| 	const normalMatches = ac.search(text); | ||||
| 
 | ||||
| 	return false; | ||||
| 	// andTexts
 | ||||
| 	const andMatches = andTexts.filter(texts => texts.filter(keyword => keyword !== '').every(keyword => text.includes(keyword))); | ||||
| 
 | ||||
| 	// RegExp
 | ||||
| 	const regexMatches = regexTexts.filter(({ regex }) => regex.test(text)); | ||||
| 
 | ||||
| 	const matched: Array<string | string[]> = normalMatches.map(match	=> match[1]).concat(andMatches, regexMatches.map(({ originaL }) => originaL)); | ||||
| 
 | ||||
| 	return matched.length > 0 ? matched : false; | ||||
| } | ||||
|  |  | |||
|  | @ -799,6 +799,9 @@ importers: | |||
|       misskey-reversi: | ||||
|         specifier: workspace:* | ||||
|         version: link:../misskey-reversi | ||||
|       modern-ahocorasick: | ||||
|         specifier: 2.0.2 | ||||
|         version: 2.0.2 | ||||
|       photoswipe: | ||||
|         specifier: 5.4.4 | ||||
|         version: 5.4.4 | ||||
|  | @ -1157,7 +1160,7 @@ importers: | |||
|         version: 7.17.0(eslint@9.14.0)(typescript@5.6.3) | ||||
|       '@vitest/coverage-v8': | ||||
|         specifier: 1.6.0 | ||||
|         version: 1.6.0(vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.4)(terser@5.36.0)) | ||||
|         version: 1.6.0(vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.36.0)) | ||||
|       '@vue/runtime-core': | ||||
|         specifier: 3.5.12 | ||||
|         version: 3.5.12 | ||||
|  | @ -7854,6 +7857,7 @@ packages: | |||
| 
 | ||||
|   lodash.get@4.4.2: | ||||
|     resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} | ||||
|     deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. | ||||
| 
 | ||||
|   lodash.isarguments@3.1.0: | ||||
|     resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} | ||||
|  | @ -8311,6 +8315,9 @@ packages: | |||
|     resolution: {integrity: sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==} | ||||
|     engines: {node: '>= 8'} | ||||
| 
 | ||||
|   modern-ahocorasick@2.0.2: | ||||
|     resolution: {integrity: sha512-qMPR7bQNCcQ258O1yNFvk6f9CQMT6AFIz0Sg6GbRIRcPFNsKYe1XTKGG8O/6oQu9yJiu7tFMqUiQ5c0B/zc5lQ==} | ||||
| 
 | ||||
|   module-details-from-path@1.0.3: | ||||
|     resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} | ||||
| 
 | ||||
|  | @ -11675,7 +11682,7 @@ snapshots: | |||
|       '@babel/traverse': 7.23.5 | ||||
|       '@babel/types': 7.24.7 | ||||
|       convert-source-map: 2.0.0 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       gensync: 1.0.0-beta.2 | ||||
|       json5: 2.2.3 | ||||
|       semver: 6.3.1 | ||||
|  | @ -11695,7 +11702,7 @@ snapshots: | |||
|       '@babel/traverse': 7.24.7 | ||||
|       '@babel/types': 7.24.7 | ||||
|       convert-source-map: 2.0.0 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       gensync: 1.0.0-beta.2 | ||||
|       json5: 2.2.3 | ||||
|       semver: 6.3.1 | ||||
|  | @ -11954,7 +11961,7 @@ snapshots: | |||
|       '@babel/helper-split-export-declaration': 7.22.6 | ||||
|       '@babel/parser': 7.25.6 | ||||
|       '@babel/types': 7.24.7 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       globals: 11.12.0 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|  | @ -11969,7 +11976,7 @@ snapshots: | |||
|       '@babel/helper-split-export-declaration': 7.24.7 | ||||
|       '@babel/parser': 7.25.6 | ||||
|       '@babel/types': 7.25.6 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       globals: 11.12.0 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|  | @ -12360,7 +12367,7 @@ snapshots: | |||
|   '@eslint/config-array@0.18.0': | ||||
|     dependencies: | ||||
|       '@eslint/object-schema': 2.1.4 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       minimatch: 3.1.2 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|  | @ -12370,7 +12377,7 @@ snapshots: | |||
|   '@eslint/eslintrc@3.1.0': | ||||
|     dependencies: | ||||
|       ajv: 6.12.6 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       espree: 10.3.0 | ||||
|       globals: 14.0.0 | ||||
|       ignore: 5.3.1 | ||||
|  | @ -13075,7 +13082,7 @@ snapshots: | |||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| 
 | ||||
|   '@nestjs/testing@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7)': | ||||
|   '@nestjs/testing@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.7))': | ||||
|     dependencies: | ||||
|       '@nestjs/common': 10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1) | ||||
|       '@nestjs/core': 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1) | ||||
|  | @ -15188,7 +15195,7 @@ snapshots: | |||
|     dependencies: | ||||
|       '@typescript-eslint/types': 7.17.0 | ||||
|       '@typescript-eslint/visitor-keys': 7.17.0 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       globby: 11.1.0 | ||||
|       is-glob: 4.0.3 | ||||
|       minimatch: 9.0.4 | ||||
|  | @ -15265,7 +15272,7 @@ snapshots: | |||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| 
 | ||||
|   '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.4)(terser@5.36.0))': | ||||
|   '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.36.0))': | ||||
|     dependencies: | ||||
|       '@ampproject/remapping': 2.2.1 | ||||
|       '@bcoe/v8-coverage': 0.2.3 | ||||
|  | @ -15280,7 +15287,7 @@ snapshots: | |||
|       std-env: 3.7.0 | ||||
|       strip-literal: 2.1.0 | ||||
|       test-exclude: 6.0.0 | ||||
|       vitest: 1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.4)(terser@5.36.0) | ||||
|       vitest: 1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.36.0) | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| 
 | ||||
|  | @ -15518,14 +15525,14 @@ snapshots: | |||
| 
 | ||||
|   agent-base@6.0.2: | ||||
|     dependencies: | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|     optional: true | ||||
| 
 | ||||
|   agent-base@7.1.0: | ||||
|     dependencies: | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| 
 | ||||
|  | @ -17123,7 +17130,7 @@ snapshots: | |||
| 
 | ||||
|   esbuild-register@3.5.0(esbuild@0.24.0): | ||||
|     dependencies: | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       esbuild: 0.24.0 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|  | @ -17365,7 +17372,7 @@ snapshots: | |||
|       ajv: 6.12.6 | ||||
|       chalk: 4.1.2 | ||||
|       cross-spawn: 7.0.3 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       escape-string-regexp: 4.0.0 | ||||
|       eslint-scope: 8.2.0 | ||||
|       eslint-visitor-keys: 4.2.0 | ||||
|  | @ -17810,7 +17817,7 @@ snapshots: | |||
| 
 | ||||
|   follow-redirects@1.15.9(debug@4.3.7): | ||||
|     optionalDependencies: | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
| 
 | ||||
|   for-each@0.3.3: | ||||
|     dependencies: | ||||
|  | @ -18249,7 +18256,7 @@ snapshots: | |||
|   http-proxy-agent@7.0.2: | ||||
|     dependencies: | ||||
|       agent-base: 7.1.0 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| 
 | ||||
|  | @ -18282,7 +18289,7 @@ snapshots: | |||
|   https-proxy-agent@5.0.1: | ||||
|     dependencies: | ||||
|       agent-base: 6.0.2 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|     optional: true | ||||
|  | @ -18290,14 +18297,14 @@ snapshots: | |||
|   https-proxy-agent@7.0.2: | ||||
|     dependencies: | ||||
|       agent-base: 7.1.0 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| 
 | ||||
|   https-proxy-agent@7.0.5: | ||||
|     dependencies: | ||||
|       agent-base: 7.1.0 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
| 
 | ||||
|  | @ -18639,7 +18646,7 @@ snapshots: | |||
| 
 | ||||
|   istanbul-lib-source-maps@4.0.1: | ||||
|     dependencies: | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       istanbul-lib-coverage: 3.2.2 | ||||
|       source-map: 0.6.1 | ||||
|     transitivePeerDependencies: | ||||
|  | @ -18648,7 +18655,7 @@ snapshots: | |||
|   istanbul-lib-source-maps@5.0.4: | ||||
|     dependencies: | ||||
|       '@jridgewell/trace-mapping': 0.3.25 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       istanbul-lib-coverage: 3.2.2 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|  | @ -19047,6 +19054,35 @@ snapshots: | |||
| 
 | ||||
|   jsdoc-type-pratt-parser@4.1.0: {} | ||||
| 
 | ||||
|   jsdom@24.1.1: | ||||
|     dependencies: | ||||
|       cssstyle: 4.0.1 | ||||
|       data-urls: 5.0.0 | ||||
|       decimal.js: 10.4.3 | ||||
|       form-data: 4.0.1 | ||||
|       html-encoding-sniffer: 4.0.0 | ||||
|       http-proxy-agent: 7.0.2 | ||||
|       https-proxy-agent: 7.0.5 | ||||
|       is-potential-custom-element-name: 1.0.1 | ||||
|       nwsapi: 2.2.12 | ||||
|       parse5: 7.2.1 | ||||
|       rrweb-cssom: 0.7.1 | ||||
|       saxes: 6.0.0 | ||||
|       symbol-tree: 3.2.4 | ||||
|       tough-cookie: 4.1.4 | ||||
|       w3c-xmlserializer: 5.0.0 | ||||
|       webidl-conversions: 7.0.0 | ||||
|       whatwg-encoding: 3.1.1 | ||||
|       whatwg-mimetype: 4.0.0 | ||||
|       whatwg-url: 14.0.0 | ||||
|       ws: 8.18.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) | ||||
|       xml-name-validator: 5.0.0 | ||||
|     transitivePeerDependencies: | ||||
|       - bufferutil | ||||
|       - supports-color | ||||
|       - utf-8-validate | ||||
|     optional: true | ||||
| 
 | ||||
|   jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3): | ||||
|     dependencies: | ||||
|       cssstyle: 4.0.1 | ||||
|  | @ -19739,7 +19775,7 @@ snapshots: | |||
|   micromark@4.0.0: | ||||
|     dependencies: | ||||
|       '@types/debug': 4.1.12 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       decode-named-character-reference: 1.0.2 | ||||
|       devlop: 1.1.0 | ||||
|       micromark-core-commonmark: 2.0.0 | ||||
|  | @ -19896,6 +19932,8 @@ snapshots: | |||
| 
 | ||||
|   mock-socket@9.3.1: {} | ||||
| 
 | ||||
|   modern-ahocorasick@2.0.2: {} | ||||
| 
 | ||||
|   module-details-from-path@1.0.3: {} | ||||
| 
 | ||||
|   ms@2.0.0: {} | ||||
|  | @ -21136,7 +21174,7 @@ snapshots: | |||
| 
 | ||||
|   require-in-the-middle@7.3.0: | ||||
|     dependencies: | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       module-details-from-path: 1.0.3 | ||||
|       resolve: 1.22.8 | ||||
|     transitivePeerDependencies: | ||||
|  | @ -21561,7 +21599,7 @@ snapshots: | |||
|   socks-proxy-agent@8.0.2: | ||||
|     dependencies: | ||||
|       agent-base: 7.1.0 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       socks: 2.7.1 | ||||
|     transitivePeerDependencies: | ||||
|       - supports-color | ||||
|  | @ -21670,7 +21708,7 @@ snapshots: | |||
|       arg: 5.0.2 | ||||
|       bluebird: 3.7.2 | ||||
|       check-more-types: 2.24.0 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       execa: 5.1.1 | ||||
|       lazy-ass: 1.6.0 | ||||
|       ps-tree: 1.2.0 | ||||
|  | @ -22404,7 +22442,7 @@ snapshots: | |||
|   vite-node@1.6.0(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0): | ||||
|     dependencies: | ||||
|       cac: 6.7.14 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       pathe: 1.1.2 | ||||
|       picocolors: 1.0.1 | ||||
|       vite: 5.4.11(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0) | ||||
|  | @ -22422,7 +22460,7 @@ snapshots: | |||
|   vite-node@1.6.0(@types/node@22.9.0)(sass@1.79.4)(terser@5.36.0): | ||||
|     dependencies: | ||||
|       cac: 6.7.14 | ||||
|       debug: 4.3.7(supports-color@8.1.1) | ||||
|       debug: 4.3.7(supports-color@5.5.0) | ||||
|       pathe: 1.1.2 | ||||
|       picocolors: 1.0.1 | ||||
|       vite: 5.4.11(@types/node@22.9.0)(sass@1.79.4)(terser@5.36.0) | ||||
|  | @ -22504,7 +22542,7 @@ snapshots: | |||
|       - supports-color | ||||
|       - terser | ||||
| 
 | ||||
|   vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4))(sass@1.79.4)(terser@5.36.0): | ||||
|   vitest@1.6.0(@types/node@22.9.0)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.4)(terser@5.36.0): | ||||
|     dependencies: | ||||
|       '@vitest/expect': 1.6.0 | ||||
|       '@vitest/runner': 1.6.0 | ||||
|  | @ -22529,7 +22567,7 @@ snapshots: | |||
|     optionalDependencies: | ||||
|       '@types/node': 22.9.0 | ||||
|       happy-dom: 10.0.3 | ||||
|       jsdom: 24.1.1(bufferutil@4.0.8)(utf-8-validate@6.0.4) | ||||
|       jsdom: 24.1.1 | ||||
|     transitivePeerDependencies: | ||||
|       - less | ||||
|       - lightningcss | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue