@lytjs/metadata 6.6.0 → 6.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2,15 +2,11 @@
2
2
 
3
3
  var commonString = require('@lytjs/common-string');
4
4
 
5
- var __defProp = Object.defineProperty;
6
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
- var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
8
-
9
5
  // src/builder.ts
10
6
  var MetadataBuilder = class {
11
7
  constructor() {
12
8
  /** 元数据对象 */
13
- __publicField(this, "metadata", {});
9
+ this.metadata = {};
14
10
  }
15
11
  /**
16
12
  * 设置标题
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/builder.ts","../src/renderer.ts"],"names":["escapeHTML"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * 元数据构建器\n */\nimport type { Metadata, OpenGraphMetadata, TwitterMetadata } from '@lytjs/shared-types';\n\n/**\n * 元数据构建器类\n */\nexport class MetadataBuilder {\n /** 元数据对象 */\n private metadata: Metadata = {};\n\n /**\n * 设置标题\n *\n * @param title - 标题\n * @returns 构建器实例\n */\n title(title: string): this {\n this.metadata.title = title;\n return this;\n }\n\n /**\n * 设置描述\n *\n * @param description - 描述\n * @returns 构建器实例\n */\n description(description: string): this {\n this.metadata.description = description;\n return this;\n }\n\n /**\n * 设置关键词\n *\n * @param keywords - 关键词数组\n * @returns 构建器实例\n */\n keywords(keywords: string[]): this {\n this.metadata.keywords = keywords;\n return this;\n }\n\n /**\n * 设置 Open Graph 元数据\n *\n * @param og - Open Graph 元数据\n * @returns 构建器实例\n */\n openGraph(og: OpenGraphMetadata): this {\n this.metadata.openGraph = { ...this.metadata.openGraph, ...og };\n return this;\n }\n\n /**\n * 设置 Twitter 元数据\n *\n * @param twitter - Twitter 元数据\n * @returns 构建器实例\n */\n twitter(twitter: TwitterMetadata): this {\n this.metadata.twitter = { ...this.metadata.twitter, ...twitter };\n return this;\n }\n\n /**\n * 设置自定义属性\n *\n * @param key - 键\n * @param value - 值\n * @returns 构建器实例\n */\n set(key: string, value: unknown): this {\n this.metadata[key] = value;\n return this;\n }\n\n /**\n * 构建元数据\n *\n * @returns 元数据对象\n */\n build(): Metadata {\n return { ...this.metadata };\n }\n}\n\n/**\n * 创建元数据构建器\n *\n * @returns 构建器实例\n */\nexport function createMetadataBuilder(): MetadataBuilder {\n return new MetadataBuilder();\n}\n","/**\n * 元数据渲染器\n */\nimport type { Metadata } from '@lytjs/shared-types';\nimport { escapeHTML } from '@lytjs/common-string';\n\n/**\n * 渲染元数据为 HTML 标签\n *\n * @param metadata - 元数据对象\n * @returns HTML 标签字符串\n */\nexport function renderMetadata(metadata: Metadata): string {\n const tags: string[] = [];\n\n if (metadata.title) {\n tags.push(`<title>${escapeHTML(metadata.title)}</title>`);\n }\n\n if (metadata.description) {\n tags.push(`<meta name=\"description\" content=\"${escapeHTML(metadata.description)}\">`);\n }\n\n if (metadata.keywords && metadata.keywords.length > 0) {\n tags.push(`<meta name=\"keywords\" content=\"${escapeHTML(metadata.keywords.join(', '))}\">`);\n }\n\n if (metadata.openGraph) {\n for (const [key, value] of Object.entries(metadata.openGraph)) {\n if (value) {\n tags.push(`<meta property=\"og:${key}\" content=\"${escapeHTML(String(value))}\">`);\n }\n }\n }\n\n if (metadata.twitter) {\n for (const [key, value] of Object.entries(metadata.twitter)) {\n if (value) {\n tags.push(`<meta name=\"twitter:${key}\" content=\"${escapeHTML(String(value))}\">`);\n }\n }\n }\n\n return tags.join('\\n');\n}\n"]}
1
+ {"version":3,"sources":["../src/builder.ts","../src/renderer.ts"],"names":["escapeHTML"],"mappings":";;;;;AAQO,IAAM,kBAAN,MAAsB;AAAA,EAAtB,WAAA,GAAA;AAEL;AAAA,IAAA,IAAA,CAAQ,WAAqB,EAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9B,MAAM,KAAA,EAAqB;AACzB,IAAA,IAAA,CAAK,SAAS,KAAA,GAAQ,KAAA;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,WAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,SAAS,WAAA,GAAc,WAAA;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,QAAA,EAA0B;AACjC,IAAA,IAAA,CAAK,SAAS,QAAA,GAAW,QAAA;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,EAAA,EAA6B;AACrC,IAAA,IAAA,CAAK,QAAA,CAAS,YAAY,EAAE,GAAG,KAAK,QAAA,CAAS,SAAA,EAAW,GAAG,EAAA,EAAG;AAC9D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,OAAA,EAAgC;AACtC,IAAA,IAAA,CAAK,QAAA,CAAS,UAAU,EAAE,GAAG,KAAK,QAAA,CAAS,OAAA,EAAS,GAAG,OAAA,EAAQ;AAC/D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,GAAA,CAAI,KAAa,KAAA,EAAsB;AACrC,IAAA,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,GAAI,KAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAA,GAAkB;AAChB,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,QAAA,EAAS;AAAA,EAC5B;AACF;AAOO,SAAS,qBAAA,GAAyC;AACvD,EAAA,OAAO,IAAI,eAAA,EAAgB;AAC7B;ACpFO,SAAS,eAAe,QAAA,EAA4B;AACzD,EAAA,MAAM,OAAiB,EAAC;AAExB,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,IAAA,CAAK,KAAK,CAAA,OAAA,EAAUA,uBAAA,CAAW,QAAA,CAAS,KAAK,CAAC,CAAA,QAAA,CAAU,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,IAAA,CAAK,KAAK,CAAA,kCAAA,EAAqCA,uBAAA,CAAW,QAAA,CAAS,WAAW,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EACrF;AAEA,EAAA,IAAI,QAAA,CAAS,QAAA,IAAY,QAAA,CAAS,QAAA,CAAS,SAAS,CAAA,EAAG;AACrD,IAAA,IAAA,CAAK,IAAA,CAAK,kCAAkCA,uBAAA,CAAW,QAAA,CAAS,SAAS,IAAA,CAAK,IAAI,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EAC1F;AAEA,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AAC7D,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,CAAK,IAAA,CAAK,sBAAsB,GAAG,CAAA,WAAA,EAAcA,wBAAW,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC3D,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,CAAK,IAAA,CAAK,uBAAuB,GAAG,CAAA,WAAA,EAAcA,wBAAW,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA,CAAK,KAAK,IAAI,CAAA;AACvB","file":"index.cjs","sourcesContent":["/**\n * 元数据构建器\n */\nimport type { Metadata, OpenGraphMetadata, TwitterMetadata } from '@lytjs/shared-types';\n\n/**\n * 元数据构建器类\n */\nexport class MetadataBuilder {\n /** 元数据对象 */\n private metadata: Metadata = {};\n\n /**\n * 设置标题\n *\n * @param title - 标题\n * @returns 构建器实例\n */\n title(title: string): this {\n this.metadata.title = title;\n return this;\n }\n\n /**\n * 设置描述\n *\n * @param description - 描述\n * @returns 构建器实例\n */\n description(description: string): this {\n this.metadata.description = description;\n return this;\n }\n\n /**\n * 设置关键词\n *\n * @param keywords - 关键词数组\n * @returns 构建器实例\n */\n keywords(keywords: string[]): this {\n this.metadata.keywords = keywords;\n return this;\n }\n\n /**\n * 设置 Open Graph 元数据\n *\n * @param og - Open Graph 元数据\n * @returns 构建器实例\n */\n openGraph(og: OpenGraphMetadata): this {\n this.metadata.openGraph = { ...this.metadata.openGraph, ...og };\n return this;\n }\n\n /**\n * 设置 Twitter 元数据\n *\n * @param twitter - Twitter 元数据\n * @returns 构建器实例\n */\n twitter(twitter: TwitterMetadata): this {\n this.metadata.twitter = { ...this.metadata.twitter, ...twitter };\n return this;\n }\n\n /**\n * 设置自定义属性\n *\n * @param key - 键\n * @param value - 值\n * @returns 构建器实例\n */\n set(key: string, value: unknown): this {\n this.metadata[key] = value;\n return this;\n }\n\n /**\n * 构建元数据\n *\n * @returns 元数据对象\n */\n build(): Metadata {\n return { ...this.metadata };\n }\n}\n\n/**\n * 创建元数据构建器\n *\n * @returns 构建器实例\n */\nexport function createMetadataBuilder(): MetadataBuilder {\n return new MetadataBuilder();\n}\n","/**\n * 元数据渲染器\n */\nimport type { Metadata } from '@lytjs/shared-types';\nimport { escapeHTML } from '@lytjs/common-string';\n\n/**\n * 渲染元数据为 HTML 标签\n *\n * @param metadata - 元数据对象\n * @returns HTML 标签字符串\n */\nexport function renderMetadata(metadata: Metadata): string {\n const tags: string[] = [];\n\n if (metadata.title) {\n tags.push(`<title>${escapeHTML(metadata.title)}</title>`);\n }\n\n if (metadata.description) {\n tags.push(`<meta name=\"description\" content=\"${escapeHTML(metadata.description)}\">`);\n }\n\n if (metadata.keywords && metadata.keywords.length > 0) {\n tags.push(`<meta name=\"keywords\" content=\"${escapeHTML(metadata.keywords.join(', '))}\">`);\n }\n\n if (metadata.openGraph) {\n for (const [key, value] of Object.entries(metadata.openGraph)) {\n if (value) {\n tags.push(`<meta property=\"og:${key}\" content=\"${escapeHTML(String(value))}\">`);\n }\n }\n }\n\n if (metadata.twitter) {\n for (const [key, value] of Object.entries(metadata.twitter)) {\n if (value) {\n tags.push(`<meta name=\"twitter:${key}\" content=\"${escapeHTML(String(value))}\">`);\n }\n }\n }\n\n return tags.join('\\n');\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1,14 +1,10 @@
1
1
  import { escapeHTML } from '@lytjs/common-string';
2
2
 
3
- var __defProp = Object.defineProperty;
4
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
- var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
6
-
7
3
  // src/builder.ts
8
4
  var MetadataBuilder = class {
9
5
  constructor() {
10
6
  /** 元数据对象 */
11
- __publicField(this, "metadata", {});
7
+ this.metadata = {};
12
8
  }
13
9
  /**
14
10
  * 设置标题
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/builder.ts","../src/renderer.ts"],"names":[],"mappings":";;;;;;;AAQO,IAAM,kBAAN,MAAsB;AAAA,EAAtB,WAAA,GAAA;AAEL;AAAA,IAAA,aAAA,CAAA,IAAA,EAAQ,YAAqB,EAAC,CAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9B,MAAM,KAAA,EAAqB;AACzB,IAAA,IAAA,CAAK,SAAS,KAAA,GAAQ,KAAA;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,WAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,SAAS,WAAA,GAAc,WAAA;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,QAAA,EAA0B;AACjC,IAAA,IAAA,CAAK,SAAS,QAAA,GAAW,QAAA;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,EAAA,EAA6B;AACrC,IAAA,IAAA,CAAK,QAAA,CAAS,YAAY,EAAE,GAAG,KAAK,QAAA,CAAS,SAAA,EAAW,GAAG,EAAA,EAAG;AAC9D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,OAAA,EAAgC;AACtC,IAAA,IAAA,CAAK,QAAA,CAAS,UAAU,EAAE,GAAG,KAAK,QAAA,CAAS,OAAA,EAAS,GAAG,OAAA,EAAQ;AAC/D,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,GAAA,CAAI,KAAa,KAAA,EAAsB;AACrC,IAAA,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,GAAI,KAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAA,GAAkB;AAChB,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,QAAA,EAAS;AAAA,EAC5B;AACF;AAOO,SAAS,qBAAA,GAAyC;AACvD,EAAA,OAAO,IAAI,eAAA,EAAgB;AAC7B;ACpFO,SAAS,eAAe,QAAA,EAA4B;AACzD,EAAA,MAAM,OAAiB,EAAC;AAExB,EAAA,IAAI,SAAS,KAAA,EAAO;AAClB,IAAA,IAAA,CAAK,KAAK,CAAA,OAAA,EAAU,UAAA,CAAW,QAAA,CAAS,KAAK,CAAC,CAAA,QAAA,CAAU,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,IAAA,CAAK,KAAK,CAAA,kCAAA,EAAqC,UAAA,CAAW,QAAA,CAAS,WAAW,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EACrF;AAEA,EAAA,IAAI,QAAA,CAAS,QAAA,IAAY,QAAA,CAAS,QAAA,CAAS,SAAS,CAAA,EAAG;AACrD,IAAA,IAAA,CAAK,IAAA,CAAK,kCAAkC,UAAA,CAAW,QAAA,CAAS,SAAS,IAAA,CAAK,IAAI,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EAC1F;AAEA,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,EAAG;AAC7D,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,CAAK,IAAA,CAAK,sBAAsB,GAAG,CAAA,WAAA,EAAc,WAAW,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC3D,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,CAAK,IAAA,CAAK,uBAAuB,GAAG,CAAA,WAAA,EAAc,WAAW,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA,CAAK,KAAK,IAAI,CAAA;AACvB","file":"index.mjs","sourcesContent":["/**\n * 元数据构建器\n */\nimport type { Metadata, OpenGraphMetadata, TwitterMetadata } from '@lytjs/shared-types';\n\n/**\n * 元数据构建器类\n */\nexport class MetadataBuilder {\n /** 元数据对象 */\n private metadata: Metadata = {};\n\n /**\n * 设置标题\n *\n * @param title - 标题\n * @returns 构建器实例\n */\n title(title: string): this {\n this.metadata.title = title;\n return this;\n }\n\n /**\n * 设置描述\n *\n * @param description - 描述\n * @returns 构建器实例\n */\n description(description: string): this {\n this.metadata.description = description;\n return this;\n }\n\n /**\n * 设置关键词\n *\n * @param keywords - 关键词数组\n * @returns 构建器实例\n */\n keywords(keywords: string[]): this {\n this.metadata.keywords = keywords;\n return this;\n }\n\n /**\n * 设置 Open Graph 元数据\n *\n * @param og - Open Graph 元数据\n * @returns 构建器实例\n */\n openGraph(og: OpenGraphMetadata): this {\n this.metadata.openGraph = { ...this.metadata.openGraph, ...og };\n return this;\n }\n\n /**\n * 设置 Twitter 元数据\n *\n * @param twitter - Twitter 元数据\n * @returns 构建器实例\n */\n twitter(twitter: TwitterMetadata): this {\n this.metadata.twitter = { ...this.metadata.twitter, ...twitter };\n return this;\n }\n\n /**\n * 设置自定义属性\n *\n * @param key - 键\n * @param value - 值\n * @returns 构建器实例\n */\n set(key: string, value: unknown): this {\n this.metadata[key] = value;\n return this;\n }\n\n /**\n * 构建元数据\n *\n * @returns 元数据对象\n */\n build(): Metadata {\n return { ...this.metadata };\n }\n}\n\n/**\n * 创建元数据构建器\n *\n * @returns 构建器实例\n */\nexport function createMetadataBuilder(): MetadataBuilder {\n return new MetadataBuilder();\n}\n","/**\n * 元数据渲染器\n */\nimport type { Metadata } from '@lytjs/shared-types';\nimport { escapeHTML } from '@lytjs/common-string';\n\n/**\n * 渲染元数据为 HTML 标签\n *\n * @param metadata - 元数据对象\n * @returns HTML 标签字符串\n */\nexport function renderMetadata(metadata: Metadata): string {\n const tags: string[] = [];\n\n if (metadata.title) {\n tags.push(`<title>${escapeHTML(metadata.title)}</title>`);\n }\n\n if (metadata.description) {\n tags.push(`<meta name=\"description\" content=\"${escapeHTML(metadata.description)}\">`);\n }\n\n if (metadata.keywords && metadata.keywords.length > 0) {\n tags.push(`<meta name=\"keywords\" content=\"${escapeHTML(metadata.keywords.join(', '))}\">`);\n }\n\n if (metadata.openGraph) {\n for (const [key, value] of Object.entries(metadata.openGraph)) {\n if (value) {\n tags.push(`<meta property=\"og:${key}\" content=\"${escapeHTML(String(value))}\">`);\n }\n }\n }\n\n if (metadata.twitter) {\n for (const [key, value] of Object.entries(metadata.twitter)) {\n if (value) {\n tags.push(`<meta name=\"twitter:${key}\" content=\"${escapeHTML(String(value))}\">`);\n }\n }\n }\n\n return tags.join('\\n');\n}\n"]}
1
+ {"version":3,"sources":["../src/builder.ts","../src/renderer.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * 元数据构建器\n */\nimport type { Metadata, OpenGraphMetadata, TwitterMetadata } from '@lytjs/shared-types';\n\n/**\n * 元数据构建器类\n */\nexport class MetadataBuilder {\n /** 元数据对象 */\n private metadata: Metadata = {};\n\n /**\n * 设置标题\n *\n * @param title - 标题\n * @returns 构建器实例\n */\n title(title: string): this {\n this.metadata.title = title;\n return this;\n }\n\n /**\n * 设置描述\n *\n * @param description - 描述\n * @returns 构建器实例\n */\n description(description: string): this {\n this.metadata.description = description;\n return this;\n }\n\n /**\n * 设置关键词\n *\n * @param keywords - 关键词数组\n * @returns 构建器实例\n */\n keywords(keywords: string[]): this {\n this.metadata.keywords = keywords;\n return this;\n }\n\n /**\n * 设置 Open Graph 元数据\n *\n * @param og - Open Graph 元数据\n * @returns 构建器实例\n */\n openGraph(og: OpenGraphMetadata): this {\n this.metadata.openGraph = { ...this.metadata.openGraph, ...og };\n return this;\n }\n\n /**\n * 设置 Twitter 元数据\n *\n * @param twitter - Twitter 元数据\n * @returns 构建器实例\n */\n twitter(twitter: TwitterMetadata): this {\n this.metadata.twitter = { ...this.metadata.twitter, ...twitter };\n return this;\n }\n\n /**\n * 设置自定义属性\n *\n * @param key - 键\n * @param value - 值\n * @returns 构建器实例\n */\n set(key: string, value: unknown): this {\n this.metadata[key] = value;\n return this;\n }\n\n /**\n * 构建元数据\n *\n * @returns 元数据对象\n */\n build(): Metadata {\n return { ...this.metadata };\n }\n}\n\n/**\n * 创建元数据构建器\n *\n * @returns 构建器实例\n */\nexport function createMetadataBuilder(): MetadataBuilder {\n return new MetadataBuilder();\n}\n","/**\n * 元数据渲染器\n */\nimport type { Metadata } from '@lytjs/shared-types';\nimport { escapeHTML } from '@lytjs/common-string';\n\n/**\n * 渲染元数据为 HTML 标签\n *\n * @param metadata - 元数据对象\n * @returns HTML 标签字符串\n */\nexport function renderMetadata(metadata: Metadata): string {\n const tags: string[] = [];\n\n if (metadata.title) {\n tags.push(`<title>${escapeHTML(metadata.title)}</title>`);\n }\n\n if (metadata.description) {\n tags.push(`<meta name=\"description\" content=\"${escapeHTML(metadata.description)}\">`);\n }\n\n if (metadata.keywords && metadata.keywords.length > 0) {\n tags.push(`<meta name=\"keywords\" content=\"${escapeHTML(metadata.keywords.join(', '))}\">`);\n }\n\n if (metadata.openGraph) {\n for (const [key, value] of Object.entries(metadata.openGraph)) {\n if (value) {\n tags.push(`<meta property=\"og:${key}\" content=\"${escapeHTML(String(value))}\">`);\n }\n }\n }\n\n if (metadata.twitter) {\n for (const [key, value] of Object.entries(metadata.twitter)) {\n if (value) {\n tags.push(`<meta name=\"twitter:${key}\" content=\"${escapeHTML(String(value))}\">`);\n }\n }\n }\n\n return tags.join('\\n');\n}\n"]}
package/package.json CHANGED
@@ -1,61 +1,61 @@
1
- {
2
- "name": "@lytjs/metadata",
3
- "version": "6.6.0",
4
- "description": "LytJS 元数据系统",
5
- "type": "module",
6
- "main": "./dist/index.cjs",
7
- "module": "./dist/index.mjs",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.mjs",
13
- "require": "./dist/index.cjs"
14
- },
15
- "./package.json": "./package.json"
16
- },
17
- "files": [
18
- "dist",
19
- "README.md",
20
- "LICENSE"
21
- ],
22
- "sideEffects": false,
23
- "scripts": {
24
- "dev": "tsup --watch",
25
- "build": "tsup",
26
- "test": "vitest run",
27
- "test:watch": "test:watch",
28
- "test:coverage": "vitest run --coverage",
29
- "type-check": "tsc --noEmit",
30
- "lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\"",
31
- "clean": "rm -rf dist node_modules .turbo"
32
- },
33
- "dependencies": {
34
- "@lytjs/common-is": "workspace:*",
35
- "@lytjs/common-string": "workspace:*",
36
- "@lytjs/shared-types": "workspace:*"
37
- },
38
- "devDependencies": {
39
- "tsup": "^8.3.6",
40
- "typescript": "^5.7.3",
41
- "vitest": "^3.0.0"
42
- },
43
- "peerDependencies": {},
44
- "publishConfig": {
45
- "access": "public",
46
- "registry": "https://registry.npmjs.org/"
47
- },
48
- "repository": {
49
- "type": "git",
50
- "url": "https://gitee.com/lytjs/lytjs.git",
51
- "directory": "packages/ecosystem/packages/web-framework/packages/metadata"
52
- },
53
- "keywords": [
54
- "lytjs",
55
- "metadata",
56
- "meta",
57
- "seo"
58
- ],
59
- "author": "LytJS Team",
60
- "license": "MIT"
61
- }
1
+ {
2
+ "name": "@lytjs/metadata",
3
+ "version": "6.8.0",
4
+ "description": "LytJS 元数据系统",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.cjs"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "sideEffects": false,
23
+ "scripts": {
24
+ "dev": "tsup --watch",
25
+ "build": "tsup",
26
+ "test": "vitest run",
27
+ "test:watch": "test:watch",
28
+ "test:coverage": "vitest run --coverage",
29
+ "type-check": "tsc --noEmit",
30
+ "lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\"",
31
+ "clean": "rm -rf dist node_modules .turbo"
32
+ },
33
+ "dependencies": {
34
+ "@lytjs/common-is": "^6.8.0",
35
+ "@lytjs/common-string": "^6.8.0",
36
+ "@lytjs/shared-types": "^6.8.0"
37
+ },
38
+ "devDependencies": {
39
+ "tsup": "^8.3.6",
40
+ "typescript": "^5.7.3",
41
+ "vitest": "^3.0.0"
42
+ },
43
+ "peerDependencies": {},
44
+ "publishConfig": {
45
+ "access": "public",
46
+ "registry": "https://registry.npmjs.org/"
47
+ },
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://gitee.com/lytjs/lytjs.git",
51
+ "directory": "packages/ecosystem/packages/web-framework/packages/metadata"
52
+ },
53
+ "keywords": [
54
+ "lytjs",
55
+ "metadata",
56
+ "meta",
57
+ "seo"
58
+ ],
59
+ "author": "LytJS Team",
60
+ "license": "MIT"
61
+ }