Installation
Section titled “Installation”pnpm dlx shadcn@latest add pxl-ui/registry/schemas/atom
Install the following dependencies:
pnpm add zod
Copy and paste the following code into your project.
1import z from "zod";2
3// #region MODULES4
5const AdminSchema = z.object({6 errorReportsTo: z.string().optional(),7 generatorAgent: z.string().optional(),8});9
10const AppSchema = z.object({11 edited: z.string().optional(),12 control: z13 .object({14 draft: z.boolean().optional(),15 })16 .optional(),17});18
19const ARXIVSchema = z.object({20 comment: z.string().optional(),21 journalRef: z.string().optional(),22 doi: z.string().optional(),23 primaryCategory: z.object({24 term: z.string().optional(),25 scheme: z.string().optional(),26 label: z.string().optional(),27 }),28});29
30const CreativeCommonsSchema = z.object({31 license: z.string().optional(),32 morePermissions: z.string().optional(),33 attributionName: z.string().optional(),34 attributionURL: z.string().optional(),35 useGuidelines: z.string().optional(),36 permits: z.string().optional(),37 requires: z.string().optional(),38 prohibits: z.string().optional(),39 jurisdiction: z.string().optional(),40 legalcode: z.string().optional(),41 deprecatedOn: z.string().optional(),42});43
44const DublinCoreSchema = z.object({45 titles: z.array(z.string()).optional(),46 creators: z.array(z.string()).optional(),47 subjects: z.array(z.string()).optional(),48 descriptions: z.array(z.string()).optional(),49 publishers: z.array(z.string()).optional(),50 contributors: z.array(z.string()).optional(),51 dates: z.array(z.string()).optional(),52 types: z.array(z.string()).optional(),53 formats: z.array(z.string()).optional(),54 identifiers: z.array(z.string()).optional(),55 sources: z.array(z.string()).optional(),56 languages: z.array(z.string()).optional(),57 relations: z.array(z.string()).optional(),58 title: z.string().optional().meta({59 deprecated: true,60 description:61 "Use `titles` (array) instead. Dublin Core fields are repeatable.",62 }),63 creator: z.string().optional().meta({64 deprecated: true,65 description:66 "Use `creators` (array) instead. Dublin Core fields are repeatable.",67 }),68 subject: z.string().optional().meta({69 deprecated: true,70 description:71 "Use `subjects` (array) instead. Dublin Core fields are repeatable.",72 }),73 description: z.string().optional().meta({74 deprecated: true,75 description:76 "Use `descriptions` (array) instead. Dublin Core fields are repeatable.",77 }),78 publisher: z.string().optional().meta({79 deprecated: true,80 description:81 "Use `publishers` (array) instead. Dublin Core fields are repeatable.",82 }),83 contributor: z.string().optional().meta({84 deprecated: true,85 description:86 "Use `contributors` (array) instead. Dublin Core fields are repeatable.",87 }),88 date: z.string().optional().meta({89 deprecated: true,90 description:91 "Use `dates` (array) instead. Dublin Core fields are repeatable.",92 }),93 type: z.string().optional().meta({94 deprecated: true,95 description:96 "Use `types` (array) instead. Dublin Core fields are repeatable.",97 }),98 format: z.string().optional().meta({99 deprecated: true,100 description:101 "Use `formats` (array) instead. Dublin Core fields are repeatable.",102 }),103 identifier: z.string().optional().meta({104 deprecated: true,105 description:106 "Use `identifiers` (array) instead. Dublin Core fields are repeatable.",107 }),108 source: z.string().optional().meta({109 deprecated: true,110 description:111 "Use `sources` (array) instead. Dublin Core fields are repeatable.",112 }),113 language: z.string().optional().meta({114 deprecated: true,115 description:116 "Use `languages` (array) instead. Dublin Core fields are repeatable.",117 }),118 relation: z.string().optional().meta({119 deprecated: true,120 description:121 "Use `relations` (array) instead. Dublin Core fields are repeatable.",122 }),123 coverage: z.string().optional().meta({124 deprecated: true,125 description:126 "This field type will be changed to array in the next major version of the package. Dublin Core fields are repeatable.",127 }),128 rights: z.string().optional().meta({129 deprecated: true,130 description:131 "This field type will be changed to array in the next major version of the package. Dublin Core fields are repeatable.",132 }),133});134
135const DublinCoreTermsSchema = z.object({136 abstracts: z.array(z.string()).optional(),137 accrualMethods: z.array(z.string()).optional(),138 accrualPeriodicities: z.array(z.string()).optional(),139 accrualPolicies: z.array(z.string()).optional(),140 alternatives: z.array(z.string()).optional(),141 audiences: z.array(z.string()).optional(),142 bibliographicCitations: z.array(z.string()).optional(),143 contributors: z.array(z.string()).optional(),144 coverages: z.array(z.string()).optional(),145 creators: z.array(z.string()).optional(),146 dates: z.array(z.string()).optional(),147 descriptions: z.array(z.string()).optional(),148 educationLevels: z.array(z.string()).optional(),149 extents: z.array(z.string()).optional(),150 formats: z.array(z.string()).optional(),151 hasFormats: z.array(z.string()).optional(),152 hasParts: z.array(z.string()).optional(),153 hasVersions: z.array(z.string()).optional(),154 identifiers: z.array(z.string()).optional(),155 instructionalMethods: z.array(z.string()).optional(),156 languages: z.array(z.string()).optional(),157 licenses: z.array(z.string()).optional(),158 mediators: z.array(z.string()).optional(),159 mediums: z.array(z.string()).optional(),160 provenances: z.array(z.string()).optional(),161 publishers: z.array(z.string()).optional(),162 relations: z.array(z.string()).optional(),163 rightsHolders: z.array(z.string()).optional(),164 sources: z.array(z.string()).optional(),165 spatials: z.array(z.string()).optional(),166 subjects: z.array(z.string()).optional(),167 temporals: z.array(z.string()).optional(),168 titles: z.array(z.string()).optional(),169 types: z.array(z.string()).optional(),170 abstract: z.string().optional().meta({171 deprecated: true,172 description:173 "Use `abstracts` (array) instead. Dublin Core Terms fields are repeatable.",174 }),175 accessRights: z.string().optional().meta({176 deprecated: true,177 description:178 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",179 }),180 accrualMethod: z.string().optional().meta({181 deprecated: true,182 description:183 "Use `accrualMethod` (array) instead. Dublin Core Terms fields are repeatable.",184 }),185 accrualPeriodicity: z.string().optional().meta({186 deprecated: true,187 description:188 "Use `accrualPeriodicities` (array) instead. Dublin Core Terms fields are repeatable.",189 }),190 accrualPolicy: z.string().optional().meta({191 deprecated: true,192 description:193 "Use `accrualPolicies` (array) instead. Dublin Core Terms fields are repeatable.",194 }),195 alternative: z.string().optional().meta({196 deprecated: true,197 description:198 "Use `alternatives` (array) instead. Dublin Core Terms fields are repeatable.",199 }),200 audience: z.string().optional().meta({201 deprecated: true,202 description:203 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",204 }),205 available: z.string().optional().meta({206 deprecated: true,207 description:208 "Use `abstracts` (array) instead. Dublin Core Terms fields are repeatable.",209 }),210 bibliographicCitation: z.string().optional().meta({211 deprecated: true,212 description:213 "Use `bibliographicCitations` (array) instead. Dublin Core Terms fields are repeatable.",214 }),215 conformsTo: z.string().optional().meta({216 deprecated: true,217 description:218 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",219 }),220 contributor: z.string().optional().meta({221 deprecated: true,222 description:223 "Use `contributors` (array) instead. Dublin Core Terms fields are repeatable.",224 }),225 coverage: z.string().optional().meta({226 deprecated: true,227 description:228 "Use `coverages` (array) instead. Dublin Core Terms fields are repeatable.",229 }),230 created: z.string().optional().meta({231 deprecated: true,232 description:233 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",234 }),235 creator: z.string().optional().meta({236 deprecated: true,237 description:238 "Use `creators` (array) instead. Dublin Core Terms fields are repeatable.",239 }),240 date: z.string().optional().meta({241 deprecated: true,242 description:243 "Use `dates` (array) instead. Dublin Core Terms fields are repeatable.",244 }),245 dateAccepted: z.string().optional().meta({246 deprecated: true,247 description:248 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",249 }),250 dateCopyrighted: z.string().optional().meta({251 deprecated: true,252 description:253 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",254 }),255 dateSubmitted: z.string().optional().meta({256 deprecated: true,257 description:258 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",259 }),260 description: z.string().optional().meta({261 deprecated: true,262 description:263 "Use `descriptions` (array) instead. Dublin Core Terms fields are repeatable.",264 }),265 educationLevel: z.string().optional().meta({266 deprecated: true,267 description:268 "Use `educationLevels` (array) instead. Dublin Core Terms fields are repeatable.",269 }),270 extent: z.string().optional().meta({271 deprecated: true,272 description:273 "Use `extents` (array) instead. Dublin Core Terms fields are repeatable.",274 }),275 format: z.string().optional().meta({276 deprecated: true,277 description:278 "Use `formats` (array) instead. Dublin Core Terms fields are repeatable.",279 }),280 hasFormat: z.string().optional().meta({281 deprecated: true,282 description:283 "Use `hasFormats` (array) instead. Dublin Core Terms fields are repeatable.",284 }),285 hasPart: z.string().optional().meta({286 deprecated: true,287 description:288 "Use `hasParts` (array) instead. Dublin Core Terms fields are repeatable.",289 }),290 hasVersion: z.string().optional().meta({291 deprecated: true,292 description:293 "Use `hasVersions` (array) instead. Dublin Core Terms fields are repeatable.",294 }),295 identifier: z.string().optional().meta({296 deprecated: true,297 description:298 "Use `identifiers` (array) instead. Dublin Core Terms fields are repeatable.",299 }),300 instructionalMethod: z.string().optional().meta({301 deprecated: true,302 description:303 "Use `instructionalMethods` (array) instead. Dublin Core Terms fields are repeatable.",304 }),305 isFormatOf: z.string().optional().meta({306 deprecated: true,307 description:308 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",309 }),310 isPartOf: z.string().optional().meta({311 deprecated: true,312 description:313 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",314 }),315 isReferencedBy: z.string().optional().meta({316 deprecated: true,317 description:318 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",319 }),320 isReplacedBy: z.string().optional().meta({321 deprecated: true,322 description:323 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",324 }),325 isRequiredBy: z.string().optional().meta({326 deprecated: true,327 description:328 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",329 }),330 issued: z.string().optional().meta({331 deprecated: true,332 description:333 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",334 }),335 isVersionOf: z.string().optional().meta({336 deprecated: true,337 description:338 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",339 }),340 language: z.string().optional().meta({341 deprecated: true,342 description:343 "Use `languages` (array) instead. Dublin Core Terms fields are repeatable.",344 }),345 license: z.string().optional().meta({346 deprecated: true,347 description:348 "Use `licenses` (array) instead. Dublin Core Terms fields are repeatable.",349 }),350 mediator: z.string().optional().meta({351 deprecated: true,352 description:353 "Use `mediators` (array) instead. Dublin Core Terms fields are repeatable.",354 }),355 medium: z.string().optional().meta({356 deprecated: true,357 description:358 "Use `mediums` (array) instead. Dublin Core Terms fields are repeatable.",359 }),360 modified: z.string().optional().meta({361 deprecated: true,362 description:363 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",364 }),365 provenance: z.string().optional().meta({366 deprecated: true,367 description:368 "Use `provenances` (array) instead. Dublin Core Terms fields are repeatable.",369 }),370 publisher: z.string().optional().meta({371 deprecated: true,372 description:373 "Use `publishers` (array) instead. Dublin Core Terms fields are repeatable.",374 }),375 references: z.string().optional().meta({376 deprecated: true,377 description:378 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",379 }),380 relation: z.string().optional().meta({381 deprecated: true,382 description:383 "Use `relations` (array) instead. Dublin Core Terms fields are repeatable.",384 }),385 replaces: z.string().optional().meta({386 deprecated: true,387 description:388 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",389 }),390 requires: z.string().optional().meta({391 deprecated: true,392 description:393 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",394 }),395 rights: z.string().optional().meta({396 deprecated: true,397 description:398 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",399 }),400 rightsHolder: z.string().optional().meta({401 deprecated: true,402 description:403 "Use `rightsHolders` (array) instead. Dublin Core Terms fields are repeatable.",404 }),405 source: z.string().optional().meta({406 deprecated: true,407 description:408 "Use `sources` (array) instead. Dublin Core Terms fields are repeatable.",409 }),410 spatial: z.string().optional().meta({411 deprecated: true,412 description:413 "Use `spatials` (array) instead. Dublin Core Terms fields are repeatable.",414 }),415 subject: z.string().optional().meta({416 deprecated: true,417 description:418 "Use `subjects` (array) instead. Dublin Core Terms fields are repeatable.",419 }),420 tableOfContents: z.string().optional().meta({421 deprecated: true,422 description:423 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",424 }),425 temporal: z.string().optional().meta({426 deprecated: true,427 description:428 "Use `temporals` (array) instead. Dublin Core Terms fields are repeatable.",429 }),430 title: z.string().optional().meta({431 deprecated: true,432 description:433 "Use `titles` (array) instead. Dublin Core Terms fields are repeatable.",434 }),435 type: z.string().optional().meta({436 deprecated: true,437 description:438 "Use `types` (array) instead. Dublin Core Terms fields are repeatable.",439 }),440 valid: z.string().optional().meta({441 deprecated: true,442 description:443 "This field type will be changed to array in the next major version of the package. Dublin Core Terms fields are repeatable.",444 }),445});446
447const GeoSchema = z.object({448 lat: z.number().optional(),449 long: z.number().optional(),450 alt: z.number().optional(),451});452
453const GeoRssSchema = z.object({454 point: z455 .object({456 lat: z.number(),457 lng: z.number(),458 })459 .optional(),460 line: z461 .object({462 points: z.array(463 z.object({464 lat: z.number(),465 lng: z.number(),466 }),467 ),468 })469 .optional(),470 polygon: z471 .object({472 points: z473 .array(474 z.object({475 lat: z.number(),476 lng: z.number(),477 }),478 )479 .optional(),480 })481 .optional(),482 box: z.object({483 lowerCorner: z.object({484 lat: z.number(),485 lng: z.number(),486 }),487 upperCorner: z.object({488 lat: z.number(),489 lng: z.number(),490 }),491 }),492 featureTypeTag: z.string().optional(),493 relationshipTag: z.string().optional(),494 featureName: z.string().optional(),495 elev: z.number().optional(),496 floor: z.number().optional(),497 radius: z.number().optional(),498});499
500const GooglePlayItemSchema = z.object({501 author: z.string().optional(),502 description: z.string().optional(),503 explicit: z.union([z.boolean(), z.literal("clean")]).optional(),504 block: z.boolean().optional(),505 image: z506 .object({507 href: z.url(),508 })509 .optional(),510});511
512const GooglePlayFeedSchema = z.object({513 author: z.string().optional(),514 description: z.string().optional(),515 explicit: z.union([z.boolean(), z.literal("clean")]).optional(),516 block: z.boolean().optional(),517 image: z518 .object({519 href: z.url(),520 })521 .optional(),522 newFeedUrl: z.url().optional(),523 email: z.email().optional(),524 categories: z.array(z.string()).optional(),525});526
527const ItunesItemSchema = z.object({528 duration: z.number().optional(),529 image: z.string().optional(),530 explicit: z.boolean().optional(),531 author: z.string().optional(),532 title: z.string().optional(),533 episode: z.number().optional(),534 season: z.number().optional(),535 episodeType: z.string().optional(),536 block: z.boolean().optional(),537 summary: z.string().optional().meta({538 deprecated: true,539 description: "Use standard RSS description instead.",540 }),541 subtitle: z.string().optional().meta({542 deprecated: true,543 description: "No longer used by Apple Podcasts.",544 }),545 keywords: z.array(z.string()).optional().meta({546 deprecated: true,547 description: "No longer used by Apple Podcasts.",548 }),549});550
551const ItunesFeedSchema = z.object({552 image: z.string().optional(),553 categories: z554 .array(555 z.object({556 text: z.string(),557 categories: z558 .array(559 z.object({560 text: z.string(),561 }),562 )563 .optional(),564 }),565 )566 .optional(),567 explicit: z.boolean().optional(),568 author: z.string().optional(),569 title: z.string().optional(),570 type: z.string().optional(),571 newFeedUrl: z.string().optional(),572 block: z.boolean().optional(),573 complete: z.boolean().optional(),574 applePodcastsVerify: z.string().optional(),575 summary: z.string().optional().meta({576 deprecated: true,577 description: "Use standard RSS description instead.",578 }),579 subtitle: z.string().optional().meta({580 deprecated: true,581 description: "No longer used by Apple Podcasts.",582 }),583 keywords: z.array(z.string()).optional().meta({584 deprecated: true,585 description: "No longer used for search in Apple Podcasts.",586 }),587 owner: z588 .object({589 name: z.string().optional(),590 email: z.email().optional(),591 })592 .optional()593 .meta({594 deprecated: true,595 description: "No longer supported by Apple Podcasts.",596 }),597});598
599const PingbackItemSchema = z.object({600 server: z.string().optional(),601 target: z.string().optional(),602});603
604const PingbackFeedSchema = z.object({605 to: z.string().optional(),606});607
608const MediaCommonSchema = z.object({609 ratings: z610 .array(611 z.object({612 value: z.string(),613 scheme: z.string().optional(),614 }),615 )616 .optional(),617 title: z618 .object({619 value: z.string(),620 type: z.string().optional(),621 })622 .optional(),623 description: z624 .object({625 value: z.string(),626 type: z.string().optional(),627 })628 .optional(),629 keywords: z.array(z.string()).optional(),630 thumbnails: z631 .array(632 z.object({633 url: z.url(),634 height: z.number().optional(),635 width: z.number().optional(),636 time: z.string().optional(),637 }),638 )639 .optional(),640 categories: z641 .array(642 z.object({643 name: z.string(),644 scheme: z.string().optional(),645 label: z.string().optional(),646 }),647 )648 .optional(),649 hashes: z650 .array(651 z.object({652 value: z.string(),653 algo: z.string().optional(),654 }),655 )656 .optional(),657 player: z658 .object({659 url: z.url(),660 height: z.number().optional(),661 width: z.number().optional(),662 })663 .optional(),664 credits: z665 .array(666 z.object({667 value: z.string(),668 role: z.string().optional(),669 scheme: z.string().optional(),670 }),671 )672 .optional(),673 copyright: z674 .object({675 value: z.string(),676 url: z.url().optional(),677 })678 .optional(),679 texts: z680 .array(681 z.object({682 value: z.string(),683 type: z.string().optional(),684 lang: z.string().optional(),685 start: z.string().optional(),686 end: z.string().optional(),687 }),688 )689 .optional(),690 restrictions: z691 .array(692 z.object({693 value: z.string(),694 relationship: z.string(),695 type: z.string().optional(),696 }),697 )698 .optional(),699 community: z700 .object({701 starRating: z702 .object({703 average: z.number().optional(),704 count: z.number().optional(),705 min: z.number().optional(),706 max: z.number().optional(),707 })708 .optional(),709 statistics: z710 .object({711 views: z.number().optional(),712 favorites: z.number().optional(),713 })714 .optional(),715 tags: z716 .array(717 z.object({718 name: z.string(),719 weight: z.number().optional(),720 }),721 )722 .optional(),723 })724 .optional(),725 comments: z.array(z.string()).optional(),726 embed: z727 .object({728 url: z.url(),729 width: z.number().optional(),730 height: z.number().optional(),731 params: z732 .array(733 z.object({734 name: z.string(),735 value: z.string(),736 }),737 )738 .optional(),739 })740 .optional(),741 responses: z.array(z.string()).optional(),742 backLinks: z.array(z.string()).optional(),743 status: z744 .object({745 state: z.string(),746 reason: z.string().optional(),747 })748 .optional(),749 prices: z750 .array(751 z.object({752 type: z.string().optional(),753 info: z.string().optional(),754 price: z.number().optional(),755 currency: z.string().optional(),756 }),757 )758 .optional(),759 licenses: z760 .array(761 z.union([762 z.object({763 name: z.string(),764 type: z.string().optional(),765 href: z.url().optional(),766 }),767 z.object({768 name: z.string().optional(),769 type: z.string().optional(),770 href: z.url(),771 }),772 ]),773 )774 .optional(),775 subTitles: z776 .array(777 z.object({778 type: z.string().optional(),779 lang: z.string().optional(),780 href: z.url(),781 }),782 )783 .optional(),784 peerLinks: z785 .array(786 z.object({787 type: z.string().optional(),788 href: z.url(),789 }),790 )791 .optional(),792 locations: z793 .array(794 z.object({795 description: z.string().optional(),796 start: z.string().optional(),797 end: z.string().optional(),798 lat: z.number().optional(),799 lng: z.number().optional(),800 }),801 )802 .optional(),803 rights: z804 .object({805 status: z.string().optional(),806 })807 .optional(),808 scenes: z809 .array(810 z.object({811 title: z.string().optional(),812 description: z.string().optional(),813 startTime: z.string().optional(),814 endTime: z.string().optional(),815 }),816 )817 .optional(),818});819
820const MediaContentSchema = MediaCommonSchema.extend({821 url: z.url().optional(),822 fileSize: z.number().optional(),823 type: z.string().optional(),824 medium: z.string().optional(),825 isDefault: z.boolean().optional(),826 expression: z.string().optional(),827 bitrate: z.number().optional(),828 framerate: z.number().optional(),829 samplingrate: z.number().optional(),830 channels: z.number().optional(),831 duration: z.number().optional(),832 height: z.number().optional(),833 width: z.number().optional(),834 lang: z.string().optional(),835});836
837const MediaGroupSchema = MediaCommonSchema.extend({838 contents: z.array(MediaContentSchema).optional(),839});840
841const MediaSchema = MediaCommonSchema.extend({842 groups: z.array(MediaGroupSchema).optional(),843 contents: z.array(MediaContentSchema).optional(),844 group: MediaGroupSchema.optional().meta({845 deprecated: true,846 description: "Use `groups` instead.",847 }),848});849
850const OpenSearchSchema = z.object({851 totalResults: z.number().optional(),852 startIndex: z.number().optional(),853 itemsPerPage: z.number().optional(),854 queries: z855 .array(856 z.object({857 role: z.string(),858 searchTerms: z.string().optional(),859 count: z.number().optional(),860 startIndex: z.number().optional(),861 startPage: z.number().optional(),862 language: z.string().optional(),863 inputEncoding: z.string().optional(),864 outputEncoding: z.string().optional(),865 }),866 )867 .optional(),868});869
870const PscSchema = z.object({871 chapters: z.array(872 z.object({873 start: z.string(),874 title: z.string(),875 href: z.url().optional(),876 image: z.string().optional(),877 }),878 ),879});880
881const SlashSchema = z.object({882 section: z.string().optional(),883 department: z.string().optional(),884 comments: z.number().optional(),885 hitParade: z.array(z.number()).optional(),886});887
888const SySchema = z.object({889 updatePeriod: z.string().optional(),890 updateFrequency: z.number().optional(),891 updateBase: z.string().optional(),892});893
894const ThrSchema = z.object({895 total: z.number().optional(),896 InReplyTos: z897 .array(898 z.object({899 ref: z.string(),900 href: z.url().optional(),901 type: z.string().optional(),902 source: z.string().optional(),903 }),904 )905 .optional(),906});907
908const TrackbackSchema = z.object({909 ping: z.string().optional(),910 abouts: z.array(z.string()).optional(),911});912
913const WfwSchema = z.object({914 comment: z.string().optional(),915 commentRss: z.string().optional(),916});917
918const YoutubeItemSchema = z.object({919 videoId: z.string().optional(),920 channelId: z.string().optional(),921});922
923const YoutubeFeedSchema = z.object({924 channelId: z.string().optional(),925 playlistId: z.string().optional(),926});927
928// #endregion929
930// #region INTERNAL931
932/** Note that this Schema is different from RSS's Source */933const SourceSchema = z.object({934 authors: z935 .array(936 z.object({937 name: z.string(),938 uri: z.url().optional(),939 email: z.email().optional(),940 arxiv: z941 .object({942 affiliation: z.string().optional(),943 })944 .optional(),945 }),946 )947 .optional(),948 categories: z949 .array(950 z.object({951 term: z.string(),952 scheme: z.string().optional(),953 label: z.string().optional(),954 }),955 )956 .optional(),957 contributors: z958 .array(959 z.object({960 name: z.string(),961 uri: z.url().optional(),962 email: z.email().optional(),963 arxiv: z964 .object({965 affiliation: z.string().optional(),966 })967 .optional(),968 }),969 )970 .optional(),971 generator: z972 .object({973 text: z.string(),974 uri: z.string().optional(),975 version: z.string(),976 })977 .optional(),978 icon: z.string(),979 id: z.string(),980 links: z981 .array(982 z.object({983 href: z.string(),984 rel: z.enum(["self", "alternate"]).optional(),985 type: z.string().optional(),986 hreflang: z.string().optional(),987 title: z.string().optional(),988 length: z.number().optional(),989 thr: z990 .object({991 count: z.number().optional(),992 updated: z.string().optional(),993 })994 .optional(),995 }),996 )997 .optional(),998 logo: z.string().optional(),999 rights: z.string().optional(),1000 subtitle: z.string().optional(),1001 title: z.string().optional(),1002 updated: z.string().optional(),1003});1004
1005// #endregion1006
1007// #region PUBLIC1008
1009const EntrySchema = z.object({1010 authors: z1011 .array(1012 z.object({1013 name: z.string(),1014 uri: z.url().optional(),1015 email: z.email().optional(),1016 arxiv: z1017 .object({1018 affiliation: z.string().optional(),1019 })1020 .optional(),1021 }),1022 )1023 .optional(),1024 categories: z1025 .array(1026 z.object({1027 term: z.string(),1028 scheme: z.string().optional(),1029 label: z.string().optional(),1030 }),1031 )1032 .optional(),1033 content: z.string().optional(),1034 contributors: z1035 .array(1036 z.object({1037 name: z.string(),1038 uri: z.url().optional(),1039 email: z.email().optional(),1040 arxiv: z1041 .object({1042 affiliation: z.string().optional(),1043 })1044 .optional(),1045 }),1046 )1047 .optional(),1048 id: z.string(),1049 links: z1050 .array(1051 z.object({1052 href: z.string(),1053 rel: z.enum(["self", "alternate"]).optional(),1054 type: z.string().optional(),1055 hreflang: z.string().optional(),1056 title: z.string().optional(),1057 length: z.number().optional(),1058 thr: z1059 .object({1060 count: z.number().optional(),1061 updated: z.string().optional(),1062 })1063 .optional(),1064 }),1065 )1066 .optional(),1067 published: z.string().optional(),1068 rights: z.string().optional(),1069 source: SourceSchema.optional(),1070 summary: z.string().optional(),1071 title: z.string(),1072 updated: z.string(),1073 app: AppSchema.optional(),1074 arxiv: ARXIVSchema.optional(),1075 cc: CreativeCommonsSchema.optional(),1076 dc: DublinCoreSchema.optional(),1077 slash: SlashSchema.optional(),1078 itunes: ItunesItemSchema.optional(),1079 googleplay: GooglePlayItemSchema.optional(),1080 psc: PscSchema.optional(),1081 media: MediaSchema.optional(),1082 georss: GeoRssSchema.optional(),1083 geo: GeoSchema.optional(),1084 thr: ThrSchema.optional(),1085 dcterms: DublinCoreTermsSchema.optional(),1086 creativeCommons: z1087 .object({1088 licenses: z.array(z.string()).optional(),1089 })1090 .optional(),1091 wfw: WfwSchema.optional(),1092 yt: YoutubeItemSchema.optional(),1093 pingback: PingbackItemSchema.optional(),1094 trackback: TrackbackSchema.optional(),1095});1096
1097const FeedSchema = z.object({1098 authors: z1099 .array(1100 z.object({1101 name: z.string(),1102 uri: z.url().optional(),1103 email: z.email().optional(),1104 arxiv: z1105 .object({1106 affiliation: z.string().optional(),1107 })1108 .optional(),1109 }),1110 )1111 .optional(),1112 categories: z1113 .array(1114 z.object({1115 term: z.string(),1116 scheme: z.string().optional(),1117 label: z.string().optional(),1118 }),1119 )1120 .optional(),1121 contributors: z1122 .array(1123 z.object({1124 name: z.string(),1125 uri: z.url().optional(),1126 email: z.email().optional(),1127 arxiv: z1128 .object({1129 affiliation: z.string().optional(),1130 })1131 .optional(),1132 }),1133 )1134 .optional(),1135 generator: z1136 .object({1137 text: z.string(),1138 uri: z.string().optional(),1139 version: z.string(),1140 })1141 .optional(),1142 icon: z.string().optional(),1143 id: z.string(),1144 links: z1145 .array(1146 z.object({1147 href: z.string(),1148 rel: z.enum(["self", "alternate"]).optional(),1149 type: z.string().optional(),1150 hreflang: z.string().optional(),1151 title: z.string().optional(),1152 length: z.number().optional(),1153 thr: z1154 .object({1155 count: z.number().optional(),1156 updated: z.string().optional(),1157 })1158 .optional(),1159 }),1160 )1161 .optional(),1162 logo: z.string().optional(),1163 rights: z.string().optional(),1164 subtitle: z.string().optional(),1165 title: z.string(),1166 updated: z.string().optional(),1167 entries: z.array(EntrySchema).optional(),1168 cc: CreativeCommonsSchema.optional(),1169 dc: DublinCoreSchema.optional(),1170 sy: SySchema.optional(),1171 itunes: ItunesFeedSchema.optional(),1172 googleplay: GooglePlayFeedSchema.optional(),1173 media: MediaSchema.optional(),1174 georss: GeoRssSchema.optional(),1175 geo: GeoSchema.optional(),1176 dcterms: DublinCoreTermsSchema.optional(),1177 creativeCommons: z1178 .object({1179 licenses: z.array(z.string()).optional(),1180 })1181 .optional(),1182 opensearch: OpenSearchSchema.optional(),1183 yt: YoutubeFeedSchema.optional(),1184 admin: AdminSchema.optional(),1185 pingback: PingbackFeedSchema.optional(),1186});1187
1188// #endregion1189
1190const AtomSchemas = {1191 Entry: EntrySchema,1192 Feed: FeedSchema,1193};1194
1195type Entry = z.infer<typeof EntrySchema>;1196type Feed = z.infer<typeof FeedSchema>;1197
1198declare namespace Atom {1199 export type { Entry, Feed };1200}1201
1202export type { Atom, Entry, Feed };1203export { AtomSchemas, EntrySchema, FeedSchema };1204export default AtomSchemas;Update the import paths to match your project setup.
import type { Atom } from "@/lib/schemas/pxl/atom";const feed: Atom.Feed = { ... }API Reference
Section titled “API Reference”An Atom feed.
An Atom entry.