UNPKG

@llml-browser/types

Version:

TypeScript types and schemas for the @llml-browser API

1 lines 7.88 kB
{"version":3,"sources":["../src/services/metadata/types.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Schema for configuring metadata extraction options.\n * Controls which metadata fields should be extracted from a webpage.\n */\nexport const MetadataOptionsSchema = z.object({\n title: z.boolean().optional().default(true),\n description: z.boolean().optional().default(true),\n language: z.boolean().optional().default(true),\n canonical: z.boolean().optional().default(true),\n robots: z.boolean().optional().default(true),\n author: z.boolean().optional().default(true),\n keywords: z.boolean().optional().default(true),\n favicon: z.boolean().optional().default(true),\n openGraph: z.boolean().optional().default(true),\n twitter: z.boolean().optional().default(true),\n isIframeAllowed: z.boolean().optional().default(true),\n});\n\n/**\n * Schema for page metadata extracted from a webpage.\n * Defines the structure and validation rules for all possible metadata fields.\n */\nexport const PageMetadataSchema = z.object({\n // Basic metadata\n title: z.string().optional(),\n description: z.string().optional(),\n language: z.string().optional(),\n canonical: z.string().url().optional(),\n robots: z.string().optional(),\n author: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n lastModified: z.string().optional().nullable(),\n favicon: z.string().url().optional(),\n\n // OpenGraph metadata (flattened)\n ogTitle: z.string().optional(),\n ogDescription: z.string().optional(),\n ogImage: z.string().url().optional(),\n ogUrl: z.string().url().optional(),\n ogType: z.string().optional(),\n ogSiteName: z.string().optional(),\n\n // Twitter Card metadata (flattened)\n twitterCard: z.string().optional(),\n twitterSite: z.string().optional(),\n twitterCreator: z.string().optional(),\n twitterTitle: z.string().optional(),\n twitterDescription: z.string().optional(),\n twitterImage: z.string().url().optional(),\n\n // iframe allowed\n isIframeAllowed: z.boolean().optional(),\n});\n\n/**\n * Options for controlling which metadata fields should be extracted.\n * Each property is a boolean flag that enables or disables extraction of specific metadata.\n * All fields default to true if not specified.\n *\n * @property title - Extract page title from title tag or meta title\n * @property description - Extract meta description content\n * @property language - Extract page language from html lang attribute\n * @property canonical - Extract canonical URL from link rel=\"canonical\"\n * @property robots - Extract robots directives from meta robots\n * @property author - Extract author information from meta author\n * @property keywords - Extract meta keywords and convert to array\n * @property favicon - Extract favicon URL from link rel=\"icon\" or similar\n * @property openGraph - Extract Open Graph metadata (og:* properties)\n * @property twitter - Extract Twitter Card metadata (twitter:* properties)\n *\n * @example\n * ```typescript\n * const options: MetadataOptions = {\n * title: true,\n * description: true,\n * language: true,\n * canonical: true,\n * robots: false,\n * author: true,\n * keywords: true,\n * favicon: true,\n * openGraph: true,\n * twitter: false\n * };\n * ```\n */\nexport type MetadataOptions = z.infer<typeof MetadataOptionsSchema>;\n\n/**\n * Represents all metadata that can be extracted from a webpage.\n * All fields are optional as they may not be present in every webpage.\n * The structure combines standard HTML metadata with social media metadata.\n *\n * @property title - Page title from title tag or meta title\n * @property description - Page description from meta description\n * @property language - Page language from html lang attribute\n * @property canonical - Canonical URL from link rel=\"canonical\"\n * @property robots - Robots directives from meta robots\n * @property author - Author information from meta author\n * @property keywords - Keywords array from meta keywords\n * @property lastModified - Last modified date from HTTP headers\n * @property favicon - Favicon URL from link rel=\"icon\" or similar\n * @property ogTitle - OpenGraph title from meta property=\"og:title\"\n * @property ogDescription - OpenGraph description from meta property=\"og:description\"\n * @property ogImage - OpenGraph image URL from meta property=\"og:image\"\n * @property ogUrl - OpenGraph URL from meta property=\"og:url\"\n * @property ogType - OpenGraph type from meta property=\"og:type\"\n * @property ogSiteName - OpenGraph site name from meta property=\"og:site_name\"\n * @property twitterCard - Twitter card type from meta name=\"twitter:card\"\n * @property twitterSite - Twitter site username from meta name=\"twitter:site\"\n * @property twitterCreator - Twitter creator username from meta name=\"twitter:creator\"\n * @property twitterTitle - Twitter title from meta name=\"twitter:title\"\n * @property twitterDescription - Twitter description from meta name=\"twitter:description\"\n * @property twitterImage - Twitter image URL from meta name=\"twitter:image\"\n *\n * @example\n * ```typescript\n * const metadata: PageMetadata = {\n * title: \"Example Website - Home Page\",\n * description: \"This is an example website demonstrating metadata extraction.\",\n * language: \"en\",\n * canonical: \"https://example.com/\",\n * robots: \"index, follow\",\n * author: \"John Doe\",\n * keywords: [\"example\", \"metadata\", \"extraction\"],\n * lastModified: \"2023-04-15T14:32:21Z\",\n * favicon: \"https://example.com/favicon.ico\",\n * ogTitle: \"Example Website\",\n * ogDescription: \"Learn about our services\",\n * ogImage: \"https://example.com/images/og-image.jpg\",\n * ogUrl: \"https://example.com/\",\n * ogType: \"website\",\n * ogSiteName: \"Example Website\",\n * twitterCard: \"summary_large_image\",\n * twitterSite: \"@examplesite\",\n * twitterCreator: \"@johndoe\",\n * twitterTitle: \"Example Website - Official Site\",\n * twitterDescription: \"The best example website on the internet\",\n * twitterImage: \"https://example.com/images/twitter-card.jpg\"\n * };\n * ```\n */\nexport type PageMetadata = z.infer<typeof PageMetadataSchema>;\n"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,SAAS;AAMX,IAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC1C,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAChD,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC7C,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC9C,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC3C,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC3C,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC7C,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC5C,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC9C,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC5C,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AACtD,CAAC;AAMM,IAAM,qBAAqB,EAAE,OAAO;AAAA;AAAA,EAEzC,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACrC,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA;AAAA,EAGnC,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjC,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAGhC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA;AAAA,EAGxC,iBAAiB,EAAE,QAAQ,EAAE,SAAS;AACxC,CAAC;","names":[]}