@dani-builder/strapi-client 0.12.1 → 0.13.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/README.md CHANGED
@@ -42,7 +42,7 @@ const draft = await getPageBySlug(strapi, "about", { status: "draft" });
42
42
  | `@dani-builder/strapi-client/client` | `createStrapiClient` |
43
43
  | `@dani-builder/strapi-client/api` | 19 API functions |
44
44
  | `@dani-builder/strapi-client/populate` | 15 block populate builders |
45
- | `@dani-builder/strapi-client/utils` | Media URL helpers |
45
+ | `@dani-builder/strapi-client/utils` | Media URL, SEO, verification, JSON-LD and FAQ helpers |
46
46
  | `@dani-builder/strapi-client/preview` | Node.js server-only `verifyPreviewToken`, `isSafePreviewPath`, `PREVIEW_TTL_SECONDS` |
47
47
 
48
48
  See [`docs/block-reference.md`](./docs/block-reference.md) for the full block schema.
@@ -70,3 +70,89 @@ to work independently.
70
70
 
71
71
  See [Agent sessions and conversation context](../../docs/guides/agent-conversation-context.md)
72
72
  for browser usage, error/cancellation behavior, retries and the CMS origin allowlist.
73
+
74
+ ## SEO and structured data
75
+
76
+ These helpers return plain data and have no framework dependency. Import them and
77
+ their public types from the package root or `/utils`; adapt the result to your
78
+ framework's metadata or HTML renderer.
79
+
80
+ ```ts
81
+ import {
82
+ resolveSeo,
83
+ siteVerificationMeta,
84
+ faqPageJsonLd,
85
+ mergeStructuredData,
86
+ serializeJsonLd,
87
+ } from "@dani-builder/strapi-client/utils";
88
+
89
+ const seo = resolveSeo(page.seo, {
90
+ title: "About us",
91
+ description: "Meet our team",
92
+ url: "https://example.com/about",
93
+ ogImageUrl: "https://example.com/default-og.png",
94
+ mediaHost: "https://cms.example.com",
95
+ indexingEnabled: true,
96
+ });
97
+ // seo: {
98
+ // title, description?, canonical?, robots: { index, follow },
99
+ // openGraph: { title, description?, url?, images: string[] },
100
+ // twitter: { title, description?, url?, images: string[], card }
101
+ // }
102
+ const verification = siteVerificationMeta(siteSettings);
103
+ // [{ name: "google-site-verification", content: "configured token" }, ...]
104
+ const faq = faqPageJsonLd(faqs);
105
+ // { "@context": "https://schema.org", "@type": "FAQPage", mainEntity: [...] }
106
+ // or null when no usable question/answer pairs exist.
107
+ const { data, excluded } = mergeStructuredData(faq, page.seo?.structuredData);
108
+ const jsonLd = serializeJsonLd(data);
109
+ // Use jsonLd as the text of a script with type="application/ld+json".
110
+ // Inspect excluded for invalid CMS entries before publishing.
111
+ ```
112
+
113
+ `resolveSeo` prefers trimmed, nonblank CMS titles and descriptions, then caller
114
+ fallbacks. Its CMS canonical must be an explicit absolute HTTP(S) URL with a
115
+ hostname; relative, protocol-relative and malformed values fall back to `url`.
116
+ Caller defaults are used as provided. Indexing defaults to enabled. A global
117
+ `indexingEnabled: false` makes both robots flags false; otherwise `noindex` and
118
+ `nofollow` independently disable their respective flags. CMS OG media uses
119
+ `getMediaUrl(url, mediaHost)` and falls back to `ogImageUrl` for missing or blank
120
+ media. Both social outputs share those resolved values; Twitter uses
121
+ `summary_large_image` with an image and `summary` without one. Optional metadata
122
+ fields are omitted when no fallback exists, and image arrays are then empty.
123
+
124
+ `siteVerificationMeta` accepts nullable settings with `siteVerifications`. It maps
125
+ Google to `google-site-verification`, Bing to `msvalidate.01`, Naver to
126
+ `naver-site-verification`, and custom services to their configured name. It trims
127
+ names/content, omits blank content, custom names and unknown services, and preserves
128
+ configured order and duplicate tags. Render each entry through your framework's
129
+ normal attribute escaping.
130
+
131
+ `serializeJsonLd` uses `JSON.stringify`, then escapes every `<` as `\u003c` so
132
+ CMS strings containing `</script>` cannot end a script element. The resulting
133
+ string parses back to the same JSON value. It throws `TypeError` for top-level
134
+ undefined, functions, symbols, or values whose `toJSON` returns undefined. Native
135
+ JSON errors for circular references and BigInt propagate. It serializes data;
136
+ it does not validate Schema.org vocabulary or emit a script tag.
137
+
138
+ `mergeStructuredData(auto, cms)` accepts single objects or arrays. Null/undefined
139
+ inputs are absent. Each accepted object must have a nonblank string `@type` or a
140
+ nonempty array of nonblank strings. Invalid entries are omitted and reported in
141
+ `excluded` as `{ source: "auto" | "cms", index, reason }`; reasons are
142
+ `"not-object"` and `"invalid-type"`, with zero-based indexes (zero for single
143
+ inputs). The automatic entries establish order. A CMS entry with an equal `@type`
144
+ replaces the existing object in place; new types append. Repeated types use the
145
+ last entry, including automatic duplicates. Type arrays match by their exact
146
+ sorted unique set: `["Thing", "Product"]` equals `["Product", "Thing"]`, but
147
+ neither equals `"Product"`. A single-element array equals its string form. Type
148
+ values retain their original spelling; whitespace-only values are invalid.
149
+ The helper preserves object references and does not mutate, deep-merge, expand
150
+ `@graph`, or validate properties beyond `@type`.
151
+
152
+ `blocksToPlainText(blocks)` extracts text and link children from Strapi Blocks,
153
+ concatenating inline text and separating paragraphs, headings, quotes, code and
154
+ list items with newlines. It ignores images, unknown node kinds and malformed
155
+ nodes, and returns an empty string for absent/non-array input. The outer result
156
+ is trimmed. `faqPageJsonLd` accepts a readonly array of question/answer records,
157
+ uses that extraction for answers, trims questions and omits blank pairs. The result
158
+ uses `Question` and `Answer` entities; return `null` means no FAQ script is needed.
package/dist/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- export type { StrapiDocument, StrapiI18nDocument, StrapiComponent, StrapiResponse, StrapiCollectionResponse, StrapiPagination, StrapiError, StrapiMedia, StrapiMediaFormat, BlocksContent, BlockNode, BlockParagraph, BlockHeading, BlockList, BlockListItem, BlockQuote, BlockCode, BlockImage, BlockInlineNode, BlockTextChild, BlockLinkChild, Link, NavigationGroup, Seo, FeatureItem, HighlightItem, SliderItem, BentoItem, TestimonialItem, LogoItem, StatItem, PricingTier, TeamMember, AnalyticsSetting, ChatbotSetting, SiteVerification, BrandColors, Section, Footer, HeroBlock, FeaturesBlock, CtaBlock, SliderBlock, InquiryFormBlock, FaqBlock, HighlightsBlock, BentoGridBlock, TestimonialsBlock, LogoCloudBlock, StatsBlock, PricingBlock, ContentBlock, TeamBlock, Page, PageDocument, PageBlocks, Article, ArticleDocument, Faq, FaqDocument, Inquiry, InquiryDocument, InquiryFormData, Category, CategoryDocument, Tag, TagDocument, Author, AuthorDocument, Series, SeriesDocument, Navigation, NavigationDocument, Global, GlobalDocument, SiteWideBlocks, SiteSettings, SiteSettingsDocument, } from "./types/index.js";
1
+ export type { StrapiDocument, StrapiI18nDocument, StrapiComponent, StrapiResponse, StrapiCollectionResponse, StrapiPagination, StrapiError, StrapiMedia, StrapiMediaFormat, BlocksContent, BlockNode, BlockParagraph, BlockHeading, BlockList, BlockListItem, BlockQuote, BlockCode, BlockImage, BlockInlineNode, BlockTextChild, BlockLinkChild, Link, NavigationGroup, Seo, Organization, PostalAddress, FeatureItem, HighlightItem, SliderItem, BentoItem, TestimonialItem, LogoItem, StatItem, PricingTier, TeamMember, AnalyticsSetting, ChatbotSetting, SiteVerification, BrandColors, Section, Footer, HeroBlock, FeaturesBlock, CtaBlock, SliderBlock, InquiryFormBlock, FaqBlock, HighlightsBlock, BentoGridBlock, TestimonialsBlock, LogoCloudBlock, StatsBlock, PricingBlock, ContentBlock, TeamBlock, Page, PageDocument, PageBlocks, Article, ArticleDocument, Faq, FaqDocument, Inquiry, InquiryDocument, InquiryFormData, Category, CategoryDocument, Tag, TagDocument, Author, AuthorDocument, Series, SeriesDocument, Navigation, NavigationDocument, Global, GlobalDocument, SiteWideBlocks, SiteSettings, SiteSettingsDocument, } from "./types/index.js";
2
2
  export { createStrapiClient, getErrorCode, getErrorStatus, isStrapiError, } from "./client/index.js";
3
3
  export type { StrapiClientConfig } from "./client/index.js";
4
4
  export { coreBlockPopulates, seoPopulate, footerPopulate, getPagePopulate, getPageListPopulate, getGlobalPopulate, getArticlePopulate, getArticleListPopulate, getNavigationPopulate, getSiteSettingsPopulate, getFaqPopulate, getCategoryPopulate, } from "./populate/index.js";
5
5
  export { getPage, getPageBySlug, listPages, listPagesRest, getArticle, getArticleBySlug, listArticles, getGlobal, getGlobalRest, getNavigation, getSiteSettings, listFaqs, listCategories, listTags, listAuthors, getAuthorBySlug, listSeries, getSeriesBySlug, postInquiry, } from "./api/index.js";
6
6
  export type { PageQueryOptions, PageListOptions, ArticleQueryOptions, ArticleListOptions, GlobalQueryOptions, NavigationQueryOptions, FaqListOptions, CategoryListOptions, TagListOptions, AuthorListOptions, SeriesListOptions, } from "./api/index.js";
7
- export { getMediaUrl, getAssetUrl } from "./utils/index.js";
7
+ export { getMediaUrl, getAssetUrl, resolveSeo, siteVerificationMeta, serializeJsonLd, mergeStructuredData, blocksToPlainText, faqPageJsonLd, } from "./utils/index.js";
8
+ export type { SeoDefaults, SeoInput, ResolvedSeo, ResolvedSocialMetadata, VerificationMeta, SiteVerificationSettings, StructuredDataObject, StructuredDataExclusion, StructuredDataMergeResult, FaqJsonLdInput, FaqPageJsonLd, } from "./utils/index.js";
8
9
  export { createAgentClient, AgentClientError, } from "./agent/create-agent-client.js";
9
10
  export type { AgentClientConfig, AgentSessionCredentials, AgentRestoreOptions, AgentChatOptions, AgentTurn, } from "./agent/create-agent-client.js";
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,cAAc,EACd,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,IAAI,EACJ,eAAe,EACf,GAAG,EACH,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,OAAO,EACP,eAAe,EACf,GAAG,EACH,WAAW,EACX,OAAO,EACP,eAAe,EACf,eAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,GAAG,EACH,WAAW,EACX,MAAM,EACN,cAAc,EACd,MAAM,EACN,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,cAAc,EACd,YAAY,EACZ,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,SAAS,GACV,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,cAAc,EACd,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,IAAI,EACJ,eAAe,EACf,GAAG,EACH,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,OAAO,EACP,eAAe,EACf,GAAG,EACH,WAAW,EACX,OAAO,EACP,eAAe,EACf,eAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,GAAG,EACH,WAAW,EACX,MAAM,EACN,cAAc,EACd,MAAM,EACN,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,cAAc,EACd,YAAY,EACZ,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,WAAW,EACX,QAAQ,EACR,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,cAAc,EACd,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,SAAS,GACV,MAAM,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,6 @@ export { coreBlockPopulates, seoPopulate, footerPopulate, getPagePopulate, getPa
6
6
  // API
7
7
  export { getPage, getPageBySlug, listPages, listPagesRest, getArticle, getArticleBySlug, listArticles, getGlobal, getGlobalRest, getNavigation, getSiteSettings, listFaqs, listCategories, listTags, listAuthors, getAuthorBySlug, listSeries, getSeriesBySlug, postInquiry, } from "./api/index.js";
8
8
  // Utils
9
- export { getMediaUrl, getAssetUrl } from "./utils/index.js";
9
+ export { getMediaUrl, getAssetUrl, resolveSeo, siteVerificationMeta, serializeJsonLd, mergeStructuredData, blocksToPlainText, faqPageJsonLd, } from "./utils/index.js";
10
10
  export { createAgentClient, AgentClientError, } from "./agent/create-agent-client.js";
11
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAoF1D,SAAS;AACT,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,WAAW;AACX,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM;AACN,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAexB,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAsF1D,SAAS;AACT,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,WAAW;AACX,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM;AACN,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAexB,QAAQ;AACR,OAAO,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAe1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC"}
@@ -30,7 +30,7 @@ export declare function getPageListPopulate(): {
30
30
  };
31
31
  /**
32
32
  * Populate for Global single type.
33
- * Includes seo, home, footer deep populate, siteWideBlocks, and favicon.
33
+ * Includes seo, organization, home, footer deep populate, siteWideBlocks, and favicon.
34
34
  */
35
35
  export declare function getGlobalPopulate(customBlocks?: Record<string, object>): {
36
36
  seo: {
@@ -38,6 +38,13 @@ export declare function getGlobalPopulate(customBlocks?: Record<string, object>)
38
38
  ogImage: boolean;
39
39
  };
40
40
  };
41
+ organization: {
42
+ populate: {
43
+ logo: boolean;
44
+ sameAs: boolean;
45
+ address: boolean;
46
+ };
47
+ };
41
48
  home: boolean;
42
49
  footer: {
43
50
  populate: {
@@ -1 +1 @@
1
- {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/populate/builders.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;YATA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;EAe1F;AAED;;GAEG;AACH,wBAAgB,mBAAmB;;;;;;;;;EAKlC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;EA+BtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBjC;AAED;;GAEG;AACH,wBAAgB,sBAAsB;;;;;;;;;;;;EAYrC;AAED;;GAEG;AACH,wBAAgB,qBAAqB;;;;;;;;;;EAYpC;AAED;;GAEG;AACH,wBAAgB,uBAAuB;;;;;EAOtC;AAED;;GAEG;AACH,wBAAgB,cAAc;;EAI7B;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB;;;;;;EAElC"}
1
+ {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/populate/builders.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;YATA,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;EAe1F;AAED;;GAEG;AACH,wBAAgB,mBAAmB;;;;;;;;;EAKlC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBjC;AAED;;GAEG;AACH,wBAAgB,sBAAsB;;;;;;;;;;;;EAYrC;AAED;;GAEG;AACH,wBAAgB,qBAAqB;;;;;;;;;;EAYpC;AAED;;GAEG;AACH,wBAAgB,uBAAuB;;;;;EAOtC;AAED;;GAEG;AACH,wBAAgB,cAAc;;EAI7B;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB;;;;;;EAElC"}
@@ -34,7 +34,7 @@ export function getPageListPopulate() {
34
34
  }
35
35
  /**
36
36
  * Populate for Global single type.
37
- * Includes seo, home, footer deep populate, siteWideBlocks, and favicon.
37
+ * Includes seo, organization, home, footer deep populate, siteWideBlocks, and favicon.
38
38
  */
39
39
  export function getGlobalPopulate(customBlocks) {
40
40
  const siteWideBlockKeys = [
@@ -60,6 +60,9 @@ export function getGlobalPopulate(customBlocks) {
60
60
  }
61
61
  return {
62
62
  seo: seoPopulate,
63
+ organization: {
64
+ populate: { logo: true, sameAs: true, address: true },
65
+ },
63
66
  home: true,
64
67
  footer: footerPopulate,
65
68
  siteWideBlocks: { on: siteWideOn },
@@ -1 +1 @@
1
- {"version":3,"file":"builders.js","sourceRoot":"","sources":["../../src/populate/builders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builders.js","sourceRoot":"","sources":["../../src/populate/builders.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export type { Link, NavigationGroup, Image, Seo, FeatureItem, HighlightItem, SliderItem, BentoItem, TestimonialItem, LogoItem, StatItem, PricingTier, TeamMember, AnalyticsSetting, ChatbotSetting, SiteVerification, BrandColors, } from './shared.js';
1
+ export type { Link, NavigationGroup, Image, Seo, Organization, PostalAddress, FeatureItem, HighlightItem, SliderItem, BentoItem, TestimonialItem, LogoItem, StatItem, PricingTier, TeamMember, AnalyticsSetting, ChatbotSetting, SiteVerification, BrandColors, } from './shared.js';
2
2
  export type { Section, Footer } from './elements.js';
3
3
  export type { HeroBlock, FeaturesBlock, CtaBlock, SliderBlock, InquiryFormBlock, FaqBlock, HighlightsBlock, BentoGridBlock, TestimonialsBlock, LogoCloudBlock, StatsBlock, PricingBlock, ContentBlock, TeamBlock, } from './blocks.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/components/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,IAAI,EACJ,eAAe,EACf,KAAK,EACL,GAAG,EACH,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAErD,YAAY,EACV,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/components/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,IAAI,EACJ,eAAe,EACf,KAAK,EACL,GAAG,EACH,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAErD,YAAY,EACV,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC"}
@@ -29,7 +29,7 @@ export interface Seo extends StrapiComponent<'shared.seo'> {
29
29
  canonicalURL: string | null;
30
30
  noindex: boolean;
31
31
  nofollow: boolean;
32
- structuredData: Record<string, unknown> | null;
32
+ structuredData: Record<string, unknown> | Record<string, unknown>[] | null;
33
33
  }
34
34
  export interface FeatureItem extends StrapiComponent<'shared.feature-item'> {
35
35
  label: string | null;
@@ -54,6 +54,8 @@ export interface SliderItem extends StrapiComponent<'shared.slider-item'> {
54
54
  image: Image;
55
55
  }
56
56
  export interface BentoItem extends StrapiComponent<'shared.bento-item'> {
57
+ /** Missing or null in legacy content is the default tone, independent of span. */
58
+ tone?: 'default' | 'emphasis' | null;
57
59
  title: string | null;
58
60
  description: string | null;
59
61
  image: Image | null;
@@ -124,4 +126,23 @@ export interface SiteVerification extends StrapiComponent<'shared.site-verificat
124
126
  name: string | null;
125
127
  content: string;
126
128
  }
129
+ /** Optional site-wide organization identity; existing Globals may omit it. */
130
+ export interface Organization extends StrapiComponent<'shared.organization'> {
131
+ name?: string | null;
132
+ legalName?: string | null;
133
+ logo?: StrapiMedia | null;
134
+ url?: string | null;
135
+ /** Map each link's href to a downstream sameAs URL. */
136
+ sameAs?: Link[] | null;
137
+ email?: string | null;
138
+ telephone?: string | null;
139
+ address?: PostalAddress | null;
140
+ }
141
+ export interface PostalAddress extends StrapiComponent<'shared.postal-address'> {
142
+ addressCountry?: string | null;
143
+ addressRegion?: string | null;
144
+ addressLocality?: string | null;
145
+ streetAddress?: string | null;
146
+ postalCode?: string | null;
147
+ }
127
148
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/types/components/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/types/components/shared.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- // Shared components (16)
1
+ // Shared components (18)
2
2
  // Source: packages/strapi-plugin-builder/server/src/components/shared/*.json
3
3
  export {};
4
4
  //# sourceMappingURL=shared.js.map
@@ -1,5 +1,5 @@
1
1
  import type { StrapiI18nDocument, StrapiMedia } from '../strapi.js';
2
- import type { Seo } from '../components/shared.js';
2
+ import type { Organization, Seo } from '../components/shared.js';
3
3
  import type { Footer } from '../components/elements.js';
4
4
  import type { PageDocument } from './page.js';
5
5
  import type { SliderBlock, InquiryFormBlock, HeroBlock, FeaturesBlock } from '../components/blocks.js';
@@ -8,6 +8,7 @@ export type SiteWideBlocks = SliderBlock | InquiryFormBlock | HeroBlock | Featur
8
8
  export interface Global {
9
9
  sitename: string;
10
10
  seo: Seo | null;
11
+ organization?: Organization | null;
11
12
  home: PageDocument | null;
12
13
  footer: Footer | null;
13
14
  siteWideBlocks: SiteWideBlocks[];
@@ -1 +1 @@
1
- {"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../../src/types/content-types/global.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,mEAAmE;AACnE,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,CAAC;AAExF,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../../../src/types/content-types/global.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,aAAa,EACd,MAAM,yBAAyB,CAAC;AAEjC,mEAAmE;AACnE,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,gBAAgB,GAAG,SAAS,GAAG,aAAa,CAAC;AAExF,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,MAAM,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export type { StrapiDocument, StrapiI18nDocument, LocalizationRef, StrapiComponent, StrapiResponse, StrapiCollectionResponse, StrapiPagination, StrapiError, StrapiMedia, StrapiMediaFormat, BlocksContent, BlockNode, BlockParagraph, BlockHeading, BlockList, BlockListItem, BlockQuote, BlockCode, BlockImage, BlockInlineNode, BlockTextChild, BlockLinkChild, } from './strapi.js';
2
- export type { Link, NavigationGroup, Image, Seo, FeatureItem, HighlightItem, SliderItem, BentoItem, TestimonialItem, LogoItem, StatItem, PricingTier, TeamMember, AnalyticsSetting, ChatbotSetting, SiteVerification, BrandColors, Section, Footer, HeroBlock, FeaturesBlock, CtaBlock, SliderBlock, InquiryFormBlock, FaqBlock, HighlightsBlock, BentoGridBlock, TestimonialsBlock, LogoCloudBlock, StatsBlock, PricingBlock, ContentBlock, TeamBlock, } from './components/index.js';
2
+ export type { Link, NavigationGroup, Image, Seo, Organization, PostalAddress, FeatureItem, HighlightItem, SliderItem, BentoItem, TestimonialItem, LogoItem, StatItem, PricingTier, TeamMember, AnalyticsSetting, ChatbotSetting, SiteVerification, BrandColors, Section, Footer, HeroBlock, FeaturesBlock, CtaBlock, SliderBlock, InquiryFormBlock, FaqBlock, HighlightsBlock, BentoGridBlock, TestimonialsBlock, LogoCloudBlock, StatsBlock, PricingBlock, ContentBlock, TeamBlock, } from './components/index.js';
3
3
  export type { Page, PageDocument, PageBlocks, Article, ArticleDocument, Faq, FaqDocument, Inquiry, InquiryDocument, InquiryFormData, InquiryReceipt, Category, CategoryDocument, Tag, TagDocument, Author, AuthorDocument, Series, SeriesDocument, Navigation, NavigationDocument, Global, GlobalDocument, SiteWideBlocks, SiteSettings, SiteSettingsDocument, } from './content-types/index.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,cAAc,EACd,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,IAAI,EACJ,eAAe,EACf,KAAK,EACL,GAAG,EACH,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,OAAO,EACP,eAAe,EACf,GAAG,EACH,WAAW,EACX,OAAO,EACP,eAAe,EACf,eAAe,EACf,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,GAAG,EACH,WAAW,EACX,MAAM,EACN,cAAc,EACd,MAAM,EACN,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,cAAc,EACd,YAAY,EACZ,oBAAoB,GACrB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,cAAc,EACd,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,IAAI,EACJ,eAAe,EACf,KAAK,EACL,GAAG,EACH,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,GACV,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,OAAO,EACP,eAAe,EACf,GAAG,EACH,WAAW,EACX,OAAO,EACP,eAAe,EACf,eAAe,EACf,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,GAAG,EACH,WAAW,EACX,MAAM,EACN,cAAc,EACd,MAAM,EACN,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,cAAc,EACd,YAAY,EACZ,oBAAoB,GACrB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Faq } from "../types/content-types/faq.js";
2
+ /** Extract text from Strapi Blocks, preserving paragraph and list-item boundaries. */
3
+ export declare function blocksToPlainText(blocks: unknown): string;
4
+ export type FaqJsonLdInput = Pick<Faq, "question" | "answer">;
5
+ export interface FaqPageJsonLd {
6
+ "@context": "https://schema.org";
7
+ "@type": "FAQPage";
8
+ mainEntity: {
9
+ "@type": "Question";
10
+ name: string;
11
+ acceptedAnswer: {
12
+ "@type": "Answer";
13
+ text: string;
14
+ };
15
+ }[];
16
+ }
17
+ /** Omit incomplete pairs and return null when there is no publishable FAQ text. */
18
+ export declare function faqPageJsonLd(faqs: readonly FaqJsonLdInput[] | null | undefined): FaqPageJsonLd | null;
19
+ //# sourceMappingURL=faq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faq.d.ts","sourceRoot":"","sources":["../../src/utils/faq.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AAwDzD,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAOzD;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,oBAAoB,CAAC;IACjC,OAAO,EAAE,SAAS,CAAC;IACnB,UAAU,EAAE;QACV,OAAO,EAAE,UAAU,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE;YAAE,OAAO,EAAE,QAAQ,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KACrD,EAAE,CAAC;CACL;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,GAAG,SAAS,GACjD,aAAa,GAAG,IAAI,CAgBtB"}
@@ -0,0 +1,89 @@
1
+ function isRecord(value) {
2
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3
+ }
4
+ function inlineText(value) {
5
+ if (!Array.isArray(value))
6
+ return "";
7
+ return value
8
+ .map((node) => {
9
+ if (!isRecord(node))
10
+ return "";
11
+ if (node.type === "text")
12
+ return typeof node.text === "string" ? node.text : "";
13
+ if (node.type === "link")
14
+ return inlineText(node.children);
15
+ return "";
16
+ })
17
+ .join("");
18
+ }
19
+ function blockText(value) {
20
+ if (!isRecord(value))
21
+ return "";
22
+ switch (value.type) {
23
+ case "paragraph":
24
+ case "heading":
25
+ case "quote":
26
+ case "code":
27
+ return inlineText(value.children);
28
+ case "list-item": {
29
+ if (!Array.isArray(value.children))
30
+ return "";
31
+ const lines = [];
32
+ let text = "";
33
+ for (const child of value.children) {
34
+ if (isRecord(child) && child.type === "list") {
35
+ if (text)
36
+ lines.push(text);
37
+ text = "";
38
+ const nested = blockText(child);
39
+ if (nested)
40
+ lines.push(nested);
41
+ }
42
+ else {
43
+ text += inlineText([child]);
44
+ }
45
+ }
46
+ if (text)
47
+ lines.push(text);
48
+ return lines.join("\n");
49
+ }
50
+ case "list":
51
+ return Array.isArray(value.children)
52
+ ? value.children
53
+ .map((child) => blockText(child))
54
+ .filter(Boolean)
55
+ .join("\n")
56
+ : "";
57
+ default:
58
+ return "";
59
+ }
60
+ }
61
+ /** Extract text from Strapi Blocks, preserving paragraph and list-item boundaries. */
62
+ export function blocksToPlainText(blocks) {
63
+ if (!Array.isArray(blocks))
64
+ return "";
65
+ return blocks
66
+ .map((block) => blockText(block))
67
+ .filter(Boolean)
68
+ .join("\n")
69
+ .trim();
70
+ }
71
+ /** Omit incomplete pairs and return null when there is no publishable FAQ text. */
72
+ export function faqPageJsonLd(faqs) {
73
+ const mainEntity = [];
74
+ for (const faq of faqs ?? []) {
75
+ const name = faq.question?.trim();
76
+ const text = blocksToPlainText(faq.answer);
77
+ if (name && text) {
78
+ mainEntity.push({
79
+ "@type": "Question",
80
+ name,
81
+ acceptedAnswer: { "@type": "Answer", text },
82
+ });
83
+ }
84
+ }
85
+ return mainEntity.length
86
+ ? { "@context": "https://schema.org", "@type": "FAQPage", mainEntity }
87
+ : null;
88
+ }
89
+ //# sourceMappingURL=faq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faq.js","sourceRoot":"","sources":["../../src/utils/faq.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,8 @@
1
- export { getMediaUrl, getAssetUrl } from './media.js';
1
+ export { getMediaUrl, getAssetUrl } from "./media.js";
2
+ export { resolveSeo, siteVerificationMeta } from "./seo.js";
3
+ export type { SeoDefaults, SeoInput, ResolvedSeo, ResolvedSocialMetadata, VerificationMeta, SiteVerificationSettings, } from "./seo.js";
4
+ export { serializeJsonLd, mergeStructuredData } from "./structured-data.js";
5
+ export type { StructuredDataObject, StructuredDataExclusion, StructuredDataMergeResult, } from "./structured-data.js";
6
+ export { blocksToPlainText, faqPageJsonLd } from "./faq.js";
7
+ export type { FaqJsonLdInput, FaqPageJsonLd } from "./faq.js";
2
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAC5D,YAAY,EACV,WAAW,EACX,QAAQ,EACR,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,YAAY,EACV,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -1,2 +1,5 @@
1
- export { getMediaUrl, getAssetUrl } from './media.js';
1
+ export { getMediaUrl, getAssetUrl } from "./media.js";
2
+ export { resolveSeo, siteVerificationMeta } from "./seo.js";
3
+ export { serializeJsonLd, mergeStructuredData } from "./structured-data.js";
4
+ export { blocksToPlainText, faqPageJsonLd } from "./faq.js";
2
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAS5D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAM5E,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { Seo, SiteVerification } from "../types/components/shared.js";
2
+ /** Application-owned fallbacks; indexing is enabled unless explicitly disabled. */
3
+ export interface SeoDefaults {
4
+ title: string;
5
+ description?: string;
6
+ url?: string;
7
+ ogImageUrl?: string;
8
+ mediaHost?: string;
9
+ indexingEnabled?: boolean;
10
+ }
11
+ export type SeoInput = Partial<Pick<Seo, "metaTitle" | "metaDescription" | "ogImage" | "canonicalURL" | "noindex" | "nofollow">>;
12
+ export interface ResolvedSocialMetadata {
13
+ title: string;
14
+ description?: string;
15
+ url?: string;
16
+ images: string[];
17
+ }
18
+ export interface ResolvedSeo {
19
+ title: string;
20
+ description?: string;
21
+ canonical?: string;
22
+ robots: {
23
+ index: boolean;
24
+ follow: boolean;
25
+ };
26
+ openGraph: ResolvedSocialMetadata;
27
+ twitter: ResolvedSocialMetadata & {
28
+ card: "summary" | "summary_large_image";
29
+ };
30
+ }
31
+ /** Resolve CMS fields into framework-independent metadata. No markup is emitted. */
32
+ export declare function resolveSeo(seo: SeoInput | null | undefined, defaults: SeoDefaults): ResolvedSeo;
33
+ export interface VerificationMeta {
34
+ name: string;
35
+ content: string;
36
+ }
37
+ export interface SiteVerificationSettings {
38
+ siteVerifications?: readonly Pick<SiteVerification, "service" | "name" | "content">[] | null;
39
+ }
40
+ /** Preserve configured order and duplicates; skip incomplete verification entries. */
41
+ export declare function siteVerificationMeta(settings: SiteVerificationSettings | null | undefined): VerificationMeta[];
42
+ //# sourceMappingURL=seo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/utils/seo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAE3E,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,CAC5B,IAAI,CACF,GAAG,EACD,WAAW,GACX,iBAAiB,GACjB,SAAS,GACT,cAAc,GACd,SAAS,GACT,UAAU,CACb,CACF,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5C,SAAS,EAAE,sBAAsB,CAAC;IAClC,OAAO,EAAE,sBAAsB,GAAG;QAAE,IAAI,EAAE,SAAS,GAAG,qBAAqB,CAAA;KAAE,CAAC;CAC/E;AAyBD,oFAAoF;AACpF,wBAAgB,UAAU,CACxB,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EAChC,QAAQ,EAAE,WAAW,GACpB,WAAW,CA8Bb;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,iBAAiB,CAAC,EAChB,SAAS,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC;CAC5E;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,GACpD,gBAAgB,EAAE,CAsBpB"}
@@ -0,0 +1,79 @@
1
+ import { getMediaUrl } from "./media.js";
2
+ function nonblank(value) {
3
+ return value?.trim() || undefined;
4
+ }
5
+ function absoluteHttpUrl(value) {
6
+ const candidate = nonblank(value);
7
+ if (!candidate ||
8
+ !/^https?:\/\/[^/\\\s?#]+/i.test(candidate) ||
9
+ candidate.includes("\\"))
10
+ return undefined;
11
+ try {
12
+ const url = new URL(candidate);
13
+ return (url.protocol === "http:" || url.protocol === "https:") &&
14
+ url.hostname
15
+ ? candidate
16
+ : undefined;
17
+ }
18
+ catch {
19
+ return undefined;
20
+ }
21
+ }
22
+ /** Resolve CMS fields into framework-independent metadata. No markup is emitted. */
23
+ export function resolveSeo(seo, defaults) {
24
+ const title = nonblank(seo?.metaTitle) ?? defaults.title;
25
+ const description = nonblank(seo?.metaDescription) ?? defaults.description;
26
+ const canonical = absoluteHttpUrl(seo?.canonicalURL) ?? defaults.url;
27
+ const image = nonblank(seo?.ogImage?.url);
28
+ const imageUrl = image
29
+ ? getMediaUrl(image, defaults.mediaHost)
30
+ : defaults.ogImageUrl;
31
+ const indexingEnabled = defaults.indexingEnabled ?? true;
32
+ const social = {
33
+ title,
34
+ ...(description === undefined ? {} : { description }),
35
+ ...(canonical === undefined ? {} : { url: canonical }),
36
+ images: imageUrl ? [imageUrl] : [],
37
+ };
38
+ return {
39
+ title,
40
+ ...(description === undefined ? {} : { description }),
41
+ ...(canonical === undefined ? {} : { canonical }),
42
+ robots: {
43
+ index: indexingEnabled && !seo?.noindex,
44
+ follow: indexingEnabled && !seo?.nofollow,
45
+ },
46
+ openGraph: social,
47
+ twitter: {
48
+ ...social,
49
+ images: [...social.images],
50
+ card: imageUrl ? "summary_large_image" : "summary",
51
+ },
52
+ };
53
+ }
54
+ /** Preserve configured order and duplicates; skip incomplete verification entries. */
55
+ export function siteVerificationMeta(settings) {
56
+ const result = [];
57
+ for (const entry of settings?.siteVerifications ?? []) {
58
+ const content = nonblank(entry.content);
59
+ let name;
60
+ switch (entry.service) {
61
+ case "google":
62
+ name = "google-site-verification";
63
+ break;
64
+ case "bing":
65
+ name = "msvalidate.01";
66
+ break;
67
+ case "naver":
68
+ name = "naver-site-verification";
69
+ break;
70
+ case "custom":
71
+ name = nonblank(entry.name);
72
+ break;
73
+ }
74
+ if (name && content)
75
+ result.push({ name, content });
76
+ }
77
+ return result;
78
+ }
79
+ //# sourceMappingURL=seo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/utils/seo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAyCzC,SAAS,QAAQ,CAAC,KAAgC;IAChD,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AACpC,CAAC;AAED,SAAS,eAAe,CAAC,KAAgC;IACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,IACE,CAAC,SAAS;QACV,CAAC,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3C,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAExB,OAAO,SAAS,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;YAC5D,GAAG,CAAC,QAAQ;YACZ,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,UAAU,CACxB,GAAgC,EAChC,QAAqB;IAErB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;IACzD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC;IAC3E,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC;IACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,KAAK;QACpB,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC;QACxC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IACxB,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC;IACzD,MAAM,MAAM,GAA2B;QACrC,KAAK;QACL,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QACtD,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;KACnC,CAAC;IACF,OAAO;QACL,KAAK;QACL,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,MAAM,EAAE;YACN,KAAK,EAAE,eAAe,IAAI,CAAC,GAAG,EAAE,OAAO;YACvC,MAAM,EAAE,eAAe,IAAI,CAAC,GAAG,EAAE,QAAQ;SAC1C;QACD,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE;YACP,GAAG,MAAM;YACT,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;SACnD;KACF,CAAC;AACJ,CAAC;AAYD,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAClC,QAAqD;IAErD,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,IAAwB,CAAC;QAC7B,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC;YACtB,KAAK,QAAQ;gBACX,IAAI,GAAG,0BAA0B,CAAC;gBAClC,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,GAAG,eAAe,CAAC;gBACvB,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,GAAG,yBAAyB,CAAC;gBACjC,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM;QACV,CAAC;QACD,IAAI,IAAI,IAAI,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /** JSON.stringify semantics, with '<' escaped for an HTML script text context. */
2
+ export declare function serializeJsonLd(value: unknown): string;
3
+ export interface StructuredDataObject {
4
+ "@type": string | string[];
5
+ [key: string]: unknown;
6
+ }
7
+ export interface StructuredDataExclusion {
8
+ source: "auto" | "cms";
9
+ /** Zero-based array position, or zero for a single input. */
10
+ index: number;
11
+ reason: "not-object" | "invalid-type";
12
+ }
13
+ export interface StructuredDataMergeResult {
14
+ data: StructuredDataObject[];
15
+ excluded: StructuredDataExclusion[];
16
+ }
17
+ /** CMS entries replace equal @type sets in place; later entries win. */
18
+ export declare function mergeStructuredData(auto: unknown, cms: unknown): StructuredDataMergeResult;
19
+ //# sourceMappingURL=structured-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-data.d.ts","sourceRoot":"","sources":["../../src/utils/structured-data.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMtD;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,GAAG,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,oBAAoB,EAAE,CAAC;IAC7B,QAAQ,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAiBD,wEAAwE;AACxE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,OAAO,GACX,yBAAyB,CA+B3B"}
@@ -0,0 +1,51 @@
1
+ /** JSON.stringify semantics, with '<' escaped for an HTML script text context. */
2
+ export function serializeJsonLd(value) {
3
+ const serialized = JSON.stringify(value);
4
+ if (serialized === undefined) {
5
+ throw new TypeError("JSON-LD value must be JSON-serializable");
6
+ }
7
+ return serialized.replace(/</g, "\\u003c");
8
+ }
9
+ function typeIdentity(value) {
10
+ const types = typeof value === "string" ? [value] : value;
11
+ if (!Array.isArray(types) ||
12
+ types.length === 0 ||
13
+ ![...types].every((type) => typeof type === "string" && type.trim().length > 0)) {
14
+ return undefined;
15
+ }
16
+ return JSON.stringify([...new Set(types)].sort());
17
+ }
18
+ /** CMS entries replace equal @type sets in place; later entries win. */
19
+ export function mergeStructuredData(auto, cms) {
20
+ const data = [];
21
+ const excluded = [];
22
+ const positions = new Map();
23
+ for (const [source, input] of [
24
+ ["auto", auto],
25
+ ["cms", cms],
26
+ ]) {
27
+ const entries = input == null ? [] : Array.isArray(input) ? input : [input];
28
+ entries.forEach((entry, index) => {
29
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
30
+ excluded.push({ source, index, reason: "not-object" });
31
+ return;
32
+ }
33
+ const object = entry;
34
+ const identity = typeIdentity(object["@type"]);
35
+ if (identity === undefined) {
36
+ excluded.push({ source, index, reason: "invalid-type" });
37
+ return;
38
+ }
39
+ const position = positions.get(identity);
40
+ if (position === undefined) {
41
+ positions.set(identity, data.length);
42
+ data.push(object);
43
+ }
44
+ else {
45
+ data[position] = object;
46
+ }
47
+ });
48
+ }
49
+ return { data, excluded };
50
+ }
51
+ //# sourceMappingURL=structured-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-data.js","sourceRoot":"","sources":["../../src/utils/structured-data.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,8 @@ Reusable sub-components referenced by blocks and content types.
27
27
  | Link | `shared.link` | — |
28
28
  | Logo Item | `shared.logo-item` | — |
29
29
  | Navigation Group | `shared.navigation-group` | — |
30
+ | Organization | `shared.organization` | — |
31
+ | Postal Address | `shared.postal-address` | — |
30
32
  | Pricing Tier | `shared.pricing-tier` | — |
31
33
  | SEO | `shared.seo` | — |
32
34
  | Site Verification | `shared.site-verification` | — |
@@ -56,6 +58,7 @@ Reusable sub-components referenced by blocks and content types.
56
58
  | `description` | text | — | — | — |
57
59
  | `image` | component `shared.image` | — | — | — |
58
60
  | `icon` | customField | — | — | custom field `plugin::icon-picker.icon` |
61
+ | `tone` | enumeration | — | `default` | `default`, `emphasis` |
59
62
  | `colSpan` | integer | — | `1` | — |
60
63
  | `rowSpan` | integer | — | `1` | — |
61
64
  | `link` | component `shared.link` | — | — | — |
@@ -149,6 +152,33 @@ Reusable sub-components referenced by blocks and content types.
149
152
  | `href` | string | — | — | — |
150
153
  | `links` | component `shared.link` (repeatable) | — | — | — |
151
154
 
155
+ ## Organization
156
+
157
+ `shared.organization` — Site-wide organization identity for downstream metadata
158
+
159
+ | Attribute | Type | Required | Default | Notes |
160
+ |---|---|---|---|---|
161
+ | `name` | string | — | — | — |
162
+ | `legalName` | string | — | — | — |
163
+ | `logo` | media (single) | — | — | allowed: images |
164
+ | `url` | string | — | — | — |
165
+ | `sameAs` | component `shared.link` (repeatable) | — | — | — |
166
+ | `email` | email | — | — | — |
167
+ | `telephone` | string | — | — | — |
168
+ | `address` | component `shared.postal-address` | — | — | — |
169
+
170
+ ## Postal Address
171
+
172
+ `shared.postal-address` — Optional organization postal address
173
+
174
+ | Attribute | Type | Required | Default | Notes |
175
+ |---|---|---|---|---|
176
+ | `addressCountry` | string | — | — | — |
177
+ | `addressRegion` | string | — | — | — |
178
+ | `addressLocality` | string | — | — | — |
179
+ | `streetAddress` | string | — | — | — |
180
+ | `postalCode` | string | — | — | — |
181
+
152
182
  ## Pricing Tier
153
183
 
154
184
  `shared.pricing-tier` — Pricing plan with name, price, features, and CTA
@@ -102,6 +102,7 @@ Site-wide content, theme settings, footer, and common blocks
102
102
  |---|---|---|---|---|
103
103
  | `sitename` | string | yes | — | — |
104
104
  | `seo` | component `shared.seo` | — | — | — |
105
+ | `organization` | component `shared.organization` | — | — | — |
105
106
  | `home` | relation `oneToOne` → `plugin::builder.page` | — | — | — |
106
107
  | `footer` | component `elements.footer` | — | — | — |
107
108
  | `siteWideBlocks` | dynamiczone | — | — | — |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dani-builder/strapi-client",
3
- "version": "0.12.1",
3
+ "version": "0.13.0",
4
4
  "description": "TypeScript client for Daniworks Builder CMS (Strapi v5)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -67,7 +67,7 @@
67
67
  "eslint": "^10.8.1",
68
68
  "typescript": "^6.0.3",
69
69
  "@types/node": "^26",
70
- "@dani-builder/agent-contract-build": "npm:@dani-builder/agent-contract@0.5.0",
70
+ "@dani-builder/agent-contract-build": "npm:@dani-builder/agent-contract@0.6.0",
71
71
  "@repo/eslint-config": "0.0.0",
72
72
  "@repo/typescript-config": "0.0.0"
73
73
  },
@@ -87,7 +87,7 @@
87
87
  "author": "HJ-company",
88
88
  "scripts": {
89
89
  "build": "tsc",
90
- "check-types": "tsc --noEmit",
90
+ "check-types": "tsc --noEmit && tsc -p test/tsconfig.json",
91
91
  "lint": "eslint --max-warnings 0",
92
92
  "test": "vitest run"
93
93
  }