diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f2705b1..3406e67b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ ## Change log +### Version: 4.0.0-beta.4 +#### Date: March-04-2024 +##### New Features: +- Query implementation for containedIn and notContainedIn + +### Version: 4.0.0-beta.3 +#### Date: February-13-2024 + - Live preview support 1.0 and 2.0 + +### Version: v4.0.0-beta.2 +#### Date: February-02-2024 + - Includes adding of prepare script to build package + ### Version: 4.0.0-beta #### Date: January-15-2024 - Beta release of Typescript SDK diff --git a/package-lock.json b/package-lock.json index 9806c357..0f575d3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@contentstack/delivery-sdk", - "version": "4.0.0-beta.3", + "version": "4.0.0-beta.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@contentstack/delivery-sdk", - "version": "4.0.0-beta.3", + "version": "4.0.0-beta.4", "dependencies": { "@contentstack/core": "^1.0.1", "@contentstack/utils": "^1.3.1", diff --git a/package.json b/package.json index 4a11640d..0ad398b9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/delivery-sdk", - "version": "4.0.0-beta.3", + "version": "4.0.0-beta.4", "type": "commonjs", "main": "./dist/cjs/src/index.js", "types": "./dist/types/src/index.d.ts", diff --git a/src/lib/query.ts b/src/lib/query.ts index dd4d0eee..39640a29 100644 --- a/src/lib/query.ts +++ b/src/lib/query.ts @@ -3,7 +3,7 @@ import { BaseQuery } from './base-query'; import { BaseQueryParameters, QueryOperation, QueryOperator, TaxonomyQueryOperation } from './types'; export class Query extends BaseQuery { private _contentTypeUid?: string; - override _queryParams: { [key: string]: any} = {}; + constructor(client: AxiosInstance, uid: string, queryObj?: { [key: string]: any }) { super(); this._client = client; @@ -173,13 +173,31 @@ export class Query extends BaseQuery { * import contentstack from '@contentstack/delivery-sdk' * * const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" }); - * const query = stack.contentType("contentTypeUid").Query; + * const query = stack.contentType("contentTypeUid").Query(); * const result = containedIn('fieldUid', ['value1', 'value2']).find() * * @returns {Query} */ containedIn(key: string, value: (string | number | boolean)[]): Query { - this._queryParams[key] = value; + this._parameters[key] = { '$in': value }; + return this; + } + + /** + * @method NoContainedIn + * @memberof Query + * @description Returns the raw (JSON) query based on the filters applied on Query object. + * @example + * import contentstack from '@contentstack/delivery-sdk' + * + * const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" }); + * const query = stack.contentType("contentTypeUid").Query(); + * const result = notContainedIn('fieldUid', ['value1', 'value2']).find() + * + * @returns {Query} + */ + notContainedIn(key: string, value: (string | number | boolean)[]): Query { + this._parameters[key] = { '$nin': value }; return this; } } diff --git a/test/api/contenttype.spec.ts b/test/api/contenttype.spec.ts index 0ecac96a..8409b2fb 100644 --- a/test/api/contenttype.spec.ts +++ b/test/api/contenttype.spec.ts @@ -3,7 +3,7 @@ import { BaseContentType, BaseEntry, FindResponse } from 'src'; import { ContentType } from '../../src/lib/content-type'; import { stackInstance } from '../utils/stack-instance'; -import { TContentType, TEntry } from './types'; +import { TContentType, TEntries, TEntry } from './types'; import dotenv from 'dotenv'; dotenv.config() @@ -27,7 +27,7 @@ describe('ContentType API test cases', () => { }); }); describe('ContentType Query API test cases', () => { - it('should test for contained In', async () => { + it('should get entries which matches the fieldUid and values', async () => { const query = await makeContentType('contenttype_uid').Query().containedIn('title', ['value']).find() if (query.entries) { expect(query.entries[0]._version).toBeDefined(); @@ -36,6 +36,16 @@ describe('ContentType Query API test cases', () => { expect(query.entries[0].created_at).toBeDefined(); } }); + + it('should get entries which does not match the fieldUid and values', async () => { + const query = await makeContentType('contenttype_uid').Query().notContainedIn('title', ['test', 'test2']).find() + if (query.entries) { + expect(query.entries[0]._version).toBeDefined(); + expect(query.entries[0].title).toBeDefined(); + expect(query.entries[0].uid).toBeDefined(); + expect(query.entries[0].created_at).toBeDefined(); + } + }); }); function makeContentType(uid = ''): ContentType { const contentType = stack.ContentType(uid); diff --git a/test/unit/contenttype.spec.ts b/test/unit/contenttype.spec.ts index a97dfb20..89700f6f 100644 --- a/test/unit/contenttype.spec.ts +++ b/test/unit/contenttype.spec.ts @@ -56,8 +56,12 @@ describe('ContentType Query class', () => { beforeEach(() => { contentType = new ContentType(client, 'contentTypeUid'); }); - it('should test for contained In', () => { + it('should get entries which matches the fieldUid and values', () => { const query = contentType.Query().containedIn('fieldUID', ['value']); - expect(query._queryParams).toStrictEqual({'fieldUID': ['value']}); + expect(query._queryParams).toStrictEqual({'fieldUID': {'$in': ['value']}}); + }); + it('should get entries which does not match the fieldUid and values', () => { + const query = contentType.Query().notContainedIn('fieldUID', ['value', 'value2']); + expect(query._queryParams).toStrictEqual({'fieldUID': {'$nin': ['value', 'value2']}}); }); }); \ No newline at end of file