@xrow/docusaurus-changelog 4.159.2 → 4.161.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/README.md CHANGED
@@ -6,6 +6,13 @@ Render a GitLab releases Atom feed in Docusaurus MDX.
6
6
  <Changelog url="https://gitlab.com/group/project/-/releases.atom">Changelog</Changelog>
7
7
  ```
8
8
 
9
+ Use the GitLab releases API when the page is served from another domain, because
10
+ GitLab enables browser CORS headers for API responses.
11
+
12
+ ```mdx
13
+ <Changelog url="https://gitlab.com/api/v4/projects/group%2Fproject/releases?per_page=10">Changelog</Changelog>
14
+ ```
15
+
9
16
  The CI Tools Docusaurus build image registers the component in Docusaurus
10
17
  `MDXComponents` automatically when the site does not provide a custom
11
18
  `src/theme/MDXComponents/index.js`.
package/index.d.ts CHANGED
@@ -15,4 +15,6 @@ export interface ChangelogProps {
15
15
 
16
16
  export function releasesFromAtomDocument(document: Document): ReleaseEntry[];
17
17
 
18
+ export function releasesFromGitLabApiResponse(releases: unknown[]): ReleaseEntry[];
19
+
18
20
  export default function Changelog(props: ChangelogProps): ReactNode;
package/index.js CHANGED
@@ -24,6 +24,30 @@ export function releasesFromAtomDocument(document) {
24
24
  }));
25
25
  }
26
26
 
27
+ function plainSummary(value) {
28
+ return (value ?? '')
29
+ .split('\n')
30
+ .map((line) => line.trim())
31
+ .find(Boolean)
32
+ ?.replace(/!\[[^\]]*]\([^)]+\)/g, '')
33
+ .replace(/\[([^\]]+)]\([^)]+\)/g, '$1')
34
+ .replace(/^[#>*\-\s]+/, '')
35
+ .trim() ?? '';
36
+ }
37
+
38
+ export function releasesFromGitLabApiResponse(releases) {
39
+ if (!Array.isArray(releases)) {
40
+ throw new Error('GitLab releases API response must be an array.');
41
+ }
42
+
43
+ return releases.map((release) => ({
44
+ title: release.name || release.tag_name || 'Untitled release',
45
+ href: release?._links?.self || release?.assets?.links?.[0]?.url || '',
46
+ updated: release.released_at || release.created_at || '',
47
+ summary: plainSummary(release.description),
48
+ }));
49
+ }
50
+
27
51
  function parseAtomFeed(text) {
28
52
  if (typeof DOMParser === 'undefined') {
29
53
  throw new Error('DOMParser is not available in this environment.');
@@ -80,12 +104,16 @@ export default function Changelog({url, children, limit = 10}) {
80
104
  if (!response.ok) {
81
105
  throw new Error(`Release feed returned HTTP ${response.status}.`);
82
106
  }
83
- return response.text();
107
+ const contentType = response.headers.get('content-type') || '';
108
+ if (contentType.includes('application/json')) {
109
+ return response.json().then(releasesFromGitLabApiResponse);
110
+ }
111
+ return response.text().then(parseAtomFeed);
84
112
  })
85
- .then((text) => {
113
+ .then((releases) => {
86
114
  setState({
87
115
  status: 'ready',
88
- releases: parseAtomFeed(text).slice(0, limit),
116
+ releases: releases.slice(0, limit),
89
117
  error: '',
90
118
  });
91
119
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xrow/docusaurus-changelog",
3
- "version": "4.159.2",
3
+ "version": "4.161.0",
4
4
  "description": "Docusaurus MDX changelog component for GitLab release Atom feeds.",
5
5
  "type": "module",
6
6
  "main": "index.js",