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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 R^%ZKXoRqR;iTG>({{v=rb<_X= From e0ad066382aff197feb7339ec337c21a5e228aa3 Mon Sep 17 00:00:00 2001 From: syuilo 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: