@yimingliao/cms 0.0.220 → 0.0.221

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.
@@ -5,77 +5,85 @@ import { ensureOgType } from './utils/ensure-og-type.js';
5
5
  import { ensureTwitterCard } from './utils/ensure-twitter-card.js';
6
6
  import { sanitizeStringArray } from './utils/sanitize-string-array.js';
7
7
  import { toIsoTime } from './utils/to-iso-time.js';
8
+ import { toOgLocale } from './utils/to-og-locale.js';
8
9
 
9
10
  function createBuildArticleMetadata({
10
11
  getDefaults,
11
12
  defaultLocale,
13
+ locales,
12
14
  storageUrl
13
15
  }) {
14
16
  return function buildArticleMetadata(post, locale) {
15
- const defaults = getDefaults(locale ?? defaultLocale);
17
+ const resolvedLocale = locale ?? defaultLocale;
18
+ const defaults = getDefaults(resolvedLocale);
16
19
  const seoMetadata = findTranslation(post?.seoMetadatas, locale);
17
20
  const authorT = findTranslation(post?.author?.translations, locale);
18
21
  const coverImageT = findTranslation(post?.coverImage?.translations, locale);
22
+ const tags = sanitizeStringArray(
23
+ post?.tags.map((t) => findTranslation(t.translations, locale).title)
24
+ );
19
25
  return {
20
26
  metadataBase: defaults.metadataBase,
21
27
  // -----------------------------------------------------------------------
22
28
  // Basic
23
29
  // -----------------------------------------------------------------------
24
- title: seoMetadata?.title || defaults.title,
25
- description: seoMetadata?.description,
30
+ title: seoMetadata.title || defaults.title,
31
+ description: seoMetadata.description,
26
32
  // identity
27
33
  authors: [
28
34
  {
29
- name: seoMetadata?.author || authorT.authorName || defaults.author,
35
+ name: seoMetadata.author || authorT.authorName || defaults.author,
30
36
  url: authorT.url || void 0
31
37
  }
32
38
  ],
33
39
  // url
34
40
  alternates: {
35
- canonical: seoMetadata?.canonical,
36
- languages: buildAlternateMap(seoMetadata?.alternate)
41
+ canonical: seoMetadata.canonical,
42
+ languages: buildAlternateMap(seoMetadata.alternate)
37
43
  },
38
44
  // robots
39
- robots: seoMetadata?.robots || defaults.robots,
45
+ robots: seoMetadata.robots || defaults.robots,
40
46
  // -----------------------------------------------------------------------
41
47
  // Open Graph
42
48
  // -----------------------------------------------------------------------
43
49
  openGraph: {
44
- title: seoMetadata?.ogTitle || void 0,
45
- description: seoMetadata?.ogDescription || void 0,
50
+ title: seoMetadata.ogTitle || void 0,
51
+ description: seoMetadata.ogDescription || void 0,
46
52
  // url
47
- url: seoMetadata?.ogUrl || seoMetadata?.canonical || void 0,
53
+ url: seoMetadata.ogUrl || seoMetadata.canonical || void 0,
48
54
  // identity
49
- type: ensureOgType("article", seoMetadata?.ogType),
50
- siteName: seoMetadata?.ogSiteName || defaults.ogSiteName,
55
+ type: ensureOgType("article", seoMetadata.ogType),
56
+ siteName: seoMetadata.ogSiteName || defaults.ogSiteName,
51
57
  // image
52
58
  images: buildOgImages(
53
- seoMetadata?.ogImage || `${storageUrl}/${post?.coverImage?.key}`,
54
- seoMetadata?.ogImageAlt || coverImageT.alt,
55
- seoMetadata?.ogImageType,
56
- seoMetadata?.ogImageWidth,
57
- seoMetadata?.ogImageHeight
59
+ seoMetadata.ogImage || `${storageUrl}/${post?.coverImage?.key}`,
60
+ seoMetadata.ogImageAlt || coverImageT.alt,
61
+ seoMetadata.ogImageType,
62
+ seoMetadata.ogImageWidth,
63
+ seoMetadata.ogImageHeight
58
64
  ),
59
65
  // locale
60
- locale: seoMetadata?.ogLocale || void 0,
61
- alternateLocale: sanitizeStringArray(seoMetadata?.ogLocaleAlternate),
66
+ locale: seoMetadata.ogLocale ?? toOgLocale(resolvedLocale),
67
+ alternateLocale: sanitizeStringArray(
68
+ seoMetadata.ogLocaleAlternate ?? locales.filter((l) => l !== resolvedLocale).map(toOgLocale)
69
+ ),
62
70
  // article
63
- publishedTime: toIsoTime(seoMetadata?.ogArticlePublishedTime),
64
- modifiedTime: toIsoTime(seoMetadata?.ogArticleModifiedTime),
71
+ publishedTime: toIsoTime(seoMetadata.ogArticlePublishedTime),
72
+ modifiedTime: toIsoTime(seoMetadata.ogArticleModifiedTime),
65
73
  authors: [
66
- seoMetadata?.ogArticleAuthor || authorT.authorName || defaults.ogSiteName
74
+ seoMetadata.ogArticleAuthor || authorT.authorName || defaults.ogSiteName
67
75
  ],
68
- section: seoMetadata?.ogArticleSection,
69
- tags: sanitizeStringArray(seoMetadata?.ogArticleTag)
76
+ section: seoMetadata.ogArticleSection,
77
+ tags: sanitizeStringArray(seoMetadata.ogArticleTag) ?? tags
70
78
  },
71
79
  // -----------------------------------------------------------------------
72
80
  // Twitter
73
81
  // -----------------------------------------------------------------------
74
82
  twitter: {
75
- card: ensureTwitterCard(defaults.twitterCard, seoMetadata?.twitterCard),
83
+ card: ensureTwitterCard(defaults.twitterCard, seoMetadata.twitterCard),
76
84
  // identity
77
- site: seoMetadata?.twitterSite || void 0,
78
- creator: seoMetadata?.twitterCreator || void 0
85
+ site: seoMetadata.twitterSite || void 0,
86
+ creator: seoMetadata.twitterCreator || void 0
79
87
  }
80
88
  };
81
89
  };
@@ -4,61 +4,66 @@ import { buildOgImages } from './utils/build-og-image.js';
4
4
  import { ensureOgType } from './utils/ensure-og-type.js';
5
5
  import { ensureTwitterCard } from './utils/ensure-twitter-card.js';
6
6
  import { sanitizeStringArray } from './utils/sanitize-string-array.js';
7
+ import { toOgLocale } from './utils/to-og-locale.js';
7
8
 
8
9
  function createBuildWebsiteMetadata({
9
10
  getDefaults,
10
- defaultLocale
11
+ defaultLocale,
12
+ locales
11
13
  }) {
12
14
  return function buildWebsiteMetadata(post, locale) {
13
- const defaults = getDefaults(locale ?? defaultLocale);
15
+ const resolvedLocale = locale ?? defaultLocale;
16
+ const defaults = getDefaults(resolvedLocale);
14
17
  const seoMetadata = findTranslation(post?.seoMetadatas, locale);
15
18
  return {
16
19
  metadataBase: defaults.metadataBase,
17
20
  // -----------------------------------------------------------------------
18
21
  // Basic
19
22
  // -----------------------------------------------------------------------
20
- title: seoMetadata?.title || defaults.title,
21
- description: seoMetadata?.description,
23
+ title: seoMetadata.title || defaults.title,
24
+ description: seoMetadata.description,
22
25
  // identity
23
- authors: [{ name: seoMetadata?.author || defaults.author }],
26
+ authors: [{ name: seoMetadata.author || defaults.author }],
24
27
  // url
25
28
  alternates: {
26
- canonical: seoMetadata?.canonical,
27
- languages: buildAlternateMap(seoMetadata?.alternate)
29
+ canonical: seoMetadata.canonical,
30
+ languages: buildAlternateMap(seoMetadata.alternate)
28
31
  },
29
32
  // robots
30
- robots: seoMetadata?.robots || defaults.robots,
33
+ robots: seoMetadata.robots || defaults.robots,
31
34
  // -----------------------------------------------------------------------
32
35
  // Open Graph
33
36
  // -----------------------------------------------------------------------
34
37
  openGraph: {
35
- title: seoMetadata?.ogTitle || void 0,
36
- description: seoMetadata?.ogDescription || void 0,
38
+ title: seoMetadata.ogTitle || void 0,
39
+ description: seoMetadata.ogDescription || void 0,
37
40
  // url
38
- url: seoMetadata?.ogUrl || seoMetadata?.canonical || void 0,
41
+ url: seoMetadata.ogUrl || seoMetadata.canonical || void 0,
39
42
  // identity
40
- type: ensureOgType("website", seoMetadata?.ogType),
41
- siteName: seoMetadata?.ogSiteName || defaults.ogSiteName,
43
+ type: ensureOgType("website", seoMetadata.ogType),
44
+ siteName: seoMetadata.ogSiteName || defaults.ogSiteName,
42
45
  // image
43
46
  images: buildOgImages(
44
- seoMetadata?.ogImage,
45
- seoMetadata?.ogImageAlt,
46
- seoMetadata?.ogImageType,
47
- seoMetadata?.ogImageWidth,
48
- seoMetadata?.ogImageHeight
47
+ seoMetadata.ogImage,
48
+ seoMetadata.ogImageAlt,
49
+ seoMetadata.ogImageType,
50
+ seoMetadata.ogImageWidth,
51
+ seoMetadata.ogImageHeight
49
52
  ),
50
53
  // locale
51
- locale: seoMetadata?.ogLocale || void 0,
52
- alternateLocale: sanitizeStringArray(seoMetadata?.ogLocaleAlternate)
54
+ locale: seoMetadata.ogLocale ?? toOgLocale(resolvedLocale),
55
+ alternateLocale: sanitizeStringArray(
56
+ seoMetadata.ogLocaleAlternate ?? locales.filter((l) => l !== resolvedLocale).map(toOgLocale)
57
+ )
53
58
  },
54
59
  // -----------------------------------------------------------------------
55
60
  // Twitter
56
61
  // -----------------------------------------------------------------------
57
62
  twitter: {
58
- card: ensureTwitterCard(defaults.twitterCard, seoMetadata?.twitterCard),
63
+ card: ensureTwitterCard(defaults.twitterCard, seoMetadata.twitterCard),
59
64
  // identity
60
- site: seoMetadata?.twitterSite || void 0,
61
- creator: seoMetadata?.twitterCreator || void 0
65
+ site: seoMetadata.twitterSite || void 0,
66
+ creator: seoMetadata.twitterCreator || void 0
62
67
  }
63
68
  };
64
69
  };
@@ -0,0 +1,6 @@
1
+ function toOgLocale(locale) {
2
+ if (!locale) return void 0;
3
+ return locale.replaceAll("-", "_");
4
+ }
5
+
6
+ export { toOgLocale };
@@ -1,9 +1,10 @@
1
1
  import type { SeoMetadataDefaults } from "./types";
2
2
  import type { PostFull } from "../../domain/resources/post/full";
3
3
  import type { Metadata } from "next";
4
- export declare function createBuildArticleMetadata({ getDefaults, defaultLocale, storageUrl, }: {
4
+ export declare function createBuildArticleMetadata({ getDefaults, defaultLocale, locales, storageUrl, }: {
5
5
  getDefaults: (locale: string) => SeoMetadataDefaults;
6
6
  defaultLocale: string;
7
+ locales: string[];
7
8
  storageUrl: string;
8
9
  }): (post?: PostFull, locale?: string) => Metadata;
9
10
  //# sourceMappingURL=build-article-metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-article-metadata.d.ts","sourceRoot":"","sources":["../../../../../src/shared/seo-metadata/build-article-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AASrC,wBAAgB,0BAA0B,CAAC,EACzC,WAAW,EACX,aAAa,EACb,UAAU,GACX,EAAE;IACD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,IAEG,OAAO,QAAQ,EACf,SAAS,MAAM,KACd,QAAQ,CAmFZ"}
1
+ {"version":3,"file":"build-article-metadata.d.ts","sourceRoot":"","sources":["../../../../../src/shared/seo-metadata/build-article-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAUrC,wBAAgB,0BAA0B,CAAC,EACzC,WAAW,EACX,aAAa,EACb,OAAO,EACP,UAAU,GACX,EAAE;IACD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,IAEG,OAAO,QAAQ,EACf,SAAS,MAAM,KACd,QAAQ,CA0FZ"}
@@ -1,8 +1,9 @@
1
1
  import type { SeoMetadataDefaults } from "./types";
2
2
  import type { PostFull } from "../../domain/resources/post/full";
3
3
  import type { Metadata } from "next";
4
- export declare function createBuildWebsiteMetadata({ getDefaults, defaultLocale, }: {
4
+ export declare function createBuildWebsiteMetadata({ getDefaults, defaultLocale, locales, }: {
5
5
  getDefaults: (locale: string) => SeoMetadataDefaults;
6
6
  defaultLocale: string;
7
+ locales: string[];
7
8
  }): (post?: PostFull, locale?: string) => Metadata;
8
9
  //# sourceMappingURL=build-website-metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-website-metadata.d.ts","sourceRoot":"","sources":["../../../../../src/shared/seo-metadata/build-website-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAQrC,wBAAgB,0BAA0B,CAAC,EACzC,WAAW,EACX,aAAa,GACd,EAAE;IACD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC;CACvB,IAEG,OAAO,QAAQ,EACf,SAAS,MAAM,KACd,QAAQ,CAiEZ"}
1
+ {"version":3,"file":"build-website-metadata.d.ts","sourceRoot":"","sources":["../../../../../src/shared/seo-metadata/build-website-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AASrC,wBAAgB,0BAA0B,CAAC,EACzC,WAAW,EACX,aAAa,EACb,OAAO,GACR,EAAE;IACD,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,IAEG,OAAO,QAAQ,EACf,SAAS,MAAM,KACd,QAAQ,CAqEZ"}
@@ -1,2 +1,2 @@
1
- export declare const sanitizeStringArray: (array?: string[]) => string[] | undefined;
1
+ export declare const sanitizeStringArray: (array?: (string | undefined | null)[]) => string[] | undefined;
2
2
  //# sourceMappingURL=sanitize-string-array.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize-string-array.d.ts","sourceRoot":"","sources":["../../../../../../src/shared/seo-metadata/utils/sanitize-string-array.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,KAAG,MAAM,EAAE,GAAG,SAMjE,CAAC"}
1
+ {"version":3,"file":"sanitize-string-array.d.ts","sourceRoot":"","sources":["../../../../../../src/shared/seo-metadata/utils/sanitize-string-array.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,KACpC,MAAM,EAAE,GAAG,SAMb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function toOgLocale(locale?: string): string | undefined;
2
+ //# sourceMappingURL=to-og-locale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-og-locale.d.ts","sourceRoot":"","sources":["../../../../../../src/shared/seo-metadata/utils/to-og-locale.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yimingliao/cms",
3
- "version": "0.0.220",
3
+ "version": "0.0.221",
4
4
  "author": "Yiming Liao",
5
5
  "license": "MIT",
6
6
  "type": "module",