@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 +87 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/populate/builders.d.ts +8 -1
- package/dist/populate/builders.d.ts.map +1 -1
- package/dist/populate/builders.js +4 -1
- package/dist/populate/builders.js.map +1 -1
- package/dist/types/components/index.d.ts +1 -1
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/components/shared.d.ts +22 -1
- package/dist/types/components/shared.d.ts.map +1 -1
- package/dist/types/components/shared.js +1 -1
- package/dist/types/content-types/global.d.ts +2 -1
- package/dist/types/content-types/global.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/faq.d.ts +19 -0
- package/dist/utils/faq.d.ts.map +1 -0
- package/dist/utils/faq.js +89 -0
- package/dist/utils/faq.js.map +1 -0
- package/dist/utils/index.d.ts +7 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/seo.d.ts +42 -0
- package/dist/utils/seo.d.ts.map +1 -0
- package/dist/utils/seo.js +79 -0
- package/dist/utils/seo.js.map +1 -0
- package/dist/utils/structured-data.d.ts +19 -0
- package/dist/utils/structured-data.d.ts.map +1 -0
- package/dist/utils/structured-data.js +51 -0
- package/dist/utils/structured-data.js.map +1 -0
- package/docs/components.md +30 -0
- package/docs/content-types.md +1 -0
- package/package.json +3 -3
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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;
|
|
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
|
|
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":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMjE,MAAM,WAAW,IAAK,SAAQ,eAAe,CAAC,aAAa,CAAC;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAMD,MAAM,WAAW,eAAgB,SAAQ,eAAe,CAAC,yBAAyB,CAAC;IACjF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAMD;;;;;GAKG;AACH,MAAM,WAAW,KAAM,SAAQ,eAAe,CAAC,cAAc,CAAC;IAC5D,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACnC;AAMD,MAAM,WAAW,GAAI,SAAQ,eAAe,CAAC,YAAY,CAAC;IACxD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/types/components/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
export { getMediaUrl, getAssetUrl } from
|
|
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"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
export { getMediaUrl, getAssetUrl } from
|
|
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
|
package/dist/utils/index.js.map
CHANGED
|
@@ -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":"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"}
|
|
@@ -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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"}
|
package/docs/components.md
CHANGED
|
@@ -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
|
package/docs/content-types.md
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
}
|