From a7d2f1c6ed1cdc05fead9f30c5223c16a6bf23b8 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Tue, 17 Dec 2024 19:50:14 +0530 Subject: [PATCH] Added include reference support for entry UID --- CHANGELOG.md | 4 ++++ package-lock.json | 4 ++-- package.json | 2 +- src/lib/entry.ts | 27 +++++++++++++++++++++++++++ test/api/entry.spec.ts | 9 +++++++++ test/unit/entry.spec.ts | 7 +++++++ 6 files changed, 50 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e702b7..8e51f20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### Version: 4.4.4 +#### Date: January-06-2025 +Enh: Include References on Entry UID + ### Version: 4.4.3 #### Date: November-30-2024 Fix: regex method fixed for validation diff --git a/package-lock.json b/package-lock.json index 5355f11..1278de3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@contentstack/delivery-sdk", - "version": "4.4.3", + "version": "4.4.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@contentstack/delivery-sdk", - "version": "4.4.3", + "version": "4.4.4", "license": "MIT", "dependencies": { "@contentstack/core": "^1.1.3", diff --git a/package.json b/package.json index 59503ea..823c0dd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/delivery-sdk", - "version": "4.4.3", + "version": "4.4.4", "type": "module", "license": "MIT", "main": "./dist/legacy/index.cjs", diff --git a/src/lib/entry.ts b/src/lib/entry.ts index 7725f0c..c852c30 100644 --- a/src/lib/entry.ts +++ b/src/lib/entry.ts @@ -91,6 +91,33 @@ export class Entry { return this; } + /** + * @method includeReference + * @memberof Entry + * @description To include the content of the referred entry in your response, + * you need to use the include[] parameter and specify the UID of the reference field as value. + * This function sets the include parameter to a reference field UID in the API request. + * @example + * const stack = contentstack.stack("apiKey", "deliveryKey", "environment"); + * const query = stack.contentType("contentTypeUid").entry(entry_uid).includeReference("brand").fetch() + * + * @param {string} referenceFieldUid - UID of the reference field to include. + * @returns {Entry} - Returns the Entry instance for chaining. + */ + includeReference(...referenceFieldUid: (string | string[])[]): Entry { + if (referenceFieldUid.length) { + referenceFieldUid.forEach(value => { + if (!Array.isArray(this._queryParams['include[]'])) { + this._queryParams['include[]'] = []; + } + (this._queryParams['include[]'] as string[]).push(...(Array.isArray(value) ? value : [value])); + }); + } else { + console.error("Argument should be a String or an Array."); + } + return this; + } + /** * @method includeContentType * @memberof Entry diff --git a/test/api/entry.spec.ts b/test/api/entry.spec.ts index 32d4f26..c18e80f 100644 --- a/test/api/entry.spec.ts +++ b/test/api/entry.spec.ts @@ -50,6 +50,15 @@ describe('Entry API tests', () => { expect(result.created_by).toBeDefined(); expect(result.updated_by).toBeDefined(); }); + it('should check for include reference', async () => { + const result = await makeEntry(entryUid).includeReference('author').fetch(); + expect(result.title).toBeDefined(); + expect(result.author).toBeDefined(); + expect(result.title).toBeDefined(); + expect(result.url).toBeDefined(); + expect(result._version).toBeDefined(); + expect(result.publish_details).toBeDefined(); + }); }); function makeEntry(uid = ''): Entry { const entry = stack.contentType('author').entry(uid); diff --git a/test/unit/entry.spec.ts b/test/unit/entry.spec.ts index 64cf0cb..bd59669 100644 --- a/test/unit/entry.spec.ts +++ b/test/unit/entry.spec.ts @@ -37,6 +37,13 @@ describe('Entry class', () => { expect(entry._queryParams.include_fallback).toBe('true'); }); + it('should set the include parameter to the given reference field UID', () => { + const referenceFieldUid = 'referenceFieldUid'; + const returnedValue = entry.includeReference(referenceFieldUid); + expect(returnedValue).toBeInstanceOf(Entry); + expect(entry._queryParams['include[]']).toContain(referenceFieldUid); + }); + it('should add "include_metadata" in _queryParams when includeMetadata method is called', () => { const returnedValue = entry.includeMetadata(); expect(returnedValue).toBeInstanceOf(Entry);