UNPKG

@estarlincito/utils

Version:

A collection of utility functions designed to simplify and speed up development tasks in JavaScript and TypeScript projects.

571 lines (570 loc) 18.6 kB
import { t } from 'tyne'; /** * Schema for image metadata. */ declare const ImagesSchema: t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>; /** * Schema for general website metadata. */ declare const WebsiteSchema: t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; }>; /** * Schema for book metadata, extending website metadata. */ declare const BookSchema: t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; authors: t.TyneArray<t.TyneString>; isbn: t.TyneString; releaseDate: t.TyneString; tags: t.TyneArray<t.TyneString>; }>; /** * Schema for article metadata, extending website metadata. */ declare const ArticleSchema: t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; audio: import('tyne').TyneOptional<string>; authors: t.TyneArray<t.TyneString>; modifiedTime: t.TyneString; publishedTime: t.TyneString; section: t.TyneString; tags: t.TyneArray<t.TyneString>; }>; /** Possible OpenGraph content types. */ type Type_ = { type: 'article' | 'website' | 'book'; }; /** * Schema generator for structured metadata. * * @template T - The OpenGraph content type (`'article' | 'website' | 'book'`). * @param {T} type - The type of content for metadata generation. */ declare const ReturnsSchema: <T extends Type_["type"]>(type: T) => t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; metadataBase: t.TyneInstanceof<URL>; openGraph: t.TyneObject<{ type: t.TyneLiteral<T>; description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; } | { type: t.TyneLiteral<T>; description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; authors: t.TyneArray<t.TyneString>; isbn: t.TyneString; releaseDate: t.TyneString; tags: t.TyneArray<t.TyneString>; } | { type: t.TyneLiteral<T>; description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; audio: import('tyne').TyneOptional<string>; authors: t.TyneArray<t.TyneString>; modifiedTime: t.TyneString; publishedTime: t.TyneString; section: t.TyneString; tags: t.TyneArray<t.TyneString>; }>; title: t.TyneString; }>; /** * Schema of GenerateMetadata. */ export declare const Schemas: { Article: t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; audio: import('tyne').TyneOptional<string>; authors: t.TyneArray<t.TyneString>; modifiedTime: t.TyneString; publishedTime: t.TyneString; section: t.TyneString; tags: t.TyneArray<t.TyneString>; }>; Book: t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; authors: t.TyneArray<t.TyneString>; isbn: t.TyneString; releaseDate: t.TyneString; tags: t.TyneArray<t.TyneString>; }>; Images: t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>; OpenGraph: t.TyneObject<{ article: t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; audio: import('tyne').TyneOptional<string>; authors: t.TyneArray<t.TyneString>; modifiedTime: t.TyneString; publishedTime: t.TyneString; section: t.TyneString; tags: t.TyneArray<t.TyneString>; }>; book: t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; authors: t.TyneArray<t.TyneString>; isbn: t.TyneString; releaseDate: t.TyneString; tags: t.TyneArray<t.TyneString>; }>; website: t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; }>; }>; Returns: <T extends Type_["type"]>(type: T) => t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; metadataBase: t.TyneInstanceof<URL>; openGraph: t.TyneObject<{ type: t.TyneLiteral<T>; description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; } | { type: t.TyneLiteral<T>; description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; authors: t.TyneArray<t.TyneString>; isbn: t.TyneString; releaseDate: t.TyneString; tags: t.TyneArray<t.TyneString>; } | { type: t.TyneLiteral<T>; description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; audio: import('tyne').TyneOptional<string>; authors: t.TyneArray<t.TyneString>; modifiedTime: t.TyneString; publishedTime: t.TyneString; section: t.TyneString; tags: t.TyneArray<t.TyneString>; }>; title: t.TyneString; }>; Website: t.TyneObject<{ description: t.TyneString; icons: import('tyne').TyneOptional<{ icon: string; shortcut: string; }>; images: t.TyneArray<t.TyneObject<{ alt: t.TyneString; height: import('tyne').TyneOptional<number>; url: t.TyneString; width: import('tyne').TyneOptional<number>; }>>; locale: t.TyneString; metadataBase: import('tyne').TyneOptional<string>; siteName: t.TyneString; title: t.TyneString; url: t.TyneString; }>; }; /** * Types for Returns. */ type Returns<T extends Type_['type']> = t.infer<ReturnType<typeof ReturnsSchema<T>>>; /** * Types for Metadata. */ export declare namespace Metadata { /** Possible OpenGraph content types. */ type Type = Type_; /** * Types for image metadata. */ type Images = t.infer<typeof ImagesSchema>; /** * Types for general website metadata. */ type Website = t.infer<typeof WebsiteSchema>; /** * Types for article metadata, extends Website metadata. */ type Article = t.infer<typeof ArticleSchema>; /** * Types for book metadata, extends Website metadata. */ type Book = t.infer<typeof BookSchema>; namespace Return { type Website = Returns<'website'>; type Article = Returns<'article'>; type Book = Returns<'book'>; type Websites = Returns<'website'>[]; type Articles = Returns<'article'>[]; type Books = Returns<'book'>[]; } } /** * Class for generating metadata for different types of content (website, book, article). * Each method generates metadata specific to a content type (website, book, or article). */ export declare abstract class GenerateMetadata { abstract prop: string; private static generate; /** * Generates metadata specifically for an article. * * @param meta - The article metadata. * @returns - The generated metadata for the article. * * @example * const articleMeta: Article = { * title: 'Example Article Title', * description: 'Description for the article.', * url: 'https://example.com/article', * siteName: 'Example Site', * locale: 'en-US', * images: [{ url: '/assets/image1.jpg', alt: 'Article Image', width: 800, height: 600 }], * section: 'Tech News', * publishedTime: '2025-02-12T15:09:16Z', * modifiedTime: '2025-02-12T16:00:00Z', * authors: ['Author One'], * audio: new URL('/assets/audio.mp3'), * }; * const metadata = GenerateMetadata.article(articleMeta); */ static article(meta: Metadata.Article): { title: string; description: string; metadataBase: URL; openGraph: { url: string; title: string; description: string; images: { url: string; alt: string; height?: number | undefined; width?: number | undefined; }[]; locale: string; siteName: string; type: "article"; icons?: { icon: string; shortcut: string; } | undefined; metadataBase?: string | undefined; }; icons?: { icon: string; shortcut: string; } | undefined; }; /** * Generates metadata specifically for a website. * * @param meta - The website metadata. * @returns - The generated metadata for the website. * * @example * const websiteMeta: Website = { * title: 'Example Website Title', * description: 'Description for the website.', * url: 'https://example.com/website', * siteName: 'Example Site', * locale: 'en-US', * images: [{ url: '/assets/image1.jpg', alt: 'Website Image', width: 800, height: 600 }], * }; * const metadata = GenerateMetadata.website(websiteMeta); */ static website(meta: Metadata.Website): { title: string; description: string; metadataBase: URL; openGraph: { url: string; title: string; description: string; images: { url: string; alt: string; height?: number | undefined; width?: number | undefined; }[]; locale: string; siteName: string; type: "website"; icons?: { icon: string; shortcut: string; } | undefined; metadataBase?: string | undefined; }; icons?: { icon: string; shortcut: string; } | undefined; }; /** * Generates metadata specifically for a book. * * @param meta - The book metadata. * @returns - The generated metadata for the book. * * @example * const bookMeta: Book = { * title: 'Example Book Title', * description: 'Description for the book.', * url: 'https://example.com/book', * siteName: 'Example Site', * locale: 'en-US', * images: [{ url: '/assets/image1.jpg', alt: 'Book Cover Image', width: 800, height: 600 }], * isbn: '978-3-16-148410-0', * authors: ['Author One', 'Author Two'], * releaseDate: '2025-02-12', * tags: ['Fiction', 'Adventure'], * }; * const metadata = GenerateMetadata.book(bookMeta); */ static book(meta: Metadata.Book): { title: string; description: string; metadataBase: URL; openGraph: { url: string; title: string; description: string; images: { url: string; alt: string; height?: number | undefined; width?: number | undefined; }[]; locale: string; siteName: string; type: "book"; icons?: { icon: string; shortcut: string; } | undefined; metadataBase?: string | undefined; }; icons?: { icon: string; shortcut: string; } | undefined; }; } export {};