@fayz-ai/storefront 0.85.3 → 0.86.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/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/meta-pageview.d.ts +23 -0
- package/dist/analytics/meta-pageview.d.ts.map +1 -0
- package/dist/analytics/meta-pixel.d.ts +11 -5
- package/dist/analytics/meta-pixel.d.ts.map +1 -1
- package/dist/{chunk-BR3XHNVM.js → chunk-2JMPPAXL.js} +3 -3
- package/dist/{chunk-BR3XHNVM.js.map → chunk-2JMPPAXL.js.map} +1 -1
- package/dist/{chunk-ELW7QWDJ.js → chunk-G4WCU526.js} +4 -3
- package/dist/chunk-G4WCU526.js.map +1 -0
- package/dist/{chunk-CE4U65TZ.js → chunk-Z2NKBC42.js} +41 -3
- package/dist/chunk-Z2NKBC42.js.map +1 -0
- package/dist/host/store-host.d.ts +9 -0
- package/dist/host/store-host.d.ts.map +1 -1
- package/dist/host.js +39 -9
- package/dist/host.js.map +1 -1
- package/dist/index.js +5 -5
- package/dist/render.js +3 -3
- package/dist/tanstack.js +2 -2
- package/package.json +3 -3
- package/dist/chunk-CE4U65TZ.js.map +0 -1
- package/dist/chunk-ELW7QWDJ.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/seo.ts","../src/app/serving.ts","../src/data/menu-needs.ts"],"names":[],"mappings":"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","file":"chunk-CE4U65TZ.js","sourcesContent":["import { breadcrumbJsonLd, seoOrigin } from '@fayz-ai/core'\nimport { currentStaticRenderPass } from '../app/static-render'\nimport type { Category, Product } from '@fayz-ai/shop/types'\nimport { imageVariantUrl } from '@fayz-ai/shop'\nimport type { ResolvedStorefrontConfig } from '../document/config'\nimport type { StaticHeadInput } from '../app/static-render'\n\n// ---------------------------------------------------------------------------\n// What a storefront route should tell a crawler about itself.\n//\n// Pure builders returning a head declaration, so the page that knows what it is\n// rendering also declares its own SEO — rather than a renderer re-deriving the\n// routing table on the server to guess. Same reason `useStorefrontHead` reports\n// the title instead of letting `renderStore` infer it.\n//\n// Absolute URLs need an origin the store does not know at build time. Callers\n// pass one explicitly (a server render knows the request host); in a browser it\n// falls back to the live origin. Without either, canonical and OG URLs are\n// omitted rather than emitted relative, because a relative canonical is ignored\n// by search engines and a relative og:image renders as a broken share.\n// ---------------------------------------------------------------------------\n\nexport interface StorefrontSeoContext {\n config: ResolvedStorefrontConfig\n /** In-app path, e.g. '/product/pork-ribs'. */\n path: string\n /** Absolute origin, e.g. 'https://loja.example.com'. */\n origin?: string\n}\n\nfunction absolute(ctx: StorefrontSeoContext, path = ctx.path): string | undefined {\n // Explicit wins, then the origin the static render was told about, then the\n // live browser origin. A page never has to know which of the three it is in.\n const origin = (ctx.origin ?? currentStaticRenderPass()?.origin ?? seoOrigin()).replace(/\\/$/, '')\n if (!origin) return undefined\n return `${origin}${path.startsWith('/') ? path : `/${path}`}`\n}\n\n/** Primary image, falling back to the first — how product cards pick one. */\nexport function primaryImageUrl(product: Product): string | undefined {\n return (product.images?.find((i) => i.isPrimary) ?? product.images?.[0])?.url\n}\n\n/**\n * The primary image as a share card wants it: 1200 px wide when the store\n * serves variants, so a WhatsApp/OG scraper does not pull the 4000 px\n * original — and the same URL for every scraper, so it is cached once.\n */\nfunction shareImageUrl(product: Product, ctx: StorefrontSeoContext): string | undefined {\n const url = primaryImageUrl(product)\n if (!url) return undefined\n return ctx.config.imageLoading.transform === 'supabase' ? imageVariantUrl(url, { width: 1200, quality: 82 }) : url\n}\n\n/**\n * schema.org Product. Availability is derived from inventory rather than\n * declared, because a rich result advertising an in-stock product that is not\n * is worse than no rich result.\n */\nexport function productJsonLd(\n product: Product,\n ctx: StorefrontSeoContext,\n): Record<string, unknown> {\n const url = absolute(ctx)\n const image = shareImageUrl(product, ctx)\n return {\n '@context': 'https://schema.org',\n '@type': 'Product',\n name: product.name,\n ...(product.description ? { description: product.description } : {}),\n ...(product.sku ? { sku: product.sku } : {}),\n ...(image ? { image: [image] } : {}),\n offers: {\n '@type': 'Offer',\n ...(url ? { url } : {}),\n price: product.price,\n priceCurrency: product.currency ?? ctx.config.currency,\n availability:\n (product.inventoryCount ?? 0) > 0\n ? 'https://schema.org/InStock'\n : 'https://schema.org/OutOfStock',\n },\n }\n}\n\n/** The head declaration for a product page. */\nexport function productSeo(product: Product, ctx: StorefrontSeoContext): StaticHeadInput {\n const url = absolute(ctx)\n const home = absolute(ctx, '/')\n const catalog = absolute(ctx, ctx.config.catalogPath)\n return {\n title: `${product.name} — ${ctx.config.name}`,\n description: product.description?.slice(0, 160),\n canonical: url,\n image: shareImageUrl(product, ctx),\n type: 'product',\n jsonLd: [\n productJsonLd(product, ctx),\n ...(home && catalog && url\n ? [\n breadcrumbJsonLd([\n { name: ctx.config.name, url: home },\n { name: 'Loja', url: catalog },\n { name: product.name, url },\n ]),\n ]\n : []),\n ],\n }\n}\n\n/** The head declaration for any non-product route: canonical only. */\nexport function pageSeo(\n ctx: StorefrontSeoContext,\n input: { title: string; description?: string | null },\n): StaticHeadInput {\n return { ...input, canonical: absolute(ctx), type: 'website' }\n}\n\n/**\n * Who serves the menu, as the store knows itself. Everything optional: a\n * field the store has not filled is left out of the JSON-LD rather than\n * guessed, because a wrong phone number in a rich result is worse than none.\n */\nexport interface MenuBusiness {\n /** schema.org type. 'Restaurant' unless the house is better described by\n * another FoodEstablishment subtype (e.g. 'FastFoodRestaurant', 'Bakery'). */\n type?: string\n description?: string\n telephone?: string\n email?: string\n /** Absolute URL. */\n logo?: string\n /** Absolute URL; the cover photo. */\n image?: string\n servesCuisine?: string | string[]\n priceRange?: string\n address?: { streetAddress?: string; locality?: string; region?: string; postalCode?: string; country?: string }\n /** Cities or neighbourhoods delivered to, by name. */\n areaServed?: string[]\n /** schema.org openingHours, e.g. ['Mo-Fr 11:00-22:00']. */\n openingHours?: string[]\n sameAs?: string[]\n}\n\n/** The menu as the shopper sees it: category order, each dish under its\n * category, the uncategorised ones last (same grouping as `MenuPage`). */\nfunction menuSections(products: Product[], categories: Category[]) {\n const byCategory = new Map<string, Product[]>()\n const loose: Product[] = []\n for (const p of products) {\n const key = p.categoryId ?? p.categoryName ?? ''\n if (!key) { loose.push(p); continue }\n byCategory.set(key, [...(byCategory.get(key) ?? []), p])\n }\n const sections = categories\n .map((c) => ({ name: c.name, description: c.description, products: byCategory.get(c.id) ?? byCategory.get(c.name) ?? [] }))\n .filter((s) => s.products.length > 0)\n if (loose.length) sections.push({ name: 'Outros', description: null, products: loose })\n if (!sections.length && products.length) return [{ name: 'Cardápio', description: null, products }]\n return sections\n}\n\n/**\n * schema.org Restaurant with its Menu — what lets a search engine answer\n * \"delivery de costela defumada\" with this house, and read every dish and\n * price without running the page's JavaScript.\n *\n * Each dish links to its own product page, where the full Product entity\n * lives; here it is a MenuItem, which is what a dish on a menu is.\n */\nexport function menuJsonLd(\n input: { products: Product[]; categories: Category[]; business?: MenuBusiness },\n ctx: StorefrontSeoContext,\n): Record<string, unknown> {\n const url = absolute(ctx)\n const home = absolute(ctx, '/')\n const b = input.business ?? {}\n const currency = ctx.config.currency\n const address = b.address\n ? {\n '@type': 'PostalAddress',\n ...(b.address.streetAddress ? { streetAddress: b.address.streetAddress } : {}),\n ...(b.address.locality ? { addressLocality: b.address.locality } : {}),\n ...(b.address.region ? { addressRegion: b.address.region } : {}),\n ...(b.address.postalCode ? { postalCode: b.address.postalCode } : {}),\n addressCountry: b.address.country ?? 'BR',\n }\n : undefined\n return {\n '@context': 'https://schema.org',\n '@type': b.type ?? 'Restaurant',\n ...(home ? { '@id': `${home.replace(/\\/$/, '')}/#business` } : {}),\n name: ctx.config.name,\n ...(home ? { url: home } : {}),\n ...(b.description ? { description: b.description } : {}),\n ...(b.image ? { image: [b.image] } : {}),\n ...(b.logo ? { logo: b.logo } : {}),\n ...(b.telephone ? { telephone: b.telephone } : {}),\n ...(b.email ? { email: b.email } : {}),\n ...(b.servesCuisine ? { servesCuisine: b.servesCuisine } : {}),\n ...(b.priceRange ? { priceRange: b.priceRange } : {}),\n ...(address ? { address } : {}),\n ...(b.areaServed?.length ? { areaServed: b.areaServed.map((name) => ({ '@type': 'Place', name })) } : {}),\n ...(b.openingHours?.length ? { openingHours: b.openingHours } : {}),\n ...(b.sameAs?.length ? { sameAs: b.sameAs } : {}),\n ...(url ? { hasMenu: url } : {}),\n ...(url\n ? {\n potentialAction: {\n '@type': 'OrderAction',\n target: { '@type': 'EntryPoint', urlTemplate: url, actionPlatform: ['https://schema.org/DesktopWebPlatform', 'https://schema.org/MobileWebPlatform'] },\n deliveryMethod: 'http://purl.org/goodrelations/v1#DeliveryModeOwnFleet',\n },\n }\n : {}),\n menu: {\n '@type': 'Menu',\n name: `Cardápio — ${ctx.config.name}`,\n ...(url ? { url } : {}),\n inLanguage: 'pt-BR',\n hasMenuSection: menuSections(input.products, input.categories).map((section) => ({\n '@type': 'MenuSection',\n name: section.name,\n ...(section.description ? { description: section.description } : {}),\n hasMenuItem: section.products.map((p) => {\n const image = shareImageUrl(p, ctx)\n const itemUrl = absolute(ctx, `/product/${p.slug}`)\n return {\n '@type': 'MenuItem',\n name: p.name,\n ...(p.description ? { description: p.description.slice(0, 300) } : {}),\n ...(image ? { image } : {}),\n ...(itemUrl ? { url: itemUrl } : {}),\n offers: {\n '@type': 'Offer',\n price: p.price,\n priceCurrency: p.currency ?? currency,\n availability: (p.inventoryCount ?? 0) > 0 ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock',\n },\n }\n }),\n })),\n },\n }\n}\n\n/**\n * The head declaration for the delivery menu: its own title and description\n * (the store passes copy written for the query it should answer), the\n * Restaurant + Menu entity, and a breadcrumb back to the home page.\n */\nexport function menuSeo(\n input: {\n products: Product[]\n categories: Category[]\n title?: string\n description?: string | null\n business?: MenuBusiness\n },\n ctx: StorefrontSeoContext,\n): StaticHeadInput {\n const url = absolute(ctx)\n const home = absolute(ctx, '/')\n const names = input.products.slice(0, 4).map((p) => p.name).join(', ')\n return {\n title: input.title ?? `Delivery ${ctx.config.name} — peça online`,\n description:\n (input.description ?? (names ? `Peça online: ${names} e mais. Cardápio completo com preços.` : undefined))?.slice(0, 160),\n canonical: url,\n image: input.business?.image,\n type: 'website',\n jsonLd: [\n menuJsonLd(input, ctx),\n ...(home && url\n ? [breadcrumbJsonLd([{ name: ctx.config.name, url: home }, { name: 'Delivery', url }])]\n : []),\n ],\n }\n}\n","import type { ShopProvider } from '@fayz-ai/shop/provider'\nimport { matchPath } from './router'\nimport { matchContentPage } from '../blocks/page-blocks'\nimport { resolveConfig } from '../document/config'\nimport type { StorefrontConfig, ResolvedStorefrontConfig } from '../document/config'\n\n// ---------------------------------------------------------------------------\n// How a store is served, once its pages have URLs of their own.\n//\n// Two questions a host has to answer that the shell cannot: which paths exist\n// at all (what to prerender, what to put in a sitemap), and which of them are\n// the same for every visitor (what a shared cache may hold). Both are\n// properties of the route, so they are decided here rather than by each host\n// re-deriving them — and the second one has a failure mode a CDN makes\n// invisible: cache a cart or an order confirmation once and it is served to the\n// next shopper.\n// ---------------------------------------------------------------------------\n\nexport type StorefrontRouteMatch =\n | { kind: 'custom'; route: NonNullable<ResolvedStorefrontConfig['routes']>[number]; params: Record<string, string> }\n | { kind: 'product'; params: Record<string, string> }\n | { kind: 'order'; params: Record<string, string> }\n | { kind: 'checkout' }\n | { kind: 'account' }\n | { kind: 'catalog' }\n | { kind: 'menu' }\n | { kind: 'searchResults' }\n | { kind: 'policy'; policy: 'privacy' | 'terms' | 'returns' }\n | { kind: 'content'; slug: string; params: Record<string, string> }\n | { kind: 'home' }\n | { kind: 'notFound' }\n\n/**\n * What a path means, resolved once.\n *\n * The shell renders from this, cacheability is derived from it, and a host\n * framework asks it whether a URL exists at all before choosing a status code.\n * Those three answering separately is how a page ends up rendered as one thing\n * and cached or statused as another.\n *\n * The query string is stripped first: it addresses state WITHIN a page, so\n * `/?utm_source=instagram` is the home page — the single most common shape of\n * inbound marketing link, and a 404 for it is a silent, expensive bug.\n */\nexport function resolveStorefrontRoute(\n config: StorefrontConfig | ResolvedStorefrontConfig,\n rawPath: string,\n): StorefrontRouteMatch {\n const resolved = ensureResolved(config)\n const path = rawPath.split('?')[0] || '/'\n\n for (const route of resolved.routes ?? []) {\n const params = matchPath(route.path, path)\n if (params) return { kind: 'custom', route, params }\n }\n\n const product = matchPath('/product/:slug', path)\n if (product?.slug) return { kind: 'product', params: product }\n\n const order = matchPath('/order/:id', path)\n if (order?.id) return { kind: 'order', params: order }\n\n // Matched regardless of the feature flag: a disabled checkout still owns its\n // URL rather than falling through to an unrelated page.\n if (matchPath('/checkout', path)) return { kind: 'checkout' }\n if (matchPath('/account', path)) return { kind: 'account' }\n if (matchPath('/catalog', path)) return { kind: 'catalog' }\n // Só existe no modo delivery, e por isso é testado contra `resolved.delivery`\n // e não contra o literal '/menu': fora do modo, /menu é um 404 de verdade em\n // vez de uma página vazia — que é a diferença entre uma rota que não existe e\n // uma rota quebrada.\n if (resolved.delivery && matchPath(resolved.delivery.menuPath, path)) return { kind: 'menu' }\n if (resolved.search.mode === 'overlay' && matchPath(resolved.search.resultsPath, path)) {\n return { kind: 'searchResults' }\n }\n if (matchPath('/privacy', path)) return { kind: 'policy', policy: 'privacy' }\n if (matchPath('/terms', path)) return { kind: 'policy', policy: 'terms' }\n if (matchPath('/refunds', path)) return { kind: 'policy', policy: 'returns' }\n\n const content = matchContentPage(resolved.pages, path)\n if (content) return { kind: 'content', slug: content.slug, params: content.params }\n\n if (path === '/' || path === '') return { kind: 'home' }\n return { kind: 'notFound' }\n}\n\n/** Whether a URL exists at all — what a host needs before choosing a status. */\nexport function isKnownPath(\n config: StorefrontConfig | ResolvedStorefrontConfig,\n path: string,\n): boolean {\n return resolveStorefrontRoute(config, path).kind !== 'notFound'\n}\n\n/** Paths whose HTML is per-shopper and must never enter a shared cache. */\nconst PRIVATE_PATTERNS = ['/checkout', '/account', '/order/:id'] as const\n\n/** Paths the SDK serves that exist without knowing any product. The delivery\n * menu is added from the store's own `delivery.menuPath` — see `storefrontPaths`. */\nconst STATIC_PATTERNS = ['/', '/catalog', '/privacy', '/terms', '/refunds'] as const\n\nfunction ensureResolved(config: StorefrontConfig | ResolvedStorefrontConfig): ResolvedStorefrontConfig {\n return 'features' in config && 'pages' in config\n ? (config as ResolvedStorefrontConfig)\n : resolveConfig(config)\n}\n\n/**\n * Whether `path`'s HTML is identical for every visitor.\n *\n * Conservative by construction: a store's own route is private unless it says\n * otherwise, because guessing \"public\" is the direction that leaks one\n * shopper's page to another.\n */\nexport function isPublicPath(\n config: StorefrontConfig | ResolvedStorefrontConfig,\n path: string,\n): boolean {\n const match = resolveStorefrontRoute(config, path)\n switch (match.kind) {\n case 'checkout':\n case 'account':\n case 'order':\n return false\n case 'custom':\n return (\n match.route.kind !== 'checkout' &&\n match.route.kind !== 'account' &&\n match.route.chrome !== 'focused'\n )\n default:\n return true\n }\n}\n\n/**\n * Every path worth prerendering, and the same list a sitemap should carry.\n *\n * Product URLs come from the catalogue rather than the route table, so the\n * provider is asked rather than guessed at. Custom routes with parameters are\n * skipped: the SDK cannot know what values a store's own route accepts, and\n * emitting `/colecao/:slug` into a sitemap is worse than omitting it.\n */\nexport async function storefrontPaths(input: {\n config: StorefrontConfig | ResolvedStorefrontConfig\n provider: ShopProvider\n /** Include per-shopper routes. Off by default — they are not prerenderable. */\n includePrivate?: boolean\n}): Promise<string[]> {\n const resolved = ensureResolved(input.config)\n const paths = [...STATIC_PATTERNS] as string[]\n // The menu is the same for every visitor — what changes per shopper (address,\n // cart, open right now) resolves in the browser after hydration. It is listed\n // at the store's own path: a store whose menu lives at /delivery had /menu in\n // its sitemap and its real ordering page in none.\n if (resolved.delivery) paths.push(resolved.delivery.menuPath)\n\n for (const route of resolved.routes ?? []) {\n if (!route.path.includes(':')) paths.push(route.path)\n }\n\n const products = await input.provider.listProducts({ status: 'active' })\n for (const product of products) paths.push(`/product/${product.slug}`)\n\n const unique = Array.from(new Set(paths))\n return input.includePrivate ? unique : unique.filter((p) => isPublicPath(resolved, p))\n}\n","import { dataNeedKey } from '@fayz-ai/core'\n\n/**\n * The reads the delivery menu makes, named once so a server host can resolve\n * them before render. The menu is not a block tree, so nothing collects these\n * for it — a host that does not seed them sends a menu with no dishes in the\n * HTML, which is the page a crawler indexes.\n *\n * Its own module, free of React, because a host's route loader imports it on\n * every request.\n */\nexport const MENU_DATA_NEEDS = {\n products: { loader: 'products.list', params: {} },\n categories: { loader: 'categories.list', params: {} },\n featured: { loader: 'products.featured', params: {} },\n} as const\n\n/** The menu's data needs, keyed exactly as its `useLoader` calls will ask. */\nexport function menuDataNeeds(): Array<{ key: string; loader: string; params: Record<string, unknown> }> {\n return Object.values(MENU_DATA_NEEDS).map(({ loader, params }) => ({ key: dataNeedKey(loader, params), loader, params }))\n}\n"]}
|