1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-06-22 18:54:45 +02:00

Compare commits

...

16 Commits

Author SHA1 Message Date
github-actions[bot]
8a38a05d83 Release: 2026.5.3 2026-05-18 01:44:50 +00:00
github-actions[bot]
5b8a38cde8 Bump version to 2026.5.3-alpha.0 2026-05-18 01:24:32 +00:00
かっこかり
d503b8d073 fix(docker): runnerでのpnpmの依存関係チェックを無効化 (#17425)
* fix(docker): runnerでのpnpmの依存関係チェックを無効化

* Update Changelog

* update changelog
2026-05-18 10:23:47 +09:00
syuilo
419cdcff36 Update about-misskey.vue 2026-05-18 07:25:03 +09:00
github-actions[bot]
badb243021 [skip ci] Update CHANGELOG.md (prepend template) 2026-05-17 22:15:01 +00:00
github-actions[bot]
2bc0ccb108 Release: 2026.5.2 2026-05-17 22:14:54 +00:00
おさむのひと
fc6c45d175 fix: add-i18n-keyの記述が間違っていたので修正 (#17418) 2026-05-17 19:30:35 +09:00
github-actions[bot]
99081be9fd Bump version to 2026.5.2-beta.1 2026-05-17 09:59:00 +00:00
かっこかり
9410bc5194 fix: move users/notify/list to following/list (#17416)
* fix: move `users/notify/list` to `following/list`

* fix

* fix lint

* fix test

* fix test

* fix test title
2026-05-17 18:51:10 +09:00
かっこかり
baad1c51d8 Update CHANGELOG.md 2026-05-16 12:54:19 +09:00
syuilo
e6375fb756 Update CONTRIBUTING.md 2026-05-15 10:12:17 +09:00
syuilo
92c1dc06f2 Update CONTRIBUTING.md 2026-05-15 10:11:42 +09:00
かっこかり
1684dc9c05 fix(deps): broken lockfile (#17404) 2026-05-15 09:47:35 +09:00
renovate[bot]
08c6efb044 fix(deps): update dependency sanitize-html to v2.17.4 [security] [ci skip] (#17402)
* fix(deps): update dependency sanitize-html to v2.17.4 [security]

* fix minimumReleaseAgeExclude

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com>
2026-05-15 09:44:57 +09:00
syuilo
62b323b58b update re2 2026-05-15 09:39:57 +09:00
かっこかり
a3227c99ed deps: update dependencies (#17400)
* deps: Update Dependencies

* run pnpm dedupe

* update some major packages

* update to pnpm v11

* update systeminformation

* fix indent

* fix: rollback sharp to 0.33
2026-05-14 22:51:57 +09:00
32 changed files with 3182 additions and 3556 deletions

View File

@@ -26,7 +26,9 @@ _settings:
general: "全般"
appearance: "外観"
# パラメータ付き (ICU MessageFormat 互換)
# パラメータ付き (単純なプレースホルダ置換)
# ICU MessageFormat の plural / select / number / date などは非対応
# 使えるのは `{name}` のような単純な置換のみ
greeting: "こんにちは、{name}さん"
```

3
.npmrc
View File

@@ -1,3 +0,0 @@
engine-strict = true
save-exact = true
shell-emulator = true

View File

@@ -1,3 +1,9 @@
## 2026.5.3
### General
- Fix: Dockerで起動に失敗する問題を修正
## 2026.5.2
### Note
@@ -8,7 +14,8 @@
### General
- Enhance: Unicode 17.0 に収録されている絵文字の処理・表示に対応
- Fluent Emojiや端末ネイティブの絵文字を利用している場合は、最新の絵文字に対応しておらず正しく表示できない可能性があります。絵文字が表示できない場合は、表示に使用する絵文字をTwemojiに切り替えてご利用ください。
- 投稿通知設定したユーザーをリストで見ることができるように
- Enhance: 投稿通知設定したユーザーをリストで見ることができるように
- 依存関係の更新
### Client
- Enhance: テーマのプレビュー時、リロードせずにもとのテーマに戻せるように

View File

@@ -189,6 +189,14 @@ pnpm migrate
After finishing the migration, you can proceed.
#### Cloudflare tunnel
Cloudflare tunnelを使うとローカルのMisskeyサーバーをインターネットに公開できます。
HTTPSでしか動作しない機能を検証したい時や、スマホなど別のデバイスからローカルのMisskeyサーバーを検証したい時に便利です。
##### Cloudflare warpと併用する際のtips
> cloudflared (Cloudflare Tunnel) は region1.v2.argotunnel.com / region2.v2.argotunnel.com に QUIC/HTTP2 でアウトバウンド接続するのですが、WARP を有効化するとこのトラフィックが WARP 経由になってループ/切断します。これら 2 ホストを WARP のトンネル除外split tunnelに追加することで、cloudflared だけは WARP をバイパスして直接 Cloudflare エッジへ接続できるようになります。
### Start developing
During development, it is useful to use the
```

View File

@@ -74,6 +74,8 @@ FROM --platform=$TARGETPLATFORM node:${NODE_VERSION}-slim AS runner
ARG UID="991"
ARG GID="991"
ENV PNPM_CONFIG_VERIFY_DEPS_BEFORE_RUN=false
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ffmpeg tini curl libjemalloc-dev libjemalloc2 \

View File

@@ -1,12 +1,12 @@
{
"name": "misskey",
"version": "2026.5.2-beta.0",
"version": "2026.5.3",
"codename": "nasubi",
"repository": {
"type": "git",
"url": "https://github.com/misskey-dev/misskey.git"
},
"packageManager": "pnpm@10.33.2",
"packageManager": "pnpm@11.1.2",
"workspaces": [
"packages/misskey-js",
"packages/i18n",
@@ -53,44 +53,33 @@
"cleanall": "pnpm clean-all"
},
"dependencies": {
"cssnano": "7.1.7",
"cssnano": "8.0.0",
"esbuild": "0.28.0",
"execa": "9.6.1",
"ignore-walk": "8.0.0",
"js-yaml": "4.1.1",
"postcss": "8.5.10",
"tar": "7.5.13",
"terser": "5.46.2"
"postcss": "8.5.14",
"tar": "7.5.14",
"terser": "5.47.1"
},
"devDependencies": {
"@eslint/js": "9.39.4",
"@misskey-dev/eslint-plugin": "2.1.0",
"@types/js-yaml": "4.0.9",
"@types/node": "24.12.2",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"@typescript/native-preview": "7.0.0-dev.20260426.1",
"cross-env": "10.1.0",
"cypress": "15.14.1",
"cypress": "15.14.2",
"eslint": "9.39.4",
"globals": "17.5.0",
"globals": "17.6.0",
"ncp": "2.0.0",
"pnpm": "10.33.2",
"pnpm": "11.1.2",
"start-server-and-test": "3.0.2",
"typescript": "5.9.3"
},
"optionalDependencies": {
"@tensorflow/tfjs-core": "4.22.0"
},
"pnpm": {
"overrides": {
"@aiscript-dev/aiscript-languageserver": "-",
"chokidar": "5.0.0",
"lodash": "4.18.1"
},
"ignoredBuiltDependencies": [
"@sentry-internal/node-cpu-profiler",
"exifreader"
]
}
}

View File

@@ -53,8 +53,8 @@
"utf-8-validate": "6.0.6"
},
"dependencies": {
"@aws-sdk/client-s3": "3.1037.0",
"@aws-sdk/lib-storage": "3.1037.0",
"@aws-sdk/client-s3": "3.1044.0",
"@aws-sdk/lib-storage": "3.1044.0",
"@fastify/accepts": "5.0.4",
"@fastify/cors": "11.2.0",
"@fastify/express": "4.0.5",
@@ -66,16 +66,16 @@
"@misskey-dev/emoji-data": "17.0.3",
"@misskey-dev/sharp-read-bmp": "1.2.0",
"@misskey-dev/summaly": "5.3.0",
"@napi-rs/canvas": "0.1.100",
"@napi-rs/canvas": "1.0.0",
"@nestjs/common": "11.1.19",
"@nestjs/core": "11.1.19",
"@nestjs/testing": "11.1.19",
"@oxc-project/runtime": "0.127.0",
"@oxc-project/runtime": "0.129.0",
"@peertube/http-signature": "1.7.0",
"@sentry/node": "10.50.0",
"@sentry/profiling-node": "10.50.0",
"@sentry/node": "10.52.0",
"@sentry/profiling-node": "10.52.0",
"@simplewebauthn/server": "13.3.0",
"@sinonjs/fake-timers": "15.3.2",
"@sinonjs/fake-timers": "15.4.0",
"@smithy/node-http-handler": "4.6.1",
"accepts": "1.3.8",
"ajv": "8.20.0",
@@ -84,7 +84,7 @@
"bcryptjs": "3.0.3",
"blurhash": "2.0.5",
"body-parser": "2.2.2",
"bullmq": "5.76.2",
"bullmq": "5.76.6",
"cacheable-lookup": "7.0.0",
"chalk": "5.6.2",
"chalk-template": "1.1.2",
@@ -99,28 +99,28 @@
"file-type": "22.0.1",
"fluent-ffmpeg": "2.1.3",
"form-data": "4.0.5",
"got": "15.0.3",
"got": "15.0.5",
"hpagent": "1.2.0",
"http-link-header": "1.1.3",
"i18n": "workspace:*",
"ioredis": "5.10.1",
"ip-cidr": "4.0.2",
"ipaddr.js": "2.3.0",
"ipaddr.js": "2.4.0",
"is-svg": "6.1.0",
"json5": "2.2.3",
"jsonld": "9.0.0",
"juice": "11.1.1",
"meilisearch": "0.57.0",
"meilisearch": "0.58.0",
"mfm-js": "0.26.0",
"mime-types": "3.0.2",
"misskey-js": "workspace:*",
"misskey-reversi": "workspace:*",
"ms": "3.0.0-canary.202508261828",
"nanoid": "5.1.9",
"nanoid": "5.1.11",
"nested-property": "4.0.0",
"node-fetch": "3.3.2",
"node-html-parser": "7.1.0",
"nodemailer": "8.0.6",
"nodemailer": "8.0.7",
"nsfwjs": "4.3.0",
"oauth2orize": "1.12.0",
"oauth2orize-pkce": "0.1.2",
@@ -128,27 +128,27 @@
"otpauth": "9.5.1",
"pg": "8.20.0",
"pkce-challenge": "6.0.0",
"probe-image-size": "7.2.3",
"probe-image-size": "7.3.0",
"promise-limit": "2.7.0",
"qrcode": "1.5.4",
"random-seed": "0.3.0",
"ratelimiter": "3.4.1",
"re2": "1.24.0",
"re2": "1.24.1",
"reflect-metadata": "0.2.2",
"rename": "1.0.4",
"rss-parser": "3.13.0",
"rxjs": "7.8.2",
"sanitize-html": "2.17.3",
"sanitize-html": "2.17.4",
"secure-json-parse": "4.1.0",
"semver": "7.7.4",
"sharp": "0.33.5",
"slacc": "0.1.5",
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0",
"systeminformation": "5.31.5",
"systeminformation": "5.31.6",
"tinycolor2": "1.6.0",
"tmp": "0.2.5",
"tsc-alias": "1.8.16",
"tsc-alias": "1.8.17",
"typeorm": "0.3.28",
"ulid": "3.0.2",
"vary": "1.1.2",
@@ -160,7 +160,7 @@
"@kitajs/ts-html-plugin": "4.1.4",
"@nestjs/platform-express": "11.1.19",
"@rollup/plugin-esm-shim": "0.1.8",
"@sentry/vue": "10.50.0",
"@sentry/vue": "10.52.0",
"@types/accepts": "1.3.7",
"@types/archiver": "7.0.0",
"@types/body-parser": "1.19.6",
@@ -191,8 +191,8 @@
"@types/vary": "1.1.3",
"@types/web-push": "3.6.4",
"@types/ws": "8.18.1",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"@vitest/coverage-v8": "4.1.5",
"aws-sdk-client-mock": "4.1.0",
"cbor": "10.0.12",
@@ -202,10 +202,10 @@
"fkill": "10.0.3",
"js-yaml": "4.1.1",
"pid-port": "2.1.1",
"rolldown": "1.0.0-rc.15",
"rolldown": "1.0.0",
"simple-oauth2": "5.1.0",
"supertest": "7.2.2",
"vite": "8.0.10",
"vite": "8.0.11",
"vitest": "4.1.5",
"vitest-mock-extended": "4.0.0"
}

View File

@@ -217,6 +217,7 @@ export * as 'flash/search' from './endpoints/flash/search.js';
export * as 'following/create' from './endpoints/following/create.js';
export * as 'following/delete' from './endpoints/following/delete.js';
export * as 'following/invalidate' from './endpoints/following/invalidate.js';
export * as 'following/list' from './endpoints/following/list.js';
export * as 'following/requests/accept' from './endpoints/following/requests/accept.js';
export * as 'following/requests/cancel' from './endpoints/following/requests/cancel.js';
export * as 'following/requests/list' from './endpoints/following/requests/list.js';
@@ -391,7 +392,6 @@ export * as 'users/featured-notes' from './endpoints/users/featured-notes.js';
export * as 'users/flashs' from './endpoints/users/flashs.js';
export * as 'users/followers' from './endpoints/users/followers.js';
export * as 'users/following' from './endpoints/users/following.js';
export * as 'users/notify/list' from './endpoints/users/notify/list.js';
export * as 'users/get-following-users-by-birthday' from './endpoints/users/get-following-users-by-birthday.js';
export * as 'users/gallery/posts' from './endpoints/users/gallery/posts.js';
export * as 'users/get-frequently-replied-users' from './endpoints/users/get-frequently-replied-users.js';

View File

@@ -4,7 +4,7 @@
*/
import { Inject, Injectable } from '@nestjs/common';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { FollowingEntityService } from '@/core/entities/FollowingEntityService.js';
import type { FollowingsRepository } from '@/models/_.js';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { QueryService } from '@/core/QueryService.js';
@@ -15,7 +15,7 @@ export const meta = {
requireCredential: true,
kind: 'read:following',
description: 'List of following users with notification enabled.',
description: 'List of following users',
res: {
type: 'array',
@@ -23,7 +23,7 @@ export const meta = {
items: {
type: 'object',
optional: false, nullable: false,
ref: 'UserDetailed',
ref: 'Following',
},
},
} as const;
@@ -31,6 +31,7 @@ export const meta = {
export const paramDef = {
type: 'object',
properties: {
notification: { type: 'boolean', default: false },
sinceId: { type: 'string', format: 'misskey:id' },
untilId: { type: 'string', format: 'misskey:id' },
sinceDate: { type: 'integer' },
@@ -45,22 +46,24 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.followingsRepository)
private followingsRepository: FollowingsRepository,
private userEntityService: UserEntityService,
private followingEntityService: FollowingEntityService,
private queryService: QueryService,
) {
super(meta, paramDef, async (ps, me) => {
const query = this.queryService.makePaginationQuery(this.followingsRepository.createQueryBuilder('following'), ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate)
.innerJoinAndSelect('following.followee', 'followee')
.andWhere('following.followerId = :userId', { userId: me.id })
.andWhere('following.notify IS NOT NULL');
.andWhere('following.followerId = :userId', { userId: me.id });
if (ps.notification) {
query.andWhere('following.notify IS NOT NULL');
}
query.innerJoinAndSelect('following.followee', 'followee');
const followings = await query
.limit(ps.limit)
.getMany();
const users = followings.map(f => f.followee!);
return await this.userEntityService.packMany(users, me, { schema: 'UserDetailed' });
return await this.followingEntityService.packMany(followings, me, { populateFollowee: true });
});
}
}

View File

@@ -9,7 +9,7 @@ import { describe, beforeAll, test } from 'vitest';
import { api, signup } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('users/notify/list', () => {
describe('following/list', () => {
let alice: misskey.entities.SignupResponse;
let bob: misskey.entities.SignupResponse;
let carol: misskey.entities.SignupResponse;
@@ -24,11 +24,19 @@ describe('users/notify/list', () => {
// alice が bob を普通にフォロー(通知設定なし)
await api('following/create', { userId: bob.id }, alice);
const res = await api('users/notify/list', {}, alice);
const res1 = await api('following/list', { notification: true }, alice);
const res2 = await api('following/list', {}, alice);
assert.strictEqual(res.status, 200);
assert.strictEqual(Array.isArray(res.body), true);
assert.strictEqual(res.body.length, 0);
// notification: true の場合は通知設定なしのフォローは返らない
assert.strictEqual(res1.status, 200);
assert.strictEqual(Array.isArray(res1.body), true);
assert.strictEqual(res1.body.length, 0);
// notification パラメータなしの場合は通知設定なしのフォローも返る
assert.strictEqual(res2.status, 200);
assert.strictEqual(Array.isArray(res2.body), true);
assert.strictEqual(res2.body.length, 1);
assert.strictEqual(res2.body[0].followeeId, bob.id);
});
test('通知設定ありのフォローがある場合、そのユーザーが返る', async () => {
@@ -36,34 +44,42 @@ describe('users/notify/list', () => {
await api('following/create', { userId: carol.id, withReplies: false }, alice);
await api('following/update', { userId: carol.id, notify: 'normal' }, alice);
const res = await api('users/notify/list', {}, alice);
const res = await api('following/list', { notification: true }, alice);
assert.strictEqual(res.status, 200);
assert.strictEqual(res.body.length, 1);
assert.strictEqual(res.body[0].id, carol.id);
assert.strictEqual(res.body[0].followeeId, carol.id);
});
test('複数ユーザーで通知設定ありの場合、全員返る', async () => {
// bob にも通知設定をON
await api('following/update', { userId: bob.id, notify: 'normal' }, alice);
const res = await api('users/notify/list', {}, alice);
const res = await api('following/list', { notification: true }, alice);
assert.strictEqual(res.status, 200);
assert.strictEqual(res.body.length, 2);
const ids = res.body.map((u: { id: string }) => u.id).sort();
const ids = res.body.map((u) => u.followeeId).sort();
assert.deepStrictEqual(ids, [bob.id, carol.id].sort());
});
test('通知設定をOFFnoneにすると一覧から外れる', async () => {
test('通知設定をOFFnoneにすると notification: true な一覧から外れる', async () => {
await api('following/update', { userId: bob.id, notify: 'none' }, alice);
const res = await api('users/notify/list', {}, alice);
const res1 = await api('following/list', { notification: true }, alice);
const res2 = await api('following/list', {}, alice);
assert.strictEqual(res.status, 200);
assert.strictEqual(res.body.length, 1);
assert.strictEqual(res.body[0].id, carol.id);
// notification: true の場合は bob は返らない
assert.strictEqual(res1.status, 200);
assert.strictEqual(res1.body.length, 1);
assert.strictEqual(res1.body[0].followeeId, carol.id);
// notification パラメータなしの場合は bob も返る
assert.strictEqual(res2.status, 200);
assert.strictEqual(res2.body.length, 2);
const ids = res2.body.map((u) => u.followeeId).sort();
assert.deepStrictEqual(ids, [bob.id, carol.id].sort());
});
test('他のユーザーの通知対象は見えない', async () => {
@@ -72,14 +88,14 @@ describe('users/notify/list', () => {
await api('following/update', { userId: carol.id, notify: 'normal' }, bob);
// alice の一覧には bob の通知設定は反映されない
const aliceRes = await api('users/notify/list', {}, alice);
const aliceIds = aliceRes.body.map((u: { id: string }) => u.id);
const aliceRes = await api('following/list', { notification: true }, alice);
const aliceIds = aliceRes.body.map((u) => u.followeeId);
assert.strictEqual(aliceIds.includes(bob.id), false);
// bob の一覧には carol だけが含まれる
const bobRes = await api('users/notify/list', {}, bob);
const bobRes = await api('following/list', { notification: true }, bob);
assert.strictEqual(bobRes.body.length, 1);
assert.strictEqual(bobRes.body[0].id, carol.id);
assert.strictEqual(bobRes.body[0].followeeId, carol.id);
// 後片付け: bob → carol のフォローを解除
await api('following/delete', { userId: carol.id }, bob);
@@ -114,18 +130,18 @@ describe('users/notify/list', () => {
await api('following/update', { userId: bob.id, notify: 'normal' }, alice);
// limitなしだと2件返ることを確認
const allRes = await api('users/notify/list', {}, alice);
const allRes = await api('following/list', { notification: true }, alice);
assert.strictEqual(allRes.status, 200);
assert.strictEqual(allRes.body.length, 2);
// limit:1 で1件に絞られることを確認
const res = await api('users/notify/list', { limit: 1 }, alice);
const res = await api('following/list', { notification: true, limit: 1 }, alice);
assert.strictEqual(res.status, 200);
assert.strictEqual(res.body.length, 1);
});
test('未認証の場合はエラー', async () => {
const res = await api('users/notify/list', {});
const res = await api('following/list', {});
assert.strictEqual(res.status, 401);
});
});

View File

@@ -10,17 +10,17 @@
"./*": "./js/*"
},
"devDependencies": {
"@types/estree": "1.0.8",
"@types/estree": "1.0.9",
"@types/node": "24.12.2",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"rollup": "4.60.2"
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"rollup": "4.60.3"
},
"dependencies": {
"estree-walker": "3.0.3",
"i18n": "workspace:*",
"magic-string": "0.30.21",
"rolldown": "1.0.0-rc.15",
"vite": "8.0.10"
"rolldown": "1.0.0",
"vite": "8.0.11"
}
}

View File

@@ -22,43 +22,43 @@
"mfm-js": "0.26.0",
"misskey-js": "workspace:*",
"punycode.js": "2.3.1",
"rollup": "4.60.2",
"rollup": "4.60.3",
"shiki": "4.0.2",
"tinycolor2": "1.6.0",
"uuid": "14.0.0",
"vue": "3.5.33"
"vue": "3.5.34"
},
"devDependencies": {
"@misskey-dev/emoji-assets": "17.0.3",
"@misskey-dev/summaly": "5.3.0",
"@tabler/icons-webfont": "3.35.0",
"@testing-library/vue": "8.1.0",
"@types/estree": "1.0.8",
"@types/estree": "1.0.9",
"@types/micromatch": "4.0.10",
"@types/node": "24.12.2",
"@types/punycode.js": "npm:@types/punycode@2.1.4",
"@types/tinycolor2": "1.4.6",
"@types/ws": "8.18.1",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"@vitest/coverage-v8": "4.1.5",
"@vue/runtime-core": "3.5.33",
"@vue/runtime-core": "3.5.34",
"acorn": "8.16.0",
"cross-env": "10.1.0",
"eslint-plugin-import": "2.32.0",
"eslint-plugin-vue": "10.9.0",
"eslint-plugin-vue": "10.9.1",
"happy-dom": "20.9.0",
"intersection-observer": "0.12.2",
"micromatch": "4.0.8",
"msw": "2.13.6",
"msw": "2.14.3",
"prettier": "3.8.3",
"sass-embedded": "1.99.0",
"start-server-and-test": "3.0.2",
"tsx": "4.21.0",
"vite": "8.0.10",
"vite": "8.0.11",
"vite-plugin-turbosnap": "1.0.3",
"vue-component-type-helpers": "3.2.7",
"vue-component-type-helpers": "3.2.8",
"vue-eslint-parser": "10.4.0",
"vue-tsc": "3.2.7"
"vue-tsc": "3.2.8"
}
}

View File

@@ -10,9 +10,9 @@
"devDependencies": {
"@types/node": "24.12.2",
"@types/tinycolor2": "1.4.6",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"eslint-plugin-vue": "10.9.0",
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"eslint-plugin-vue": "10.9.1",
"vue-eslint-parser": "10.4.0"
},
"files": [
@@ -25,6 +25,6 @@
"misskey-js": "workspace:*",
"shiki": "4.0.2",
"tinycolor2": "1.6.0",
"vue": "3.5.33"
"vue": "3.5.34"
}
}

View File

@@ -20,7 +20,7 @@
"@mcaptcha/core-glue": "0.1.0-alpha-5",
"@misskey-dev/browser-image-resizer": "2024.1.0",
"@misskey-dev/emoji-data": "17.0.3",
"@sentry/vue": "10.50.0",
"@sentry/vue": "10.52.0",
"@simplewebauthn/browser": "13.3.0",
"@syuilo/aiscript": "1.2.1",
"@syuilo/aiscript-0-19-0": "npm:@syuilo/aiscript@^0.19.0",
@@ -32,10 +32,10 @@
"canvas-confetti": "1.9.4",
"chart.js": "4.5.1",
"chartjs-adapter-date-fns": "3.0.0",
"chartjs-chart-matrix": "3.0.0",
"chartjs-chart-matrix": "3.0.4",
"chartjs-plugin-gradient": "0.6.1",
"chartjs-plugin-zoom": "2.2.0",
"chromatic": "16.6.0",
"chromatic": "16.9.0",
"compare-versions": "6.1.1",
"cropperjs": "2.1.1",
"date-fns": "4.1.0",
@@ -47,11 +47,11 @@
"icons-subsetter": "workspace:*",
"idb-keyval": "6.2.2",
"insert-text-at-cursor": "0.3.0",
"ios-haptics": "0.1.4",
"ios-haptics": "0.1.5",
"is-file-animated": "1.0.2",
"json5": "2.2.3",
"matter-js": "0.20.0",
"mediabunny": "1.41.0",
"mediabunny": "1.44.1",
"mfm-js": "0.26.0",
"misskey-bubble-game": "workspace:*",
"misskey-js": "workspace:*",
@@ -60,14 +60,14 @@
"punycode.js": "2.3.1",
"qr-code-styling": "1.9.2",
"qr-scanner": "1.4.2",
"sanitize-html": "2.17.3",
"sanitize-html": "2.17.4",
"shiki": "4.0.2",
"textarea-caret": "3.1.0",
"three": "0.184.0",
"throttle-debounce": "5.0.2",
"tinycolor2": "1.6.0",
"v-code-diff": "1.13.1",
"vue": "3.5.33",
"vue": "3.5.34",
"wanakana": "5.3.1"
},
"devDependencies": {
@@ -77,7 +77,7 @@
"@rollup/pluginutils": "5.3.0",
"@storybook/addon-essentials": "8.6.18",
"@storybook/addon-interactions": "8.6.18",
"@storybook/addon-links": "10.3.5",
"@storybook/addon-links": "10.3.6",
"@storybook/addon-mdx-gfm": "8.6.18",
"@storybook/addon-storysource": "8.6.18",
"@storybook/blocks": "8.6.18",
@@ -85,17 +85,17 @@
"@storybook/core-events": "8.6.18",
"@storybook/manager-api": "8.6.18",
"@storybook/preview-api": "8.6.18",
"@storybook/react": "10.3.5",
"@storybook/react-vite": "10.3.5",
"@storybook/react": "10.3.6",
"@storybook/react-vite": "10.3.6",
"@storybook/test": "8.6.18",
"@storybook/theming": "8.6.18",
"@storybook/types": "8.6.18",
"@storybook/vue3": "10.3.5",
"@storybook/vue3-vite": "10.3.5",
"@storybook/vue3": "10.3.6",
"@storybook/vue3-vite": "10.3.6",
"@tabler/icons-webfont": "3.35.0",
"@testing-library/vue": "8.1.0",
"@types/canvas-confetti": "1.9.0",
"@types/estree": "1.0.8",
"@types/estree": "1.0.9",
"@types/insert-text-at-cursor": "0.3.2",
"@types/matter-js": "0.20.2",
"@types/micromatch": "4.0.10",
@@ -106,41 +106,41 @@
"@types/textarea-caret": "3.0.4",
"@types/throttle-debounce": "5.0.2",
"@types/tinycolor2": "1.4.6",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"@vitest/coverage-v8": "4.1.5",
"@vue/compiler-core": "3.5.33",
"@vue/compiler-core": "3.5.34",
"acorn": "8.16.0",
"astring": "1.9.0",
"cross-env": "10.1.0",
"cypress": "15.14.1",
"cypress": "15.14.2",
"eslint-plugin-import": "2.32.0",
"eslint-plugin-vue": "10.9.0",
"eslint-plugin-vue": "10.9.1",
"estree-walker": "3.0.3",
"happy-dom": "20.9.0",
"intersection-observer": "0.12.2",
"micromatch": "4.0.8",
"minimatch": "10.2.5",
"msw": "2.13.6",
"msw": "2.14.3",
"msw-storybook-addon": "2.0.7",
"nodemon": "3.1.14",
"prettier": "3.8.3",
"react": "19.2.5",
"react-dom": "19.2.5",
"rolldown": "1.0.0-rc.15",
"react": "19.2.6",
"react-dom": "19.2.6",
"rolldown": "1.0.0",
"sass-embedded": "1.99.0",
"seedrandom": "3.0.5",
"start-server-and-test": "3.0.2",
"storybook": "10.3.5",
"storybook": "10.3.6",
"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
"tsx": "4.21.0",
"vite": "8.0.10",
"vite": "8.0.11",
"vite-plugin-glsl": "1.6.0",
"vite-plugin-turbosnap": "1.0.3",
"vitest": "4.1.5",
"vitest-fetch-mock": "0.4.5",
"vue-component-type-helpers": "3.2.7",
"vue-component-type-helpers": "3.2.8",
"vue-eslint-parser": "10.4.0",
"vue-tsc": "3.2.7"
"vue-tsc": "3.2.8"
}
}

View File

@@ -138,6 +138,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup>
import { nextTick, onBeforeUnmount, ref, useTemplateRef, computed } from 'vue';
import { host, version } from '@@/js/config.js';
import { DEFAULT_EMOJIS } from '@@/js/const.js';
import FormLink from '@/components/form/link.vue';
import FormSection from '@/components/form/section.vue';
import MkButton from '@/components/MkButton.vue';
@@ -150,7 +151,6 @@ import { definePage } from '@/page.js';
import { claimAchievement, claimedAchievements } from '@/utility/achievements.js';
import { $i } from '@/i.js';
import { prefer } from '@/preferences.js';
import { DEFAULT_EMOJIS } from '@@/js/const.js';
const patronsWithIcon = [{
name: 'カイヤン',
@@ -299,6 +299,9 @@ const patronsWithIcon = [{
}, {
name: '大賀愛一郎',
icon: 'https://assets.misskey-hub.net/patrons/c701a797d1df4125970f25d3052250ac.jpg',
}, {
name: '西野マチ',
icon: 'https://assets.misskey-hub.net/patrons/962ff1d2f3d040ed8973b62bbff84391.jpg',
}];
const patrons = [
@@ -414,6 +417,7 @@ const patrons = [
'ほとラズ',
'スズカケン',
'蒼井よみこ',
'忍猫',
];
const thereIsTreasure = ref($i && !claimedAchievements.includes('foundTreasure'));

View File

@@ -47,10 +47,10 @@ SPDX-License-Identifier: AGPL-3.0-only
<div class="_gaps_s">
<div v-for="item in items" :key="item.id" :class="[$style.userItem ]">
<div :class="$style.userItemMain">
<MkA :class="$style.userItemMainBody" :to="userPage(item)">
<MkUserCardMini :user="item"/>
<MkA :class="$style.userItemMainBody" :to="userPage(item.followee!)">
<MkUserCardMini :user="item.followee!"/>
</MkA>
<button class="_button" :class="$style.notifyMenu" @click="showNotifyMenu(item, $event)"><i class="ti ti-dots"></i></button>
<button class="_button" :class="$style.notifyMenu" @click="showNotifyMenu(item.followee!, $event)"><i class="ti ti-dots"></i></button>
</div>
</div>
</div>
@@ -125,8 +125,11 @@ async function showNotifyMenu(user: Misskey.entities.UserDetailed, ev: PointerEv
}], ev.currentTarget ?? ev.target);
}
const notifyUserPaginator = markRaw(new Paginator('users/notify/list', {
const notifyUserPaginator = markRaw(new Paginator('following/list', {
limit: 10,
params: {
notification: true,
},
}));
const nonConfigurableNotificationTypes = ['note', 'roleAssigned', 'followRequestAccepted', 'test', 'exportCompleted'] as const satisfies (typeof notificationTypes[number])[];

View File

@@ -30,8 +30,8 @@
"devDependencies": {
"@types/js-yaml": "4.0.9",
"@types/node": "24.12.2",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"chokidar": "5.0.0",
"esbuild": "0.28.0",
"execa": "9.6.1",

View File

@@ -13,8 +13,8 @@
"devDependencies": {
"@types/node": "24.12.2",
"@types/wawoff2": "1.0.2",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0"
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2"
},
"dependencies": {
"@tabler/icons-webfont": "3.35.0",

View File

@@ -27,8 +27,8 @@
"@types/matter-js": "0.20.2",
"@types/node": "24.12.2",
"@types/seedrandom": "3.0.8",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"esbuild": "0.28.0",
"execa": "9.6.1",
"nodemon": "3.1.14"

View File

@@ -1884,6 +1884,8 @@ declare namespace entities {
FollowingDeleteResponse,
FollowingInvalidateRequest,
FollowingInvalidateResponse,
FollowingListRequest,
FollowingListResponse,
FollowingRequestsAcceptRequest,
FollowingRequestsCancelRequest,
FollowingRequestsCancelResponse,
@@ -2162,8 +2164,6 @@ declare namespace entities {
UsersListsUpdateMembershipRequest,
UsersNotesRequest,
UsersNotesResponse,
UsersNotifyListRequest,
UsersNotifyListResponse,
UsersPagesRequest,
UsersPagesResponse,
UsersReactionsRequest,
@@ -2403,6 +2403,12 @@ type FollowingInvalidateRequest = operations['following___invalidate']['requestB
// @public (undocumented)
type FollowingInvalidateResponse = operations['following___invalidate']['responses']['200']['content']['application/json'];
// @public (undocumented)
type FollowingListRequest = operations['following___list']['requestBody']['content']['application/json'];
// @public (undocumented)
type FollowingListResponse = operations['following___list']['responses']['200']['content']['application/json'];
// @public (undocumented)
type FollowingRequestsAcceptRequest = operations['following___requests___accept']['requestBody']['content']['application/json'];
@@ -3829,12 +3835,6 @@ type UsersNotesRequest = operations['users___notes']['requestBody']['content']['
// @public (undocumented)
type UsersNotesResponse = operations['users___notes']['responses']['200']['content']['application/json'];
// @public (undocumented)
type UsersNotifyListRequest = operations['users___notify___list']['requestBody']['content']['application/json'];
// @public (undocumented)
type UsersNotifyListResponse = operations['users___notify___list']['responses']['200']['content']['application/json'];
// @public (undocumented)
type UsersPagesRequest = operations['users___pages']['requestBody']['content']['application/json'];

View File

@@ -7,10 +7,10 @@
"generate": "tsx src/generator.ts && eslint ./built/**/*.ts --fix"
},
"devDependencies": {
"@readme/openapi-parser": "6.0.1",
"@readme/openapi-parser": "6.1.1",
"@types/node": "24.12.2",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"openapi-types": "12.1.3",
"openapi-typescript": "7.13.0",
"ts-case-convert": "2.1.0",

View File

@@ -1,7 +1,7 @@
{
"type": "module",
"name": "misskey-js",
"version": "2026.5.2-beta.0",
"version": "2026.5.3",
"description": "Misskey SDK for JavaScript",
"license": "MIT",
"main": "./built/index.js",
@@ -39,8 +39,8 @@
"devDependencies": {
"@microsoft/api-extractor": "7.58.7",
"@types/node": "24.12.2",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"@vitest/coverage-v8": "4.1.5",
"esbuild": "0.28.0",
"execa": "9.6.1",

View File

@@ -2570,6 +2570,17 @@ declare module '../api.js' {
credential?: string | null,
): Promise<SwitchCaseResponseType<E, P>>;
/**
* List of following users
*
* **Credential required**: *Yes* / **Permission**: *read:following*
*/
request<E extends 'following/list', P extends Endpoints[E]['req']>(
endpoint: E,
params: P,
credential?: string | null,
): Promise<SwitchCaseResponseType<E, P>>;
/**
* No description provided.
*
@@ -4697,17 +4708,6 @@ declare module '../api.js' {
credential?: string | null,
): Promise<SwitchCaseResponseType<E, P>>;
/**
* List of following users with notification enabled.
*
* **Credential required**: *Yes* / **Permission**: *read:following*
*/
request<E extends 'users/notify/list', P extends Endpoints[E]['req']>(
endpoint: E,
params: P,
credential?: string | null,
): Promise<SwitchCaseResponseType<E, P>>;
/**
* Show all pages this user created.
*

View File

@@ -360,6 +360,8 @@ import type {
FollowingDeleteResponse,
FollowingInvalidateRequest,
FollowingInvalidateResponse,
FollowingListRequest,
FollowingListResponse,
FollowingRequestsAcceptRequest,
FollowingRequestsCancelRequest,
FollowingRequestsCancelResponse,
@@ -640,8 +642,6 @@ import type {
UsersListsUpdateMembershipRequest,
UsersNotesRequest,
UsersNotesResponse,
UsersNotifyListRequest,
UsersNotifyListResponse,
UsersPagesRequest,
UsersPagesResponse,
UsersReactionsRequest,
@@ -896,6 +896,7 @@ export type Endpoints = {
'following/create': { req: FollowingCreateRequest; res: FollowingCreateResponse };
'following/delete': { req: FollowingDeleteRequest; res: FollowingDeleteResponse };
'following/invalidate': { req: FollowingInvalidateRequest; res: FollowingInvalidateResponse };
'following/list': { req: FollowingListRequest; res: FollowingListResponse };
'following/requests/accept': { req: FollowingRequestsAcceptRequest; res: EmptyResponse };
'following/requests/cancel': { req: FollowingRequestsCancelRequest; res: FollowingRequestsCancelResponse };
'following/requests/list': { req: FollowingRequestsListRequest; res: FollowingRequestsListResponse };
@@ -1086,7 +1087,6 @@ export type Endpoints = {
'users/lists/update': { req: UsersListsUpdateRequest; res: UsersListsUpdateResponse };
'users/lists/update-membership': { req: UsersListsUpdateMembershipRequest; res: EmptyResponse };
'users/notes': { req: UsersNotesRequest; res: UsersNotesResponse };
'users/notify/list': { req: UsersNotifyListRequest; res: UsersNotifyListResponse };
'users/pages': { req: UsersPagesRequest; res: UsersPagesResponse };
'users/reactions': { req: UsersReactionsRequest; res: UsersReactionsResponse };
'users/recommendation': { req: UsersRecommendationRequest; res: UsersRecommendationResponse };

View File

@@ -363,6 +363,8 @@ export type FollowingDeleteRequest = operations['following___delete']['requestBo
export type FollowingDeleteResponse = operations['following___delete']['responses']['200']['content']['application/json'];
export type FollowingInvalidateRequest = operations['following___invalidate']['requestBody']['content']['application/json'];
export type FollowingInvalidateResponse = operations['following___invalidate']['responses']['200']['content']['application/json'];
export type FollowingListRequest = operations['following___list']['requestBody']['content']['application/json'];
export type FollowingListResponse = operations['following___list']['responses']['200']['content']['application/json'];
export type FollowingRequestsAcceptRequest = operations['following___requests___accept']['requestBody']['content']['application/json'];
export type FollowingRequestsCancelRequest = operations['following___requests___cancel']['requestBody']['content']['application/json'];
export type FollowingRequestsCancelResponse = operations['following___requests___cancel']['responses']['200']['content']['application/json'];
@@ -643,8 +645,6 @@ export type UsersListsUpdateResponse = operations['users___lists___update']['res
export type UsersListsUpdateMembershipRequest = operations['users___lists___update-membership']['requestBody']['content']['application/json'];
export type UsersNotesRequest = operations['users___notes']['requestBody']['content']['application/json'];
export type UsersNotesResponse = operations['users___notes']['responses']['200']['content']['application/json'];
export type UsersNotifyListRequest = operations['users___notify___list']['requestBody']['content']['application/json'];
export type UsersNotifyListResponse = operations['users___notify___list']['responses']['200']['content']['application/json'];
export type UsersPagesRequest = operations['users___pages']['requestBody']['content']['application/json'];
export type UsersPagesResponse = operations['users___pages']['responses']['200']['content']['application/json'];
export type UsersReactionsRequest = operations['users___reactions']['requestBody']['content']['application/json'];

View File

@@ -2105,6 +2105,15 @@ export type paths = {
*/
post: operations['following___invalidate'];
};
'/following/list': {
/**
* following/list
* @description List of following users
*
* **Credential required**: *Yes* / **Permission**: *read:following*
*/
post: operations['following___list'];
};
'/following/requests/accept': {
/**
* following/requests/accept
@@ -3852,15 +3861,6 @@ export type paths = {
*/
post: operations['users___notes'];
};
'/users/notify/list': {
/**
* users/notify/list
* @description List of following users with notification enabled.
*
* **Credential required**: *Yes* / **Permission**: *read:following*
*/
post: operations['users___notify___list'];
};
'/users/pages': {
/**
* users/pages
@@ -22521,6 +22521,80 @@ export interface operations {
};
};
};
following___list: {
requestBody: {
content: {
'application/json': {
/** @default false */
notification?: boolean;
/** Format: misskey:id */
sinceId?: string;
/** Format: misskey:id */
untilId?: string;
sinceDate?: number;
untilDate?: number;
/** @default 10 */
limit?: number;
};
};
};
responses: {
/** @description OK (with results) */
200: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Following'][];
};
};
/** @description Client error */
400: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Error'];
};
};
/** @description Authentication error */
401: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Error'];
};
};
/** @description Forbidden error */
403: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Error'];
};
};
/** @description I'm Ai */
418: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Error'];
};
};
/** @description Internal server error */
500: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Error'];
};
};
};
};
following___requests___accept: {
requestBody: {
content: {
@@ -36056,78 +36130,6 @@ export interface operations {
};
};
};
users___notify___list: {
requestBody: {
content: {
'application/json': {
/** Format: misskey:id */
sinceId?: string;
/** Format: misskey:id */
untilId?: string;
sinceDate?: number;
untilDate?: number;
/** @default 10 */
limit?: number;
};
};
};
responses: {
/** @description OK (with results) */
200: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['UserDetailed'][];
};
};
/** @description Client error */
400: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Error'];
};
};
/** @description Authentication error */
401: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Error'];
};
};
/** @description Forbidden error */
403: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Error'];
};
};
/** @description I'm Ai */
418: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Error'];
};
};
/** @description Internal server error */
500: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['Error'];
};
};
};
};
users___pages: {
requestBody: {
content: {

View File

@@ -25,8 +25,8 @@
},
"devDependencies": {
"@types/node": "24.12.2",
"@typescript-eslint/eslint-plugin": "8.59.0",
"@typescript-eslint/parser": "8.59.0",
"@typescript-eslint/eslint-plugin": "8.59.2",
"@typescript-eslint/parser": "8.59.2",
"esbuild": "0.28.0",
"execa": "9.6.1",
"nodemon": "3.1.14"

View File

@@ -15,7 +15,7 @@
"misskey-js": "workspace:*"
},
"devDependencies": {
"@typescript-eslint/parser": "8.59.0",
"@typescript-eslint/parser": "8.59.2",
"@typescript/lib-webworker": "npm:@types/serviceworker@0.0.74",
"eslint-plugin-import": "2.32.0",
"nodemon": "3.1.14"

5974
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,26 +11,26 @@ packages:
- packages/misskey-js/generator
- packages/misskey-reversi
- packages/misskey-bubble-game
onlyBuiltDependencies:
- '@nestjs/core'
- '@parcel/watcher'
- '@sentry/profiling-node'
- '@sentry-internal/node-cpu-profiler'
- '@tensorflow/tfjs-node'
- bufferutil
- canvas
- core-js
- cypress
- esbuild
- msgpackr-extract
- msw
- nice-napi
- re2
- sharp
- utf-8-validate
- v-code-diff
- vue-demi
ignorePatchFailures: false
allowBuilds:
'@nestjs/core': true
'@parcel/watcher': true
'@sentry/profiling-node': true
'@sentry-internal/node-cpu-profiler': true
'@tensorflow/tfjs-node': true
bufferutil: true
canvas: true
core-js: true
cypress: true
esbuild: true
msgpackr-extract: true
msw: true
nice-napi: true
re2: true
sharp: true
utf-8-validate: true
v-code-diff: true
vue-demi: true
exifreader: false
minimumReleaseAge: 10080 # delay 7days to mitigate supply-chain attack
minimumReleaseAgeExclude:
- '@misskey-dev/*'
@@ -52,3 +52,16 @@ minimumReleaseAgeExclude:
- slacc-win32-arm64-msvc
- slacc-win32-x64-msvc
- '@typescript/native-preview*'
- pnpm
- re2 # そのうち消す
- nan # そのうち消す
- systeminformation # 脆弱性対応。そのうち消す
- sanitize-html # 脆弱性対応。そのうち消す
- launder # 脆弱性対応。そのうち消す
overrides:
'@aiscript-dev/aiscript-languageserver': '-'
chokidar: 5.0.0
lodash: 4.18.1
engineStrict: true
saveExact: true
shellEmulator: true

View File

@@ -16,7 +16,7 @@
"remark-parse": "11.0.0",
"typescript": "5.9.3",
"unified": "11.0.5",
"vite": "8.0.10",
"vite": "8.0.11",
"vite-node": "6.0.0",
"vitest": "4.1.5"
}
@@ -163,9 +163,9 @@
}
},
"node_modules/@oxc-project/types": {
"version": "0.127.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz",
"integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==",
"version": "0.128.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.128.0.tgz",
"integrity": "sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==",
"dev": true,
"license": "MIT",
"funding": {
@@ -173,9 +173,9 @@
}
},
"node_modules/@rolldown/binding-android-arm64": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.17.tgz",
"integrity": "sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.18.tgz",
"integrity": "sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ==",
"cpu": [
"arm64"
],
@@ -190,9 +190,9 @@
}
},
"node_modules/@rolldown/binding-darwin-arm64": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.17.tgz",
"integrity": "sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.18.tgz",
"integrity": "sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ==",
"cpu": [
"arm64"
],
@@ -207,9 +207,9 @@
}
},
"node_modules/@rolldown/binding-darwin-x64": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.17.tgz",
"integrity": "sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.18.tgz",
"integrity": "sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g==",
"cpu": [
"x64"
],
@@ -224,9 +224,9 @@
}
},
"node_modules/@rolldown/binding-freebsd-x64": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.17.tgz",
"integrity": "sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.18.tgz",
"integrity": "sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw==",
"cpu": [
"x64"
],
@@ -241,9 +241,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.17.tgz",
"integrity": "sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.18.tgz",
"integrity": "sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg==",
"cpu": [
"arm"
],
@@ -258,9 +258,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-gnu": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.17.tgz",
"integrity": "sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.18.tgz",
"integrity": "sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ==",
"cpu": [
"arm64"
],
@@ -278,9 +278,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-musl": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.17.tgz",
"integrity": "sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.18.tgz",
"integrity": "sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug==",
"cpu": [
"arm64"
],
@@ -298,9 +298,9 @@
}
},
"node_modules/@rolldown/binding-linux-ppc64-gnu": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.17.tgz",
"integrity": "sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.18.tgz",
"integrity": "sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg==",
"cpu": [
"ppc64"
],
@@ -318,9 +318,9 @@
}
},
"node_modules/@rolldown/binding-linux-s390x-gnu": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.17.tgz",
"integrity": "sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.18.tgz",
"integrity": "sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA==",
"cpu": [
"s390x"
],
@@ -338,9 +338,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-gnu": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.17.tgz",
"integrity": "sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.18.tgz",
"integrity": "sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw==",
"cpu": [
"x64"
],
@@ -358,9 +358,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-musl": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.17.tgz",
"integrity": "sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.18.tgz",
"integrity": "sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA==",
"cpu": [
"x64"
],
@@ -378,9 +378,9 @@
}
},
"node_modules/@rolldown/binding-openharmony-arm64": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.17.tgz",
"integrity": "sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.18.tgz",
"integrity": "sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A==",
"cpu": [
"arm64"
],
@@ -395,9 +395,9 @@
}
},
"node_modules/@rolldown/binding-wasm32-wasi": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.17.tgz",
"integrity": "sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.18.tgz",
"integrity": "sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg==",
"cpu": [
"wasm32"
],
@@ -414,9 +414,9 @@
}
},
"node_modules/@rolldown/binding-win32-arm64-msvc": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.17.tgz",
"integrity": "sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.18.tgz",
"integrity": "sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ==",
"cpu": [
"arm64"
],
@@ -431,9 +431,9 @@
}
},
"node_modules/@rolldown/binding-win32-x64-msvc": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.17.tgz",
"integrity": "sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.18.tgz",
"integrity": "sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg==",
"cpu": [
"x64"
],
@@ -448,9 +448,9 @@
}
},
"node_modules/@rolldown/pluginutils": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.17.tgz",
"integrity": "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.18.tgz",
"integrity": "sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==",
"dev": true,
"license": "MIT"
},
@@ -462,9 +462,9 @@
"license": "MIT"
},
"node_modules/@tybys/wasm-util": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
"integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
"version": "0.10.2",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz",
"integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -1861,9 +1861,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.13",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.13.tgz",
"integrity": "sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==",
"version": "8.5.14",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz",
"integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==",
"dev": true,
"funding": [
{
@@ -1937,14 +1937,14 @@
}
},
"node_modules/rolldown": {
"version": "1.0.0-rc.17",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.17.tgz",
"integrity": "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==",
"version": "1.0.0-rc.18",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.18.tgz",
"integrity": "sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@oxc-project/types": "=0.127.0",
"@rolldown/pluginutils": "1.0.0-rc.17"
"@oxc-project/types": "=0.128.0",
"@rolldown/pluginutils": "1.0.0-rc.18"
},
"bin": {
"rolldown": "bin/cli.mjs"
@@ -1953,21 +1953,21 @@
"node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
"@rolldown/binding-android-arm64": "1.0.0-rc.17",
"@rolldown/binding-darwin-arm64": "1.0.0-rc.17",
"@rolldown/binding-darwin-x64": "1.0.0-rc.17",
"@rolldown/binding-freebsd-x64": "1.0.0-rc.17",
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17",
"@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17",
"@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17",
"@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17",
"@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17",
"@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17",
"@rolldown/binding-linux-x64-musl": "1.0.0-rc.17",
"@rolldown/binding-openharmony-arm64": "1.0.0-rc.17",
"@rolldown/binding-wasm32-wasi": "1.0.0-rc.17",
"@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17",
"@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17"
"@rolldown/binding-android-arm64": "1.0.0-rc.18",
"@rolldown/binding-darwin-arm64": "1.0.0-rc.18",
"@rolldown/binding-darwin-x64": "1.0.0-rc.18",
"@rolldown/binding-freebsd-x64": "1.0.0-rc.18",
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.18",
"@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.18",
"@rolldown/binding-linux-arm64-musl": "1.0.0-rc.18",
"@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.18",
"@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.18",
"@rolldown/binding-linux-x64-gnu": "1.0.0-rc.18",
"@rolldown/binding-linux-x64-musl": "1.0.0-rc.18",
"@rolldown/binding-openharmony-arm64": "1.0.0-rc.18",
"@rolldown/binding-wasm32-wasi": "1.0.0-rc.18",
"@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.18",
"@rolldown/binding-win32-x64-msvc": "1.0.0-rc.18"
}
},
"node_modules/semver": {
@@ -2215,16 +2215,16 @@
}
},
"node_modules/vite": {
"version": "8.0.10",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.10.tgz",
"integrity": "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==",
"version": "8.0.11",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.11.tgz",
"integrity": "sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow==",
"dev": true,
"license": "MIT",
"dependencies": {
"lightningcss": "^1.32.0",
"picomatch": "^4.0.4",
"postcss": "^8.5.10",
"rolldown": "1.0.0-rc.17",
"postcss": "^8.5.14",
"rolldown": "1.0.0-rc.18",
"tinyglobby": "^0.2.16"
},
"bin": {
@@ -2241,7 +2241,7 @@
},
"peerDependencies": {
"@types/node": "^20.19.0 || >=22.12.0",
"@vitejs/devtools": "^0.1.0",
"@vitejs/devtools": "^0.1.18",
"esbuild": "^0.27.0 || ^0.28.0",
"jiti": ">=1.21.0",
"less": "^4.0.0",

View File

@@ -17,7 +17,7 @@
"remark-parse": "11.0.0",
"typescript": "5.9.3",
"unified": "11.0.5",
"vite": "8.0.10",
"vite": "8.0.11",
"vite-node": "6.0.0",
"vitest": "4.1.5"
}