@yimingliao/cms 0.0.243 → 0.0.244

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.
@@ -18,8 +18,7 @@ export { getMediaInfo } from '../src/shared/blob-file/get-media-info/get-media-i
18
18
  export { formatFileSize } from '../src/shared/blob-file/format-file-size.js';
19
19
  export { result } from '../src/shared/result/result.js';
20
20
  export { OG_TYPE_ARRAY, TWITTER_CARD_ARRAY } from '../src/shared/seo-metadata/standards.js';
21
- export { createBuildWebsiteMetadata } from '../src/shared/seo-metadata/build-website-metadata.js';
22
- export { createBuildArticleMetadata } from '../src/shared/seo-metadata/build-article-metadata.js';
21
+ export { createBuildMetadata } from '../src/shared/seo-metadata/build-metadata.js';
23
22
  export { serializeJsonLd } from '../src/shared/seo-metadata/serialize-json-ld.js';
24
23
  export { toIsoTime } from '../src/shared/seo-metadata/utils/to-iso-time.js';
25
24
  export { findTranslation } from '../src/shared/translation/find-translation.js';
@@ -1,8 +1,8 @@
1
1
  import { useState, useEffect } from 'react';
2
2
  import 'mime-types';
3
+ import { ensureArray } from '../../../../../shared/utils/ensure-array.js';
3
4
  import { datetimeToUi } from '../../../../../shared/form/normalizers/datetime-to-ui.js';
4
5
  import { jsonArrayToUi } from '../../../../../shared/form/normalizers/json-array-to-ui.js';
5
- import { ensureArray } from '../../../../../shared/utils/ensure-array.js';
6
6
  import { SEO_METADATA_EMPTY_TRANSLATIONS } from './seo-metadata-empty-translation.js';
7
7
 
8
8
  function createUseSeoMetadataUpsertFormData({
@@ -7,8 +7,8 @@ import '../../../../../../constants/paths/resources.js';
7
7
  import { CACHE_KEYS } from '../../../../../../constants/cache-keys.js';
8
8
  import '../../../../../../constants/redirect-paths.js';
9
9
  import 'mime-types';
10
- import { datetimeToUi } from '../../../../../../shared/form/normalizers/datetime-to-ui.js';
11
10
  import { ensureArray } from '../../../../../../shared/utils/ensure-array.js';
11
+ import { datetimeToUi } from '../../../../../../shared/form/normalizers/datetime-to-ui.js';
12
12
  import 'intor/react';
13
13
  import 'lucide-react';
14
14
  import 'ua-parser-js';
@@ -11,8 +11,8 @@ import '../../../../../../../constants/redirect-paths.js';
11
11
  import { mimeToExtension } from '../../../../../../../shared/blob-file/mime-to-extension.js';
12
12
  import { classifyFileType } from '../../../../../../../shared/blob-file/classify-file-type.js';
13
13
  import { formatFileSize } from '../../../../../../../shared/blob-file/format-file-size.js';
14
- import 'mime-types';
15
14
  import { joinUrl } from '../../../../../../../shared/utils/join-url.js';
15
+ import 'mime-types';
16
16
  import 'react';
17
17
  import 'ua-parser-js';
18
18
  import { cn } from '../../../../../../applications/cms/shadcn/utils.js';
@@ -1,4 +1,5 @@
1
1
  import { findTranslation } from '../translation/find-translation.js';
2
+ import { joinUrl } from '../utils/join-url.js';
2
3
  import { buildAlternateMap } from './utils/build-alternate-map.js';
3
4
  import { buildOgImages } from './utils/build-og-image.js';
4
5
  import { ensureOgType } from './utils/ensure-og-type.js';
@@ -7,8 +8,8 @@ import { sanitizeStringArray } from './utils/sanitize-string-array.js';
7
8
  import { toIsoTime } from './utils/to-iso-time.js';
8
9
  import { toOgLocale } from './utils/to-og-locale.js';
9
10
 
10
- function createBuildArticleMetadata(siteConfig, storageUrl) {
11
- return function buildArticleMetadata(urls, post, locale) {
11
+ function createBuildMetadata(siteConfig, storageUrl) {
12
+ return function buildMetadata(urls, post, locale, isArticle = false) {
12
13
  const { defaultLocale, locales, site } = siteConfig;
13
14
  const resolvedLocale = locale || defaultLocale;
14
15
  const seoMetadata = findTranslation(post?.seoMetadatas, locale);
@@ -17,6 +18,7 @@ function createBuildArticleMetadata(siteConfig, storageUrl) {
17
18
  const tags = sanitizeStringArray(
18
19
  post?.tags.map((t) => findTranslation(t.translations, locale).title)
19
20
  );
21
+ const articleCoverImageUrl = joinUrl(storageUrl, post?.coverImage?.key);
20
22
  return {
21
23
  metadataBase: site.url,
22
24
  // -----------------------------------------------------------------------
@@ -25,12 +27,14 @@ function createBuildArticleMetadata(siteConfig, storageUrl) {
25
27
  title: seoMetadata.title || site.name[resolvedLocale],
26
28
  description: seoMetadata.description || site.description[resolvedLocale],
27
29
  // identity
28
- authors: [
29
- {
30
- name: seoMetadata.author || authorT.authorName || void 0,
31
- url: authorT.url || void 0
32
- }
33
- ],
30
+ ...isArticle ? {
31
+ authors: [
32
+ {
33
+ name: seoMetadata.author || authorT.authorName || void 0,
34
+ url: authorT.url || void 0
35
+ }
36
+ ]
37
+ } : {},
34
38
  // url
35
39
  alternates: {
36
40
  canonical: seoMetadata.canonical || urls.canonical,
@@ -51,30 +55,55 @@ function createBuildArticleMetadata(siteConfig, storageUrl) {
51
55
  // url
52
56
  url: seoMetadata.ogUrl || seoMetadata.canonical || void 0,
53
57
  // identity
54
- type: ensureOgType("article", seoMetadata.ogType),
58
+ type: ensureOgType(
59
+ isArticle ? "article" : "website",
60
+ seoMetadata.ogType
61
+ ),
55
62
  siteName: seoMetadata.ogSiteName || site.name[resolvedLocale],
56
63
  // image
57
- images: buildOgImages({
58
- url: seoMetadata.ogImage || `${storageUrl}/${post?.coverImage?.key}`,
59
- secureUrl: seoMetadata.ogImage || `${storageUrl}/${post?.coverImage?.key}`,
64
+ images: isArticle ? buildOgImages({
65
+ url: seoMetadata.ogImage || articleCoverImageUrl,
66
+ secureUrl: seoMetadata.ogImage || articleCoverImageUrl,
60
67
  alt: seoMetadata.ogImageAlt || coverImageT.alt,
61
68
  type: seoMetadata.ogImageType,
62
69
  width: seoMetadata.ogImageWidth,
63
70
  height: seoMetadata.ogImageHeight
64
- }),
71
+ }) : (
72
+ // is `website`
73
+ seoMetadata.ogImage ? buildOgImages({
74
+ url: seoMetadata.ogImage,
75
+ secureUrl: seoMetadata.ogImage,
76
+ alt: seoMetadata.ogImageAlt,
77
+ type: seoMetadata.ogImageType,
78
+ width: seoMetadata.ogImageWidth,
79
+ height: seoMetadata.ogImageHeight
80
+ }) : (
81
+ // default
82
+ buildOgImages({
83
+ url: site.defaultImage.url,
84
+ secureUrl: site.defaultImage.url,
85
+ alt: site.defaultImage.alt,
86
+ type: site.defaultImage.mimeType,
87
+ width: site.defaultImage.width,
88
+ height: site.defaultImage.height
89
+ })
90
+ )
91
+ ),
65
92
  // locale
66
93
  locale: seoMetadata.ogLocale || toOgLocale(resolvedLocale),
67
94
  alternateLocale: sanitizeStringArray(
68
95
  seoMetadata.ogLocaleAlternate?.length ? seoMetadata.ogLocaleAlternate : locales.filter((l) => l !== resolvedLocale).map(toOgLocale)
69
96
  ),
70
97
  // article
71
- publishedTime: toIsoTime(seoMetadata.ogArticlePublishedTime),
72
- modifiedTime: toIsoTime(seoMetadata.ogArticleModifiedTime),
73
- authors: [seoMetadata.ogArticleAuthor || authorT.authorName].filter(
74
- Boolean
75
- ),
76
- section: seoMetadata.ogArticleSection,
77
- tags: sanitizeStringArray(seoMetadata.ogArticleTag) || tags
98
+ ...isArticle ? {
99
+ publishedTime: toIsoTime(seoMetadata.ogArticlePublishedTime),
100
+ modifiedTime: toIsoTime(seoMetadata.ogArticleModifiedTime),
101
+ authors: [
102
+ seoMetadata.ogArticleAuthor || authorT.authorName
103
+ ].filter(Boolean),
104
+ section: seoMetadata.ogArticleSection,
105
+ tags: sanitizeStringArray(seoMetadata.ogArticleTag) || tags
106
+ } : {}
78
107
  },
79
108
  // -----------------------------------------------------------------------
80
109
  // Twitter
@@ -89,4 +118,4 @@ function createBuildArticleMetadata(siteConfig, storageUrl) {
89
118
  };
90
119
  }
91
120
 
92
- export { createBuildArticleMetadata };
121
+ export { createBuildMetadata };
@@ -1,4 +1,4 @@
1
1
  export { type MultiItems, type SingleItem, type BaseTranslation, type Translation, ADMIN_ROLES, type AdminRole, type Admin, type AdminTranslation, type AdminFull, type AdminCard, type AdminSafe, ADMIN_ROLE_ARRAY, ADMIN_ROLE_I18N_MAP, type AdminRefreshToken, type DeviceInfo, FILE_TYPES, type FileType, type File, type FileTranslation, type FileFull, type FileCard, isFileLocked, type Folder, type FolderFull, isFolderLocked, normalizeFolderKey, fileManagerDoubleClick, POST_TYPES, type PostType, type Post, type PostTranslation, type PostFull, type PostListCard, type ExternalLink, type Faq, type TocItem, type SeoMetadata, type Alternate, type Config, type ConfigTranslation, type ConfigFull, type Inquiry, type InquiryFields, ROOT_FOLDER, ROOT_FOLDER_ID, ROOT_FOLDER_NAME, SIMPLE_UPLOAD_FOLDER_KEY, SIMPLE_UPLOAD_FOLDER_NAME, type StaticTopics, type StaticPages, type StaticInquiry, type StaticConfigs, type StaticSeoMetadata, type SeoMetadataField, type PostField, type SiteConfig, } from "../src/domain";
2
2
  export { CACHE_KEYS, KEYS, PATHS, PROTECTED_PATHS, LOGGED_IN_SKIP_PATHS, NEW_TAB_REL, NEW_TAB_TARGET, } from "../src/constants";
3
- export { mimeToExtension, classifyFileType, getMediaInfo, formatFileSize, type BlobFile, result, type SuccessResultParams, type ErrorResultParams, type Result, type SuccessResult, type ErrorResult, type ErrorDetail, OG_TYPE_ARRAY, type OgType, TWITTER_CARD_ARRAY, type TwitterCard, createBuildWebsiteMetadata, createBuildArticleMetadata, type SeoMetadataDefaults, serializeJsonLd, toIsoTime, findTranslation, createBuildTranslations, datetimeToDb, datetimeToUi, jsonArrayToDb, jsonArrayToUi, type UIStates, type FormData, type FormFieldController, debounce, ensureArray, formatDateTime, joinUrl, normalizeSlug, parsePositiveInt, DO_NOT_FETCH_KEY, type ListItemsState, SIZE, type SizeUnit, } from "../src/shared";
3
+ export { mimeToExtension, classifyFileType, getMediaInfo, formatFileSize, type BlobFile, result, type SuccessResultParams, type ErrorResultParams, type Result, type SuccessResult, type ErrorResult, type ErrorDetail, OG_TYPE_ARRAY, type OgType, TWITTER_CARD_ARRAY, type TwitterCard, createBuildMetadata, serializeJsonLd, toIsoTime, findTranslation, createBuildTranslations, datetimeToDb, datetimeToUi, jsonArrayToDb, jsonArrayToUi, type UIStates, type FormData, type FormFieldController, debounce, ensureArray, formatDateTime, joinUrl, normalizeSlug, parsePositiveInt, DO_NOT_FETCH_KEY, type ListItemsState, SIZE, type SizeUnit, } from "../src/shared";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../export/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,UAAU,EAIf,KAAK,eAAe,EACpB,KAAK,WAAW,EAKhB,WAAW,EACX,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACd,gBAAgB,EAChB,mBAAmB,EAEnB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAEf,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,YAAY,EAEZ,KAAK,MAAM,EACX,KAAK,UAAU,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EAEtB,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,GAAG,EACR,KAAK,OAAO,EAEZ,KAAK,WAAW,EAChB,KAAK,SAAS,EAEd,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAEf,KAAK,OAAO,EACZ,KAAK,aAAa,EAElB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EAIzB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,eAAe,CAAC;AAKvB,OAAO,EACL,UAAU,EACV,IAAI,EACJ,KAAK,EACL,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,cAAc,GACf,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAEL,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,KAAK,QAAQ,EAGb,MAAM,EACN,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAGhB,aAAa,EACb,KAAK,MAAM,EACX,kBAAkB,EAClB,KAAK,WAAW,EAChB,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,eAAe,EACf,SAAS,EAGT,eAAe,EACf,uBAAuB,EAGvB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,mBAAmB,EAGxB,QAAQ,EACR,WAAW,EACX,cAAc,EACd,OAAO,EACP,aAAa,EACb,gBAAgB,EAGhB,gBAAgB,EAChB,KAAK,cAAc,EAGnB,IAAI,EACJ,KAAK,QAAQ,GACd,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../export/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,UAAU,EAIf,KAAK,eAAe,EACpB,KAAK,WAAW,EAKhB,WAAW,EACX,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACd,gBAAgB,EAChB,mBAAmB,EAEnB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAEf,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,YAAY,EAEZ,KAAK,MAAM,EACX,KAAK,UAAU,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EAEtB,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,GAAG,EACR,KAAK,OAAO,EAEZ,KAAK,WAAW,EAChB,KAAK,SAAS,EAEd,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAEf,KAAK,OAAO,EACZ,KAAK,aAAa,EAElB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EAIzB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,eAAe,CAAC;AAKvB,OAAO,EACL,UAAU,EACV,IAAI,EACJ,KAAK,EACL,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,cAAc,GACf,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAEL,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,KAAK,QAAQ,EAGb,MAAM,EACN,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAGhB,aAAa,EACb,KAAK,MAAM,EACX,kBAAkB,EAClB,KAAK,WAAW,EAChB,mBAAmB,EACnB,eAAe,EACf,SAAS,EAGT,eAAe,EACf,uBAAuB,EAGvB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,mBAAmB,EAGxB,QAAQ,EACR,WAAW,EACX,cAAc,EACd,OAAO,EACP,aAAa,EACb,gBAAgB,EAGhB,gBAAgB,EAChB,KAAK,cAAc,EAGnB,IAAI,EACJ,KAAK,QAAQ,GACd,MAAM,eAAe,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export { mimeToExtension, classifyFileType, getMediaInfo, formatFileSize, type BlobFile, } from "./blob-file";
2
2
  export { result, type SuccessResultParams, type ErrorResultParams, type Result, type SuccessResult, type ErrorResult, type ErrorDetail, } from "./result";
3
- export { OG_TYPE_ARRAY, type OgType, TWITTER_CARD_ARRAY, type TwitterCard, createBuildWebsiteMetadata, createBuildArticleMetadata, type SeoMetadataDefaults, serializeJsonLd, toIsoTime, } from "./seo-metadata";
3
+ export { OG_TYPE_ARRAY, type OgType, TWITTER_CARD_ARRAY, type TwitterCard, createBuildMetadata, serializeJsonLd, toIsoTime, } from "./seo-metadata";
4
4
  export { findTranslation, createBuildTranslations } from "./translation";
5
5
  export { datetimeToDb, datetimeToUi, jsonArrayToDb, jsonArrayToUi, type UIStates, type FormData, type FormFieldController, } from "./form";
6
6
  export { debounce, ensureArray, formatDateTime, joinUrl, normalizeSlug, parsePositiveInt, } from "./utils";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,KAAK,QAAQ,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,MAAM,EACN,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,aAAa,EACb,KAAK,MAAM,EACX,kBAAkB,EAClB,KAAK,WAAW,EAChB,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,eAAe,EACf,SAAS,GACV,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGzE,OAAO,EAEL,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EAEb,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,mBAAmB,GACzB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,cAAc,EACd,OAAO,EACP,aAAa,EACb,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,KAAK,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrE,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,KAAK,QAAQ,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,MAAM,EACN,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,aAAa,EACb,KAAK,MAAM,EACX,kBAAkB,EAClB,KAAK,WAAW,EAChB,mBAAmB,EACnB,eAAe,EACf,SAAS,GACV,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGzE,OAAO,EAEL,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EAEb,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,mBAAmB,GACzB,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,cAAc,EACd,OAAO,EACP,aAAa,EACb,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,KAAK,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrE,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { SiteConfig } from "../../domain";
2
+ import type { PostFull } from "../../domain/resources/post/full";
3
+ import type { Metadata } from "next";
4
+ export declare function createBuildMetadata<Locale extends string = string>(siteConfig: SiteConfig<Locale>, storageUrl: string): (urls: {
5
+ canonical: string;
6
+ alternates: Record<string, string>;
7
+ }, post?: PostFull, locale?: Locale, isArticle?: boolean) => Metadata;
8
+ //# sourceMappingURL=build-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-metadata.d.ts","sourceRoot":"","sources":["../../../../../src/shared/seo-metadata/build-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAWrC,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAChE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,EAC9B,UAAU,EAAE,MAAM,IAGhB,MAAM;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAC/D,OAAO,QAAQ,EACf,SAAS,MAAM,EACf,mBAAiB,KAChB,QAAQ,CAuIZ"}
@@ -1,7 +1,5 @@
1
1
  export { OG_TYPE_ARRAY, type OgType, TWITTER_CARD_ARRAY, type TwitterCard, } from "./standards";
2
- export { createBuildWebsiteMetadata } from "./build-website-metadata";
3
- export { createBuildArticleMetadata } from "./build-article-metadata";
4
- export type { SeoMetadataDefaults } from "./types";
2
+ export { createBuildMetadata } from "./build-metadata";
5
3
  export { serializeJsonLd } from "./serialize-json-ld";
6
4
  export { toIsoTime } from "./utils/to-iso-time";
7
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/seo-metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,MAAM,EACX,kBAAkB,EAClB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/seo-metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,MAAM,EACX,kBAAkB,EAClB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yimingliao/cms",
3
- "version": "0.0.243",
3
+ "version": "0.0.244",
4
4
  "author": "Yiming Liao",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -119,7 +119,7 @@
119
119
  "eslint-plugin-unicorn": "^63.0.0",
120
120
  "eslint-plugin-unused-imports": "^4.4.1",
121
121
  "generic-pool": "^3.9.0",
122
- "intor": "^2.5.1",
122
+ "intor": "^2.7.0",
123
123
  "knip": "^5.86.0",
124
124
  "magic-string": "^0.30.21",
125
125
  "next": "^16.1.6",
@@ -1,78 +0,0 @@
1
- import { findTranslation } from '../translation/find-translation.js';
2
- import { buildAlternateMap } from './utils/build-alternate-map.js';
3
- import { buildOgImages } from './utils/build-og-image.js';
4
- import { ensureOgType } from './utils/ensure-og-type.js';
5
- import { ensureTwitterCard } from './utils/ensure-twitter-card.js';
6
- import { sanitizeStringArray } from './utils/sanitize-string-array.js';
7
- import { toOgLocale } from './utils/to-og-locale.js';
8
-
9
- function createBuildWebsiteMetadata(siteConfig) {
10
- return function buildWebsiteMetadata(urls, post, locale) {
11
- const { defaultLocale, locales, site } = siteConfig;
12
- const resolvedLocale = locale || defaultLocale;
13
- const seoMetadata = findTranslation(post?.seoMetadatas, locale);
14
- return {
15
- metadataBase: site.url,
16
- // -----------------------------------------------------------------------
17
- // Basic
18
- // -----------------------------------------------------------------------
19
- title: seoMetadata.title || site.name[resolvedLocale],
20
- description: seoMetadata.description || site.description[resolvedLocale],
21
- // url
22
- alternates: {
23
- canonical: seoMetadata.canonical || urls.canonical,
24
- languages: seoMetadata.alternate?.length ? buildAlternateMap(seoMetadata.alternate) : urls.alternates
25
- },
26
- // robots
27
- robots: seoMetadata.robots || {
28
- index: true,
29
- follow: true,
30
- "max-image-preview": "large"
31
- },
32
- // -----------------------------------------------------------------------
33
- // Open Graph
34
- // -----------------------------------------------------------------------
35
- openGraph: {
36
- title: seoMetadata.ogTitle || void 0,
37
- description: seoMetadata.ogDescription || void 0,
38
- // url
39
- url: seoMetadata.ogUrl || seoMetadata.canonical || void 0,
40
- // identity
41
- type: ensureOgType("website", seoMetadata.ogType),
42
- siteName: seoMetadata.ogSiteName || site.name[resolvedLocale],
43
- // image
44
- images: seoMetadata.ogImage ? buildOgImages({
45
- url: seoMetadata.ogImage,
46
- secureUrl: seoMetadata.ogImage,
47
- alt: seoMetadata.ogImageAlt,
48
- type: seoMetadata.ogImageType,
49
- width: seoMetadata.ogImageWidth,
50
- height: seoMetadata.ogImageHeight
51
- }) : buildOgImages({
52
- url: site.defaultImage.url,
53
- secureUrl: site.defaultImage.url,
54
- alt: site.defaultImage.alt,
55
- type: site.defaultImage.mimeType,
56
- width: site.defaultImage.width,
57
- height: site.defaultImage.height
58
- }),
59
- // locale
60
- locale: seoMetadata.ogLocale || toOgLocale(resolvedLocale),
61
- alternateLocale: sanitizeStringArray(
62
- seoMetadata.ogLocaleAlternate?.length ? seoMetadata.ogLocaleAlternate : locales.filter((l) => l !== resolvedLocale).map(toOgLocale)
63
- )
64
- },
65
- // -----------------------------------------------------------------------
66
- // Twitter
67
- // -----------------------------------------------------------------------
68
- twitter: {
69
- card: ensureTwitterCard("summary_large_image", seoMetadata.twitterCard),
70
- // identity
71
- site: seoMetadata.twitterSite || void 0,
72
- creator: seoMetadata.twitterCreator || void 0
73
- }
74
- };
75
- };
76
- }
77
-
78
- export { createBuildWebsiteMetadata };
@@ -1,8 +0,0 @@
1
- import type { SiteConfig } from "../../domain";
2
- import type { PostFull } from "../../domain/resources/post/full";
3
- import type { Metadata } from "next";
4
- export declare function createBuildArticleMetadata<Locale extends string = string>(siteConfig: SiteConfig<Locale>, storageUrl: string): (urls: {
5
- canonical: string;
6
- alternates: Record<string, string>;
7
- }, post?: PostFull, locale?: Locale) => Metadata;
8
- //# sourceMappingURL=build-article-metadata.d.ts.map
@@ -1 +0,0 @@
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,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAUrC,wBAAgB,0BAA0B,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EACvE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,EAC9B,UAAU,EAAE,MAAM,IAGhB,MAAM;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAC/D,OAAO,QAAQ,EACf,SAAS,MAAM,KACd,QAAQ,CAkGZ"}
@@ -1,8 +0,0 @@
1
- import type { SiteConfig } from "../../domain";
2
- import type { PostFull } from "../../domain/resources/post/full";
3
- import type { Metadata } from "next";
4
- export declare function createBuildWebsiteMetadata<Locale extends string = string>(siteConfig: SiteConfig<Locale>): (urls: {
5
- canonical: string;
6
- alternates: Record<string, string>;
7
- }, post?: PostFull, locale?: Locale) => Metadata;
8
- //# sourceMappingURL=build-website-metadata.d.ts.map
@@ -1 +0,0 @@
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,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AASrC,wBAAgB,0BAA0B,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EACvE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,IAG5B,MAAM;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAC/D,OAAO,QAAQ,EACf,SAAS,MAAM,KACd,QAAQ,CAoFZ"}
@@ -1,10 +0,0 @@
1
- import type { TwitterCard } from "./standards";
2
- import type { Robots } from "next/dist/lib/metadata/types/metadata-types";
3
- export interface SeoMetadataDefaults {
4
- metadataBase: string | URL;
5
- title: string;
6
- robots: Robots;
7
- ogSiteName: string;
8
- twitterCard: TwitterCard;
9
- }
10
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/shared/seo-metadata/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAC;AAE1E,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;CAC1B"}