summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2025-11-27 18:43:00 +0900
committerGitHub <noreply@github.com>2025-11-27 18:43:00 +0900
commitf10496645c6d609361ef0652ecd0b06b31c47893 (patch)
tree5dd0a0ec119426ec56f77b6617dc19ef2f1dadfc
parentRevert "fix(backend): `clips/my-favorites` APIをページネーションに... (diff)
downloadmisskey-f10496645c6d609361ef0652ecd0b06b31c47893.tar.gz
misskey-f10496645c6d609361ef0652ecd0b06b31c47893.tar.bz2
misskey-f10496645c6d609361ef0652ecd0b06b31c47893.zip
fix(frontend/aiscript): 各種関数の引数で明示的にnullが指定されている場合のハンドリングを修正 (#16838)
* fix(frontend/aiscript): MkDialogのtitle, textでnull値を許容するように * fix * update aiscript and use new api * fix * fix
-rw-r--r--packages/frontend/package.json2
-rw-r--r--packages/frontend/src/aiscript/api.ts94
-rw-r--r--pnpm-lock.yaml10
-rw-r--r--pnpm-workspace.yaml1
4 files changed, 82 insertions, 25 deletions
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 3f634a0d80..b6906e130a 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -25,7 +25,7 @@
"@rollup/plugin-replace": "6.0.3",
"@rollup/pluginutils": "5.3.0",
"@sentry/vue": "10.26.0",
- "@syuilo/aiscript": "1.1.2",
+ "@syuilo/aiscript": "1.2.0",
"@syuilo/aiscript-0-19-0": "npm:@syuilo/aiscript@^0.19.0",
"@twemoji/parser": "16.0.0",
"@vitejs/plugin-vue": "6.0.2",
diff --git a/packages/frontend/src/aiscript/api.ts b/packages/frontend/src/aiscript/api.ts
index dc84925375..3a476787fe 100644
--- a/packages/frontend/src/aiscript/api.ts
+++ b/packages/frontend/src/aiscript/api.ts
@@ -40,29 +40,77 @@ export function createAiScriptEnv(opts: { storageKey: string, token?: string })
CUSTOM_EMOJIS: utils.jsToVal(customEmojis.value),
LOCALE: values.STR(lang),
SERVER_URL: values.STR(url),
- 'Mk:dialog': values.FN_NATIVE(async ([title, text, type]) => {
- utils.assertString(title);
- utils.assertString(text);
- if (type != null) {
- assertStringAndIsIn(type, DIALOG_TYPES);
+ 'Mk:dialog': values.FN_NATIVE(async ([_title, _text, _type]) => {
+ let title: string | undefined = undefined;
+ let text: string | undefined = undefined;
+ let type: typeof DIALOG_TYPES[number] = 'info';
+
+ if (_title != null) {
+ if (utils.isString(_title)) {
+ title = _title.value;
+ } else {
+ utils.assertNull(_title);
+ }
+ }
+
+ if (_text != null) {
+ if (utils.isString(_text)) {
+ text = _text.value;
+ } else {
+ utils.assertNull(_text);
+ }
+ }
+
+ if (_type != null) {
+ if (utils.isString(_type)) {
+ assertStringAndIsIn(_type, DIALOG_TYPES);
+ type = _type.value;
+ } else {
+ utils.assertNull(_type);
+ }
}
+
await os.alert({
- type: type ? type.value : 'info',
- title: title.value,
- text: text.value,
+ type,
+ title,
+ text,
});
return values.NULL;
}),
- 'Mk:confirm': values.FN_NATIVE(async ([title, text, type]) => {
- utils.assertString(title);
- utils.assertString(text);
- if (type != null) {
- assertStringAndIsIn(type, DIALOG_TYPES);
+ 'Mk:confirm': values.FN_NATIVE(async ([_title, _text, _type]) => {
+ let title: string | undefined = undefined;
+ let text: string | undefined = undefined;
+ let type: typeof DIALOG_TYPES[number] = 'question';
+
+ if (_title != null) {
+ if (utils.isString(_title)) {
+ title = _title.value;
+ } else {
+ utils.assertNull(_title);
+ }
}
+
+ if (_text != null) {
+ if (utils.isString(_text)) {
+ text = _text.value;
+ } else {
+ utils.assertNull(_text);
+ }
+ }
+
+ if (_type != null) {
+ if (utils.isString(_type)) {
+ assertStringAndIsIn(_type, DIALOG_TYPES);
+ type = _type.value;
+ } else {
+ utils.assertNull(_type);
+ }
+ }
+
const confirm = await os.confirm({
- type: type ? type.value : 'question',
- title: title.value,
- text: text.value,
+ type,
+ title,
+ text,
});
return confirm.canceled ? values.FALSE : values.TRUE;
}),
@@ -76,15 +124,23 @@ export function createAiScriptEnv(opts: { storageKey: string, token?: string })
if (ep.value.includes('://') || ep.value.includes('..')) {
throw new errors.AiScriptRuntimeError('invalid endpoint');
}
- if (token) {
+
+ let actualToken: string | null = null;
+ if (token != null && !utils.isNull(token)) {
utils.assertString(token);
// バグがあればundefinedもあり得るため念のため
- if (typeof token.value !== 'string') throw new Error('invalid token');
+ if (typeof token.value !== 'string') throw new errors.AiScriptRuntimeError('invalid token');
+ actualToken = token.value;
}
- const actualToken: string | null = token?.value ?? opts.token ?? null;
+
+ if (actualToken == null) {
+ actualToken = opts.token ?? null;
+ }
+
if (param == null) {
throw new errors.AiScriptRuntimeError('expected param');
}
+
utils.assertObject(param);
return misskeyApi(ep.value as keyof Misskey.Endpoints, utils.valToJs(param) as object, actualToken).then(res => {
return utils.jsToVal(res);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bfc71f5256..519ea8a7e4 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -729,8 +729,8 @@ importers:
specifier: 10.26.0
version: 10.26.0(vue@3.5.24(typescript@5.9.3))
'@syuilo/aiscript':
- specifier: 1.1.2
- version: 1.1.2
+ specifier: 1.2.0
+ version: 1.2.0
'@syuilo/aiscript-0-19-0':
specifier: npm:@syuilo/aiscript@^0.19.0
version: '@syuilo/aiscript@0.19.0'
@@ -4459,8 +4459,8 @@ packages:
'@syuilo/aiscript@0.19.0':
resolution: {integrity: sha512-ZWG4s1m6RrFjE7NeIMaxFz769YO1jW5ReTrOROrEO4IHheOrjxxJ/Ffe2TUNqX9/XxDloMwfWplKhfSzx8LGMA==}
- '@syuilo/aiscript@1.1.2':
- resolution: {integrity: sha512-cijsHTiMjeECocElyjRIcWMPGDhZIX3YfCOyzI6AZM8ajxRQ2hSqJwEh9pDr4mVTml9kLMHWDHmgfHkTHRJ1sg==}
+ '@syuilo/aiscript@1.2.0':
+ resolution: {integrity: sha512-3MkKfqDftqHyouINgHEIHnoTVWEeL0L1o7Y7Y9d8qb5h5vZKphzH/KVG3R2iI6CHtmO1mWHHJx5A499f80H9FA==}
'@szmarczak/http-timer@5.0.1':
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
@@ -14858,7 +14858,7 @@ snapshots:
stringz: 2.1.0
uuid: 9.0.1
- '@syuilo/aiscript@1.1.2':
+ '@syuilo/aiscript@1.2.0':
dependencies:
seedrandom: 3.0.5
stringz: 2.1.0
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 8757f8dc26..8f7fdf13c8 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -32,3 +32,4 @@ onlyBuiltDependencies:
ignorePatchFailures: false
minimumReleaseAge: 10080 # delay 7days to mitigate supply-chain attack
minimumReleaseAgeExclude:
+ - '@syuilo/aiscript'