@flightdev/seo 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +403 -0
- package/dist/index.d.ts +282 -0
- package/dist/index.js +1239 -0
- package/dist/index.js.map +1 -0
- package/dist/json-ld/index.d.ts +341 -0
- package/dist/json-ld/index.js +82 -0
- package/dist/json-ld/index.js.map +1 -0
- package/dist/react/index.d.ts +161 -0
- package/dist/react/index.js +1300 -0
- package/dist/react/index.js.map +1 -0
- package/dist/robots/index.d.ts +105 -0
- package/dist/robots/index.js +186 -0
- package/dist/robots/index.js.map +1 -0
- package/dist/sitemap/index.d.ts +224 -0
- package/dist/sitemap/index.js +242 -0
- package/dist/sitemap/index.js.map +1 -0
- package/dist/solid/index.d.ts +50 -0
- package/dist/solid/index.js +1217 -0
- package/dist/solid/index.js.map +1 -0
- package/dist/svelte/index.d.ts +131 -0
- package/dist/svelte/index.js +1253 -0
- package/dist/svelte/index.js.map +1 -0
- package/dist/types-BBIMJIqz.d.ts +433 -0
- package/dist/vue/index.d.ts +130 -0
- package/dist/vue/index.js +1293 -0
- package/dist/vue/index.js.map +1 -0
- package/package.json +129 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/head.ts","../src/meta.ts","../src/opengraph.ts","../src/twitter.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * @flightdev/seo - Head Manager\r\n *\r\n * Server-side head management with tag deduplication,\r\n * ordering, and efficient rendering.\r\n *\r\n * Designed for SSR-first with O(1) deduplication.\r\n */\r\n\r\nimport type { HtmlTag, RenderedHead, Metadata } from './types.js';\r\n\r\n// ============================================================================\r\n// Constants\r\n// ============================================================================\r\n\r\n/**\r\n * Tag ordering priority (lower = earlier in head)\r\n */\r\nconst TAG_ORDER: Record<string, number> = {\r\n base: 0,\r\n charset: 1,\r\n 'http-equiv': 2,\r\n viewport: 3,\r\n title: 4,\r\n meta: 5,\r\n link: 6,\r\n script: 7,\r\n};\r\n\r\n/**\r\n * Self-closing tags (no closing tag needed)\r\n */\r\nconst VOID_TAGS = new Set(['meta', 'link', 'base']);\r\n\r\n/**\r\n * Attributes that should be rendered as boolean\r\n */\r\nconst BOOLEAN_ATTRS = new Set(['async', 'defer', 'nomodule', 'crossorigin']);\r\n\r\n// ============================================================================\r\n// Tag Key Generation\r\n// ============================================================================\r\n\r\n/**\r\n * Generate a unique key for a tag for deduplication\r\n */\r\nfunction generateTagKey(tag: HtmlTag): string {\r\n if (tag.key) {\r\n return tag.key;\r\n }\r\n\r\n const attrs = tag.attrs || {};\r\n\r\n switch (tag.tag) {\r\n case 'title':\r\n return 'title';\r\n\r\n case 'base':\r\n return 'base';\r\n\r\n case 'meta': {\r\n // Dedupe by name, property, or http-equiv\r\n if (attrs.charset) return 'meta:charset';\r\n if (attrs.name) return `meta:name:${attrs.name}`;\r\n if (attrs.property) return `meta:property:${attrs.property}`;\r\n if (attrs['http-equiv']) return `meta:http-equiv:${attrs['http-equiv']}`;\r\n return `meta:${JSON.stringify(attrs)}`;\r\n }\r\n\r\n case 'link': {\r\n // Dedupe by rel + href or rel alone for canonical\r\n if (attrs.rel === 'canonical') return 'link:canonical';\r\n if (attrs.rel === 'manifest') return 'link:manifest';\r\n if (attrs.rel && attrs.href) return `link:${attrs.rel}:${attrs.href}`;\r\n if (attrs.rel && attrs.hreflang) return `link:${attrs.rel}:${attrs.hreflang}`;\r\n return `link:${JSON.stringify(attrs)}`;\r\n }\r\n\r\n case 'script': {\r\n if (attrs.type === 'application/ld+json' && attrs.id) {\r\n return `script:json-ld:${attrs.id}`;\r\n }\r\n if (attrs.src) return `script:${attrs.src}`;\r\n return `script:${JSON.stringify(attrs)}`;\r\n }\r\n\r\n default:\r\n return `${tag.tag}:${JSON.stringify(attrs)}`;\r\n }\r\n}\r\n\r\n/**\r\n * Get sort order for a tag\r\n */\r\nfunction getTagOrder(tag: HtmlTag): number {\r\n const attrs = tag.attrs || {};\r\n\r\n if (tag.tag === 'meta') {\r\n if (attrs.charset) return TAG_ORDER.charset;\r\n if (attrs['http-equiv']) return TAG_ORDER['http-equiv'];\r\n if (attrs.name === 'viewport') return TAG_ORDER.viewport;\r\n }\r\n\r\n return TAG_ORDER[tag.tag] ?? 99;\r\n}\r\n\r\n// ============================================================================\r\n// Head Manager\r\n// ============================================================================\r\n\r\n/**\r\n * Head Manager for SSR\r\n *\r\n * Manages head tags with:\r\n * - O(1) deduplication using Map\r\n * - Deterministic ordering\r\n * - Efficient string concatenation\r\n */\r\nexport class HeadManager {\r\n private tags: Map<string, HtmlTag> = new Map();\r\n private frozen: boolean = false;\r\n\r\n /**\r\n * Add a tag to the head\r\n */\r\n addTag(tag: HtmlTag): this {\r\n if (this.frozen) {\r\n throw new Error('HeadManager is frozen and cannot be modified');\r\n }\r\n\r\n const key = generateTagKey(tag);\r\n this.tags.set(key, { ...tag, key });\r\n return this;\r\n }\r\n\r\n /**\r\n * Add multiple tags\r\n */\r\n addTags(tags: HtmlTag[]): this {\r\n for (const tag of tags) {\r\n this.addTag(tag);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a tag by key\r\n */\r\n removeTag(key: string): this {\r\n if (this.frozen) {\r\n throw new Error('HeadManager is frozen and cannot be modified');\r\n }\r\n\r\n this.tags.delete(key);\r\n return this;\r\n }\r\n\r\n /**\r\n * Check if a tag exists\r\n */\r\n hasTag(key: string): boolean {\r\n return this.tags.has(key);\r\n }\r\n\r\n /**\r\n * Get a tag by key\r\n */\r\n getTag(key: string): HtmlTag | undefined {\r\n return this.tags.get(key);\r\n }\r\n\r\n /**\r\n * Get all tags\r\n */\r\n getTags(): HtmlTag[] {\r\n return Array.from(this.tags.values());\r\n }\r\n\r\n /**\r\n * Clear all tags\r\n */\r\n clear(): this {\r\n if (this.frozen) {\r\n throw new Error('HeadManager is frozen and cannot be modified');\r\n }\r\n\r\n this.tags.clear();\r\n return this;\r\n }\r\n\r\n /**\r\n * Freeze the manager (no more modifications)\r\n */\r\n freeze(): this {\r\n this.frozen = true;\r\n return this;\r\n }\r\n\r\n /**\r\n * Check if frozen\r\n */\r\n isFrozen(): boolean {\r\n return this.frozen;\r\n }\r\n\r\n /**\r\n * Render all tags to HTML\r\n */\r\n render(): RenderedHead {\r\n const tags = this.getTags();\r\n\r\n // Sort tags by priority\r\n tags.sort((a, b) => getTagOrder(a) - getTagOrder(b));\r\n\r\n // Render to HTML\r\n const html = tags.map(tag => renderTag(tag)).join('\\n');\r\n\r\n return { tags, html };\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Tag Rendering\r\n// ============================================================================\r\n\r\n/**\r\n * Escape HTML special characters\r\n */\r\nfunction escapeHtml(str: string): string {\r\n return str\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"');\r\n}\r\n\r\n/**\r\n * Escape attribute value\r\n */\r\nfunction escapeAttr(str: string): string {\r\n return str.replace(/\"/g, '"');\r\n}\r\n\r\n/**\r\n * Render a single tag to HTML\r\n */\r\nexport function renderTag(tag: HtmlTag): string {\r\n const parts: string[] = [`<${tag.tag}`];\r\n\r\n // Render attributes\r\n if (tag.attrs) {\r\n for (const [key, value] of Object.entries(tag.attrs)) {\r\n if (value === undefined || value === false) {\r\n continue;\r\n }\r\n\r\n if (value === true) {\r\n parts.push(` ${key}`);\r\n } else if (BOOLEAN_ATTRS.has(key) && value === '') {\r\n parts.push(` ${key}`);\r\n } else {\r\n parts.push(` ${key}=\"${escapeAttr(String(value))}\"`);\r\n }\r\n }\r\n }\r\n\r\n // Self-closing or with content\r\n if (VOID_TAGS.has(tag.tag)) {\r\n parts.push(' />');\r\n } else if (tag.content !== undefined) {\r\n // For script tags with JSON-LD, we don't escape the content\r\n const isJsonLd = tag.tag === 'script' && tag.attrs?.type === 'application/ld+json';\r\n const content = isJsonLd ? tag.content : escapeHtml(tag.content);\r\n parts.push(`>${content}</${tag.tag}>`);\r\n } else {\r\n parts.push(`></${tag.tag}>`);\r\n }\r\n\r\n return parts.join('');\r\n}\r\n\r\n/**\r\n * Render multiple tags to HTML\r\n */\r\nexport function renderTags(tags: HtmlTag[]): string {\r\n return tags.map(tag => renderTag(tag)).join('\\n');\r\n}\r\n\r\n// ============================================================================\r\n// Factory Function\r\n// ============================================================================\r\n\r\n/**\r\n * Create a new HeadManager instance\r\n */\r\nexport function createHeadManager(): HeadManager {\r\n return new HeadManager();\r\n}\r\n\r\n// ============================================================================\r\n// SSR Context\r\n// ============================================================================\r\n\r\n/**\r\n * SSR head context for passing data between components\r\n */\r\nexport interface HeadContext {\r\n manager: HeadManager;\r\n metadata: Metadata;\r\n}\r\n\r\n/**\r\n * Global head context for SSR (set per request)\r\n */\r\nlet currentHeadContext: HeadContext | null = null;\r\n\r\n/**\r\n * Set the current head context (call at request start)\r\n */\r\nexport function setHeadContext(context: HeadContext): void {\r\n currentHeadContext = context;\r\n}\r\n\r\n/**\r\n * Get the current head context\r\n */\r\nexport function getHeadContext(): HeadContext | null {\r\n return currentHeadContext;\r\n}\r\n\r\n/**\r\n * Clear the current head context (call at request end)\r\n */\r\nexport function clearHeadContext(): void {\r\n currentHeadContext = null;\r\n}\r\n\r\n/**\r\n * Run a function with a head context\r\n */\r\nexport function withHeadContext<T>(context: HeadContext, fn: () => T): T {\r\n const previous = currentHeadContext;\r\n currentHeadContext = context;\r\n try {\r\n return fn();\r\n } finally {\r\n currentHeadContext = previous;\r\n }\r\n}\r\n","/**\r\n * @flightdev/seo - Meta Tag Generation\r\n *\r\n * Generates meta tags from Metadata configuration.\r\n * Handles basic meta, robots, viewport, and verification tags.\r\n */\r\n\r\nimport type { HtmlTag, Metadata, RobotsMeta, VerificationMeta } from './types.js';\r\n\r\n// ============================================================================\r\n// Basic Meta Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate title tag\r\n */\r\nexport function generateTitleTag(\r\n title: string | undefined,\r\n template?: string,\r\n defaultTitle?: string\r\n): HtmlTag | null {\r\n let resolvedTitle = title || defaultTitle;\r\n\r\n if (!resolvedTitle) {\r\n return null;\r\n }\r\n\r\n if (template && title) {\r\n resolvedTitle = template.replace('%s', title);\r\n }\r\n\r\n return {\r\n tag: 'title',\r\n content: resolvedTitle,\r\n key: 'title',\r\n };\r\n}\r\n\r\n/**\r\n * Generate charset meta tag\r\n */\r\nexport function generateCharsetTag(charset: string = 'utf-8'): HtmlTag {\r\n return {\r\n tag: 'meta',\r\n attrs: { charset },\r\n key: 'meta:charset',\r\n };\r\n}\r\n\r\n/**\r\n * Generate viewport meta tag\r\n */\r\nexport function generateViewportTag(\r\n viewport: Metadata['viewport']\r\n): HtmlTag | null {\r\n if (!viewport) {\r\n return null;\r\n }\r\n\r\n let content: string;\r\n\r\n if (typeof viewport === 'string') {\r\n content = viewport;\r\n } else {\r\n const parts: string[] = [];\r\n\r\n if (viewport.width !== undefined) {\r\n parts.push(`width=${viewport.width}`);\r\n }\r\n if (viewport.height !== undefined) {\r\n parts.push(`height=${viewport.height}`);\r\n }\r\n if (viewport.initialScale !== undefined) {\r\n parts.push(`initial-scale=${viewport.initialScale}`);\r\n }\r\n if (viewport.minimumScale !== undefined) {\r\n parts.push(`minimum-scale=${viewport.minimumScale}`);\r\n }\r\n if (viewport.maximumScale !== undefined) {\r\n parts.push(`maximum-scale=${viewport.maximumScale}`);\r\n }\r\n if (viewport.userScalable !== undefined) {\r\n parts.push(`user-scalable=${viewport.userScalable ? 'yes' : 'no'}`);\r\n }\r\n if (viewport.viewportFit !== undefined) {\r\n parts.push(`viewport-fit=${viewport.viewportFit}`);\r\n }\r\n\r\n content = parts.join(', ');\r\n }\r\n\r\n if (!content) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: 'viewport', content },\r\n key: 'meta:name:viewport',\r\n };\r\n}\r\n\r\n/**\r\n * Generate description meta tag\r\n */\r\nexport function generateDescriptionTag(description: string | undefined): HtmlTag | null {\r\n if (!description) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: 'description', content: description },\r\n key: 'meta:name:description',\r\n };\r\n}\r\n\r\n/**\r\n * Generate keywords meta tag\r\n */\r\nexport function generateKeywordsTag(keywords: string | string[] | undefined): HtmlTag | null {\r\n if (!keywords) {\r\n return null;\r\n }\r\n\r\n const content = Array.isArray(keywords) ? keywords.join(', ') : keywords;\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: 'keywords', content },\r\n key: 'meta:name:keywords',\r\n };\r\n}\r\n\r\n/**\r\n * Generate author meta tag\r\n */\r\nexport function generateAuthorTag(author: string | undefined): HtmlTag | null {\r\n if (!author) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: 'author', content: author },\r\n key: 'meta:name:author',\r\n };\r\n}\r\n\r\n/**\r\n * Generate generator meta tag\r\n */\r\nexport function generateGeneratorTag(generator: string | undefined): HtmlTag | null {\r\n if (!generator) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: 'generator', content: generator },\r\n key: 'meta:name:generator',\r\n };\r\n}\r\n\r\n/**\r\n * Generate application name meta tag\r\n */\r\nexport function generateApplicationNameTag(name: string | undefined): HtmlTag | null {\r\n if (!name) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: 'application-name', content: name },\r\n key: 'meta:name:application-name',\r\n };\r\n}\r\n\r\n/**\r\n * Generate referrer meta tag\r\n */\r\nexport function generateReferrerTag(referrer: Metadata['referrer']): HtmlTag | null {\r\n if (!referrer) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: 'referrer', content: referrer },\r\n key: 'meta:name:referrer',\r\n };\r\n}\r\n\r\n/**\r\n * Generate theme-color meta tag(s)\r\n */\r\nexport function generateThemeColorTags(\r\n themeColor: Metadata['themeColor']\r\n): HtmlTag[] {\r\n if (!themeColor) {\r\n return [];\r\n }\r\n\r\n if (typeof themeColor === 'string') {\r\n return [\r\n {\r\n tag: 'meta',\r\n attrs: { name: 'theme-color', content: themeColor },\r\n key: 'meta:name:theme-color',\r\n },\r\n ];\r\n }\r\n\r\n return themeColor.map((tc, index) => ({\r\n tag: 'meta' as const,\r\n attrs: {\r\n name: 'theme-color',\r\n content: tc.color,\r\n media: tc.media,\r\n },\r\n key: `meta:name:theme-color:${index}`,\r\n }));\r\n}\r\n\r\n/**\r\n * Generate color-scheme meta tag\r\n */\r\nexport function generateColorSchemeTag(colorScheme: Metadata['colorScheme']): HtmlTag | null {\r\n if (!colorScheme) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: 'color-scheme', content: colorScheme },\r\n key: 'meta:name:color-scheme',\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Robots Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Convert RobotsMeta to content string\r\n */\r\nfunction robotsMetaToString(robots: RobotsMeta): string {\r\n const directives: string[] = [];\r\n\r\n if (robots.index === false) {\r\n directives.push('noindex');\r\n } else if (robots.index === true) {\r\n directives.push('index');\r\n }\r\n\r\n if (robots.follow === false) {\r\n directives.push('nofollow');\r\n } else if (robots.follow === true) {\r\n directives.push('follow');\r\n }\r\n\r\n if (robots.noarchive) {\r\n directives.push('noarchive');\r\n }\r\n\r\n if (robots.nosnippet) {\r\n directives.push('nosnippet');\r\n }\r\n\r\n if (robots.notranslate) {\r\n directives.push('notranslate');\r\n }\r\n\r\n if (robots.maxSnippet !== undefined) {\r\n directives.push(`max-snippet:${robots.maxSnippet}`);\r\n }\r\n\r\n if (robots.maxImagePreview !== undefined) {\r\n directives.push(`max-image-preview:${robots.maxImagePreview}`);\r\n }\r\n\r\n if (robots.maxVideoPreview !== undefined) {\r\n directives.push(`max-video-preview:${robots.maxVideoPreview}`);\r\n }\r\n\r\n if (robots.unavailableAfter) {\r\n directives.push(`unavailable_after:${robots.unavailableAfter}`);\r\n }\r\n\r\n return directives.join(', ');\r\n}\r\n\r\n/**\r\n * Generate robots meta tag\r\n */\r\nexport function generateRobotsTag(robots: Metadata['robots']): HtmlTag | null {\r\n if (!robots) {\r\n return null;\r\n }\r\n\r\n const content = typeof robots === 'string' ? robots : robotsMetaToString(robots);\r\n\r\n if (!content) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: 'robots', content },\r\n key: 'meta:name:robots',\r\n };\r\n}\r\n\r\n/**\r\n * Generate googlebot meta tag\r\n */\r\nexport function generateGooglebotTag(googleBot: Metadata['googleBot']): HtmlTag | null {\r\n if (!googleBot) {\r\n return null;\r\n }\r\n\r\n const content = typeof googleBot === 'string' ? googleBot : robotsMetaToString(googleBot);\r\n\r\n if (!content) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: 'googlebot', content },\r\n key: 'meta:name:googlebot',\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Verification Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate verification meta tags\r\n */\r\nexport function generateVerificationTags(verification: VerificationMeta | undefined): HtmlTag[] {\r\n if (!verification) {\r\n return [];\r\n }\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n if (verification.google) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: 'google-site-verification', content: verification.google },\r\n key: 'meta:name:google-site-verification',\r\n });\r\n }\r\n\r\n if (verification.bing) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: 'msvalidate.01', content: verification.bing },\r\n key: 'meta:name:msvalidate.01',\r\n });\r\n }\r\n\r\n if (verification.yandex) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: 'yandex-verification', content: verification.yandex },\r\n key: 'meta:name:yandex-verification',\r\n });\r\n }\r\n\r\n if (verification.pinterest) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: 'p:domain_verify', content: verification.pinterest },\r\n key: 'meta:name:p:domain_verify',\r\n });\r\n }\r\n\r\n if (verification.norton) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: 'norton-safeweb-site-verification', content: verification.norton },\r\n key: 'meta:name:norton-safeweb-site-verification',\r\n });\r\n }\r\n\r\n return tags;\r\n}\r\n\r\n// ============================================================================\r\n// Link Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate canonical link tag\r\n */\r\nexport function generateCanonicalTag(canonical: string | undefined): HtmlTag | null {\r\n if (!canonical) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'link',\r\n attrs: { rel: 'canonical', href: canonical },\r\n key: 'link:canonical',\r\n };\r\n}\r\n\r\n/**\r\n * Generate base tag\r\n */\r\nexport function generateBaseTag(base: string | undefined): HtmlTag | null {\r\n if (!base) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'base',\r\n attrs: { href: base },\r\n key: 'base',\r\n };\r\n}\r\n\r\n/**\r\n * Generate alternate link tags\r\n */\r\nexport function generateAlternateTags(alternates: Metadata['alternates']): HtmlTag[] {\r\n if (!alternates || alternates.length === 0) {\r\n return [];\r\n }\r\n\r\n return alternates.map((alt, index) => {\r\n const attrs: Record<string, string> = {\r\n rel: 'alternate',\r\n href: alt.href,\r\n };\r\n\r\n if (alt.hreflang) {\r\n attrs.hreflang = alt.hreflang;\r\n }\r\n if (alt.media) {\r\n attrs.media = alt.media;\r\n }\r\n if (alt.type) {\r\n attrs.type = alt.type;\r\n }\r\n if (alt.title) {\r\n attrs.title = alt.title;\r\n }\r\n\r\n return {\r\n tag: 'link' as const,\r\n attrs,\r\n key: `link:alternate:${alt.hreflang || index}`,\r\n };\r\n });\r\n}\r\n\r\n/**\r\n * Generate manifest link tag\r\n */\r\nexport function generateManifestTag(manifest: string | undefined): HtmlTag | null {\r\n if (!manifest) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'link',\r\n attrs: { rel: 'manifest', href: manifest },\r\n key: 'link:manifest',\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// All Meta Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate all basic meta tags from Metadata\r\n */\r\nexport function generateMetaTags(\r\n metadata: Metadata,\r\n options?: { titleTemplate?: string; defaultTitle?: string }\r\n): HtmlTag[] {\r\n const tags: HtmlTag[] = [];\r\n\r\n // Charset (always first)\r\n tags.push(generateCharsetTag(metadata.charset));\r\n\r\n // Base\r\n const base = generateBaseTag(metadata.base);\r\n if (base) tags.push(base);\r\n\r\n // Viewport\r\n const viewport = generateViewportTag(metadata.viewport);\r\n if (viewport) tags.push(viewport);\r\n\r\n // Title\r\n const title = generateTitleTag(\r\n metadata.title,\r\n metadata.titleTemplate || options?.titleTemplate,\r\n metadata.defaultTitle || options?.defaultTitle\r\n );\r\n if (title) tags.push(title);\r\n\r\n // Description\r\n const description = generateDescriptionTag(metadata.description);\r\n if (description) tags.push(description);\r\n\r\n // Keywords\r\n const keywords = generateKeywordsTag(metadata.keywords);\r\n if (keywords) tags.push(keywords);\r\n\r\n // Author\r\n const author = generateAuthorTag(metadata.author);\r\n if (author) tags.push(author);\r\n\r\n // Generator\r\n const generator = generateGeneratorTag(metadata.generator);\r\n if (generator) tags.push(generator);\r\n\r\n // Application name\r\n const appName = generateApplicationNameTag(metadata.applicationName);\r\n if (appName) tags.push(appName);\r\n\r\n // Referrer\r\n const referrer = generateReferrerTag(metadata.referrer);\r\n if (referrer) tags.push(referrer);\r\n\r\n // Theme color\r\n tags.push(...generateThemeColorTags(metadata.themeColor));\r\n\r\n // Color scheme\r\n const colorScheme = generateColorSchemeTag(metadata.colorScheme);\r\n if (colorScheme) tags.push(colorScheme);\r\n\r\n // Robots\r\n const robots = generateRobotsTag(metadata.robots);\r\n if (robots) tags.push(robots);\r\n\r\n // Googlebot\r\n const googleBot = generateGooglebotTag(metadata.googleBot);\r\n if (googleBot) tags.push(googleBot);\r\n\r\n // Verification\r\n tags.push(...generateVerificationTags(metadata.verification));\r\n\r\n // Canonical\r\n const canonical = generateCanonicalTag(metadata.canonical);\r\n if (canonical) tags.push(canonical);\r\n\r\n // Alternates\r\n tags.push(...generateAlternateTags(metadata.alternates));\r\n\r\n // Manifest\r\n const manifest = generateManifestTag(metadata.manifest);\r\n if (manifest) tags.push(manifest);\r\n\r\n // Custom meta tags\r\n if (metadata.other) {\r\n for (const [name, content] of Object.entries(metadata.other)) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name, content },\r\n key: `meta:name:${name}`,\r\n });\r\n }\r\n }\r\n\r\n return tags;\r\n}\r\n","/**\r\n * @flightdev/seo - Open Graph Tags\r\n *\r\n * Generates Open Graph protocol meta tags for rich social sharing.\r\n * Supports all OG types: website, article, product, profile, etc.\r\n */\r\n\r\nimport type { HtmlTag, OpenGraphMeta, OpenGraphImage, OpenGraphVideo, OpenGraphAudio } from './types.js';\r\n\r\n// ============================================================================\r\n// Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Create an OG meta tag\r\n */\r\nfunction ogTag(property: string, content: string | number | undefined): HtmlTag | null {\r\n if (content === undefined || content === null || content === '') {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { property: `og:${property}`, content: String(content) },\r\n key: `meta:property:og:${property}`,\r\n };\r\n}\r\n\r\n/**\r\n * Create an article meta tag\r\n */\r\nfunction articleTag(property: string, content: string | undefined): HtmlTag | null {\r\n if (!content) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { property: `article:${property}`, content },\r\n key: `meta:property:article:${property}`,\r\n };\r\n}\r\n\r\n/**\r\n * Create a profile meta tag\r\n */\r\nfunction profileTag(property: string, content: string | undefined): HtmlTag | null {\r\n if (!content) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { property: `profile:${property}`, content },\r\n key: `meta:property:profile:${property}`,\r\n };\r\n}\r\n\r\n/**\r\n * Create a book meta tag\r\n */\r\nfunction bookTag(property: string, content: string | undefined): HtmlTag | null {\r\n if (!content) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { property: `book:${property}`, content },\r\n key: `meta:property:book:${property}`,\r\n };\r\n}\r\n\r\n/**\r\n * Create a product meta tag\r\n */\r\nfunction productTag(property: string, content: string | number | undefined): HtmlTag | null {\r\n if (content === undefined || content === null || content === '') {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { property: `product:${property}`, content: String(content) },\r\n key: `meta:property:product:${property}`,\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Image Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate OG image tags\r\n */\r\nfunction generateImageTags(images: OpenGraphImage[] | undefined): HtmlTag[] {\r\n if (!images || images.length === 0) {\r\n return [];\r\n }\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n images.forEach((image, index) => {\r\n const suffix = index > 0 ? `:${index}` : '';\r\n\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:image', content: image.url },\r\n key: `meta:property:og:image${suffix}`,\r\n });\r\n\r\n if (image.secureUrl) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:image:secure_url', content: image.secureUrl },\r\n key: `meta:property:og:image:secure_url${suffix}`,\r\n });\r\n }\r\n\r\n if (image.type) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:image:type', content: image.type },\r\n key: `meta:property:og:image:type${suffix}`,\r\n });\r\n }\r\n\r\n if (image.width) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:image:width', content: String(image.width) },\r\n key: `meta:property:og:image:width${suffix}`,\r\n });\r\n }\r\n\r\n if (image.height) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:image:height', content: String(image.height) },\r\n key: `meta:property:og:image:height${suffix}`,\r\n });\r\n }\r\n\r\n if (image.alt) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:image:alt', content: image.alt },\r\n key: `meta:property:og:image:alt${suffix}`,\r\n });\r\n }\r\n });\r\n\r\n return tags;\r\n}\r\n\r\n// ============================================================================\r\n// Video Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate OG video tags\r\n */\r\nfunction generateVideoTags(videos: OpenGraphVideo[] | undefined): HtmlTag[] {\r\n if (!videos || videos.length === 0) {\r\n return [];\r\n }\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n videos.forEach((video, index) => {\r\n const suffix = index > 0 ? `:${index}` : '';\r\n\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:video', content: video.url },\r\n key: `meta:property:og:video${suffix}`,\r\n });\r\n\r\n if (video.secureUrl) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:video:secure_url', content: video.secureUrl },\r\n key: `meta:property:og:video:secure_url${suffix}`,\r\n });\r\n }\r\n\r\n if (video.type) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:video:type', content: video.type },\r\n key: `meta:property:og:video:type${suffix}`,\r\n });\r\n }\r\n\r\n if (video.width) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:video:width', content: String(video.width) },\r\n key: `meta:property:og:video:width${suffix}`,\r\n });\r\n }\r\n\r\n if (video.height) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:video:height', content: String(video.height) },\r\n key: `meta:property:og:video:height${suffix}`,\r\n });\r\n }\r\n });\r\n\r\n return tags;\r\n}\r\n\r\n// ============================================================================\r\n// Audio Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate OG audio tags\r\n */\r\nfunction generateAudioTags(audio: OpenGraphAudio[] | undefined): HtmlTag[] {\r\n if (!audio || audio.length === 0) {\r\n return [];\r\n }\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n audio.forEach((a, index) => {\r\n const suffix = index > 0 ? `:${index}` : '';\r\n\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:audio', content: a.url },\r\n key: `meta:property:og:audio${suffix}`,\r\n });\r\n\r\n if (a.secureUrl) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:audio:secure_url', content: a.secureUrl },\r\n key: `meta:property:og:audio:secure_url${suffix}`,\r\n });\r\n }\r\n\r\n if (a.type) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:audio:type', content: a.type },\r\n key: `meta:property:og:audio:type${suffix}`,\r\n });\r\n }\r\n });\r\n\r\n return tags;\r\n}\r\n\r\n// ============================================================================\r\n// Article Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate article-specific OG tags\r\n */\r\nfunction generateArticleTags(article: OpenGraphMeta['article']): HtmlTag[] {\r\n if (!article) {\r\n return [];\r\n }\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n const publishedTime = articleTag('published_time', article.publishedTime);\r\n if (publishedTime) tags.push(publishedTime);\r\n\r\n const modifiedTime = articleTag('modified_time', article.modifiedTime);\r\n if (modifiedTime) tags.push(modifiedTime);\r\n\r\n const expirationTime = articleTag('expiration_time', article.expirationTime);\r\n if (expirationTime) tags.push(expirationTime);\r\n\r\n const section = articleTag('section', article.section);\r\n if (section) tags.push(section);\r\n\r\n if (article.authors) {\r\n article.authors.forEach((author, index) => {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'article:author', content: author },\r\n key: `meta:property:article:author:${index}`,\r\n });\r\n });\r\n }\r\n\r\n if (article.tags) {\r\n article.tags.forEach((tag, index) => {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'article:tag', content: tag },\r\n key: `meta:property:article:tag:${index}`,\r\n });\r\n });\r\n }\r\n\r\n return tags;\r\n}\r\n\r\n// ============================================================================\r\n// Profile Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate profile-specific OG tags\r\n */\r\nfunction generateProfileTags(profile: OpenGraphMeta['profile']): HtmlTag[] {\r\n if (!profile) {\r\n return [];\r\n }\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n const firstName = profileTag('first_name', profile.firstName);\r\n if (firstName) tags.push(firstName);\r\n\r\n const lastName = profileTag('last_name', profile.lastName);\r\n if (lastName) tags.push(lastName);\r\n\r\n const username = profileTag('username', profile.username);\r\n if (username) tags.push(username);\r\n\r\n const gender = profileTag('gender', profile.gender);\r\n if (gender) tags.push(gender);\r\n\r\n return tags;\r\n}\r\n\r\n// ============================================================================\r\n// Book Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate book-specific OG tags\r\n */\r\nfunction generateBookTags(book: OpenGraphMeta['book']): HtmlTag[] {\r\n if (!book) {\r\n return [];\r\n }\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n if (book.authors) {\r\n book.authors.forEach((author, index) => {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'book:author', content: author },\r\n key: `meta:property:book:author:${index}`,\r\n });\r\n });\r\n }\r\n\r\n const isbn = bookTag('isbn', book.isbn);\r\n if (isbn) tags.push(isbn);\r\n\r\n const releaseDate = bookTag('release_date', book.releaseDate);\r\n if (releaseDate) tags.push(releaseDate);\r\n\r\n if (book.tags) {\r\n book.tags.forEach((tag, index) => {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'book:tag', content: tag },\r\n key: `meta:property:book:tag:${index}`,\r\n });\r\n });\r\n }\r\n\r\n return tags;\r\n}\r\n\r\n// ============================================================================\r\n// Product Tags\r\n// ============================================================================\r\n\r\n/**\r\n * Generate product-specific OG tags\r\n */\r\nfunction generateProductTags(product: OpenGraphMeta['product']): HtmlTag[] {\r\n if (!product) {\r\n return [];\r\n }\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n const price = productTag('price:amount', product.priceAmount);\r\n if (price) tags.push(price);\r\n\r\n const currency = productTag('price:currency', product.priceCurrency);\r\n if (currency) tags.push(currency);\r\n\r\n const availability = productTag('availability', product.availability);\r\n if (availability) tags.push(availability);\r\n\r\n const condition = productTag('condition', product.condition);\r\n if (condition) tags.push(condition);\r\n\r\n const retailerId = productTag('retailer_item_id', product.retailerItemId);\r\n if (retailerId) tags.push(retailerId);\r\n\r\n return tags;\r\n}\r\n\r\n// ============================================================================\r\n// Main Function\r\n// ============================================================================\r\n\r\n/**\r\n * Generate all Open Graph meta tags\r\n */\r\nexport function generateOpenGraphTags(og: OpenGraphMeta | undefined): HtmlTag[] {\r\n if (!og) {\r\n return [];\r\n }\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n // Basic properties\r\n const type = ogTag('type', og.type || 'website');\r\n if (type) tags.push(type);\r\n\r\n const title = ogTag('title', og.title);\r\n if (title) tags.push(title);\r\n\r\n const description = ogTag('description', og.description);\r\n if (description) tags.push(description);\r\n\r\n const url = ogTag('url', og.url);\r\n if (url) tags.push(url);\r\n\r\n const siteName = ogTag('site_name', og.siteName);\r\n if (siteName) tags.push(siteName);\r\n\r\n const locale = ogTag('locale', og.locale);\r\n if (locale) tags.push(locale);\r\n\r\n // Alternate locales\r\n if (og.alternateLocales) {\r\n og.alternateLocales.forEach((alternateLocale, index) => {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { property: 'og:locale:alternate', content: alternateLocale },\r\n key: `meta:property:og:locale:alternate:${index}`,\r\n });\r\n });\r\n }\r\n\r\n const determiner = ogTag('determiner', og.determiner);\r\n if (determiner) tags.push(determiner);\r\n\r\n // Media\r\n tags.push(...generateImageTags(og.images));\r\n tags.push(...generateVideoTags(og.videos));\r\n tags.push(...generateAudioTags(og.audio));\r\n\r\n // Type-specific\r\n tags.push(...generateArticleTags(og.article));\r\n tags.push(...generateProfileTags(og.profile));\r\n tags.push(...generateBookTags(og.book));\r\n tags.push(...generateProductTags(og.product));\r\n\r\n return tags;\r\n}\r\n\r\n/**\r\n * Generate minimal Open Graph tags (for fallback from metadata)\r\n */\r\nexport function generateOpenGraphFallback(\r\n title: string | undefined,\r\n description: string | undefined,\r\n url: string | undefined\r\n): HtmlTag[] {\r\n const tags: HtmlTag[] = [];\r\n\r\n const typeTag = ogTag('type', 'website');\r\n if (typeTag) tags.push(typeTag);\r\n\r\n const titleTag = ogTag('title', title);\r\n if (titleTag) tags.push(titleTag);\r\n\r\n const descTag = ogTag('description', description);\r\n if (descTag) tags.push(descTag);\r\n\r\n const urlTag = ogTag('url', url);\r\n if (urlTag) tags.push(urlTag);\r\n\r\n return tags;\r\n}\r\n","/**\r\n * @flightdev/seo - Twitter Card Tags\r\n *\r\n * Generates Twitter Card meta tags for rich Twitter sharing.\r\n * Supports summary, summary_large_image, app, and player cards.\r\n */\r\n\r\nimport type { HtmlTag, TwitterCardMeta, TwitterCardImage } from './types.js';\r\n\r\n// ============================================================================\r\n// Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Create a Twitter meta tag\r\n */\r\nfunction twitterTag(name: string, content: string | undefined): HtmlTag | null {\r\n if (!content) {\r\n return null;\r\n }\r\n\r\n return {\r\n tag: 'meta',\r\n attrs: { name: `twitter:${name}`, content },\r\n key: `meta:name:twitter:${name}`,\r\n };\r\n}\r\n\r\n/**\r\n * Normalize image to TwitterCardImage\r\n */\r\nfunction normalizeImage(image: TwitterCardImage | string | undefined): TwitterCardImage | undefined {\r\n if (!image) {\r\n return undefined;\r\n }\r\n\r\n if (typeof image === 'string') {\r\n return { url: image };\r\n }\r\n\r\n return image;\r\n}\r\n\r\n// ============================================================================\r\n// Main Function\r\n// ============================================================================\r\n\r\n/**\r\n * Generate all Twitter Card meta tags\r\n */\r\nexport function generateTwitterTags(twitter: TwitterCardMeta | undefined): HtmlTag[] {\r\n if (!twitter) {\r\n return [];\r\n }\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n // Card type (default to summary)\r\n const card = twitterTag('card', twitter.card || 'summary');\r\n if (card) tags.push(card);\r\n\r\n // Basic properties\r\n const title = twitterTag('title', twitter.title);\r\n if (title) tags.push(title);\r\n\r\n const description = twitterTag('description', twitter.description);\r\n if (description) tags.push(description);\r\n\r\n // Site and creator\r\n const site = twitterTag('site', twitter.site);\r\n if (site) tags.push(site);\r\n\r\n const siteId = twitterTag('site:id', twitter.siteId);\r\n if (siteId) tags.push(siteId);\r\n\r\n const creator = twitterTag('creator', twitter.creator);\r\n if (creator) tags.push(creator);\r\n\r\n const creatorId = twitterTag('creator:id', twitter.creatorId);\r\n if (creatorId) tags.push(creatorId);\r\n\r\n // Image\r\n const image = normalizeImage(twitter.image);\r\n if (image) {\r\n const imageTag = twitterTag('image', image.url);\r\n if (imageTag) tags.push(imageTag);\r\n\r\n if (image.alt) {\r\n const imageAlt = twitterTag('image:alt', image.alt);\r\n if (imageAlt) tags.push(imageAlt);\r\n }\r\n }\r\n\r\n // Additional images\r\n if (twitter.images && twitter.images.length > 0) {\r\n twitter.images.forEach((img, index) => {\r\n // Twitter supports up to 4 images for summary_large_image\r\n if (index >= 4) return;\r\n\r\n const normalizedImg = typeof img === 'string' ? { url: img } : img;\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: `twitter:image${index}`, content: normalizedImg.url },\r\n key: `meta:name:twitter:image${index}`,\r\n });\r\n\r\n if (normalizedImg.alt) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: `twitter:image${index}:alt`, content: normalizedImg.alt },\r\n key: `meta:name:twitter:image${index}:alt`,\r\n });\r\n }\r\n });\r\n }\r\n\r\n // Player card\r\n if (twitter.player) {\r\n const playerUrl = twitterTag('player', twitter.player.url);\r\n if (playerUrl) tags.push(playerUrl);\r\n\r\n const playerWidth = twitterTag('player:width', String(twitter.player.width));\r\n if (playerWidth) tags.push(playerWidth);\r\n\r\n const playerHeight = twitterTag('player:height', String(twitter.player.height));\r\n if (playerHeight) tags.push(playerHeight);\r\n\r\n if (twitter.player.stream) {\r\n const stream = twitterTag('player:stream', twitter.player.stream);\r\n if (stream) tags.push(stream);\r\n }\r\n }\r\n\r\n // App card\r\n if (twitter.app) {\r\n const appName = twitterTag('app:name:iphone', twitter.app.name);\r\n if (appName) tags.push(appName);\r\n\r\n // Also add for other platforms\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: 'twitter:app:name:ipad', content: twitter.app.name },\r\n key: 'meta:name:twitter:app:name:ipad',\r\n });\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: 'twitter:app:name:googleplay', content: twitter.app.name },\r\n key: 'meta:name:twitter:app:name:googleplay',\r\n });\r\n\r\n // App IDs\r\n if (twitter.app.id.iphone) {\r\n const iphoneId = twitterTag('app:id:iphone', twitter.app.id.iphone);\r\n if (iphoneId) tags.push(iphoneId);\r\n }\r\n\r\n if (twitter.app.id.ipad) {\r\n const ipadId = twitterTag('app:id:ipad', twitter.app.id.ipad);\r\n if (ipadId) tags.push(ipadId);\r\n }\r\n\r\n if (twitter.app.id.googleplay) {\r\n const googleId = twitterTag('app:id:googleplay', twitter.app.id.googleplay);\r\n if (googleId) tags.push(googleId);\r\n }\r\n\r\n // App URLs\r\n if (twitter.app.url) {\r\n if (twitter.app.url.iphone) {\r\n const iphoneUrl = twitterTag('app:url:iphone', twitter.app.url.iphone);\r\n if (iphoneUrl) tags.push(iphoneUrl);\r\n }\r\n\r\n if (twitter.app.url.ipad) {\r\n const ipadUrl = twitterTag('app:url:ipad', twitter.app.url.ipad);\r\n if (ipadUrl) tags.push(ipadUrl);\r\n }\r\n\r\n if (twitter.app.url.googleplay) {\r\n const googleUrl = twitterTag('app:url:googleplay', twitter.app.url.googleplay);\r\n if (googleUrl) tags.push(googleUrl);\r\n }\r\n }\r\n }\r\n\r\n // Labels and data (for large image cards)\r\n if (twitter.label1) {\r\n const label1 = twitterTag('label1', twitter.label1);\r\n if (label1) tags.push(label1);\r\n }\r\n\r\n if (twitter.data1) {\r\n const data1 = twitterTag('data1', twitter.data1);\r\n if (data1) tags.push(data1);\r\n }\r\n\r\n if (twitter.label2) {\r\n const label2 = twitterTag('label2', twitter.label2);\r\n if (label2) tags.push(label2);\r\n }\r\n\r\n if (twitter.data2) {\r\n const data2 = twitterTag('data2', twitter.data2);\r\n if (data2) tags.push(data2);\r\n }\r\n\r\n return tags;\r\n}\r\n\r\n/**\r\n * Generate minimal Twitter Card tags (for fallback)\r\n */\r\nexport function generateTwitterFallback(\r\n title: string | undefined,\r\n description: string | undefined,\r\n image: string | undefined,\r\n cardType: TwitterCardMeta['card'] = 'summary'\r\n): HtmlTag[] {\r\n const tags: HtmlTag[] = [];\r\n\r\n const card = twitterTag('card', cardType);\r\n if (card) tags.push(card);\r\n\r\n const titleTag = twitterTag('title', title);\r\n if (titleTag) tags.push(titleTag);\r\n\r\n const descTag = twitterTag('description', description);\r\n if (descTag) tags.push(descTag);\r\n\r\n const imageTag = twitterTag('image', image);\r\n if (imageTag) tags.push(imageTag);\r\n\r\n return tags;\r\n}\r\n","/**\r\n * @flightdev/seo\r\n *\r\n * Native SEO and head management for Flight Framework.\r\n * Zero dependencies, framework-agnostic, SSR-first.\r\n *\r\n * Features:\r\n * - Head management with deduplication\r\n * - Meta tags (basic, robots, verification)\r\n * - Open Graph protocol\r\n * - Twitter Cards\r\n * - JSON-LD structured data\r\n * - Sitemap generation\r\n * - robots.txt generation\r\n *\r\n * @example\r\n * ```typescript\r\n * import { createSEO, defineMeta } from '@flightdev/seo';\r\n *\r\n * const seo = createSEO({ baseUrl: 'https://example.com' });\r\n *\r\n * const metadata = defineMeta({\r\n * title: 'My Page',\r\n * description: 'Page description',\r\n * openGraph: {\r\n * type: 'website',\r\n * images: [{ url: '/og.jpg', width: 1200, height: 630 }],\r\n * },\r\n * });\r\n *\r\n * const { html } = seo.render(metadata);\r\n * ```\r\n */\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\nexport type {\r\n // Core types\r\n Metadata,\r\n ResolvedMetadata,\r\n HtmlTag,\r\n RenderedHead,\r\n SEOConfig,\r\n SEOService,\r\n\r\n // Meta types\r\n RobotsMeta,\r\n AlternateLink,\r\n VerificationMeta,\r\n IconMeta,\r\n\r\n // Open Graph types\r\n OpenGraphMeta,\r\n OpenGraphType,\r\n OpenGraphImage,\r\n OpenGraphVideo,\r\n OpenGraphAudio,\r\n OpenGraphArticle,\r\n OpenGraphProfile,\r\n OpenGraphBook,\r\n OpenGraphProduct,\r\n\r\n // Twitter types\r\n TwitterCardMeta,\r\n TwitterCardType,\r\n TwitterCardImage,\r\n TwitterCardPlayer,\r\n TwitterCardApp,\r\n} from './types.js';\r\n\r\n// ============================================================================\r\n// Head Manager\r\n// ============================================================================\r\n\r\nexport {\r\n HeadManager,\r\n createHeadManager,\r\n renderTag,\r\n renderTags,\r\n setHeadContext,\r\n getHeadContext,\r\n clearHeadContext,\r\n withHeadContext,\r\n type HeadContext,\r\n} from './head.js';\r\n\r\n// ============================================================================\r\n// Meta Tags\r\n// ============================================================================\r\n\r\nexport {\r\n generateMetaTags,\r\n generateTitleTag,\r\n generateCharsetTag,\r\n generateViewportTag,\r\n generateDescriptionTag,\r\n generateKeywordsTag,\r\n generateAuthorTag,\r\n generateRobotsTag,\r\n generateGooglebotTag,\r\n generateCanonicalTag,\r\n generateAlternateTags,\r\n generateVerificationTags,\r\n generateThemeColorTags,\r\n} from './meta.js';\r\n\r\n// ============================================================================\r\n// Open Graph\r\n// ============================================================================\r\n\r\nexport {\r\n generateOpenGraphTags,\r\n generateOpenGraphFallback,\r\n} from './opengraph.js';\r\n\r\n// ============================================================================\r\n// Twitter Cards\r\n// ============================================================================\r\n\r\nexport {\r\n generateTwitterTags,\r\n generateTwitterFallback,\r\n} from './twitter.js';\r\n\r\n// ============================================================================\r\n// Imports for Internal Use\r\n// ============================================================================\r\n\r\nimport type { Metadata, HtmlTag, RenderedHead, SEOConfig, SEOService } from './types.js';\r\nimport { renderTags } from './head.js';\r\nimport { generateMetaTags } from './meta.js';\r\nimport { generateOpenGraphTags, generateOpenGraphFallback } from './opengraph.js';\r\nimport { generateTwitterTags, generateTwitterFallback } from './twitter.js';\r\n\r\n// ============================================================================\r\n// SEO Service\r\n// ============================================================================\r\n\r\n/**\r\n * Create an SEO service\r\n *\r\n * @example\r\n * ```typescript\r\n * const seo = createSEO({\r\n * baseUrl: 'https://example.com',\r\n * titleTemplate: '%s | My Site',\r\n * defaultTitle: 'My Site',\r\n * });\r\n *\r\n * const { html } = seo.render({\r\n * title: 'About Us',\r\n * description: 'Learn more about us',\r\n * });\r\n * ```\r\n */\r\nexport function createSEO(config: SEOConfig = {}): SEOService {\r\n const fullConfig: SEOConfig = {\r\n baseUrl: config.baseUrl || '',\r\n titleTemplate: config.titleTemplate,\r\n defaultTitle: config.defaultTitle,\r\n defaultOpenGraph: config.defaultOpenGraph,\r\n defaultTwitter: config.defaultTwitter,\r\n features: {\r\n openGraph: config.features?.openGraph ?? true,\r\n twitter: config.features?.twitter ?? true,\r\n robots: config.features?.robots ?? true,\r\n },\r\n };\r\n\r\n return {\r\n config: fullConfig,\r\n\r\n render(metadata: Metadata): RenderedHead {\r\n const tags = generateAllTags(metadata, fullConfig);\r\n const html = renderTags(tags);\r\n return { tags, html };\r\n },\r\n\r\n merge(parent: Metadata, child: Metadata): Metadata {\r\n return mergeMetadata(parent, child);\r\n },\r\n\r\n resolveTitle(metadata: Metadata): string {\r\n return resolveTitleWithTemplate(\r\n metadata.title,\r\n metadata.titleTemplate || fullConfig.titleTemplate,\r\n metadata.defaultTitle || fullConfig.defaultTitle\r\n );\r\n },\r\n\r\n canonical(path: string): string {\r\n if (!fullConfig.baseUrl) {\r\n return path;\r\n }\r\n const base = fullConfig.baseUrl.endsWith('/')\r\n ? fullConfig.baseUrl.slice(0, -1)\r\n : fullConfig.baseUrl;\r\n const normalizedPath = path.startsWith('/') ? path : '/' + path;\r\n return base + normalizedPath;\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Metadata Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Define metadata with type safety\r\n *\r\n * @example\r\n * ```typescript\r\n * const metadata = defineMeta({\r\n * title: 'Product Name',\r\n * description: 'Product description',\r\n * openGraph: {\r\n * type: 'product',\r\n * images: [{ url: '/product.jpg' }],\r\n * },\r\n * });\r\n * ```\r\n */\r\nexport function defineMeta(metadata: Metadata): Metadata {\r\n return metadata;\r\n}\r\n\r\n/**\r\n * Merge parent and child metadata\r\n * Child values override parent values\r\n * Arrays are replaced, not merged\r\n */\r\nexport function mergeMetadata(parent: Metadata, child: Metadata): Metadata {\r\n return {\r\n ...parent,\r\n ...child,\r\n // Merge Open Graph\r\n openGraph: child.openGraph\r\n ? { ...parent.openGraph, ...child.openGraph }\r\n : parent.openGraph,\r\n // Merge Twitter\r\n twitter: child.twitter\r\n ? { ...parent.twitter, ...child.twitter }\r\n : parent.twitter,\r\n // Merge Apple\r\n apple: child.apple\r\n ? { ...parent.apple, ...child.apple }\r\n : parent.apple,\r\n // Merge Icons\r\n icons: child.icons\r\n ? { ...parent.icons, ...child.icons }\r\n : parent.icons,\r\n // Merge verification\r\n verification: child.verification\r\n ? { ...parent.verification, ...child.verification }\r\n : parent.verification,\r\n // Merge other\r\n other: child.other\r\n ? { ...parent.other, ...child.other }\r\n : parent.other,\r\n };\r\n}\r\n\r\n/**\r\n * Resolve title with template\r\n */\r\nfunction resolveTitleWithTemplate(\r\n title: string | undefined,\r\n template: string | undefined,\r\n defaultTitle: string | undefined\r\n): string {\r\n const resolvedTitle = title || defaultTitle || '';\r\n\r\n if (!resolvedTitle) {\r\n return '';\r\n }\r\n\r\n if (template && title) {\r\n return template.replace('%s', title);\r\n }\r\n\r\n return resolvedTitle;\r\n}\r\n\r\n// ============================================================================\r\n// Tag Generation\r\n// ============================================================================\r\n\r\n/**\r\n * Generate all tags from metadata\r\n */\r\nfunction generateAllTags(metadata: Metadata, config: SEOConfig): HtmlTag[] {\r\n const tags: HtmlTag[] = [];\r\n\r\n // Basic meta tags\r\n tags.push(...generateMetaTags(metadata, {\r\n titleTemplate: config.titleTemplate,\r\n defaultTitle: config.defaultTitle,\r\n }));\r\n\r\n // Open Graph\r\n if (config.features?.openGraph !== false) {\r\n if (metadata.openGraph) {\r\n const og = { ...config.defaultOpenGraph, ...metadata.openGraph };\r\n tags.push(...generateOpenGraphTags(og));\r\n } else if (metadata.title || metadata.description) {\r\n // Generate fallback OG tags from basic metadata\r\n tags.push(...generateOpenGraphFallback(\r\n metadata.title,\r\n metadata.description,\r\n metadata.canonical\r\n ));\r\n }\r\n }\r\n\r\n // Twitter Cards\r\n if (config.features?.twitter !== false) {\r\n if (metadata.twitter) {\r\n const twitter = { ...config.defaultTwitter, ...metadata.twitter };\r\n tags.push(...generateTwitterTags(twitter));\r\n } else if (metadata.title || metadata.description) {\r\n // Generate fallback Twitter tags\r\n const ogImage = metadata.openGraph?.images?.[0];\r\n const imageUrl = typeof ogImage === 'string' ? ogImage : ogImage?.url;\r\n tags.push(...generateTwitterFallback(\r\n metadata.title,\r\n metadata.description,\r\n imageUrl\r\n ));\r\n }\r\n }\r\n\r\n // Icons\r\n if (metadata.icons) {\r\n tags.push(...generateIconTags(metadata.icons));\r\n }\r\n\r\n // Apple-specific\r\n if (metadata.apple) {\r\n tags.push(...generateAppleTags(metadata.apple));\r\n }\r\n\r\n return tags;\r\n}\r\n\r\n/**\r\n * Generate icon link tags\r\n */\r\nfunction generateIconTags(icons: Metadata['icons']): HtmlTag[] {\r\n if (!icons) return [];\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n // Favicon\r\n if (icons.icon) {\r\n const iconList = Array.isArray(icons.icon) ? icons.icon : [icons.icon];\r\n iconList.forEach((icon, index) => {\r\n const iconData = typeof icon === 'string' ? { url: icon } : icon;\r\n tags.push({\r\n tag: 'link',\r\n attrs: {\r\n rel: 'icon',\r\n href: iconData.url,\r\n type: iconData.type,\r\n sizes: iconData.sizes,\r\n },\r\n key: `link:icon:${index}`,\r\n });\r\n });\r\n }\r\n\r\n // Shortcut icon\r\n if (icons.shortcut) {\r\n const shortcut = typeof icons.shortcut === 'string'\r\n ? { url: icons.shortcut }\r\n : icons.shortcut;\r\n tags.push({\r\n tag: 'link',\r\n attrs: {\r\n rel: 'shortcut icon',\r\n href: shortcut.url,\r\n type: shortcut.type,\r\n },\r\n key: 'link:shortcut-icon',\r\n });\r\n }\r\n\r\n // Apple touch icons\r\n if (icons.apple) {\r\n const appleList = Array.isArray(icons.apple) ? icons.apple : [icons.apple];\r\n appleList.forEach((icon, index) => {\r\n const iconData = typeof icon === 'string' ? { url: icon } : icon;\r\n tags.push({\r\n tag: 'link',\r\n attrs: {\r\n rel: 'apple-touch-icon',\r\n href: iconData.url,\r\n sizes: iconData.sizes,\r\n },\r\n key: `link:apple-touch-icon:${index}`,\r\n });\r\n });\r\n }\r\n\r\n return tags;\r\n}\r\n\r\n/**\r\n * Generate Apple-specific meta tags\r\n */\r\nfunction generateAppleTags(apple: Metadata['apple']): HtmlTag[] {\r\n if (!apple) return [];\r\n\r\n const tags: HtmlTag[] = [];\r\n\r\n if (apple.mobileWebAppCapable) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: 'apple-mobile-web-app-capable', content: 'yes' },\r\n key: 'meta:name:apple-mobile-web-app-capable',\r\n });\r\n }\r\n\r\n if (apple.statusBarStyle) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: 'apple-mobile-web-app-status-bar-style', content: apple.statusBarStyle },\r\n key: 'meta:name:apple-mobile-web-app-status-bar-style',\r\n });\r\n }\r\n\r\n if (apple.title) {\r\n tags.push({\r\n tag: 'meta',\r\n attrs: { name: 'apple-mobile-web-app-title', content: apple.title },\r\n key: 'meta:name:apple-mobile-web-app-title',\r\n });\r\n }\r\n\r\n if (apple.touchIcon) {\r\n const touchIcon = typeof apple.touchIcon === 'string'\r\n ? { url: apple.touchIcon }\r\n : apple.touchIcon;\r\n tags.push({\r\n tag: 'link',\r\n attrs: {\r\n rel: 'apple-touch-icon',\r\n href: touchIcon.url,\r\n sizes: touchIcon.sizes,\r\n },\r\n key: 'link:apple-touch-icon-from-apple',\r\n });\r\n }\r\n\r\n return tags;\r\n}\r\n\r\n// ============================================================================\r\n// Page Metadata Function (generateMetadata pattern)\r\n// ============================================================================\r\n\r\n/**\r\n * Type for async metadata generation function\r\n */\r\nexport type GenerateMetadataFn<TParams = Record<string, string>> = (context: {\r\n params: TParams;\r\n searchParams?: Record<string, string | string[]>;\r\n}) => Metadata | Promise<Metadata>;\r\n\r\n/**\r\n * Version constant\r\n */\r\nexport const VERSION = '0.1.0';\r\n"]}
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @flightdev/seo - JSON-LD Structured Data
|
|
3
|
+
*
|
|
4
|
+
* Type-safe JSON-LD generation for search engine rich results.
|
|
5
|
+
* Supports Schema.org types: Organization, WebSite, Article, Product, etc.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Base JSON-LD thing
|
|
9
|
+
*/
|
|
10
|
+
interface Thing {
|
|
11
|
+
'@type': string;
|
|
12
|
+
'@id'?: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
url?: string;
|
|
16
|
+
image?: string | ImageObject | (string | ImageObject)[];
|
|
17
|
+
sameAs?: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Image object for JSON-LD
|
|
21
|
+
*/
|
|
22
|
+
interface ImageObject {
|
|
23
|
+
'@type': 'ImageObject';
|
|
24
|
+
url: string;
|
|
25
|
+
width?: number;
|
|
26
|
+
height?: number;
|
|
27
|
+
caption?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Person for JSON-LD
|
|
31
|
+
*/
|
|
32
|
+
interface Person extends Thing {
|
|
33
|
+
'@type': 'Person';
|
|
34
|
+
givenName?: string;
|
|
35
|
+
familyName?: string;
|
|
36
|
+
email?: string;
|
|
37
|
+
jobTitle?: string;
|
|
38
|
+
worksFor?: Organization;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Organization for JSON-LD
|
|
42
|
+
*/
|
|
43
|
+
interface Organization extends Thing {
|
|
44
|
+
'@type': 'Organization';
|
|
45
|
+
logo?: string | ImageObject;
|
|
46
|
+
contactPoint?: ContactPoint[];
|
|
47
|
+
address?: PostalAddress;
|
|
48
|
+
founder?: Person;
|
|
49
|
+
foundingDate?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Contact point
|
|
53
|
+
*/
|
|
54
|
+
interface ContactPoint {
|
|
55
|
+
'@type': 'ContactPoint';
|
|
56
|
+
telephone?: string;
|
|
57
|
+
contactType: string;
|
|
58
|
+
email?: string;
|
|
59
|
+
areaServed?: string | string[];
|
|
60
|
+
availableLanguage?: string | string[];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Postal address
|
|
64
|
+
*/
|
|
65
|
+
interface PostalAddress {
|
|
66
|
+
'@type': 'PostalAddress';
|
|
67
|
+
streetAddress?: string;
|
|
68
|
+
addressLocality?: string;
|
|
69
|
+
addressRegion?: string;
|
|
70
|
+
postalCode?: string;
|
|
71
|
+
addressCountry?: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* WebSite schema
|
|
75
|
+
*/
|
|
76
|
+
interface WebSite extends Thing {
|
|
77
|
+
'@type': 'WebSite';
|
|
78
|
+
potentialAction?: SearchAction;
|
|
79
|
+
publisher?: Organization | Person;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Search action for site search
|
|
83
|
+
*/
|
|
84
|
+
interface SearchAction {
|
|
85
|
+
'@type': 'SearchAction';
|
|
86
|
+
target: string | {
|
|
87
|
+
'@type': 'EntryPoint';
|
|
88
|
+
urlTemplate: string;
|
|
89
|
+
};
|
|
90
|
+
'query-input': string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* WebPage schema
|
|
94
|
+
*/
|
|
95
|
+
interface WebPage extends Thing {
|
|
96
|
+
'@type': 'WebPage' | 'AboutPage' | 'ContactPage' | 'FAQPage' | 'ItemPage' | 'ProfilePage';
|
|
97
|
+
breadcrumb?: BreadcrumbList;
|
|
98
|
+
mainEntity?: Thing;
|
|
99
|
+
datePublished?: string;
|
|
100
|
+
dateModified?: string;
|
|
101
|
+
author?: Person | Organization;
|
|
102
|
+
publisher?: Organization;
|
|
103
|
+
inLanguage?: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Article schema
|
|
107
|
+
*/
|
|
108
|
+
interface Article extends Thing {
|
|
109
|
+
'@type': 'Article' | 'NewsArticle' | 'BlogPosting' | 'TechArticle';
|
|
110
|
+
headline: string;
|
|
111
|
+
datePublished: string;
|
|
112
|
+
dateModified?: string;
|
|
113
|
+
author: Person | Organization | (Person | Organization)[];
|
|
114
|
+
publisher: Organization;
|
|
115
|
+
mainEntityOfPage?: string | WebPage;
|
|
116
|
+
articleSection?: string;
|
|
117
|
+
keywords?: string | string[];
|
|
118
|
+
wordCount?: number;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Product schema
|
|
122
|
+
*/
|
|
123
|
+
interface Product extends Thing {
|
|
124
|
+
'@type': 'Product';
|
|
125
|
+
sku?: string;
|
|
126
|
+
gtin?: string;
|
|
127
|
+
mpn?: string;
|
|
128
|
+
brand?: Brand;
|
|
129
|
+
offers?: Offer | Offer[];
|
|
130
|
+
aggregateRating?: AggregateRating;
|
|
131
|
+
review?: Review[];
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Brand
|
|
135
|
+
*/
|
|
136
|
+
interface Brand {
|
|
137
|
+
'@type': 'Brand';
|
|
138
|
+
name: string;
|
|
139
|
+
logo?: string;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Offer (price information)
|
|
143
|
+
*/
|
|
144
|
+
interface Offer {
|
|
145
|
+
'@type': 'Offer';
|
|
146
|
+
price: number | string;
|
|
147
|
+
priceCurrency: string;
|
|
148
|
+
availability?: 'InStock' | 'OutOfStock' | 'PreOrder' | 'SoldOut' | 'BackOrder' | string;
|
|
149
|
+
url?: string;
|
|
150
|
+
priceValidUntil?: string;
|
|
151
|
+
seller?: Organization;
|
|
152
|
+
itemCondition?: 'NewCondition' | 'RefurbishedCondition' | 'UsedCondition' | string;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Aggregate rating
|
|
156
|
+
*/
|
|
157
|
+
interface AggregateRating {
|
|
158
|
+
'@type': 'AggregateRating';
|
|
159
|
+
ratingValue: number;
|
|
160
|
+
reviewCount?: number;
|
|
161
|
+
ratingCount?: number;
|
|
162
|
+
bestRating?: number;
|
|
163
|
+
worstRating?: number;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Review
|
|
167
|
+
*/
|
|
168
|
+
interface Review {
|
|
169
|
+
'@type': 'Review';
|
|
170
|
+
author: Person | string;
|
|
171
|
+
datePublished?: string;
|
|
172
|
+
reviewBody?: string;
|
|
173
|
+
name?: string;
|
|
174
|
+
reviewRating?: Rating;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Rating
|
|
178
|
+
*/
|
|
179
|
+
interface Rating {
|
|
180
|
+
'@type': 'Rating';
|
|
181
|
+
ratingValue: number;
|
|
182
|
+
bestRating?: number;
|
|
183
|
+
worstRating?: number;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Breadcrumb list
|
|
187
|
+
*/
|
|
188
|
+
interface BreadcrumbList {
|
|
189
|
+
'@type': 'BreadcrumbList';
|
|
190
|
+
itemListElement: BreadcrumbItem[];
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Breadcrumb item
|
|
194
|
+
*/
|
|
195
|
+
interface BreadcrumbItem {
|
|
196
|
+
'@type': 'ListItem';
|
|
197
|
+
position: number;
|
|
198
|
+
name: string;
|
|
199
|
+
item?: string;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* FAQ Page
|
|
203
|
+
*/
|
|
204
|
+
interface FAQPage extends Thing {
|
|
205
|
+
'@type': 'FAQPage';
|
|
206
|
+
mainEntity: Question[];
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Question
|
|
210
|
+
*/
|
|
211
|
+
interface Question {
|
|
212
|
+
'@type': 'Question';
|
|
213
|
+
name: string;
|
|
214
|
+
acceptedAnswer: Answer;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Answer
|
|
218
|
+
*/
|
|
219
|
+
interface Answer {
|
|
220
|
+
'@type': 'Answer';
|
|
221
|
+
text: string;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Local business
|
|
225
|
+
*/
|
|
226
|
+
interface LocalBusiness extends Omit<Organization, '@type'> {
|
|
227
|
+
'@type': 'LocalBusiness' | 'Restaurant' | 'Store' | 'MedicalBusiness' | string;
|
|
228
|
+
priceRange?: string;
|
|
229
|
+
openingHoursSpecification?: OpeningHoursSpecification[];
|
|
230
|
+
geo?: GeoCoordinates;
|
|
231
|
+
telephone?: string;
|
|
232
|
+
hasMap?: string;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Opening hours
|
|
236
|
+
*/
|
|
237
|
+
interface OpeningHoursSpecification {
|
|
238
|
+
'@type': 'OpeningHoursSpecification';
|
|
239
|
+
dayOfWeek: string | string[];
|
|
240
|
+
opens: string;
|
|
241
|
+
closes: string;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Geo coordinates
|
|
245
|
+
*/
|
|
246
|
+
interface GeoCoordinates {
|
|
247
|
+
'@type': 'GeoCoordinates';
|
|
248
|
+
latitude: number;
|
|
249
|
+
longitude: number;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Event
|
|
253
|
+
*/
|
|
254
|
+
interface Event extends Thing {
|
|
255
|
+
'@type': 'Event' | 'BusinessEvent' | 'MusicEvent' | 'SportsEvent' | string;
|
|
256
|
+
startDate: string;
|
|
257
|
+
endDate?: string;
|
|
258
|
+
location: Place | VirtualLocation | string;
|
|
259
|
+
organizer?: Organization | Person;
|
|
260
|
+
performer?: Person | Organization | (Person | Organization)[];
|
|
261
|
+
offers?: Offer | Offer[];
|
|
262
|
+
eventStatus?: 'EventScheduled' | 'EventCancelled' | 'EventPostponed' | 'EventRescheduled';
|
|
263
|
+
eventAttendanceMode?: 'OfflineEventAttendanceMode' | 'OnlineEventAttendanceMode' | 'MixedEventAttendanceMode';
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Place
|
|
267
|
+
*/
|
|
268
|
+
interface Place extends Thing {
|
|
269
|
+
'@type': 'Place';
|
|
270
|
+
address?: PostalAddress | string;
|
|
271
|
+
geo?: GeoCoordinates;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Virtual location
|
|
275
|
+
*/
|
|
276
|
+
interface VirtualLocation {
|
|
277
|
+
'@type': 'VirtualLocation';
|
|
278
|
+
url: string;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* All supported JSON-LD schemas
|
|
282
|
+
*/
|
|
283
|
+
type JsonLdSchema = Organization | Person | WebSite | WebPage | Article | Product | BreadcrumbList | FAQPage | LocalBusiness | Event;
|
|
284
|
+
/**
|
|
285
|
+
* Create JSON-LD script content
|
|
286
|
+
*/
|
|
287
|
+
declare function createJsonLd<T extends JsonLdSchema>(schema: T, options?: {
|
|
288
|
+
context?: string;
|
|
289
|
+
}): string;
|
|
290
|
+
/**
|
|
291
|
+
* Create multiple JSON-LD schemas in a graph
|
|
292
|
+
*/
|
|
293
|
+
declare function createJsonLdGraph(schemas: JsonLdSchema[], options?: {
|
|
294
|
+
context?: string;
|
|
295
|
+
}): string;
|
|
296
|
+
/**
|
|
297
|
+
* Create Organization JSON-LD
|
|
298
|
+
*/
|
|
299
|
+
declare function organizationJsonLd(data: Omit<Organization, '@type'>): Organization;
|
|
300
|
+
/**
|
|
301
|
+
* Create WebSite JSON-LD
|
|
302
|
+
*/
|
|
303
|
+
declare function websiteJsonLd(data: Omit<WebSite, '@type'>): WebSite;
|
|
304
|
+
/**
|
|
305
|
+
* Create Article JSON-LD
|
|
306
|
+
*/
|
|
307
|
+
declare function articleJsonLd(data: Omit<Article, '@type'> & {
|
|
308
|
+
type?: Article['@type'];
|
|
309
|
+
}): Article;
|
|
310
|
+
/**
|
|
311
|
+
* Create Product JSON-LD
|
|
312
|
+
*/
|
|
313
|
+
declare function productJsonLd(data: Omit<Product, '@type'>): Product;
|
|
314
|
+
/**
|
|
315
|
+
* Create BreadcrumbList JSON-LD
|
|
316
|
+
*/
|
|
317
|
+
declare function breadcrumbJsonLd(items: Array<{
|
|
318
|
+
name: string;
|
|
319
|
+
url?: string;
|
|
320
|
+
}>): BreadcrumbList;
|
|
321
|
+
/**
|
|
322
|
+
* Create FAQ JSON-LD
|
|
323
|
+
*/
|
|
324
|
+
declare function faqJsonLd(questions: Array<{
|
|
325
|
+
question: string;
|
|
326
|
+
answer: string;
|
|
327
|
+
}>): FAQPage;
|
|
328
|
+
/**
|
|
329
|
+
* Create LocalBusiness JSON-LD
|
|
330
|
+
*/
|
|
331
|
+
declare function localBusinessJsonLd(data: Omit<LocalBusiness, '@type'> & {
|
|
332
|
+
type?: LocalBusiness['@type'];
|
|
333
|
+
}): LocalBusiness;
|
|
334
|
+
/**
|
|
335
|
+
* Create Event JSON-LD
|
|
336
|
+
*/
|
|
337
|
+
declare function eventJsonLd(data: Omit<Event, '@type'> & {
|
|
338
|
+
type?: Event['@type'];
|
|
339
|
+
}): Event;
|
|
340
|
+
|
|
341
|
+
export { type AggregateRating, type Answer, type Article, type Brand, type BreadcrumbItem, type BreadcrumbList, type ContactPoint, type Event, type FAQPage, type GeoCoordinates, type ImageObject, type JsonLdSchema, type LocalBusiness, type Offer, type OpeningHoursSpecification, type Organization, type Person, type Place, type PostalAddress, type Product, type Question, type Rating, type Review, type SearchAction, type Thing, type VirtualLocation, type WebPage, type WebSite, articleJsonLd, breadcrumbJsonLd, createJsonLd, createJsonLdGraph, eventJsonLd, faqJsonLd, localBusinessJsonLd, organizationJsonLd, productJsonLd, websiteJsonLd };
|