diff --git a/src/feeds/atom/generate/index.test.ts b/src/feeds/atom/generate/index.test.ts index e3bd79a..31e7263 100644 --- a/src/feeds/atom/generate/index.test.ts +++ b/src/feeds/atom/generate/index.test.ts @@ -576,7 +576,7 @@ describe('generate', () => { updated: new Date('2023-03-15T12:00:00Z'), dc: { creator: 'John Doe', - rights: 'Copyright 2023', + rights: ['Copyright 2023'], }, sy: { updatePeriod: 'daily', diff --git a/src/feeds/atom/generate/utils.test.ts b/src/feeds/atom/generate/utils.test.ts index b43e74e..db103b8 100644 --- a/src/feeds/atom/generate/utils.test.ts +++ b/src/feeds/atom/generate/utils.test.ts @@ -967,7 +967,7 @@ describe('generateFeed', () => { updated: new Date('2023-03-15T12:00:00Z'), dc: { creator: 'Jane Smith', - rights: 'Copyright 2023', + rights: ['Copyright 2023'], }, sy: { updatePeriod: 'hourly', @@ -1005,7 +1005,7 @@ describe('generateFeed', () => { updated: new Date('2023-03-15T12:00:00Z'), dc: { creator: 'Jane Smith', - rights: 'Copyright 2023', + rights: ['Copyright 2023'], }, } const expected = { @@ -1016,7 +1016,7 @@ describe('generateFeed', () => { title: 'Feed with namespaces', updated: '2023-03-15T12:00:00.000Z', 'dc:creator': 'Jane Smith', - 'dc:rights': 'Copyright 2023', + 'dc:rights': ['Copyright 2023'], }, } diff --git a/src/feeds/atom/references/atom-ns.json b/src/feeds/atom/references/atom-ns.json index 7b9b8de..1956786 100644 --- a/src/feeds/atom/references/atom-ns.json +++ b/src/feeds/atom/references/atom-ns.json @@ -20,6 +20,7 @@ "languages": ["en-US"], "relations": ["https://example.org/related-entry"], "coverages": ["United States"], + "rights": ["Copyright 2025 Example News Organization"], "title": "Dublin Core Enhanced Entry Title", "creator": "Jack Jackson", "subject": "Article, Tutorial, Example", @@ -33,8 +34,7 @@ "source": "https://example.org/entry-source", "language": "en-US", "relation": "https://example.org/related-entry", - "coverage": "United States", - "rights": "Copyright 2025 Example News Organization" + "coverage": "United States" }, "dcterms": { "created": "2022-01-01T12:00:00.000Z", @@ -723,6 +723,7 @@ "languages": ["en-US"], "relations": ["https://example.org/related-content"], "coverages": ["Global"], + "rights": ["Copyright 2025 Example Publishing Company"], "title": "Dublin Core Enhanced Feed Title", "creator": "John Doe", "subject": "Technology, Programming, Web Development", @@ -736,8 +737,7 @@ "source": "https://example.org/original-source", "language": "en-US", "relation": "https://example.org/related-content", - "coverage": "Global", - "rights": "Copyright 2025 Example Publishing Company" + "coverage": "Global" }, "dcterms": { "created": "2022-01-01T12:00:00.000Z", diff --git a/src/feeds/rdf/references/rdf-ns.json b/src/feeds/rdf/references/rdf-ns.json index 1f1b7b4..563a7ca 100644 --- a/src/feeds/rdf/references/rdf-ns.json +++ b/src/feeds/rdf/references/rdf-ns.json @@ -23,6 +23,7 @@ "languages": ["en-US"], "relations": ["https://example.org/related-article"], "coverages": ["United States"], + "rights": ["Copyright 2025 Example News Organization"], "title": "Dublin Core Enhanced Item Title", "creator": "Jack Jackson", "subject": "Article, Tutorial, Example", @@ -36,8 +37,7 @@ "source": "https://example.org/item-source", "language": "en-US", "relation": "https://example.org/related-article", - "coverage": "United States", - "rights": "Copyright 2025 Example News Organization" + "coverage": "United States" }, "dcterms": { "created": "2022-01-01T12:00+00:00", @@ -651,6 +651,7 @@ "languages": ["en-US"], "relations": ["https://example.org/related-content"], "coverages": ["Global"], + "rights": ["Copyright 2025 Example Publishing Company"], "title": "Dublin Core Enhanced Feed Title", "creator": "John Doe", "subject": "Technology, Programming, Web Development", @@ -664,8 +665,7 @@ "source": "https://example.org/original-source", "language": "en-US", "relation": "https://example.org/related-content", - "coverage": "Global", - "rights": "Copyright 2025 Example Publishing Company" + "coverage": "Global" }, "dcterms": { "created": "2022-01-01T12:00+00:00", diff --git a/src/feeds/rss/references/rss-ns.json b/src/feeds/rss/references/rss-ns.json index b818c31..dcf2f35 100644 --- a/src/feeds/rss/references/rss-ns.json +++ b/src/feeds/rss/references/rss-ns.json @@ -24,6 +24,7 @@ "languages": ["en-US"], "relations": ["https://example.org/related-article"], "coverages": ["United States"], + "rights": ["Copyright 2025 Example News Organization"], "title": "Dublin Core Enhanced Item Title", "creator": "Jack Jackson", "subject": "Article, Tutorial, Example", @@ -37,8 +38,7 @@ "source": "https://example.org/item-source", "language": "en-US", "relation": "https://example.org/related-article", - "coverage": "United States", - "rights": "Copyright 2025 Example News Organization" + "coverage": "United States" }, "dcterms": { "created": "2022-01-01T12:00:00.000Z", @@ -955,6 +955,7 @@ "languages": ["en-US"], "relations": ["https://example.org/related-content"], "coverages": ["Global"], + "rights": ["Copyright 2025 Example Publishing Company"], "title": "Dublin Core Enhanced Feed Title", "creator": "John Doe", "subject": "Technology, Programming, Web Development", @@ -968,8 +969,7 @@ "source": "https://example.org/original-source", "language": "en-US", "relation": "https://example.org/related-content", - "coverage": "Global", - "rights": "Copyright 2025 Example Publishing Company" + "coverage": "Global" }, "dcterms": { "created": "2022-01-01T12:00:00.000Z", diff --git a/src/namespaces/dc/common/types.ts b/src/namespaces/dc/common/types.ts index 63c1e94..5f28785 100644 --- a/src/namespaces/dc/common/types.ts +++ b/src/namespaces/dc/common/types.ts @@ -17,6 +17,7 @@ export namespace DcNs { languages?: Array relations?: Array coverages?: Array + rights?: Array /** @deprecated Use `titles` (array) instead. Dublin Core fields are repeatable. */ title?: string @@ -46,8 +47,6 @@ export namespace DcNs { relation?: string /** @deprecated Use `coverages` (array) instead. Dublin Core fields are repeatable. */ coverage?: string - /** @deprecated This field type will be changed to array in the next major version of the package. Dublin Core fields are repeatable. */ - rights?: string } } // #endregion reference diff --git a/src/namespaces/dc/generate/utils.test.ts b/src/namespaces/dc/generate/utils.test.ts index ae17bdc..36c9b8e 100644 --- a/src/namespaces/dc/generate/utils.test.ts +++ b/src/namespaces/dc/generate/utils.test.ts @@ -18,7 +18,6 @@ describe('generateItemOrFeed', () => { language: 'en-US', relation: 'https://example.com/related', coverage: 'Global', - rights: 'Copyright 2023', } const expected = { 'dc:title': 'Test Title', @@ -35,7 +34,6 @@ describe('generateItemOrFeed', () => { 'dc:language': 'en-US', 'dc:relation': 'https://example.com/related', 'dc:coverage': 'Global', - 'dc:rights': 'Copyright 2023', } expect(generateItemOrFeed(value)).toEqual(expected) @@ -57,6 +55,7 @@ describe('generateItemOrFeed', () => { languages: ['en-US'], relations: ['https://example.com/related'], coverages: ['Global'], + rights: ['Copyright 2023'], } const expected = { 'dc:title': ['Test Title'], @@ -73,6 +72,7 @@ describe('generateItemOrFeed', () => { 'dc:language': ['en-US'], 'dc:relation': ['https://example.com/related'], 'dc:coverage': ['Global'], + 'dc:rights': ['Copyright 2023'], } expect(generateItemOrFeed(value)).toEqual(expected) @@ -94,6 +94,7 @@ describe('generateItemOrFeed', () => { languages: ['en-US', 'fr-FR'], relations: ['https://example.com/related', 'https://example.com/also-related'], coverages: ['Global', 'North America'], + rights: ['Copyright 2023', 'CC BY-NC-SA 4.0'], } const expected = { 'dc:title': ['Test Title', 'Alternative Title'], @@ -110,6 +111,7 @@ describe('generateItemOrFeed', () => { 'dc:language': ['en-US', 'fr-FR'], 'dc:relation': ['https://example.com/related', 'https://example.com/also-related'], 'dc:coverage': ['Global', 'North America'], + 'dc:rights': ['Copyright 2023', 'CC BY-NC-SA 4.0'], } expect(generateItemOrFeed(value)).toEqual(expected) diff --git a/src/namespaces/dc/generate/utils.ts b/src/namespaces/dc/generate/utils.ts index 5f43bac..266ff40 100644 --- a/src/namespaces/dc/generate/utils.ts +++ b/src/namespaces/dc/generate/utils.ts @@ -72,7 +72,7 @@ export const generateItemOrFeed: GenerateUtil> = (item itemOrFeed.coverage, generateCdataString, ), - 'dc:rights': generateCdataString(itemOrFeed.rights), + 'dc:rights': generateArrayOrSingular(itemOrFeed.rights, undefined, generateCdataString), } return trimObject(value) diff --git a/src/namespaces/dc/parse/utils.test.ts b/src/namespaces/dc/parse/utils.test.ts index b0288f7..a7fab89 100644 --- a/src/namespaces/dc/parse/utils.test.ts +++ b/src/namespaces/dc/parse/utils.test.ts @@ -17,6 +17,7 @@ describe('retrieveItemOrFeed', () => { languages: ['en-US'], relations: ['https://example.org/related'], coverages: ['Worldwide'], + rights: ['Copyright 2023, All rights reserved'], title: 'Sample Title', creator: 'John Doe', subject: 'Test Subject', @@ -31,7 +32,6 @@ describe('retrieveItemOrFeed', () => { language: 'en-US', relation: 'https://example.org/related', coverage: 'Worldwide', - rights: 'Copyright 2023, All rights reserved', } it('should parse complete item or feed object with all properties (with #text)', () => { @@ -132,7 +132,7 @@ describe('retrieveItemOrFeed', () => { languages: ['en-US', 'fr-FR'], relations: ['https://example.org/related', 'https://example.org/also-related'], coverages: ['Worldwide', 'North America'], - rights: 'Copyright 2023, All rights reserved', + rights: ['Copyright 2023, All rights reserved', 'Creative Commons BY-NC-SA 4.0'], } expect(retrieveItemOrFeed(value)).toEqual(expected) diff --git a/src/namespaces/dc/parse/utils.ts b/src/namespaces/dc/parse/utils.ts index 7713834..fdeaf9f 100644 --- a/src/namespaces/dc/parse/utils.ts +++ b/src/namespaces/dc/parse/utils.ts @@ -34,6 +34,7 @@ export const retrieveItemOrFeed: ParsePartialUtil> = (va languages: parseArrayOf(value['dc:language'], (value) => parseString(retrieveText(value))), relations: parseArrayOf(value['dc:relation'], (value) => parseString(retrieveText(value))), coverages: parseArrayOf(value['dc:coverage'], (value) => parseString(retrieveText(value))), + rights: parseArrayOf(value['dc:rights'], (value) => parseString(retrieveText(value))), // Deprecated fields for backward compatibility. title: parseSingularOf(value['dc:title'], (value) => parseString(retrieveText(value))), @@ -56,7 +57,6 @@ export const retrieveItemOrFeed: ParsePartialUtil> = (va language: parseSingularOf(value['dc:language'], (value) => parseString(retrieveText(value))), relation: parseSingularOf(value['dc:relation'], (value) => parseString(retrieveText(value))), coverage: parseSingularOf(value['dc:coverage'], (value) => parseString(retrieveText(value))), - rights: parseSingularOf(value['dc:rights'], (value) => parseString(retrieveText(value))), } return trimObject(itemOrFeed)