From 785b85ee462ac6f3af416be1d3ed68f3e478118b 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: Sat, 9 Aug 2025 14:11:19 +0900
Subject: [PATCH 01/10] =?UTF-8?q?enhance(frontend):=20=E7=94=BB=E5=83=8F?=
=?UTF-8?q?=E3=82=A8=E3=83=95=E3=82=A7=E3=82=AF=E3=83=88=E3=81=AEUI?=
=?UTF-8?q?=E6=94=B9=E5=96=84=20(#16191)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* enhance(frontend): 画像エフェクトの改善
* enhance: i18n colorClampAdvanced
* fix: missing translation
* enhance: i18n blockNoise
* fix lint
* fix: narrow down fx defs types
* fix
* fix: watermark用エフェクトは別で定義し直す
* fix lint
* ImageEffectorをwatermarkに隠蔽
* watermark関連の定義を完全に分離
* refactor
* fix
* ぼかし効果 -> スムージング
* refactor: remove unnecessary `as const`
* Update Changelog
---
CHANGELOG.md | 1 +
locales/index.d.ts | 138 +++++++++++++++++-
locales/ja-JP.yml | 36 ++++-
.../MkImageEffectorDialog.Layer.vue | 86 +----------
.../src/components/MkImageEffectorFxForm.vue | 95 ++++++++++++
.../src/components/MkPositionSelector.vue | 5 +
.../utility/image-effector/ImageEffector.ts | 84 +++++++++--
.../utility/image-effector/fxs/blockNoise.ts | 20 ++-
.../src/utility/image-effector/fxs/checker.ts | 14 +-
.../image-effector/fxs/chromaticAberration.ts | 8 +-
.../utility/image-effector/fxs/colorAdjust.ts | 17 ++-
.../utility/image-effector/fxs/colorClamp.ts | 8 +-
.../image-effector/fxs/colorClampAdvanced.ts | 20 ++-
.../src/utility/image-effector/fxs/distort.ts | 19 ++-
.../utility/image-effector/fxs/grayscale.ts | 2 +-
.../src/utility/image-effector/fxs/invert.ts | 11 +-
.../src/utility/image-effector/fxs/mirror.ts | 20 ++-
.../utility/image-effector/fxs/polkadot.ts | 27 ++--
.../src/utility/image-effector/fxs/stripe.ts | 18 ++-
.../src/utility/image-effector/fxs/tearing.ts | 17 ++-
.../utility/image-effector/fxs/threshold.ts | 11 +-
.../image-effector/fxs/watermarkPlacement.ts | 16 +-
.../utility/image-effector/fxs/zoomLines.ts | 31 ++--
packages/frontend/src/utility/watermark.ts | 1 -
24 files changed, 509 insertions(+), 196 deletions(-)
create mode 100644 packages/frontend/src/components/MkImageEffectorFxForm.vue
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 98ec6f2a85..94043c4c24 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -33,6 +33,7 @@
- Enhance: コントロールパネルを検索できるように
- Enhance: トルコ語 (tr-TR) に対応
- Enhance: 言語別のスクリプトバンドルを生成するように
+- Enhance: 画像エフェクトのパラメータ名の多言語対応
- Fix: 投稿フォームでファイルのアップロードが中止または失敗した際のハンドリングを修正
- Fix: 一部の設定検索結果が存在しないパスになる問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1171)
diff --git a/locales/index.d.ts b/locales/index.d.ts
index b0a15e0ad1..b2906cf48e 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -12203,6 +12203,10 @@ export interface Locale extends ILocale {
* 高度
*/
"advanced": string;
+ /**
+ * 角度
+ */
+ "angle": string;
/**
* ストライプ
*/
@@ -12215,10 +12219,6 @@ export interface Locale extends ILocale {
* ラインの数
*/
"stripeFrequency": string;
- /**
- * 角度
- */
- "angle": string;
/**
* ポルカドット
*/
@@ -12261,6 +12261,10 @@ export interface Locale extends ILocale {
* 変更を破棄して終了しますか?
*/
"discardChangesConfirm": string;
+ /**
+ * 設定項目はありません
+ */
+ "nothingToConfigure": string;
"_fxs": {
/**
* 色収差
@@ -12327,6 +12331,132 @@ export interface Locale extends ILocale {
*/
"tearing": string;
};
+ "_fxProps": {
+ /**
+ * 角度
+ */
+ "angle": string;
+ /**
+ * サイズ
+ */
+ "scale": string;
+ /**
+ * サイズ
+ */
+ "size": string;
+ /**
+ * 色
+ */
+ "color": string;
+ /**
+ * 不透明度
+ */
+ "opacity": string;
+ /**
+ * 正規化
+ */
+ "normalize": string;
+ /**
+ * 量
+ */
+ "amount": string;
+ /**
+ * 明るさ
+ */
+ "lightness": string;
+ /**
+ * コントラスト
+ */
+ "contrast": string;
+ /**
+ * 色相
+ */
+ "hue": string;
+ /**
+ * 輝度
+ */
+ "brightness": string;
+ /**
+ * 彩度
+ */
+ "saturation": string;
+ /**
+ * 最大値
+ */
+ "max": string;
+ /**
+ * 最小値
+ */
+ "min": string;
+ /**
+ * 方向
+ */
+ "direction": string;
+ /**
+ * 位相
+ */
+ "phase": string;
+ /**
+ * 頻度
+ */
+ "frequency": string;
+ /**
+ * 強さ
+ */
+ "strength": string;
+ /**
+ * ズレ
+ */
+ "glitchChannelShift": string;
+ /**
+ * シード値
+ */
+ "seed": string;
+ /**
+ * 赤色成分
+ */
+ "redComponent": string;
+ /**
+ * 緑色成分
+ */
+ "greenComponent": string;
+ /**
+ * 青色成分
+ */
+ "blueComponent": string;
+ /**
+ * しきい値
+ */
+ "threshold": string;
+ /**
+ * 中心X
+ */
+ "centerX": string;
+ /**
+ * 中心Y
+ */
+ "centerY": string;
+ /**
+ * スムージング
+ */
+ "zoomLinesSmoothing": string;
+ /**
+ * スムージングと集中線の幅の設定は併用できません。
+ */
+ "zoomLinesSmoothingDescription": string;
+ /**
+ * 集中線の幅
+ */
+ "zoomLinesThreshold": string;
+ /**
+ * 中心径
+ */
+ "zoomLinesMaskSize": string;
+ /**
+ * 黒色にする
+ */
+ "zoomLinesBlack": string;
+ };
};
/**
* 下書き
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 4562cfe370..d45aa7bb86 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -3267,10 +3267,10 @@ _watermarkEditor:
type: "タイプ"
image: "画像"
advanced: "高度"
+ angle: "角度"
stripe: "ストライプ"
stripeWidth: "ラインの幅"
stripeFrequency: "ラインの数"
- angle: "角度"
polkadot: "ポルカドット"
checker: "チェッカー"
polkadotMainDotOpacity: "メインドットの不透明度"
@@ -3283,6 +3283,7 @@ _imageEffector:
title: "エフェクト"
addEffect: "エフェクトを追加"
discardChangesConfirm: "変更を破棄して終了しますか?"
+ nothingToConfigure: "設定項目はありません"
_fxs:
chromaticAberration: "色収差"
@@ -3302,6 +3303,39 @@ _imageEffector:
blockNoise: "ブロックノイズ"
tearing: "ティアリング"
+ _fxProps:
+ angle: "角度"
+ scale: "サイズ"
+ size: "サイズ"
+ color: "色"
+ opacity: "不透明度"
+ normalize: "正規化"
+ amount: "量"
+ lightness: "明るさ"
+ contrast: "コントラスト"
+ hue: "色相"
+ brightness: "輝度"
+ saturation: "彩度"
+ max: "最大値"
+ min: "最小値"
+ direction: "方向"
+ phase: "位相"
+ frequency: "頻度"
+ strength: "強さ"
+ glitchChannelShift: "ズレ"
+ seed: "シード値"
+ redComponent: "赤色成分"
+ greenComponent: "緑色成分"
+ blueComponent: "青色成分"
+ threshold: "しきい値"
+ centerX: "中心X"
+ centerY: "中心Y"
+ zoomLinesSmoothing: "スムージング"
+ zoomLinesSmoothingDescription: "スムージングと集中線の幅の設定は併用できません。"
+ zoomLinesThreshold: "集中線の幅"
+ zoomLinesMaskSize: "中心径"
+ zoomLinesBlack: "黒色にする"
+
drafts: "下書き"
_drafts:
select: "下書きを選択"
diff --git a/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue b/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue
index d8466fa7ca..f734325039 100644
--- a/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue
+++ b/packages/frontend/src/components/MkImageEffectorDialog.Layer.vue
@@ -14,73 +14,15 @@ SPDX-License-Identifier: AGPL-3.0-only
-
-
-
- {{ fx.params[k].label ?? k }}
-
-
{
- if (fx.params[k].default != null) {
- layer.params[k] = fx.params[k].default;
- } else {
- layer.params[k] = v.min;
- }
- }"
- >
- {{ fx.params[k].label ?? k }}
-
-
- {{ fx.params[k].label ?? k }}
-
-
-
-
- {{ fx.params[k].label ?? k }}
-
-
-
{ const c = getRgb(v); if (c != null) layer.params[k] = c; }"
- >
- {{ fx.params[k].label ?? k }}
-
-
-
+
-
-
diff --git a/packages/frontend/src/components/MkImageEffectorFxForm.vue b/packages/frontend/src/components/MkImageEffectorFxForm.vue
new file mode 100644
index 0000000000..d7ab620132
--- /dev/null
+++ b/packages/frontend/src/components/MkImageEffectorFxForm.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+ {{ v.label ?? k }}
+ {{ v.caption }}
+
+
{
+ params[k] = v.default;
+ }"
+ >
+ {{ v.label ?? k }}
+ {{ v.caption }}
+
+
+ {{ v.label ?? k }}
+ {{ v.caption }}
+
+
+
+
+ {{ v.label ?? k }}
+ {{ v.caption }}
+
+
+
{ const c = getRgb(v); if (c != null) params[k] = c; }">
+ {{ v.label ?? k }}
+ {{ v.caption }}
+
+
+
+ {{ i18n.ts._imageEffector.nothingToConfigure }}
+
+
+
+
+
+
+
diff --git a/packages/frontend/src/components/MkPositionSelector.vue b/packages/frontend/src/components/MkPositionSelector.vue
index 002950cdf1..739f55125b 100644
--- a/packages/frontend/src/components/MkPositionSelector.vue
+++ b/packages/frontend/src/components/MkPositionSelector.vue
@@ -44,6 +44,11 @@ const y = defineModel('y', { default: 'center' });
height: 32px;
background: var(--MI_THEME-panel);
border-radius: 4px;
+ transition: background 0.1s ease;
+
+ &:not(.active):hover {
+ background: var(--MI_THEME-buttonHoverBg);
+ }
&.active {
background: var(--MI_THEME-accentedBg);
diff --git a/packages/frontend/src/utility/image-effector/ImageEffector.ts b/packages/frontend/src/utility/image-effector/ImageEffector.ts
index 1028c57f35..66b4d1026c 100644
--- a/packages/frontend/src/utility/image-effector/ImageEffector.ts
+++ b/packages/frontend/src/utility/image-effector/ImageEffector.ts
@@ -6,22 +6,78 @@
import { getProxiedImageUrl } from '../media-proxy.js';
import { initShaderProgram } from '../webgl.js';
+export type ImageEffectorRGB = [r: number, g: number, b: number];
+
type ParamTypeToPrimitive = {
- 'number': number;
- 'number:enum': number;
- 'boolean': boolean;
- 'align': { x: 'left' | 'center' | 'right'; y: 'top' | 'center' | 'bottom'; };
- 'seed': number;
- 'texture': { type: 'text'; text: string | null; } | { type: 'url'; url: string | null; } | null;
- 'color': [r: number, g: number, b: number];
+ [K in ImageEffectorFxParamDef['type']]: (ImageEffectorFxParamDef & { type: K })['default'];
};
-type ImageEffectorFxParamDefs = Record string;
-}>;
+ caption?: string;
+ default: any;
+}
+
+interface NumberParamDef extends CommonParamDef {
+ type: 'number';
+ default: number;
+ min: number;
+ max: number;
+ step?: number;
+ toViewValue?: (v: number) => string;
+};
+
+interface NumberEnumParamDef extends CommonParamDef {
+ type: 'number:enum';
+ enum: {
+ value: number;
+ label?: string;
+ icon?: string;
+ }[];
+ default: number;
+};
+
+interface BooleanParamDef extends CommonParamDef {
+ type: 'boolean';
+ default: boolean;
+};
+
+interface AlignParamDef extends CommonParamDef {
+ type: 'align';
+ default: {
+ x: 'left' | 'center' | 'right';
+ y: 'top' | 'center' | 'bottom';
+ };
+};
+
+interface SeedParamDef extends CommonParamDef {
+ type: 'seed';
+ default: number;
+};
+
+interface TextureParamDef extends CommonParamDef {
+ type: 'texture';
+ default: { type: 'text'; text: string | null; } | { type: 'url'; url: string | null; } | null;
+};
+
+interface ColorParamDef extends CommonParamDef {
+ type: 'color';
+ default: ImageEffectorRGB;
+};
+
+type ImageEffectorFxParamDef = NumberParamDef | NumberEnumParamDef | BooleanParamDef | AlignParamDef | SeedParamDef | TextureParamDef | ColorParamDef;
+
+export type ImageEffectorFxParamDefs = Record;
+
+export type GetParamType =
+ T extends NumberEnumParamDef
+ ? T['enum'][number]['value']
+ : ParamTypeToPrimitive[T['type']];
+
+export type ParamsRecordTypeToDefRecord = {
+ [K in keyof PS]: GetParamType;
+};
export function defineImageEffectorFx(fx: ImageEffectorFx) {
return fx;
@@ -36,9 +92,7 @@ export type ImageEffectorFx;
u: Record;
width: number;
height: number;
diff --git a/packages/frontend/src/utility/image-effector/fxs/blockNoise.ts b/packages/frontend/src/utility/image-effector/fxs/blockNoise.ts
index bf7eaa8bda..7e09524c10 100644
--- a/packages/frontend/src/utility/image-effector/fxs/blockNoise.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/blockNoise.ts
@@ -48,20 +48,22 @@ void main() {
`;
export const FX_blockNoise = defineImageEffectorFx({
- id: 'blockNoise' as const,
+ id: 'blockNoise',
name: i18n.ts._imageEffector._fxs.glitch + ': ' + i18n.ts._imageEffector._fxs.blockNoise,
shader,
uniforms: ['amount', 'channelShift'] as const,
params: {
amount: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.amount,
+ type: 'number',
default: 50,
min: 1,
max: 100,
step: 1,
},
strength: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.strength,
+ type: 'number',
default: 0.05,
min: -1,
max: 1,
@@ -69,7 +71,8 @@ export const FX_blockNoise = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
width: {
- type: 'number' as const,
+ label: i18n.ts.width,
+ type: 'number',
default: 0.05,
min: 0.01,
max: 1,
@@ -77,7 +80,8 @@ export const FX_blockNoise = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
height: {
- type: 'number' as const,
+ label: i18n.ts.height,
+ type: 'number',
default: 0.01,
min: 0.01,
max: 1,
@@ -85,7 +89,8 @@ export const FX_blockNoise = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
channelShift: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.glitchChannelShift,
+ type: 'number',
default: 0,
min: 0,
max: 10,
@@ -93,7 +98,8 @@ export const FX_blockNoise = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
seed: {
- type: 'seed' as const,
+ label: i18n.ts._imageEffector._fxProps.seed,
+ type: 'seed',
default: 100,
},
},
diff --git a/packages/frontend/src/utility/image-effector/fxs/checker.ts b/packages/frontend/src/utility/image-effector/fxs/checker.ts
index c426308951..c48f73acbd 100644
--- a/packages/frontend/src/utility/image-effector/fxs/checker.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/checker.ts
@@ -47,13 +47,14 @@ void main() {
`;
export const FX_checker = defineImageEffectorFx({
- id: 'checker' as const,
+ id: 'checker',
name: i18n.ts._imageEffector._fxs.checker,
shader,
uniforms: ['angle', 'scale', 'color', 'opacity'] as const,
params: {
angle: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.angle,
+ type: 'number',
default: 0,
min: -1.0,
max: 1.0,
@@ -61,18 +62,21 @@ export const FX_checker = defineImageEffectorFx({
toViewValue: v => Math.round(v * 90) + '°',
},
scale: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.scale,
+ type: 'number',
default: 3.0,
min: 1.0,
max: 10.0,
step: 0.1,
},
color: {
- type: 'color' as const,
+ label: i18n.ts._imageEffector._fxProps.color,
+ type: 'color',
default: [1, 1, 1],
},
opacity: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.opacity,
+ type: 'number',
default: 0.5,
min: 0.0,
max: 1.0,
diff --git a/packages/frontend/src/utility/image-effector/fxs/chromaticAberration.ts b/packages/frontend/src/utility/image-effector/fxs/chromaticAberration.ts
index 82d7d883aa..4adb7ce91e 100644
--- a/packages/frontend/src/utility/image-effector/fxs/chromaticAberration.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/chromaticAberration.ts
@@ -52,17 +52,19 @@ void main() {
`;
export const FX_chromaticAberration = defineImageEffectorFx({
- id: 'chromaticAberration' as const,
+ id: 'chromaticAberration',
name: i18n.ts._imageEffector._fxs.chromaticAberration,
shader,
uniforms: ['amount', 'start', 'normalize'] as const,
params: {
normalize: {
- type: 'boolean' as const,
+ label: i18n.ts._imageEffector._fxProps.normalize,
+ type: 'boolean',
default: false,
},
amount: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.amount,
+ type: 'number',
default: 0.1,
min: 0.0,
max: 1.0,
diff --git a/packages/frontend/src/utility/image-effector/fxs/colorAdjust.ts b/packages/frontend/src/utility/image-effector/fxs/colorAdjust.ts
index c38490e198..8cfbbcb516 100644
--- a/packages/frontend/src/utility/image-effector/fxs/colorAdjust.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/colorAdjust.ts
@@ -85,13 +85,14 @@ void main() {
`;
export const FX_colorAdjust = defineImageEffectorFx({
- id: 'colorAdjust' as const,
+ id: 'colorAdjust',
name: i18n.ts._imageEffector._fxs.colorAdjust,
shader,
uniforms: ['lightness', 'contrast', 'hue', 'brightness', 'saturation'] as const,
params: {
lightness: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.lightness,
+ type: 'number',
default: 0,
min: -1,
max: 1,
@@ -99,7 +100,8 @@ export const FX_colorAdjust = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
contrast: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.contrast,
+ type: 'number',
default: 1,
min: 0,
max: 4,
@@ -107,7 +109,8 @@ export const FX_colorAdjust = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
hue: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.hue,
+ type: 'number',
default: 0,
min: -1,
max: 1,
@@ -115,7 +118,8 @@ export const FX_colorAdjust = defineImageEffectorFx({
toViewValue: v => Math.round(v * 180) + '°',
},
brightness: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.brightness,
+ type: 'number',
default: 1,
min: 0,
max: 4,
@@ -123,7 +127,8 @@ export const FX_colorAdjust = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
saturation: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.saturation,
+ type: 'number',
default: 1,
min: 0,
max: 4,
diff --git a/packages/frontend/src/utility/image-effector/fxs/colorClamp.ts b/packages/frontend/src/utility/image-effector/fxs/colorClamp.ts
index ae0d92b8ae..4f18eb63c4 100644
--- a/packages/frontend/src/utility/image-effector/fxs/colorClamp.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/colorClamp.ts
@@ -26,13 +26,14 @@ void main() {
`;
export const FX_colorClamp = defineImageEffectorFx({
- id: 'colorClamp' as const,
+ id: 'colorClamp',
name: i18n.ts._imageEffector._fxs.colorClamp,
shader,
uniforms: ['max', 'min'] as const,
params: {
max: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.max,
+ type: 'number',
default: 1.0,
min: 0.0,
max: 1.0,
@@ -40,7 +41,8 @@ export const FX_colorClamp = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
min: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.min,
+ type: 'number',
default: -1.0,
min: -1.0,
max: 0.0,
diff --git a/packages/frontend/src/utility/image-effector/fxs/colorClampAdvanced.ts b/packages/frontend/src/utility/image-effector/fxs/colorClampAdvanced.ts
index b9387900fb..7e793061cf 100644
--- a/packages/frontend/src/utility/image-effector/fxs/colorClampAdvanced.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/colorClampAdvanced.ts
@@ -30,13 +30,14 @@ void main() {
`;
export const FX_colorClampAdvanced = defineImageEffectorFx({
- id: 'colorClampAdvanced' as const,
+ id: 'colorClampAdvanced',
name: i18n.ts._imageEffector._fxs.colorClampAdvanced,
shader,
uniforms: ['rMax', 'rMin', 'gMax', 'gMin', 'bMax', 'bMin'] as const,
params: {
rMax: {
- type: 'number' as const,
+ label: `${i18n.ts._imageEffector._fxProps.max} (${i18n.ts._imageEffector._fxProps.redComponent})`,
+ type: 'number',
default: 1.0,
min: 0.0,
max: 1.0,
@@ -44,7 +45,8 @@ export const FX_colorClampAdvanced = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
rMin: {
- type: 'number' as const,
+ label: `${i18n.ts._imageEffector._fxProps.min} (${i18n.ts._imageEffector._fxProps.redComponent})`,
+ type: 'number',
default: -1.0,
min: -1.0,
max: 0.0,
@@ -52,7 +54,8 @@ export const FX_colorClampAdvanced = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
gMax: {
- type: 'number' as const,
+ label: `${i18n.ts._imageEffector._fxProps.max} (${i18n.ts._imageEffector._fxProps.greenComponent})`,
+ type: 'number',
default: 1.0,
min: 0.0,
max: 1.0,
@@ -60,7 +63,8 @@ export const FX_colorClampAdvanced = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
gMin: {
- type: 'number' as const,
+ label: `${i18n.ts._imageEffector._fxProps.min} (${i18n.ts._imageEffector._fxProps.greenComponent})`,
+ type: 'number',
default: -1.0,
min: -1.0,
max: 0.0,
@@ -68,7 +72,8 @@ export const FX_colorClampAdvanced = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
bMax: {
- type: 'number' as const,
+ label: `${i18n.ts._imageEffector._fxProps.max} (${i18n.ts._imageEffector._fxProps.blueComponent})`,
+ type: 'number',
default: 1.0,
min: 0.0,
max: 1.0,
@@ -76,7 +81,8 @@ export const FX_colorClampAdvanced = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
bMin: {
- type: 'number' as const,
+ label: `${i18n.ts._imageEffector._fxProps.min} (${i18n.ts._imageEffector._fxProps.blueComponent})`,
+ type: 'number',
default: -1.0,
min: -1.0,
max: 0.0,
diff --git a/packages/frontend/src/utility/image-effector/fxs/distort.ts b/packages/frontend/src/utility/image-effector/fxs/distort.ts
index 4b1aefc159..7b5ec45f4b 100644
--- a/packages/frontend/src/utility/image-effector/fxs/distort.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/distort.ts
@@ -34,18 +34,23 @@ void main() {
`;
export const FX_distort = defineImageEffectorFx({
- id: 'distort' as const,
+ id: 'distort',
name: i18n.ts._imageEffector._fxs.distort,
shader,
uniforms: ['phase', 'frequency', 'strength', 'direction'] as const,
params: {
direction: {
- type: 'number:enum' as const,
- enum: [{ value: 0, label: 'v' }, { value: 1, label: 'h' }],
+ label: i18n.ts._imageEffector._fxProps.direction,
+ type: 'number:enum',
+ enum: [
+ { value: 0 as const, label: i18n.ts.horizontal },
+ { value: 1 as const, label: i18n.ts.vertical },
+ ],
default: 1,
},
phase: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.phase,
+ type: 'number',
default: 0.0,
min: -1.0,
max: 1.0,
@@ -53,14 +58,16 @@ export const FX_distort = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
frequency: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.frequency,
+ type: 'number',
default: 30,
min: 0,
max: 100,
step: 0.1,
},
strength: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.strength,
+ type: 'number',
default: 0.05,
min: 0,
max: 1,
diff --git a/packages/frontend/src/utility/image-effector/fxs/grayscale.ts b/packages/frontend/src/utility/image-effector/fxs/grayscale.ts
index 8f33706ae7..e1a288fc85 100644
--- a/packages/frontend/src/utility/image-effector/fxs/grayscale.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/grayscale.ts
@@ -26,7 +26,7 @@ void main() {
`;
export const FX_grayscale = defineImageEffectorFx({
- id: 'grayscale' as const,
+ id: 'grayscale',
name: i18n.ts._imageEffector._fxs.grayscale,
shader,
uniforms: [] as const,
diff --git a/packages/frontend/src/utility/image-effector/fxs/invert.ts b/packages/frontend/src/utility/image-effector/fxs/invert.ts
index 220a2dea30..1c662ae849 100644
--- a/packages/frontend/src/utility/image-effector/fxs/invert.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/invert.ts
@@ -27,21 +27,24 @@ void main() {
`;
export const FX_invert = defineImageEffectorFx({
- id: 'invert' as const,
+ id: 'invert',
name: i18n.ts._imageEffector._fxs.invert,
shader,
uniforms: ['r', 'g', 'b'] as const,
params: {
r: {
- type: 'boolean' as const,
+ label: i18n.ts._imageEffector._fxProps.redComponent,
+ type: 'boolean',
default: true,
},
g: {
- type: 'boolean' as const,
+ label: i18n.ts._imageEffector._fxProps.greenComponent,
+ type: 'boolean',
default: true,
},
b: {
- type: 'boolean' as const,
+ label: i18n.ts._imageEffector._fxProps.blueComponent,
+ type: 'boolean',
default: true,
},
},
diff --git a/packages/frontend/src/utility/image-effector/fxs/mirror.ts b/packages/frontend/src/utility/image-effector/fxs/mirror.ts
index 5946a2e0dc..3d7893f8b0 100644
--- a/packages/frontend/src/utility/image-effector/fxs/mirror.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/mirror.ts
@@ -35,19 +35,29 @@ void main() {
`;
export const FX_mirror = defineImageEffectorFx({
- id: 'mirror' as const,
+ id: 'mirror',
name: i18n.ts._imageEffector._fxs.mirror,
shader,
uniforms: ['h', 'v'] as const,
params: {
h: {
- type: 'number:enum' as const,
- enum: [{ value: -1, label: '<-' }, { value: 0, label: '|' }, { value: 1, label: '->' }],
+ label: i18n.ts.horizontal,
+ type: 'number:enum',
+ enum: [
+ { value: -1 as const, icon: 'ti ti-arrow-bar-right' },
+ { value: 0 as const, icon: 'ti ti-minus-vertical' },
+ { value: 1 as const, icon: 'ti ti-arrow-bar-left' }
+ ],
default: -1,
},
v: {
- type: 'number:enum' as const,
- enum: [{ value: -1, label: '^' }, { value: 0, label: '-' }, { value: 1, label: 'v' }],
+ label: i18n.ts.vertical,
+ type: 'number:enum',
+ enum: [
+ { value: -1 as const, icon: 'ti ti-arrow-bar-down' },
+ { value: 0 as const, icon: 'ti ti-minus' },
+ { value: 1 as const, icon: 'ti ti-arrow-bar-up' }
+ ],
default: 0,
},
},
diff --git a/packages/frontend/src/utility/image-effector/fxs/polkadot.ts b/packages/frontend/src/utility/image-effector/fxs/polkadot.ts
index 14f6f91148..1685601bd2 100644
--- a/packages/frontend/src/utility/image-effector/fxs/polkadot.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/polkadot.ts
@@ -78,14 +78,16 @@ void main() {
}
`;
+// Primarily used for watermark
export const FX_polkadot = defineImageEffectorFx({
- id: 'polkadot' as const,
+ id: 'polkadot',
name: i18n.ts._imageEffector._fxs.polkadot,
shader,
uniforms: ['angle', 'scale', 'major_radius', 'major_opacity', 'minor_divisions', 'minor_radius', 'minor_opacity', 'color'] as const,
params: {
angle: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.angle,
+ type: 'number',
default: 0,
min: -1.0,
max: 1.0,
@@ -93,21 +95,24 @@ export const FX_polkadot = defineImageEffectorFx({
toViewValue: v => Math.round(v * 90) + '°',
},
scale: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.scale,
+ type: 'number',
default: 3.0,
min: 1.0,
max: 10.0,
step: 0.1,
},
majorRadius: {
- type: 'number' as const,
+ label: i18n.ts._watermarkEditor.polkadotMainDotRadius,
+ type: 'number',
default: 0.1,
min: 0.0,
max: 1.0,
step: 0.01,
},
majorOpacity: {
- type: 'number' as const,
+ label: i18n.ts._watermarkEditor.polkadotMainDotOpacity,
+ type: 'number',
default: 0.75,
min: 0.0,
max: 1.0,
@@ -115,21 +120,24 @@ export const FX_polkadot = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
minorDivisions: {
- type: 'number' as const,
+ label: i18n.ts._watermarkEditor.polkadotSubDotDivisions,
+ type: 'number',
default: 4,
min: 0,
max: 16,
step: 1,
},
minorRadius: {
- type: 'number' as const,
+ label: i18n.ts._watermarkEditor.polkadotSubDotRadius,
+ type: 'number',
default: 0.25,
min: 0.0,
max: 1.0,
step: 0.01,
},
minorOpacity: {
- type: 'number' as const,
+ label: i18n.ts._watermarkEditor.polkadotSubDotOpacity,
+ type: 'number',
default: 0.5,
min: 0.0,
max: 1.0,
@@ -137,7 +145,8 @@ export const FX_polkadot = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
color: {
- type: 'color' as const,
+ label: i18n.ts._imageEffector._fxProps.color,
+ type: 'color',
default: [1, 1, 1],
},
},
diff --git a/packages/frontend/src/utility/image-effector/fxs/stripe.ts b/packages/frontend/src/utility/image-effector/fxs/stripe.ts
index f6c1d2278d..1c054c1aaa 100644
--- a/packages/frontend/src/utility/image-effector/fxs/stripe.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/stripe.ts
@@ -48,14 +48,16 @@ void main() {
}
`;
+// Primarily used for watermark
export const FX_stripe = defineImageEffectorFx({
- id: 'stripe' as const,
+ id: 'stripe',
name: i18n.ts._imageEffector._fxs.stripe,
shader,
uniforms: ['angle', 'frequency', 'phase', 'threshold', 'color', 'opacity'] as const,
params: {
angle: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.angle,
+ type: 'number',
default: 0.5,
min: -1.0,
max: 1.0,
@@ -63,14 +65,16 @@ export const FX_stripe = defineImageEffectorFx({
toViewValue: v => Math.round(v * 90) + '°',
},
frequency: {
- type: 'number' as const,
+ label: i18n.ts._watermarkEditor.stripeFrequency,
+ type: 'number',
default: 10.0,
min: 1.0,
max: 30.0,
step: 0.1,
},
threshold: {
- type: 'number' as const,
+ label: i18n.ts._watermarkEditor.stripeWidth,
+ type: 'number',
default: 0.1,
min: 0.0,
max: 1.0,
@@ -78,11 +82,13 @@ export const FX_stripe = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
color: {
- type: 'color' as const,
+ label: i18n.ts._imageEffector._fxProps.color,
+ type: 'color',
default: [1, 1, 1],
},
opacity: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.opacity,
+ type: 'number',
default: 0.5,
min: 0.0,
max: 1.0,
diff --git a/packages/frontend/src/utility/image-effector/fxs/tearing.ts b/packages/frontend/src/utility/image-effector/fxs/tearing.ts
index d5f1e062ec..a1d5178d24 100644
--- a/packages/frontend/src/utility/image-effector/fxs/tearing.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/tearing.ts
@@ -38,20 +38,22 @@ void main() {
`;
export const FX_tearing = defineImageEffectorFx({
- id: 'tearing' as const,
+ id: 'tearing',
name: i18n.ts._imageEffector._fxs.glitch + ': ' + i18n.ts._imageEffector._fxs.tearing,
shader,
uniforms: ['amount', 'channelShift'] as const,
params: {
amount: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.amount,
+ type: 'number',
default: 3,
min: 1,
max: 100,
step: 1,
},
strength: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.strength,
+ type: 'number',
default: 0.05,
min: -1,
max: 1,
@@ -59,7 +61,8 @@ export const FX_tearing = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
size: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.size,
+ type: 'number',
default: 0.2,
min: 0,
max: 1,
@@ -67,7 +70,8 @@ export const FX_tearing = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
channelShift: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.glitchChannelShift,
+ type: 'number',
default: 0.5,
min: 0,
max: 10,
@@ -75,7 +79,8 @@ export const FX_tearing = defineImageEffectorFx({
toViewValue: v => Math.round(v * 100) + '%',
},
seed: {
- type: 'seed' as const,
+ label: i18n.ts._imageEffector._fxProps.seed,
+ type: 'seed',
default: 100,
},
},
diff --git a/packages/frontend/src/utility/image-effector/fxs/threshold.ts b/packages/frontend/src/utility/image-effector/fxs/threshold.ts
index f2b8b107fd..3e591fc939 100644
--- a/packages/frontend/src/utility/image-effector/fxs/threshold.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/threshold.ts
@@ -27,27 +27,30 @@ void main() {
`;
export const FX_threshold = defineImageEffectorFx({
- id: 'threshold' as const,
+ id: 'threshold',
name: i18n.ts._imageEffector._fxs.threshold,
shader,
uniforms: ['r', 'g', 'b'] as const,
params: {
r: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.redComponent,
+ type: 'number',
default: 0.5,
min: 0.0,
max: 1.0,
step: 0.01,
},
g: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.greenComponent,
+ type: 'number',
default: 0.5,
min: 0.0,
max: 1.0,
step: 0.01,
},
b: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.blueComponent,
+ type: 'number',
default: 0.5,
min: 0.0,
max: 1.0,
diff --git a/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts b/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts
index 1c1c95b0c5..9b79e2bf94 100644
--- a/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts
@@ -83,46 +83,46 @@ void main() {
`;
export const FX_watermarkPlacement = defineImageEffectorFx({
- id: 'watermarkPlacement' as const,
+ id: 'watermarkPlacement',
name: '(internal)',
shader,
uniforms: ['texture_watermark', 'resolution_watermark', 'scale', 'angle', 'opacity', 'repeat', 'alignX', 'alignY', 'fitMode'] as const,
params: {
cover: {
- type: 'boolean' as const,
+ type: 'boolean',
default: false,
},
repeat: {
- type: 'boolean' as const,
+ type: 'boolean',
default: false,
},
scale: {
- type: 'number' as const,
+ type: 'number',
default: 0.3,
min: 0.0,
max: 1.0,
step: 0.01,
},
angle: {
- type: 'number' as const,
+ type: 'number',
default: 0,
min: -1.0,
max: 1.0,
step: 0.01,
},
align: {
- type: 'align' as const,
+ type: 'align',
default: { x: 'right', y: 'bottom' },
},
opacity: {
- type: 'number' as const,
+ type: 'number',
default: 0.75,
min: 0.0,
max: 1.0,
step: 0.01,
},
watermark: {
- type: 'texture' as const,
+ type: 'texture',
default: null,
},
},
diff --git a/packages/frontend/src/utility/image-effector/fxs/zoomLines.ts b/packages/frontend/src/utility/image-effector/fxs/zoomLines.ts
index 2613362a71..2e16ebea3b 100644
--- a/packages/frontend/src/utility/image-effector/fxs/zoomLines.ts
+++ b/packages/frontend/src/utility/image-effector/fxs/zoomLines.ts
@@ -37,59 +37,68 @@ void main() {
`;
export const FX_zoomLines = defineImageEffectorFx({
- id: 'zoomLines' as const,
+ id: 'zoomLines',
name: i18n.ts._imageEffector._fxs.zoomLines,
shader,
uniforms: ['pos', 'frequency', 'thresholdEnabled', 'threshold', 'maskSize', 'black'] as const,
params: {
x: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.centerX,
+ type: 'number',
default: 0.0,
min: -1.0,
max: 1.0,
step: 0.01,
},
y: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.centerY,
+ type: 'number',
default: 0.0,
min: -1.0,
max: 1.0,
step: 0.01,
},
frequency: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.frequency,
+ type: 'number',
default: 30.0,
min: 1.0,
max: 200.0,
step: 0.1,
},
- thresholdEnabled: {
- type: 'boolean' as const,
- default: true,
+ smoothing: {
+ label: i18n.ts._imageEffector._fxProps.zoomLinesSmoothing,
+ caption: i18n.ts._imageEffector._fxProps.zoomLinesSmoothingDescription,
+ type: 'boolean',
+ default: false,
},
threshold: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.zoomLinesThreshold,
+ type: 'number',
default: 0.2,
min: 0.0,
max: 1.0,
step: 0.01,
},
maskSize: {
- type: 'number' as const,
+ label: i18n.ts._imageEffector._fxProps.zoomLinesMaskSize,
+ type: 'number',
default: 0.5,
min: 0.0,
max: 1.0,
step: 0.01,
},
black: {
- type: 'boolean' as const,
+ label: i18n.ts._imageEffector._fxProps.zoomLinesBlack,
+ type: 'boolean',
default: false,
},
},
main: ({ gl, u, params }) => {
gl.uniform2f(u.pos, (1.0 + params.x) / 2.0, (1.0 + params.y) / 2.0);
gl.uniform1f(u.frequency, params.frequency);
- gl.uniform1i(u.thresholdEnabled, params.thresholdEnabled ? 1 : 0);
+ // thresholdの調整が有効な間はsmoothingが利用できない
+ gl.uniform1i(u.thresholdEnabled, params.smoothing ? 0 : 1);
gl.uniform1f(u.threshold, params.threshold);
gl.uniform1f(u.maskSize, params.maskSize);
gl.uniform1i(u.black, params.black ? 1 : 0);
diff --git a/packages/frontend/src/utility/watermark.ts b/packages/frontend/src/utility/watermark.ts
index f0b38684f0..75807b30c4 100644
--- a/packages/frontend/src/utility/watermark.ts
+++ b/packages/frontend/src/utility/watermark.ts
@@ -150,7 +150,6 @@ export class WatermarkRenderer {
minorRadius: layer.minorRadius,
minorOpacity: layer.minorOpacity,
color: layer.color,
- opacity: layer.opacity,
},
};
} else if (layer.type === 'checker') {
From 103d5a4b44c2950ba13add73ac062202533232d7 Mon Sep 17 00:00:00 2001
From: anatawa12
Date: Sat, 9 Aug 2025 14:12:17 +0900
Subject: [PATCH 02/10] fix frontend tests broken with aiscript 1.0.0 (#16377)
* test: update test for aiscript 1.0: line info in error
* test: update test for aiscript 1.0: keyword in object literal
---
packages/frontend/test/aiscript/api.test.ts | 17 ++++++++++++++---
packages/frontend/test/aiscript/ui.test.ts | 15 ++++++++++-----
2 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/packages/frontend/test/aiscript/api.test.ts b/packages/frontend/test/aiscript/api.test.ts
index ad24625b96..34f880286c 100644
--- a/packages/frontend/test/aiscript/api.test.ts
+++ b/packages/frontend/test/aiscript/api.test.ts
@@ -37,6 +37,17 @@ let $iMock = vi.hoisted | null >(
() => null
);
+function errorWithPos(
+ error: T,
+ line: number,
+ column: number,
+): T {
+ const pos = { line, column };
+ error.pos = pos;
+ error.message = error.message + `\n at (Line ${pos.line}, Column ${pos.column})`;
+ return error;
+}
+
vi.mock('@/i.js', () => {
return {
get $i() {
@@ -316,7 +327,7 @@ describe('AiScript common API', () => {
await expect(() => exe(`
Mk:api('https://example.com/api/ping', {})
`)).rejects.toStrictEqual(
- new errors.AiScriptRuntimeError('invalid endpoint'),
+ errorWithPos(new errors.AiScriptRuntimeError('invalid endpoint'), 2, 11),
);
expect(misskeyApiMock).not.toHaveBeenCalled();
});
@@ -325,7 +336,7 @@ describe('AiScript common API', () => {
await expect(() => exe(`
Mk:api('ping')
`)).rejects.toStrictEqual(
- new errors.AiScriptRuntimeError('expected param'),
+ errorWithPos(new errors.AiScriptRuntimeError('expected param'), 2, 11),
);
expect(misskeyApiMock).not.toHaveBeenCalled();
});
@@ -353,7 +364,7 @@ describe('AiScript common API', () => {
await expect(() => exe(`
Mk:save('key')
`)).rejects.toStrictEqual(
- new errors.AiScriptRuntimeError('Expect anything, but got nothing.'),
+ errorWithPos(new errors.AiScriptRuntimeError('Expect anything, but got nothing.'), 2, 12),
);
});
diff --git a/packages/frontend/test/aiscript/ui.test.ts b/packages/frontend/test/aiscript/ui.test.ts
index 44a50aaa62..c9df070bec 100644
--- a/packages/frontend/test/aiscript/ui.test.ts
+++ b/packages/frontend/test/aiscript/ui.test.ts
@@ -316,10 +316,11 @@ describe('AiScript UI API', () => {
describe('textInput', () => {
test.concurrent('all options', async () => {
+ // https://github.com/aiscript-dev/aiscript/pull/948
const { root, get, outputs } = await exe(`
let text_input = Ui:C:textInput({
onInput: print
- default: 'a'
+ "default": 'a'
label: 'b'
caption: 'c'
}, 'id')
@@ -356,10 +357,11 @@ describe('AiScript UI API', () => {
describe('textarea', () => {
test.concurrent('all options', async () => {
+ // https://github.com/aiscript-dev/aiscript/pull/948
const { root, get, outputs } = await exe(`
let textarea = Ui:C:textarea({
onInput: print
- default: 'a'
+ "default": 'a'
label: 'b'
caption: 'c'
}, 'id')
@@ -396,10 +398,11 @@ describe('AiScript UI API', () => {
describe('numberInput', () => {
test.concurrent('all options', async () => {
+ // https://github.com/aiscript-dev/aiscript/pull/948
const { root, get, outputs } = await exe(`
let number_input = Ui:C:numberInput({
onInput: print
- default: 1
+ "default": 1
label: 'a'
caption: 'b'
}, 'id')
@@ -557,10 +560,11 @@ describe('AiScript UI API', () => {
describe('switch', () => {
test.concurrent('all options', async () => {
+ // https://github.com/aiscript-dev/aiscript/pull/948
const { root, get, outputs } = await exe(`
let switch = Ui:C:switch({
onChange: print
- default: false
+ "default": false
label: 'a'
caption: 'b'
}, 'id')
@@ -597,6 +601,7 @@ describe('AiScript UI API', () => {
describe('select', () => {
test.concurrent('all options', async () => {
+ // https://github.com/aiscript-dev/aiscript/pull/948
const { root, get, outputs } = await exe(`
let select = Ui:C:select({
items: [
@@ -604,7 +609,7 @@ describe('AiScript UI API', () => {
{ text: 'B', value: 'b' }
]
onChange: print
- default: 'a'
+ "default": 'a'
label: 'c'
caption: 'd'
}, 'id')
From 2931eb0aad7f46eb7b47b4d0a3214c2d534727d5 Mon Sep 17 00:00:00 2001
From: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com>
Date: Sat, 9 Aug 2025 14:13:37 +0900
Subject: [PATCH 03/10] =?UTF-8?q?Fix:=20=E3=83=81=E3=83=A3=E3=83=B3?=
=?UTF-8?q?=E3=83=8D=E3=83=AB=E3=81=AE=E3=83=8F=E3=82=A4=E3=83=A9=E3=82=A4?=
=?UTF-8?q?=E3=83=88=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AB=E3=83=8E=E3=83=BC?=
=?UTF-8?q?=E3=83=88=E3=81=8C=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C=E3=81=AA?=
=?UTF-8?q?=E3=81=84=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3=20(#1636?=
=?UTF-8?q?4)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix(frontend): unable to see channel's featured notes
* docs(changelog): update changelog
---------
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
---
CHANGELOG.md | 1 +
packages/frontend/src/pages/channel.vue | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 94043c4c24..231e858e87 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -38,6 +38,7 @@
- Fix: 一部の設定検索結果が存在しないパスになる問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1171)
- Fix: テーマエディタが動作しない問題を修正
+- Fix: チャンネルのハイライトページにノートが表示されない問題を修正
- Fix: カラムの名前が正しくリスト/チャンネルの名前にならない問題を修正
### Server
diff --git a/packages/frontend/src/pages/channel.vue b/packages/frontend/src/pages/channel.vue
index 7ce42ea0cb..0437191695 100644
--- a/packages/frontend/src/pages/channel.vue
+++ b/packages/frontend/src/pages/channel.vue
@@ -112,7 +112,7 @@ const favorited = ref(false);
const searchQuery = ref('');
const searchPaginator = shallowRef();
const searchKey = ref('');
-const featuredPaginator = markRaw(new Paginator('channels/featured', {
+const featuredPaginator = markRaw(new Paginator('notes/featured', {
limit: 10,
computedParams: computed(() => ({
channelId: props.channelId,
From 504f886065b73a7e2e2fc804a0b373f66de29a55 Mon Sep 17 00:00:00 2001
From: syuilo <4439005+syuilo@users.noreply.github.com>
Date: Sat, 9 Aug 2025 14:14:16 +0900
Subject: [PATCH 04/10] Update CHANGELOG.md
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 231e858e87..4d6e7e4869 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -32,7 +32,7 @@
- Feat: ページのタブバーを下部に表示できるように
- Enhance: コントロールパネルを検索できるように
- Enhance: トルコ語 (tr-TR) に対応
-- Enhance: 言語別のスクリプトバンドルを生成するように
+- Enhance: 不必要な翻訳データを読み込まなくなり、パフォーマンスが向上しました
- Enhance: 画像エフェクトのパラメータ名の多言語対応
- Fix: 投稿フォームでファイルのアップロードが中止または失敗した際のハンドリングを修正
- Fix: 一部の設定検索結果が存在しないパスになる問題を修正
From 0586dd98cb56eb9fe8d07a369e3256dfc50d2f9d 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: Sat, 9 Aug 2025 14:20:18 +0900
Subject: [PATCH 05/10] fix(deps): regenerate lockfile (#16384)
---
pnpm-lock.yaml | 77 ++++++++++++++++++++------------------------------
1 file changed, 30 insertions(+), 47 deletions(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 014d4b0b51..b391330c68 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5522,9 +5522,6 @@ packages:
axios@1.11.0:
resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==}
- axios@1.8.4:
- resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==}
-
b4a@1.6.4:
resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==}
@@ -9076,10 +9073,6 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
- picomatch@4.0.2:
- resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
- engines: {node: '>=12'}
-
picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
@@ -13759,7 +13752,7 @@ snapshots:
dependencies:
'@types/estree': 1.0.8
estree-walker: 2.0.2
- picomatch: 4.0.2
+ picomatch: 4.0.3
optionalDependencies:
rollup: 4.46.2
@@ -14712,7 +14705,7 @@ snapshots:
'@stylistic/eslint-plugin@2.13.0(eslint@9.33.0)(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/utils': 8.38.0(eslint@9.33.0)(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.39.0(eslint@9.33.0)(typescript@5.9.2)
eslint: 9.33.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
@@ -14986,7 +14979,7 @@ snapshots:
'@types/accepts@1.3.7':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/archiver@6.0.3':
dependencies:
@@ -15022,7 +15015,7 @@ snapshots:
'@types/body-parser@1.19.6':
dependencies:
'@types/connect': 3.4.36
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/braces@3.0.1': {}
@@ -15082,7 +15075,7 @@ snapshots:
'@types/fluent-ffmpeg@2.1.27':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/graceful-fs@4.1.6':
dependencies:
@@ -15100,7 +15093,7 @@ snapshots:
'@types/http-link-header@1.0.7':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/istanbul-lib-coverage@2.0.6': {}
@@ -15121,7 +15114,7 @@ snapshots:
'@types/jsdom@21.1.7':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/tough-cookie': 4.0.5
parse5: 7.3.0
@@ -15188,7 +15181,7 @@ snapshots:
'@types/nodemailer@6.4.17':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/normalize-package-data@2.4.1': {}
@@ -15199,11 +15192,11 @@ snapshots:
'@types/oauth2orize@1.11.5':
dependencies:
'@types/express': 4.17.17
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/oauth@0.9.6':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/offscreencanvas@2019.3.0': {}
@@ -15215,7 +15208,7 @@ snapshots:
'@types/pg@8.15.4':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
pg-protocol: 1.10.0
pg-types: 2.2.0
@@ -15233,7 +15226,7 @@ snapshots:
'@types/qrcode@1.5.5':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/qs@6.9.7': {}
@@ -15326,21 +15319,21 @@ snapshots:
'@types/vary@1.1.3':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/wawoff2@1.0.2':
dependencies:
- '@types/node': 22.17.0
+ '@types/node': 22.17.1
'@types/web-push@3.6.4':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/whatwg-mimetype@3.0.2': {}
'@types/ws@8.18.1':
dependencies:
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
'@types/yargs-parser@21.0.0': {}
@@ -15471,8 +15464,8 @@ snapshots:
'@typescript-eslint/project-service@8.34.0(typescript@5.8.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3)
- '@typescript-eslint/types': 8.38.0
+ '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.8.3)
+ '@typescript-eslint/types': 8.39.0
debug: 4.4.1(supports-color@10.0.0)
typescript: 5.8.3
transitivePeerDependencies:
@@ -15480,8 +15473,8 @@ snapshots:
'@typescript-eslint/project-service@8.37.0(typescript@5.8.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3)
- '@typescript-eslint/types': 8.38.0
+ '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.8.3)
+ '@typescript-eslint/types': 8.39.0
debug: 4.4.1(supports-color@10.0.0)
typescript: 5.8.3
transitivePeerDependencies:
@@ -15489,8 +15482,8 @@ snapshots:
'@typescript-eslint/project-service@8.38.0(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2)
- '@typescript-eslint/types': 8.38.0
+ '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2)
+ '@typescript-eslint/types': 8.39.0
debug: 4.4.1(supports-color@10.0.0)
typescript: 5.9.2
transitivePeerDependencies:
@@ -15533,14 +15526,14 @@ snapshots:
dependencies:
typescript: 5.8.3
- '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)':
- dependencies:
- typescript: 5.8.3
-
'@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)':
dependencies:
typescript: 5.9.2
+ '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.8.3)':
+ dependencies:
+ typescript: 5.8.3
+
'@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.9.2)':
dependencies:
typescript: 5.9.2
@@ -16392,14 +16385,6 @@ snapshots:
transitivePeerDependencies:
- debug
- axios@1.8.4(debug@4.4.1):
- dependencies:
- follow-redirects: 1.15.9(debug@4.4.1)
- form-data: 4.0.3
- proxy-from-env: 1.1.0
- transitivePeerDependencies:
- - debug
-
b4a@1.6.4: {}
babel-jest@29.7.0(@babel/core@7.24.7):
@@ -19333,7 +19318,7 @@ snapshots:
jest-mock@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 22.16.4
+ '@types/node': 22.17.1
jest-util: 29.7.0
jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
@@ -20896,8 +20881,6 @@ snapshots:
picomatch@2.3.1: {}
- picomatch@4.0.2: {}
-
picomatch@4.0.3: {}
pid-port@1.0.2:
@@ -23004,7 +22987,7 @@ snapshots:
expect-type: 1.2.1
magic-string: 0.30.17
pathe: 2.0.3
- picomatch: 4.0.2
+ picomatch: 4.0.3
std-env: 3.9.0
tinybench: 2.9.0
tinyexec: 0.3.2
@@ -23048,7 +23031,7 @@ snapshots:
expect-type: 1.2.1
magic-string: 0.30.17
pathe: 2.0.3
- picomatch: 4.0.2
+ picomatch: 4.0.3
std-env: 3.9.0
tinybench: 2.9.0
tinyexec: 0.3.2
@@ -23188,7 +23171,7 @@ snapshots:
wait-on@8.0.3(debug@4.4.1):
dependencies:
- axios: 1.8.4(debug@4.4.1)
+ axios: 1.11.0(debug@4.4.1)
joi: 17.13.3
lodash: 4.17.21
minimist: 1.2.8
From b1b335d55a96764807c8ca2c2ec160e3573181ef 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: Sat, 9 Aug 2025 14:25:31 +0900
Subject: [PATCH 06/10] =?UTF-8?q?fix:=20=E3=83=81=E3=83=A3=E3=83=83?=
=?UTF-8?q?=E3=83=88=E3=81=AE=E5=88=A9=E7=94=A8=E5=8F=AF=E5=90=A6=E3=83=9D?=
=?UTF-8?q?=E3=83=AA=E3=82=B7=E3=83=BC=E3=81=AE=E8=80=83=E6=85=AE=E6=BC=8F?=
=?UTF-8?q?=E3=82=8C=E3=82=92=E4=BF=AE=E6=AD=A3=20(#16259)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix: チャットの利用可否ポリシーの考慮漏れを修正
* :art:
---
.../backend/src/server/api/endpoints/chat/read-all.ts | 2 ++
.../endpoints/drive/files/attached-chat-messages.ts | 10 +++++++++-
packages/frontend/src/pages/settings/other.vue | 6 ++++--
3 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/packages/backend/src/server/api/endpoints/chat/read-all.ts b/packages/backend/src/server/api/endpoints/chat/read-all.ts
index 2ed9497eef..e2d9601aa6 100644
--- a/packages/backend/src/server/api/endpoints/chat/read-all.ts
+++ b/packages/backend/src/server/api/endpoints/chat/read-all.ts
@@ -32,6 +32,8 @@ export default class extends Endpoint { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
await this.chatService.readAllChatMessages(me.id);
});
}
diff --git a/packages/backend/src/server/api/endpoints/drive/files/attached-chat-messages.ts b/packages/backend/src/server/api/endpoints/drive/files/attached-chat-messages.ts
index 5be477f468..b34ac4abd1 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/attached-chat-messages.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/attached-chat-messages.ts
@@ -10,6 +10,7 @@ import { QueryService } from '@/core/QueryService.js';
import { DI } from '@/di-symbols.js';
import { RoleService } from '@/core/RoleService.js';
import { ChatEntityService } from '@/core/entities/ChatEntityService.js';
+import { ChatService } from '@/core/ChatService.js';
import { ApiError } from '../../../error.js';
export const meta = {
@@ -60,14 +61,21 @@ export default class extends Endpoint { // eslint-
@Inject(DI.chatMessagesRepository)
private chatMessagesRepository: ChatMessagesRepository,
+ private chatService: ChatService,
private chatEntityService: ChatEntityService,
private queryService: QueryService,
private roleService: RoleService,
) {
super(meta, paramDef, async (ps, me) => {
+ const isModerator = await this.roleService.isModerator(me);
+
+ if (!isModerator) {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+ }
+
const file = await this.driveFilesRepository.findOneBy({
id: ps.fileId,
- userId: await this.roleService.isModerator(me) ? undefined : me.id,
+ userId: isModerator ? undefined : me.id,
});
if (file == null) {
diff --git a/packages/frontend/src/pages/settings/other.vue b/packages/frontend/src/pages/settings/other.vue
index c896ee8232..30ab2ce11e 100644
--- a/packages/frontend/src/pages/settings/other.vue
+++ b/packages/frontend/src/pages/settings/other.vue
@@ -128,9 +128,11 @@ SPDX-License-Identifier: AGPL-3.0-only
- Read all chat messages
+
+ Read all chat messages
-
+
+
{{ i18n.ts.migrateOldSettings }}
From ddac2fb7a143e6095305f5b99b6ac0429923f3a7 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: Sat, 9 Aug 2025 14:26:03 +0900
Subject: [PATCH 07/10] =?UTF-8?q?fix(frontend-builder):=20=E8=A8=80?=
=?UTF-8?q?=E8=AA=9E=E3=83=90=E3=83=B3=E3=83=89=E3=83=AB=E3=81=AE=E4=BD=9C?=
=?UTF-8?q?=E6=88=90=E7=8A=B6=E6=B3=81=E3=81=8C=E3=83=AD=E3=82=B0=E3=81=AB?=
=?UTF-8?q?=E6=AE=8B=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=20(#16385)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/frontend-builder/locale-inliner.ts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/packages/frontend-builder/locale-inliner.ts b/packages/frontend-builder/locale-inliner.ts
index 75bcdc5b3f..9bef465eeb 100644
--- a/packages/frontend-builder/locale-inliner.ts
+++ b/packages/frontend-builder/locale-inliner.ts
@@ -69,8 +69,10 @@ export class LocaleInliner {
async saveAllLocales(locales: Record) {
const localeNames = Object.keys(locales);
for (const localeName of localeNames) {
+ this.logger.info(`Creating bundle for ${localeName}`);
await this.saveLocale(localeName, locales[localeName]);
}
+ this.logger.info('Done');
}
async saveLocale(localeName: string, localeJson: Locale) {
From d8a137cb6c64aa0a4d49461591dc16eed94d90c8 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 9 Aug 2025 14:26:52 +0900
Subject: [PATCH 08/10] chore(deps): update [tools] update dependencies
(#16348)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
scripts/changelog-checker/package-lock.json | 134 ++++++++++----------
scripts/changelog-checker/package.json | 10 +-
2 files changed, 72 insertions(+), 72 deletions(-)
diff --git a/scripts/changelog-checker/package-lock.json b/scripts/changelog-checker/package-lock.json
index 4ed26757a6..5976ef9d4c 100644
--- a/scripts/changelog-checker/package-lock.json
+++ b/scripts/changelog-checker/package-lock.json
@@ -9,16 +9,16 @@
"version": "1.0.0",
"devDependencies": {
"@types/mdast": "4.0.4",
- "@types/node": "22.15.31",
- "@vitest/coverage-v8": "3.2.3",
+ "@types/node": "22.17.1",
+ "@vitest/coverage-v8": "3.2.4",
"mdast-util-to-string": "4.0.0",
"remark": "15.0.1",
"remark-parse": "11.0.0",
- "typescript": "5.8.3",
+ "typescript": "5.9.2",
"unified": "11.0.5",
"vite": "6.3.5",
- "vite-node": "3.2.3",
- "vitest": "3.2.3"
+ "vite-node": "3.2.4",
+ "vitest": "3.2.4"
}
},
"node_modules/@ampproject/remapping": {
@@ -940,9 +940,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "22.15.31",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.31.tgz",
- "integrity": "sha512-jnVe5ULKl6tijxUhvQeNbQG/84fHfg+yMak02cT8QVhBx/F05rAVxCGBYYTh2EKz22D6JF5ktXuNwdx7b9iEGw==",
+ "version": "22.17.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.1.tgz",
+ "integrity": "sha512-y3tBaz+rjspDTylNjAX37jEC3TETEFGNJL6uQDxwF9/8GLLIjW1rvVHlynyuUKMnMr1Roq8jOv3vkopBjC4/VA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -956,9 +956,9 @@
"dev": true
},
"node_modules/@vitest/coverage-v8": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.3.tgz",
- "integrity": "sha512-D1QKzngg8PcDoCE8FHSZhREDuEy+zcKmMiMafYse41RZpBE5EDJyKOTdqK3RQfsV2S2nyKor5KCs8PyPRFqKPg==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz",
+ "integrity": "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -980,8 +980,8 @@
"url": "https://opencollective.com/vitest"
},
"peerDependencies": {
- "@vitest/browser": "3.2.3",
- "vitest": "3.2.3"
+ "@vitest/browser": "3.2.4",
+ "vitest": "3.2.4"
},
"peerDependenciesMeta": {
"@vitest/browser": {
@@ -990,15 +990,15 @@
}
},
"node_modules/@vitest/expect": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.3.tgz",
- "integrity": "sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
+ "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/chai": "^5.2.2",
- "@vitest/spy": "3.2.3",
- "@vitest/utils": "3.2.3",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
"chai": "^5.2.0",
"tinyrainbow": "^2.0.0"
},
@@ -1007,13 +1007,13 @@
}
},
"node_modules/@vitest/mocker": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.3.tgz",
- "integrity": "sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz",
+ "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "3.2.3",
+ "@vitest/spy": "3.2.4",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.17"
},
@@ -1034,9 +1034,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.3.tgz",
- "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz",
+ "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1047,13 +1047,13 @@
}
},
"node_modules/@vitest/runner": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.3.tgz",
- "integrity": "sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz",
+ "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "3.2.3",
+ "@vitest/utils": "3.2.4",
"pathe": "^2.0.3",
"strip-literal": "^3.0.0"
},
@@ -1062,13 +1062,13 @@
}
},
"node_modules/@vitest/snapshot": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.3.tgz",
- "integrity": "sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz",
+ "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.3",
+ "@vitest/pretty-format": "3.2.4",
"magic-string": "^0.30.17",
"pathe": "^2.0.3"
},
@@ -1077,9 +1077,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.3.tgz",
- "integrity": "sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz",
+ "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1090,14 +1090,14 @@
}
},
"node_modules/@vitest/utils": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.3.tgz",
- "integrity": "sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz",
+ "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.3",
- "loupe": "^3.1.3",
+ "@vitest/pretty-format": "3.2.4",
+ "loupe": "^3.1.4",
"tinyrainbow": "^2.0.0"
},
"funding": {
@@ -1607,9 +1607,9 @@
}
},
"node_modules/loupe": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
- "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.0.tgz",
+ "integrity": "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==",
"dev": true,
"license": "MIT"
},
@@ -2672,9 +2672,9 @@
}
},
"node_modules/tinypool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz",
- "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
+ "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2712,9 +2712,9 @@
}
},
"node_modules/typescript": {
- "version": "5.8.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
- "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "version": "5.9.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
+ "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -2912,9 +2912,9 @@
}
},
"node_modules/vite-node": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.3.tgz",
- "integrity": "sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz",
+ "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2935,20 +2935,20 @@
}
},
"node_modules/vitest": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.3.tgz",
- "integrity": "sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz",
+ "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/chai": "^5.2.2",
- "@vitest/expect": "3.2.3",
- "@vitest/mocker": "3.2.3",
- "@vitest/pretty-format": "^3.2.3",
- "@vitest/runner": "3.2.3",
- "@vitest/snapshot": "3.2.3",
- "@vitest/spy": "3.2.3",
- "@vitest/utils": "3.2.3",
+ "@vitest/expect": "3.2.4",
+ "@vitest/mocker": "3.2.4",
+ "@vitest/pretty-format": "^3.2.4",
+ "@vitest/runner": "3.2.4",
+ "@vitest/snapshot": "3.2.4",
+ "@vitest/spy": "3.2.4",
+ "@vitest/utils": "3.2.4",
"chai": "^5.2.0",
"debug": "^4.4.1",
"expect-type": "^1.2.1",
@@ -2959,10 +2959,10 @@
"tinybench": "^2.9.0",
"tinyexec": "^0.3.2",
"tinyglobby": "^0.2.14",
- "tinypool": "^1.1.0",
+ "tinypool": "^1.1.1",
"tinyrainbow": "^2.0.0",
"vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
- "vite-node": "3.2.3",
+ "vite-node": "3.2.4",
"why-is-node-running": "^2.3.0"
},
"bin": {
@@ -2978,8 +2978,8 @@
"@edge-runtime/vm": "*",
"@types/debug": "^4.1.12",
"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "@vitest/browser": "3.2.3",
- "@vitest/ui": "3.2.3",
+ "@vitest/browser": "3.2.4",
+ "@vitest/ui": "3.2.4",
"happy-dom": "*",
"jsdom": "*"
},
diff --git a/scripts/changelog-checker/package.json b/scripts/changelog-checker/package.json
index fa6cf09ea1..b02ca46cb9 100644
--- a/scripts/changelog-checker/package.json
+++ b/scripts/changelog-checker/package.json
@@ -10,15 +10,15 @@
},
"devDependencies": {
"@types/mdast": "4.0.4",
- "@types/node": "22.15.31",
- "@vitest/coverage-v8": "3.2.3",
+ "@types/node": "22.17.1",
+ "@vitest/coverage-v8": "3.2.4",
"mdast-util-to-string": "4.0.0",
"remark": "15.0.1",
"remark-parse": "11.0.0",
- "typescript": "5.8.3",
+ "typescript": "5.9.2",
"unified": "11.0.5",
"vite": "6.3.5",
- "vite-node": "3.2.3",
- "vitest": "3.2.3"
+ "vite-node": "3.2.4",
+ "vitest": "3.2.4"
}
}
From 1b0de39f929ddad1dd8321d0e4b7a38e85173b5c Mon Sep 17 00:00:00 2001
From: syuilo <4439005+syuilo@users.noreply.github.com>
Date: Sat, 9 Aug 2025 14:27:48 +0900
Subject: [PATCH 09/10] Update CHANGELOG.md
---
CHANGELOG.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4d6e7e4869..e5b171f4ae 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -34,6 +34,7 @@
- Enhance: トルコ語 (tr-TR) に対応
- Enhance: 不必要な翻訳データを読み込まなくなり、パフォーマンスが向上しました
- Enhance: 画像エフェクトのパラメータ名の多言語対応
+- Enhance: 依存ソフトウェアの更新
- Fix: 投稿フォームでファイルのアップロードが中止または失敗した際のハンドリングを修正
- Fix: 一部の設定検索結果が存在しないパスになる問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1171)
@@ -44,6 +45,7 @@
### Server
- Enhance: ノートの削除処理の効率化
- Enhance: 全体的なパフォーマンスの向上
+- Enhance: 依存ソフトウェアの更新
- Fix: SystemWebhook設定でsecretを空に出来ない問題を修正
From 72864fcbd01003918ad04a04623a015cbf2f0150 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Sat, 9 Aug 2025 05:27:57 +0000
Subject: [PATCH 10/10] Bump version to 2025.8.0-alpha.7
---
package.json | 2 +-
packages/misskey-js/package.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/package.json b/package.json
index 3195a538bf..9078e3dc5b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "misskey",
- "version": "2025.8.0-alpha.6",
+ "version": "2025.8.0-alpha.7",
"codename": "nasubi",
"repository": {
"type": "git",
diff --git a/packages/misskey-js/package.json b/packages/misskey-js/package.json
index 718cefa301..c160b968b5 100644
--- a/packages/misskey-js/package.json
+++ b/packages/misskey-js/package.json
@@ -1,7 +1,7 @@
{
"type": "module",
"name": "misskey-js",
- "version": "2025.8.0-alpha.6",
+ "version": "2025.8.0-alpha.7",
"description": "Misskey SDK for JavaScript",
"license": "MIT",
"main": "./built/index.js",