From 25f26655bfa7918f288d4e7220fdafc8f3546fbe Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Mon, 3 Mar 2025 01:22:01 -0500 Subject: [PATCH 1/5] don't use empty CW as placeholder in megalodon --- packages/megalodon/src/misskey.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/megalodon/src/misskey.ts b/packages/megalodon/src/misskey.ts index 7e493d8fb7..01d5652650 100644 --- a/packages/megalodon/src/misskey.ts +++ b/packages/megalodon/src/misskey.ts @@ -1119,7 +1119,7 @@ export default class Misskey implements MegalodonInterface { } if (options.sensitive) { params = Object.assign(params, { - cw: '' + cw: ' ' }) } if (options.spoiler_text) { @@ -1198,7 +1198,7 @@ export default class Misskey implements MegalodonInterface { } if (_options.sensitive) { params = Object.assign(params, { - cw: '' + cw: ' ' }) } if (_options.spoiler_text) { From e44623d7c9d432949f404a1966f1f132b14e39dc Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Mon, 3 Mar 2025 01:22:15 -0500 Subject: [PATCH 2/5] don't parse empty strings in timelineArgs.ts --- packages/backend/src/server/api/mastodon/timelineArgs.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/server/api/mastodon/timelineArgs.ts b/packages/backend/src/server/api/mastodon/timelineArgs.ts index 3fba8ec57a..167d493ab6 100644 --- a/packages/backend/src/server/api/mastodon/timelineArgs.ts +++ b/packages/backend/src/server/api/mastodon/timelineArgs.ts @@ -22,12 +22,12 @@ export interface TimelineArgs { // Values taken from https://docs.joinmastodon.org/client/intro/#boolean export function toBoolean(value: string | undefined): boolean | undefined { - if (value === undefined) return undefined; + if (!value) return undefined; return !['0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF'].includes(value); } export function toInt(value: string | undefined): number | undefined { - if (value === undefined) return undefined; + if (!value) return undefined; return parseInt(value); } From 908271c995f7c21a5353039bbdc0569ed007b764 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Mon, 3 Mar 2025 01:24:40 -0500 Subject: [PATCH 3/5] ignore empty CW with creating / editing notes --- packages/backend/src/server/api/endpoints/notes/create.test.ts | 2 +- packages/backend/src/server/api/endpoints/notes/create.ts | 2 +- packages/backend/src/server/api/endpoints/notes/edit.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/server/api/endpoints/notes/create.test.ts b/packages/backend/src/server/api/endpoints/notes/create.test.ts index 18d80e867b..545889a7ee 100644 --- a/packages/backend/src/server/api/endpoints/notes/create.test.ts +++ b/packages/backend/src/server/api/endpoints/notes/create.test.ts @@ -65,7 +65,7 @@ describe('api:notes/create', () => { test('0 characters cw', () => { expect(v({ text: 'Body', cw: '' })) - .toBe(INVALID); + .toBe(VALID); }); test('reject only cw', () => { diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts index b0f32bfda8..c404c30845 100644 --- a/packages/backend/src/server/api/endpoints/notes/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/create.ts @@ -159,7 +159,7 @@ export const paramDef = { visibleUserIds: { type: 'array', uniqueItems: true, items: { type: 'string', format: 'misskey:id', } }, - cw: { type: 'string', nullable: true, minLength: 1 }, + cw: { type: 'string', nullable: true }, localOnly: { type: 'boolean', default: false }, reactionAcceptance: { type: 'string', nullable: true, enum: [null, 'likeOnly', 'likeOnlyForRemote', 'nonSensitiveOnly', 'nonSensitiveOnlyForLocalLikeOnlyForRemote'], default: null }, noExtractMentions: { type: 'boolean', default: false }, diff --git a/packages/backend/src/server/api/endpoints/notes/edit.ts b/packages/backend/src/server/api/endpoints/notes/edit.ts index cc2293c5d6..62dcb52806 100644 --- a/packages/backend/src/server/api/endpoints/notes/edit.ts +++ b/packages/backend/src/server/api/endpoints/notes/edit.ts @@ -209,7 +209,7 @@ export const paramDef = { format: 'misskey:id', }, }, - cw: { type: 'string', nullable: true, minLength: 1 }, + cw: { type: 'string', nullable: true }, localOnly: { type: 'boolean', default: false }, reactionAcceptance: { type: 'string', nullable: true, enum: [null, 'likeOnly', 'likeOnlyForRemote', 'nonSensitiveOnly', 'nonSensitiveOnlyForLocalLikeOnlyForRemote'], default: null }, noExtractMentions: { type: 'boolean', default: false }, From 0cd1292308ba0b6acdae199da3442a1ce3b8e092 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Mon, 3 Mar 2025 08:39:24 -0500 Subject: [PATCH 4/5] disable '@typescript-eslint/prefer-nullish-coalescing' for primitive types --- packages/backend/eslint.config.js | 7 ------- packages/shared/eslint.config.js | 4 ++++ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/backend/eslint.config.js b/packages/backend/eslint.config.js index 7c649a373c..ef5a0ccec1 100644 --- a/packages/backend/eslint.config.js +++ b/packages/backend/eslint.config.js @@ -42,13 +42,6 @@ export default [ name: '__filename', message: 'Not in ESModule. Use `import.meta.url` instead.', }], - // https://typescript-eslint.io/rules/prefer-nullish-coalescing/ - '@typescript-eslint/prefer-nullish-coalescing': ['warn', { - ignorePrimitives: { - // Without this, the rule breaks for nullable booleans - boolean: true, - }, - }], }, }, { diff --git a/packages/shared/eslint.config.js b/packages/shared/eslint.config.js index 860eb4a8e8..be7a031b63 100644 --- a/packages/shared/eslint.config.js +++ b/packages/shared/eslint.config.js @@ -37,6 +37,10 @@ export default [ 'no-restricted-imports': ['error', { paths: [{ name: 'punycode' }], }], + // https://typescript-eslint.io/rules/prefer-nullish-coalescing/ + '@typescript-eslint/prefer-nullish-coalescing': ['warn', { + ignorePrimitives: true, + }], }, }, ]; From 1483f96c3fe66e30366b16480cdf7838a073de5b Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Mon, 3 Mar 2025 08:39:39 -0500 Subject: [PATCH 5/5] collapse empty `cw` to null --- packages/backend/src/server/api/endpoints/notes/create.ts | 2 +- packages/backend/src/server/api/endpoints/notes/edit.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts index c404c30845..3dd90c3dca 100644 --- a/packages/backend/src/server/api/endpoints/notes/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/create.ts @@ -400,7 +400,7 @@ export default class extends Endpoint { // eslint- text: ps.text ?? undefined, reply, renote, - cw: ps.cw, + cw: ps.cw || null, localOnly: ps.localOnly, reactionAcceptance: ps.reactionAcceptance, visibility: ps.visibility, diff --git a/packages/backend/src/server/api/endpoints/notes/edit.ts b/packages/backend/src/server/api/endpoints/notes/edit.ts index 62dcb52806..7b13d3a4f4 100644 --- a/packages/backend/src/server/api/endpoints/notes/edit.ts +++ b/packages/backend/src/server/api/endpoints/notes/edit.ts @@ -454,7 +454,7 @@ export default class extends Endpoint { // eslint- text: ps.text ?? undefined, reply, renote, - cw: ps.cw, + cw: ps.cw || null, localOnly: ps.localOnly, reactionAcceptance: ps.reactionAcceptance, visibility: ps.visibility,