@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
TypeScript
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 {};