From ff4ce8e1d3b3a2f3428dd3a9934c326b80e29e78 Mon Sep 17 00:00:00 2001 From: Cashew Date: Sun, 28 Jan 2024 13:14:29 +0700 Subject: [PATCH 1/9] add basic benches --- .eslintrc.json | 3 +- benches/deinflector.bench.js | 104 +++++++++++++++++++++++++++++++++++ benches/jsconfig.json | 43 +++++++++++++++ package-lock.json | 3 + test/data/json.json | 3 +- test/json.test.js | 1 + types/test/json.d.ts | 2 +- 7 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 benches/deinflector.bench.js create mode 100644 benches/jsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json index af9f22b469..583ac1d5ca 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -16,7 +16,8 @@ "project": [ "./jsconfig.json", "./dev/jsconfig.json", - "./test/jsconfig.json" + "./test/jsconfig.json", + "./benches/jsconfig.json" ] }, "env": { diff --git a/benches/deinflector.bench.js b/benches/deinflector.bench.js new file mode 100644 index 0000000000..0f4e336880 --- /dev/null +++ b/benches/deinflector.bench.js @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2023 Yomitan Authors + * Copyright (C) 2020-2022 Yomichan Authors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import fs from 'fs'; +import {fileURLToPath} from 'node:url'; +import path from 'path'; +import {bench, describe} from 'vitest'; +import {parseJson} from '../dev/json.js'; +import {Deinflector} from '../ext/js/language/deinflector.js'; + +const dirname = path.dirname(fileURLToPath(import.meta.url)); + +/** @type {import('deinflector').ReasonsRaw} */ +const deinflectionReasons = parseJson(fs.readFileSync(path.join(dirname, '..', 'ext', 'data/deinflect.json'), {encoding: 'utf8'})); +const deinflector = new Deinflector(deinflectionReasons); + +describe('Deinflector basic tests', () => { + const adjectiveInflections = [ + '愛しい', + '愛しそう', + '愛しすぎる', + '愛しかったら', + '愛しかったり', + '愛しくて', + '愛しく', + '愛しくない', + '愛しさ', + '愛しかった', + '愛しくありません', + '愛しくありませんでした', + '愛しき' + ]; + + const verbInflections = [ + '食べる', + '食べます', + '食べた', + '食べました', + '食べて', + '食べられる', + '食べられる', + '食べさせる', + '食べさせられる', + '食べろ', + '食べない', + '食べません', + '食べなかった', + '食べませんでした', + '食べなくて', + '食べられない', + '食べられない', + '食べさせない', + '食べさせられない', + '食べ', + '食べれば', + '食べちゃう', + '食べちまう', + '食べなさい', + '食べそう', + '食べすぎる', + '食べたい', + '食べたら', + '食べたり', + '食べず', + '食べぬ', + '食べ', + '食べましょう', + '食べよう', + '食べとく', + '食べている', + '食べておる', + '食べてる', + '食べとる', + '食べてしまう' + ]; + + const inflectionCombinations = [ + '抱き抱えていなければ', + '抱きかかえていなければ', + '打ち込んでいませんでした', + '食べさせられたくなかった' + ]; + + bench('deinflection', () => { + for (const inflection of [...adjectiveInflections, ...verbInflections, ...inflectionCombinations]) { + deinflector.deinflect(inflection); + } + }); +}); diff --git a/benches/jsconfig.json b/benches/jsconfig.json new file mode 100644 index 0000000000..8b821d6843 --- /dev/null +++ b/benches/jsconfig.json @@ -0,0 +1,43 @@ +{ + "compilerOptions": { + "module": "ES2022", + "target": "ES2022", + "checkJs": true, + "moduleResolution": "node", + "strict": true, + "strictNullChecks": true, + "noImplicitAny": true, + "strictPropertyInitialization": true, + "suppressImplicitAnyIndexErrors": false, + "skipLibCheck": false, + "baseUrl": ".", + "paths": { + "*": ["../types/ext/*"], + "dev/*": ["../types/dev/*"], + "benches/*": ["../types/benches/*"], + "rollup/parseAst": ["../types/other/rollup-parse-ast"], + "ext/json-schema": ["../types/ext/json-schema"], + "json-schema": ["json-schema"] + }, + "types": [ + "chrome", + "firefox-webext-browser", + "handlebars", + "jszip", + "parse5", + "wanakana" + ] + }, + "include": [ + "**/*.js", + "../ext/**/*.js", + "../types/ext/**/*.ts", + "../types/dev/**/*.ts", + "../types/benches/**/*.ts", + "../types/other/globals.d.ts" + ], + "exclude": [ + "../node_modules", + "../dev/lib" + ] +} diff --git a/package-lock.json b/package-lock.json index d7c62cabb0..c8a5bad528 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,6 +54,9 @@ "ts-json-schema-generator": "^1.5.0", "typescript": "5.3.3", "vitest": "^0.34.6" + }, + "engines": { + "node": ">=20.0.0" } }, "node_modules/@aashutoshrathi/word-wrap": { diff --git a/test/data/json.json b/test/data/json.json index abe2e33973..a39c7385f1 100644 --- a/test/data/json.json +++ b/test/data/json.json @@ -23,6 +23,7 @@ {"path": "test/data/dictionaries/invalid-dictionary6/index.json", "ignore": true}, {"path": "test/jsconfig.json", "ignore": true}, {"path": "test/data/vitest.write.config.json", "ignore": true}, + {"path": "benches/jsconfig.json", "ignore": true}, { "path": "dev/data/manifest-variants.json", @@ -178,4 +179,4 @@ "schema": "ext/data/schemas/dictionary-term-meta-bank-v3-schema.json" } ] -} \ No newline at end of file +} diff --git a/test/json.test.js b/test/json.test.js index 8cf014919b..f9c7b1bbf5 100644 --- a/test/json.test.js +++ b/test/json.test.js @@ -36,6 +36,7 @@ function getJsconfigPath(jsconfigType) { switch (jsconfigType) { case 'dev': path = '../dev/jsconfig.json'; break; case 'test': path = '../test/jsconfig.json'; break; + case 'benches': path = '../benches/jsconfig.json'; break; default: path = '../jsconfig.json'; break; } return join(dirname, path); diff --git a/types/test/json.d.ts b/types/test/json.d.ts index 9ae21b0f66..13d65f6ae0 100644 --- a/types/test/json.d.ts +++ b/types/test/json.d.ts @@ -39,4 +39,4 @@ export type JsonFileParseInfo = { export type AjvSchema = Schema; -export type JsconfigType = 'main' | 'dev' | 'test'; +export type JsconfigType = 'main' | 'dev' | 'test' | 'benches'; From a9e04d70d09e7c4db88c9d6f38ff3e90fe697053 Mon Sep 17 00:00:00 2001 From: Cashew Date: Sun, 28 Jan 2024 13:39:41 +0700 Subject: [PATCH 2/9] add package.json script --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 095ae2140f..ebfee16575 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "type": "module", "scripts": { + "bench": "vitest bench", "build": "node ./dev/bin/build.js", "build-libs": "node ./dev/bin/build-libs.js", "test": "npm run test-lint-js && npm run test-ts && npm run test-lint-css && npm run test-lint-html && npm run test-code && npm run test-build", From c6d1b2c0c321f67928609d6231491ee7d202cffc Mon Sep 17 00:00:00 2001 From: Cashew Date: Sun, 28 Jan 2024 13:44:35 +0700 Subject: [PATCH 3/9] fix header --- benches/deinflector.bench.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benches/deinflector.bench.js b/benches/deinflector.bench.js index 0f4e336880..850269ea61 100644 --- a/benches/deinflector.bench.js +++ b/benches/deinflector.bench.js @@ -1,6 +1,5 @@ /* - * Copyright (C) 2023 Yomitan Authors - * Copyright (C) 2020-2022 Yomichan Authors + * Copyright (C) 2023-2024 Yomitan Authors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by From bee5b35ce4d4f97cc6f468b2074f3735a277b22a Mon Sep 17 00:00:00 2001 From: Cashew Date: Fri, 2 Feb 2024 10:25:40 +0700 Subject: [PATCH 4/9] add codspeed plugin --- package-lock.json | 453 +++++++++++++++++++++++++++++++++++++--------- package.json | 1 + vitest.config.js | 3 + 3 files changed, 375 insertions(+), 82 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8f0d5d7b3f..42ba1ab7a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "wanakana": "^5.3.1" }, "devDependencies": { + "@codspeed/vitest-plugin": "^3.1.0", "@playwright/test": "^1.39.0", "@stylistic/eslint-plugin-ts": "^1.5.1", "@stylistic/stylelint-plugin": "^2.0.0", @@ -301,6 +302,113 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@codspeed/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@codspeed/core/-/core-3.1.0.tgz", + "integrity": "sha512-oYd7X46QhnRkgRbZkqAoX9i3Fwm17FpunK4Ee5RdrvRYR0Xr93ewH8/O5g6uyTPDOOqDEv1v2KRYtWhVgN+2VQ==", + "dev": true, + "dependencies": { + "axios": "^1.4.0", + "find-up": "^6.3.0", + "form-data": "^4.0.0", + "node-gyp-build": "^4.6.0" + } + }, + "node_modules/@codspeed/core/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@codspeed/core/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@codspeed/core/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@codspeed/core/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@codspeed/core/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@codspeed/core/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@codspeed/vitest-plugin": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@codspeed/vitest-plugin/-/vitest-plugin-3.1.0.tgz", + "integrity": "sha512-ms11tUytiQTgB+idxZRUuCUQfgz4LaKTDJCLYm5VTSpOCUU7D5+QWvJnA8X8B9glPfR5siIK8RxrnZP4yuysKQ==", + "dev": true, + "dependencies": { + "@codspeed/core": "^3.1.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0", + "vitest": ">=1.2.2" + } + }, "node_modules/@csstools/css-parser-algorithms": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz", @@ -1374,6 +1482,12 @@ "integrity": "sha512-IVhWCNH1mw3VRjkOMHsxVAcnANhee9w//TX1fqmALP628Dzf6VMG1LRnOngpptnrilcWCkmcY1tj6QkKGUy0CA==", "dev": true }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "node_modules/@types/events": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz", @@ -1726,13 +1840,13 @@ } }, "node_modules/@vitest/expect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.1.1.tgz", - "integrity": "sha512-Qpw01C2Hyb3085jBkOJLQ7HRX0Ncnh2qV4p+xWmmhcIUlMykUF69zsnZ1vPmAjZpomw9+5tWEGOQ0GTfR8U+kA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.2.tgz", + "integrity": "sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==", "dev": true, "dependencies": { - "@vitest/spy": "1.1.1", - "@vitest/utils": "1.1.1", + "@vitest/spy": "1.2.2", + "@vitest/utils": "1.2.2", "chai": "^4.3.10" }, "funding": { @@ -1740,12 +1854,12 @@ } }, "node_modules/@vitest/runner": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.1.1.tgz", - "integrity": "sha512-8HokyJo1SnSi3uPFKfWm/Oq1qDwLC4QDcVsqpXIXwsRPAg3gIDh8EbZ1ri8cmQkBxdOu62aOF9B4xcqJhvt4xQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.2.tgz", + "integrity": "sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==", "dev": true, "dependencies": { - "@vitest/utils": "1.1.1", + "@vitest/utils": "1.2.2", "p-limit": "^5.0.0", "pathe": "^1.1.1" }, @@ -1781,9 +1895,9 @@ } }, "node_modules/@vitest/snapshot": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.1.1.tgz", - "integrity": "sha512-WnMHjv4VdHLbFGgCdVVvyRkRPnOKN75JJg+LLTdr6ah7YnL75W+7CTIMdzPEPzaDxA8r5yvSVlc1d8lH3yE28w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.2.tgz", + "integrity": "sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==", "dev": true, "dependencies": { "magic-string": "^0.30.5", @@ -1795,9 +1909,9 @@ } }, "node_modules/@vitest/spy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.1.1.tgz", - "integrity": "sha512-hDU2KkOTfFp4WFFPWwHFauddwcKuGQ7gF6Un/ZZkCogoAiTMN7/7YKvUDbywPZZ754iCQGjdUmXN3t4k0jm1IQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.2.tgz", + "integrity": "sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==", "dev": true, "dependencies": { "tinyspy": "^2.2.0" @@ -1807,12 +1921,13 @@ } }, "node_modules/@vitest/utils": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.1.1.tgz", - "integrity": "sha512-E9LedH093vST/JuBSyHLFMpxJKW3dLhe/flUSPFedoyj4wKiFX7Jm8gYLtOIiin59dgrssfmFv0BJ1u8P/LC/A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.2.tgz", + "integrity": "sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==", "dev": true, "dependencies": { "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", "loupe": "^2.3.7", "pretty-format": "^29.7.0" }, @@ -1852,9 +1967,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" @@ -1972,6 +2087,17 @@ "node": ">= 4.5.0" } }, + "node_modules/axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2058,9 +2184,9 @@ } }, "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", @@ -2869,6 +2995,15 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3046,6 +3181,26 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -4241,6 +4396,17 @@ "tslib": "^2.0.3" } }, + "node_modules/node-gyp-build": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -4690,6 +4856,12 @@ "node": ">=6" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -5619,9 +5791,9 @@ "dev": true }, "node_modules/tinypool": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz", - "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", "dev": true, "engines": { "node": ">=14.0.0" @@ -5952,9 +6124,9 @@ } }, "node_modules/vite-node": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.1.1.tgz", - "integrity": "sha512-2bGE5w4jvym5v8llF6Gu1oBrmImoNSs4WmRVcavnG2me6+8UQntTqLiAMFyiAobp+ZXhj5ZFhI7SmLiFr/jrow==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.2.tgz", + "integrity": "sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -5988,17 +6160,17 @@ } }, "node_modules/vitest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.1.1.tgz", - "integrity": "sha512-Ry2qs4UOu/KjpXVfOCfQkTnwSXYGrqTbBZxw6reIYEFjSy1QUARRg5pxiI5BEXy+kBVntxUYNMlq4Co+2vD3fQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.2.tgz", + "integrity": "sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==", "dev": true, "dependencies": { - "@vitest/expect": "1.1.1", - "@vitest/runner": "1.1.1", - "@vitest/snapshot": "1.1.1", - "@vitest/spy": "1.1.1", - "@vitest/utils": "1.1.1", - "acorn-walk": "^8.3.0", + "@vitest/expect": "1.2.2", + "@vitest/runner": "1.2.2", + "@vitest/snapshot": "1.2.2", + "@vitest/spy": "1.2.2", + "@vitest/utils": "1.2.2", + "acorn-walk": "^8.3.2", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", @@ -6010,9 +6182,9 @@ "std-env": "^3.5.0", "strip-literal": "^1.3.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.1", + "tinypool": "^0.8.2", "vite": "^5.0.0", - "vite-node": "1.1.1", + "vite-node": "1.2.2", "why-is-node-running": "^2.2.2" }, "bin": { @@ -6509,6 +6681,78 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@codspeed/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@codspeed/core/-/core-3.1.0.tgz", + "integrity": "sha512-oYd7X46QhnRkgRbZkqAoX9i3Fwm17FpunK4Ee5RdrvRYR0Xr93ewH8/O5g6uyTPDOOqDEv1v2KRYtWhVgN+2VQ==", + "dev": true, + "requires": { + "axios": "^1.4.0", + "find-up": "^6.3.0", + "form-data": "^4.0.0", + "node-gyp-build": "^4.6.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } + } + }, + "@codspeed/vitest-plugin": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@codspeed/vitest-plugin/-/vitest-plugin-3.1.0.tgz", + "integrity": "sha512-ms11tUytiQTgB+idxZRUuCUQfgz4LaKTDJCLYm5VTSpOCUU7D5+QWvJnA8X8B9glPfR5siIK8RxrnZP4yuysKQ==", + "dev": true, + "requires": { + "@codspeed/core": "^3.1.0" + } + }, "@csstools/css-parser-algorithms": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz", @@ -7123,6 +7367,12 @@ "integrity": "sha512-IVhWCNH1mw3VRjkOMHsxVAcnANhee9w//TX1fqmALP628Dzf6VMG1LRnOngpptnrilcWCkmcY1tj6QkKGUy0CA==", "dev": true }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "@types/events": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz", @@ -7376,23 +7626,23 @@ } }, "@vitest/expect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.1.1.tgz", - "integrity": "sha512-Qpw01C2Hyb3085jBkOJLQ7HRX0Ncnh2qV4p+xWmmhcIUlMykUF69zsnZ1vPmAjZpomw9+5tWEGOQ0GTfR8U+kA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.2.tgz", + "integrity": "sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==", "dev": true, "requires": { - "@vitest/spy": "1.1.1", - "@vitest/utils": "1.1.1", + "@vitest/spy": "1.2.2", + "@vitest/utils": "1.2.2", "chai": "^4.3.10" } }, "@vitest/runner": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.1.1.tgz", - "integrity": "sha512-8HokyJo1SnSi3uPFKfWm/Oq1qDwLC4QDcVsqpXIXwsRPAg3gIDh8EbZ1ri8cmQkBxdOu62aOF9B4xcqJhvt4xQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.2.tgz", + "integrity": "sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==", "dev": true, "requires": { - "@vitest/utils": "1.1.1", + "@vitest/utils": "1.2.2", "p-limit": "^5.0.0", "pathe": "^1.1.1" }, @@ -7415,9 +7665,9 @@ } }, "@vitest/snapshot": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.1.1.tgz", - "integrity": "sha512-WnMHjv4VdHLbFGgCdVVvyRkRPnOKN75JJg+LLTdr6ah7YnL75W+7CTIMdzPEPzaDxA8r5yvSVlc1d8lH3yE28w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.2.tgz", + "integrity": "sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==", "dev": true, "requires": { "magic-string": "^0.30.5", @@ -7426,21 +7676,22 @@ } }, "@vitest/spy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.1.1.tgz", - "integrity": "sha512-hDU2KkOTfFp4WFFPWwHFauddwcKuGQ7gF6Un/ZZkCogoAiTMN7/7YKvUDbywPZZ754iCQGjdUmXN3t4k0jm1IQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.2.tgz", + "integrity": "sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==", "dev": true, "requires": { "tinyspy": "^2.2.0" } }, "@vitest/utils": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.1.1.tgz", - "integrity": "sha512-E9LedH093vST/JuBSyHLFMpxJKW3dLhe/flUSPFedoyj4wKiFX7Jm8gYLtOIiin59dgrssfmFv0BJ1u8P/LC/A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.2.tgz", + "integrity": "sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==", "dev": true, "requires": { "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", "loupe": "^2.3.7", "pretty-format": "^29.7.0" } @@ -7464,9 +7715,9 @@ "requires": {} }, "acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true }, "agent-base": { @@ -7547,6 +7798,17 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -7612,9 +7874,9 @@ "dev": true }, "chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "requires": { "assertion-error": "^1.1.0", @@ -8184,6 +8446,15 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -8323,6 +8594,12 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "dev": true + }, "foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -9194,6 +9471,12 @@ "tslib": "^2.0.3" } }, + "node-gyp-build": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "dev": true + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -9494,6 +9777,12 @@ } } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -10200,9 +10489,9 @@ "dev": true }, "tinypool": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz", - "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", "dev": true }, "tinyspy": { @@ -10432,9 +10721,9 @@ } }, "vite-node": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.1.1.tgz", - "integrity": "sha512-2bGE5w4jvym5v8llF6Gu1oBrmImoNSs4WmRVcavnG2me6+8UQntTqLiAMFyiAobp+ZXhj5ZFhI7SmLiFr/jrow==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.2.tgz", + "integrity": "sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==", "dev": true, "requires": { "cac": "^6.7.14", @@ -10445,17 +10734,17 @@ } }, "vitest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.1.1.tgz", - "integrity": "sha512-Ry2qs4UOu/KjpXVfOCfQkTnwSXYGrqTbBZxw6reIYEFjSy1QUARRg5pxiI5BEXy+kBVntxUYNMlq4Co+2vD3fQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.2.tgz", + "integrity": "sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==", "dev": true, "requires": { - "@vitest/expect": "1.1.1", - "@vitest/runner": "1.1.1", - "@vitest/snapshot": "1.1.1", - "@vitest/spy": "1.1.1", - "@vitest/utils": "1.1.1", - "acorn-walk": "^8.3.0", + "@vitest/expect": "1.2.2", + "@vitest/runner": "1.2.2", + "@vitest/snapshot": "1.2.2", + "@vitest/spy": "1.2.2", + "@vitest/utils": "1.2.2", + "acorn-walk": "^8.3.2", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", @@ -10467,9 +10756,9 @@ "std-env": "^3.5.0", "strip-literal": "^1.3.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.1", + "tinypool": "^0.8.2", "vite": "^5.0.0", - "vite-node": "1.1.1", + "vite-node": "1.2.2", "why-is-node-running": "^2.2.2" } }, diff --git a/package.json b/package.json index ebfee16575..b7c8504e21 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "sourceDir": "ext" }, "devDependencies": { + "@codspeed/vitest-plugin": "^3.1.0", "@playwright/test": "^1.39.0", "@stylistic/eslint-plugin-ts": "^1.5.1", "@stylistic/stylelint-plugin": "^2.0.0", diff --git a/vitest.config.js b/vitest.config.js index e0e72e6316..7603e92c15 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -14,9 +14,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + +import codspeedPlugin from '@codspeed/vitest-plugin'; import {configDefaults, defineConfig} from 'vitest/config'; export default defineConfig({ + plugins: [codspeedPlugin()], test: { exclude: [ ...configDefaults.exclude, From 4e0d086c50fe6ef329c6f4be6e5af2f8774538f4 Mon Sep 17 00:00:00 2001 From: Cashew Date: Sat, 3 Feb 2024 10:11:54 +0700 Subject: [PATCH 5/9] add benchmark GitHub action --- .github/workflows/bench.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/bench.yml diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml new file mode 100644 index 0000000000..e2a44837dd --- /dev/null +++ b/.github/workflows/bench.yml @@ -0,0 +1,32 @@ +name: Performance Benchmarks + +on: + push: + branches: [master] + pull_request: + merge_group: + workflow_dispatch: +jobs: + benchmark: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version-file: "package.json" + + - name: Install dependencies + run: npm ci + + - name: Build Libs + run: npm run build-libs + + - name: Run Benchmarks + uses: CodSpeedHQ/action@v2 + with: + token: ${{ secrets.CODSPEED_TOKEN }} + run: npm run bench From 8ce62eb6cc9ca34cd2c127159a288c24a7898b93 Mon Sep 17 00:00:00 2001 From: Cashew Date: Sat, 3 Feb 2024 10:44:30 +0700 Subject: [PATCH 6/9] add env --- .github/workflows/bench.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index e2a44837dd..0690b0837d 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -30,3 +30,5 @@ jobs: with: token: ${{ secrets.CODSPEED_TOKEN }} run: npm run bench + env: + CI: true From 726ebb158798e4611bd782ef97f414c74f71045e Mon Sep 17 00:00:00 2001 From: Cashew Date: Sat, 3 Feb 2024 10:49:28 +0700 Subject: [PATCH 7/9] revert change --- .github/workflows/bench.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index 0690b0837d..e2a44837dd 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -30,5 +30,3 @@ jobs: with: token: ${{ secrets.CODSPEED_TOKEN }} run: npm run bench - env: - CI: true From fbf494f2b73cd9bccd2969c15d4b3ad9b450b5cf Mon Sep 17 00:00:00 2001 From: Cashew Date: Sat, 3 Feb 2024 11:56:51 +0700 Subject: [PATCH 8/9] merge upstream --- ...ector.bench.js => language-transformer.bench.js} | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) rename benches/{deinflector.bench.js => language-transformer.bench.js} (82%) diff --git a/benches/deinflector.bench.js b/benches/language-transformer.bench.js similarity index 82% rename from benches/deinflector.bench.js rename to benches/language-transformer.bench.js index 850269ea61..9f22f02ad0 100644 --- a/benches/deinflector.bench.js +++ b/benches/language-transformer.bench.js @@ -20,13 +20,14 @@ import {fileURLToPath} from 'node:url'; import path from 'path'; import {bench, describe} from 'vitest'; import {parseJson} from '../dev/json.js'; -import {Deinflector} from '../ext/js/language/deinflector.js'; +import {LanguageTransformer} from '../ext/js/language/language-transformer.js'; const dirname = path.dirname(fileURLToPath(import.meta.url)); -/** @type {import('deinflector').ReasonsRaw} */ -const deinflectionReasons = parseJson(fs.readFileSync(path.join(dirname, '..', 'ext', 'data/deinflect.json'), {encoding: 'utf8'})); -const deinflector = new Deinflector(deinflectionReasons); +/** @type {import('language-transformer').LanguageTransformDescriptor} */ +const descriptor = parseJson(fs.readFileSync(path.join(dirname, '..', 'ext', 'data/language/japanese-transforms.json'), {encoding: 'utf8'})); +const languageTransformer = new LanguageTransformer(); +languageTransformer.addDescriptor(descriptor); describe('Deinflector basic tests', () => { const adjectiveInflections = [ @@ -96,8 +97,8 @@ describe('Deinflector basic tests', () => { ]; bench('deinflection', () => { - for (const inflection of [...adjectiveInflections, ...verbInflections, ...inflectionCombinations]) { - deinflector.deinflect(inflection); + for (const transform of [...adjectiveInflections, ...verbInflections, ...inflectionCombinations]) { + languageTransformer.transform(transform); } }); }); From 809c398bd099a2e8e11875442542743130c3c0fd Mon Sep 17 00:00:00 2001 From: Cashew Date: Sat, 3 Feb 2024 12:02:20 +0700 Subject: [PATCH 9/9] update names --- benches/language-transformer.bench.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benches/language-transformer.bench.js b/benches/language-transformer.bench.js index 9f22f02ad0..9d312fb737 100644 --- a/benches/language-transformer.bench.js +++ b/benches/language-transformer.bench.js @@ -29,7 +29,7 @@ const descriptor = parseJson(fs.readFileSync(path.join(dirname, '..', 'ext', 'da const languageTransformer = new LanguageTransformer(); languageTransformer.addDescriptor(descriptor); -describe('Deinflector basic tests', () => { +describe('Language transformer basic tests', () => { const adjectiveInflections = [ '愛しい', '愛しそう', @@ -96,7 +96,7 @@ describe('Deinflector basic tests', () => { '食べさせられたくなかった' ]; - bench('deinflection', () => { + bench('transformations', () => { for (const transform of [...adjectiveInflections, ...verbInflections, ...inflectionCombinations]) { languageTransformer.transform(transform); }