fix(frontend): PlayのAiScriptバージョン判定が正しく動作しない問題を修正 (#16843)

* fix: aiscript 1.0.0 以外が全部レガシー扱いになる問題を修正 (MisskeyIO#1129)

* Update Changelog

---------

Co-authored-by: あわわわとーにゅ <17376330+u1-liquid@users.noreply.github.com>
This commit is contained in:
かっこかり 2025-11-24 20:53:39 +09:00 committed by GitHub
parent 14730e429a
commit 42706970f2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 12 additions and 1 deletions

View File

@ -10,6 +10,8 @@
- Fix: ヘッダーメニューのチャンネルの新規作成の項目でチャンネル作成ページに飛べない問題を修正 #16816
- Fix: 一部のシチュエーションで投稿フォームのツアーが正しく表示されない問題を修正
- Fix: 投稿フォームのリセットボタンで注釈がリセットされない問題を修正
- Fix: PlayのAiScriptバージョン判定v0.x系・v1.x系の判定が正しく動作しない問題を修正
(Cherry-picked from https://github.com/MisskeyIO/misskey/pull/1129)
### Server
- Enhance: `clips/my-favorites` APIがページネーションに対応しました

View File

@ -6,6 +6,13 @@
import { errors, utils } from '@syuilo/aiscript';
import type { values } from '@syuilo/aiscript';
const extractVersionIdentifier = /^\/\/\/\s*@\s*(\d+)\.(\d+)\.\d+$/m;
export function getAiScriptVersion(script: string): { major: number; minor: number } | undefined {
const match = extractVersionIdentifier.exec(script);
return match ? { major: Number(match[1]), minor: Number(match[2]) } : undefined;
}
export function assertStringAndIsIn<A extends readonly string[]>(value: values.Value | undefined, expects: A): asserts value is values.VStr & { value: A[number] } {
utils.assertString(value);
const str = value.value;

View File

@ -74,6 +74,7 @@ import { misskeyApi } from '@/utility/misskey-api.js';
import { i18n } from '@/i18n.js';
import { definePage } from '@/page.js';
import MkAsUi from '@/components/MkAsUi.vue';
import { getAiScriptVersion } from '@/aiscript/common.js';
import { registerAsUiLib } from '@/aiscript/ui.js';
import { aiScriptReadline, createAiScriptEnv } from '@/aiscript/api.js';
import MkFolder from '@/components/MkFolder.vue';
@ -194,7 +195,8 @@ async function run() {
if (aiscript.value) aiscript.value.abort();
if (!flash.value) return;
const isLegacy = !flash.value.script.replaceAll(' ', '').startsWith('///@1.0.0');
const version = getAiScriptVersion(flash.value.script);
const isLegacy = version ? version.major < 1 : false;
const { Interpreter, Parser, values } = isLegacy ? (await import('@syuilo/aiscript-0-19-0') as any) : await import('@syuilo/aiscript');