Installation
Section titled “Installation”pnpm dlx shadcn@latest add pxl-ui/registry/schemas/rss
Install the following dependencies:
pnpm add zod
Copy and paste the following code into your project.
1import z from "zod";2
3import { AtomSchemas } from "./atom";4
5// #region MODULES6
7const ACastItemSchema = z.object({8 episodeId: z.string().optional(),9 showId: z.string().optional(),10 episodeUrl: z.string().optional(),11 settings: z.string().optional(),12});13
14const ACastFeedSchema = z.object({15 showId: z.string().optional(),16 showUrl: z.string().optional(),17 signature: z18 .object({19 key: z.string().optional(),20 algorithm: z.string().optional(),21 value: z.string().optional(),22 })23 .optional(),24 settings: z.string().optional(),25 network: z26 .object({27 id: z.string().optional(),28 slug: z.string().optional(),29 value: z.string().optional(),30 })31 .optional(),32 importedFeed: z.string().optional(),33});34
35const AdminSchema = z.object({36 errorReportsTo: z.string().optional(),37 generatorAgent: z.string().optional(),38});39
40const BlogChannelSchema = z.object({41 blogRoll: z.string().optional(),42 blink: z.string().optional(),43 mySubscriptions: z.string().optional(),44});45
46const CreativeCommonsSchema = z.object({47 license: z.string().optional(),48 morePermissions: z.string().optional(),49 attributionName: z.string().optional(),50 attributionURL: z.string().optional(),51 useGuidelines: z.string().optional(),52 permits: z.string().optional(),53 requires: z.string().optional(),54 prohibits: z.string().optional(),55 jurisdiction: z.string().optional(),56 legalcode: z.string().optional(),57 deprecatedOn: z.string().optional(),58});59
60const DublinCoreSchema = z.object({61 titles: z.array(z.string()).optional(),62 creators: z.array(z.string()).optional(),63 subjects: z.array(z.string()).optional(),64 descriptions: z.array(z.string()).optional(),65 publishers: z.array(z.string()).optional(),66 contributors: z.array(z.string()).optional(),67 dates: z.array(z.string()).optional(),68 types: z.array(z.string()).optional(),69 formats: z.array(z.string()).optional(),70 identifiers: z.array(z.string()).optional(),71 sources: z.array(z.string()).optional(),72 languages: z.array(z.string()).optional(),73 relations: z.array(z.string()).optional(),74 title: z.string().optional().meta({75 deprecated: true,76 description:77 "Use `titles` (array) instead. Dublin Core fields are repeatable.",78 }),79 creator: z.string().optional().meta({80 deprecated: true,81 description:82 "Use `creators` (array) instead. Dublin Core fields are repeatable.",83 }),84 subject: z.string().optional().meta({85 deprecated: true,86 description:87 "Use `subjects` (array) instead. Dublin Core fields are repeatable.",88 }),89 description: z.string().optional().meta({90 deprecated: true,91 description:92 "Use `descriptions` (array) instead. Dublin Core fields are repeatable.",93 }),94 publisher: z.string().optional().meta({95 deprecated: true,96 description:97 "Use `publishers` (array) instead. Dublin Core fields are repeatable.",98 }),99 contributor: z.string().optional().meta({100 deprecated: true,101 description:102 "Use `contributors` (array) instead. Dublin Core fields are repeatable.",103 }),104 date: z.string().optional().meta({105 deprecated: true,106 description:107 "Use `dates` (array) instead. Dublin Core fields are repeatable.",108 }),109 type: z.string().optional().meta({110 deprecated: true,111 description:112 "Use `types` (array) instead. Dublin Core fields are repeatable.",113 }),114 format: z.string().optional().meta({115 deprecated: true,116 description:117 "Use `formats` (array) instead. Dublin Core fields are repeatable.",118 }),119 identifier: z.string().optional().meta({120 deprecated: true,121 description:122 "Use `identifiers` (array) instead. Dublin Core fields are repeatable.",123 }),124 source: z.string().optional().meta({125 deprecated: true,126 description:127 "Use `sources` (array) instead. Dublin Core fields are repeatable.",128 }),129 language: z.string().optional().meta({130 deprecated: true,131 description:132 "Use `languages` (array) instead. Dublin Core fields are repeatable.",133 }),134 relation: z.string().optional().meta({135 deprecated: true,136 description:137 "Use `relations` (array) instead. Dublin Core fields are repeatable.",138 }),139 coverage: z.string().optional().meta({140 deprecated: true,141 description:142 "This field type will be changed to array in the next major version of the package. Dublin Core fields are repeatable.",143 }),144 rights: z.string().optional().meta({145 deprecated: true,146 description:147 "This field type will be changed to array in the next major version of the package. Dublin Core fields are repeatable.",148 }),149});150
151const DublinCoreTermsSchema = z.object({152 abstracts: z.array(z.string()).optional(),153 accrualMethods: z.array(z.string()).optional(),154 accrualPeriodicities: z.array(z.string()).optional(),155 accrualPolicies: z.array(z.string()).optional(),156 alternatives: z.array(z.string()).optional(),157 audiences: z.array(z.string()).optional(),158 bibliographicCitations: z.array(z.string()).optional(),159 contributors: z.array(z.string()).optional(),160 coverages: z.array(z.string()).optional(),161 creators: z.array(z.string()).optional(),162 dates: z.array(z.string()).optional(),163 descriptions: z.array(z.string()).optional(),164 educationLevels: z.array(z.string()).optional(),165 extents: z.array(z.string()).optional(),166 formats: z.array(z.string()).optional(),167 hasFormats: z.array(z.string()).optional(),168 hasParts: z.array(z.string()).optional(),169 hasVersions: z.array(z.string()).optional(),170 identifiers: z.array(z.string()).optional(),171 instructionalMethods: z.array(z.string()).optional(),172 languages: z.array(z.string()).optional(),173 licenses: z.array(z.string()).optional(),174 mediators: z.array(z.string()).optional(),175 mediums: z.array(z.string()).optional(),176 provenances: z.array(z.string()).optional(),177 publishers: z.array(z.string()).optional(),178 relations: z.array(z.string()).optional(),179 rightsHolders: z.array(z.string()).optional(),180 sources: z.array(z.string()).optional(),181 spatials: z.array(z.string()).optional(),182 subjects: z.array(z.string()).optional(),183 temporals: z.array(z.string()).optional(),184 titles: z.array(z.string()).optional(),185 types: z.array(z.string()).optional(),186 abstract: z.string().optional().meta({187 deprecated: true,188 description:189 "Use `abstracts` (array) instead. Dublin Core Terms fields are repeatable.",190 }),191 accessRights: z.string().optional().meta({192 deprecated: true,193 description:194 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",195 }),196 accrualMethod: z.string().optional().meta({197 deprecated: true,198 description:199 "Use `accrualMethod` (array) instead. Dublin Core Terms fields are repeatable.",200 }),201 accrualPeriodicity: z.string().optional().meta({202 deprecated: true,203 description:204 "Use `accrualPeriodicities` (array) instead. Dublin Core Terms fields are repeatable.",205 }),206 accrualPolicy: z.string().optional().meta({207 deprecated: true,208 description:209 "Use `accrualPolicies` (array) instead. Dublin Core Terms fields are repeatable.",210 }),211 alternative: z.string().optional().meta({212 deprecated: true,213 description:214 "Use `alternatives` (array) instead. Dublin Core Terms fields are repeatable.",215 }),216 audience: z.string().optional().meta({217 deprecated: true,218 description:219 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",220 }),221 available: z.string().optional().meta({222 deprecated: true,223 description:224 "Use `abstracts` (array) instead. Dublin Core Terms fields are repeatable.",225 }),226 bibliographicCitation: z.string().optional().meta({227 deprecated: true,228 description:229 "Use `bibliographicCitations` (array) instead. Dublin Core Terms fields are repeatable.",230 }),231 conformsTo: z.string().optional().meta({232 deprecated: true,233 description:234 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",235 }),236 contributor: z.string().optional().meta({237 deprecated: true,238 description:239 "Use `contributors` (array) instead. Dublin Core Terms fields are repeatable.",240 }),241 coverage: z.string().optional().meta({242 deprecated: true,243 description:244 "Use `coverages` (array) instead. Dublin Core Terms fields are repeatable.",245 }),246 created: z.string().optional().meta({247 deprecated: true,248 description:249 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",250 }),251 creator: z.string().optional().meta({252 deprecated: true,253 description:254 "Use `creators` (array) instead. Dublin Core Terms fields are repeatable.",255 }),256 date: z.string().optional().meta({257 deprecated: true,258 description:259 "Use `dates` (array) instead. Dublin Core Terms fields are repeatable.",260 }),261 dateAccepted: z.string().optional().meta({262 deprecated: true,263 description:264 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",265 }),266 dateCopyrighted: z.string().optional().meta({267 deprecated: true,268 description:269 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",270 }),271 dateSubmitted: z.string().optional().meta({272 deprecated: true,273 description:274 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",275 }),276 description: z.string().optional().meta({277 deprecated: true,278 description:279 "Use `descriptions` (array) instead. Dublin Core Terms fields are repeatable.",280 }),281 educationLevel: z.string().optional().meta({282 deprecated: true,283 description:284 "Use `educationLevels` (array) instead. Dublin Core Terms fields are repeatable.",285 }),286 extent: z.string().optional().meta({287 deprecated: true,288 description:289 "Use `extents` (array) instead. Dublin Core Terms fields are repeatable.",290 }),291 format: z.string().optional().meta({292 deprecated: true,293 description:294 "Use `formats` (array) instead. Dublin Core Terms fields are repeatable.",295 }),296 hasFormat: z.string().optional().meta({297 deprecated: true,298 description:299 "Use `hasFormats` (array) instead. Dublin Core Terms fields are repeatable.",300 }),301 hasPart: z.string().optional().meta({302 deprecated: true,303 description:304 "Use `hasParts` (array) instead. Dublin Core Terms fields are repeatable.",305 }),306 hasVersion: z.string().optional().meta({307 deprecated: true,308 description:309 "Use `hasVersions` (array) instead. Dublin Core Terms fields are repeatable.",310 }),311 identifier: z.string().optional().meta({312 deprecated: true,313 description:314 "Use `identifiers` (array) instead. Dublin Core Terms fields are repeatable.",315 }),316 instructionalMethod: z.string().optional().meta({317 deprecated: true,318 description:319 "Use `instructionalMethods` (array) instead. Dublin Core Terms fields are repeatable.",320 }),321 isFormatOf: z.string().optional().meta({322 deprecated: true,323 description:324 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",325 }),326 isPartOf: z.string().optional().meta({327 deprecated: true,328 description:329 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",330 }),331 isReferencedBy: z.string().optional().meta({332 deprecated: true,333 description:334 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",335 }),336 isReplacedBy: z.string().optional().meta({337 deprecated: true,338 description:339 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",340 }),341 isRequiredBy: z.string().optional().meta({342 deprecated: true,343 description:344 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",345 }),346 issued: z.string().optional().meta({347 deprecated: true,348 description:349 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",350 }),351 isVersionOf: z.string().optional().meta({352 deprecated: true,353 description:354 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",355 }),356 language: z.string().optional().meta({357 deprecated: true,358 description:359 "Use `languages` (array) instead. Dublin Core Terms fields are repeatable.",360 }),361 license: z.string().optional().meta({362 deprecated: true,363 description:364 "Use `licenses` (array) instead. Dublin Core Terms fields are repeatable.",365 }),366 mediator: z.string().optional().meta({367 deprecated: true,368 description:369 "Use `mediators` (array) instead. Dublin Core Terms fields are repeatable.",370 }),371 medium: z.string().optional().meta({372 deprecated: true,373 description:374 "Use `mediums` (array) instead. Dublin Core Terms fields are repeatable.",375 }),376 modified: z.string().optional().meta({377 deprecated: true,378 description:379 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",380 }),381 provenance: z.string().optional().meta({382 deprecated: true,383 description:384 "Use `provenances` (array) instead. Dublin Core Terms fields are repeatable.",385 }),386 publisher: z.string().optional().meta({387 deprecated: true,388 description:389 "Use `publishers` (array) instead. Dublin Core Terms fields are repeatable.",390 }),391 references: z.string().optional().meta({392 deprecated: true,393 description:394 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",395 }),396 relation: z.string().optional().meta({397 deprecated: true,398 description:399 "Use `relations` (array) instead. Dublin Core Terms fields are repeatable.",400 }),401 replaces: z.string().optional().meta({402 deprecated: true,403 description:404 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",405 }),406 requires: z.string().optional().meta({407 deprecated: true,408 description:409 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",410 }),411 rights: z.string().optional().meta({412 deprecated: true,413 description:414 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",415 }),416 rightsHolder: z.string().optional().meta({417 deprecated: true,418 description:419 "Use `rightsHolders` (array) instead. Dublin Core Terms fields are repeatable.",420 }),421 source: z.string().optional().meta({422 deprecated: true,423 description:424 "Use `sources` (array) instead. Dublin Core Terms fields are repeatable.",425 }),426 spatial: z.string().optional().meta({427 deprecated: true,428 description:429 "Use `spatials` (array) instead. Dublin Core Terms fields are repeatable.",430 }),431 subject: z.string().optional().meta({432 deprecated: true,433 description:434 "Use `subjects` (array) instead. Dublin Core Terms fields are repeatable.",435 }),436 tableOfContents: z.string().optional().meta({437 deprecated: true,438 description:439 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",440 }),441 temporal: z.string().optional().meta({442 deprecated: true,443 description:444 "Use `temporals` (array) instead. Dublin Core Terms fields are repeatable.",445 }),446 title: z.string().optional().meta({447 deprecated: true,448 description:449 "Use `titles` (array) instead. Dublin Core Terms fields are repeatable.",450 }),451 type: z.string().optional().meta({452 deprecated: true,453 description:454 "Use `types` (array) instead. Dublin Core Terms fields are repeatable.",455 }),456 valid: z.string().optional().meta({457 deprecated: true,458 description:459 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",460 }),461});462
463const FeedpressSchema = z.object({464 link: z.string().optional(),465 newsletterId: z.string().optional(),466 locale: z.string().optional(),467 podcastId: z.string().optional(),468 cssFile: z.string().optional(),469});470
471const GeoSchema = z.object({472 lat: z.number().optional(),473 long: z.number().optional(),474 alt: z.number().optional(),475});476
477const GeoRssSchema = z.object({478 point: z479 .object({480 lat: z.number(),481 lng: z.number(),482 })483 .optional(),484 line: z485 .object({486 points: z.array(487 z.object({488 lat: z.number(),489 lng: z.number(),490 }),491 ),492 })493 .optional(),494 polygon: z495 .object({496 points: z497 .array(498 z.object({499 lat: z.number(),500 lng: z.number(),501 }),502 )503 .optional(),504 })505 .optional(),506 box: z.object({507 lowerCorner: z.object({508 lat: z.number(),509 lng: z.number(),510 }),511 upperCorner: z.object({512 lat: z.number(),513 lng: z.number(),514 }),515 }),516 featureTypeTag: z.string().optional(),517 relationshipTag: z.string().optional(),518 featureName: z.string().optional(),519 elev: z.number().optional(),520 floor: z.number().optional(),521 radius: z.number().optional(),522});523
524const GooglePlayItemSchema = z.object({525 author: z.string().optional(),526 description: z.string().optional(),527 explicit: z.union([z.boolean(), z.literal("clean")]).optional(),528 block: z.boolean().optional(),529 image: z530 .object({531 href: z.url(),532 })533 .optional(),534});535
536const GooglePlayFeedSchema = z.object({537 author: z.string().optional(),538 description: z.string().optional(),539 explicit: z.union([z.boolean(), z.literal("clean")]).optional(),540 block: z.boolean().optional(),541 image: z542 .object({543 href: z.url(),544 })545 .optional(),546 newFeedUrl: z.url().optional(),547 email: z.email().optional(),548 categories: z.array(z.string()).optional(),549});550
551const ItunesItemSchema = z.object({552 duration: z.number().optional(),553 image: z.string().optional(),554 explicit: z.boolean().optional(),555 author: z.string().optional(),556 title: z.string().optional(),557 episode: z.number().optional(),558 season: z.number().optional(),559 episodeType: z.string().optional(),560 block: z.boolean().optional(),561 summary: z.string().optional().meta({562 deprecated: true,563 description: "Use standard RSS description instead.",564 }),565 subtitle: z.string().optional().meta({566 deprecated: true,567 description: "No longer used by Apple Podcasts.",568 }),569 keywords: z.array(z.string()).optional().meta({570 deprecated: true,571 description: "No longer used by Apple Podcasts.",572 }),573});574
575const ItunesFeedSchema = z.object({576 image: z.string().optional(),577 categories: z578 .array(579 z.object({580 text: z.string(),581 categories: z582 .array(583 z.object({584 text: z.string(),585 }),586 )587 .optional(),588 }),589 )590 .optional(),591 explicit: z.boolean().optional(),592 author: z.string().optional(),593 title: z.string().optional(),594 type: z.string().optional(),595 newFeedUrl: z.string().optional(),596 block: z.boolean().optional(),597 complete: z.boolean().optional(),598 applePodcastsVerify: z.string().optional(),599 summary: z.string().optional().meta({600 deprecated: true,601 description: "Use standard RSS description instead.",602 }),603 subtitle: z.string().optional().meta({604 deprecated: true,605 description: "No longer used by Apple Podcasts.",606 }),607 keywords: z.array(z.string()).optional().meta({608 deprecated: true,609 description: "No longer used for search in Apple Podcasts.",610 }),611 owner: z612 .object({613 name: z.string().optional(),614 email: z.email().optional(),615 })616 .optional()617 .meta({618 deprecated: true,619 description: "No longer supported by Apple Podcasts.",620 }),621});622
623const PingbackItemSchema = z.object({624 server: z.string().optional(),625 target: z.string().optional(),626});627
628const PingbackFeedSchema = z.object({629 to: z.string().optional(),630});631
632const PodcastItemSchema = z.object({633 transcripts: z634 .array(635 z.object({636 url: z.url(),637 type: z.string(),638 language: z.string().optional(),639 rel: z.string().optional(),640 }),641 )642 .optional(),643 chapters: z644 .object({645 url: z.url(),646 type: z.string(),647 })648 .optional(),649 soundbites: z650 .array(651 z.object({652 startTime: z.number(),653 duration: z.number(),654 display: z.string().optional(),655 }),656 )657 .optional(),658 persons: z659 .array(660 z.object({661 display: z.string(),662 role: z.string().optional(),663 group: z.string().optional(),664 img: z.string().optional(),665 href: z.url().optional(),666 }),667 )668 .optional(),669 locations: z670 .array(671 z.object({672 display: z.string(),673 rel: z.string().optional(),674 geo: z.string().optional(),675 osm: z.string().optional(),676 country: z.string().optional(),677 }),678 )679 .optional(),680 season: z681 .object({682 number: z.number(),683 name: z.string().optional(),684 })685 .optional(),686 episode: z687 .object({688 number: z.number(),689 display: z.string().optional(),690 })691 .optional(),692 license: z693 .object({694 display: z.string(),695 url: z.url().optional(),696 })697 .optional(),698 alternateEnclosures: z699 .array(700 z.object({701 type: z.string(),702 length: z.number().optional(),703 bitrate: z.number().optional(),704 height: z.number().optional(),705 lang: z.string().optional(),706 title: z.string().optional(),707 rel: z.string().optional(),708 codecs: z.string().optional(),709 default: z.boolean().optional(),710 sources: z711 .array(712 z.object({713 uri: z.url(),714 contentType: z.string().optional(),715 }),716 )717 .optional(),718 integrity: z719 .object({720 type: z.string(),721 value: z.string(),722 })723 .optional(),724 }),725 )726 .optional(),727 values: z728 .array(729 z.object({730 type: z.string(),731 method: z.string(),732 suggested: z.number().optional(),733 valueRecipients: z734 .array(735 z.object({736 name: z.string().optional(),737 customKey: z.string().optional(),738 customValue: z.string().optional(),739 type: z.string(),740 address: z.string(),741 split: z.number(),742 fee: z.boolean().optional(),743 }),744 )745 .optional(),746 valueTimeSplits: z747 .array(748 z.object({749 startTime: z.number(),750 duration: z.number(),751 remoteStartTime: z.number().optional(),752 remotePercentage: z.number().optional(),753 remoteItem: z754 .object({755 feedGuid: z.string(),756 feedUrl: z.string().optional(),757 itemGuid: z.string().optional(),758 medium: z.string().optional(),759 title: z.string().optional(),760 })761 .optional(),762 valueRecipients: z763 .array(764 z.object({765 name: z.string().optional(),766 customKey: z.string().optional(),767 customValue: z.string().optional(),768 type: z.string(),769 address: z.string(),770 split: z.number(),771 fee: z.boolean().optional(),772 }),773 )774 .optional(),775 }),776 )777 .optional(),778 }),779 )780 .optional(),781 images: z782 .array(783 z.object({784 href: z.url(),785 alt: z.string().optional(),786 aspectRatio: z.string().optional(),787 width: z.number().optional(),788 height: z.number().optional(),789 type: z.string().optional(),790 purpose: z.string().optional(),791 }),792 )793 .optional(),794 socialInteracts: z795 .array(796 z.object({797 uri: z.url().optional(),798 protocol: z.string(),799 accountId: z.string().optional(),800 accountUrl: z.string().optional(),801 priority: z.number().optional(),802 }),803 )804 .optional(),805 txts: z806 .array(807 z.object({808 display: z.string(),809 purpose: z.string().optional(),810 }),811 )812 .optional(),813 chat: z814 .object({815 server: z.string(),816 protocol: z.string(),817 accountId: z.string().optional(),818 space: z.string().optional(),819 })820 .optional(),821 location: z822 .object({823 display: z.string(),824 rel: z.string().optional(),825 geo: z.string().optional(),826 osm: z.string().optional(),827 country: z.string().optional(),828 })829 .optional()830 .meta({831 deprecated: true,832 description:833 "Use `locations` (array) instead. Multiple podcast:location elements are allowed per specification.",834 }),835 value: z836 .object({837 type: z.string(),838 method: z.string(),839 suggested: z.number().optional(),840 valueRecipients: z841 .array(842 z.object({843 name: z.string().optional(),844 customKey: z.string().optional(),845 customValue: z.string().optional(),846 type: z.string(),847 address: z.string(),848 split: z.number(),849 fee: z.boolean().optional(),850 }),851 )852 .optional(),853 valueTimeSplits: z854 .array(855 z.object({856 startTime: z.number(),857 duration: z.number(),858 remoteStartTime: z.number().optional(),859 remotePercentage: z.number().optional(),860 remoteItem: z861 .object({862 feedGuid: z.string(),863 feedUrl: z.string().optional(),864 itemGuid: z.string().optional(),865 medium: z.string().optional(),866 title: z.string().optional(),867 })868 .optional(),869 valueRecipients: z870 .array(871 z.object({872 name: z.string().optional(),873 customKey: z.string().optional(),874 customValue: z.string().optional(),875 type: z.string(),876 address: z.string(),877 split: z.number(),878 fee: z.boolean().optional(),879 }),880 )881 .optional(),882 }),883 )884 .optional(),885 })886 .optional()887 .meta({888 deprecated: true,889 description:890 "Use `values` (array) instead. Multiple podcast:value elements are allowed per specification.",891 }),892 chats: z893 .array(894 z.object({895 server: z.string(),896 protocol: z.string(),897 accountId: z.string().optional(),898 space: z.string().optional(),899 }),900 )901 .optional()902 .meta({903 deprecated: true,904 description:905 "Use `chat` (singular) instead. Only one podcast:chat element is allowed per specification.",906 }),907});908
909const PodcastFeedSchema = z.object({910 locked: z911 .object({912 value: z.boolean(),913 owner: z.string().optional(),914 })915 .optional(),916 fundings: z917 .array(918 z.object({919 url: z.url(),920 display: z.string().optional(),921 }),922 )923 .optional(),924 persons: z925 .array(926 z.object({927 display: z.string(),928 role: z.string().optional(),929 group: z.string().optional(),930 img: z.string().optional(),931 href: z.url().optional(),932 }),933 )934 .optional(),935 locations: z936 .array(937 z.object({938 display: z.string(),939 rel: z.string().optional(),940 geo: z.string().optional(),941 osm: z.string().optional(),942 country: z.string().optional(),943 }),944 )945 .optional(),946 trailers: z947 .array(948 z.object({949 display: z.string(),950 url: z.url(),951 pubDate: z.string(),952 length: z.number().optional(),953 type: z.string().optional(),954 season: z.number().optional(),955 }),956 )957 .optional(),958 license: z959 .object({960 display: z.string(),961 url: z.url().optional(),962 })963 .optional(),964 guid: z.string().optional(),965 values: z966 .array(967 z.object({968 type: z.string(),969 method: z.string(),970 suggested: z.number().optional(),971 valueRecipients: z972 .array(973 z.object({974 name: z.string().optional(),975 customKey: z.string().optional(),976 customValue: z.string().optional(),977 type: z.string(),978 address: z.string(),979 split: z.number(),980 fee: z.boolean().optional(),981 }),982 )983 .optional(),984 valueTimeSplits: z985 .array(986 z.object({987 startTime: z.number(),988 duration: z.number(),989 remoteStartTime: z.number().optional(),990 remotePercentage: z.number().optional(),991 remoteItem: z992 .object({993 feedGuid: z.string(),994 feedUrl: z.string().optional(),995 itemGuid: z.string().optional(),996 medium: z.string().optional(),997 title: z.string().optional(),998 })999 .optional(),1000 valueRecipients: z1001 .array(1002 z.object({1003 name: z.string().optional(),1004 customKey: z.string().optional(),1005 customValue: z.string().optional(),1006 type: z.string(),1007 address: z.string(),1008 split: z.number(),1009 fee: z.boolean().optional(),1010 }),1011 )1012 .optional(),1013 }),1014 )1015 .optional(),1016 }),1017 )1018 .optional(),1019 medium: z.string().optional(),1020 images: z1021 .array(1022 z.object({1023 href: z.url(),1024 alt: z.string().optional(),1025 aspectRatio: z.string().optional(),1026 width: z.number().optional(),1027 height: z.number().optional(),1028 type: z.string().optional(),1029 purpose: z.string().optional(),1030 }),1031 )1032 .optional(),1033 liveItems: z1034 .array(1035 PodcastItemSchema.extend({1036 status: z.string(),1037 start: z.string(),1038 end: z.string().optional(),1039 contentLinks: z1040 .array(1041 z.object({1042 href: z.url(),1043 display: z.string().optional(),1044 }),1045 )1046 .optional(),1047 }),1048 )1049 .optional(),1050 blocks: z1051 .array(1052 z.object({1053 value: z.boolean(),1054 id: z.string().optional(),1055 }),1056 )1057 .optional(),1058 txts: z1059 .array(1060 z.object({1061 display: z.string(),1062 purpose: z.string().optional(),1063 }),1064 )1065 .optional(),1066 remoteItems: z1067 .array(1068 z.object({1069 feedGuid: z.string(),1070 feedUrl: z.string().optional(),1071 itemGuid: z.string().optional(),1072 medium: z.string().optional(),1073 title: z.string().optional(),1074 }),1075 )1076 .optional(),1077 podroll: z1078 .object({1079 remoteItems: z1080 .array(1081 z.object({1082 feedGuid: z.string(),1083 feedUrl: z.string().optional(),1084 itemGuid: z.string().optional(),1085 medium: z.string().optional(),1086 title: z.string().optional(),1087 }),1088 )1089 .optional(),1090 })1091 .optional(),1092 updateFrequency: z1093 .object({1094 display: z.string(),1095 complete: z.boolean().optional(),1096 dtstart: z.string().optional(),1097 rrule: z.string().optional(),1098 })1099 .optional(),1100 podping: z1101 .object({1102 usesPodping: z.boolean().optional(),1103 })1104 .optional(),1105 chat: z1106 .object({1107 server: z.string(),1108 protocol: z.string(),1109 accountId: z.string().optional(),1110 space: z.string().optional(),1111 })1112 .optional(),1113 publisher: z1114 .object({1115 remoteItem: z1116 .object({1117 feedGuid: z.string(),1118 feedUrl: z.string().optional(),1119 itemGuid: z.string().optional(),1120 medium: z.string().optional(),1121 title: z.string().optional(),1122 })1123 .optional(),1124 })1125 .optional(),1126 location: z1127 .object({1128 display: z.string(),1129 rel: z.string().optional(),1130 geo: z.string().optional(),1131 osm: z.string().optional(),1132 country: z.string().optional(),1133 })1134 .optional()1135 .meta({1136 deprecated: true,1137 description:1138 "Use `locations` (array) instead. Multiple podcast:location elements are allowed per specification.",1139 }),1140 value: z1141 .object({1142 type: z.string(),1143 method: z.string(),1144 suggested: z.number().optional(),1145 valueRecipients: z1146 .array(1147 z.object({1148 name: z.string().optional(),1149 customKey: z.string().optional(),1150 customValue: z.string().optional(),1151 type: z.string(),1152 address: z.string(),1153 split: z.number(),1154 fee: z.boolean().optional(),1155 }),1156 )1157 .optional(),1158 valueTimeSplits: z1159 .array(1160 z.object({1161 startTime: z.number(),1162 duration: z.number(),1163 remoteStartTime: z.number().optional(),1164 remotePercentage: z.number().optional(),1165 remoteItem: z1166 .object({1167 feedGuid: z.string(),1168 feedUrl: z.string().optional(),1169 itemGuid: z.string().optional(),1170 medium: z.string().optional(),1171 title: z.string().optional(),1172 })1173 .optional(),1174 valueRecipients: z1175 .array(1176 z.object({1177 name: z.string().optional(),1178 customKey: z.string().optional(),1179 customValue: z.string().optional(),1180 type: z.string(),1181 address: z.string(),1182 split: z.number(),1183 fee: z.boolean().optional(),1184 }),1185 )1186 .optional(),1187 }),1188 )1189 .optional(),1190 })1191 .optional()1192 .meta({1193 deprecated: true,1194 description:1195 "Use `values` (array) instead. Multiple podcast:value elements are allowed per specification.",1196 }),1197 chats: z1198 .array(1199 z.object({1200 server: z.string(),1201 protocol: z.string(),1202 accountId: z.string().optional(),1203 space: z.string().optional(),1204 }),1205 )1206 .optional()1207 .meta({1208 deprecated: true,1209 description:1210 "Use `chat` (singular) instead. Only one podcast:chat element is allowed per specification.",1211 }),1212});1213
1214const MediaCommonSchema = z.object({1215 ratings: z1216 .array(1217 z.object({1218 value: z.string(),1219 scheme: z.string().optional(),1220 }),1221 )1222 .optional(),1223 title: z1224 .object({1225 value: z.string(),1226 type: z.string().optional(),1227 })1228 .optional(),1229 description: z1230 .object({1231 value: z.string(),1232 type: z.string().optional(),1233 })1234 .optional(),1235 keywords: z.array(z.string()).optional(),1236 thumbnails: z1237 .array(1238 z.object({1239 url: z.url(),1240 height: z.number().optional(),1241 width: z.number().optional(),1242 time: z.string().optional(),1243 }),1244 )1245 .optional(),1246 categories: z1247 .array(1248 z.object({1249 name: z.string(),1250 scheme: z.string().optional(),1251 label: z.string().optional(),1252 }),1253 )1254 .optional(),1255 hashes: z1256 .array(1257 z.object({1258 value: z.string(),1259 algo: z.string().optional(),1260 }),1261 )1262 .optional(),1263 player: z1264 .object({1265 url: z.url(),1266 height: z.number().optional(),1267 width: z.number().optional(),1268 })1269 .optional(),1270 credits: z1271 .array(1272 z.object({1273 value: z.string(),1274 role: z.string().optional(),1275 scheme: z.string().optional(),1276 }),1277 )1278 .optional(),1279 copyright: z1280 .object({1281 value: z.string(),1282 url: z.url().optional(),1283 })1284 .optional(),1285 texts: z1286 .array(1287 z.object({1288 value: z.string(),1289 type: z.string().optional(),1290 lang: z.string().optional(),1291 start: z.string().optional(),1292 end: z.string().optional(),1293 }),1294 )1295 .optional(),1296 restrictions: z1297 .array(1298 z.object({1299 value: z.string(),1300 relationship: z.string(),1301 type: z.string().optional(),1302 }),1303 )1304 .optional(),1305 community: z1306 .object({1307 starRating: z1308 .object({1309 average: z.number().optional(),1310 count: z.number().optional(),1311 min: z.number().optional(),1312 max: z.number().optional(),1313 })1314 .optional(),1315 statistics: z1316 .object({1317 views: z.number().optional(),1318 favorites: z.number().optional(),1319 })1320 .optional(),1321 tags: z1322 .array(1323 z.object({1324 name: z.string(),1325 weight: z.number().optional(),1326 }),1327 )1328 .optional(),1329 })1330 .optional(),1331 comments: z.array(z.string()).optional(),1332 embed: z1333 .object({1334 url: z.url(),1335 width: z.number().optional(),1336 height: z.number().optional(),1337 params: z1338 .array(1339 z.object({1340 name: z.string(),1341 value: z.string(),1342 }),1343 )1344 .optional(),1345 })1346 .optional(),1347 responses: z.array(z.string()).optional(),1348 backLinks: z.array(z.string()).optional(),1349 status: z1350 .object({1351 state: z.string(),1352 reason: z.string().optional(),1353 })1354 .optional(),1355 prices: z1356 .array(1357 z.object({1358 type: z.string().optional(),1359 info: z.string().optional(),1360 price: z.number().optional(),1361 currency: z.string().optional(),1362 }),1363 )1364 .optional(),1365 licenses: z1366 .array(1367 z.union([1368 z.object({1369 name: z.string(),1370 type: z.string().optional(),1371 href: z.url().optional(),1372 }),1373 z.object({1374 name: z.string().optional(),1375 type: z.string().optional(),1376 href: z.url(),1377 }),1378 ]),1379 )1380 .optional(),1381 subTitles: z1382 .array(1383 z.object({1384 type: z.string().optional(),1385 lang: z.string().optional(),1386 href: z.url(),1387 }),1388 )1389 .optional(),1390 peerLinks: z1391 .array(1392 z.object({1393 type: z.string().optional(),1394 href: z.url(),1395 }),1396 )1397 .optional(),1398 locations: z1399 .array(1400 z.object({1401 description: z.string().optional(),1402 start: z.string().optional(),1403 end: z.string().optional(),1404 lat: z.number().optional(),1405 lng: z.number().optional(),1406 }),1407 )1408 .optional(),1409 rights: z1410 .object({1411 status: z.string().optional(),1412 })1413 .optional(),1414 scenes: z1415 .array(1416 z.object({1417 title: z.string().optional(),1418 description: z.string().optional(),1419 startTime: z.string().optional(),1420 endTime: z.string().optional(),1421 }),1422 )1423 .optional(),1424});1425
1426const MediaContentSchema = MediaCommonSchema.extend({1427 url: z.url().optional(),1428 fileSize: z.number().optional(),1429 type: z.string().optional(),1430 medium: z.string().optional(),1431 isDefault: z.boolean().optional(),1432 expression: z.string().optional(),1433 bitrate: z.number().optional(),1434 framerate: z.number().optional(),1435 samplingrate: z.number().optional(),1436 channels: z.number().optional(),1437 duration: z.number().optional(),1438 height: z.number().optional(),1439 width: z.number().optional(),1440 lang: z.string().optional(),1441});1442
1443const MediaGroupSchema = MediaCommonSchema.extend({1444 contents: z.array(MediaContentSchema).optional(),1445});1446
1447const MediaSchema = MediaCommonSchema.extend({1448 groups: z.array(MediaGroupSchema).optional(),1449 contents: z.array(MediaContentSchema).optional(),1450 group: MediaGroupSchema.optional().meta({1451 deprecated: true,1452 description: "Use `groups` instead.",1453 }),1454});1455
1456const OpenSearchSchema = z.object({1457 totalResults: z.number().optional(),1458 startIndex: z.number().optional(),1459 itemsPerPage: z.number().optional(),1460 queries: z1461 .array(1462 z.object({1463 role: z.string(),1464 searchTerms: z.string().optional(),1465 count: z.number().optional(),1466 startIndex: z.number().optional(),1467 startPage: z.number().optional(),1468 language: z.string().optional(),1469 inputEncoding: z.string().optional(),1470 outputEncoding: z.string().optional(),1471 }),1472 )1473 .optional(),1474});1475
1476const PrismItemSchema = z.object({1477 publicationName: z.string().optional(),1478 issn: z.string().optional(),1479 eIssn: z.string().optional(),1480 doi: z.string().optional(),1481 urls: z.array(z.string()).optional(),1482 volume: z.string().optional(),1483 number: z.string().optional(),1484 edition: z.string().optional(),1485 section: z.string().optional(),1486 startingPage: z.string().optional(),1487 endingPage: z.string().optional(),1488 pageRange: z.string().optional(),1489 pageCount: z.number().optional(),1490 pageProgressionDirection: z.string().optional(),1491 samplePageRange: z.string().optional(),1492 publicationDates: z.array(z.string()).optional(),1493 publicationDisplayDates: z.array(z.string()).optional(),1494 creationDate: z.string().optional(),1495 modificationDate: z.string().optional(),1496 dateReceived: z.string().optional(),1497 killDate: z.string().optional(),1498 copyrightYears: z.array(z.string()).optional(),1499 contentType: z.string().optional(),1500 genres: z.array(z.string()).optional(),1501 alternateTitles: z.array(z.string()).optional(),1502 subtitles: z.array(z.string()).optional(),1503 teasers: z.array(z.string()).optional(),1504 keywords: z.array(z.string()).optional(),1505 corporateEntities: z.array(z.string()).optional(),1506 organizations: z.array(z.string()).optional(),1507 persons: z.array(z.string()).optional(),1508 platforms: z.array(z.string()).optional(),1509 device: z.string().optional(),1510 academicFields: z.array(z.string()).optional(),1511 events: z.array(z.string()).optional(),1512 industries: z.array(z.string()).optional(),1513 locations: z.array(z.string()).optional(),1514 objects: z.array(z.string()).optional(),1515 profession: z.string().optional(),1516 sport: z.string().optional(),1517 hasAlternatives: z.array(z.string()).optional(),1518 hasCorrections: z.array(z.string()).optional(),1519 hasTranslations: z.array(z.string()).optional(),1520 isAlternativeOf: z.array(z.string()).optional(),1521 isCorrectionOf: z.array(z.string()).optional(),1522 isTranslationOf: z.string().optional(),1523 supplementTitles: z.array(z.string()).optional(),1524 supplementDisplayID: z.string().optional(),1525 supplementStartingPage: z.string().optional(),1526 links: z.array(z.string()).optional(),1527 wordCount: z.number().optional(),1528 byteCount: z.number().optional(),1529 ratings: z.array(z.string()).optional(),1530 timePeriod: z.string().optional(),1531 versionIdentifier: z.string().optional(),1532 tickers: z.array(z.string()).optional(),1533 embargoDate: z.string().optional().meta({1534 deprecated: true,1535 description: "Since PRISM 3.0. Use pur:embargoDate instead.",1536 }),1537 copyright: z.string().optional().meta({1538 deprecated: true,1539 description: "Since PRISM 3.0. Use pur:copyrightDate instead.",1540 }),1541 expirationDate: z.string().optional().meta({1542 deprecated: true,1543 description: "Since PRISM 3.0. Use pur:expirationDate instead.",1544 }),1545 rightsAgent: z.string().optional().meta({1546 deprecated: true,1547 description: "Since PRISM 3.0. Use pur:rightsAgent instead.",1548 }),1549});1550
1551const PrismFeedSchema = z.object({1552 publicationName: z.string().optional(),1553 issn: z.string().optional(),1554 eIssn: z.string().optional(),1555 isbns: z.array(z.string()).optional(),1556 issueIdentifier: z.string().optional(),1557 issueName: z.string().optional(),1558 issueTeaser: z.string().optional(),1559 issueType: z.string().optional(),1560 volume: z.string().optional(),1561 number: z.string().optional(),1562 edition: z.string().optional(),1563 aggregateIssueNumber: z.number().optional(),1564 aggregationType: z.string().optional(),1565 coverDate: z.string().optional(),1566 coverDisplayDate: z.string().optional(),1567 publicationDates: z.array(z.string()).optional(),1568 publicationDisplayDates: z.array(z.string()).optional(),1569 creationDate: z.string().optional(),1570 modificationDate: z.string().optional(),1571 dateReceived: z.string().optional(),1572 onSaleDates: z.array(z.string()).optional(),1573 onSaleDays: z.array(z.string()).optional(),1574 offSaleDates: z.array(z.string()).optional(),1575 killDate: z.string().optional(),1576 copyrightYears: z.array(z.string()).optional(),1577 contentType: z.string().optional(),1578 alternateTitles: z.array(z.string()).optional(),1579 subtitles: z.array(z.string()).optional(),1580 teasers: z.array(z.string()).optional(),1581 keywords: z.array(z.string()).optional(),1582 seriesTitle: z.string().optional(),1583 seriesNumber: z.number().optional(),1584 bookEditions: z.array(z.string()).optional(),1585 nationalCatalogNumber: z.string().optional(),1586 productCodes: z.array(z.string()).optional(),1587 uspsNumber: z.string().optional(),1588 publishingFrequency: z.string().optional(),1589 channels: z.array(z.string()).optional(),1590 subchannel1: z.string().optional(),1591 subchannel2: z.string().optional(),1592 subchannel3: z.string().optional(),1593 subchannel4: z.string().optional(),1594 section: z.string().optional(),1595 subsection1: z.string().optional(),1596 subsection2: z.string().optional(),1597 subsection3: z.string().optional(),1598 subsection4: z.string().optional(),1599 corporateEntities: z.array(z.string()).optional(),1600 distributor: z.string().optional(),1601 sellingAgencies: z.array(z.string()).optional(),1602 organizations: z.array(z.string()).optional(),1603 persons: z.array(z.string()).optional(),1604 platforms: z.array(z.string()).optional(),1605 originPlatforms: z.array(z.string()).optional(),1606 device: z.string().optional(),1607 complianceProfile: z.string().optional(),1608 blogTitle: z.string().optional(),1609 blogURL: z.string().optional(),1610 links: z.array(z.string()).optional(),1611 urls: z.array(z.string()).optional(),1612 byteCount: z.number().optional(),1613 ratings: z.array(z.string()).optional(),1614 timePeriod: z.string().optional(),1615 versionIdentifier: z.string().optional(),1616 tickers: z.array(z.string()).optional(),1617 academicFields: z.array(z.string()).optional(),1618 events: z.array(z.string()).optional(),1619 genres: z.array(z.string()).optional(),1620 industries: z.array(z.string()).optional(),1621 locations: z.array(z.string()).optional(),1622 objects: z.array(z.string()).optional(),1623 profession: z.string().optional(),1624 sport: z.string().optional(),1625 embargoDate: z.string().optional().meta({1626 deprecated: true,1627 description: "Since PRISM 3.0. Use pur:embargoDate instead.",1628 }),1629 copyright: z.string().optional().meta({1630 deprecated: true,1631 description: "Since PRISM 3.0. Use pur:copyrightDate instead.",1632 }),1633 expirationDate: z.string().optional().meta({1634 deprecated: true,1635 description: "Since PRISM 3.0. Use pur:expirationDate instead.",1636 }),1637 rightsAgent: z.string().optional().meta({1638 deprecated: true,1639 description: "Since PRISM 3.0. Use pur:rightsAgent instead.",1640 }),1641});1642
1643const PscSchema = z.object({1644 chapters: z.array(1645 z.object({1646 start: z.string(),1647 title: z.string(),1648 href: z.url().optional(),1649 image: z.string().optional(),1650 }),1651 ),1652});1653
1654const RawVoiceItemSchema = z.object({1655 poster: z1656 .object({1657 url: z.string().optional(),1658 })1659 .optional(),1660 isHd: z.boolean().optional(),1661 embed: z.string().optional(),1662 webm: z1663 .object({1664 src: z.string().optional(),1665 type: z.string().optional(),1666 length: z.number().optional(),1667 })1668 .optional(),1669 mp4: z1670 .object({1671 src: z.string().optional(),1672 type: z.string().optional(),1673 length: z.number().optional(),1674 })1675 .optional(),1676 metamarks: z1677 .array(1678 z.object({1679 type: z.string().optional(),1680 link: z.string().optional(),1681 position: z.number().optional(),1682 duration: z.number().optional(),1683 value: z.string().optional(),1684 }),1685 )1686 .optional(),1687});1688
1689const RawVoiceFeedSchema = z.object({1690 rating: z1691 .object({1692 value: z.string().optional(),1693 tv: z.string().optional(),1694 movie: z.string().optional(),1695 })1696 .optional(),1697 liveEmbed: z.string().optional(),1698 flashLiveStream: z1699 .object({1700 url: z.string().optional(),1701 schedule: z.string().optional(),1702 duration: z.string().optional(),1703 type: z.string().optional(),1704 })1705 .optional(),1706 httpLiveStream: z1707 .object({1708 url: z.string().optional(),1709 schedule: z.string().optional(),1710 duration: z.string().optional(),1711 type: z.string().optional(),1712 })1713 .optional(),1714 shoutcastLiveStream: z1715 .object({1716 url: z.string().optional(),1717 schedule: z.string().optional(),1718 duration: z.string().optional(),1719 type: z.string().optional(),1720 })1721 .optional(),1722 liveStream: z1723 .object({1724 url: z.string().optional(),1725 schedule: z.string().optional(),1726 duration: z.string().optional(),1727 type: z.string().optional(),1728 })1729 .optional(),1730 location: z.string(),1731 frequency: z.string(),1732 mycast: z.boolean(),1733 subscribe: z.record(z.string(), z.string()),1734 donate: z1735 .object({1736 href: z.url(),1737 value: z.string().optional(),1738 })1739 .optional(),1740});1741
1742const SlashSchema = z.object({1743 section: z.string().optional(),1744 department: z.string().optional(),1745 comments: z.number().optional(),1746 hitParade: z.array(z.number()).optional(),1747});1748
1749const SpotifyItemSchema = z.object({1750 access: z1751 .object({1752 entitlement: z1753 .object({1754 name: z.string(),1755 })1756 .optional(),1757 })1758 .optional(),1759});1760
1761const SpotifyFeedSchema = z.object({1762 limit: z1763 .object({1764 recentCount: z.number().optional(),1765 })1766 .optional(),1767 countryOfOrigin: z.string().optional(),1768 access: z1769 .object({1770 partner: z1771 .object({1772 id: z.string(),1773 })1774 .optional(),1775 sandbox: z1776 .object({1777 enabled: z.boolean(),1778 })1779 .optional(),1780 })1781 .optional(),1782});1783
1784const SySchema = z.object({1785 updatePeriod: z.string().optional(),1786 updateFrequency: z.number().optional(),1787 updateBase: z.string().optional(),1788});1789
1790const ThrSchema = z.object({1791 total: z.number().optional(),1792 InReplyTos: z1793 .array(1794 z.object({1795 ref: z.string(),1796 href: z.url().optional(),1797 type: z.string().optional(),1798 source: z.string().optional(),1799 }),1800 )1801 .optional(),1802});1803
1804const TrackbackSchema = z.object({1805 ping: z.string().optional(),1806 abouts: z.array(z.string()).optional(),1807});1808
1809const WfwSchema = z.object({1810 comment: z.string().optional(),1811 commentRss: z.string().optional(),1812});1813
1814// #endregion1815
1816// #region INTERNAL1817
1818const SourceNsSchema = z.object({1819 accounts: z1820 .array(1821 z.object({1822 service: z.string(),1823 value: z.string().optional(),1824 }),1825 )1826 .optional(),1827 likes: z1828 .object({1829 server: z.string(),1830 })1831 .optional(),1832 archive: z1833 .object({1834 url: z.string(),1835 startDay: z.string(),1836 endDay: z.string().optional(),1837 filename: z.string().optional(),1838 })1839 .optional(),1840 subscriptionLists: z1841 .array(1842 z.object({1843 url: z.url(),1844 value: z.string().optional(),1845 }),1846 )1847 .optional(),1848 cloud: z.string().optional(),1849 blogroll: z.string().optional(),1850 self: z.string().optional(),1851 localTime: z.string().optional(),1852});1853
1854/** Note that this Schema is different from Atom's Source */1855const SourceSchema = z.object({1856 accounts: z1857 .array(1858 z.object({1859 service: z.string(),1860 value: z.string().optional(),1861 }),1862 )1863 .optional(),1864 likes: z1865 .object({1866 server: z.string(),1867 })1868 .optional(),1869 archive: z1870 .object({1871 url: z.string(),1872 startDay: z.string(),1873 endDay: z.string().optional(),1874 filename: z.string().optional(),1875 })1876 .optional(),1877 subscriptionLists: z1878 .array(1879 z.object({1880 url: z.url(),1881 value: z.string().optional(),1882 }),1883 )1884 .optional(),1885 cloud: z.string().optional(),1886 blogroll: z.string().optional(),1887 self: z.string().optional(),1888 localTime: z.string().optional(),1889});1890
1891// #endregion1892
1893// #region PUBLIC1894
1895const ItemSchema = z.object({1896 title: z.string().optional(),1897 link: z.string().optional(),1898 description: z.string().optional(),1899 authors: z1900 .array(1901 z.union([1902 z.string(),1903 z.object({1904 name: z.string().optional(),1905 email: z.email().optional(),1906 }),1907 ]),1908 )1909 .optional(),1910 categories: z1911 .array(1912 z.object({1913 name: z.string(),1914 domain: z.string().optional(),1915 }),1916 )1917 .optional(),1918 comments: z.string().optional(),1919 enclosures: z1920 .array(1921 z.object({1922 url: z.string(),1923 length: z.number(),1924 type: z.string(),1925 }),1926 )1927 .optional(),1928 guid: z1929 .object({1930 value: z.string(),1931 isPermaLink: z.boolean().optional(),1932 })1933 .optional(),1934 pubDate: z.string().optional(),1935 source: z1936 .object({1937 title: z.string(),1938 url: z.string().optional(),1939 })1940 .optional(),1941 atom: AtomSchemas.Entry.optional(),1942 cc: CreativeCommonsSchema.optional(),1943 dc: DublinCoreSchema.optional(),1944 content: z.object({1945 encoded: z.string().optional(),1946 }),1947 creativeCommons: z1948 .object({1949 licenses: z.array(z.string()).optional(),1950 })1951 .optional(),1952 slash: SlashSchema.optional(),1953 itunes: ItunesItemSchema.optional(),1954 podcast: PodcastItemSchema.optional(),1955 psc: PscSchema.optional(),1956 googleplay: GooglePlayItemSchema.optional(),1957 media: MediaSchema.optional(),1958 georss: GeoRssSchema.optional(),1959 geo: GeoSchema.optional(),1960 thr: ThrSchema.optional(),1961 dcterms: DublinCoreTermsSchema.optional(),1962 prism: PrismItemSchema.optional(),1963 wfw: WfwSchema.optional(),1964 sourceNs: SourceNsSchema.optional(),1965 rawvoice: RawVoiceItemSchema.optional(),1966 spotify: SpotifyItemSchema.optional(),1967 pingback: PingbackItemSchema.optional(),1968 trackback: TrackbackSchema.optional(),1969 acast: ACastItemSchema.optional(),1970});1971
1972const FeedSchema = z.object({1973 title: z.string(),1974 link: z.string().optional(),1975 description: z.string(),1976 language: z.string().optional(),1977 copyright: z.string().optional(),1978 managingEditor: z1979 .union([1980 z.string(),1981 z.object({1982 name: z.string().optional(),1983 email: z.email().optional(),1984 }),1985 ])1986 .optional(),1987 webMaster: z1988 .union([1989 z.string(),1990 z.object({1991 name: z.string().optional(),1992 email: z.email().optional(),1993 }),1994 ])1995 .optional(),1996 pubDate: z.string().optional(),1997 lastBuildDate: z.string().optional(),1998 categories: z1999 .array(2000 z.object({2001 name: z.string(),2002 domain: z.string().optional(),2003 }),2004 )2005 .optional(),2006 generator: z.string().optional(),2007 docs: z.string().optional(),2008 cloud: z2009 .object({2010 domain: z.string(),2011 port: z.number(),2012 path: z.string(),2013 registerProcedure: z.string(),2014 protocol: z.string(),2015 })2016 .optional(),2017 ttl: z.number().optional(),2018 image: z2019 .object({2020 url: z.string(),2021 title: z.string(),2022 link: z.string(),2023 description: z.string().optional(),2024 height: z.number().optional(),2025 width: z.number().optional(),2026 })2027 .optional(),2028 rating: z.string().optional(),2029 textInput: z2030 .object({2031 title: z.string(),2032 description: z.string(),2033 name: z.string(),2034 link: z.string(),2035 })2036 .optional(),2037 skipHours: z.array(z.number()).optional(),2038 skipDays: z.array(z.string()).optional(),2039 items: z.array(ItemSchema).optional(),2040 atom: AtomSchemas.Feed.optional(),2041 cc: CreativeCommonsSchema.optional(),2042 dc: DublinCoreSchema.optional(),2043 sy: SySchema.optional(),2044 itunes: ItunesFeedSchema.optional(),2045 podcast: PodcastFeedSchema.optional(),2046 googleplay: GooglePlayFeedSchema.optional(),2047 media: MediaSchema.optional(),2048 georss: GeoRssSchema.optional(),2049 geo: GeoSchema.optional(),2050 dcterms: DublinCoreTermsSchema.optional(),2051 prism: PrismFeedSchema.optional(),2052 creativeCommons: z2053 .object({2054 licenses: z.array(z.string()).optional(),2055 })2056 .optional(),2057 feedpress: FeedpressSchema.optional(),2058 opensearch: OpenSearchSchema.optional(),2059 admin: AdminSchema.optional(),2060 source: SourceSchema.optional(),2061 blogChannel: BlogChannelSchema.optional(),2062 rawvoice: RawVoiceFeedSchema.optional(),2063 spotify: SpotifyFeedSchema.optional(),2064 pingback: PingbackFeedSchema.optional(),2065 acast: ACastFeedSchema.optional(),2066});2067
2068// #endregion2069
2070const RssSchemas = {2071 Feed: FeedSchema,2072 Item: ItemSchema,2073};2074
2075type Feed = z.infer<typeof FeedSchema>;2076type Item = z.infer<typeof ItemSchema>;2077
2078declare namespace Rss {2079 export type { Item, Feed };2080}2081
2082export type { Feed, Item, Rss };2083export { FeedSchema, ItemSchema, RssSchemas };2084export default RssSchemas;Update the import paths to match your project setup.
import type { Rss } from "@/lib/schemas/pxl/rss";const feed: Rss.Feed = { ... }API Reference
Section titled “API Reference”An Rss feed.
An Rss item.