@growth-labs/seo 0.1.3
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 +80 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +162 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/seo.d.ts +5 -0
- package/dist/middleware/seo.d.ts.map +1 -0
- package/dist/middleware/seo.js +70 -0
- package/dist/middleware/seo.js.map +1 -0
- package/dist/options.d.ts +489 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +118 -0
- package/dist/options.js.map +1 -0
- package/dist/routes/llms.d.ts +4 -0
- package/dist/routes/llms.d.ts.map +1 -0
- package/dist/routes/llms.js +11 -0
- package/dist/routes/llms.js.map +1 -0
- package/dist/routes/podcast-narration.d.ts +4 -0
- package/dist/routes/podcast-narration.d.ts.map +1 -0
- package/dist/routes/podcast-narration.js +36 -0
- package/dist/routes/podcast-narration.js.map +1 -0
- package/dist/routes/podcast.d.ts +4 -0
- package/dist/routes/podcast.d.ts.map +1 -0
- package/dist/routes/podcast.js +20 -0
- package/dist/routes/podcast.js.map +1 -0
- package/dist/routes/robots.d.ts +4 -0
- package/dist/routes/robots.d.ts.map +1 -0
- package/dist/routes/robots.js +11 -0
- package/dist/routes/robots.js.map +1 -0
- package/dist/routes/rss.d.ts +4 -0
- package/dist/routes/rss.d.ts.map +1 -0
- package/dist/routes/rss.js +19 -0
- package/dist/routes/rss.js.map +1 -0
- package/dist/routes/sitemap-articles.d.ts +4 -0
- package/dist/routes/sitemap-articles.d.ts.map +1 -0
- package/dist/routes/sitemap-articles.js +19 -0
- package/dist/routes/sitemap-articles.js.map +1 -0
- package/dist/routes/sitemap-index.d.ts +4 -0
- package/dist/routes/sitemap-index.d.ts.map +1 -0
- package/dist/routes/sitemap-index.js +77 -0
- package/dist/routes/sitemap-index.js.map +1 -0
- package/dist/routes/sitemap-pages.d.ts +4 -0
- package/dist/routes/sitemap-pages.d.ts.map +1 -0
- package/dist/routes/sitemap-pages.js +18 -0
- package/dist/routes/sitemap-pages.js.map +1 -0
- package/dist/routes/sitemap-products.d.ts +4 -0
- package/dist/routes/sitemap-products.d.ts.map +1 -0
- package/dist/routes/sitemap-products.js +18 -0
- package/dist/routes/sitemap-products.js.map +1 -0
- package/dist/routes/sitemap-videos.d.ts +4 -0
- package/dist/routes/sitemap-videos.d.ts.map +1 -0
- package/dist/routes/sitemap-videos.js +18 -0
- package/dist/routes/sitemap-videos.js.map +1 -0
- package/dist/state.d.ts +7 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +18 -0
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +103 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/aeo.d.ts +16 -0
- package/dist/utils/aeo.d.ts.map +1 -0
- package/dist/utils/aeo.js +38 -0
- package/dist/utils/aeo.js.map +1 -0
- package/dist/utils/discover.d.ts +18 -0
- package/dist/utils/discover.d.ts.map +1 -0
- package/dist/utils/discover.js +41 -0
- package/dist/utils/discover.js.map +1 -0
- package/dist/utils/hreflang.d.ts +3 -0
- package/dist/utils/hreflang.d.ts.map +1 -0
- package/dist/utils/hreflang.js +20 -0
- package/dist/utils/hreflang.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json-ld/article.d.ts +4 -0
- package/dist/utils/json-ld/article.d.ts.map +1 -0
- package/dist/utils/json-ld/article.js +66 -0
- package/dist/utils/json-ld/article.js.map +1 -0
- package/dist/utils/json-ld/audio.d.ts +7 -0
- package/dist/utils/json-ld/audio.d.ts.map +1 -0
- package/dist/utils/json-ld/audio.js +25 -0
- package/dist/utils/json-ld/audio.js.map +1 -0
- package/dist/utils/json-ld/breadcrumb.d.ts +7 -0
- package/dist/utils/json-ld/breadcrumb.d.ts.map +1 -0
- package/dist/utils/json-ld/breadcrumb.js +20 -0
- package/dist/utils/json-ld/breadcrumb.js.map +1 -0
- package/dist/utils/json-ld/faq.d.ts +6 -0
- package/dist/utils/json-ld/faq.d.ts.map +1 -0
- package/dist/utils/json-ld/faq.js +15 -0
- package/dist/utils/json-ld/faq.js.map +1 -0
- package/dist/utils/json-ld/howto.d.ts +7 -0
- package/dist/utils/json-ld/howto.d.ts.map +1 -0
- package/dist/utils/json-ld/howto.js +19 -0
- package/dist/utils/json-ld/howto.js.map +1 -0
- package/dist/utils/json-ld/index.d.ts +13 -0
- package/dist/utils/json-ld/index.d.ts.map +1 -0
- package/dist/utils/json-ld/index.js +12 -0
- package/dist/utils/json-ld/index.js.map +1 -0
- package/dist/utils/json-ld/item-list.d.ts +5 -0
- package/dist/utils/json-ld/item-list.d.ts.map +1 -0
- package/dist/utils/json-ld/item-list.js +20 -0
- package/dist/utils/json-ld/item-list.js.map +1 -0
- package/dist/utils/json-ld/organization.d.ts +4 -0
- package/dist/utils/json-ld/organization.d.ts.map +1 -0
- package/dist/utils/json-ld/organization.js +36 -0
- package/dist/utils/json-ld/organization.js.map +1 -0
- package/dist/utils/json-ld/person.d.ts +6 -0
- package/dist/utils/json-ld/person.d.ts.map +1 -0
- package/dist/utils/json-ld/person.js +23 -0
- package/dist/utils/json-ld/person.js.map +1 -0
- package/dist/utils/json-ld/product.d.ts +5 -0
- package/dist/utils/json-ld/product.d.ts.map +1 -0
- package/dist/utils/json-ld/product.js +112 -0
- package/dist/utils/json-ld/product.js.map +1 -0
- package/dist/utils/json-ld/video.d.ts +3 -0
- package/dist/utils/json-ld/video.d.ts.map +1 -0
- package/dist/utils/json-ld/video.js +20 -0
- package/dist/utils/json-ld/video.js.map +1 -0
- package/dist/utils/json-ld/website.d.ts +4 -0
- package/dist/utils/json-ld/website.d.ts.map +1 -0
- package/dist/utils/json-ld/website.js +22 -0
- package/dist/utils/json-ld/website.js.map +1 -0
- package/dist/utils/llms.d.ts +7 -0
- package/dist/utils/llms.d.ts.map +1 -0
- package/dist/utils/llms.js +38 -0
- package/dist/utils/llms.js.map +1 -0
- package/dist/utils/meta.d.ts +7 -0
- package/dist/utils/meta.d.ts.map +1 -0
- package/dist/utils/meta.js +122 -0
- package/dist/utils/meta.js.map +1 -0
- package/dist/utils/podcast.d.ts +8 -0
- package/dist/utils/podcast.d.ts.map +1 -0
- package/dist/utils/podcast.js +94 -0
- package/dist/utils/podcast.js.map +1 -0
- package/dist/utils/robots.d.ts +3 -0
- package/dist/utils/robots.d.ts.map +1 -0
- package/dist/utils/robots.js +28 -0
- package/dist/utils/robots.js.map +1 -0
- package/dist/utils/rss.d.ts +4 -0
- package/dist/utils/rss.d.ts.map +1 -0
- package/dist/utils/rss.js +53 -0
- package/dist/utils/rss.js.map +1 -0
- package/dist/utils/sitemap.d.ts +13 -0
- package/dist/utils/sitemap.d.ts.map +1 -0
- package/dist/utils/sitemap.js +133 -0
- package/dist/utils/sitemap.js.map +1 -0
- package/dist/utils/validation.d.ts +18 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +141 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/vite-plugin.d.ts +4 -0
- package/dist/vite-plugin.d.ts.map +1 -0
- package/dist/vite-plugin.js +22 -0
- package/dist/vite-plugin.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const DISCOVER_VARIANTS = [
|
|
2
|
+
{ width: 1200, height: 675 },
|
|
3
|
+
{ width: 1200, height: 900 },
|
|
4
|
+
{ width: 1200, height: 1200 },
|
|
5
|
+
];
|
|
6
|
+
export function buildDiscoverImageUrls(imageUrl, site) {
|
|
7
|
+
const sourceUrl = new URL(imageUrl, site);
|
|
8
|
+
return DISCOVER_VARIANTS.map(({ width, height }) => `${sourceUrl.origin}/cdn-cgi/image/width=${width},height=${height},fit=cover,format=auto${sourceUrl.pathname}`);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Returns three ImageObject entries for Google Discover optimization.
|
|
12
|
+
* Google Discover requires images in 16:9, 4:3, and 1:1 aspect ratios,
|
|
13
|
+
* each at least 1200px wide.
|
|
14
|
+
*
|
|
15
|
+
* Consumers should supply the actual image URLs (typically generated via
|
|
16
|
+
* @growth-labs/media image transformations). This utility wraps them in
|
|
17
|
+
* schema.org ImageObject format suitable for JSON-LD `image` arrays.
|
|
18
|
+
*/
|
|
19
|
+
export function getDiscoverImages(imageUrl16x9, imageUrl4x3, imageUrl1x1) {
|
|
20
|
+
return [
|
|
21
|
+
{
|
|
22
|
+
'@type': 'ImageObject',
|
|
23
|
+
url: imageUrl16x9,
|
|
24
|
+
width: 1200,
|
|
25
|
+
height: 675,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
'@type': 'ImageObject',
|
|
29
|
+
url: imageUrl4x3,
|
|
30
|
+
width: 1200,
|
|
31
|
+
height: 900,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
'@type': 'ImageObject',
|
|
35
|
+
url: imageUrl1x1,
|
|
36
|
+
width: 1200,
|
|
37
|
+
height: 1200,
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/utils/discover.ts"],"names":[],"mappings":"AAOA,MAAM,iBAAiB,GAAG;IACzB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAC5B,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;CACpB,CAAA;AAEV,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,IAAY;IACpE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAEzC,OAAO,iBAAiB,CAAC,GAAG,CAC3B,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CACrB,GAAG,SAAS,CAAC,MAAM,wBAAwB,KAAK,WAAW,MAAM,yBAAyB,SAAS,CAAC,QAAQ,EAAE,CAC/G,CAAA;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAChC,YAAoB,EACpB,WAAmB,EACnB,WAAmB;IAEnB,OAAO;QACN;YACC,OAAO,EAAE,aAAa;YACtB,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,GAAG;SACX;QACD;YACC,OAAO,EAAE,aAAa;YACtB,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,GAAG;SACX;QACD;YACC,OAAO,EAAE,aAAa;YACtB,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACZ;KACD,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hreflang.d.ts","sourceRoot":"","sources":["../../src/utils/hreflang.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEvE,wBAAgB,gBAAgB,CAC/B,UAAU,EAAE,sBAAsB,EAAE,EACpC,aAAa,EAAE,MAAM,GACnB,YAAY,EAAE,CAoBhB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function generateHreflang(alternates, defaultLocale) {
|
|
2
|
+
if (!alternates.length)
|
|
3
|
+
return [];
|
|
4
|
+
const links = alternates.map((alt) => ({
|
|
5
|
+
rel: 'alternate',
|
|
6
|
+
hreflang: alt.lang,
|
|
7
|
+
href: alt.url,
|
|
8
|
+
}));
|
|
9
|
+
// Add x-default pointing to the URL of the defaultLocale
|
|
10
|
+
const defaultEntry = alternates.find((a) => a.lang === defaultLocale);
|
|
11
|
+
if (defaultEntry) {
|
|
12
|
+
links.push({
|
|
13
|
+
rel: 'alternate',
|
|
14
|
+
hreflang: 'x-default',
|
|
15
|
+
href: defaultEntry.url,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return links;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=hreflang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hreflang.js","sourceRoot":"","sources":["../../src/utils/hreflang.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAC/B,UAAoC,EACpC,aAAqB;IAErB,IAAI,CAAC,UAAU,CAAC,MAAM;QAAE,OAAO,EAAE,CAAA;IAEjC,MAAM,KAAK,GAAmB,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtD,GAAG,EAAE,WAAW;QAChB,QAAQ,EAAE,GAAG,CAAC,IAAI;QAClB,IAAI,EAAE,GAAG,CAAC,GAAG;KACb,CAAC,CAAC,CAAA;IAEH,yDAAyD;IACzD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;IACrE,IAAI,YAAY,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC;YACV,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,YAAY,CAAC,GAAG;SACtB,CAAC,CAAA;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { estimateTokenCount, generateAeoMarkdown } from './aeo.js';
|
|
2
|
+
export { type DiscoverImage, getDiscoverImages } from './discover.js';
|
|
3
|
+
export { generateHreflang } from './hreflang.js';
|
|
4
|
+
export * from './json-ld/index.js';
|
|
5
|
+
export { generateLlmsTxt } from './llms.js';
|
|
6
|
+
export { applyTrailingSlash, generateCanonical, generateMeta, type OgVariant } from './meta.js';
|
|
7
|
+
export { generatePodcastFeed } from './podcast.js';
|
|
8
|
+
export { generateRobotsTxt } from './robots.js';
|
|
9
|
+
export { generateRssFeed } from './rss.js';
|
|
10
|
+
export { generateArticleSitemap, generatePagesSitemap, generateProductSitemap, generateSitemapIndex, generateVideoSitemap, type SitemapEntry, } from './sitemap.js';
|
|
11
|
+
export { type PageValidationOptions, type ValidationResult, validateJsonLd, validatePage, } from './validation.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAClE,OAAO,EAAE,KAAK,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,YAAY,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EACN,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,cAAc,EACd,YAAY,GACZ,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { estimateTokenCount, generateAeoMarkdown } from './aeo.js';
|
|
2
|
+
export { getDiscoverImages } from './discover.js';
|
|
3
|
+
export { generateHreflang } from './hreflang.js';
|
|
4
|
+
export * from './json-ld/index.js';
|
|
5
|
+
export { generateLlmsTxt } from './llms.js';
|
|
6
|
+
export { applyTrailingSlash, generateCanonical, generateMeta } from './meta.js';
|
|
7
|
+
export { generatePodcastFeed } from './podcast.js';
|
|
8
|
+
export { generateRobotsTxt } from './robots.js';
|
|
9
|
+
export { generateRssFeed } from './rss.js';
|
|
10
|
+
export { generateArticleSitemap, generatePagesSitemap, generateProductSitemap, generateSitemapIndex, generateVideoSitemap, } from './sitemap.js';
|
|
11
|
+
export { validateJsonLd, validatePage, } from './validation.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAClE,OAAO,EAAsB,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EAAkB,MAAM,WAAW,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,GAEpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAGN,cAAc,EACd,YAAY,GACZ,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ResolvedSeoOptions } from '../../options.js';
|
|
2
|
+
import type { ContentItem, JsonLdObject } from '../../types.js';
|
|
3
|
+
export declare function generateArticleJsonLd(item: ContentItem, options: ResolvedSeoOptions): JsonLdObject;
|
|
4
|
+
//# sourceMappingURL=article.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/article.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG/D,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,kBAAkB,GACzB,YAAY,CAiEd"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { buildDiscoverImageUrls } from '../discover.js';
|
|
2
|
+
export function generateArticleJsonLd(item, options) {
|
|
3
|
+
const { organization, schemaType, audioNarration } = options;
|
|
4
|
+
const authors = (item.authors ?? []).map((author) => {
|
|
5
|
+
const person = { '@type': 'Person', name: author.name };
|
|
6
|
+
if (author.url)
|
|
7
|
+
person.url = author.url;
|
|
8
|
+
if (author.jobTitle)
|
|
9
|
+
person.jobTitle = author.jobTitle;
|
|
10
|
+
if (author.sameAs?.length)
|
|
11
|
+
person.sameAs = author.sameAs;
|
|
12
|
+
return person;
|
|
13
|
+
});
|
|
14
|
+
const result = {
|
|
15
|
+
'@context': 'https://schema.org',
|
|
16
|
+
'@type': schemaType,
|
|
17
|
+
headline: item.title,
|
|
18
|
+
url: item.url,
|
|
19
|
+
mainEntityOfPage: {
|
|
20
|
+
'@type': 'WebPage',
|
|
21
|
+
'@id': item.url,
|
|
22
|
+
},
|
|
23
|
+
publisher: {
|
|
24
|
+
'@type': 'Organization',
|
|
25
|
+
name: organization.name,
|
|
26
|
+
logo: {
|
|
27
|
+
'@type': 'ImageObject',
|
|
28
|
+
url: organization.logo,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
author: authors,
|
|
32
|
+
isAccessibleForFree: item.isAccessibleForFree ?? true,
|
|
33
|
+
};
|
|
34
|
+
if (item.image) {
|
|
35
|
+
result.image = buildDiscoverImageUrls(item.image, options.site);
|
|
36
|
+
}
|
|
37
|
+
if (item.description)
|
|
38
|
+
result.description = item.description;
|
|
39
|
+
if (item.datePublished)
|
|
40
|
+
result.datePublished = item.datePublished;
|
|
41
|
+
if (item.dateModified)
|
|
42
|
+
result.dateModified = item.dateModified;
|
|
43
|
+
if (item.isAccessibleForFree === false && item.paywallCssSelector) {
|
|
44
|
+
result.hasPart = {
|
|
45
|
+
'@type': 'WebPageElement',
|
|
46
|
+
isAccessibleForFree: false,
|
|
47
|
+
cssSelector: item.paywallCssSelector,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (item.audio) {
|
|
51
|
+
result.associatedMedia = {
|
|
52
|
+
'@type': 'AudioObject',
|
|
53
|
+
contentUrl: item.audio.url,
|
|
54
|
+
duration: item.audio.duration,
|
|
55
|
+
...(item.audio.narrator ? { name: item.audio.narrator } : {}),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (audioNarration?.enabled) {
|
|
59
|
+
result.speakable = {
|
|
60
|
+
'@type': 'SpeakableSpecification',
|
|
61
|
+
cssSelector: audioNarration.speakableSelectors,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=article.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"article.js","sourceRoot":"","sources":["../../../src/utils/json-ld/article.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/audio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEhE,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE,YAAY,CA0Bd"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function generateAudioJsonLd(audio, options) {
|
|
2
|
+
const result = {
|
|
3
|
+
'@context': 'https://schema.org',
|
|
4
|
+
'@type': 'AudioObject',
|
|
5
|
+
name: options.title,
|
|
6
|
+
contentUrl: audio.url,
|
|
7
|
+
duration: audio.duration,
|
|
8
|
+
};
|
|
9
|
+
if (audio.narrator) {
|
|
10
|
+
result.creator = {
|
|
11
|
+
'@type': 'Person',
|
|
12
|
+
name: audio.narrator,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
if (options.datePublished)
|
|
16
|
+
result.datePublished = options.datePublished;
|
|
17
|
+
if (options.articleUrl) {
|
|
18
|
+
result.isPartOf = {
|
|
19
|
+
'@type': 'Article',
|
|
20
|
+
url: options.articleUrl,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=audio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../../../src/utils/json-ld/audio.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAClC,KAAmB,EACnB,OAAuE;IAEvE,MAAM,MAAM,GAAiB;QAC5B,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE,OAAO,CAAC,KAAK;QACnB,UAAU,EAAE,KAAK,CAAC,GAAG;QACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACxB,CAAA;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,OAAO,GAAG;YAChB,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,KAAK,CAAC,QAAQ;SACpB,CAAA;IACF,CAAC;IAED,IAAI,OAAO,CAAC,aAAa;QAAE,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;IAEvE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,CAAC,QAAQ,GAAG;YACjB,OAAO,EAAE,SAAS;YAClB,GAAG,EAAE,OAAO,CAAC,UAAU;SACvB,CAAA;IACF,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/breadcrumb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACX;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,YAAY,CAoB9E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function generateBreadcrumbJsonLd(items) {
|
|
2
|
+
const lastIndex = items.length - 1;
|
|
3
|
+
const itemListElement = items.map((item, index) => {
|
|
4
|
+
const listItem = {
|
|
5
|
+
'@type': 'ListItem',
|
|
6
|
+
position: index + 1,
|
|
7
|
+
name: item.name,
|
|
8
|
+
};
|
|
9
|
+
if (index !== lastIndex) {
|
|
10
|
+
listItem.item = item.url;
|
|
11
|
+
}
|
|
12
|
+
return listItem;
|
|
13
|
+
});
|
|
14
|
+
return {
|
|
15
|
+
'@context': 'https://schema.org',
|
|
16
|
+
'@type': 'BreadcrumbList',
|
|
17
|
+
itemListElement,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=breadcrumb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumb.js","sourceRoot":"","sources":["../../../src/utils/json-ld/breadcrumb.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,wBAAwB,CAAC,KAAuB;IAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAElC,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAiB;YAC9B,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,KAAK,GAAG,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;SACf,CAAA;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAA;QACzB,CAAC;QACD,OAAO,QAAQ,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,OAAO;QACN,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,gBAAgB;QACzB,eAAe;KACf,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faq.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/faq.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAChD,YAAY,CAad"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function generateFaqJsonLd(items) {
|
|
2
|
+
return {
|
|
3
|
+
'@context': 'https://schema.org',
|
|
4
|
+
'@type': 'FAQPage',
|
|
5
|
+
mainEntity: items.map((item) => ({
|
|
6
|
+
'@type': 'Question',
|
|
7
|
+
name: item.question,
|
|
8
|
+
acceptedAnswer: {
|
|
9
|
+
'@type': 'Answer',
|
|
10
|
+
text: item.answer,
|
|
11
|
+
},
|
|
12
|
+
})),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=faq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faq.js","sourceRoot":"","sources":["../../../src/utils/json-ld/faq.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAChC,KAAkD;IAElD,OAAO;QACN,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChC,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,cAAc,EAAE;gBACf,OAAO,EAAE,QAAQ;gBACjB,IAAI,EAAE,IAAI,CAAC,MAAM;aACjB;SACD,CAAC,CAAC;KACH,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"howto.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/howto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1D,YAAY,CAgBd"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function generateHowToJsonLd(name, description, steps) {
|
|
2
|
+
return {
|
|
3
|
+
'@context': 'https://schema.org',
|
|
4
|
+
'@type': 'HowTo',
|
|
5
|
+
name,
|
|
6
|
+
description,
|
|
7
|
+
step: steps.map((step) => {
|
|
8
|
+
const s = {
|
|
9
|
+
'@type': 'HowToStep',
|
|
10
|
+
name: step.name,
|
|
11
|
+
text: step.text,
|
|
12
|
+
};
|
|
13
|
+
if (step.image)
|
|
14
|
+
s.image = step.image;
|
|
15
|
+
return s;
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=howto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"howto.js","sourceRoot":"","sources":["../../../src/utils/json-ld/howto.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAClC,IAAY,EACZ,WAAmB,EACnB,KAA4D;IAE5D,OAAO;QACN,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,OAAO;QAChB,IAAI;QACJ,WAAW;QACX,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,CAAC,GAAiB;gBACvB,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;aACf,CAAA;YACD,IAAI,IAAI,CAAC,KAAK;gBAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;YACpC,OAAO,CAAC,CAAA;QACT,CAAC,CAAC;KACF,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { generateArticleJsonLd } from './article.js';
|
|
2
|
+
export { generateAudioJsonLd } from './audio.js';
|
|
3
|
+
export type { BreadcrumbItem } from './breadcrumb.js';
|
|
4
|
+
export { generateBreadcrumbJsonLd } from './breadcrumb.js';
|
|
5
|
+
export { generateFaqJsonLd } from './faq.js';
|
|
6
|
+
export { generateHowToJsonLd } from './howto.js';
|
|
7
|
+
export { generateItemListJsonLd } from './item-list.js';
|
|
8
|
+
export { generateOrganizationJsonLd } from './organization.js';
|
|
9
|
+
export { generatePersonJsonLd } from './person.js';
|
|
10
|
+
export { generateProductGroupJsonLd, generateProductJsonLd } from './product.js';
|
|
11
|
+
export { generateVideoJsonLd } from './video.js';
|
|
12
|
+
export { generateWebSiteJsonLd } from './website.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { generateArticleJsonLd } from './article.js';
|
|
2
|
+
export { generateAudioJsonLd } from './audio.js';
|
|
3
|
+
export { generateBreadcrumbJsonLd } from './breadcrumb.js';
|
|
4
|
+
export { generateFaqJsonLd } from './faq.js';
|
|
5
|
+
export { generateHowToJsonLd } from './howto.js';
|
|
6
|
+
export { generateItemListJsonLd } from './item-list.js';
|
|
7
|
+
export { generateOrganizationJsonLd } from './organization.js';
|
|
8
|
+
export { generatePersonJsonLd } from './person.js';
|
|
9
|
+
export { generateProductGroupJsonLd, generateProductJsonLd } from './product.js';
|
|
10
|
+
export { generateVideoJsonLd } from './video.js';
|
|
11
|
+
export { generateWebSiteJsonLd } from './website.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/json-ld/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-list.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/item-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAQlD,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EAC7B,KAAK,GAAE,WAAW,GAAG,YAAY,GAAG,WAAyB,GAC3D,YAAY,CAad"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const ORDER_MAP = {
|
|
2
|
+
ascending: 'https://schema.org/ItemListOrderAscending',
|
|
3
|
+
descending: 'https://schema.org/ItemListOrderDescending',
|
|
4
|
+
unordered: 'https://schema.org/ItemListUnordered',
|
|
5
|
+
};
|
|
6
|
+
export function generateItemListJsonLd(name, items, order = 'ascending') {
|
|
7
|
+
return {
|
|
8
|
+
'@context': 'https://schema.org',
|
|
9
|
+
'@type': 'ItemList',
|
|
10
|
+
name,
|
|
11
|
+
itemListOrder: ORDER_MAP[order],
|
|
12
|
+
numberOfItems: items.length,
|
|
13
|
+
itemListElement: items.map((item, index) => ({
|
|
14
|
+
'@type': 'ListItem',
|
|
15
|
+
position: index + 1,
|
|
16
|
+
url: item.url,
|
|
17
|
+
})),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=item-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-list.js","sourceRoot":"","sources":["../../../src/utils/json-ld/item-list.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAA2B;IACzC,SAAS,EAAE,2CAA2C;IACtD,UAAU,EAAE,4CAA4C;IACxD,SAAS,EAAE,sCAAsC;CACjD,CAAA;AAED,MAAM,UAAU,sBAAsB,CACrC,IAAY,EACZ,KAA6B,EAC7B,QAAkD,WAAW;IAE7D,OAAO;QACN,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,UAAU;QACnB,IAAI;QACJ,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC;QAC/B,aAAa,EAAE,KAAK,CAAC,MAAM;QAC3B,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5C,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,KAAK,GAAG,CAAC;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG;SACb,CAAC,CAAC;KACH,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/organization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,GAAG,YAAY,CAsCpF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function generateOrganizationJsonLd(options) {
|
|
2
|
+
const { organization, site, commerce } = options;
|
|
3
|
+
const result = {
|
|
4
|
+
'@context': 'https://schema.org',
|
|
5
|
+
'@type': 'Organization',
|
|
6
|
+
name: organization.name,
|
|
7
|
+
url: organization.url ?? site,
|
|
8
|
+
logo: {
|
|
9
|
+
'@type': 'ImageObject',
|
|
10
|
+
url: organization.logo,
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
if (organization.sameAs?.length) {
|
|
14
|
+
result.sameAs = organization.sameAs;
|
|
15
|
+
}
|
|
16
|
+
if (commerce?.enabled && commerce.returnPolicy) {
|
|
17
|
+
const policy = commerce.returnPolicy;
|
|
18
|
+
const policyObj = {
|
|
19
|
+
'@type': 'MerchantReturnPolicy',
|
|
20
|
+
applicableCountry: policy.applicableCountry,
|
|
21
|
+
returnPolicyCategory: `https://schema.org/${policy.returnPolicyCategory}`,
|
|
22
|
+
};
|
|
23
|
+
if (policy.merchantReturnDays !== undefined) {
|
|
24
|
+
policyObj.merchantReturnDays = policy.merchantReturnDays;
|
|
25
|
+
}
|
|
26
|
+
if (policy.returnMethod) {
|
|
27
|
+
policyObj.returnMethod = `https://schema.org/${policy.returnMethod}`;
|
|
28
|
+
}
|
|
29
|
+
if (policy.returnFees) {
|
|
30
|
+
policyObj.returnFees = `https://schema.org/${policy.returnFees}`;
|
|
31
|
+
}
|
|
32
|
+
result.hasMerchantReturnPolicy = policyObj;
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=organization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization.js","sourceRoot":"","sources":["../../../src/utils/json-ld/organization.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,0BAA0B,CAAC,OAA2B;IACrE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAEhD,MAAM,MAAM,GAAiB;QAC5B,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,GAAG,EAAE,YAAY,CAAC,GAAG,IAAI,IAAI;QAC7B,IAAI,EAAE;YACL,OAAO,EAAE,aAAa;YACtB,GAAG,EAAE,YAAY,CAAC,IAAI;SACtB;KACD,CAAA;IAED,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAA;IACpC,CAAC;IAED,IAAI,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAA;QACpC,MAAM,SAAS,GAAiB;YAC/B,OAAO,EAAE,sBAAsB;YAC/B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,oBAAoB,EAAE,sBAAsB,MAAM,CAAC,oBAAoB,EAAE;SACzE,CAAA;QACD,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC7C,SAAS,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAA;QACzD,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACzB,SAAS,CAAC,YAAY,GAAG,sBAAsB,MAAM,CAAC,YAAY,EAAE,CAAA;QACrE,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACvB,SAAS,CAAC,UAAU,GAAG,sBAAsB,MAAM,CAAC,UAAU,EAAE,CAAA;QACjE,CAAC;QACD,MAAM,CAAC,uBAAuB,GAAG,SAAS,CAAA;IAC3C,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/person.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEjE,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD,YAAY,CAmBd"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function generatePersonJsonLd(author, options) {
|
|
2
|
+
const result = {
|
|
3
|
+
'@context': 'https://schema.org',
|
|
4
|
+
'@type': 'Person',
|
|
5
|
+
name: author.name,
|
|
6
|
+
};
|
|
7
|
+
if (author.url)
|
|
8
|
+
result.url = author.url;
|
|
9
|
+
if (author.jobTitle)
|
|
10
|
+
result.jobTitle = author.jobTitle;
|
|
11
|
+
if (author.sameAs?.length)
|
|
12
|
+
result.sameAs = author.sameAs;
|
|
13
|
+
if (options?.image)
|
|
14
|
+
result.image = options.image;
|
|
15
|
+
if (options?.organizationName) {
|
|
16
|
+
result.worksFor = {
|
|
17
|
+
'@type': 'Organization',
|
|
18
|
+
name: options.organizationName,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=person.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person.js","sourceRoot":"","sources":["../../../src/utils/json-ld/person.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CACnC,MAAqB,EACrB,OAAuD;IAEvD,MAAM,MAAM,GAAiB;QAC5B,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;KACjB,CAAA;IAED,IAAI,MAAM,CAAC,GAAG;QAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;IACvC,IAAI,MAAM,CAAC,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;IACtD,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IACxD,IAAI,OAAO,EAAE,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IAChD,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,GAAG;YACjB,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,OAAO,CAAC,gBAAgB;SAC9B,CAAA;IACF,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ResolvedSeoOptions } from '../../options.js';
|
|
2
|
+
import type { ContentProduct, JsonLdObject } from '../../types.js';
|
|
3
|
+
export declare function generateProductJsonLd(product: ContentProduct, url: string, options: ResolvedSeoOptions): JsonLdObject;
|
|
4
|
+
export declare function generateProductGroupJsonLd(product: ContentProduct, url: string, options: ResolvedSeoOptions): JsonLdObject;
|
|
5
|
+
//# sourceMappingURL=product.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../../../src/utils/json-ld/product.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAA;AAyDlF,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,GACzB,YAAY,CAwDd;AAED,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,GACzB,YAAY,CA8Bd"}
|