@docusaurus/theme-common 0.0.0-5834 → 0.0.0-5836

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/lib/index.d.ts CHANGED
@@ -9,6 +9,7 @@ export { default as ThemedComponent } from './components/ThemedComponent';
9
9
  export { createStorageSlot, useStorageSlot, listStorageKeys, } from './utils/storageUtils';
10
10
  export { useContextualSearchFilters } from './utils/searchUtils';
11
11
  export { useCurrentSidebarCategory, filterDocCardListItems, } from './utils/docsUtils';
12
+ export { useBlogListPageStructuredData, useBlogPostStructuredData, } from './utils/structuredDataUtils';
12
13
  export { usePluralForm } from './utils/usePluralForm';
13
14
  export { useCollapsible, Collapsible } from './components/Collapsible';
14
15
  export { ThemeClassNames } from './utils/ThemeClassNames';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EACL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAExE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,0BAA0B,EAAC,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAC,YAAY,EAAE,qBAAqB,EAAC,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAC,YAAY,EAAE,KAAK,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAElE,OAAO,EACL,yBAAyB,EACzB,KAAK,4BAA4B,GAClC,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAOpD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,wBAAwB,EAAC,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAC,sBAAsB,EAAC,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,iCAAiC,EACjC,kBAAkB,GACnB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EACL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAExE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,0BAA0B,EAAC,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAC,YAAY,EAAE,qBAAqB,EAAC,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAC,YAAY,EAAE,KAAK,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAElE,OAAO,EACL,yBAAyB,EACzB,KAAK,4BAA4B,GAClC,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAOpD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,wBAAwB,EAAC,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAC,sBAAsB,EAAC,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,iCAAiC,EACjC,kBAAkB,GACnB,MAAM,4BAA4B,CAAC"}
package/lib/index.js CHANGED
@@ -12,6 +12,7 @@ export { default as ThemedComponent } from './components/ThemedComponent';
12
12
  export { createStorageSlot, useStorageSlot, listStorageKeys, } from './utils/storageUtils';
13
13
  export { useContextualSearchFilters } from './utils/searchUtils';
14
14
  export { useCurrentSidebarCategory, filterDocCardListItems, } from './utils/docsUtils';
15
+ export { useBlogListPageStructuredData, useBlogPostStructuredData, } from './utils/structuredDataUtils';
15
16
  export { usePluralForm } from './utils/usePluralForm';
16
17
  export { useCollapsible, Collapsible } from './components/Collapsible';
17
18
  export { ThemeClassNames } from './utils/ThemeClassNames';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AAEH,OAAO,EACL,cAAc,GAYf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAExE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,0BAA0B,EAAC,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAC,YAAY,EAAE,qBAAqB,EAAC,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAC,YAAY,EAAiB,MAAM,sBAAsB,CAAC;AAElE,OAAO,EACL,yBAAyB,GAE1B,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,wBAAwB,EAAC,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAC,sBAAsB,EAAC,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,iCAAiC,EACjC,kBAAkB,GACnB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AAEH,OAAO,EACL,cAAc,GAYf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,8BAA8B,CAAC;AAExE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAC,0BAA0B,EAAC,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAC,cAAc,EAAE,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAC,YAAY,EAAE,qBAAqB,EAAC,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAC,YAAY,EAAiB,MAAM,sBAAsB,CAAC;AAElE,OAAO,EACL,yBAAyB,GAE1B,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,wBAAwB,EAAC,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAC,UAAU,EAAE,IAAI,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAC,sBAAsB,EAAC,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EACL,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,iCAAiC,EACjC,kBAAkB,GACnB,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ /// <reference types="@docusaurus/plugin-content-blog" />
8
+ import type { Props as BlogListPageStructuredDataProps } from '@theme/BlogListPage/StructuredData';
9
+ import type { Blog, BlogPosting, WithContext } from 'schema-dts';
10
+ export declare function useBlogListPageStructuredData(props: BlogListPageStructuredDataProps): WithContext<Blog>;
11
+ export declare function useBlogPostStructuredData(): WithContext<BlogPosting>;
12
+ //# sourceMappingURL=structuredDataUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structuredDataUtils.d.ts","sourceRoot":"","sources":["../../src/utils/structuredDataUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAKH,OAAO,KAAK,EAAC,KAAK,IAAI,+BAA+B,EAAC,MAAM,oCAAoC,CAAC;AAEjG,OAAO,KAAK,EACV,IAAI,EACJ,WAAW,EACX,WAAW,EAGZ,MAAM,YAAY,CAAC;AA4DpB,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,+BAA+B,GACrC,WAAW,CAAC,IAAI,CAAC,CAsBnB;AAED,wBAAgB,yBAAyB,IAAI,WAAW,CAAC,WAAW,CAAC,CAmCpE"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { useBaseUrlUtils } from '@docusaurus/useBaseUrl';
8
+ import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
9
+ import { useBlogMetadata } from '@docusaurus/plugin-content-blog/client';
10
+ import { useBlogPost } from '../contexts/blogPost';
11
+ function getBlogPost(blogPostContent, siteConfig, withBaseUrl) {
12
+ const { assets, frontMatter, metadata } = blogPostContent;
13
+ const { date, title, description } = metadata;
14
+ const image = assets.image ?? frontMatter.image;
15
+ const keywords = frontMatter.keywords ?? [];
16
+ const blogUrl = `${siteConfig.url}${metadata.permalink}`;
17
+ return {
18
+ '@type': 'BlogPosting',
19
+ '@id': blogUrl,
20
+ mainEntityOfPage: blogUrl,
21
+ url: blogUrl,
22
+ headline: title,
23
+ name: title,
24
+ description,
25
+ datePublished: date,
26
+ ...getAuthor(metadata.authors),
27
+ ...getImage(image, withBaseUrl, title),
28
+ ...(keywords ? { keywords } : {}),
29
+ };
30
+ }
31
+ function getAuthor(authors) {
32
+ const authorsStructuredData = authors.map(createPersonStructuredData);
33
+ return {
34
+ author: authorsStructuredData.length === 1
35
+ ? authorsStructuredData[0]
36
+ : authorsStructuredData,
37
+ };
38
+ }
39
+ function getImage(image, withBaseUrl, title) {
40
+ return image
41
+ ? {
42
+ image: createImageStructuredData({
43
+ imageUrl: withBaseUrl(image, { absolute: true }),
44
+ caption: `title image for the blog post: ${title}`,
45
+ }),
46
+ }
47
+ : {};
48
+ }
49
+ export function useBlogListPageStructuredData(props) {
50
+ const { siteConfig } = useDocusaurusContext();
51
+ const { withBaseUrl } = useBaseUrlUtils();
52
+ const { metadata: { blogDescription, blogTitle, permalink }, } = props;
53
+ const url = `${siteConfig.url}${permalink}`;
54
+ // details on structured data support: https://schema.org/Blog
55
+ return {
56
+ '@context': 'https://schema.org',
57
+ '@type': 'Blog',
58
+ '@id': url,
59
+ mainEntityOfPage: url,
60
+ headline: blogTitle,
61
+ description: blogDescription,
62
+ blogPost: props.items.map((blogItem) => getBlogPost(blogItem.content, siteConfig, withBaseUrl)),
63
+ };
64
+ }
65
+ export function useBlogPostStructuredData() {
66
+ const blogMetadata = useBlogMetadata();
67
+ const { assets, metadata } = useBlogPost();
68
+ const { siteConfig } = useDocusaurusContext();
69
+ const { withBaseUrl } = useBaseUrlUtils();
70
+ const { date, title, description, frontMatter } = metadata;
71
+ const image = assets.image ?? frontMatter.image;
72
+ const keywords = frontMatter.keywords ?? [];
73
+ const url = `${siteConfig.url}${metadata.permalink}`;
74
+ // details on structured data support: https://schema.org/BlogPosting
75
+ // BlogPosting is one of the structured data types that Google explicitly
76
+ // supports: https://developers.google.com/search/docs/appearance/structured-data/article#structured-data-type-definitions
77
+ return {
78
+ '@context': 'https://schema.org',
79
+ '@type': 'BlogPosting',
80
+ '@id': url,
81
+ mainEntityOfPage: url,
82
+ url,
83
+ headline: title,
84
+ name: title,
85
+ description,
86
+ datePublished: date,
87
+ ...getAuthor(metadata.authors),
88
+ ...getImage(image, withBaseUrl, title),
89
+ ...(keywords ? { keywords } : {}),
90
+ isPartOf: {
91
+ '@type': 'Blog',
92
+ '@id': `${siteConfig.url}${blogMetadata.blogBasePath}`,
93
+ name: blogMetadata.blogTitle,
94
+ },
95
+ };
96
+ }
97
+ /** @returns A {@link https://schema.org/Person} constructed from the {@link Author} */
98
+ function createPersonStructuredData(author) {
99
+ return {
100
+ '@type': 'Person',
101
+ ...(author.name ? { name: author.name } : {}),
102
+ ...(author.title ? { description: author.title } : {}),
103
+ ...(author.url ? { url: author.url } : {}),
104
+ ...(author.email ? { email: author.email } : {}),
105
+ ...(author.imageURL ? { image: author.imageURL } : {}),
106
+ };
107
+ }
108
+ /** @returns A {@link https://schema.org/ImageObject} */
109
+ function createImageStructuredData({ imageUrl, caption, }) {
110
+ return {
111
+ '@type': 'ImageObject',
112
+ '@id': imageUrl,
113
+ url: imageUrl,
114
+ contentUrl: imageUrl,
115
+ caption,
116
+ };
117
+ }
118
+ //# sourceMappingURL=structuredDataUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structuredDataUtils.js","sourceRoot":"","sources":["../../src/utils/structuredDataUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docusaurus/theme-common",
3
- "version": "0.0.0-5834",
3
+ "version": "0.0.0-5836",
4
4
  "description": "Common code for Docusaurus themes.",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -30,13 +30,13 @@
30
30
  },
31
31
  "license": "MIT",
32
32
  "dependencies": {
33
- "@docusaurus/mdx-loader": "0.0.0-5834",
34
- "@docusaurus/module-type-aliases": "0.0.0-5834",
35
- "@docusaurus/plugin-content-blog": "0.0.0-5834",
36
- "@docusaurus/plugin-content-docs": "0.0.0-5834",
37
- "@docusaurus/plugin-content-pages": "0.0.0-5834",
38
- "@docusaurus/utils": "0.0.0-5834",
39
- "@docusaurus/utils-common": "0.0.0-5834",
33
+ "@docusaurus/mdx-loader": "0.0.0-5836",
34
+ "@docusaurus/module-type-aliases": "0.0.0-5836",
35
+ "@docusaurus/plugin-content-blog": "0.0.0-5836",
36
+ "@docusaurus/plugin-content-docs": "0.0.0-5836",
37
+ "@docusaurus/plugin-content-pages": "0.0.0-5836",
38
+ "@docusaurus/utils": "0.0.0-5836",
39
+ "@docusaurus/utils-common": "0.0.0-5836",
40
40
  "@types/history": "^4.7.11",
41
41
  "@types/react": "*",
42
42
  "@types/react-router-config": "*",
@@ -47,10 +47,11 @@
47
47
  "utility-types": "^3.10.0"
48
48
  },
49
49
  "devDependencies": {
50
- "@docusaurus/core": "0.0.0-5834",
51
- "@docusaurus/types": "0.0.0-5834",
50
+ "@docusaurus/core": "0.0.0-5836",
51
+ "@docusaurus/types": "0.0.0-5836",
52
52
  "fs-extra": "^11.1.1",
53
- "lodash": "^4.17.21"
53
+ "lodash": "^4.17.21",
54
+ "schema-dts": "^1.1.2"
54
55
  },
55
56
  "peerDependencies": {
56
57
  "react": "^18.0.0",
@@ -59,5 +60,5 @@
59
60
  "engines": {
60
61
  "node": ">=18.0"
61
62
  },
62
- "gitHead": "61076da611615859ca4be6cb4be9c0275daf1554"
63
+ "gitHead": "3e0099e87cc86720ed1cbfcd3df76437ecefaf49"
63
64
  }
package/src/index.ts CHANGED
@@ -39,6 +39,11 @@ export {
39
39
  filterDocCardListItems,
40
40
  } from './utils/docsUtils';
41
41
 
42
+ export {
43
+ useBlogListPageStructuredData,
44
+ useBlogPostStructuredData,
45
+ } from './utils/structuredDataUtils';
46
+
42
47
  export {usePluralForm} from './utils/usePluralForm';
43
48
 
44
49
  export {useCollapsible, Collapsible} from './components/Collapsible';
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import {useBaseUrlUtils, type BaseUrlUtils} from '@docusaurus/useBaseUrl';
9
+ import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
10
+ import {useBlogMetadata} from '@docusaurus/plugin-content-blog/client';
11
+ import type {Props as BlogListPageStructuredDataProps} from '@theme/BlogListPage/StructuredData';
12
+ import {useBlogPost} from '../contexts/blogPost';
13
+ import type {
14
+ Blog,
15
+ BlogPosting,
16
+ WithContext,
17
+ Person,
18
+ ImageObject,
19
+ } from 'schema-dts';
20
+ import type {
21
+ Author,
22
+ PropBlogPostContent,
23
+ } from '@docusaurus/plugin-content-blog';
24
+ import type {DocusaurusConfig} from '@docusaurus/types';
25
+
26
+ function getBlogPost(
27
+ blogPostContent: PropBlogPostContent,
28
+ siteConfig: DocusaurusConfig,
29
+ withBaseUrl: BaseUrlUtils['withBaseUrl'],
30
+ ) {
31
+ const {assets, frontMatter, metadata} = blogPostContent;
32
+ const {date, title, description} = metadata;
33
+
34
+ const image = assets.image ?? frontMatter.image;
35
+ const keywords = frontMatter.keywords ?? [];
36
+
37
+ const blogUrl = `${siteConfig.url}${metadata.permalink}`;
38
+
39
+ return {
40
+ '@type': 'BlogPosting',
41
+ '@id': blogUrl,
42
+ mainEntityOfPage: blogUrl,
43
+ url: blogUrl,
44
+ headline: title,
45
+ name: title,
46
+ description,
47
+ datePublished: date,
48
+ ...getAuthor(metadata.authors),
49
+ ...getImage(image, withBaseUrl, title),
50
+ ...(keywords ? {keywords} : {}),
51
+ };
52
+ }
53
+
54
+ function getAuthor(authors: Author[]) {
55
+ const authorsStructuredData = authors.map(createPersonStructuredData);
56
+ return {
57
+ author:
58
+ authorsStructuredData.length === 1
59
+ ? authorsStructuredData[0]
60
+ : authorsStructuredData,
61
+ };
62
+ }
63
+
64
+ function getImage(
65
+ image: string | undefined,
66
+ withBaseUrl: BaseUrlUtils['withBaseUrl'],
67
+ title: string,
68
+ ) {
69
+ return image
70
+ ? {
71
+ image: createImageStructuredData({
72
+ imageUrl: withBaseUrl(image, {absolute: true}),
73
+ caption: `title image for the blog post: ${title}`,
74
+ }),
75
+ }
76
+ : {};
77
+ }
78
+
79
+ export function useBlogListPageStructuredData(
80
+ props: BlogListPageStructuredDataProps,
81
+ ): WithContext<Blog> {
82
+ const {siteConfig} = useDocusaurusContext();
83
+ const {withBaseUrl} = useBaseUrlUtils();
84
+
85
+ const {
86
+ metadata: {blogDescription, blogTitle, permalink},
87
+ } = props;
88
+
89
+ const url = `${siteConfig.url}${permalink}`;
90
+
91
+ // details on structured data support: https://schema.org/Blog
92
+ return {
93
+ '@context': 'https://schema.org',
94
+ '@type': 'Blog',
95
+ '@id': url,
96
+ mainEntityOfPage: url,
97
+ headline: blogTitle,
98
+ description: blogDescription,
99
+ blogPost: props.items.map((blogItem) =>
100
+ getBlogPost(blogItem.content, siteConfig, withBaseUrl),
101
+ ),
102
+ };
103
+ }
104
+
105
+ export function useBlogPostStructuredData(): WithContext<BlogPosting> {
106
+ const blogMetadata = useBlogMetadata();
107
+ const {assets, metadata} = useBlogPost();
108
+ const {siteConfig} = useDocusaurusContext();
109
+ const {withBaseUrl} = useBaseUrlUtils();
110
+
111
+ const {date, title, description, frontMatter} = metadata;
112
+
113
+ const image = assets.image ?? frontMatter.image;
114
+ const keywords = frontMatter.keywords ?? [];
115
+
116
+ const url = `${siteConfig.url}${metadata.permalink}`;
117
+
118
+ // details on structured data support: https://schema.org/BlogPosting
119
+ // BlogPosting is one of the structured data types that Google explicitly
120
+ // supports: https://developers.google.com/search/docs/appearance/structured-data/article#structured-data-type-definitions
121
+ return {
122
+ '@context': 'https://schema.org',
123
+ '@type': 'BlogPosting',
124
+ '@id': url,
125
+ mainEntityOfPage: url,
126
+ url,
127
+ headline: title,
128
+ name: title,
129
+ description,
130
+ datePublished: date,
131
+ ...getAuthor(metadata.authors),
132
+ ...getImage(image, withBaseUrl, title),
133
+ ...(keywords ? {keywords} : {}),
134
+ isPartOf: {
135
+ '@type': 'Blog',
136
+ '@id': `${siteConfig.url}${blogMetadata.blogBasePath}`,
137
+ name: blogMetadata.blogTitle,
138
+ },
139
+ };
140
+ }
141
+
142
+ /** @returns A {@link https://schema.org/Person} constructed from the {@link Author} */
143
+ function createPersonStructuredData(author: Author): Person {
144
+ return {
145
+ '@type': 'Person',
146
+ ...(author.name ? {name: author.name} : {}),
147
+ ...(author.title ? {description: author.title} : {}),
148
+ ...(author.url ? {url: author.url} : {}),
149
+ ...(author.email ? {email: author.email} : {}),
150
+ ...(author.imageURL ? {image: author.imageURL} : {}),
151
+ };
152
+ }
153
+
154
+ /** @returns A {@link https://schema.org/ImageObject} */
155
+ function createImageStructuredData({
156
+ imageUrl,
157
+ caption,
158
+ }: {
159
+ imageUrl: string;
160
+ caption: string;
161
+ }): ImageObject {
162
+ return {
163
+ '@type': 'ImageObject',
164
+ '@id': imageUrl,
165
+ url: imageUrl,
166
+ contentUrl: imageUrl,
167
+ caption,
168
+ };
169
+ }