diff --git a/packages/pl-api/lib/entities/account-warning.ts b/packages/pl-api/lib/entities/account-warning.ts index 68d7becdd..3a00a76c8 100644 --- a/packages/pl-api/lib/entities/account-warning.ts +++ b/packages/pl-api/lib/entities/account-warning.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import { Resolve } from '../utils/types'; - import { accountSchema } from './account'; import { dateSchema } from './utils'; @@ -22,6 +20,6 @@ const accountWarningSchema = z.object({ created_at: dateSchema, }); -type AccountWarning = Resolve>; +type AccountWarning = z.infer; export { accountWarningSchema, type AccountWarning }; diff --git a/packages/pl-api/lib/entities/admin/announcement.ts b/packages/pl-api/lib/entities/admin/announcement.ts index 0bae102e1..365413d64 100644 --- a/packages/pl-api/lib/entities/admin/announcement.ts +++ b/packages/pl-api/lib/entities/admin/announcement.ts @@ -1,7 +1,6 @@ import pick from 'lodash.pick'; import { z } from 'zod'; -import { Resolve } from '../../utils/types'; import { announcementSchema } from '../announcement'; /** @see {@link https://docs.pleroma.social/backend/development/API/admin_api/#get-apiv1pleromaadminannouncements} */ @@ -12,6 +11,6 @@ const adminAnnouncementSchema = z.preprocess((announcement: any) => ({ raw_content: z.string().catch(''), })); -type AdminAnnouncement = Resolve>; +type AdminAnnouncement = z.infer; export { adminAnnouncementSchema, type AdminAnnouncement }; diff --git a/packages/pl-api/lib/entities/announcement-reaction.ts b/packages/pl-api/lib/entities/announcement-reaction.ts index 5ca550882..8949dbd3e 100644 --- a/packages/pl-api/lib/entities/announcement-reaction.ts +++ b/packages/pl-api/lib/entities/announcement-reaction.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import type { Resolve } from '../utils/types'; - /** @see {@link https://docs.joinmastodon.org/entities/announcement/} */ const announcementReactionSchema = z.object({ name: z.string().catch(''), @@ -12,6 +10,6 @@ const announcementReactionSchema = z.object({ announcement_id: z.string().catch(''), }); -type AnnouncementReaction = Resolve>; +type AnnouncementReaction = z.infer; export { announcementReactionSchema, type AnnouncementReaction }; diff --git a/packages/pl-api/lib/entities/announcement.ts b/packages/pl-api/lib/entities/announcement.ts index 8ad1c570c..535fb954e 100644 --- a/packages/pl-api/lib/entities/announcement.ts +++ b/packages/pl-api/lib/entities/announcement.ts @@ -6,8 +6,6 @@ import { mentionSchema } from './mention'; import { tagSchema } from './tag'; import { dateSchema, filteredArray } from './utils'; -import type { Resolve } from '../utils/types'; - /** @see {@link https://docs.joinmastodon.org/entities/announcement/} */ const announcementSchema = z.object({ id: z.string(), @@ -30,6 +28,6 @@ const announcementSchema = z.object({ updated_at: dateSchema, }); -type Announcement = Resolve>; +type Announcement = z.infer; export { announcementSchema, type Announcement }; diff --git a/packages/pl-api/lib/entities/application.ts b/packages/pl-api/lib/entities/application.ts index 8c2b629c3..03377910b 100644 --- a/packages/pl-api/lib/entities/application.ts +++ b/packages/pl-api/lib/entities/application.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import type { Resolve } from '../utils/types'; - /** @see {@link https://docs.joinmastodon.org/entities/Application/} */ const applicationSchema = z.object({ name: z.string().catch(''), @@ -16,6 +14,6 @@ const applicationSchema = z.object({ vapid_key: z.string().optional().catch(undefined), }); -type Application = Resolve>; +type Application = z.infer; export { applicationSchema, type Application }; diff --git a/packages/pl-api/lib/entities/backup.ts b/packages/pl-api/lib/entities/backup.ts index 685781315..b7429db37 100644 --- a/packages/pl-api/lib/entities/backup.ts +++ b/packages/pl-api/lib/entities/backup.ts @@ -2,8 +2,6 @@ import { z } from 'zod'; import { dateSchema, mimeSchema } from './utils'; -import type { Resolve } from '../utils/types'; - /** @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#post-apiv1pleromabackups} */ const backupSchema = z.object({ id: z.coerce.string(), @@ -14,6 +12,6 @@ const backupSchema = z.object({ url: z.string().catch(''), }); -type Backup = Resolve>; +type Backup = z.infer; export { backupSchema, type Backup }; diff --git a/packages/pl-api/lib/entities/bookmark-folder.ts b/packages/pl-api/lib/entities/bookmark-folder.ts index c0f6550a4..2f4da29cd 100644 --- a/packages/pl-api/lib/entities/bookmark-folder.ts +++ b/packages/pl-api/lib/entities/bookmark-folder.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import type { Resolve } from '../utils/types'; - const bookmarkFolderSchema = z.object({ id: z.coerce.string(), name: z.string().catch(''), @@ -9,6 +7,6 @@ const bookmarkFolderSchema = z.object({ emoji_url: z.string().nullable().catch(null), }); -type BookmarkFolder = Resolve>; +type BookmarkFolder = z.infer; export { bookmarkFolderSchema, type BookmarkFolder }; diff --git a/packages/pl-api/lib/entities/context.ts b/packages/pl-api/lib/entities/context.ts index a4fb0a2ef..8e7cd2e42 100644 --- a/packages/pl-api/lib/entities/context.ts +++ b/packages/pl-api/lib/entities/context.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import { Resolve } from '../utils/types'; - import { statusSchema } from './status'; /** @see {@link https://docs.joinmastodon.org/entities/Context/} */ @@ -10,6 +8,6 @@ const contextSchema = z.object({ descendants: z.array(statusSchema), }); -type Context = Resolve>; +type Context = z.infer; export { contextSchema, type Context }; diff --git a/packages/pl-api/lib/entities/filter-result.ts b/packages/pl-api/lib/entities/filter-result.ts index adc346fba..b995e6c46 100644 --- a/packages/pl-api/lib/entities/filter-result.ts +++ b/packages/pl-api/lib/entities/filter-result.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import { Resolve } from '../utils/types'; - import { filterSchema } from './filter'; /** @see {@link https://docs.joinmastodon.org/entities/FilterResult/} */ @@ -11,6 +9,6 @@ const filterResultSchema = z.object({ status_matches: z.array(z.string()).nullable().catch(null), }); -type FilterResult = Resolve>; +type FilterResult = z.infer; export { filterResultSchema, type FilterResult }; diff --git a/packages/pl-api/lib/entities/filter.ts b/packages/pl-api/lib/entities/filter.ts index dab546c3f..1553d10e7 100644 --- a/packages/pl-api/lib/entities/filter.ts +++ b/packages/pl-api/lib/entities/filter.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import { Resolve } from '../utils/types'; - import { filteredArray } from './utils'; /** @see {@link https://docs.joinmastodon.org/entities/FilterKeyword/} */ @@ -42,6 +40,6 @@ const filterSchema = z.preprocess((filter: any) => { statuses: filteredArray(filterStatusSchema), })); -type Filter = Resolve>; +type Filter = z.infer; export { filterKeywordSchema, filterStatusSchema, filterSchema, type Filter }; diff --git a/packages/pl-api/lib/entities/interaction-policy.ts b/packages/pl-api/lib/entities/interaction-policy.ts index c76317cba..d53cfbaf6 100644 --- a/packages/pl-api/lib/entities/interaction-policy.ts +++ b/packages/pl-api/lib/entities/interaction-policy.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import { Resolve } from '../utils/types'; - import { coerceObject } from './utils'; const interactionPolicyEntrySchema = z.enum(['public', 'followers', 'following', 'mutuals', 'mentioned', 'author', 'me']); @@ -18,7 +16,7 @@ const interactionPolicySchema = coerceObject({ can_reply: interactionPolicyRuleSchema, }); -type InteractionPolicy = Resolve>; +type InteractionPolicy = z.infer; const interactionPoliciesSchema = coerceObject({ public: interactionPolicySchema, @@ -27,7 +25,7 @@ const interactionPoliciesSchema = coerceObject({ direct: interactionPolicySchema, }); -type InteractionPolicies = Resolve>; +type InteractionPolicies = z.infer; export { interactionPolicySchema, interactionPoliciesSchema, type InteractionPolicy, type InteractionPolicies }; diff --git a/packages/pl-api/lib/entities/interaction-request.ts b/packages/pl-api/lib/entities/interaction-request.ts index 883a5aed5..0b679ac2b 100644 --- a/packages/pl-api/lib/entities/interaction-request.ts +++ b/packages/pl-api/lib/entities/interaction-request.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import { Resolve } from '../utils/types'; - import { accountSchema } from './account'; import { statusSchema } from './status'; @@ -18,6 +16,6 @@ const interactionRequestSchema = z.object({ uri: z.string().nullable().catch(null), }); -type InteractionRequest = Resolve>; +type InteractionRequest = z.infer; export { interactionRequestSchema, type InteractionRequest }; diff --git a/packages/pl-api/lib/entities/relationship-severance-event.ts b/packages/pl-api/lib/entities/relationship-severance-event.ts index 7dd218b77..22b33c084 100644 --- a/packages/pl-api/lib/entities/relationship-severance-event.ts +++ b/packages/pl-api/lib/entities/relationship-severance-event.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import { Resolve } from '../utils/types'; - import { dateSchema } from './utils'; /** @see {@link https://docs.joinmastodon.org/entities/RelationshipSeveranceEvent/} */ @@ -13,6 +11,6 @@ const relationshipSeveranceEventSchema = z.object({ created_at: dateSchema, }); -type RelationshipSeveranceEvent = Resolve>; +type RelationshipSeveranceEvent = z.infer; export { relationshipSeveranceEventSchema, type RelationshipSeveranceEvent }; diff --git a/packages/pl-api/lib/entities/scheduled-status.ts b/packages/pl-api/lib/entities/scheduled-status.ts index c93cdc2b7..8f1094191 100644 --- a/packages/pl-api/lib/entities/scheduled-status.ts +++ b/packages/pl-api/lib/entities/scheduled-status.ts @@ -3,8 +3,6 @@ import { z } from 'zod'; import { mediaAttachmentSchema } from './media-attachment'; import { filteredArray } from './utils'; -import type { Resolve } from '../utils/types'; - /** @see {@link https://docs.joinmastodon.org/entities/ScheduledStatus/} */ const scheduledStatusSchema = z.object({ id: z.string(), @@ -33,6 +31,6 @@ const scheduledStatusSchema = z.object({ media_attachments: filteredArray(mediaAttachmentSchema), }); -type ScheduledStatus = Resolve>; +type ScheduledStatus = z.infer; export { scheduledStatusSchema, type ScheduledStatus }; diff --git a/packages/pl-api/lib/entities/status-edit.ts b/packages/pl-api/lib/entities/status-edit.ts index 595c5b696..5e56f42c1 100644 --- a/packages/pl-api/lib/entities/status-edit.ts +++ b/packages/pl-api/lib/entities/status-edit.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import { Resolve } from '../utils/types'; - import { accountSchema } from './account'; import { customEmojiSchema } from './custom-emoji'; import { mediaAttachmentSchema } from './media-attachment'; @@ -23,6 +21,6 @@ const statusEditSchema = z.object({ emojis: filteredArray(customEmojiSchema), }); -type StatusEdit = Resolve>; +type StatusEdit = z.infer; export { statusEditSchema, type StatusEdit }; diff --git a/packages/pl-api/lib/entities/status-source.ts b/packages/pl-api/lib/entities/status-source.ts index 40745db0a..bab98572a 100644 --- a/packages/pl-api/lib/entities/status-source.ts +++ b/packages/pl-api/lib/entities/status-source.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import { Resolve } from '../utils/types'; - import { locationSchema } from './location'; /** @see {@link https://docs.joinmastodon.org/entities/StatusSource/} */ @@ -17,6 +15,6 @@ const statusSourceSchema = z.object({ spoiler_text_map: z.record(z.string()).nullable().catch(null), }); -type StatusSource = Resolve>; +type StatusSource = z.infer; export { statusSourceSchema, type StatusSource }; diff --git a/packages/pl-api/lib/entities/status.ts b/packages/pl-api/lib/entities/status.ts index 68a9e6ebe..09eac3aa5 100644 --- a/packages/pl-api/lib/entities/status.ts +++ b/packages/pl-api/lib/entities/status.ts @@ -15,8 +15,6 @@ import { tagSchema } from './tag'; import { translationSchema } from './translation'; import { dateSchema, filteredArray } from './utils'; -import type { Resolve } from '../utils/types'; - const statusEventSchema = z.object({ name: z.string().catch(''), start_time: z.string().datetime().nullable().catch(null), @@ -133,19 +131,22 @@ const preprocess = (status: any) => { return status; }; -const statusSchema = z.preprocess(preprocess, baseStatusSchema.extend({ - reblog: z.lazy(() => baseStatusSchema).nullable().catch(null), +const statusSchema: z.ZodType = baseStatusSchema.extend({ + reblog: z.lazy(() => statusSchema).nullable().catch(null), - quote: z.lazy(() => baseStatusSchema).nullable().catch(null), -})); + quote: z.lazy(() => statusSchema).nullable().catch(null), +}) as any; const statusWithoutAccountSchema = z.preprocess(preprocess, baseStatusSchema.omit({ account: true }).extend({ account: accountSchema.nullable().catch(null), - reblog: z.lazy(() => baseStatusSchema).nullable().catch(null), + reblog: z.lazy(() => statusSchema).nullable().catch(null), - quote: z.lazy(() => baseStatusSchema).nullable().catch(null), + quote: z.lazy(() => statusSchema).nullable().catch(null), })); -type Status = Resolve>; +type Status = z.infer & { + reblog: Status | null; + quote: Status | null; +} export { statusSchema, statusWithoutAccountSchema, type Status }; diff --git a/packages/pl-api/lib/entities/translation.ts b/packages/pl-api/lib/entities/translation.ts index 4bb64e793..0dcc502a0 100644 --- a/packages/pl-api/lib/entities/translation.ts +++ b/packages/pl-api/lib/entities/translation.ts @@ -1,7 +1,5 @@ import { z } from 'zod'; -import { Resolve } from '../utils/types'; - import { filteredArray } from './utils'; const translationPollSchema = z.object({ @@ -39,6 +37,6 @@ const translationSchema = z.preprocess((translation: any) => { provider: z.string(), })); -type Translation = Resolve>; +type Translation = z.infer; export { translationSchema, type Translation }; diff --git a/packages/pl-api/lib/utils/types.ts b/packages/pl-api/lib/utils/types.ts deleted file mode 100644 index d77033a72..000000000 --- a/packages/pl-api/lib/utils/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Resolve a type into a flat POJO interface if it's been wrapped by generics. - * https://gleasonator.com/@alex/posts/AWfK4hyppMDCqrT2y8 - */ -type Resolve = Pick; - -export type { Resolve }; diff --git a/packages/pl-api/lib/utils/url.ts b/packages/pl-api/lib/utils/url.ts index a4fdf6e35..d9cc6c4d9 100644 --- a/packages/pl-api/lib/utils/url.ts +++ b/packages/pl-api/lib/utils/url.ts @@ -19,7 +19,5 @@ const buildFullPath = (requestedURL: string, baseURL?: string, params?: Record { @@ -30,8 +28,6 @@ const env = { NODE_ENV: NODE_ENV || 'development', BACKEND_URL: sanitizeURL(BACKEND_URL), FE_SUBDIRECTORY: sanitizeBasename(FE_SUBDIRECTORY), - FE_INSTANCE_SOURCE_DIR: FE_INSTANCE_SOURCE_DIR || 'instance', - SENTRY_DSN, }; export type PlFeEnv = typeof env; diff --git a/packages/pl-fe/src/build-config.ts b/packages/pl-fe/src/build-config.ts index 858037cb8..b3f3d860a 100644 --- a/packages/pl-fe/src/build-config.ts +++ b/packages/pl-fe/src/build-config.ts @@ -4,6 +4,4 @@ export const { NODE_ENV, BACKEND_URL, FE_SUBDIRECTORY, - FE_INSTANCE_SOURCE_DIR, - SENTRY_DSN, } = import.meta.compileTime('./build-config-compiletime.ts'); diff --git a/packages/pl-fe/src/features/compose/components/privacy-dropdown.tsx b/packages/pl-fe/src/features/compose/components/privacy-dropdown.tsx index 79ad41151..861fe7437 100644 --- a/packages/pl-fe/src/features/compose/components/privacy-dropdown.tsx +++ b/packages/pl-fe/src/features/compose/components/privacy-dropdown.tsx @@ -214,7 +214,6 @@ const PrivacyDropdown: React.FC = ({ const valueOption = items.find(item => item.value === value); - return ( = Pick; - -export type { Resolve }; diff --git a/packages/pl-fe/src/utils/url.ts b/packages/pl-fe/src/utils/url.ts index a4fdf6e35..d9cc6c4d9 100644 --- a/packages/pl-fe/src/utils/url.ts +++ b/packages/pl-fe/src/utils/url.ts @@ -19,7 +19,5 @@ const buildFullPath = (requestedURL: string, baseURL?: string, params?: Record