1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-05-19 20:35:34 +02:00

enhance: 絵文字データの参照を自前ライブラリに変更 (#17381)

* wip

* enhance: 絵文字データの参照を自前ライブラリに変更

* fix

* update to v17.0.2

* fix assets handling

* fix

* update mfm-js

* update emoji library

* Update COPYING [ci skip]

* Update Changelog

* Update Changelog

* fix: 端末の絵文字にフォールバックできるように
This commit is contained in:
かっこかり
2026-05-09 18:35:38 +09:00
committed by GitHub
parent 717931cfcb
commit a09a2c2eee
27 changed files with 80 additions and 7769 deletions

3
.gitmodules vendored
View File

@@ -1,3 +0,0 @@
[submodule "fluent-emojis"]
path = fluent-emojis
url = https://github.com/misskey-dev/emojis.git

View File

@@ -1,10 +1,12 @@
## Unreleased ## Unreleased
### General ### General
- - Enhance: Unicode 17.0 に収録されている絵文字の処理・表示に対応
- Fluent Emojiや端末ネイティブの絵文字を利用している場合は、最新の絵文字に対応しておらず正しく表示できない可能性があります。絵文字が表示できない場合は、表示に使用する絵文字をTwemojiに切り替えてご利用ください。
### Client ### Client
- Enhance: テーマのプレビュー時、リロードせずにもとのテーマに戻せるように - Enhance: テーマのプレビュー時、リロードせずにもとのテーマに戻せるように
- Enhance: Fluent Emojiを更新し、Unicode 15+相当の絵文字の表示に対応
- Fix: テーマエディター使用時に、最初の変更のみ適用される問題を修正 - Fix: テーマエディター使用時に、最初の変更のみ適用される問題を修正
- Fix: テーマのプレビュー時、既存のテーマとIDが被っている場合にプレビューできない問題を修正 - Fix: テーマのプレビュー時、既存のテーマとIDが被っている場合にプレビューできない問題を修正
- Fix: テーマのインストールエラーの表示を改善 - Fix: テーマのインストールエラーの表示を改善

View File

@@ -3,13 +3,6 @@ Copyright © 2014-2026 syuilo and contributors
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE. And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
Misskey includes several third-party Open-Source softwares.
Emoji keywords for Unicode 11 and below by Mu-An Chiou
License: MIT
https://github.com/muan/emojilib/blob/master/LICENSE
RsaSignature2017 implementation by Transmute Industries Inc RsaSignature2017 implementation by Transmute Industries Inc
License: MIT License: MIT
https://github.com/transmute-industries/RsaSignature2017/blob/master/LICENSE https://github.com/transmute-industries/RsaSignature2017/blob/master/LICENSE

View File

@@ -103,7 +103,6 @@ COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-rev
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-bubble-game/built ./packages/misskey-bubble-game/built COPY --chown=misskey:misskey --from=native-builder /misskey/packages/misskey-bubble-game/built ./packages/misskey-bubble-game/built
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/backend/built ./packages/backend/built COPY --chown=misskey:misskey --from=native-builder /misskey/packages/backend/built ./packages/backend/built
COPY --chown=misskey:misskey --from=native-builder /misskey/packages/i18n/built ./packages/i18n/built COPY --chown=misskey:misskey --from=native-builder /misskey/packages/i18n/built ./packages/i18n/built
COPY --chown=misskey:misskey --from=native-builder /misskey/fluent-emojis /misskey/fluent-emojis
COPY --chown=misskey:misskey . ./ COPY --chown=misskey:misskey . ./
ENV LD_PRELOAD=/usr/local/lib/libjemalloc.so ENV LD_PRELOAD=/usr/local/lib/libjemalloc.so

Submodule fluent-emojis deleted from cae981eb4c

View File

@@ -55,7 +55,6 @@
"dependencies": { "dependencies": {
"@aws-sdk/client-s3": "3.1037.0", "@aws-sdk/client-s3": "3.1037.0",
"@aws-sdk/lib-storage": "3.1037.0", "@aws-sdk/lib-storage": "3.1037.0",
"@discordapp/twemoji": "16.0.1",
"@fastify/accepts": "5.0.4", "@fastify/accepts": "5.0.4",
"@fastify/cors": "11.2.0", "@fastify/cors": "11.2.0",
"@fastify/express": "4.0.5", "@fastify/express": "4.0.5",
@@ -63,6 +62,8 @@
"@fastify/multipart": "10.0.0", "@fastify/multipart": "10.0.0",
"@fastify/static": "9.1.3", "@fastify/static": "9.1.3",
"@kitajs/html": "4.2.13", "@kitajs/html": "4.2.13",
"@misskey-dev/emoji-assets": "17.0.3",
"@misskey-dev/emoji-data": "17.0.3",
"@misskey-dev/sharp-read-bmp": "1.2.0", "@misskey-dev/sharp-read-bmp": "1.2.0",
"@misskey-dev/summaly": "5.3.0", "@misskey-dev/summaly": "5.3.0",
"@napi-rs/canvas": "0.1.100", "@napi-rs/canvas": "0.1.100",
@@ -76,7 +77,6 @@
"@simplewebauthn/server": "13.3.0", "@simplewebauthn/server": "13.3.0",
"@sinonjs/fake-timers": "15.3.2", "@sinonjs/fake-timers": "15.3.2",
"@smithy/node-http-handler": "4.6.1", "@smithy/node-http-handler": "4.6.1",
"@twemoji/parser": "16.0.0",
"accepts": "1.3.8", "accepts": "1.3.8",
"ajv": "8.20.0", "ajv": "8.20.0",
"archiver": "7.0.1", "archiver": "7.0.1",
@@ -111,7 +111,7 @@
"jsonld": "9.0.0", "jsonld": "9.0.0",
"juice": "11.1.1", "juice": "11.1.1",
"meilisearch": "0.57.0", "meilisearch": "0.57.0",
"mfm-js": "0.25.0", "mfm-js": "0.26.0",
"mime-types": "3.0.2", "mime-types": "3.0.2",
"misskey-js": "workspace:*", "misskey-js": "workspace:*",
"misskey-reversi": "workspace:*", "misskey-reversi": "workspace:*",

File diff suppressed because one or more lines are too long

View File

@@ -71,7 +71,7 @@ export class ClientServerService {
private readonly clientAssets: string; private readonly clientAssets: string;
private readonly assets: string; private readonly assets: string;
private readonly swAssets: string; private readonly swAssets: string;
private readonly fluentEmojisDir: string; private readonly fluentEmojiDir: string;
private readonly twemojiDir: string; private readonly twemojiDir: string;
private readonly frontendViteOut: string; private readonly frontendViteOut: string;
private readonly frontendEmbedViteOut: string; private readonly frontendEmbedViteOut: string;
@@ -135,8 +135,8 @@ export class ClientServerService {
this.clientAssets = resolve(frontendRootdir, 'assets'); this.clientAssets = resolve(frontendRootdir, 'assets');
this.assets = resolve(this.config.rootDir, 'built/_frontend_dist_'); this.assets = resolve(this.config.rootDir, 'built/_frontend_dist_');
this.swAssets = resolve(this.config.rootDir, 'built/_sw_dist_'); this.swAssets = resolve(this.config.rootDir, 'built/_sw_dist_');
this.fluentEmojisDir = resolve(this.config.rootDir, 'fluent-emojis/dist'); this.fluentEmojiDir = resolve(backendRootdir, 'node_modules/@misskey-dev/emoji-assets/built/fluent-emoji');
this.twemojiDir = resolve(backendRootdir, 'node_modules/@discordapp/twemoji/dist/svg'); this.twemojiDir = resolve(backendRootdir, 'node_modules/@misskey-dev/emoji-assets/built/twemoji');
this.frontendViteOut = resolve(this.config.rootDir, 'built/_frontend_vite_'); this.frontendViteOut = resolve(this.config.rootDir, 'built/_frontend_vite_');
this.frontendEmbedViteOut = resolve(this.config.rootDir, 'built/_frontend_embed_vite_'); this.frontendEmbedViteOut = resolve(this.config.rootDir, 'built/_frontend_embed_vite_');
this.tarball = resolve(this.config.rootDir, 'built/tarball'); this.tarball = resolve(this.config.rootDir, 'built/tarball');
@@ -306,7 +306,7 @@ export class ClientServerService {
reply.header('Content-Security-Policy', 'default-src \'none\'; style-src \'unsafe-inline\''); reply.header('Content-Security-Policy', 'default-src \'none\'; style-src \'unsafe-inline\'');
return reply.sendFile(path, this.fluentEmojisDir, { return reply.sendFile(path, this.fluentEmojiDir, {
maxAge: ms('30 days'), maxAge: ms('30 days'),
}); });
}); });

View File

@@ -10,10 +10,8 @@
"lint": "pnpm typecheck && pnpm eslint" "lint": "pnpm typecheck && pnpm eslint"
}, },
"dependencies": { "dependencies": {
"@discordapp/twemoji": "16.0.1",
"@rollup/plugin-json": "6.1.0", "@rollup/plugin-json": "6.1.0",
"@rollup/pluginutils": "5.3.0", "@rollup/pluginutils": "5.3.0",
"@twemoji/parser": "16.0.0",
"@vitejs/plugin-vue": "6.0.6", "@vitejs/plugin-vue": "6.0.6",
"buraha": "0.0.1", "buraha": "0.0.1",
"estree-walker": "3.0.3", "estree-walker": "3.0.3",
@@ -21,7 +19,7 @@
"i18n": "workspace:*", "i18n": "workspace:*",
"icons-subsetter": "workspace:*", "icons-subsetter": "workspace:*",
"json5": "2.2.3", "json5": "2.2.3",
"mfm-js": "0.25.0", "mfm-js": "0.26.0",
"misskey-js": "workspace:*", "misskey-js": "workspace:*",
"punycode.js": "2.3.1", "punycode.js": "2.3.1",
"rollup": "4.60.2", "rollup": "4.60.2",
@@ -31,6 +29,7 @@
"vue": "3.5.33" "vue": "3.5.33"
}, },
"devDependencies": { "devDependencies": {
"@misskey-dev/emoji-assets": "17.0.3",
"@misskey-dev/summaly": "5.3.0", "@misskey-dev/summaly": "5.3.0",
"@tabler/icons-webfont": "3.35.0", "@tabler/icons-webfont": "3.35.0",
"@testing-library/vue": "8.1.0", "@testing-library/vue": "8.1.0",

View File

@@ -21,7 +21,7 @@ html {
accent-color: var(--MI_THEME-accent); accent-color: var(--MI_THEME-accent);
overflow: clip; overflow: clip;
overflow-wrap: break-word; overflow-wrap: break-word;
font-family: 'Hiragino Maru Gothic Pro', "BIZ UDGothic", Roboto, HelveticaNeue, Arial, sans-serif; font-family: 'Hiragino Maru Gothic Pro', "BIZ UDGothic", Roboto, HelveticaNeue, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 14px; font-size: 14px;
line-height: 1.35; line-height: 1.35;
text-size-adjust: 100%; text-size-adjust: 100%;

View File

@@ -98,7 +98,8 @@ export function getConfig(): UserConfig {
'@/': __dirname + '/src/', '@/': __dirname + '/src/',
'@@/': __dirname + '/../frontend-shared/', '@@/': __dirname + '/../frontend-shared/',
'/client-assets/': __dirname + '/assets/', '/client-assets/': __dirname + '/assets/',
'/static-assets/': __dirname + '/../backend/assets/' '/static-assets/': __dirname + '/../backend/assets/',
'/fluent-emoji/': '@misskey-dev/emoji-assets/fluent-emoji/',
}, },
}, },

View File

@@ -19,7 +19,7 @@ export function char2fluentEmojiFilePath(char: string): string {
// Fluent Emojiは国旗非対応 https://github.com/microsoft/fluentui-emoji/issues/25 // Fluent Emojiは国旗非対応 https://github.com/microsoft/fluentui-emoji/issues/25
if (codes[0]?.startsWith('1f1')) return char2twemojiFilePath(char); if (codes[0]?.startsWith('1f1')) return char2twemojiFilePath(char);
if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f'); if (!codes.includes('200d')) codes = codes.filter(x => x !== 'fe0f');
codes = codes.filter(x => x != null && x.length > 0); codes = codes.filter(x => x && x.length);
const fileName = (codes as string[]).map(x => x.padStart(4, '0')).join('-'); const fileName = codes.join('-');
return `${fluentEmojiPngBase}/${fileName}.png`; return `${fluentEmojiPngBase}/${fileName}.png`;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -11,8 +11,7 @@ export type UnicodeEmojiDef = {
category: typeof unicodeEmojiCategories[number]; category: typeof unicodeEmojiCategories[number];
}; };
// initial converted from https://github.com/muan/emojilib/commit/242fe68be86ed6536843b83f7e32f376468b38fb import _emojilist from '@misskey-dev/emoji-data/emojilist.json';
import _emojilist from './emojilist.json' with { type: 'json' };
export const emojilist: UnicodeEmojiDef[] = _emojilist.map(x => ({ export const emojilist: UnicodeEmojiDef[] = _emojilist.map(x => ({
name: x[1] as string, name: x[1] as string,

View File

@@ -19,6 +19,7 @@
"js-built" "js-built"
], ],
"dependencies": { "dependencies": {
"@misskey-dev/emoji-data": "17.0.3",
"i18n": "workspace:*", "i18n": "workspace:*",
"json5": "2.2.3", "json5": "2.2.3",
"misskey-js": "workspace:*", "misskey-js": "workspace:*",

View File

@@ -51,7 +51,6 @@ await fs.readFile(
if ( if (
micromatch(Array.from(modules), [ micromatch(Array.from(modules), [
'../../assets/**', '../../assets/**',
'../../fluent-emojis/**',
'../../locales/ja-JP.yml', '../../locales/ja-JP.yml',
'assets/**', 'assets/**',
'public/**', 'public/**',

View File

@@ -7,7 +7,7 @@ import { type SharedOptions, http, HttpResponse } from 'msw';
export const onUnhandledRequest = ((req, print) => { export const onUnhandledRequest = ((req, print) => {
const url = new URL(req.url); const url = new URL(req.url);
if (url.hostname !== 'localhost' || /^\/(?:client-assets\/|fluent-emojis?\/|iframe.html$|node_modules\/|src\/|sb-|static-assets\/|vite\/)/.test(url.pathname)) { if (url.hostname !== 'localhost' || /^\/(?:client-assets\/|fluent-emoji\/|iframe.html$|node_modules\/|src\/|sb-|static-assets\/|vite\/)/.test(url.pathname)) {
return return
} }
print.warning() print.warning()
@@ -16,16 +16,7 @@ export const onUnhandledRequest = ((req, print) => {
export const commonHandlers = [ export const commonHandlers = [
http.get('/fluent-emoji/:codepoints.png', async ({ params }) => { http.get('/fluent-emoji/:codepoints.png', async ({ params }) => {
const { codepoints } = params; const { codepoints } = params;
const value = await fetch(`https://raw.githubusercontent.com/misskey-dev/emojis/main/dist/${codepoints}.png`).then((response) => response.blob()); const value = await fetch(`https://unpkg.com/@misskey-dev/emoji-assets@17.0.3/built/fluent-emoji/${codepoints}.png`).then((response) => response.blob());
return new HttpResponse(value, {
headers: {
'Content-Type': 'image/png',
},
});
}),
http.get('/fluent-emojis/:codepoints.png', async ({ params }) => {
const { codepoints } = params;
const value = await fetch(`https://raw.githubusercontent.com/misskey-dev/emojis/main/dist/${codepoints}.png`).then((response) => response.blob());
return new HttpResponse(value, { return new HttpResponse(value, {
headers: { headers: {
'Content-Type': 'image/png', 'Content-Type': 'image/png',
@@ -34,7 +25,7 @@ export const commonHandlers = [
}), }),
http.get('/twemoji/:codepoints.svg', async ({ params }) => { http.get('/twemoji/:codepoints.svg', async ({ params }) => {
const { codepoints } = params; const { codepoints } = params;
const value = await fetch(`https://unpkg.com/@discordapp/twemoji@16.0.1/dist/svg/${codepoints}.svg`).then((response) => response.blob()); const value = await fetch(`https://unpkg.com/@misskey-dev/emoji-assets@17.0.3/built/twemoji/${codepoints}.svg`).then((response) => response.blob());
return new HttpResponse(value, { return new HttpResponse(value, {
headers: { headers: {
'Content-Type': 'image/svg+xml', 'Content-Type': 'image/svg+xml',

View File

@@ -17,14 +17,13 @@
}, },
"dependencies": { "dependencies": {
"@analytics/google-analytics": "1.1.0", "@analytics/google-analytics": "1.1.0",
"@discordapp/twemoji": "16.0.1",
"@mcaptcha/core-glue": "0.1.0-alpha-5", "@mcaptcha/core-glue": "0.1.0-alpha-5",
"@misskey-dev/browser-image-resizer": "2024.1.0", "@misskey-dev/browser-image-resizer": "2024.1.0",
"@misskey-dev/emoji-data": "17.0.3",
"@sentry/vue": "10.50.0", "@sentry/vue": "10.50.0",
"@simplewebauthn/browser": "13.3.0", "@simplewebauthn/browser": "13.3.0",
"@syuilo/aiscript": "1.2.1", "@syuilo/aiscript": "1.2.1",
"@syuilo/aiscript-0-19-0": "npm:@syuilo/aiscript@^0.19.0", "@syuilo/aiscript-0-19-0": "npm:@syuilo/aiscript@^0.19.0",
"@twemoji/parser": "16.0.0",
"@vitejs/plugin-vue": "6.0.6", "@vitejs/plugin-vue": "6.0.6",
"aiscript-vscode": "github:aiscript-dev/aiscript-vscode#v0.1.16", "aiscript-vscode": "github:aiscript-dev/aiscript-vscode#v0.1.16",
"analytics": "0.8.19", "analytics": "0.8.19",
@@ -53,7 +52,7 @@
"json5": "2.2.3", "json5": "2.2.3",
"matter-js": "0.20.0", "matter-js": "0.20.0",
"mediabunny": "1.41.0", "mediabunny": "1.41.0",
"mfm-js": "0.25.0", "mfm-js": "0.26.0",
"misskey-bubble-game": "workspace:*", "misskey-bubble-game": "workspace:*",
"misskey-js": "workspace:*", "misskey-js": "workspace:*",
"misskey-reversi": "workspace:*", "misskey-reversi": "workspace:*",
@@ -72,6 +71,7 @@
"wanakana": "5.3.1" "wanakana": "5.3.1"
}, },
"devDependencies": { "devDependencies": {
"@misskey-dev/emoji-assets": "17.0.3",
"@misskey-dev/summaly": "5.3.0", "@misskey-dev/summaly": "5.3.0",
"@rollup/plugin-json": "6.1.0", "@rollup/plugin-json": "6.1.0",
"@rollup/pluginutils": "5.3.0", "@rollup/pluginutils": "5.3.0",

View File

@@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<div class="version">v{{ version }}</div> <div class="version">v{{ version }}</div>
<span v-for="emoji in easterEggEmojis" :key="emoji.id" class="emoji" :data-physics-x="emoji.left" :data-physics-y="emoji.top" :class="{ _physics_circle_: !emoji.emoji.startsWith(':') }"> <span v-for="emoji in easterEggEmojis" :key="emoji.id" class="emoji" :data-physics-x="emoji.left" :data-physics-y="emoji.top" :class="{ _physics_circle_: !emoji.emoji.startsWith(':') }">
<MkCustomEmoji v-if="emoji.emoji[0] === ':'" class="emoji" :name="emoji.emoji" :normal="true" :noStyle="true" :fallbackToImage="true"/> <MkCustomEmoji v-if="emoji.emoji[0] === ':'" class="emoji" :name="emoji.emoji" :normal="true" :noStyle="true" :fallbackToImage="true"/>
<MkEmoji v-else class="emoji" :emoji="emoji.emoji" :normal="true" :noStyle="true"/> <MkEmoji v-else class="emoji unicode" :emoji="emoji.emoji" :normal="true" :noStyle="true"/>
</span> </span>
</div> </div>
<button v-if="thereIsTreasure" class="_button treasure" @click="getTreasure"><img src="/fluent-emoji/1f3c6.png" class="treasureImg"></button> <button v-if="thereIsTreasure" class="_button treasure" @click="getTreasure"><img src="/fluent-emoji/1f3c6.png" class="treasureImg"></button>
@@ -560,6 +560,10 @@ definePage(() => ({
pointer-events: none; pointer-events: none;
font-size: 24px; font-size: 24px;
width: 24px; width: 24px;
&.unicode {
height: 24px;
}
} }
} }
} }

View File

@@ -1040,9 +1040,9 @@ function downloadEmojiIndex(lang: typeof emojiIndexLangs[number]) {
function download() { function download() {
switch (lang) { switch (lang) {
case 'en-US': return import('../../unicode-emoji-indexes/en-US.json').then(x => x.default); case 'en-US': return import('@misskey-dev/emoji-data/indexes/en-US.json').then(x => x.default);
case 'ja-JP': return import('../../unicode-emoji-indexes/ja-JP.json').then(x => x.default); case 'ja-JP': return import('@misskey-dev/emoji-data/indexes/ja-JP.json').then(x => x.default);
case 'ja-JP_hira': return import('../../unicode-emoji-indexes/ja-JP_hira.json').then(x => x.default); case 'ja-JP_hira': return import('@misskey-dev/emoji-data/indexes/ja-JP_hira.json').then(x => x.default);
default: throw new Error('unrecognized lang: ' + lang); default: throw new Error('unrecognized lang: ' + lang);
} }
} }

View File

@@ -25,7 +25,7 @@
html { html {
overflow: auto; overflow: auto;
overflow-wrap: break-word; overflow-wrap: break-word;
font-family: 'Hiragino Maru Gothic Pro', "BIZ UDGothic", Roboto, HelveticaNeue, Arial, sans-serif; font-family: 'Hiragino Maru Gothic Pro', "BIZ UDGothic", Roboto, HelveticaNeue, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 14px; font-size: 14px;
line-height: 1.35; line-height: 1.35;
text-size-adjust: 100%; text-size-adjust: 100%;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -137,8 +137,7 @@ export function getConfig(): UserConfig {
'@@/': __dirname + '/../frontend-shared/', '@@/': __dirname + '/../frontend-shared/',
'/client-assets/': __dirname + '/assets/', '/client-assets/': __dirname + '/assets/',
'/static-assets/': __dirname + '/../backend/assets/', '/static-assets/': __dirname + '/../backend/assets/',
'/fluent-emojis/': __dirname + '/../../fluent-emojis/dist/', '/fluent-emoji/': '@misskey-dev/emoji-assets/fluent-emoji/',
'/fluent-emoji/': __dirname + '/../../fluent-emojis/dist/',
}, },
}, },

118
pnpm-lock.yaml generated
View File

@@ -96,9 +96,6 @@ importers:
'@aws-sdk/lib-storage': '@aws-sdk/lib-storage':
specifier: 3.1037.0 specifier: 3.1037.0
version: 3.1037.0(@aws-sdk/client-s3@3.1037.0) version: 3.1037.0(@aws-sdk/client-s3@3.1037.0)
'@discordapp/twemoji':
specifier: 16.0.1
version: 16.0.1
'@fastify/accepts': '@fastify/accepts':
specifier: 5.0.4 specifier: 5.0.4
version: 5.0.4 version: 5.0.4
@@ -120,6 +117,12 @@ importers:
'@kitajs/html': '@kitajs/html':
specifier: 4.2.13 specifier: 4.2.13
version: 4.2.13 version: 4.2.13
'@misskey-dev/emoji-assets':
specifier: 17.0.3
version: 17.0.3
'@misskey-dev/emoji-data':
specifier: 17.0.3
version: 17.0.3
'@misskey-dev/sharp-read-bmp': '@misskey-dev/sharp-read-bmp':
specifier: 1.2.0 specifier: 1.2.0
version: 1.2.0 version: 1.2.0
@@ -159,9 +162,6 @@ importers:
'@smithy/node-http-handler': '@smithy/node-http-handler':
specifier: 4.6.1 specifier: 4.6.1
version: 4.6.1 version: 4.6.1
'@twemoji/parser':
specifier: 16.0.0
version: 16.0.0
accepts: accepts:
specifier: 1.3.8 specifier: 1.3.8
version: 1.3.8 version: 1.3.8
@@ -265,8 +265,8 @@ importers:
specifier: 0.57.0 specifier: 0.57.0
version: 0.57.0 version: 0.57.0
mfm-js: mfm-js:
specifier: 0.25.0 specifier: 0.26.0
version: 0.25.0 version: 0.26.0
mime-types: mime-types:
specifier: 3.0.2 specifier: 3.0.2
version: 3.0.2 version: 3.0.2
@@ -608,15 +608,15 @@ importers:
'@analytics/google-analytics': '@analytics/google-analytics':
specifier: 1.1.0 specifier: 1.1.0
version: 1.1.0 version: 1.1.0
'@discordapp/twemoji':
specifier: 16.0.1
version: 16.0.1
'@mcaptcha/core-glue': '@mcaptcha/core-glue':
specifier: 0.1.0-alpha-5 specifier: 0.1.0-alpha-5
version: 0.1.0-alpha-5 version: 0.1.0-alpha-5
'@misskey-dev/browser-image-resizer': '@misskey-dev/browser-image-resizer':
specifier: 2024.1.0 specifier: 2024.1.0
version: 2024.1.0 version: 2024.1.0
'@misskey-dev/emoji-data':
specifier: 17.0.3
version: 17.0.3
'@sentry/vue': '@sentry/vue':
specifier: 10.50.0 specifier: 10.50.0
version: 10.50.0(vue@3.5.33(typescript@5.9.3)) version: 10.50.0(vue@3.5.33(typescript@5.9.3))
@@ -629,9 +629,6 @@ importers:
'@syuilo/aiscript-0-19-0': '@syuilo/aiscript-0-19-0':
specifier: npm:@syuilo/aiscript@^0.19.0 specifier: npm:@syuilo/aiscript@^0.19.0
version: '@syuilo/aiscript@0.19.0' version: '@syuilo/aiscript@0.19.0'
'@twemoji/parser':
specifier: 16.0.0
version: 16.0.0
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: 6.0.6 specifier: 6.0.6
version: 6.0.6(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.0)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0))(vue@3.5.33(typescript@5.9.3)) version: 6.0.6(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.0)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0))(vue@3.5.33(typescript@5.9.3))
@@ -717,8 +714,8 @@ importers:
specifier: 1.41.0 specifier: 1.41.0
version: 1.41.0 version: 1.41.0
mfm-js: mfm-js:
specifier: 0.25.0 specifier: 0.26.0
version: 0.25.0 version: 0.26.0
misskey-bubble-game: misskey-bubble-game:
specifier: workspace:* specifier: workspace:*
version: link:../misskey-bubble-game version: link:../misskey-bubble-game
@@ -768,6 +765,9 @@ importers:
specifier: 5.3.1 specifier: 5.3.1
version: 5.3.1 version: 5.3.1
devDependencies: devDependencies:
'@misskey-dev/emoji-assets':
specifier: 17.0.3
version: 17.0.3
'@misskey-dev/summaly': '@misskey-dev/summaly':
specifier: 5.3.0 specifier: 5.3.0
version: 5.3.0 version: 5.3.0
@@ -1015,18 +1015,12 @@ importers:
packages/frontend-embed: packages/frontend-embed:
dependencies: dependencies:
'@discordapp/twemoji':
specifier: 16.0.1
version: 16.0.1
'@rollup/plugin-json': '@rollup/plugin-json':
specifier: 6.1.0 specifier: 6.1.0
version: 6.1.0(rollup@4.60.2) version: 6.1.0(rollup@4.60.2)
'@rollup/pluginutils': '@rollup/pluginutils':
specifier: 5.3.0 specifier: 5.3.0
version: 5.3.0(rollup@4.60.2) version: 5.3.0(rollup@4.60.2)
'@twemoji/parser':
specifier: 16.0.0
version: 16.0.0
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: 6.0.6 specifier: 6.0.6
version: 6.0.6(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.0)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0))(vue@3.5.33(typescript@5.9.3)) version: 6.0.6(vite@8.0.10(@types/node@24.12.2)(esbuild@0.28.0)(sass-embedded@1.99.0)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0))(vue@3.5.33(typescript@5.9.3))
@@ -1049,8 +1043,8 @@ importers:
specifier: 2.2.3 specifier: 2.2.3
version: 2.2.3 version: 2.2.3
mfm-js: mfm-js:
specifier: 0.25.0 specifier: 0.26.0
version: 0.25.0 version: 0.26.0
misskey-js: misskey-js:
specifier: workspace:* specifier: workspace:*
version: link:../misskey-js version: link:../misskey-js
@@ -1073,6 +1067,9 @@ importers:
specifier: 3.5.33 specifier: 3.5.33
version: 3.5.33(typescript@5.9.3) version: 3.5.33(typescript@5.9.3)
devDependencies: devDependencies:
'@misskey-dev/emoji-assets':
specifier: 17.0.3
version: 17.0.3
'@misskey-dev/summaly': '@misskey-dev/summaly':
specifier: 5.3.0 specifier: 5.3.0
version: 5.3.0 version: 5.3.0
@@ -1166,6 +1163,9 @@ importers:
packages/frontend-shared: packages/frontend-shared:
dependencies: dependencies:
'@misskey-dev/emoji-data':
specifier: 17.0.3
version: 17.0.3
i18n: i18n:
specifier: workspace:* specifier: workspace:*
version: link:../i18n version: link:../i18n
@@ -1809,9 +1809,6 @@ packages:
resolution: {integrity: sha512-OGju/GYp0V72qlZ/Pd4jGEwqBwT/Za/tw+Z3AC7lgMheGqsbhTZrtc5iLz9z59G/Q53QyE2fnjHV8N9wjBpiWA==} resolution: {integrity: sha512-OGju/GYp0V72qlZ/Pd4jGEwqBwT/Za/tw+Z3AC7lgMheGqsbhTZrtc5iLz9z59G/Q53QyE2fnjHV8N9wjBpiWA==}
engines: {node: '>=18.0'} engines: {node: '>=18.0'}
'@discordapp/twemoji@16.0.1':
resolution: {integrity: sha512-figLiBWzjS5cyrAjLaGjM8AAaowO3qvK8rg5bA2dElB4qsaPMvBVlFDMO2d3x+nC1igt7kgWH4dvNmvvUHUF8w==}
'@emnapi/core@1.10.0': '@emnapi/core@1.10.0':
resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
@@ -2566,6 +2563,15 @@ packages:
'@misskey-dev/browser-image-resizer@2024.1.0': '@misskey-dev/browser-image-resizer@2024.1.0':
resolution: {integrity: sha512-4EnO0zLW5NDtng3Gaz5MuT761uiuoOuplwX18wBqgj8w56LTU5BjLn/vbHwDIIe0j2gwqDYhMb7bDjmr1/Fomg==} resolution: {integrity: sha512-4EnO0zLW5NDtng3Gaz5MuT761uiuoOuplwX18wBqgj8w56LTU5BjLn/vbHwDIIe0j2gwqDYhMb7bDjmr1/Fomg==}
'@misskey-dev/emoji-assets@17.0.3':
resolution: {integrity: sha512-Uiy+R4rghBML5k2nZFLr2w4RUwqDrDnTWZ6lXGYtnEr0DRcW41pQyS2RUUm/pFjYr/DjNntcoysdhqinpa9P/Q==}
'@misskey-dev/emoji-data@17.0.0':
resolution: {integrity: sha512-grMnsmTm7VSah5heS1fIfOfoQmIpzo6ZU5AV5yRxCy7ivtWhFU3fpMfXZyKsH9G9/HZiLRsClKtyjHKMlxjt7g==}
'@misskey-dev/emoji-data@17.0.3':
resolution: {integrity: sha512-RmW0C2A1Zxn7DTYVCOhMDyCyyXYJLBc5GIEuhcufaqF0Gxw9+gIwaitCI3OUWnR928XnDwvvaizhJSjvIEF+2Q==}
'@misskey-dev/eslint-plugin@2.1.0': '@misskey-dev/eslint-plugin@2.1.0':
resolution: {integrity: sha512-f++Vv1r3BQyGqEE0SB5algUZwRoTMZIYfVtpcuQ2fLuYUm0cQ5BBTs/gwAHPajVB2YD8F33gzPIReTKtuJyCwQ==} resolution: {integrity: sha512-f++Vv1r3BQyGqEE0SB5algUZwRoTMZIYfVtpcuQ2fLuYUm0cQ5BBTs/gwAHPajVB2YD8F33gzPIReTKtuJyCwQ==}
peerDependencies: peerDependencies:
@@ -4273,9 +4279,6 @@ packages:
resolution: {integrity: sha512-JSSdNiS0wgd8GHhBwnMAI18Y8XPhLVN+dNelPfZCXFhy9Lb3NbnFyp9JKxxr54jSUkEJPk3cidvCoHducSaRMQ==} resolution: {integrity: sha512-JSSdNiS0wgd8GHhBwnMAI18Y8XPhLVN+dNelPfZCXFhy9Lb3NbnFyp9JKxxr54jSUkEJPk3cidvCoHducSaRMQ==}
engines: {node: '>=14.17'} engines: {node: '>=14.17'}
'@twemoji/parser@16.0.0':
resolution: {integrity: sha512-jmuIjkp3OIaEemwMy3sArBwZSuZkRqmueGwRe2Zk4cFzbUJISFBJSZLDUUBNIgq3c+nY49ideYN2OiII6JUqwA==}
'@tybys/wasm-util@0.10.1': '@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
@@ -6496,10 +6499,6 @@ packages:
resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
engines: {node: '>=14.14'} engines: {node: '>=14.14'}
fs-extra@8.1.0:
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
engines: {node: '>=6 <7 || >=8'}
fs-extra@9.1.0: fs-extra@9.1.0:
resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -7258,12 +7257,6 @@ packages:
engines: {node: '>=6'} engines: {node: '>=6'}
hasBin: true hasBin: true
jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
jsonfile@5.0.0:
resolution: {integrity: sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==}
jsonfile@6.2.0: jsonfile@6.2.0:
resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
@@ -7631,8 +7624,8 @@ packages:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
mfm-js@0.25.0: mfm-js@0.26.0:
resolution: {integrity: sha512-JoK5TOtswXIvZSZ9hUEL+ZkcNV4onu/DtkaKeXK846+sJBBF8DvxYmPutt7nPaRDsUMmJGr64PNVMFpMGdk3hw==} resolution: {integrity: sha512-JEbaa1GBJBcpsk9/6tGaOgo1WewUhL9cIFl3VhIZ2a/89X83hzwxwVZOEebFaWdOufwFxnti44QMR/TWcAxSzg==}
micromark-core-commonmark@2.0.3: micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
@@ -10083,10 +10076,6 @@ packages:
unist-util-visit@5.0.0: unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
universalify@0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
universalify@2.0.1: universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
@@ -11396,13 +11385,6 @@ snapshots:
ky: 1.14.0 ky: 1.14.0
undici: 6.22.0 undici: 6.22.0
'@discordapp/twemoji@16.0.1':
dependencies:
'@twemoji/parser': 16.0.0
fs-extra: 8.1.0
jsonfile: 5.0.0
universalify: 0.1.2
'@emnapi/core@1.10.0': '@emnapi/core@1.10.0':
dependencies: dependencies:
'@emnapi/wasi-threads': 1.2.1 '@emnapi/wasi-threads': 1.2.1
@@ -12037,6 +12019,12 @@ snapshots:
'@misskey-dev/browser-image-resizer@2024.1.0': {} '@misskey-dev/browser-image-resizer@2024.1.0': {}
'@misskey-dev/emoji-assets@17.0.3': {}
'@misskey-dev/emoji-data@17.0.0': {}
'@misskey-dev/emoji-data@17.0.3': {}
'@misskey-dev/eslint-plugin@2.1.0(@eslint/compat@1.4.0(eslint@9.39.4))(@stylistic/eslint-plugin@5.5.0(eslint@9.39.4))(@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3))(@typescript-eslint/parser@8.59.0(eslint@9.39.4)(typescript@5.9.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4))(eslint@9.39.4)(globals@17.5.0)': '@misskey-dev/eslint-plugin@2.1.0(@eslint/compat@1.4.0(eslint@9.39.4))(@stylistic/eslint-plugin@5.5.0(eslint@9.39.4))(@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4)(typescript@5.9.3))(@typescript-eslint/parser@8.59.0(eslint@9.39.4)(typescript@5.9.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.0(eslint@9.39.4)(typescript@5.9.3))(eslint@9.39.4))(eslint@9.39.4)(globals@17.5.0)':
dependencies: dependencies:
'@eslint/compat': 1.4.0(eslint@9.39.4) '@eslint/compat': 1.4.0(eslint@9.39.4)
@@ -13944,8 +13932,6 @@ snapshots:
'@tsd/typescript@5.9.3': {} '@tsd/typescript@5.9.3': {}
'@twemoji/parser@16.0.0': {}
'@tybys/wasm-util@0.10.1': '@tybys/wasm-util@0.10.1':
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
@@ -16604,12 +16590,6 @@ snapshots:
jsonfile: 6.2.0 jsonfile: 6.2.0
universalify: 2.0.1 universalify: 2.0.1
fs-extra@8.1.0:
dependencies:
graceful-fs: 4.2.11
jsonfile: 4.0.0
universalify: 0.1.2
fs-extra@9.1.0: fs-extra@9.1.0:
dependencies: dependencies:
at-least-node: 1.0.0 at-least-node: 1.0.0
@@ -17405,16 +17385,6 @@ snapshots:
json5@2.2.3: {} json5@2.2.3: {}
jsonfile@4.0.0:
optionalDependencies:
graceful-fs: 4.2.11
jsonfile@5.0.0:
dependencies:
universalify: 0.1.2
optionalDependencies:
graceful-fs: 4.2.11
jsonfile@6.2.0: jsonfile@6.2.0:
dependencies: dependencies:
universalify: 2.0.1 universalify: 2.0.1
@@ -17839,9 +17809,9 @@ snapshots:
methods@1.1.2: {} methods@1.1.2: {}
mfm-js@0.25.0: mfm-js@0.26.0:
dependencies: dependencies:
'@twemoji/parser': 16.0.0 '@misskey-dev/emoji-data': 17.0.0
micromark-core-commonmark@2.0.3: micromark-core-commonmark@2.0.3:
dependencies: dependencies:
@@ -20528,8 +20498,6 @@ snapshots:
unist-util-is: 6.0.1 unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2 unist-util-visit-parents: 6.0.2
universalify@0.1.2: {}
universalify@2.0.1: {} universalify@2.0.1: {}
unload@2.4.1: {} unload@2.4.1: {}

View File

@@ -35,4 +35,5 @@ minimumReleaseAge: 10080 # delay 7days to mitigate supply-chain attack
minimumReleaseAgeExclude: minimumReleaseAgeExclude:
- '@syuilo/aiscript' - '@syuilo/aiscript'
- '@misskey-dev/*' - '@misskey-dev/*'
- mfm-js
- '@typescript/native-preview*' - '@typescript/native-preview*'