summaryrefslogtreecommitdiff
path: root/packages/frontend/src
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 /packages/frontend/src
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
Diffstat (limited to 'packages/frontend/src')
-rw-r--r--packages/frontend/src/aiscript/api.ts94
1 files changed, 75 insertions, 19 deletions
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);