@se-studio/markdown-renderer 1.0.14 → 1.0.16

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/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @se-studio/markdown-renderer
2
2
 
3
+ ## 1.0.16
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @se-studio/contentful-rest-api@1.0.52
9
+ - @se-studio/core-data-types@1.0.52
10
+
11
+ ## 1.0.15
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies
16
+ - @se-studio/contentful-rest-api@1.0.51
17
+ - @se-studio/core-data-types@1.0.51
18
+
3
19
  ## 1.0.14
4
20
 
5
21
  ### Patch Changes
package/README.md CHANGED
@@ -40,7 +40,7 @@ const contentData = await exporter.fetchContent('page', 'home');
40
40
 
41
41
  if (contentData) {
42
42
  // 3. Convert to Markdown
43
- const markdown = await converter.convert(contentData, {
43
+ const markdown = converter.convert(contentData, {
44
44
  contentContext: contentData.context,
45
45
  config: config
46
46
  });
@@ -1,8 +1,12 @@
1
1
  import type { ContentData, MarkdownConverterContext } from './types';
2
2
  export declare class MarkdownConverter {
3
- convert(contentData: ContentData, context: MarkdownConverterContext): Promise<string>;
3
+ convert(contentData: ContentData, context: MarkdownConverterContext): string;
4
4
  private generateFrontmatter;
5
5
  private convertModule;
6
+ private convertPersonHero;
7
+ private convertArticleHero;
8
+ private convertPersonBio;
9
+ private convertTeamGrid;
6
10
  private convertGenericComponent;
7
11
  private convertGenericCollection;
8
12
  private renderPreHeading;
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownConverter.d.ts","sourceRoot":"","sources":["../src/MarkdownConverter.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAGrE,qBAAa,iBAAiB;IACtB,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;IA0B3F,OAAO,CAAC,mBAAmB;YAkBb,aAAa;IAgB3B,OAAO,CAAC,uBAAuB;YAwBjB,wBAAwB;IAwBtC,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,WAAW;CAYpB"}
1
+ {"version":3,"file":"MarkdownConverter.d.ts","sourceRoot":"","sources":["../src/MarkdownConverter.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAIrE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB,GAAG,MAAM;IA0B5E,OAAO,CAAC,mBAAmB;IA6F3B,OAAO,CAAC,aAAa;IAuCrB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,kBAAkB;IAkD1B,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,wBAAwB;IA6BhC,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,WAAW;CAYpB"}
@@ -1,108 +1,280 @@
1
+ import { isPersonLink, } from '@se-studio/core-data-types';
1
2
  import yaml from 'js-yaml';
2
3
  import { convertRichTextToMarkdown } from './utils/richTextConverter';
4
+ import { cleanMarkdownText } from './utils/textUtils';
3
5
  export class MarkdownConverter {
4
- async convert(contentData, context) {
6
+ convert(contentData, context) {
5
7
  const { data, contentType } = contentData;
6
- const frontmatter = this.generateFrontmatter(data, contentType);
8
+ const frontmatter = this.generateFrontmatter(data, contentType, context);
7
9
  let markdown = `---\n${yaml.dump(frontmatter)}---\n\n`;
8
10
  // Add Title and basic body
9
11
  if (data.title) {
10
- markdown += `# ${data.title}\n\n`;
12
+ markdown += `# ${cleanMarkdownText(data.title)}\n\n`;
11
13
  }
12
14
  if (data.description) {
13
- markdown += `> ${data.description}\n\n`;
15
+ markdown += `> ${cleanMarkdownText(data.description)}\n\n`;
14
16
  }
15
17
  // Page modules / contents
16
18
  if (data.contents) {
17
19
  for (const item of data.contents) {
18
20
  if (!item)
19
21
  continue;
20
- markdown += await this.convertModule(item, context);
22
+ markdown += this.convertModule(item, context);
21
23
  }
22
24
  }
23
25
  return markdown;
24
26
  }
25
- generateFrontmatter(data, type) {
27
+ generateFrontmatter(data, type, context) {
26
28
  const slug = data.slug;
27
- return {
28
- contentType: type,
29
- title: data.title,
29
+ const { siteConfig } = context;
30
+ // Helper to format dates
31
+ const formatDate = (date) => {
32
+ if (!date)
33
+ return undefined;
34
+ const d = new Date(date);
35
+ return d.toISOString().split('T')[0];
36
+ };
37
+ // Helper to get category/type
38
+ const getCategory = () => {
39
+ if (type === 'article' && data.articleType) {
40
+ return data.articleType?.name;
41
+ }
42
+ return type.charAt(0).toUpperCase() + type.slice(1);
43
+ };
44
+ // Helper to get tags
45
+ const getTags = () => {
46
+ if ('tags' in data && data.tags) {
47
+ return data.tags.map((tag) => tag.title || tag.name || tag.slug);
48
+ }
49
+ return undefined;
50
+ };
51
+ // Helper to generate canonical URL
52
+ const getCanonicalUrl = () => {
53
+ if (!siteConfig?.canonicalBaseUrl)
54
+ return undefined;
55
+ const baseUrl = siteConfig.canonicalBaseUrl.replace(/\/$/, '');
56
+ let path = '';
57
+ if (type === 'page') {
58
+ path = context.urlCalculators.page(slug);
59
+ }
60
+ else if (type === 'article') {
61
+ const article = data;
62
+ const articleType = article.articleType?.slug || 'blog';
63
+ const primaryTag = article.tags?.[0]?.slug;
64
+ path = context.urlCalculators.article(articleType, slug, primaryTag);
65
+ }
66
+ else if (type === 'person') {
67
+ path = context.urlCalculators.person(slug);
68
+ }
69
+ else if (type === 'customType') {
70
+ path = context.urlCalculators.customType(slug);
71
+ }
72
+ else {
73
+ throw new Error(`Unsupported content type: ${type}`);
74
+ }
75
+ return `${baseUrl}${path}`;
76
+ };
77
+ // Helper to get author
78
+ const getAuthor = () => {
79
+ if (type === 'article') {
80
+ return data.author?.name;
81
+ }
82
+ if (type === 'person') {
83
+ return data.name;
84
+ }
85
+ return undefined;
86
+ };
87
+ const frontmatter = {
88
+ title: cleanMarkdownText(data.title),
89
+ description: cleanMarkdownText(data.description),
90
+ date: formatDate(data.date) || formatDate(data.lastUpdated),
91
+ author: getAuthor(),
92
+ category: getCategory(),
93
+ tags: getTags(),
94
+ canonical_url: getCanonicalUrl(),
95
+ source: siteConfig?.source,
96
+ license: siteConfig?.license,
97
+ // Keep legacy fields if needed or for internal use
30
98
  slug: slug,
31
99
  id: data.id,
32
- description: data.description,
33
- // Add more specific fields for Article if needed (date, author, etc)
34
- ...(type === 'article'
35
- ? {
36
- date: data.date,
37
- articleType: data.articleType?.name,
38
- }
39
- : {}),
100
+ contentType: type,
40
101
  };
102
+ // Clean up undefined values
103
+ for (const key of Object.keys(frontmatter)) {
104
+ if (frontmatter[key] === undefined) {
105
+ delete frontmatter[key];
106
+ }
107
+ }
108
+ return frontmatter;
41
109
  }
42
- async convertModule(item, context) {
110
+ convertModule(item, context, headingLevel = 2) {
43
111
  if (item.type === 'Component') {
44
112
  const component = item;
45
- // Use generic fallback for all components
46
- return this.convertGenericComponent(component, context);
113
+ if (component.componentType === 'Related tags') {
114
+ return '';
115
+ }
116
+ switch (component.componentType) {
117
+ case 'Person hero':
118
+ return this.convertPersonHero(component, context, headingLevel);
119
+ case 'Article hero':
120
+ return this.convertArticleHero(component, context, headingLevel);
121
+ case 'Person bio':
122
+ return this.convertPersonBio(component, context, headingLevel);
123
+ default:
124
+ return this.convertGenericComponent(component, context, headingLevel);
125
+ }
47
126
  }
48
127
  if (item.type === 'Collection') {
49
128
  const collection = item;
129
+ const lowerType = collection.collectionType.toLowerCase();
130
+ if (lowerType.includes('related articles') || lowerType.includes('related people')) {
131
+ return '';
132
+ }
133
+ if (collection.collectionType === 'Team grid') {
134
+ return this.convertTeamGrid(collection, context, headingLevel);
135
+ }
50
136
  // Use generic fallback for all collections
51
- return this.convertGenericCollection(collection, context);
137
+ return this.convertGenericCollection(collection, context, headingLevel);
52
138
  }
53
139
  return '';
54
140
  }
55
- convertGenericComponent(component, context) {
141
+ convertPersonHero(_component, context, _headingLevel = 2) {
142
+ const person = context.contentContext.pageContext?.person;
143
+ if (!person)
144
+ return '';
145
+ let md = '';
146
+ // Visual first
147
+ md += this.renderVisual(person.featuredImage);
148
+ // Job title only (Title is handled by main converter)
149
+ if (person.jobTitle) {
150
+ md += `**${cleanMarkdownText(person.jobTitle)}**\n\n`;
151
+ }
152
+ return md;
153
+ }
154
+ convertArticleHero(component, context, headingLevel = 2) {
155
+ const article = context.contentContext.pageContext?.article;
156
+ const articleType = context.contentContext.pageContext?.articleType;
157
+ const articleTypeLink = article?.articleType;
158
+ // Determine content similar to ArticleHeroComponent
159
+ const realTag = articleType?.name || articleTypeLink?.name;
160
+ // Visual: prefer component visual, fallback to article/type visual
161
+ // Note: renderVisual handles both IResponsiveVisual and IVisual
162
+ const realVisual = component.visual ||
163
+ article?.featuredImage ||
164
+ articleType?.featuredImage ||
165
+ articleTypeLink?.visual;
166
+ let md = '';
167
+ // Tag/Article Type
168
+ if (realTag) {
169
+ md += `**${cleanMarkdownText(realTag)}**\n\n`;
170
+ }
171
+ // Author/Extra info
172
+ // ArticleHeroComponent displays icon (visual), postHeading (text), additionalCopy (rich text)
173
+ if (component.icon) {
174
+ // Icon is a visual
175
+ md += this.renderVisual(component.icon);
176
+ }
177
+ if (component.postHeading) {
178
+ md += `**${cleanMarkdownText(component.postHeading)}**\n\n`;
179
+ }
180
+ if (component.additionalCopy) {
181
+ md += this.renderAdditionalCopy(component.additionalCopy, context, headingLevel + 1);
182
+ }
183
+ // Visual
184
+ md += this.renderVisual(realVisual);
185
+ return md;
186
+ }
187
+ convertPersonBio(_component, context, headingLevel = 2) {
188
+ const person = context.contentContext.pageContext?.person;
189
+ if (!person?.bio)
190
+ return '';
191
+ return `${convertRichTextToMarkdown(person.bio, context, (item) => this.convertModule(item, context, headingLevel + 1))}\n\n`;
192
+ }
193
+ convertTeamGrid(collection, context, headingLevel = 2) {
194
+ const headingPrefix = '#'.repeat(headingLevel);
195
+ let md = `${headingPrefix} ${cleanMarkdownText(collection.heading || 'Team')}\n\n`;
196
+ md += this.renderPreHeading(collection.preHeading);
197
+ md += this.renderPostHeading(collection.postHeading);
198
+ md += this.renderBody(collection.body, context, headingLevel + 1);
199
+ if (collection.contents) {
200
+ md += '\n';
201
+ const people = collection.contents.filter(isPersonLink);
202
+ for (const person of people) {
203
+ md += `- [${cleanMarkdownText(person.title)}](${person.href})\n`;
204
+ if (person.jobTitle) {
205
+ md += ` - ${cleanMarkdownText(person.jobTitle)}\n`;
206
+ }
207
+ }
208
+ md += '\n';
209
+ }
210
+ md += this.renderLinks(collection.links);
211
+ md += this.renderAdditionalCopy(collection.additionalCopy, context, headingLevel + 1);
212
+ return md;
213
+ }
214
+ convertGenericComponent(component, context, headingLevel = 2) {
56
215
  let md = '';
57
216
  // Add heading hierarchy
58
217
  if (component.heading) {
59
- md += `## ${component.heading}\n\n`;
60
- }
61
- else if (component.componentType) {
62
- // Fallback to component type if no heading, but NOT cmsLabel
63
- md += `## ${component.componentType}\n\n`;
218
+ const headingPrefix = '#'.repeat(headingLevel);
219
+ md += `${headingPrefix} ${cleanMarkdownText(component.heading)}\n\n`;
64
220
  }
65
221
  md += this.renderPreHeading(component.preHeading);
66
222
  md += this.renderPostHeading(component.postHeading);
67
- md += this.renderBody(component.body, context);
68
- md += this.renderAdditionalCopy(component.additionalCopy, context);
223
+ md += this.renderBody(component.body, context, headingLevel + 1);
224
+ md += this.renderAdditionalCopy(component.additionalCopy, context, headingLevel + 1);
69
225
  md += this.renderVisual(component.visual);
70
226
  md += this.renderLinks(component.links);
71
227
  return md;
72
228
  }
73
- async convertGenericCollection(collection, context) {
74
- let md = `## ${collection.heading || collection.collectionType || 'Collection'}\n\n`;
229
+ convertGenericCollection(collection, context, headingLevel = 2) {
230
+ let md = '';
231
+ if (collection.heading) {
232
+ const headingPrefix = '#'.repeat(headingLevel);
233
+ md += `${headingPrefix} ${cleanMarkdownText(collection.heading)}\n\n`;
234
+ }
75
235
  md += this.renderPreHeading(collection.preHeading);
76
236
  md += this.renderPostHeading(collection.postHeading);
77
- md += this.renderBody(collection.body, context);
237
+ md += this.renderBody(collection.body, context, headingLevel + 1);
78
238
  md += this.renderLinks(collection.links);
79
239
  if (collection.contents) {
80
240
  for (const item of collection.contents) {
81
241
  if (!item)
82
242
  continue;
83
- md += await this.convertModule(item, context);
243
+ md += this.convertModule(item, context, headingLevel + 1);
84
244
  }
85
245
  }
86
- md += this.renderAdditionalCopy(collection.additionalCopy, context);
246
+ md += this.renderAdditionalCopy(collection.additionalCopy, context, headingLevel + 1);
87
247
  md += this.renderVisual(collection.visual);
88
248
  return md;
89
249
  }
90
250
  renderPreHeading(preHeading) {
91
- return preHeading ? `**${preHeading}**\n\n` : '';
251
+ return preHeading ? `**${cleanMarkdownText(preHeading)}**\n\n` : '';
92
252
  }
93
253
  renderPostHeading(postHeading) {
94
- return postHeading ? `*${postHeading}*\n\n` : '';
254
+ return postHeading ? `*${cleanMarkdownText(postHeading)}*\n\n` : '';
95
255
  }
96
- // biome-ignore lint/suspicious/noExplicitAny: generic content body
97
- renderBody(body, context) {
98
- return body ? convertRichTextToMarkdown(body, context) : '';
256
+ renderBody(body, context, headingLevel = 3) {
257
+ return body
258
+ ? convertRichTextToMarkdown(body, context, (item) => this.convertModule(item, context, headingLevel))
259
+ : '';
99
260
  }
100
- // biome-ignore lint/suspicious/noExplicitAny: generic additional copy
101
- renderAdditionalCopy(additionalCopy, context) {
102
- return additionalCopy ? `\n\n${convertRichTextToMarkdown(additionalCopy, context)}` : '';
261
+ renderAdditionalCopy(additionalCopy, context, headingLevel = 3) {
262
+ return additionalCopy
263
+ ? `\n\n${convertRichTextToMarkdown(additionalCopy, context, (item) => this.convertModule(item, context, headingLevel))}`
264
+ : '';
103
265
  }
104
266
  renderVisual(visual) {
105
- const image = visual?.visual?.image;
267
+ if (!visual)
268
+ return '';
269
+ let image;
270
+ // Handle IResponsiveVisual (has .visual property)
271
+ if ('visual' in visual) {
272
+ image = visual.visual.image;
273
+ }
274
+ // Handle IVisual (is the visual object itself)
275
+ else if (visual.type === 'Visual') {
276
+ image = visual.image;
277
+ }
106
278
  if (!image)
107
279
  return '';
108
280
  const title = image.name || 'Image';
@@ -114,7 +286,7 @@ export class MarkdownConverter {
114
286
  return '';
115
287
  let md = '\n';
116
288
  for (const link of links) {
117
- md += `- [${link.text || link.name}](${link.href || '#'}) \n`;
289
+ md += `- [${cleanMarkdownText(link.text || link.name)}](${link.href || '#'}) \n`;
118
290
  }
119
291
  return `${md}\n`;
120
292
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownConverter.js","sourceRoot":"","sources":["../src/MarkdownConverter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownConverter.js","sourceRoot":"","sources":["../src/MarkdownConverter.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
- import { type ContentfulConfig } from '@se-studio/contentful-rest-api';
1
+ import { type BaseConverterContext, type ContentfulConfig, type FetchOptions } from '@se-studio/contentful-rest-api';
2
2
  import type { ContentData } from './types';
3
3
  export declare class MarkdownExporter {
4
4
  private config;
5
- private preview;
6
- constructor(config: ContentfulConfig, preview?: boolean);
7
- fetchContent(type: 'page' | 'article' | 'blogPost' | 'customType', slug: string, params?: {
5
+ private converterContext;
6
+ private fetchOptions;
7
+ constructor(config: ContentfulConfig, converterContext: BaseConverterContext, fetchOptions: FetchOptions);
8
+ fetchContent(type: 'page' | 'article' | 'blogPost' | 'customType' | 'person', slug: string, params?: {
8
9
  articleType?: string;
10
+ customType?: string;
9
11
  }): Promise<ContentData | null>;
10
- private createContext;
11
12
  }
12
13
  //# sourceMappingURL=MarkdownExporter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownExporter.d.ts","sourceRoot":"","sources":["../src/MarkdownExporter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EAMtB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAU;gBAEb,MAAM,EAAE,gBAAgB,EAAE,OAAO,UAAQ;IAK/C,YAAY,CAChB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,EACpD,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAoE9B,OAAO,CAAC,aAAa;CAetB"}
1
+ {"version":3,"file":"MarkdownExporter.d.ts","sourceRoot":"","sources":["../src/MarkdownExporter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EAKrB,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,YAAY,CAAe;gBAGjC,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,oBAAoB,EACtC,YAAY,EAAE,YAAY;IAOtB,YAAY,CAChB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,EAC/D,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACrD,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;CAkG/B"}
@@ -1,17 +1,16 @@
1
- import { contentfulArticleRest, contentfulCustomTypeRest, contentfulPageRest, createBaseConverterContext, } from '@se-studio/contentful-rest-api';
1
+ import { contentfulArticleRest, contentfulCustomTypeRest, contentfulPageRest, contentfulPersonRest, } from '@se-studio/contentful-rest-api';
2
2
  export class MarkdownExporter {
3
3
  config;
4
- preview;
5
- constructor(config, preview = false) {
4
+ converterContext;
5
+ fetchOptions;
6
+ constructor(config, converterContext, fetchOptions) {
6
7
  this.config = config;
7
- this.preview = preview;
8
+ this.converterContext = converterContext;
9
+ this.fetchOptions = fetchOptions;
8
10
  }
9
11
  async fetchContent(type, slug, params) {
10
- const context = this.createContext();
11
12
  if (type === 'page') {
12
- const response = await contentfulPageRest(context, this.config, slug, {
13
- preview: this.preview,
14
- });
13
+ const response = await contentfulPageRest(this.converterContext, this.config, slug, this.fetchOptions);
15
14
  if (!response.data)
16
15
  return null;
17
16
  const page = response.data;
@@ -28,9 +27,7 @@ export class MarkdownExporter {
28
27
  }
29
28
  if (type === 'article' || type === 'blogPost') {
30
29
  const articleType = params?.articleType || 'blog';
31
- const response = await contentfulArticleRest(context, this.config, slug, articleType, {
32
- preview: this.preview,
33
- });
30
+ const response = await contentfulArticleRest(this.converterContext, this.config, slug, articleType, this.fetchOptions);
34
31
  if (!response.data)
35
32
  return null;
36
33
  const article = response.data;
@@ -47,9 +44,7 @@ export class MarkdownExporter {
47
44
  };
48
45
  }
49
46
  if (type === 'customType') {
50
- const response = await contentfulCustomTypeRest(context, this.config, slug, {
51
- preview: this.preview,
52
- });
47
+ const response = await contentfulCustomTypeRest(this.converterContext, this.config, slug, this.fetchOptions);
53
48
  if (!response.data)
54
49
  return null;
55
50
  const customType = response.data;
@@ -64,21 +59,28 @@ export class MarkdownExporter {
64
59
  },
65
60
  };
66
61
  }
62
+ if (type === 'person') {
63
+ const customType = params?.customType;
64
+ const response = await contentfulPersonRest(this.converterContext, this.config, slug, {
65
+ customType,
66
+ ...this.fetchOptions,
67
+ });
68
+ if (!response.data)
69
+ return null;
70
+ const person = response.data;
71
+ return {
72
+ contentType: 'person',
73
+ data: person,
74
+ context: {
75
+ pageContext: {
76
+ person,
77
+ customType: person.customType,
78
+ },
79
+ current: { type: 'Person', id: person.id },
80
+ },
81
+ };
82
+ }
67
83
  return null;
68
84
  }
69
- createContext() {
70
- // Basic context for fetching - we might need to make this configurable if URL calculation differs per app
71
- // For now using simple defaults that produce relative paths
72
- const urlCalculators = {
73
- page: (slug) => `/${slug}`,
74
- pageVariant: (slug) => `/${slug}`,
75
- article: (type, slug) => `/${type}/${slug}`,
76
- articleType: (slug) => `/${slug}`,
77
- tag: (slug) => `/topics/${slug}`,
78
- person: (slug) => `/team/${slug}`,
79
- customType: (slug) => `/${slug}`,
80
- };
81
- return createBaseConverterContext(urlCalculators);
82
- }
83
85
  }
84
86
  //# sourceMappingURL=MarkdownExporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownExporter.js","sourceRoot":"","sources":["../src/MarkdownExporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownExporter.js","sourceRoot":"","sources":["../src/MarkdownExporter.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './MarkdownConverter';
2
2
  export * from './MarkdownExporter';
3
3
  export * from './types';
4
+ export * from './utils/textUtils';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './MarkdownConverter';
2
2
  export * from './MarkdownExporter';
3
3
  export * from './types';
4
+ export * from './utils/textUtils';
4
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,16 +1,19 @@
1
- import type { ContentfulConfig } from '@se-studio/contentful-rest-api';
1
+ import type { ContentfulConfig, IContentfulPerson, UrlCalculators } from '@se-studio/contentful-rest-api';
2
2
  import type { IBaseArticle, IBaseCustomType, IBasePage, IContentContext } from '@se-studio/core-data-types';
3
3
  export interface ContentData {
4
- contentType: 'page' | 'article' | 'customType';
5
- data: IBasePage | IBaseArticle | IBaseCustomType;
4
+ contentType: 'page' | 'article' | 'customType' | 'person';
5
+ data: IBasePage | IBaseArticle | IBaseCustomType | IContentfulPerson;
6
6
  context: IContentContext;
7
7
  }
8
+ export interface SiteConfig {
9
+ source: string;
10
+ license: string;
11
+ canonicalBaseUrl: string;
12
+ }
8
13
  export interface MarkdownConverterContext {
9
14
  contentContext: IContentContext;
10
15
  config: ContentfulConfig;
16
+ siteConfig: SiteConfig;
17
+ urlCalculators: UrlCalculators;
11
18
  }
12
- export interface ConverterResult {
13
- markdown: string;
14
- }
15
- export type ConverterFunction<T = any> = (data: T, context: MarkdownConverterContext) => Promise<string> | string;
16
19
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,SAAS,EACT,eAAe,EAChB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;IAC/C,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,eAAe,CAAC;IACjD,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,eAAe,CAAC;IAChC,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,GAAG,IAAI,CACvC,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,wBAAwB,KAC9B,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,SAAS,EACT,eAAe,EAChB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC1D,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,eAAe,GAAG,iBAAiB,CAAC;IACrE,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,eAAe,CAAC;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;CAChC"}
@@ -1,6 +1,7 @@
1
1
  import { type Document } from '@contentful/rich-text-types';
2
+ import type { ITyped } from '@se-studio/core-data-types';
2
3
  import type { MarkdownConverterContext } from '../types';
3
4
  export declare function convertRichTextToMarkdown(richText: Document | {
4
5
  json: Document;
5
- } | null | undefined, context: MarkdownConverterContext): string;
6
+ } | null | undefined, context: MarkdownConverterContext, renderEmbedded?: (item: ITyped) => string): string;
6
7
  //# sourceMappingURL=richTextConverter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"richTextConverter.d.ts","sourceRoot":"","sources":["../../src/utils/richTextConverter.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAKd,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAC1D,OAAO,EAAE,wBAAwB,GAChC,MAAM,CAQR"}
1
+ {"version":3,"file":"richTextConverter.d.ts","sourceRoot":"","sources":["../../src/utils/richTextConverter.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAKd,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAGzD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAC1D,OAAO,EAAE,wBAAwB,EACjC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACxC,MAAM,CAQR"}
@@ -1,20 +1,20 @@
1
1
  import { BLOCKS, INLINES, MARKS, } from '@contentful/rich-text-types';
2
- export function convertRichTextToMarkdown(richText, context) {
2
+ import { cleanMarkdownText } from './textUtils';
3
+ export function convertRichTextToMarkdown(richText, context, renderEmbedded) {
3
4
  if (!richText)
4
5
  return '';
5
6
  // Handle IContentfulRichText wrapper
6
7
  const document = 'json' in richText ? richText.json : richText;
7
8
  if (!document)
8
9
  return '';
9
- return convertNode(document, context);
10
+ return convertNode(document, context, renderEmbedded);
10
11
  }
11
- function convertNode(node, context) {
12
+ function convertNode(node, context, renderEmbedded) {
12
13
  if (node.nodeType === 'text') {
13
14
  return convertText(node);
14
15
  }
15
- const content = (node.content || [])
16
- .map((child) => convertNode(child, context))
17
- .join('');
16
+ const childContent = (node.content || []).map((child) => convertNode(child, context, renderEmbedded));
17
+ const content = childContent.join('');
18
18
  switch (node.nodeType) {
19
19
  case BLOCKS.DOCUMENT:
20
20
  return content;
@@ -48,12 +48,27 @@ function convertNode(node, context) {
48
48
  return `> ${content.replace(/\n/g, '\n> ')}\n\n`;
49
49
  case BLOCKS.HR:
50
50
  return `---\n\n`;
51
+ case BLOCKS.TABLE:
52
+ return `${childContent.join('\n')}\n\n`;
53
+ case BLOCKS.TABLE_ROW: {
54
+ const isHeaderRow = node.content.some((child) => child.nodeType === BLOCKS.TABLE_HEADER_CELL);
55
+ const rowContent = `| ${childContent.join(' | ')} |`;
56
+ if (isHeaderRow) {
57
+ const separator = childContent.map(() => '---').join(' | ');
58
+ return `${rowContent}\n| ${separator} |`;
59
+ }
60
+ return rowContent;
61
+ }
62
+ case BLOCKS.TABLE_HEADER_CELL:
63
+ case BLOCKS.TABLE_CELL: {
64
+ return content.trim().replace(/\n/g, '<br>').replace(/\|/g, '\\|');
65
+ }
51
66
  case INLINES.HYPERLINK:
52
67
  return `[${content}](${node.data.uri})`;
53
68
  case INLINES.ENTRY_HYPERLINK:
54
69
  // TODO: Resolve entry link using context if possible
55
70
  // For now, falling back to a placeholder or just the content
56
- return `[${content}](#${node.data.target?.sys?.id || 'entry-link'})`;
71
+ return `[${content}](${node.data.target?.href || 'entry-link'})`;
57
72
  case INLINES.ASSET_HYPERLINK:
58
73
  return `[${content}](${node.data.target?.fields?.file?.url || '#'})`;
59
74
  case BLOCKS.EMBEDDED_ASSET: {
@@ -62,13 +77,16 @@ function convertNode(node, context) {
62
77
  return url ? `![${title}](${url})\n\n` : '';
63
78
  }
64
79
  case BLOCKS.EMBEDDED_ENTRY:
65
- return `\n\n[Embedded Entry: ${node.data.target?.sys?.id}]\n\n`;
80
+ if (renderEmbedded && node.data.target) {
81
+ return renderEmbedded(node.data.target);
82
+ }
83
+ return `\n\n[Embedded Entry: ${node.data.target?.sys?.id || node.data.target?.id}]\n\n`;
66
84
  default:
67
85
  return content;
68
86
  }
69
87
  }
70
88
  function convertText(node) {
71
- let value = node.value;
89
+ let value = cleanMarkdownText(node.value, { collapseWhitespace: false, trim: false });
72
90
  if (node.marks) {
73
91
  node.marks.forEach((mark) => {
74
92
  switch (mark.type) {
@@ -1 +1 @@
1
- {"version":3,"file":"richTextConverter.js","sourceRoot":"","sources":["../../src/utils/richTextConverter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"richTextConverter.js","sourceRoot":"","sources":["../../src/utils/richTextConverter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ interface CleanOptions {
2
+ /**
3
+ * Replace <br> tags with a space.
4
+ * @default true
5
+ */
6
+ replaceBr?: boolean;
7
+ /**
8
+ * Collapse multiple spaces into one and trim.
9
+ * @default true
10
+ */
11
+ collapseWhitespace?: boolean;
12
+ /**
13
+ * Trim the final result.
14
+ * @default true
15
+ */
16
+ trim?: boolean;
17
+ }
18
+ /**
19
+ * Cleans text for markdown output by removing unwanted HTML and normalizing whitespace.
20
+ */
21
+ export declare function cleanMarkdownText(text: string | null | undefined, options?: CleanOptions): string;
22
+ export {};
23
+ //# sourceMappingURL=textUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textUtils.d.ts","sourceRoot":"","sources":["../../src/utils/textUtils.ts"],"names":[],"mappings":"AAEA,UAAU,YAAY;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,OAAO,GAAE,YAAiB,GACzB,MAAM,CAwBR"}
@@ -0,0 +1,25 @@
1
+ import { decode } from 'html-entities';
2
+ /**
3
+ * Cleans text for markdown output by removing unwanted HTML and normalizing whitespace.
4
+ */
5
+ export function cleanMarkdownText(text, options = {}) {
6
+ if (!text)
7
+ return '';
8
+ const { replaceBr = true, collapseWhitespace = true, trim = true } = options;
9
+ // Decode HTML entities (e.g., &nbsp; -> space)
10
+ let result = decode(text);
11
+ // Replace <br> and <br/> with space
12
+ if (replaceBr) {
13
+ result = result.replace(/<br\s*\/?>/gi, ' ');
14
+ }
15
+ // Handle newlines: replace \n with space if we are collapsing whitespace,
16
+ // otherwise just leave them if they are intended (like in body text).
17
+ if (collapseWhitespace) {
18
+ result = result.replace(/\s+/g, ' ');
19
+ }
20
+ if (trim) {
21
+ result = result.trim();
22
+ }
23
+ return result;
24
+ }
25
+ //# sourceMappingURL=textUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textUtils.js","sourceRoot":"","sources":["../../src/utils/textUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAoBvC;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAA+B,EAC/B,UAAwB,EAAE;IAE1B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,kBAAkB,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAE7E,+CAA+C;IAC/C,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE1B,oCAAoC;IACpC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,0EAA0E;IAC1E,sEAAsE;IACtE,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/markdown-renderer",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
4
4
  "description": "Markdown renderer for Contentful content",
5
5
  "repository": {
6
6
  "type": "git",
@@ -23,14 +23,15 @@
23
23
  ],
24
24
  "dependencies": {
25
25
  "@contentful/rich-text-types": "^17.2.5",
26
+ "html-entities": "^2.6.0",
26
27
  "js-yaml": "^4.1.1",
27
- "@se-studio/contentful-rest-api": "1.0.50",
28
- "@se-studio/core-data-types": "1.0.50"
28
+ "@se-studio/contentful-rest-api": "1.0.52",
29
+ "@se-studio/core-data-types": "1.0.52"
29
30
  },
30
31
  "devDependencies": {
31
32
  "@biomejs/biome": "^2.3.11",
32
33
  "@types/js-yaml": "^4.0.9",
33
- "@types/node": "^22.19.3",
34
+ "@types/node": "^22.19.5",
34
35
  "tsup": "^8.5.1",
35
36
  "typescript": "^5.9.3"
36
37
  },