From 1a01a851827e22c88c1bd55eb76695322ecec277 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 08:39:38 +0900 Subject: [PATCH 01/17] perf(reversi): improve performance of reversi backend --- packages/backend/src/core/ReversiService.ts | 215 +++++++++----------- 1 file changed, 92 insertions(+), 123 deletions(-) diff --git a/packages/backend/src/core/ReversiService.ts b/packages/backend/src/core/ReversiService.ts index f97f71eb43..39177322f3 100644 --- a/packages/backend/src/core/ReversiService.ts +++ b/packages/backend/src/core/ReversiService.ts @@ -12,18 +12,14 @@ import { IsNull } from 'typeorm'; import type { MiReversiGame, ReversiGamesRepository, - UsersRepository, } from '@/models/_.js'; import type { MiUser } from '@/models/User.js'; import { DI } from '@/di-symbols.js'; import { bindThis } from '@/decorators.js'; -import { MetaService } from '@/core/MetaService.js'; import { CacheService } from '@/core/CacheService.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; -import type { GlobalEvents } from '@/core/GlobalEventService.js'; import { GlobalEventService } from '@/core/GlobalEventService.js'; import { IdService } from '@/core/IdService.js'; -import type { Packed } from '@/misc/json-schema.js'; import { NotificationService } from '@/core/NotificationService.js'; import { Serialized } from '@/types.js'; import { ReversiGameEntityService } from './entities/ReversiGameEntityService.js'; @@ -58,7 +54,7 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { @bindThis private async cacheGame(game: MiReversiGame) { - await this.redisClient.setex(`reversi:game:cache:${game.id}`, 60 * 3, JSON.stringify(game)); + await this.redisClient.setex(`reversi:game:cache:${game.id}`, 60 * 60, JSON.stringify(game)); } @bindThis @@ -66,6 +62,33 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { await this.redisClient.del(`reversi:game:cache:${gameId}`); } + @bindThis + private getBakeProps(game: MiReversiGame) { + return { + startedAt: game.startedAt, + endedAt: game.endedAt, + // ゲームの途中からユーザーが変わることは無いので + //user1Id: game.user1Id, + //user2Id: game.user2Id, + user1Ready: game.user1Ready, + user2Ready: game.user2Ready, + black: game.black, + isStarted: game.isStarted, + isEnded: game.isEnded, + winnerId: game.winnerId, + surrenderedUserId: game.surrenderedUserId, + timeoutUserId: game.timeoutUserId, + isLlotheo: game.isLlotheo, + canPutEverywhere: game.canPutEverywhere, + loopedBoard: game.loopedBoard, + timeLimitForEachTurn: game.timeLimitForEachTurn, + logs: game.logs, + map: game.map, + bw: game.bw, + crc32: game.crc32, + } satisfies Partial; + } + @bindThis public async matchSpecificUser(me: MiUser, targetUser: MiUser): Promise { if (targetUser.id === me.id) { @@ -204,14 +227,10 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { let isBothReady = false; if (game.user1Id === user.id) { - const updatedGame = await this.reversiGamesRepository.createQueryBuilder().update() - .set({ - user1Ready: ready, - }) - .where('id = :id', { id: game.id }) - .returning('*') - .execute() - .then((response) => response.raw[0]); + const updatedGame = { + ...game, + user1Ready: ready, + }; this.cacheGame(updatedGame); this.globalEventService.publishReversiGameStream(game.id, 'changeReadyStates', { @@ -221,14 +240,10 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { if (ready && updatedGame.user2Ready) isBothReady = true; } else if (game.user2Id === user.id) { - const updatedGame = await this.reversiGamesRepository.createQueryBuilder().update() - .set({ - user2Ready: ready, - }) - .where('id = :id', { id: game.id }) - .returning('*') - .execute() - .then((response) => response.raw[0]); + const updatedGame = { + ...game, + user2Ready: ready, + }; this.cacheGame(updatedGame); this.globalEventService.publishReversiGameStream(game.id, 'changeReadyStates', { @@ -262,22 +277,15 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { bw = parseInt(game.bw, 10); } - function getRandomMap() { - const mapCount = Object.entries(Reversi.maps).length; - const rnd = Math.floor(Math.random() * mapCount); - return Object.values(Reversi.maps)[rnd].data; - } - - const map = game.map != null ? game.map : getRandomMap(); - const crc32 = CRC32.str(JSON.stringify(game.logs)).toString(); const updatedGame = await this.reversiGamesRepository.createQueryBuilder().update() .set({ + ...this.getBakeProps(game), startedAt: new Date(), isStarted: true, black: bw, - map: map, + map: game.map, crc32, }) .where('id = :id', { id: game.id }) @@ -287,38 +295,23 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { this.cacheGame(updatedGame); //#region 盤面に最初から石がないなどして始まった瞬間に勝敗が決定する場合があるのでその処理 - const engine = new Reversi.Game(map, { - isLlotheo: game.isLlotheo, - canPutEverywhere: game.canPutEverywhere, - loopedBoard: game.loopedBoard, + const engine = new Reversi.Game(updatedGame.map, { + isLlotheo: updatedGame.isLlotheo, + canPutEverywhere: updatedGame.canPutEverywhere, + loopedBoard: updatedGame.loopedBoard, }); if (engine.isEnded) { - let winner; + let winnerId; if (engine.winner === true) { - winner = bw === 1 ? game.user1Id : game.user2Id; + winnerId = bw === 1 ? updatedGame.user1Id : updatedGame.user2Id; } else if (engine.winner === false) { - winner = bw === 1 ? game.user2Id : game.user1Id; + winnerId = bw === 1 ? updatedGame.user2Id : updatedGame.user1Id; } else { - winner = null; + winnerId = null; } - const updatedGame = await this.reversiGamesRepository.createQueryBuilder().update() - .set({ - isEnded: true, - endedAt: new Date(), - winnerId: winner, - }) - .where('id = :id', { id: game.id }) - .returning('*') - .execute() - .then((response) => response.raw[0]); - this.cacheGame(updatedGame); - - this.globalEventService.publishReversiGameStream(game.id, 'ended', { - winnerId: winner, - game: await this.reversiGameEntityService.packDetail(game.id), - }); + await this.endGame(updatedGame, winnerId, null); return; } @@ -327,7 +320,30 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { this.redisClient.setex(`reversi:game:turnTimer:${game.id}:1`, updatedGame.timeLimitForEachTurn, ''); this.globalEventService.publishReversiGameStream(game.id, 'started', { - game: await this.reversiGameEntityService.packDetail(game.id), + game: await this.reversiGameEntityService.packDetail(updatedGame), + }); + } + + @bindThis + private async endGame(game: MiReversiGame, winnerId: MiUser['id'] | null, reason: 'surrender' | 'timeout' | null) { + const updatedGame = await this.reversiGamesRepository.createQueryBuilder().update() + .set({ + ...this.getBakeProps(game), + isEnded: true, + endedAt: new Date(), + winnerId: winnerId, + surrenderedUserId: reason === 'surrender' ? (winnerId === game.user1Id ? game.user2Id : game.user1Id) : null, + timeoutUserId: reason === 'timeout' ? (winnerId === game.user1Id ? game.user2Id : game.user1Id) : null, + }) + .where('id = :id', { id: game.id }) + .returning('*') + .execute() + .then((response) => response.raw[0]); + this.cacheGame(updatedGame); + + this.globalEventService.publishReversiGameStream(game.id, 'ended', { + winnerId: winnerId, + game: await this.reversiGameEntityService.packDetail(updatedGame), }); } @@ -354,14 +370,10 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { // TODO: より厳格なバリデーション - const updatedGame = await this.reversiGamesRepository.createQueryBuilder().update() - .set({ - [key]: value, - }) - .where('id = :id', { id: game.id }) - .returning('*') - .execute() - .then((response) => response.raw[0]); + const updatedGame = { + ...game, + [key]: value, + }; this.cacheGame(updatedGame); this.globalEventService.publishReversiGameStream(game.id, 'updateSettings', { @@ -397,17 +409,6 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { engine.putStone(pos); - let winner; - if (engine.isEnded) { - if (engine.winner === true) { - winner = game.black === 1 ? game.user1Id : game.user2Id; - } else if (engine.winner === false) { - winner = game.black === 1 ? game.user2Id : game.user1Id; - } else { - winner = null; - } - } - const logs = Reversi.Serializer.deserializeLogs(game.logs); const log = { @@ -423,17 +424,11 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { const crc32 = CRC32.str(JSON.stringify(serializeLogs)).toString(); - const updatedGame = await this.reversiGamesRepository.createQueryBuilder().update() - .set({ - crc32, - isEnded: engine.isEnded, - winnerId: winner, - logs: serializeLogs, - }) - .where('id = :id', { id: game.id }) - .returning('*') - .execute() - .then((response) => response.raw[0]); + const updatedGame = { + ...game, + crc32, + logs: serializeLogs, + }; this.cacheGame(updatedGame); this.globalEventService.publishReversiGameStream(game.id, 'log', { @@ -442,10 +437,16 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { }); if (engine.isEnded) { - this.globalEventService.publishReversiGameStream(game.id, 'ended', { - winnerId: winner ?? null, - game: await this.reversiGameEntityService.packDetail(game.id), - }); + let winnerId; + if (engine.winner === true) { + winnerId = game.black === 1 ? game.user1Id : game.user2Id; + } else if (engine.winner === false) { + winnerId = game.black === 1 ? game.user2Id : game.user1Id; + } else { + winnerId = null; + } + + await this.endGame(updatedGame, winnerId, null); } else { this.redisClient.setex(`reversi:game:turnTimer:${game.id}:${engine.turn ? '1' : '0'}`, updatedGame.timeLimitForEachTurn, ''); } @@ -460,23 +461,7 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { const winnerId = game.user1Id === user.id ? game.user2Id : game.user1Id; - const updatedGame = await this.reversiGamesRepository.createQueryBuilder().update() - .set({ - isEnded: true, - endedAt: new Date(), - winnerId: winnerId, - surrenderedUserId: user.id, - }) - .where('id = :id', { id: game.id }) - .returning('*') - .execute() - .then((response) => response.raw[0]); - this.cacheGame(updatedGame); - - this.globalEventService.publishReversiGameStream(game.id, 'ended', { - winnerId: winnerId, - game: await this.reversiGameEntityService.packDetail(game.id), - }); + await this.endGame(game, winnerId, 'surrender'); } @bindThis @@ -500,23 +485,7 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { if (timer === 0) { const winnerId = engine.turn ? (game.black === 1 ? game.user2Id : game.user1Id) : (game.black === 1 ? game.user1Id : game.user2Id); - const updatedGame = await this.reversiGamesRepository.createQueryBuilder().update() - .set({ - isEnded: true, - endedAt: new Date(), - winnerId: winnerId, - timeoutUserId: engine.turn ? (game.black === 1 ? game.user1Id : game.user2Id) : (game.black === 1 ? game.user2Id : game.user1Id), - }) - .where('id = :id', { id: game.id }) - .returning('*') - .execute() - .then((response) => response.raw[0]); - this.cacheGame(updatedGame); - - this.globalEventService.publishReversiGameStream(game.id, 'ended', { - winnerId: winnerId, - game: await this.reversiGameEntityService.packDetail(game.id), - }); + await this.endGame(game, winnerId, 'timeout'); } } From 9eb0468cd289bae09dc59a20b298e052d63350ac Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 09:14:45 +0900 Subject: [PATCH 02/17] 2024.2.0-beta.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 13d1cc8e22..b4aafbf94e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2023.12.2", + "version": "2024.2.0-beta.1", "codename": "nasubi", "repository": { "type": "git", From 4f95b8d9d2dec6dd1e9069372abd7cf605e63d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Mon, 22 Jan 2024 09:20:56 +0900 Subject: [PATCH 03/17] =?UTF-8?q?fix(frontend/pizzax):=20=E3=83=87?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E5=80=A4=E3=81=8C=E9=81=A9?= =?UTF-8?q?=E7=94=A8=E3=81=A7=E3=81=8D=E3=81=AA=E3=81=84=E3=81=93=E3=81=A8?= =?UTF-8?q?=E3=81=8C=E3=81=82=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20(#13057)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(frontend/pizzax): デフォルト値が適用できないことがあるのを修正 * fix * いらんプロパティをけす --- packages/frontend/package.json | 3 +- packages/frontend/src/pages/timeline.vue | 20 ++- packages/frontend/src/pizzax.ts | 19 ++- pnpm-lock.yaml | 167 +++++++---------------- 4 files changed, 75 insertions(+), 134 deletions(-) diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 6dffc2a3f4..fb819b2420 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -44,6 +44,7 @@ "crc-32": "^1.2.2", "cropperjs": "2.0.0-beta.4", "date-fns": "2.30.0", + "defu": "^6.1.4", "escape-regexp": "0.0.1", "estree-walker": "3.0.3", "eventemitter3": "5.0.1", @@ -53,9 +54,9 @@ "json5": "2.2.3", "matter-js": "0.19.0", "mfm-js": "0.24.0", + "misskey-bubble-game": "workspace:*", "misskey-js": "workspace:*", "misskey-reversi": "workspace:*", - "misskey-bubble-game": "workspace:*", "photoswipe": "5.4.3", "punycode": "2.3.1", "rollup": "4.9.6", diff --git a/packages/frontend/src/pages/timeline.vue b/packages/frontend/src/pages/timeline.vue index 3481113f87..5a71b18afe 100644 --- a/packages/frontend/src/pages/timeline.vue +++ b/packages/frontend/src/pages/timeline.vue @@ -71,9 +71,8 @@ const src = computed({ set: (x) => saveSrc(x), }); const withRenotes = computed({ - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - get: () => (defaultStore.reactiveState.tl.value.filter?.withRenotes ?? saveTlFilter('withRenotes', true)), - set: (x) => saveTlFilter('withRenotes', x), + get: () => defaultStore.reactiveState.tl.value.filter.withRenotes, + set: (x: boolean) => saveTlFilter('withRenotes', x), }); const withReplies = computed({ get: () => { @@ -81,27 +80,24 @@ const withReplies = computed({ if (['local', 'social'].includes(src.value) && onlyFiles.value) { return false; } else { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - return defaultStore.reactiveState.tl.value.filter?.withReplies ?? saveTlFilter('withReplies', true); + return defaultStore.reactiveState.tl.value.filter.withReplies; } }, - set: (x) => saveTlFilter('withReplies', x), + set: (x: boolean) => saveTlFilter('withReplies', x), }); const onlyFiles = computed({ get: () => { if (['local', 'social'].includes(src.value) && withReplies.value) { return false; } else { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - return defaultStore.reactiveState.tl.value.filter?.onlyFiles ?? saveTlFilter('onlyFiles', false); + return defaultStore.reactiveState.tl.value.filter.onlyFiles; } }, - set: (x) => saveTlFilter('onlyFiles', x), + set: (x: boolean) => saveTlFilter('onlyFiles', x), }); const withSensitive = computed({ - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - get: () => (defaultStore.reactiveState.tl.value.filter?.withSensitive ?? saveTlFilter('withSensitive', true)), - set: (x) => { + get: () => defaultStore.reactiveState.tl.value.filter.withSensitive, + set: (x: boolean) => { saveTlFilter('withSensitive', x); // これだけはクライアント側で完結する処理なので手動でリロード diff --git a/packages/frontend/src/pizzax.ts b/packages/frontend/src/pizzax.ts index 8723110b08..b3d2374899 100644 --- a/packages/frontend/src/pizzax.ts +++ b/packages/frontend/src/pizzax.ts @@ -7,6 +7,7 @@ import { onUnmounted, Ref, ref, watch } from 'vue'; import { BroadcastChannel } from 'broadcast-channel'; +import { defu } from 'defu'; import { $i } from '@/account.js'; import { misskeyApi } from '@/scripts/misskey-api.js'; import { get, set } from '@/scripts/idb-proxy.js'; @@ -80,6 +81,18 @@ export class Storage { this.loaded = this.ready.then(() => this.load()); } + private isPureObject(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value); + } + + private mergeState(value: T, def: T): T { + if (this.isPureObject(value) && this.isPureObject(def)) { + if (_DEV_) console.log('Merging state. Incoming: ', value, ' Default: ', def); + return defu(value, def) as T; + } + return value; + } + private async init(): Promise { await this.migrate(); @@ -89,11 +102,11 @@ export class Storage { for (const [k, v] of Object.entries(this.def) as [keyof T, T[keyof T]['default']][]) { if (v.where === 'device' && Object.prototype.hasOwnProperty.call(deviceState, k)) { - this.reactiveState[k].value = this.state[k] = deviceState[k]; + this.reactiveState[k].value = this.state[k] = this.mergeState(deviceState[k], v.default); } else if (v.where === 'account' && $i && Object.prototype.hasOwnProperty.call(registryCache, k)) { - this.reactiveState[k].value = this.state[k] = registryCache[k]; + this.reactiveState[k].value = this.state[k] = this.mergeState(registryCache[k], v.default); } else if (v.where === 'deviceAccount' && Object.prototype.hasOwnProperty.call(deviceAccountState, k)) { - this.reactiveState[k].value = this.state[k] = deviceAccountState[k]; + this.reactiveState[k].value = this.state[k] = this.mergeState(deviceAccountState[k], v.default); } else { this.reactiveState[k].value = this.state[k] = v.default; if (_DEV_) console.log('Use default value', k, v.default); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b752b8ae40..83c51bd2db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -751,6 +751,9 @@ importers: date-fns: specifier: 2.30.0 version: 2.30.0 + defu: + specifier: ^6.1.4 + version: 6.1.4 escape-regexp: specifier: 0.0.1 version: 0.0.1 @@ -1009,7 +1012,7 @@ importers: version: 7.6.10 storybook-addon-misskey-theme: specifier: github:misskey-dev/storybook-addon-misskey-theme - version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.6.10)(@storybook/components@7.6.5)(@storybook/core-events@7.6.10)(@storybook/manager-api@7.6.10)(@storybook/preview-api@7.6.10)(@storybook/theming@7.6.10)(@storybook/types@7.6.10)(react-dom@18.2.0)(react@18.2.0) + version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.6.10)(@storybook/components@7.6.10)(@storybook/core-events@7.6.10)(@storybook/manager-api@7.6.10)(@storybook/preview-api@7.6.10)(@storybook/theming@7.6.10)(@storybook/types@7.6.10)(react-dom@18.2.0)(react@18.2.0) vite-plugin-turbosnap: specifier: 1.0.3 version: 1.0.3 @@ -1896,7 +1899,7 @@ packages: '@babel/traverse': 7.22.11 '@babel/types': 7.22.17 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -1919,7 +1922,7 @@ packages: '@babel/traverse': 7.23.5 '@babel/types': 7.23.5 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -2021,7 +2024,7 @@ packages: '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -3420,7 +3423,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.5 '@babel/types': 7.22.17 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3438,7 +3441,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.6 '@babel/types': 7.23.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4154,7 +4157,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.19.0 ignore: 5.2.4 @@ -4171,7 +4174,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.19.0 ignore: 5.2.4 @@ -4406,7 +4409,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -6787,17 +6790,6 @@ packages: tiny-invariant: 1.3.1 dev: true - /@storybook/channels@7.6.5: - resolution: {integrity: sha512-FIlNkyfQy9uHoJfAFL2/wO3ASGJELFvBzURBE2rcEF/TS7GcUiqWnBfiDxAbwSEjSOm2F0eEq3UXhaZEjpJHDw==} - dependencies: - '@storybook/client-logger': 7.6.5 - '@storybook/core-events': 7.6.5 - '@storybook/global': 5.0.0 - qs: 6.11.1 - telejson: 7.2.0 - tiny-invariant: 1.3.1 - dev: true - /@storybook/cli@7.6.10: resolution: {integrity: sha512-pK1MEseMm73OMO2OVoSz79QWX8ymxgIGM8IeZTCo9gImiVRChMNDFYcv8yPWkjuyesY8c15CoO48aR7pdA1OjQ==} hasBin: true @@ -6855,12 +6847,6 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.6.5: - resolution: {integrity: sha512-S5aROWgssqg7tcs9lgW5wmCAz4SxMAtioiyVj5oFecmPCbQtFVIAREYzeoxE4GfJL+plrfRkum4BzziANn8EhQ==} - dependencies: - '@storybook/global': 5.0.0 - dev: true - /@storybook/codemod@7.6.10: resolution: {integrity: sha512-pzFR0nocBb94vN9QCJLC3C3dP734ZigqyPmd0ZCDj9Xce2ytfHK3v1lKB6TZWzKAZT8zztauECYxrbo4LVuagw==} dependencies: @@ -6905,29 +6891,6 @@ packages: - '@types/react-dom' dev: true - /@storybook/components@7.6.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-w4ZucbBBZ+NKMWlJKVj2I/bMBBq7gzDp9lzc4+8QaQ3vUPXKqc1ilIPYo/7UR5oxwDVMZocmMSgl9L8lvf7+Mw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@radix-ui/react-select': 1.2.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toolbar': 1.0.4(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.6.5 - '@storybook/csf': 0.1.2 - '@storybook/global': 5.0.0 - '@storybook/theming': 7.6.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.6.5 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0) - util-deprecate: 1.0.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - dev: true - /@storybook/core-client@7.6.10: resolution: {integrity: sha512-DjnzSzSNDmZyxyg6TxugzWQwOsW+n/iWVv6sHNEvEd5STr0mjuJjIEELmv58LIr5Lsre5+LEddqHsyuLyt8ubg==} dependencies: @@ -6972,12 +6935,6 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/core-events@7.6.5: - resolution: {integrity: sha512-zk2q/qicYXAzHA4oV3GDbIql+Kd4TOHUgDE8e4jPCOPp856z2ScqEKUAbiJizs6eEJOH4nW9Db1kuzgrBVEykQ==} - dependencies: - ts-dedent: 2.2.0 - dev: true - /@storybook/core-server@7.6.10: resolution: {integrity: sha512-2icnqJkn3vwq0eJPP0rNaHd7IOvxYf5q4lSVl2AWTxo/Ae19KhokI6j/2vvS2XQJMGQszwshlIwrZUNsj5p0yw==} dependencies: @@ -7296,20 +7253,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/theming@7.6.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-RpcWT0YEgiobO41McVPDfQQHHFnjyr1sJnNTPJIvOUgSfURdgSj17mQVxtD5xcXcPWUdle5UhIOrCixHbL/NNw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) - '@storybook/client-logger': 7.6.5 - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@storybook/types@7.6.10: resolution: {integrity: sha512-hcS2HloJblaMpCAj2axgGV+53kgSRYPT0a1PG1IHsZaYQILfHSMmBqM8XzXXYTsgf9250kz3dqFX1l0n3EqMlQ==} dependencies: @@ -7319,15 +7262,6 @@ packages: file-system-cache: 2.3.0 dev: true - /@storybook/types@7.6.5: - resolution: {integrity: sha512-Q757v+fYZZSaEpks/zDL5YgXRozxkgKakXFc+BoQHK5q5sVhJ+0jvpLJiAQAniIIaMIkqY/G24Kd6Uo6UdKBCg==} - dependencies: - '@storybook/channels': 7.6.5 - '@types/babel__core': 7.20.0 - '@types/express': 4.17.17 - file-system-cache: 2.3.0 - dev: true - /@storybook/vue3-vite@7.6.10(typescript@5.3.3)(vite@5.0.12)(vue@3.4.15): resolution: {integrity: sha512-5f0Rh4PTVEeAI86ybihfN+rHGXXLNiRsoGKinpJSb7hkfsq/L7u3sVCXJwH/qsG+rUJlZyHs3kfa4/Kgyyi3Mg==} engines: {node: ^14.18 || >=16} @@ -8503,7 +8437,7 @@ packages: '@typescript-eslint/type-utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.53.0 graphemer: 1.4.0 ignore: 5.2.4 @@ -8532,7 +8466,7 @@ packages: '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.2.4 @@ -8558,7 +8492,7 @@ packages: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.53.0 typescript: 5.3.3 transitivePeerDependencies: @@ -8579,7 +8513,7 @@ packages: '@typescript-eslint/types': 6.19.0 '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: @@ -8614,7 +8548,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.3.3) '@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.53.0 ts-api-utils: 1.0.1(typescript@5.3.3) typescript: 5.3.3 @@ -8634,7 +8568,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.56.0 ts-api-utils: 1.0.1(typescript@5.3.3) typescript: 5.3.3 @@ -8663,7 +8597,7 @@ packages: dependencies: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -8684,7 +8618,7 @@ packages: dependencies: '@typescript-eslint/types': 6.19.0 '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -8798,7 +8732,7 @@ packages: dependencies: '@ampproject/remapping': 2.2.1 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 @@ -9151,7 +9085,7 @@ packages: engines: {node: '>= 6.0.0'} requiresBuild: true dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -9159,7 +9093,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -9545,7 +9479,7 @@ packages: resolution: {integrity: sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==} dependencies: archy: 1.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) fastq: 1.15.0 transitivePeerDependencies: - supports-color @@ -10994,7 +10928,6 @@ packages: dependencies: ms: 2.1.2 supports-color: 5.5.0 - dev: true /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -11007,6 +10940,7 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 + dev: true /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -11147,9 +11081,8 @@ packages: object-keys: 1.1.1 dev: true - /defu@6.1.2: - resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} - dev: true + /defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} /del@6.1.1: resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} @@ -11223,7 +11156,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -11547,7 +11480,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) esbuild: 0.18.20 transitivePeerDependencies: - supports-color @@ -11856,7 +11789,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -11903,7 +11836,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -12533,7 +12466,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -12834,7 +12767,7 @@ packages: hasBin: true dependencies: colorette: 2.0.19 - defu: 6.1.2 + defu: 6.1.4 https-proxy-agent: 5.0.1 mri: 1.2.0 node-fetch-native: 1.0.2 @@ -13089,7 +13022,6 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -13227,7 +13159,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -13287,7 +13219,7 @@ packages: engines: {node: '>= 6.0.0'} dependencies: agent-base: 5.1.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -13297,7 +13229,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -13306,7 +13238,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -13466,7 +13398,7 @@ packages: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -13912,7 +13844,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -17245,7 +17177,7 @@ packages: engines: {node: '>=8.16.0'} dependencies: '@types/mime-types': 2.1.4 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) extract-zip: 1.7.0 https-proxy-agent: 4.0.0 mime: 2.6.0 @@ -18245,7 +18177,7 @@ packages: dependencies: '@hapi/hoek': 10.0.1 '@hapi/wreck': 18.0.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) joi: 17.7.0 transitivePeerDependencies: - supports-color @@ -18445,7 +18377,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -18598,7 +18530,7 @@ packages: arg: 5.0.2 bluebird: 3.7.2 check-more-types: 2.24.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) execa: 5.1.1 lazy-ass: 1.6.0 ps-tree: 1.2.0 @@ -18856,7 +18788,6 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -19477,7 +19408,7 @@ packages: chalk: 4.1.2 cli-highlight: 2.1.11 dayjs: 1.11.10 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) dotenv: 16.0.3 glob: 10.3.10 ioredis: 5.3.2 @@ -19837,7 +19768,7 @@ packages: hasBin: true dependencies: cac: 6.7.14 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) pathe: 1.1.1 picocolors: 1.0.0 vite: 5.0.12(@types/node@20.11.5)(sass@1.70.0)(terser@5.27.0) @@ -19939,7 +19870,7 @@ packages: acorn-walk: 8.3.2 cac: 6.7.14 chai: 4.3.10 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) execa: 8.0.1 happy-dom: 10.0.3 local-pkg: 0.5.0 @@ -20022,7 +19953,7 @@ packages: peerDependencies: eslint: '>=6.0.0' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.56.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 @@ -20541,7 +20472,7 @@ packages: engines: {vscode: ^1.83.0} dev: false - github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.6.10)(@storybook/components@7.6.5)(@storybook/core-events@7.6.10)(@storybook/manager-api@7.6.10)(@storybook/preview-api@7.6.10)(@storybook/theming@7.6.10)(@storybook/types@7.6.10)(react-dom@18.2.0)(react@18.2.0): + github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.6.10)(@storybook/components@7.6.10)(@storybook/core-events@7.6.10)(@storybook/manager-api@7.6.10)(@storybook/preview-api@7.6.10)(@storybook/theming@7.6.10)(@storybook/types@7.6.10)(react-dom@18.2.0)(react@18.2.0): resolution: {tarball: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640} id: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640 name: storybook-addon-misskey-theme @@ -20563,7 +20494,7 @@ packages: optional: true dependencies: '@storybook/blocks': 7.6.10(react-dom@18.2.0)(react@18.2.0) - '@storybook/components': 7.6.5(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.6.10(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 7.6.10 '@storybook/manager-api': 7.6.10(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': 7.6.10 From a431dde53765fd362874dbf51810296e0952cb63 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 09:29:06 +0900 Subject: [PATCH 04/17] refactor(reversi): refactoring of reversi backend --- packages/backend/src/core/ReversiService.ts | 77 +++++++-------------- 1 file changed, 26 insertions(+), 51 deletions(-) diff --git a/packages/backend/src/core/ReversiService.ts b/packages/backend/src/core/ReversiService.ts index 39177322f3..0e59d0308d 100644 --- a/packages/backend/src/core/ReversiService.ts +++ b/packages/backend/src/core/ReversiService.ts @@ -104,23 +104,7 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { if (invitations.includes(targetUser.id)) { await this.redisClient.zrem(`reversi:matchSpecific:${me.id}`, targetUser.id); - const game = await this.reversiGamesRepository.insert({ - id: this.idService.gen(), - user1Id: targetUser.id, - user2Id: me.id, - user1Ready: false, - user2Ready: false, - isStarted: false, - isEnded: false, - logs: [], - map: Reversi.maps.eighteight.data, - bw: 'random', - isLlotheo: false, - }).then(x => this.reversiGamesRepository.findOneByOrFail(x.identifiers[0])); - this.cacheGame(game); - - const packed = await this.reversiGameEntityService.packDetail(game, { id: targetUser.id }); - this.globalEventService.publishReversiStream(targetUser.id, 'matched', { game: packed }); + const game = await this.matched(targetUser.id, me.id); return game; } else { @@ -147,23 +131,7 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { const invitorId = invitations[Math.floor(Math.random() * invitations.length)]; await this.redisClient.zrem(`reversi:matchSpecific:${me.id}`, invitorId); - const game = await this.reversiGamesRepository.insert({ - id: this.idService.gen(), - user1Id: invitorId, - user2Id: me.id, - user1Ready: false, - user2Ready: false, - isStarted: false, - isEnded: false, - logs: [], - map: Reversi.maps.eighteight.data, - bw: 'random', - isLlotheo: false, - }).then(x => this.reversiGamesRepository.findOneByOrFail(x.identifiers[0])); - this.cacheGame(game); - - const packed = await this.reversiGameEntityService.packDetail(game, { id: invitorId }); - this.globalEventService.publishReversiStream(invitorId, 'matched', { game: packed }); + const game = await this.matched(invitorId, me.id); return game; } @@ -183,23 +151,7 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { await this.redisClient.zrem('reversi:matchAny', me.id, matchedUserId); - const game = await this.reversiGamesRepository.insert({ - id: this.idService.gen(), - user1Id: matchedUserId, - user2Id: me.id, - user1Ready: false, - user2Ready: false, - isStarted: false, - isEnded: false, - logs: [], - map: Reversi.maps.eighteight.data, - bw: 'random', - isLlotheo: false, - }).then(x => this.reversiGamesRepository.findOneByOrFail(x.identifiers[0])); - this.cacheGame(game); - - const packed = await this.reversiGameEntityService.packDetail(game, { id: matchedUserId }); - this.globalEventService.publishReversiStream(matchedUserId, 'matched', { game: packed }); + const game = await this.matched(matchedUserId, me.id); return game; } else { @@ -268,6 +220,29 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { } } + @bindThis + private async matched(parentId: MiUser['id'], childId: MiUser['id']): Promise { + const game = await this.reversiGamesRepository.insert({ + id: this.idService.gen(), + user1Id: parentId, + user2Id: childId, + user1Ready: false, + user2Ready: false, + isStarted: false, + isEnded: false, + logs: [], + map: Reversi.maps.eighteight.data, + bw: 'random', + isLlotheo: false, + }).then(x => this.reversiGamesRepository.findOneByOrFail(x.identifiers[0])); + this.cacheGame(game); + + const packed = await this.reversiGameEntityService.packDetail(game, { id: parentId }); + this.globalEventService.publishReversiStream(parentId, 'matched', { game: packed }); + + return game; + } + @bindThis private async startGame(game: MiReversiGame) { let bw: number; From 0cfeb427864cdc394db11ed8f65e5324f6db0c67 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 09:29:26 +0900 Subject: [PATCH 05/17] New Crowdin updates (#13056) * New translations ja-jp.yml (French) * New translations ja-jp.yml (Thai) * New translations ja-jp.yml (Lao) * New translations ja-jp.yml (Chinese Traditional) * New translations ja-jp.yml (Romanian) * New translations ja-jp.yml (Spanish) * New translations ja-jp.yml (Arabic) * New translations ja-jp.yml (Catalan) * New translations ja-jp.yml (Czech) * New translations ja-jp.yml (Danish) * New translations ja-jp.yml (German) * New translations ja-jp.yml (Greek) * New translations ja-jp.yml (Hungarian) * New translations ja-jp.yml (Italian) * New translations ja-jp.yml (Korean) * New translations ja-jp.yml (Dutch) * New translations ja-jp.yml (Norwegian) * New translations ja-jp.yml (Polish) * New translations ja-jp.yml (Portuguese) * New translations ja-jp.yml (Russian) * New translations ja-jp.yml (Slovak) * New translations ja-jp.yml (Swedish) * New translations ja-jp.yml (Turkish) * New translations ja-jp.yml (Ukrainian) * New translations ja-jp.yml (Chinese Simplified) * New translations ja-jp.yml (English) * New translations ja-jp.yml (Vietnamese) * New translations ja-jp.yml (Indonesian) * New translations ja-jp.yml (Bengali) * New translations ja-jp.yml (Croatian) * New translations ja-jp.yml (Uyghur) * New translations ja-jp.yml (Lojban) * New translations ja-jp.yml (Sinhala) * New translations ja-jp.yml (Uzbek) * New translations ja-jp.yml (Kannada) * New translations ja-jp.yml (Haitian Creole) * New translations ja-jp.yml (Kabyle) * New translations ja-jp.yml (Japanese, Kansai) * New translations ja-jp.yml (Korean (Gyeongsang)) * New translations ja-jp.yml (Chinese Simplified) * New translations ja-jp.yml (Chinese Traditional) * New translations ja-jp.yml (Chinese Traditional) --- locales/ar-SA.yml | 1 + locales/bn-BD.yml | 1 + locales/ca-ES.yml | 1 + locales/cs-CZ.yml | 1 + locales/da-DK.yml | 1 + locales/de-DE.yml | 1 + locales/el-GR.yml | 1 + locales/en-US.yml | 1 + locales/es-ES.yml | 1 + locales/fr-FR.yml | 1 + locales/hr-HR.yml | 1 + locales/ht-HT.yml | 1 + locales/hu-HU.yml | 1 + locales/id-ID.yml | 1 + locales/it-IT.yml | 1 + locales/ja-KS.yml | 1 + locales/jbo-EN.yml | 1 + locales/kab-KAB.yml | 1 + locales/kn-IN.yml | 1 + locales/ko-GS.yml | 1 + locales/ko-KR.yml | 1 + locales/lo-LA.yml | 1 + locales/nl-NL.yml | 1 + locales/no-NO.yml | 1 + locales/pl-PL.yml | 1 + locales/pt-PT.yml | 1 + locales/ro-RO.yml | 1 + locales/ru-RU.yml | 1 + locales/si-LK.yml | 1 + locales/sk-SK.yml | 1 + locales/sv-SE.yml | 1 + locales/th-TH.yml | 1 + locales/tr-TR.yml | 1 + locales/ug-CN.yml | 1 + locales/uk-UA.yml | 1 + locales/uz-UZ.yml | 1 + locales/vi-VN.yml | 1 + locales/zh-CN.yml | 7 +++++++ locales/zh-TW.yml | 46 +++++++++++++++++++++++++++++++++++++++++++++ 39 files changed, 90 insertions(+) diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml index a1e68691f9..47f131032a 100644 --- a/locales/ar-SA.yml +++ b/locales/ar-SA.yml @@ -1567,3 +1567,4 @@ _moderationLogTypes: createInvitation: "ولِّد دعوة" _reversi: total: "المجموع" + diff --git a/locales/bn-BD.yml b/locales/bn-BD.yml index 427c2d90cc..42edad1fd0 100644 --- a/locales/bn-BD.yml +++ b/locales/bn-BD.yml @@ -1346,3 +1346,4 @@ _moderationLogTypes: resetPassword: "পাসওয়ার্ড রিসেট করুন" _reversi: total: "মোট" + diff --git a/locales/ca-ES.yml b/locales/ca-ES.yml index 7a4944cd1f..b2b0ee0d5a 100644 --- a/locales/ca-ES.yml +++ b/locales/ca-ES.yml @@ -1276,3 +1276,4 @@ _moderationLogTypes: resetPassword: "Restableix la contrasenya" _reversi: total: "Total" + diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index 025497a442..8620a1207c 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -2022,3 +2022,4 @@ _moderationLogTypes: createInvitation: "Vygenerovat pozvánku" _reversi: total: "Celkem" + diff --git a/locales/da-DK.yml b/locales/da-DK.yml index 08c15ed092..d1fbec9f67 100644 --- a/locales/da-DK.yml +++ b/locales/da-DK.yml @@ -1,2 +1,3 @@ --- _lang_: "Dansk" + diff --git a/locales/de-DE.yml b/locales/de-DE.yml index a4bf41d917..45e20d8541 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -2244,3 +2244,4 @@ _externalResourceInstaller: description: "Während der Installation des Farbschemas ist ein Problem aufgetreten. Bitte versuche es erneut. Detaillierte Fehlerinformationen können über die Javascript-Konsole abgerufen werden." _reversi: total: "Gesamt" + diff --git a/locales/el-GR.yml b/locales/el-GR.yml index 2098c7ef50..bb5639a741 100644 --- a/locales/el-GR.yml +++ b/locales/el-GR.yml @@ -398,3 +398,4 @@ _moderationLogTypes: suspend: "Αποβολή" _reversi: total: "Σύνολο" + diff --git a/locales/en-US.yml b/locales/en-US.yml index c5a8976d5d..fb4cb0a346 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -2354,3 +2354,4 @@ _dataSaver: description: "If code highlighting notations are used in MFM, etc., they will not load until tapped. Syntax highlighting requires downloading the highlight definition files for each programming language. Therefore, disabling the automatic loading of these files is expected to reduce the amount of communication data." _reversi: total: "Total" + diff --git a/locales/es-ES.yml b/locales/es-ES.yml index ab29462804..d4c0d6c4ad 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -2428,3 +2428,4 @@ _dataSaver: description: "Si se usa resaltado de código en MFM, etc., no se cargará hasta pulsar en ello. El resaltado de sintaxis requiere la descarga de archivos de definición para cada lenguaje de programación. Debido a esto, al deshabilitar la carga automática de estos archivos reducirás el consumo de datos." _reversi: total: "Total" + diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index 50de0cd5a1..a10580bcf3 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -2085,3 +2085,4 @@ _dataSaver: description: "Si la notation de mise en évidence du code est utilisée, par exemple dans la MFM, elle ne sera pas chargée tant qu'elle n'aura pas été tapée. La mise en évidence du code nécessite le chargement du fichier de définition de chaque langue à mettre en évidence, mais comme ces fichiers ne sont plus chargés automatiquement, on peut s'attendre à une réduction du trafic de données." _reversi: total: "Total" + diff --git a/locales/hr-HR.yml b/locales/hr-HR.yml index 9cfebdd01a..881aa8464e 100644 --- a/locales/hr-HR.yml +++ b/locales/hr-HR.yml @@ -3,3 +3,4 @@ _lang_: "japanski" ok: "OK" gotIt: "Razumijem" cancel: "otkazati" + diff --git a/locales/ht-HT.yml b/locales/ht-HT.yml index e3595c79b6..1698c9f280 100644 --- a/locales/ht-HT.yml +++ b/locales/ht-HT.yml @@ -16,3 +16,4 @@ _2fa: renewTOTPCancel: "Sispann" _widgets: profile: "pwofil" + diff --git a/locales/hu-HU.yml b/locales/hu-HU.yml index 023a91494d..2f7006484a 100644 --- a/locales/hu-HU.yml +++ b/locales/hu-HU.yml @@ -102,3 +102,4 @@ _deck: _columns: notifications: "Értesítések" tl: "Idővonal" + diff --git a/locales/id-ID.yml b/locales/id-ID.yml index e6c92b423c..44a0503883 100644 --- a/locales/id-ID.yml +++ b/locales/id-ID.yml @@ -2321,3 +2321,4 @@ _dataSaver: description: "Jika notasi penyorotan kode digunakan di MFM, dll. Fungsi tersebut tidak akan dimuat apabila tidak diketuk. Penyorotan sintaks membutuhkan pengunduhan berkas definisi penyorotan untuk setiap bahasa pemrograman. Oleh sebab itu, menonaktifkan pemuatan otomatis dari berkas ini dilakukan untuk mengurangi jumlah komunikasi data." _reversi: total: "Jumlah" + diff --git a/locales/it-IT.yml b/locales/it-IT.yml index b7b3fb1833..5678ab7e34 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -2356,3 +2356,4 @@ _dataSaver: description: "Impedire che il codice sorgente sia automaticamente evidenziato. Evidenziare il codice richiede il caricamento di un file per ogni linguaggio. Puoi evidenziare soltanto il codice che intendi leggere e ridurre il traffico inutilizzato." _reversi: total: "Totale" + diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index 79219a8b9f..74dcf5f815 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -2412,3 +2412,4 @@ _dataSaver: description: "MFMとかでコードハイライト記法が使われてるとき、タップするまで読み込まれへんくなるで。コードハイライトではハイライトする言語ごとにその決めてるファイルを読む必要はあんねんな。けどな、それは自動で読み込まれなくなるから、通信量を少なくできることができるねん。" _reversi: total: "合計" + diff --git a/locales/jbo-EN.yml b/locales/jbo-EN.yml index d4fea291d7..297ca53dd7 100644 --- a/locales/jbo-EN.yml +++ b/locales/jbo-EN.yml @@ -1,3 +1,4 @@ --- _lang_: "la .lojban." headlineMisskey: "lo se tcana noi jorne fi loi notci" + diff --git a/locales/kab-KAB.yml b/locales/kab-KAB.yml index 22e24d3baa..b976f028f0 100644 --- a/locales/kab-KAB.yml +++ b/locales/kab-KAB.yml @@ -104,3 +104,4 @@ _deck: _columns: notifications: "Ilɣuyen" list: "Tibdarin" + diff --git a/locales/kn-IN.yml b/locales/kn-IN.yml index b3ad46f2b1..bb6d1ee242 100644 --- a/locales/kn-IN.yml +++ b/locales/kn-IN.yml @@ -84,3 +84,4 @@ _deck: notifications: "ಅಧಿಸೂಚನೆಗಳು" tl: "ಸಮಯಸಾಲು" mentions: "ಹೆಸರಿಸಿದ" + diff --git a/locales/ko-GS.yml b/locales/ko-GS.yml index 9187c25827..1d6c6f7bbc 100644 --- a/locales/ko-GS.yml +++ b/locales/ko-GS.yml @@ -726,3 +726,4 @@ _moderationLogTypes: resolveAbuseReport: "신고 해겔하기" _reversi: total: "합계" + diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 673c7757df..5ac398475b 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -2415,3 +2415,4 @@ _dataSaver: description: "MFM 등으로 문자열 강조 기법을 사용할 때 누르기 전에는 불러오지 않습니다. 문자열 강조에서는 강조할 언어마다 그 정의 파일을 불러와야 하지만 이를 자동으로 불러오지 않으므로 데이터 사용량을 줄일 수 있습니다." _reversi: total: "합계" + diff --git a/locales/lo-LA.yml b/locales/lo-LA.yml index fa4b3b6f9a..6f03c914fd 100644 --- a/locales/lo-LA.yml +++ b/locales/lo-LA.yml @@ -466,3 +466,4 @@ _webhookSettings: name: "ຊື່" _moderationLogTypes: suspend: "ລະງັບ" + diff --git a/locales/nl-NL.yml b/locales/nl-NL.yml index e33b978bc8..e3ff426177 100644 --- a/locales/nl-NL.yml +++ b/locales/nl-NL.yml @@ -497,3 +497,4 @@ _webhookSettings: _moderationLogTypes: suspend: "Opschorten" resetPassword: "Wachtwoord terugzetten" + diff --git a/locales/no-NO.yml b/locales/no-NO.yml index 195b1d0717..85ccd62566 100644 --- a/locales/no-NO.yml +++ b/locales/no-NO.yml @@ -720,3 +720,4 @@ _webhookSettings: name: "Navn" _moderationLogTypes: suspend: "Suspender" + diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index e075f40815..9de413eb3b 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -1399,3 +1399,4 @@ _moderationLogTypes: resetPassword: "Zresetuj hasło" _reversi: total: "Łącznie" + diff --git a/locales/pt-PT.yml b/locales/pt-PT.yml index 3d0dcfba8a..bf8a8ca38b 100644 --- a/locales/pt-PT.yml +++ b/locales/pt-PT.yml @@ -1500,3 +1500,4 @@ _moderationLogTypes: resetPassword: "Redefinir senha" _reversi: total: "Total" + diff --git a/locales/ro-RO.yml b/locales/ro-RO.yml index 695eb2501f..c1158e47b7 100644 --- a/locales/ro-RO.yml +++ b/locales/ro-RO.yml @@ -729,3 +729,4 @@ _moderationLogTypes: resetPassword: "Resetează parola" _reversi: total: "Total" + diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index e5dc3a83cf..60682fe961 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -1972,3 +1972,4 @@ _moderationLogTypes: resetPassword: "Сброс пароля:" _reversi: total: "Всего" + diff --git a/locales/si-LK.yml b/locales/si-LK.yml index ed97d539c0..cd21505a47 100644 --- a/locales/si-LK.yml +++ b/locales/si-LK.yml @@ -1 +1,2 @@ --- + diff --git a/locales/sk-SK.yml b/locales/sk-SK.yml index 00d5f5ff84..7856809bf8 100644 --- a/locales/sk-SK.yml +++ b/locales/sk-SK.yml @@ -1447,3 +1447,4 @@ _moderationLogTypes: resetPassword: "Resetovať heslo" _reversi: total: "Celkom" + diff --git a/locales/sv-SE.yml b/locales/sv-SE.yml index 62bc71a13d..07d5509a6a 100644 --- a/locales/sv-SE.yml +++ b/locales/sv-SE.yml @@ -576,3 +576,4 @@ _webhookSettings: _moderationLogTypes: suspend: "Suspendera" resetPassword: "Återställ Lösenord" + diff --git a/locales/th-TH.yml b/locales/th-TH.yml index e17f06d0eb..ed776e5ec7 100644 --- a/locales/th-TH.yml +++ b/locales/th-TH.yml @@ -2440,3 +2440,4 @@ _dataSaver: description: "หากใช้สัญลักษณ์ไฮไลต์โค้ดใน MFM ฯลฯ สัญลักษณ์เหล่านั้นจะไม่โหลดจนกว่าจะแตะ การไฮไลต์ไวยากรณ์(syntax)จำเป็นต้องดาวน์โหลดไฟล์คำจำกัดความของไฮไลต์สำหรับแต่ละภาษา ดังนั้นการปิดใช้งานการโหลดไฟล์เหล่านี้โดยอัตโนมัติจึงคาดว่าจะช่วยลดปริมาณข้อมูลการสื่อสารได้" _reversi: total: "รวมทั้งหมด" + diff --git a/locales/tr-TR.yml b/locales/tr-TR.yml index 0793592d34..e93a6e43e1 100644 --- a/locales/tr-TR.yml +++ b/locales/tr-TR.yml @@ -455,3 +455,4 @@ _deck: _moderationLogTypes: suspend: "askıya al" resetPassword: "Şifre sıfırlama" + diff --git a/locales/ug-CN.yml b/locales/ug-CN.yml index e48f64511c..e06cee11a2 100644 --- a/locales/ug-CN.yml +++ b/locales/ug-CN.yml @@ -17,3 +17,4 @@ _2fa: renewTOTPCancel: "ئۇنى توختىتىڭ" _widgets: profile: "profile" + diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml index bc1dc419e9..7679ad56d7 100644 --- a/locales/uk-UA.yml +++ b/locales/uk-UA.yml @@ -1622,3 +1622,4 @@ _moderationLogTypes: resetPassword: "Скинути пароль" _reversi: total: "Всього" + diff --git a/locales/uz-UZ.yml b/locales/uz-UZ.yml index 809e785492..b87b596925 100644 --- a/locales/uz-UZ.yml +++ b/locales/uz-UZ.yml @@ -1090,3 +1090,4 @@ _moderationLogTypes: resetPassword: "Parolni tiklash" _reversi: total: "Jami" + diff --git a/locales/vi-VN.yml b/locales/vi-VN.yml index 43db0d246c..6de15fc11f 100644 --- a/locales/vi-VN.yml +++ b/locales/vi-VN.yml @@ -1852,3 +1852,4 @@ _moderationLogTypes: resetPassword: "Đặt lại mật khẩu" _reversi: total: "Tổng cộng" + diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 2f04920556..d14a77f5aa 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -1200,6 +1200,8 @@ replaying: "重播中" ranking: "排行榜" lastNDays: "最近 {n} 天" backToTitle: "返回标题" +hemisphere: "居住地区" +withSensitive: "显示包含敏感媒体的帖子" enableHorizontalSwipe: "滑动切换标签页" _bubbleGame: howToPlay: "游戏说明" @@ -2427,9 +2429,14 @@ _dataSaver: _code: title: "代码高亮" description: "如果使用了代码高亮标记,例如在 MFM 中,则在点击之前不会加载。 代码高亮要求加载每种高亮语言的定义文件,由于这些文件不再自动加载,因此有望减少数据传输量。" +_hemisphere: + N: "北半球" + S: "南半球" + caption: "在某些客户端设置中用来确定季节" _reversi: reversi: "黑白棋" total: "总计" _offlineScreen: title: "离线——无法连接到服务器" header: "无法连接到服务器" + diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index e4ac043eb5..5e730202c9 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -1202,6 +1202,9 @@ replaying: "重播中" ranking: "排行榜" lastNDays: "過去 {n} 天" backToTitle: "回到遊戲標題頁" +hemisphere: "您居住的地區" +withSensitive: "顯示包含敏感檔案的貼文" +userSaysSomethingSensitive: "包含 {name} 敏感檔案的貼文" enableHorizontalSwipe: "滑動切換時間軸" _bubbleGame: howToPlay: "玩法說明" @@ -2438,5 +2441,48 @@ _dataSaver: _code: title: "程式碼突出顯示" description: "如果使用了 MFM 的程式碼突顯標記,則在點擊之前不會載入。程式碼突顯要求加載每種程式語言的突顯定義檔案,但由於這些檔案不再自動載入,因此有望減少資料流量。" +_hemisphere: + N: "北半球" + S: "南半球" + caption: "在某些客戶端的設定中,用於判斷季節。" _reversi: + reversi: "黑白棋" + gameSettings: "對弈設定" + chooseBoard: "選擇棋盤" + blackOrWhite: "先手/後手" + blackIs: "{name} 為黑棋(先攻)" + rules: "規則" + thisGameIsStartedSoon: "對弈即將開始" + waitingForOther: "等待對手準備就緒" + waitingForMe: "等待您準備就緒" + waitingBoth: "請準備" + ready: "準備就緒" + cancelReady: "重新準備" + opponentTurn: "對手的回合" + myTurn: "您的回合" + turnOf: "{name} 的回合" + pastTurnOf: "{name} 的回合" + surrender: "認輸" + surrendered: "對手認輸" + timeout: "時間到" + drawn: "平手" + won: "{name} 獲勝" + black: "黑" + white: "白" total: "合計" + turnCount: "{count} 回合" + myGames: "我的對弈" + allGames: "所有對弈" + ended: "" + playing: "正在對弈" + isLlotheo: "子較少的一方為勝(顛倒規則)" + loopedMap: "循環棋盤" + canPutEverywhere: "隨意置放模式" + timeLimitForEachTurn: "每回合的時間限制" + freeMatch: "自由對戰" + lookingForPlayer: "正在搜尋對手" + gameCanceled: "對弈已被取消" +_offlineScreen: + title: "離線-無法連接伺服器" + header: "無法連接伺服器" + From 67f6157d4252c733867bd264d39cd2a43a00c9ee Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 09:30:00 +0900 Subject: [PATCH 06/17] 2024.2.0-beta.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b4aafbf94e..330bd33371 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2024.2.0-beta.1", + "version": "2024.2.0-beta.2", "codename": "nasubi", "repository": { "type": "git", From 259992c65f008c3df474970f087aba9716d3465c Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 12:03:32 +0900 Subject: [PATCH 07/17] enhance(reversi): some tweaks --- .../api/stream/channels/reversi-game.ts | 8 +- .../frontend/src/pages/reversi/game.board.vue | 98 ++++++++++++------- packages/frontend/src/pages/reversi/game.vue | 38 +++---- 3 files changed, 83 insertions(+), 61 deletions(-) diff --git a/packages/backend/src/server/api/stream/channels/reversi-game.ts b/packages/backend/src/server/api/stream/channels/reversi-game.ts index df92137f51..820c80006b 100644 --- a/packages/backend/src/server/api/stream/channels/reversi-game.ts +++ b/packages/backend/src/server/api/stream/channels/reversi-game.ts @@ -42,7 +42,7 @@ class ReversiGameChannel extends Channel { case 'updateSettings': this.updateSettings(body.key, body.value); break; case 'cancel': this.cancelGame(); break; case 'putStone': this.putStone(body.pos, body.id); break; - case 'checkState': this.checkState(body.crc32); break; + case 'resync': this.resync(body.crc32); break; case 'claimTimeIsUp': this.claimTimeIsUp(); break; } } @@ -76,12 +76,10 @@ class ReversiGameChannel extends Channel { } @bindThis - private async checkState(crc32: string | number) { - if (crc32 != null) return; - + private async resync(crc32: string | number) { const game = await this.reversiService.checkCrc(this.gameId!, crc32); if (game) { - this.send('rescue', game); + this.send('resynced', game); } } diff --git a/packages/frontend/src/pages/reversi/game.board.vue b/packages/frontend/src/pages/reversi/game.board.vue index 4d4450ed7d..d492296c16 100644 --- a/packages/frontend/src/pages/reversi/game.board.vue +++ b/packages/frontend/src/pages/reversi/game.board.vue @@ -163,7 +163,7 @@ const $i = signinRequired(); const props = defineProps<{ game: Misskey.entities.ReversiGameDetailed; - connection: Misskey.ChannelConnection; + connection?: Misskey.ChannelConnection | null; }>(); const showBoardLabels = ref(false); @@ -240,10 +240,10 @@ watch(logPos, (v) => { if (game.value.isStarted && !game.value.isEnded) { useInterval(() => { - if (game.value.isEnded) return; + if (game.value.isEnded || props.connection == null) return; const crc32 = CRC32.str(JSON.stringify(game.value.logs)).toString(); if (_DEV_) console.log('crc32', crc32); - props.connection.send('checkState', { + props.connection.send('resync', { crc32: crc32, }); }, 10000, { immediate: false, afterMounted: true }); @@ -267,7 +267,7 @@ function putStone(pos) { }); const id = Math.random().toString(36).slice(2); - props.connection.send('putStone', { + props.connection!.send('putStone', { pos: pos, id, }); @@ -283,22 +283,24 @@ const myTurnTimerRmain = ref(game.value.timeLimitForEachTurn); const opTurnTimerRmain = ref(game.value.timeLimitForEachTurn); const TIMER_INTERVAL_SEC = 3; -useInterval(() => { - if (myTurnTimerRmain.value > 0) { - myTurnTimerRmain.value = Math.max(0, myTurnTimerRmain.value - TIMER_INTERVAL_SEC); - } - if (opTurnTimerRmain.value > 0) { - opTurnTimerRmain.value = Math.max(0, opTurnTimerRmain.value - TIMER_INTERVAL_SEC); - } - - if (iAmPlayer.value) { - if ((isMyTurn.value && myTurnTimerRmain.value === 0) || (!isMyTurn.value && opTurnTimerRmain.value === 0)) { - props.connection.send('claimTimeIsUp', {}); +if (!props.game.isEnded) { + useInterval(() => { + if (myTurnTimerRmain.value > 0) { + myTurnTimerRmain.value = Math.max(0, myTurnTimerRmain.value - TIMER_INTERVAL_SEC); + } + if (opTurnTimerRmain.value > 0) { + opTurnTimerRmain.value = Math.max(0, opTurnTimerRmain.value - TIMER_INTERVAL_SEC); } - } -}, TIMER_INTERVAL_SEC * 1000, { immediate: false, afterMounted: true }); -function onStreamLog(log: Reversi.Serializer.Log & { id: string | null }) { + if (iAmPlayer.value) { + if ((isMyTurn.value && myTurnTimerRmain.value === 0) || (!isMyTurn.value && opTurnTimerRmain.value === 0)) { + props.connection!.send('claimTimeIsUp', {}); + } + } + }, TIMER_INTERVAL_SEC * 1000, { immediate: false, afterMounted: true }); +} + +async function onStreamLog(log: Reversi.Serializer.Log & { id: string | null }) { game.value.logs = Reversi.Serializer.serializeLogs([ ...Reversi.Serializer.deserializeLogs(game.value.logs), log, @@ -309,17 +311,25 @@ function onStreamLog(log: Reversi.Serializer.Log & { id: string | null }) { if (log.id == null || !appliedOps.includes(log.id)) { switch (log.operation) { case 'put': { + sound.playUrl('/client-assets/reversi/put.mp3', { + volume: 1, + playbackRate: 1, + }); + + if (log.player !== engine.value.turn) { // = desyncが発生している + const _game = await misskeyApi('reversi/show-game', { + gameId: props.game.id, + }); + restoreGame(_game); + return; + } + engine.value.putStone(log.pos); triggerRef(engine); myTurnTimerRmain.value = game.value.timeLimitForEachTurn; opTurnTimerRmain.value = game.value.timeLimitForEachTurn; - sound.playUrl('/client-assets/reversi/put.mp3', { - volume: 1, - playbackRate: 1, - }); - checkEnd(); break; } @@ -366,9 +376,7 @@ function checkEnd() { } } -function onStreamRescue(_game) { - console.log('rescue'); - +function restoreGame(_game) { game.value = deepClone(_game); engine.value = Reversi.Serializer.restoreGame({ @@ -384,6 +392,12 @@ function onStreamRescue(_game) { checkEnd(); } +function onStreamResynced(_game) { + console.log('resynced'); + + restoreGame(_game); +} + async function surrender() { const { canceled } = await os.confirm({ type: 'warning', @@ -434,27 +448,35 @@ function share() { } onMounted(() => { - props.connection.on('log', onStreamLog); - props.connection.on('rescue', onStreamRescue); - props.connection.on('ended', onStreamEnded); + if (props.connection != null) { + props.connection.on('log', onStreamLog); + props.connection.on('resynced', onStreamResynced); + props.connection.on('ended', onStreamEnded); + } }); onActivated(() => { - props.connection.on('log', onStreamLog); - props.connection.on('rescue', onStreamRescue); - props.connection.on('ended', onStreamEnded); + if (props.connection != null) { + props.connection.on('log', onStreamLog); + props.connection.on('resynced', onStreamResynced); + props.connection.on('ended', onStreamEnded); + } }); onDeactivated(() => { - props.connection.off('log', onStreamLog); - props.connection.off('rescue', onStreamRescue); - props.connection.off('ended', onStreamEnded); + if (props.connection != null) { + props.connection.off('log', onStreamLog); + props.connection.off('resynced', onStreamResynced); + props.connection.off('ended', onStreamEnded); + } }); onUnmounted(() => { - props.connection.off('log', onStreamLog); - props.connection.off('rescue', onStreamRescue); - props.connection.off('ended', onStreamEnded); + if (props.connection != null) { + props.connection.off('log', onStreamLog); + props.connection.off('resynced', onStreamResynced); + props.connection.off('ended', onStreamEnded); + } }); diff --git a/packages/frontend/src/pages/reversi/game.vue b/packages/frontend/src/pages/reversi/game.vue index 0bdbfbcf54..d1e4103919 100644 --- a/packages/frontend/src/pages/reversi/game.vue +++ b/packages/frontend/src/pages/reversi/game.vue @@ -4,8 +4,8 @@ SPDX-License-Identifier: AGPL-3.0-only --> @@ -47,23 +47,25 @@ async function fetchGame() { if (connection.value) { connection.value.dispose(); } - connection.value = useStream().useChannel('reversiGame', { - gameId: game.value.id, - }); - connection.value.on('started', x => { - game.value = x.game; - }); - connection.value.on('canceled', x => { - connection.value?.dispose(); + if (!game.value.isEnded) { + connection.value = useStream().useChannel('reversiGame', { + gameId: game.value.id, + }); + connection.value.on('started', x => { + game.value = x.game; + }); + connection.value.on('canceled', x => { + connection.value?.dispose(); - if (x.userId !== $i.id) { - os.alert({ - type: 'warning', - text: i18n.ts._reversi.gameCanceled, - }); - router.push('/reversi'); - } - }); + if (x.userId !== $i.id) { + os.alert({ + type: 'warning', + text: i18n.ts._reversi.gameCanceled, + }); + router.push('/reversi'); + } + }); + } } onMounted(() => { From 94e282b612ad3dc6fd336a82fff19b290e11d221 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 15:41:29 +0900 Subject: [PATCH 08/17] perf(reversi): improve performance of reversi backend --- packages/backend/src/core/ReversiService.ts | 37 +++++++++++++++++-- .../core/entities/ReversiGameEntityService.ts | 35 +++++++++--------- .../src/models/json-schema/reversi-game.ts | 16 -------- .../src/server/api/endpoints/reversi/games.ts | 6 ++- .../src/server/api/endpoints/reversi/match.ts | 2 +- .../server/api/endpoints/reversi/show-game.ts | 2 +- packages/backend/src/types.ts | 6 ++- .../misskey-js/src/autogen/apiClientJSDoc.ts | 4 +- packages/misskey-js/src/autogen/endpoint.ts | 4 +- packages/misskey-js/src/autogen/entities.ts | 4 +- packages/misskey-js/src/autogen/models.ts | 4 +- packages/misskey-js/src/autogen/types.ts | 8 +--- 12 files changed, 73 insertions(+), 55 deletions(-) diff --git a/packages/backend/src/core/ReversiService.ts b/packages/backend/src/core/ReversiService.ts index 0e59d0308d..0d5f989c11 100644 --- a/packages/backend/src/core/ReversiService.ts +++ b/packages/backend/src/core/ReversiService.ts @@ -234,10 +234,13 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { map: Reversi.maps.eighteight.data, bw: 'random', isLlotheo: false, - }).then(x => this.reversiGamesRepository.findOneByOrFail(x.identifiers[0])); + }).then(x => this.reversiGamesRepository.findOneOrFail({ + where: { id: x.identifiers[0].id }, + relations: ['user1', 'user2'], + })); this.cacheGame(game); - const packed = await this.reversiGameEntityService.packDetail(game, { id: parentId }); + const packed = await this.reversiGameEntityService.packDetail(game); this.globalEventService.publishReversiStream(parentId, 'matched', { game: packed }); return game; @@ -267,6 +270,9 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { .returning('*') .execute() .then((response) => response.raw[0]); + // キャッシュ効率化のためにユーザー情報は再利用 + updatedGame.user1 = game.user1; + updatedGame.user2 = game.user2; this.cacheGame(updatedGame); //#region 盤面に最初から石がないなどして始まった瞬間に勝敗が決定する場合があるのでその処理 @@ -314,6 +320,9 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { .returning('*') .execute() .then((response) => response.raw[0]); + // キャッシュ効率化のためにユーザー情報は再利用 + updatedGame.user1 = game.user1; + updatedGame.user2 = game.user2; this.cacheGame(updatedGame); this.globalEventService.publishReversiGameStream(game.id, 'ended', { @@ -483,14 +492,36 @@ export class ReversiService implements OnApplicationShutdown, OnModuleInit { public async get(id: MiReversiGame['id']): Promise { const cached = await this.redisClient.get(`reversi:game:cache:${id}`); if (cached != null) { + // TODO: この辺りのデシリアライズ処理をどこか別のサービスに切り出したい const parsed = JSON.parse(cached) as Serialized; return { ...parsed, startedAt: parsed.startedAt != null ? new Date(parsed.startedAt) : null, endedAt: parsed.endedAt != null ? new Date(parsed.endedAt) : null, + user1: parsed.user1 != null ? { + ...parsed.user1, + avatar: null, + banner: null, + updatedAt: parsed.user1.updatedAt != null ? new Date(parsed.user1.updatedAt) : null, + lastActiveDate: parsed.user1.lastActiveDate != null ? new Date(parsed.user1.lastActiveDate) : null, + lastFetchedAt: parsed.user1.lastFetchedAt != null ? new Date(parsed.user1.lastFetchedAt) : null, + movedAt: parsed.user1.movedAt != null ? new Date(parsed.user1.movedAt) : null, + } : null, + user2: parsed.user2 != null ? { + ...parsed.user2, + avatar: null, + banner: null, + updatedAt: parsed.user2.updatedAt != null ? new Date(parsed.user2.updatedAt) : null, + lastActiveDate: parsed.user2.lastActiveDate != null ? new Date(parsed.user2.lastActiveDate) : null, + lastFetchedAt: parsed.user2.lastFetchedAt != null ? new Date(parsed.user2.lastFetchedAt) : null, + movedAt: parsed.user2.movedAt != null ? new Date(parsed.user2.movedAt) : null, + } : null, }; } else { - const game = await this.reversiGamesRepository.findOneBy({ id }); + const game = await this.reversiGamesRepository.findOne({ + where: { id }, + relations: ['user1', 'user2'], + }); if (game == null) return null; this.cacheGame(game); diff --git a/packages/backend/src/core/entities/ReversiGameEntityService.ts b/packages/backend/src/core/entities/ReversiGameEntityService.ts index bcb0fd5a6f..6c89a70599 100644 --- a/packages/backend/src/core/entities/ReversiGameEntityService.ts +++ b/packages/backend/src/core/entities/ReversiGameEntityService.ts @@ -9,7 +9,6 @@ import type { ReversiGamesRepository } from '@/models/_.js'; import { awaitAll } from '@/misc/prelude/await-all.js'; import type { Packed } from '@/misc/json-schema.js'; import type { } from '@/models/Blocking.js'; -import type { MiUser } from '@/models/User.js'; import type { MiReversiGame } from '@/models/ReversiGame.js'; import { bindThis } from '@/decorators.js'; import { IdService } from '@/core/IdService.js'; @@ -29,10 +28,14 @@ export class ReversiGameEntityService { @bindThis public async packDetail( src: MiReversiGame['id'] | MiReversiGame, - me?: { id: MiUser['id'] } | null | undefined, ): Promise> { const game = typeof src === 'object' ? src : await this.reversiGamesRepository.findOneByOrFail({ id: src }); + const users = await Promise.all([ + this.userEntityService.pack(game.user1 ?? game.user1Id), + this.userEntityService.pack(game.user2 ?? game.user2Id), + ]); + return await awaitAll({ id: game.id, createdAt: this.idService.parse(game.id).date.toISOString(), @@ -46,10 +49,10 @@ export class ReversiGameEntityService { user2Ready: game.user2Ready, user1Id: game.user1Id, user2Id: game.user2Id, - user1: this.userEntityService.pack(game.user1Id, me), - user2: this.userEntityService.pack(game.user2Id, me), + user1: users[0], + user2: users[1], winnerId: game.winnerId, - winner: game.winnerId ? this.userEntityService.pack(game.winnerId, me) : null, + winner: game.winnerId ? users.find(u => u.id === game.winnerId)! : null, surrenderedUserId: game.surrenderedUserId, timeoutUserId: game.timeoutUserId, black: game.black, @@ -66,18 +69,21 @@ export class ReversiGameEntityService { @bindThis public packDetailMany( xs: MiReversiGame[], - me?: { id: MiUser['id'] } | null | undefined, ) { - return Promise.all(xs.map(x => this.packDetail(x, me))); + return Promise.all(xs.map(x => this.packDetail(x))); } @bindThis public async packLite( src: MiReversiGame['id'] | MiReversiGame, - me?: { id: MiUser['id'] } | null | undefined, ): Promise> { const game = typeof src === 'object' ? src : await this.reversiGamesRepository.findOneByOrFail({ id: src }); + const users = await Promise.all([ + this.userEntityService.pack(game.user1 ?? game.user1Id), + this.userEntityService.pack(game.user2 ?? game.user2Id), + ]); + return await awaitAll({ id: game.id, createdAt: this.idService.parse(game.id).date.toISOString(), @@ -85,16 +91,12 @@ export class ReversiGameEntityService { endedAt: game.endedAt && game.endedAt.toISOString(), isStarted: game.isStarted, isEnded: game.isEnded, - form1: game.form1, - form2: game.form2, - user1Ready: game.user1Ready, - user2Ready: game.user2Ready, user1Id: game.user1Id, user2Id: game.user2Id, - user1: this.userEntityService.pack(game.user1Id, me), - user2: this.userEntityService.pack(game.user2Id, me), + user1: users[0], + user2: users[1], winnerId: game.winnerId, - winner: game.winnerId ? this.userEntityService.pack(game.winnerId, me) : null, + winner: game.winnerId ? users.find(u => u.id === game.winnerId)! : null, surrenderedUserId: game.surrenderedUserId, timeoutUserId: game.timeoutUserId, black: game.black, @@ -109,9 +111,8 @@ export class ReversiGameEntityService { @bindThis public packLiteMany( xs: MiReversiGame[], - me?: { id: MiUser['id'] } | null | undefined, ) { - return Promise.all(xs.map(x => this.packLite(x, me))); + return Promise.all(xs.map(x => this.packLite(x))); } } diff --git a/packages/backend/src/models/json-schema/reversi-game.ts b/packages/backend/src/models/json-schema/reversi-game.ts index 4ac4d165d8..8061d84ad6 100644 --- a/packages/backend/src/models/json-schema/reversi-game.ts +++ b/packages/backend/src/models/json-schema/reversi-game.ts @@ -34,22 +34,6 @@ export const packedReversiGameLiteSchema = { type: 'boolean', optional: false, nullable: false, }, - form1: { - type: 'any', - optional: false, nullable: true, - }, - form2: { - type: 'any', - optional: false, nullable: true, - }, - user1Ready: { - type: 'boolean', - optional: false, nullable: false, - }, - user2Ready: { - type: 'boolean', - optional: false, nullable: false, - }, user1Id: { type: 'string', optional: false, nullable: false, diff --git a/packages/backend/src/server/api/endpoints/reversi/games.ts b/packages/backend/src/server/api/endpoints/reversi/games.ts index 5322cd0987..f28fe5d987 100644 --- a/packages/backend/src/server/api/endpoints/reversi/games.ts +++ b/packages/backend/src/server/api/endpoints/reversi/games.ts @@ -43,7 +43,9 @@ export default class extends Endpoint { // eslint- ) { super(meta, paramDef, async (ps, me) => { const query = this.queryService.makePaginationQuery(this.reversiGamesRepository.createQueryBuilder('game'), ps.sinceId, ps.untilId) - .andWhere('game.isStarted = TRUE'); + .andWhere('game.isStarted = TRUE') + .innerJoinAndSelect('game.user1', 'user1') + .innerJoinAndSelect('game.user2', 'user2'); if (ps.my && me) { query.andWhere(new Brackets(qb => { @@ -55,7 +57,7 @@ export default class extends Endpoint { // eslint- const games = await query.take(ps.limit).getMany(); - return await this.reversiGameEntityService.packLiteMany(games, me); + return await this.reversiGameEntityService.packLiteMany(games); }); } } diff --git a/packages/backend/src/server/api/endpoints/reversi/match.ts b/packages/backend/src/server/api/endpoints/reversi/match.ts index da5a3409ef..1065ce5a89 100644 --- a/packages/backend/src/server/api/endpoints/reversi/match.ts +++ b/packages/backend/src/server/api/endpoints/reversi/match.ts @@ -60,7 +60,7 @@ export default class extends Endpoint { // eslint- if (game == null) return; - return await this.reversiGameEntityService.packDetail(game, me); + return await this.reversiGameEntityService.packDetail(game); }); } } diff --git a/packages/backend/src/server/api/endpoints/reversi/show-game.ts b/packages/backend/src/server/api/endpoints/reversi/show-game.ts index de571053e1..86645ea4b4 100644 --- a/packages/backend/src/server/api/endpoints/reversi/show-game.ts +++ b/packages/backend/src/server/api/endpoints/reversi/show-game.ts @@ -48,7 +48,7 @@ export default class extends Endpoint { // eslint- throw new ApiError(meta.errors.noSuchGame); } - return await this.reversiGameEntityService.packDetail(game, me); + return await this.reversiGameEntityService.packDetail(game); }); } } diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts index 361a4931eb..cfac5cd9d4 100644 --- a/packages/backend/src/types.ts +++ b/packages/backend/src/types.ts @@ -277,7 +277,11 @@ export type Serialized = { ? (string | null) : T[K] extends Record ? Serialized - : T[K]; + : T[K] extends (Record | null) + ? (Serialized | null) + : T[K] extends (Record | undefined) + ? (Serialized | undefined) + : T[K]; }; export type FilterUnionByProperty< diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts index ea41f2cb55..d81444e5df 100644 --- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts +++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts @@ -1,6 +1,6 @@ /* - * version: 2023.12.2 - * generatedAt: 2024-01-21T01:01:12.332Z + * version: 2024.2.0-beta.2 + * generatedAt: 2024-01-22T06:08:45.879Z */ import type { SwitchCaseResponseType } from '../api.js'; diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts index f551053524..69f02b899f 100644 --- a/packages/misskey-js/src/autogen/endpoint.ts +++ b/packages/misskey-js/src/autogen/endpoint.ts @@ -1,6 +1,6 @@ /* - * version: 2023.12.2 - * generatedAt: 2024-01-21T01:01:12.330Z + * version: 2024.2.0-beta.2 + * generatedAt: 2024-01-22T06:08:45.877Z */ import type { diff --git a/packages/misskey-js/src/autogen/entities.ts b/packages/misskey-js/src/autogen/entities.ts index b0adbeaf93..5d46ea6611 100644 --- a/packages/misskey-js/src/autogen/entities.ts +++ b/packages/misskey-js/src/autogen/entities.ts @@ -1,6 +1,6 @@ /* - * version: 2023.12.2 - * generatedAt: 2024-01-21T01:01:12.328Z + * version: 2024.2.0-beta.2 + * generatedAt: 2024-01-22T06:08:45.876Z */ import { operations } from './types.js'; diff --git a/packages/misskey-js/src/autogen/models.ts b/packages/misskey-js/src/autogen/models.ts index 306f0cd6b4..3e795f2b86 100644 --- a/packages/misskey-js/src/autogen/models.ts +++ b/packages/misskey-js/src/autogen/models.ts @@ -1,6 +1,6 @@ /* - * version: 2023.12.2 - * generatedAt: 2024-01-21T01:01:12.327Z + * version: 2024.2.0-beta.2 + * generatedAt: 2024-01-22T06:08:45.875Z */ import { components } from './types.js'; diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index 5d2b6e2e3b..271ca41159 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -2,8 +2,8 @@ /* eslint @typescript-eslint/no-explicit-any: 0 */ /* - * version: 2023.12.2 - * generatedAt: 2024-01-21T01:01:12.246Z + * version: 2024.2.0-beta.2 + * generatedAt: 2024-01-22T06:08:45.796Z */ /** @@ -4469,10 +4469,6 @@ export type components = { endedAt: string | null; isStarted: boolean; isEnded: boolean; - form1: Record | null; - form2: Record | null; - user1Ready: boolean; - user2Ready: boolean; /** Format: id */ user1Id: string; /** Format: id */ From 4af3640bd327f62ababdaa20105ddb82b4a969a7 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 17:44:03 +0900 Subject: [PATCH 09/17] fix lint --- packages/backend/src/core/AntennaService.ts | 12 +++++++++--- packages/backend/src/core/MetaService.ts | 5 ++++- packages/backend/src/core/RoleService.ts | 3 ++- packages/backend/src/core/WebhookService.ts | 9 ++++++--- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/packages/backend/src/core/AntennaService.ts b/packages/backend/src/core/AntennaService.ts index 2c27a02559..2959153070 100644 --- a/packages/backend/src/core/AntennaService.ts +++ b/packages/backend/src/core/AntennaService.ts @@ -55,23 +55,29 @@ export class AntennaService implements OnApplicationShutdown { const { type, body } = obj.message as GlobalEvents['internal']['payload']; switch (type) { case 'antennaCreated': - this.antennas.push({ + this.antennas.push({ // TODO: このあたりのデシリアライズ処理は各modelファイル内に関数としてexportしたい ...body, lastUsedAt: new Date(body.lastUsedAt), + user: null, // joinなカラムは通常取ってこないので + userList: null, // joinなカラムは通常取ってこないので }); break; case 'antennaUpdated': { const idx = this.antennas.findIndex(a => a.id === body.id); if (idx >= 0) { - this.antennas[idx] = { + this.antennas[idx] = { // TODO: このあたりのデシリアライズ処理は各modelファイル内に関数としてexportしたい ...body, lastUsedAt: new Date(body.lastUsedAt), + user: null, // joinなカラムは通常取ってこないので + userList: null, // joinなカラムは通常取ってこないので }; } else { // サーバ起動時にactiveじゃなかった場合、リストに持っていないので追加する必要あり - this.antennas.push({ + this.antennas.push({ // TODO: このあたりのデシリアライズ処理は各modelファイル内に関数としてexportしたい ...body, lastUsedAt: new Date(body.lastUsedAt), + user: null, // joinなカラムは通常取ってこないので + userList: null, // joinなカラムは通常取ってこないので }); } } diff --git a/packages/backend/src/core/MetaService.ts b/packages/backend/src/core/MetaService.ts index 80e8020961..8e945e3d89 100644 --- a/packages/backend/src/core/MetaService.ts +++ b/packages/backend/src/core/MetaService.ts @@ -51,7 +51,10 @@ export class MetaService implements OnApplicationShutdown { const { type, body } = obj.message as GlobalEvents['internal']['payload']; switch (type) { case 'metaUpdated': { - this.cache = body; + this.cache = { // TODO: このあたりのデシリアライズ処理は各modelファイル内に関数としてexportしたい + ...body, + proxyAccount: null, // joinなカラムは通常取ってこないので + }; break; } default: diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts index d354faa7c2..2c1a5280b8 100644 --- a/packages/backend/src/core/RoleService.ts +++ b/packages/backend/src/core/RoleService.ts @@ -177,9 +177,10 @@ export class RoleService implements OnApplicationShutdown, OnModuleInit { case 'userRoleAssigned': { const cached = this.roleAssignmentByUserIdCache.get(body.userId); if (cached) { - cached.push({ + cached.push({ // TODO: このあたりのデシリアライズ処理は各modelファイル内に関数としてexportしたい ...body, expiresAt: body.expiresAt ? new Date(body.expiresAt) : null, + user: null, // joinなカラムは通常取ってこないので }); } break; diff --git a/packages/backend/src/core/WebhookService.ts b/packages/backend/src/core/WebhookService.ts index 930e6ef64a..5937bf89b1 100644 --- a/packages/backend/src/core/WebhookService.ts +++ b/packages/backend/src/core/WebhookService.ts @@ -49,9 +49,10 @@ export class WebhookService implements OnApplicationShutdown { switch (type) { case 'webhookCreated': if (body.active) { - this.webhooks.push({ + this.webhooks.push({ // TODO: このあたりのデシリアライズ処理は各modelファイル内に関数としてexportしたい ...body, latestSentAt: body.latestSentAt ? new Date(body.latestSentAt) : null, + user: null, // joinなカラムは通常取ってこないので }); } break; @@ -59,14 +60,16 @@ export class WebhookService implements OnApplicationShutdown { if (body.active) { const i = this.webhooks.findIndex(a => a.id === body.id); if (i > -1) { - this.webhooks[i] = { + this.webhooks[i] = { // TODO: このあたりのデシリアライズ処理は各modelファイル内に関数としてexportしたい ...body, latestSentAt: body.latestSentAt ? new Date(body.latestSentAt) : null, + user: null, // joinなカラムは通常取ってこないので }; } else { - this.webhooks.push({ + this.webhooks.push({ // TODO: このあたりのデシリアライズ処理は各modelファイル内に関数としてexportしたい ...body, latestSentAt: body.latestSentAt ? new Date(body.latestSentAt) : null, + user: null, // joinなカラムは通常取ってこないので }); } } else { From 5c8888d6a82e3b2072bfcfbf1620ce6f3d0bb214 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 17:59:12 +0900 Subject: [PATCH 10/17] enhance(reversi): render ogp --- .../src/server/web/ClientServerService.ts | 26 ++++++++++++++++++- .../src/server/web/views/reversi-game.pug | 20 ++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/server/web/views/reversi-game.pug diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index 2de5156fec..65b21694f8 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -31,12 +31,13 @@ import { PageEntityService } from '@/core/entities/PageEntityService.js'; import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js'; import { ClipEntityService } from '@/core/entities/ClipEntityService.js'; import { ChannelEntityService } from '@/core/entities/ChannelEntityService.js'; -import type { ChannelsRepository, ClipsRepository, FlashsRepository, GalleryPostsRepository, MiMeta, NotesRepository, PagesRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js'; +import type { ChannelsRepository, ClipsRepository, FlashsRepository, GalleryPostsRepository, MiMeta, NotesRepository, PagesRepository, ReversiGamesRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js'; import type Logger from '@/logger.js'; import { deepClone } from '@/misc/clone.js'; import { bindThis } from '@/decorators.js'; import { FlashEntityService } from '@/core/entities/FlashEntityService.js'; import { RoleService } from '@/core/RoleService.js'; +import { ReversiGameEntityService } from '@/core/entities/ReversiGameEntityService.js'; import { FeedService } from './FeedService.js'; import { UrlPreviewService } from './UrlPreviewService.js'; import { ClientLoggerService } from './ClientLoggerService.js'; @@ -83,6 +84,9 @@ export class ClientServerService { @Inject(DI.flashsRepository) private flashsRepository: FlashsRepository, + @Inject(DI.reversiGamesRepository) + private reversiGamesRepository: ReversiGamesRepository, + private flashEntityService: FlashEntityService, private userEntityService: UserEntityService, private noteEntityService: NoteEntityService, @@ -90,6 +94,7 @@ export class ClientServerService { private galleryPostEntityService: GalleryPostEntityService, private clipEntityService: ClipEntityService, private channelEntityService: ChannelEntityService, + private reversiGameEntityService: ReversiGameEntityService, private metaService: MetaService, private urlPreviewService: UrlPreviewService, private feedService: FeedService, @@ -686,6 +691,25 @@ export class ClientServerService { return await renderBase(reply); } }); + + // Reversi game + fastify.get<{ Params: { channel: string; } }>('/reversi/g/:game', async (request, reply) => { + const game = await this.reversiGamesRepository.findOneBy({ + id: request.params.game, + }); + + if (game) { + const _game = await this.reversiGameEntityService.packDetail(game); + const meta = await this.metaService.fetch(); + reply.header('Cache-Control', 'public, max-age=3600'); + return await reply.view('reversi-game', { + game: _game, + ...this.generateCommonPugData(meta), + }); + } else { + return await renderBase(reply); + } + }); //#endregion fastify.get('/_info_card_', async (request, reply) => { diff --git a/packages/backend/src/server/web/views/reversi-game.pug b/packages/backend/src/server/web/views/reversi-game.pug new file mode 100644 index 0000000000..0b5ffb2bb0 --- /dev/null +++ b/packages/backend/src/server/web/views/reversi-game.pug @@ -0,0 +1,20 @@ +extends ./base + +block vars + - const user1 = game.user1; + - const user2 = game.user2; + - const title = `${user1.username} vs ${user2.username}`; + - const url = `${config.url}/reversi/g/${game.id}`; + +block title + = `${title} | ${instanceName}` + +block desc + meta(name='description' content='⚫⚪Misskey Reversi⚪⚫') + +block og + meta(property='og:type' content='article') + meta(property='og:title' content= title) + meta(property='og:description' content='⚫⚪Misskey Reversi⚪⚫') + meta(property='og:url' content= url) + meta(property='twitter:card' content='summary') From d380ed36de3f25f5b99590c0fb3b7ea33f8e074b Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 18:00:46 +0900 Subject: [PATCH 11/17] fix lint --- packages/backend/src/core/RoleService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts index 2c1a5280b8..a3558ea9ed 100644 --- a/packages/backend/src/core/RoleService.ts +++ b/packages/backend/src/core/RoleService.ts @@ -181,6 +181,7 @@ export class RoleService implements OnApplicationShutdown, OnModuleInit { ...body, expiresAt: body.expiresAt ? new Date(body.expiresAt) : null, user: null, // joinなカラムは通常取ってこないので + role: null, // joinなカラムは通常取ってこないので }); } break; From 850d38414e44d0be380f5b0900b408b05d41b8c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8A=E3=81=95=E3=82=80=E3=81=AE=E3=81=B2=E3=81=A8?= <46447427+samunohito@users.noreply.github.com> Date: Mon, 22 Jan 2024 18:01:54 +0900 Subject: [PATCH 12/17] =?UTF-8?q?fix:=202024-01-22=2010:50=E6=99=82?= =?UTF-8?q?=E7=82=B9=E3=81=AEdevelop=E3=81=AB=E3=81=A6CI=E3=81=8C=E3=82=B3?= =?UTF-8?q?=E3=82=B1=E3=81=A6=E3=81=84=E3=82=8B=20(#13060)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: バブルゲームのビルド失敗修正 * fix: api.jsonの定義誤りを修正 * fix: lint.yml(typecheck) * fix: fix eslint error * fix: frontend vitest version * fix: frontend vitest version * fix: * fix: cypress * fix: misskey-js test * fix: misskey-js tsd(tsdはpakcage.jsonのexportsをサポートしない?) * fix: conflict * fix: 間違えて上書きしたところを修正 * fix: 再 * fix: api.json * fix: api.json * fix: タイムアウト延長 * Update packages/misskey-js/jest.config.cjs Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com> --------- Co-authored-by: syuilo Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com> --- .github/workflows/lint.yml | 2 + cypress/e2e/basic.cy.js | 9 +- package.json | 4 +- packages/backend/package.json | 8 +- .../src/models/json-schema/reversi-game.ts | 4 +- packages/frontend/package.json | 8 +- packages/misskey-bubble-game/package.json | 8 +- packages/misskey-js/jest.config.cjs | 12 +- packages/misskey-js/package.json | 9 +- .../misskey-js/src/autogen/apiClientJSDoc.ts | 2 +- packages/misskey-js/src/autogen/endpoint.ts | 2 +- packages/misskey-js/src/autogen/entities.ts | 2 +- packages/misskey-js/src/autogen/models.ts | 2 +- packages/misskey-js/src/autogen/types.ts | 2 +- packages/misskey-reversi/package.json | 4 +- packages/sw/package.json | 2 +- pnpm-lock.yaml | 440 +++++++++--------- 17 files changed, 262 insertions(+), 258 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 23cea7d565..fe2d7fce4d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -92,4 +92,6 @@ jobs: - run: pnpm i --frozen-lockfile - run: pnpm --filter misskey-js run build if: ${{ matrix.workspace == 'backend' }} + - run: pnpm --filter misskey-reversi run build + if: ${{ matrix.workspace == 'backend' }} - run: pnpm --filter ${{ matrix.workspace }} run typecheck diff --git a/cypress/e2e/basic.cy.js b/cypress/e2e/basic.cy.js index 5ab07c7480..d20b28c49f 100644 --- a/cypress/e2e/basic.cy.js +++ b/cypress/e2e/basic.cy.js @@ -161,11 +161,13 @@ describe('After user signed in', () => { }); it('successfully loads', () => { - cy.get('[data-cy-user-setup-continue]').should('be.visible'); + // 表示に時間がかかるのでデフォルト秒数だとタイムアウトする + cy.get('[data-cy-user-setup-continue]', { timeout: 12000 }).should('be.visible'); }); it('account setup wizard', () => { - cy.get('[data-cy-user-setup-continue]').click(); + // 表示に時間がかかるのでデフォルト秒数だとタイムアウトする + cy.get('[data-cy-user-setup-continue]', { timeout: 12000 }).click(); cy.get('[data-cy-user-setup-user-name] input').type('ありす'); cy.get('[data-cy-user-setup-user-description] textarea').type('ほげ'); @@ -202,7 +204,8 @@ describe('After user setup', () => { cy.login('alice', 'alice1234'); // アカウント初期設定ウィザード - cy.get('[data-cy-user-setup] [data-cy-modal-window-close]').click(); + // 表示に時間がかかるのでデフォルト秒数だとタイムアウトする + cy.get('[data-cy-user-setup] [data-cy-modal-window-close]', { timeout: 12000 }).click(); cy.get('[data-cy-modal-dialog-ok]').click(); }); diff --git a/package.json b/package.json index 330bd33371..0cd25b2a53 100644 --- a/package.json +++ b/package.json @@ -56,8 +56,8 @@ "typescript": "5.3.3" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "6.19.0", - "@typescript-eslint/parser": "6.19.0", + "@typescript-eslint/eslint-plugin": "6.18.1", + "@typescript-eslint/parser": "6.18.1", "cross-env": "7.0.3", "cypress": "13.6.3", "eslint": "8.56.0", diff --git a/packages/backend/package.json b/packages/backend/package.json index 61f2bef89f..412c7ab8e4 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -8,7 +8,7 @@ }, "scripts": { "start": "node ./built/boot/entry.js", - "start:test": "NODE_ENV=test node ./built/boot/entry.js", + "start:test": "cross-env NODE_ENV=test node ./built/boot/entry.js", "migrate": "pnpm typeorm migration:run -d ormconfig.js", "revert": "pnpm typeorm migration:revert -d ormconfig.js", "check:connect": "node ./check_connect.js", @@ -31,7 +31,7 @@ "test:e2e": "pnpm build && pnpm build:test && pnpm jest:e2e", "test-and-coverage": "pnpm jest-and-coverage", "test-and-coverage:e2e": "pnpm build && pnpm build:test && pnpm jest-and-coverage:e2e", - "generate-api-json": "node ./generate_api_json.js" + "generate-api-json": "pnpm build && node ./generate_api_json.js" }, "optionalDependencies": { "@swc/core-android-arm64": "1.3.11", @@ -227,8 +227,8 @@ "@types/vary": "1.1.3", "@types/web-push": "3.6.3", "@types/ws": "8.5.10", - "@typescript-eslint/eslint-plugin": "6.19.0", - "@typescript-eslint/parser": "6.19.0", + "@typescript-eslint/eslint-plugin": "6.18.1", + "@typescript-eslint/parser": "6.18.1", "aws-sdk-client-mock": "3.0.1", "cross-env": "7.0.3", "eslint": "8.56.0", diff --git a/packages/backend/src/models/json-schema/reversi-game.ts b/packages/backend/src/models/json-schema/reversi-game.ts index 8061d84ad6..f8a5e7451c 100644 --- a/packages/backend/src/models/json-schema/reversi-game.ts +++ b/packages/backend/src/models/json-schema/reversi-game.ts @@ -133,11 +133,11 @@ export const packedReversiGameDetailedSchema = { optional: false, nullable: false, }, form1: { - type: 'any', + type: 'object', optional: false, nullable: true, }, form2: { - type: 'any', + type: 'object', optional: false, nullable: true, }, user1Ready: { diff --git a/packages/frontend/package.json b/packages/frontend/package.json index fb819b2420..a93679e359 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -110,9 +110,9 @@ "@types/tinycolor2": "1.4.6", "@types/uuid": "9.0.7", "@types/ws": "8.5.10", - "@typescript-eslint/eslint-plugin": "6.19.0", - "@typescript-eslint/parser": "6.19.0", - "@vitest/coverage-v8": "1.2.1", + "@typescript-eslint/eslint-plugin": "6.18.1", + "@typescript-eslint/parser": "6.18.1", + "@vitest/coverage-v8": "0.34.6", "@vue/runtime-core": "3.4.15", "acorn": "8.11.3", "cross-env": "7.0.3", @@ -134,7 +134,7 @@ "storybook": "7.6.10", "storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme", "vite-plugin-turbosnap": "1.0.3", - "vitest": "1.2.1", + "vitest": "0.34.6", "vitest-fetch-mock": "0.2.2", "vue-eslint-parser": "9.4.0", "vue-tsc": "1.8.27" diff --git a/packages/misskey-bubble-game/package.json b/packages/misskey-bubble-game/package.json index 787a956185..1dfa7afcdd 100644 --- a/packages/misskey-bubble-game/package.json +++ b/packages/misskey-bubble-game/package.json @@ -24,11 +24,9 @@ }, "devDependencies": { "@misskey-dev/eslint-plugin": "1.0.0", - "@types/matter-js": "0.19.6", "@types/node": "20.11.5", - "@types/seedrandom": "3.0.8", - "@typescript-eslint/eslint-plugin": "6.19.0", - "@typescript-eslint/parser": "6.19.0", + "@typescript-eslint/eslint-plugin": "6.18.1", + "@typescript-eslint/parser": "6.18.1", "eslint": "8.56.0", "nodemon": "3.0.2", "typescript": "5.3.3" @@ -37,6 +35,8 @@ "built" ], "dependencies": { + "@types/matter-js": "0.19.6", + "@types/seedrandom": "3.0.8", "eventemitter3": "5.0.1", "matter-js": "0.19.0", "seedrandom": "3.0.5" diff --git a/packages/misskey-js/jest.config.cjs b/packages/misskey-js/jest.config.cjs index e5a74170ea..1230a4b5e2 100644 --- a/packages/misskey-js/jest.config.cjs +++ b/packages/misskey-js/jest.config.cjs @@ -81,7 +81,17 @@ module.exports = { // ], // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, + moduleNameMapper: { + // Do not resolve .wasm.js to .wasm by the rule below + '^(.+)\\.wasm\\.js$': '$1.wasm.js', + // SWC converts @/foo/bar.js to `../../src/foo/bar.js`, and then this rule + // converts it again to `../../src/foo/bar` which then can be resolved to + // `.ts` files. + // See https://github.com/swc-project/jest/issues/64#issuecomment-1029753225 + // TODO: Use `--allowImportingTsExtensions` on TypeScript 5.0 so that we can + // directly import `.ts` files without this hack. + '^((?:\\.{1,2}|[A-Z:])*/.*)\\.js$': '$1', + }, // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader // modulePathIgnorePatterns: [], diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index 6419eec87d..7132d0896a 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -3,6 +3,7 @@ "name": "misskey-js", "version": "0.0.16", "description": "Misskey SDK for JavaScript", + "types": "./built/dts/index.d.ts", "exports": { ".": { "import": "./built/esm/index.js", @@ -39,8 +40,8 @@ "@swc/jest": "0.2.31", "@types/jest": "29.5.11", "@types/node": "20.11.5", - "@typescript-eslint/eslint-plugin": "6.19.0", - "@typescript-eslint/parser": "6.19.0", + "@typescript-eslint/eslint-plugin": "6.18.1", + "@typescript-eslint/parser": "6.18.1", "eslint": "8.56.0", "jest": "29.7.0", "jest-fetch-mock": "3.0.3", @@ -52,7 +53,9 @@ "typescript": "5.3.3" }, "files": [ - "built" + "built", + "built/esm", + "built/dts" ], "dependencies": { "@swc/cli": "0.1.63", diff --git a/packages/misskey-js/src/autogen/apiClientJSDoc.ts b/packages/misskey-js/src/autogen/apiClientJSDoc.ts index d81444e5df..17e3376be7 100644 --- a/packages/misskey-js/src/autogen/apiClientJSDoc.ts +++ b/packages/misskey-js/src/autogen/apiClientJSDoc.ts @@ -1,6 +1,6 @@ /* * version: 2024.2.0-beta.2 - * generatedAt: 2024-01-22T06:08:45.879Z + * generatedAt: 2024-01-22T07:11:08.412Z */ import type { SwitchCaseResponseType } from '../api.js'; diff --git a/packages/misskey-js/src/autogen/endpoint.ts b/packages/misskey-js/src/autogen/endpoint.ts index 69f02b899f..97268268fc 100644 --- a/packages/misskey-js/src/autogen/endpoint.ts +++ b/packages/misskey-js/src/autogen/endpoint.ts @@ -1,6 +1,6 @@ /* * version: 2024.2.0-beta.2 - * generatedAt: 2024-01-22T06:08:45.877Z + * generatedAt: 2024-01-22T07:11:08.410Z */ import type { diff --git a/packages/misskey-js/src/autogen/entities.ts b/packages/misskey-js/src/autogen/entities.ts index 5d46ea6611..8fc9b1db1d 100644 --- a/packages/misskey-js/src/autogen/entities.ts +++ b/packages/misskey-js/src/autogen/entities.ts @@ -1,6 +1,6 @@ /* * version: 2024.2.0-beta.2 - * generatedAt: 2024-01-22T06:08:45.876Z + * generatedAt: 2024-01-22T07:11:08.408Z */ import { operations } from './types.js'; diff --git a/packages/misskey-js/src/autogen/models.ts b/packages/misskey-js/src/autogen/models.ts index 3e795f2b86..2402fd53ae 100644 --- a/packages/misskey-js/src/autogen/models.ts +++ b/packages/misskey-js/src/autogen/models.ts @@ -1,6 +1,6 @@ /* * version: 2024.2.0-beta.2 - * generatedAt: 2024-01-22T06:08:45.875Z + * generatedAt: 2024-01-22T07:11:08.408Z */ import { components } from './types.js'; diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index 271ca41159..3504f6fa7d 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -3,7 +3,7 @@ /* * version: 2024.2.0-beta.2 - * generatedAt: 2024-01-22T06:08:45.796Z + * generatedAt: 2024-01-22T07:11:08.327Z */ /** diff --git a/packages/misskey-reversi/package.json b/packages/misskey-reversi/package.json index 34b29f5b7c..e65e484b62 100644 --- a/packages/misskey-reversi/package.json +++ b/packages/misskey-reversi/package.json @@ -25,8 +25,8 @@ "devDependencies": { "@misskey-dev/eslint-plugin": "1.0.0", "@types/node": "20.11.5", - "@typescript-eslint/eslint-plugin": "6.19.0", - "@typescript-eslint/parser": "6.19.0", + "@typescript-eslint/eslint-plugin": "6.18.1", + "@typescript-eslint/parser": "6.18.1", "eslint": "8.56.0", "nodemon": "3.0.2", "typescript": "5.3.3" diff --git a/packages/sw/package.json b/packages/sw/package.json index d0be929fb6..244a676e86 100644 --- a/packages/sw/package.json +++ b/packages/sw/package.json @@ -15,7 +15,7 @@ }, "devDependencies": { "@misskey-dev/eslint-plugin": "1.0.0", - "@typescript-eslint/parser": "6.19.0", + "@typescript-eslint/parser": "6.18.1", "@typescript/lib-webworker": "npm:@types/serviceworker@0.0.67", "eslint": "8.56.0", "eslint-plugin-import": "2.29.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 83c51bd2db..fd6a58c0d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,11 +36,11 @@ importers: version: 4.4.0 devDependencies: '@typescript-eslint/eslint-plugin': - specifier: 6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: 6.19.0 - version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) cross-env: specifier: 7.0.3 version: 7.0.3 @@ -501,7 +501,7 @@ importers: version: 29.7.0 '@misskey-dev/eslint-plugin': specifier: 1.0.0 - version: 1.0.0(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + version: 1.0.0(@typescript-eslint/eslint-plugin@6.18.1)(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) '@nestjs/platform-express': specifier: 10.3.0 version: 10.3.0(@nestjs/common@10.2.10)(@nestjs/core@10.2.10) @@ -629,11 +629,11 @@ importers: specifier: 8.5.10 version: 8.5.10 '@typescript-eslint/eslint-plugin': - specifier: 6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: 6.19.0 - version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) aws-sdk-client-mock: specifier: 3.0.1 version: 3.0.1 @@ -645,7 +645,7 @@ importers: version: 8.56.0 eslint-plugin-import: specifier: 2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) + version: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) execa: specifier: 8.0.1 version: 8.0.1 @@ -850,7 +850,7 @@ importers: devDependencies: '@misskey-dev/eslint-plugin': specifier: ^1.0.0 - version: 1.0.0(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + version: 1.0.0(@typescript-eslint/eslint-plugin@6.18.1)(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) '@misskey-dev/summaly': specifier: ^5.0.3 version: 5.0.3 @@ -880,7 +880,7 @@ importers: version: 7.6.10 '@storybook/jest': specifier: 0.2.3 - version: 0.2.3(vitest@1.2.1) + version: 0.2.3(vitest@0.34.6) '@storybook/manager-api': specifier: 7.6.10 version: 7.6.10(react-dom@18.2.0)(react@18.2.0) @@ -945,14 +945,14 @@ importers: specifier: 8.5.10 version: 8.5.10 '@typescript-eslint/eslint-plugin': - specifier: 6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: 6.19.0 - version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) '@vitest/coverage-v8': - specifier: 1.2.1 - version: 1.2.1(vitest@1.2.1) + specifier: 0.34.6 + version: 0.34.6(vitest@0.34.6) '@vue/runtime-core': specifier: 3.4.15 version: 3.4.15 @@ -970,7 +970,7 @@ importers: version: 8.56.0 eslint-plugin-import: specifier: 2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) + version: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) eslint-plugin-vue: specifier: 9.20.1 version: 9.20.1(eslint@8.56.0) @@ -1017,11 +1017,11 @@ importers: specifier: 1.0.3 version: 1.0.3 vitest: - specifier: 1.2.1 - version: 1.2.1(@types/node@20.11.5)(happy-dom@10.0.3)(sass@1.70.0)(terser@5.27.0) + specifier: 0.34.6 + version: 0.34.6(happy-dom@10.0.3)(sass@1.70.0)(terser@5.27.0) vitest-fetch-mock: specifier: 0.2.2 - version: 0.2.2(vitest@1.2.1) + version: 0.2.2(vitest@0.34.6) vue-eslint-parser: specifier: 9.4.0 version: 9.4.0(eslint@8.56.0) @@ -1031,6 +1031,12 @@ importers: packages/misskey-bubble-game: dependencies: + '@types/matter-js': + specifier: 0.19.6 + version: 0.19.6 + '@types/seedrandom': + specifier: 3.0.8 + version: 3.0.8 eventemitter3: specifier: 5.0.1 version: 5.0.1 @@ -1043,22 +1049,16 @@ importers: devDependencies: '@misskey-dev/eslint-plugin': specifier: 1.0.0 - version: 1.0.0(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - '@types/matter-js': - specifier: 0.19.6 - version: 0.19.6 + version: 1.0.0(@typescript-eslint/eslint-plugin@6.18.1)(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) '@types/node': specifier: 20.11.5 version: 20.11.5 - '@types/seedrandom': - specifier: 3.0.8 - version: 3.0.8 '@typescript-eslint/eslint-plugin': - specifier: 6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: 6.19.0 - version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: specifier: 8.56.0 version: 8.56.0 @@ -1089,7 +1089,7 @@ importers: version: 7.39.1(@types/node@20.11.5) '@misskey-dev/eslint-plugin': specifier: 1.0.0 - version: 1.0.0(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + version: 1.0.0(@typescript-eslint/eslint-plugin@6.18.1)(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) '@swc/jest': specifier: 0.2.31 version: 0.2.31(@swc/core@1.3.105) @@ -1100,11 +1100,11 @@ importers: specifier: 20.11.5 version: 20.11.5 '@typescript-eslint/eslint-plugin': - specifier: 6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: 6.19.0 - version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: specifier: 8.56.0 version: 8.56.0 @@ -1173,16 +1173,16 @@ importers: devDependencies: '@misskey-dev/eslint-plugin': specifier: 1.0.0 - version: 1.0.0(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + version: 1.0.0(@typescript-eslint/eslint-plugin@6.18.1)(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) '@types/node': specifier: 20.11.5 version: 20.11.5 '@typescript-eslint/eslint-plugin': - specifier: 6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: 6.19.0 - version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: specifier: 8.56.0 version: 8.56.0 @@ -1207,10 +1207,10 @@ importers: devDependencies: '@misskey-dev/eslint-plugin': specifier: 1.0.0 - version: 1.0.0(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + version: 1.0.0(@typescript-eslint/eslint-plugin@6.18.1)(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0) '@typescript-eslint/parser': - specifier: 6.19.0 - version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) + specifier: 6.18.1 + version: 6.18.1(eslint@8.56.0)(typescript@5.3.3) '@typescript/lib-webworker': specifier: npm:@types/serviceworker@0.0.67 version: /@types/serviceworker@0.0.67 @@ -1219,7 +1219,7 @@ importers: version: 8.56.0 eslint-plugin-import: specifier: 2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) + version: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) nodemon: specifier: 3.0.3 version: 3.0.3 @@ -1899,7 +1899,7 @@ packages: '@babel/traverse': 7.22.11 '@babel/types': 7.22.17 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -1922,7 +1922,7 @@ packages: '@babel/traverse': 7.23.5 '@babel/types': 7.23.5 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -2024,7 +2024,7 @@ packages: '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -3423,7 +3423,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.5 '@babel/types': 7.22.17 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3441,7 +3441,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.6 '@babel/types': 7.23.5 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3472,15 +3472,6 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -4157,7 +4148,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 globals: 13.19.0 ignore: 5.2.4 @@ -4174,7 +4165,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 globals: 13.19.0 ignore: 5.2.4 @@ -4409,7 +4400,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4872,7 +4863,7 @@ packages: eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.11.0)(eslint@8.53.0) dev: true - /@misskey-dev/eslint-plugin@1.0.0(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): + /@misskey-dev/eslint-plugin@1.0.0(@typescript-eslint/eslint-plugin@6.18.1)(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.29.1)(eslint@8.56.0): resolution: {integrity: sha512-dh6UbcrNDVg5DD8k8Qh4ab30OPpuEYIlJCqaBV/lkIV8wNN/AfCJ2V7iTP8V8KjryM4t+sf5IqzQLQnT0mWI4A==} peerDependencies: '@typescript-eslint/eslint-plugin': '>= 6' @@ -4880,10 +4871,10 @@ packages: eslint: '>= 3' eslint-plugin-import: '>= 2' dependencies: - '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) dev: true /@misskey-dev/sharp-read-bmp@1.1.1: @@ -7046,11 +7037,11 @@ packages: resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} dev: true - /@storybook/jest@0.2.3(vitest@1.2.1): + /@storybook/jest@0.2.3(vitest@0.34.6): resolution: {integrity: sha512-ov5izrmbAFObzKeh9AOC5MlmFxAcf0o5i6YFGae9sDx6DGh6alXsRM+chIbucVkUwVHVlSzdfbLDEFGY/ShaYw==} dependencies: '@storybook/expect': 28.1.3-5 - '@testing-library/jest-dom': 6.1.2(@types/jest@28.1.3)(vitest@1.2.1) + '@testing-library/jest-dom': 6.1.2(@types/jest@28.1.3)(vitest@0.34.6) '@types/jest': 28.1.3 jest-mock: 27.5.1 transitivePeerDependencies: @@ -7746,7 +7737,7 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/jest-dom@6.1.2(@types/jest@28.1.3)(vitest@1.2.1): + /@testing-library/jest-dom@6.1.2(@types/jest@28.1.3)(vitest@0.34.6): resolution: {integrity: sha512-NP9jl1Q2qDDtx+cqogowtQtmgD2OVs37iMSIsTv5eN5ETRkf26Kj6ugVwA93/gZzzFWQAsgkKkcftDe91BJCkQ==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} peerDependencies: @@ -7773,7 +7764,7 @@ packages: dom-accessibility-api: 0.5.16 lodash: 4.17.21 redent: 3.0.0 - vitest: 1.2.1(@types/node@20.11.5)(happy-dom@10.0.3)(sass@1.70.0)(terser@5.27.0) + vitest: 0.34.6(happy-dom@10.0.3)(sass@1.70.0)(terser@5.27.0) dev: true /@testing-library/user-event@14.4.3(@testing-library/dom@9.2.0): @@ -7898,6 +7889,16 @@ packages: cbor: 9.0.1 dev: true + /@types/chai-subset@1.3.5: + resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} + dependencies: + '@types/chai': 4.3.11 + dev: true + + /@types/chai@4.3.11: + resolution: {integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==} + dev: true + /@types/color-convert@2.0.3: resolution: {integrity: sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg==} dependencies: @@ -8106,7 +8107,6 @@ packages: /@types/matter-js@0.19.6: resolution: {integrity: sha512-ffk6tqJM5scla+ThXmnox+mdfCo3qYk6yMjQsNcrbo6eQ5DqorVdtnaL+1agCoYzxUjmHeiNB7poBMAmhuLY7w==} - dev: true /@types/mdx@2.0.3: resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==} @@ -8295,7 +8295,7 @@ packages: /@types/seedrandom@3.0.8: resolution: {integrity: sha512-TY1eezMU2zH2ozQoAFAQFOPpvP15g+ZgSfTZt31AUUH/Rxtnz3H+A/Sv1Snw2/amp//omibc+AEkTaA8KUeOLQ==} - dev: true + dev: false /@types/semver@7.5.6: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} @@ -8437,7 +8437,7 @@ packages: '@typescript-eslint/type-utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.53.0 graphemer: 1.4.0 ignore: 5.2.4 @@ -8449,8 +8449,8 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==} + /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -8461,12 +8461,12 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4(supports-color@5.5.0) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/type-utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.1 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.2.4 @@ -8492,15 +8492,15 @@ packages: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.53.0 typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} + /@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -8509,11 +8509,11 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4(supports-color@5.5.0) + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 6.18.1 + debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: @@ -8528,12 +8528,12 @@ packages: '@typescript-eslint/visitor-keys': 6.11.0 dev: true - /@typescript-eslint/scope-manager@6.19.0: - resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==} + /@typescript-eslint/scope-manager@6.18.1: + resolution: {integrity: sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/visitor-keys': 6.19.0 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/visitor-keys': 6.18.1 dev: true /@typescript-eslint/type-utils@6.11.0(eslint@8.53.0)(typescript@5.3.3): @@ -8548,7 +8548,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.3.3) '@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.53.0 ts-api-utils: 1.0.1(typescript@5.3.3) typescript: 5.3.3 @@ -8556,8 +8556,8 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==} + /@typescript-eslint/type-utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -8566,9 +8566,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@5.5.0) + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 ts-api-utils: 1.0.1(typescript@5.3.3) typescript: 5.3.3 @@ -8581,8 +8581,8 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/types@6.19.0: - resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} + /@typescript-eslint/types@6.18.1: + resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==} engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -8597,7 +8597,7 @@ packages: dependencies: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -8607,8 +8607,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.19.0(typescript@5.3.3): - resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} + /@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3): + resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -8616,9 +8616,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4(supports-color@5.5.0) + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/visitor-keys': 6.18.1 + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -8648,8 +8648,8 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==} + /@typescript-eslint/utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -8657,9 +8657,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 6.18.1 + '@typescript-eslint/types': 6.18.1 + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -8675,11 +8675,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.19.0: - resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} + /@typescript-eslint/visitor-keys@6.18.1: + resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/types': 6.18.1 eslint-visitor-keys: 3.4.3 dev: true @@ -8725,64 +8725,61 @@ packages: vue: 3.4.15(typescript@5.3.3) dev: false - /@vitest/coverage-v8@1.2.1(vitest@1.2.1): - resolution: {integrity: sha512-fJEhKaDwGMZtJUX7BRcGxooGwg1Hl0qt53mVup/ZJeznhvL5EodteVnb/mcByhEcvVWbK83ZF31c7nPEDi4LOQ==} + /@vitest/coverage-v8@0.34.6(vitest@0.34.6): + resolution: {integrity: sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw==} peerDependencies: - vitest: ^1.0.0 + vitest: '>=0.32.0 <1' dependencies: '@ampproject/remapping': 2.2.1 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.4(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.6 magic-string: 0.30.5 - magicast: 0.3.3 picocolors: 1.0.0 std-env: 3.7.0 test-exclude: 6.0.0 v8-to-istanbul: 9.2.0 - vitest: 1.2.1(@types/node@20.11.5)(happy-dom@10.0.3)(sass@1.70.0)(terser@5.27.0) + vitest: 0.34.6(happy-dom@10.0.3)(sass@1.70.0)(terser@5.27.0) transitivePeerDependencies: - supports-color dev: true - /@vitest/expect@1.2.1: - resolution: {integrity: sha512-/bqGXcHfyKgFWYwIgFr1QYDaR9e64pRKxgBNWNXPefPFRhgm+K3+a/dS0cUGEreWngets3dlr8w8SBRw2fCfFQ==} + /@vitest/expect@0.34.6: + resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} dependencies: - '@vitest/spy': 1.2.1 - '@vitest/utils': 1.2.1 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 chai: 4.3.10 dev: true - /@vitest/runner@1.2.1: - resolution: {integrity: sha512-zc2dP5LQpzNzbpaBt7OeYAvmIsRS1KpZQw4G3WM/yqSV1cQKNKwLGmnm79GyZZjMhQGlRcSFMImLjZaUQvNVZQ==} + /@vitest/runner@0.34.6: + resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} dependencies: - '@vitest/utils': 1.2.1 - p-limit: 5.0.0 - pathe: 1.1.1 + '@vitest/utils': 0.34.6 + p-limit: 4.0.0 + pathe: 1.1.2 dev: true - /@vitest/snapshot@1.2.1: - resolution: {integrity: sha512-Tmp/IcYEemKaqAYCS08sh0vORLJkMr0NRV76Gl8sHGxXT5151cITJCET20063wk0Yr/1koQ6dnmP6eEqezmd/Q==} + /@vitest/snapshot@0.34.6: + resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} dependencies: magic-string: 0.30.5 - pathe: 1.1.1 + pathe: 1.1.2 pretty-format: 29.7.0 dev: true - /@vitest/spy@1.2.1: - resolution: {integrity: sha512-vG3a/b7INKH7L49Lbp0IWrG6sw9j4waWAucwnksPB1r1FTJgV7nkBByd9ufzu6VWya/QTvQW4V9FShZbZIB2UQ==} + /@vitest/spy@0.34.6: + resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} dependencies: tinyspy: 2.2.0 dev: true - /@vitest/utils@1.2.1: - resolution: {integrity: sha512-bsH6WVZYe/J2v3+81M5LDU8kW76xWObKIURpPrOXm2pjBniBu2MERI/XP60GpS4PHU3jyK50LUutOwrx4CyHUg==} + /@vitest/utils@0.34.6: + resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} dependencies: diff-sequences: 29.6.3 - estree-walker: 3.0.3 loupe: 2.3.7 pretty-format: 29.7.0 dev: true @@ -9085,7 +9082,7 @@ packages: engines: {node: '>= 6.0.0'} requiresBuild: true dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9093,7 +9090,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: false @@ -9479,7 +9476,7 @@ packages: resolution: {integrity: sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==} dependencies: archy: 1.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) fastq: 1.15.0 transitivePeerDependencies: - supports-color @@ -10077,7 +10074,7 @@ packages: check-error: 1.0.3 deep-eql: 4.1.3 get-func-name: 2.0.2 - loupe: 2.3.6 + loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 dev: true @@ -10826,7 +10823,7 @@ packages: cli-table3: 0.6.3 commander: 6.2.1 common-tags: 1.8.2 - dayjs: 1.11.7 + dayjs: 1.11.10 debug: 4.3.4(supports-color@8.1.1) enquirer: 2.3.6 eventemitter2: 6.4.7 @@ -10886,11 +10883,6 @@ packages: /dayjs@1.11.10: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} - dev: false - - /dayjs@1.11.7: - resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} - dev: true /de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} @@ -10928,6 +10920,7 @@ packages: dependencies: ms: 2.1.2 supports-color: 5.5.0 + dev: true /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -10940,7 +10933,6 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 - dev: true /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -11156,7 +11148,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -11480,7 +11472,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) esbuild: 0.18.20 transitivePeerDependencies: - supports-color @@ -11639,7 +11631,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -11660,7 +11652,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7(supports-color@8.1.1) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -11703,7 +11695,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -11713,7 +11705,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -11722,7 +11714,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -11789,7 +11781,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -11836,7 +11828,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -11908,6 +11900,7 @@ packages: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: '@types/estree': 1.0.5 + dev: false /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -12466,7 +12459,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -13022,6 +13015,7 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -13159,7 +13153,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: false @@ -13219,7 +13213,7 @@ packages: engines: {node: '>= 6.0.0'} dependencies: agent-base: 5.1.1 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -13229,7 +13223,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -13238,7 +13232,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: false @@ -13398,7 +13392,7 @@ packages: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -13812,7 +13806,7 @@ packages: '@babel/core': 7.23.5 '@babel/parser': 7.23.6 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -13825,7 +13819,7 @@ packages: '@babel/core': 7.23.5 '@babel/parser': 7.23.6 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -13844,7 +13838,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -14766,12 +14760,9 @@ packages: wrap-ansi: 7.0.0 dev: true - /local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + /local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} - dependencies: - mlly: 1.5.0 - pkg-types: 1.0.3 dev: true /locate-path@3.0.0: @@ -14863,13 +14854,6 @@ packages: js-tokens: 4.0.0 dev: true - /loupe@2.3.6: - resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} - deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5 - dependencies: - get-func-name: 2.0.2 - dev: true - /loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: @@ -14938,14 +14922,6 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - /magicast@0.3.3: - resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==} - dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - source-map-js: 1.0.2 - dev: true - /mailcheck@1.1.1: resolution: {integrity: sha512-3WjL8+ZDouZwKlyJBMp/4LeziLFXgleOdsYu87piGcMLqhBzCsy2QFdbtAwv757TFC/rtqd738fgJw1tFQCSgA==} dev: false @@ -16077,9 +16053,9 @@ packages: dependencies: yocto-queue: 0.1.0 - /p-limit@5.0.0: - resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} - engines: {node: '>=18'} + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: yocto-queue: 1.0.0 dev: true @@ -16463,7 +16439,7 @@ packages: dependencies: jsonc-parser: 3.2.0 mlly: 1.5.0 - pathe: 1.1.1 + pathe: 1.1.2 dev: true /plimit-lit@1.5.0: @@ -17177,7 +17153,7 @@ packages: engines: {node: '>=8.16.0'} dependencies: '@types/mime-types': 2.1.4 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) extract-zip: 1.7.0 https-proxy-agent: 4.0.0 mime: 2.6.0 @@ -18177,7 +18153,7 @@ packages: dependencies: '@hapi/hoek': 10.0.1 '@hapi/wreck': 18.0.1 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) joi: 17.7.0 transitivePeerDependencies: - supports-color @@ -18377,7 +18353,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -18530,7 +18506,7 @@ packages: arg: 5.0.2 bluebird: 3.7.2 check-more-types: 2.24.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) execa: 5.1.1 lazy-ass: 1.6.0 ps-tree: 1.2.0 @@ -18788,6 +18764,7 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -19035,8 +19012,8 @@ packages: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} dev: false - /tinypool@0.8.2: - resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} + /tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} engines: {node: '>=14.0.0'} dev: true @@ -19408,7 +19385,7 @@ packages: chalk: 4.1.2 cli-highlight: 2.1.11 dayjs: 1.11.10 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) dotenv: 16.0.3 glob: 10.3.10 ioredis: 5.3.2 @@ -19762,14 +19739,15 @@ packages: core-util-is: 1.0.2 extsprintf: 1.3.0 - /vite-node@1.2.1(@types/node@20.11.5)(sass@1.70.0)(terser@5.27.0): - resolution: {integrity: sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==} - engines: {node: ^18.0.0 || >=20.0.0} + /vite-node@0.34.6(@types/node@20.11.5)(sass@1.70.0)(terser@5.27.0): + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} + engines: {node: '>=v14.18.0'} hasBin: true dependencies: cac: 6.7.14 - debug: 4.3.4(supports-color@5.5.0) - pathe: 1.1.1 + debug: 4.3.4(supports-color@8.1.1) + mlly: 1.5.0 + pathe: 1.1.2 picocolors: 1.0.0 vite: 5.0.12(@types/node@20.11.5)(sass@1.70.0)(terser@5.27.0) transitivePeerDependencies: @@ -19824,34 +19802,34 @@ packages: optionalDependencies: fsevents: 2.3.3 - /vitest-fetch-mock@0.2.2(vitest@1.2.1): + /vitest-fetch-mock@0.2.2(vitest@0.34.6): resolution: {integrity: sha512-XmH6QgTSjCWrqXoPREIdbj40T7i1xnGmAsTAgfckoO75W1IEHKR8hcPCQ7SO16RsdW1t85oUm6pcQRLeBgjVYQ==} engines: {node: '>=14.14.0'} peerDependencies: vitest: '>=0.16.0' dependencies: cross-fetch: 3.1.5 - vitest: 1.2.1(@types/node@20.11.5)(happy-dom@10.0.3)(sass@1.70.0)(terser@5.27.0) + vitest: 0.34.6(happy-dom@10.0.3)(sass@1.70.0)(terser@5.27.0) transitivePeerDependencies: - encoding dev: true - /vitest@1.2.1(@types/node@20.11.5)(happy-dom@10.0.3)(sass@1.70.0)(terser@5.27.0): - resolution: {integrity: sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==} - engines: {node: ^18.0.0 || >=20.0.0} + /vitest@0.34.6(happy-dom@10.0.3)(sass@1.70.0)(terser@5.27.0): + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} + engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': ^1.0.0 - '@vitest/ui': ^1.0.0 + '@vitest/browser': '*' + '@vitest/ui': '*' happy-dom: '*' jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/node': - optional: true '@vitest/browser': optional: true '@vitest/ui': @@ -19860,29 +19838,37 @@ packages: optional: true jsdom: optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true dependencies: + '@types/chai': 4.3.11 + '@types/chai-subset': 1.3.5 '@types/node': 20.11.5 - '@vitest/expect': 1.2.1 - '@vitest/runner': 1.2.1 - '@vitest/snapshot': 1.2.1 - '@vitest/spy': 1.2.1 - '@vitest/utils': 1.2.1 + '@vitest/expect': 0.34.6 + '@vitest/runner': 0.34.6 + '@vitest/snapshot': 0.34.6 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + acorn: 8.11.3 acorn-walk: 8.3.2 cac: 6.7.14 chai: 4.3.10 - debug: 4.3.4(supports-color@5.5.0) - execa: 8.0.1 + debug: 4.3.4(supports-color@8.1.1) happy-dom: 10.0.3 - local-pkg: 0.5.0 + local-pkg: 0.4.3 magic-string: 0.30.5 - pathe: 1.1.1 + pathe: 1.1.2 picocolors: 1.0.0 std-env: 3.7.0 strip-literal: 1.3.0 tinybench: 2.6.0 - tinypool: 0.8.2 + tinypool: 0.7.0 vite: 5.0.12(@types/node@20.11.5)(sass@1.70.0)(terser@5.27.0) - vite-node: 1.2.1(@types/node@20.11.5)(sass@1.70.0)(terser@5.27.0) + vite-node: 0.34.6(@types/node@20.11.5)(sass@1.70.0)(terser@5.27.0) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -19953,7 +19939,7 @@ packages: peerDependencies: eslint: '>=6.0.0' dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.56.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 From 99fe03bd4d8ed4545ebc7cd5ade678397339f6e1 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 18:31:59 +0900 Subject: [PATCH 13/17] :art: --- packages/frontend/assets/reversi/logo.png | Bin 96293 -> 142237 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/frontend/assets/reversi/logo.png b/packages/frontend/assets/reversi/logo.png index 7d807ef1dc57af5ca60cad70277d9112e307d0fc..4b0d58dec1f6dad4c57a949aa54e2fb9e9edf1c5 100644 GIT binary patch literal 142237 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%0D%Dv`=xSH1YAe*3he4^wV{=7Qx6Zre>hA0O=* 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 Date: Mon, 22 Jan 2024 18:32:32 +0900 Subject: [PATCH 14/17] fix lint --- packages/backend/src/server/web/ClientServerService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts index 65b21694f8..8e1a89d55f 100644 --- a/packages/backend/src/server/web/ClientServerService.ts +++ b/packages/backend/src/server/web/ClientServerService.ts @@ -693,7 +693,7 @@ export class ClientServerService { }); // Reversi game - fastify.get<{ Params: { channel: string; } }>('/reversi/g/:game', async (request, reply) => { + fastify.get<{ Params: { game: string; } }>('/reversi/g/:game', async (request, reply) => { const game = await this.reversiGamesRepository.findOneBy({ id: request.params.game, }); From 5e307e472dbcae5531d90e4d96c641db3d6211b8 Mon Sep 17 00:00:00 2001 From: syuilo Date: Mon, 22 Jan 2024 18:33:40 +0900 Subject: [PATCH 15/17] 2024.2.0-beta.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0cd25b2a53..479d25f945 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "2024.2.0-beta.2", + "version": "2024.2.0-beta.3", "codename": "nasubi", "repository": { "type": "git", From 31a39776f52783e6e7630604b86d2694cc9e9b94 Mon Sep 17 00:00:00 2001 From: tamaina Date: Tue, 23 Jan 2024 00:19:43 +0900 Subject: [PATCH 16/17] chore: publish misskey-js automatically (#13014) * chore: publish @misskey-dev/misskey-js * remove @misskey-dev/ * ?? * correct version * version --- .github/workflows/on-release-created.yml | 43 ++++++++++++++++++++++++ .github/workflows/test-misskey-js.yml | 14 ++++++++ packages/misskey-js/LICENSE | 2 +- packages/misskey-js/package.json | 2 +- 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/on-release-created.yml diff --git a/.github/workflows/on-release-created.yml b/.github/workflows/on-release-created.yml new file mode 100644 index 0000000000..b4c2d843f3 --- /dev/null +++ b/.github/workflows/on-release-created.yml @@ -0,0 +1,43 @@ +name: Publish Node.js Package + +on: + release: + types: [created] + + workflow_dispatch: + +jobs: + publish-misskey-js: + name: Publish misskey-js + runs-on: ubuntu-latest + + permissions: + contents: read + id-token: write + + strategy: + matrix: + node-version: [20.10.0] + + steps: + - uses: actions/checkout@v4 + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: false + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'pnpm' + registry-url: 'https://registry.npmjs.org' + - name: Publish package + run: | + corepack enable + pnpm i --frozen-lockfile + pnpm build + pnpm --filter misskey-js publish --access public --no-git-checks --provenance + env: + NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} + NPM_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} diff --git a/.github/workflows/test-misskey-js.yml b/.github/workflows/test-misskey-js.yml index 10c7ccf4d3..5aed385df9 100644 --- a/.github/workflows/test-misskey-js.yml +++ b/.github/workflows/test-misskey-js.yml @@ -54,3 +54,17 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} files: ./packages/misskey-js/coverage/coverage-final.json + + check-version: + # ルートの package.json と packages/misskey-js/package.json のバージョンが一致しているかを確認する + name: Check version + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4.1.1 + - name: Check version + run: | + if [ "$(jq -r '.version' package.json)" != "$(jq -r '.version' packages/misskey-js/package.json)" ]; then + echo "Version mismatch!" + exit 1 + fi diff --git a/packages/misskey-js/LICENSE b/packages/misskey-js/LICENSE index 11c1f9ce22..63762b85d8 100644 --- a/packages/misskey-js/LICENSE +++ b/packages/misskey-js/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021-2022 syuilo and other contributors +Copyright (c) 2021-2024 syuilo and other contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json index 7132d0896a..06c3ce6b54 100644 --- a/packages/misskey-js/package.json +++ b/packages/misskey-js/package.json @@ -1,7 +1,7 @@ { "type": "module", "name": "misskey-js", - "version": "0.0.16", + "version": "2024.2.0-beta.3", "description": "Misskey SDK for JavaScript", "types": "./built/dts/index.d.ts", "exports": { From 2ee5507d06c4a86001221b90efed5cf6facb074b Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 22 Jan 2024 15:25:22 +0000 Subject: [PATCH 17/17] fix of #13014 (misskey-js publish) --- .github/workflows/on-release-created.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/on-release-created.yml b/.github/workflows/on-release-created.yml index b4c2d843f3..3cc0e5007b 100644 --- a/.github/workflows/on-release-created.yml +++ b/.github/workflows/on-release-created.yml @@ -1,4 +1,4 @@ -name: Publish Node.js Package +name: On Release Created (Publish misskey-js) on: release: @@ -21,6 +21,8 @@ jobs: steps: - uses: actions/checkout@v4 + with: + submodules: true - name: Install pnpm uses: pnpm/action-setup@v2 with: