From b50a4e72249dc96c41f9aef1574b8b7df309a000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Tue, 24 Feb 2026 13:31:24 +0100 Subject: [PATCH] pl-api: replace lodash omit/pick with our own util MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- .../lib/client/grouped-notifications.ts | 15 ++------ packages/pl-api/lib/entities/account.ts | 4 +- .../pl-api/lib/entities/admin/announcement.ts | 4 +- packages/pl-api/lib/entities/admin/report.ts | 2 +- .../entities/grouped-notifications-results.ts | 3 +- packages/pl-api/lib/entities/notification.ts | 3 +- packages/pl-api/lib/entities/status.ts | 3 +- .../lib/params/grouped-notifications.ts | 2 +- packages/pl-api/lib/utils/index.ts | 19 ++++++++++ packages/pl-api/package.json | 4 -- pnpm-lock.yaml | 38 ------------------- 11 files changed, 34 insertions(+), 63 deletions(-) create mode 100644 packages/pl-api/lib/utils/index.ts diff --git a/packages/pl-api/lib/client/grouped-notifications.ts b/packages/pl-api/lib/client/grouped-notifications.ts index af1e4cc1c..ddae4af57 100644 --- a/packages/pl-api/lib/client/grouped-notifications.ts +++ b/packages/pl-api/lib/client/grouped-notifications.ts @@ -1,10 +1,9 @@ -import omit from 'lodash.omit'; -import pick from 'lodash.pick'; import * as v from 'valibot'; import { accountSchema, groupedNotificationsResultsSchema } from '../entities'; import { filteredArray } from '../entities/utils'; import { type RequestMeta } from '../request'; +import { pick, omit } from '../utils'; import type { PlApiBaseClient } from '../client-base'; import type { @@ -69,7 +68,7 @@ const _groupNotifications = ( status_id: notification.status?.id, // @ts-expect-error used optional chaining target_id: notification.target?.id, - }); + } as NotificationGroup); } } @@ -224,15 +223,7 @@ const groupedNotifications = ( } return client.notifications.getUnreadNotificationCount( - pick(params || {}, [ - 'max_id', - 'since_id', - 'limit', - 'min_id', - 'types', - 'exclude_types', - 'account_id', - ]), + pick(params || {}, ['limit', 'types', 'exclude_types', 'account_id']), ); }, }; diff --git a/packages/pl-api/lib/entities/account.ts b/packages/pl-api/lib/entities/account.ts index 912718183..5649ec9ad 100644 --- a/packages/pl-api/lib/entities/account.ts +++ b/packages/pl-api/lib/entities/account.ts @@ -1,6 +1,6 @@ -import pick from 'lodash.pick'; import * as v from 'valibot'; +import { pick } from '../utils'; import { isDefaultAvatar, isDefaultHeader } from '../utils/accounts'; import { guessFqn } from '../utils/domain'; @@ -107,7 +107,7 @@ const preprocessAccount = v.transform((account: any) => { ...pick(account.akkoma || {}, ['permit_followback']), is_cat: isCat, speak_as_cat: speakAsCat, - ...(pick(account.other_settings || {}), ['birthday', 'location']), + ...pick(account.other_settings || {}, ['birthday', 'location']), __meta: pick(account, ['pleroma', 'source']), ...account, display_name: diff --git a/packages/pl-api/lib/entities/admin/announcement.ts b/packages/pl-api/lib/entities/admin/announcement.ts index ef6b20fba..41bac606f 100644 --- a/packages/pl-api/lib/entities/admin/announcement.ts +++ b/packages/pl-api/lib/entities/admin/announcement.ts @@ -1,6 +1,6 @@ -import pick from 'lodash.pick'; import * as v from 'valibot'; +import { pick } from '../../utils'; import { announcementSchema } from '../announcement'; /** @@ -11,7 +11,7 @@ const adminAnnouncementSchema = v.pipe( v.any(), v.transform((announcement: any) => ({ ...announcement, - ...pick(announcement.pleroma, 'raw_content'), + ...pick(announcement.pleroma, ['raw_content']), })), v.object({ ...announcementSchema.entries, diff --git a/packages/pl-api/lib/entities/admin/report.ts b/packages/pl-api/lib/entities/admin/report.ts index fc769b6e5..39e72b3d2 100644 --- a/packages/pl-api/lib/entities/admin/report.ts +++ b/packages/pl-api/lib/entities/admin/report.ts @@ -1,6 +1,6 @@ -import pick from 'lodash.pick'; import * as v from 'valibot'; +import { pick } from '../../utils'; import { ruleSchema } from '../rule'; import { statusWithoutAccountSchema } from '../status'; import { datetimeSchema, filteredArray } from '../utils'; diff --git a/packages/pl-api/lib/entities/grouped-notifications-results.ts b/packages/pl-api/lib/entities/grouped-notifications-results.ts index 5d51c6c19..3ab80adb1 100644 --- a/packages/pl-api/lib/entities/grouped-notifications-results.ts +++ b/packages/pl-api/lib/entities/grouped-notifications-results.ts @@ -1,6 +1,7 @@ -import pick from 'lodash.pick'; import * as v from 'valibot'; +import { pick } from '../utils'; + import { accountSchema } from './account'; import { accountWarningSchema } from './account-warning'; import { chatMessageSchema } from './chat-message'; diff --git a/packages/pl-api/lib/entities/notification.ts b/packages/pl-api/lib/entities/notification.ts index e260045fe..27248c3de 100644 --- a/packages/pl-api/lib/entities/notification.ts +++ b/packages/pl-api/lib/entities/notification.ts @@ -1,6 +1,7 @@ -import pick from 'lodash.pick'; import * as v from 'valibot'; +import { pick } from '../utils'; + import { accountSchema } from './account'; import { accountWarningSchema } from './account-warning'; import { chatMessageSchema } from './chat-message'; diff --git a/packages/pl-api/lib/entities/status.ts b/packages/pl-api/lib/entities/status.ts index 3547fb52a..32641f06a 100644 --- a/packages/pl-api/lib/entities/status.ts +++ b/packages/pl-api/lib/entities/status.ts @@ -1,6 +1,7 @@ -import pick from 'lodash.pick'; import * as v from 'valibot'; +import { pick } from '../utils'; + import { type Account, accountSchema } from './account'; import { customEmojiSchema } from './custom-emoji'; import { emojiReactionSchema } from './emoji-reaction'; diff --git a/packages/pl-api/lib/params/grouped-notifications.ts b/packages/pl-api/lib/params/grouped-notifications.ts index a46ab2024..447fae647 100644 --- a/packages/pl-api/lib/params/grouped-notifications.ts +++ b/packages/pl-api/lib/params/grouped-notifications.ts @@ -9,7 +9,7 @@ interface GetGroupedNotificationsParams extends PaginationParams { /** Types to exclude from the results. */ exclude_types?: Array; /** Return only notifications received from the specified account. */ - acccount_id?: string; + account_id?: string; /** One of `full` (default) or `partial_avatars`. When set to `partial_avatars`, some accounts will not be rendered in full in the returned `accounts` list but will be instead returned in stripped-down form in the `partial_accounts` list. The most recent account in a notification group is always rendered in full in the `accounts` attribute. */ expand_accounts?: 'full' | 'partial_avatars'; /** Restrict which notification types can be grouped. Use this if there are notification types for which your client does not support grouping. If omitted, the server will group notifications of all types it supports (currently, `favourite`, `follow` and `reblog`). If you do not want any notification grouping, use GET `/api/v1/notifications` instead. Notifications that would be grouped if not for this parameter will instead be returned as individual single-notification groups with a unique `group_key` that can be assumed to be of the form `ungrouped-{notification_id}`. Please note that neither the streaming API nor the individual notification APIs are aware of this parameter and will always include a “proper” `group_key` that can be different from what is returned here, meaning that you may have to ignore `group_key` for such notifications that you do not want grouped and use `ungrouped-{notification_id}` instead for consistency. */ diff --git a/packages/pl-api/lib/utils/index.ts b/packages/pl-api/lib/utils/index.ts new file mode 100644 index 000000000..05936ec4d --- /dev/null +++ b/packages/pl-api/lib/utils/index.ts @@ -0,0 +1,19 @@ +const pick = , K extends keyof T>(obj: T, keys: K[]): Pick => { + const result = {} as Pick; + for (const key of keys) { + if (key in obj) { + result[key] = obj[key]; + } + } + return result; +}; + +const omit = , K extends string>(obj: T, keys: K[]): Omit => { + const result = { ...obj }; + for (const key of keys) { + delete result[key]; + } + return result; +}; + +export { pick, omit }; diff --git a/packages/pl-api/package.json b/packages/pl-api/package.json index 4ada82496..2713706f0 100644 --- a/packages/pl-api/package.json +++ b/packages/pl-api/package.json @@ -30,8 +30,6 @@ "blurhash": "^2.0.5", "http-link-header": "^1.1.3", "isows": "^1.0.7", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", "object-to-formdata": "^4.5.1", "query-string": "^9.3.1", "semver": "^7.7.4", @@ -39,8 +37,6 @@ }, "devDependencies": { "@types/http-link-header": "^1.0.7", - "@types/lodash.omit": "^4.5.9", - "@types/lodash.pick": "^4.4.9", "@types/node": "^25.3.0", "@types/semver": "^7.7.1", "oxfmt": "^0.35.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 338b2dfeb..acc9be920 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,12 +33,6 @@ importers: isows: specifier: ^1.0.7 version: 1.0.7(ws@8.19.0) - lodash.omit: - specifier: ^4.5.0 - version: 4.5.0 - lodash.pick: - specifier: ^4.4.0 - version: 4.4.0 object-to-formdata: specifier: ^4.5.1 version: 4.5.1 @@ -55,12 +49,6 @@ importers: '@types/http-link-header': specifier: ^1.0.7 version: 1.0.7 - '@types/lodash.omit': - specifier: ^4.5.9 - version: 4.5.9 - '@types/lodash.pick': - specifier: ^4.4.9 - version: 4.4.9 '@types/node': specifier: ^25.3.0 version: 25.3.0 @@ -2800,12 +2788,6 @@ packages: '@types/leaflet@1.9.21': resolution: {integrity: sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==} - '@types/lodash.omit@4.5.9': - resolution: {integrity: sha512-zuAVFLUPJMOzsw6yawshsYGgq2hWUHtsZgeXHZmSFhaQQFC6EQ021uDKHkSjOpNhSvtNSU9165/o3o/Q51GpTw==} - - '@types/lodash.pick@4.4.9': - resolution: {integrity: sha512-hDpr96x9xHClwy1KX4/RXRejqjDFTEGbEMT3t6wYSYeFDzxmMnSKB/xHIbktRlPj8Nii2g8L5dtFDRaNFBEzUQ==} - '@types/lodash@4.17.20': resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} @@ -4828,14 +4810,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.omit@4.5.0: - resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} - deprecated: This package is deprecated. Use destructuring assignment syntax instead. - - lodash.pick@4.4.0: - resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==} - deprecated: This package is deprecated. Use destructuring assignment syntax instead. - lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} @@ -9176,14 +9150,6 @@ snapshots: dependencies: '@types/geojson': 7946.0.16 - '@types/lodash.omit@4.5.9': - dependencies: - '@types/lodash': 4.17.20 - - '@types/lodash.pick@4.4.9': - dependencies: - '@types/lodash': 4.17.20 - '@types/lodash@4.17.20': {} '@types/lodash@4.17.24': {} @@ -11419,10 +11385,6 @@ snapshots: lodash.merge@4.6.2: {} - lodash.omit@4.5.0: {} - - lodash.pick@4.4.0: {} - lodash.sortby@4.7.0: {} lodash.truncate@4.4.2: {}