Skip to content

Commit 9ce7bb6

Browse files
authored
Merge pull request #68 from contentstack/fix/DX-1565
fix: added support for arrays in only and except
2 parents abcd42d + bcbc9d1 commit 9ce7bb6

File tree

5 files changed

+45
-9
lines changed

5 files changed

+45
-9
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@contentstack/delivery-sdk",
3-
"version": "4.4.2",
3+
"version": "4.4.3",
44
"type": "module",
55
"license": "MIT",
66
"main": "./dist/legacy/index.cjs",

src/lib/base-query.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,6 @@ export class BaseQuery extends Pagination {
217217
'x-cs-variant-uid': this._variants
218218
};
219219
}
220-
221220
const response = await getData(this._client, this._urlPath, getRequestOptions);
222221

223222
return response as FindResponse<T>;

src/lib/entry-queryable.ts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,16 @@ export class EntryQueryable extends BaseQuery {
1515
* @param {string} fieldUid - field uid to select
1616
* @returns {EntryQueryable} - returns EntryQueryable object for chaining method calls
1717
*/
18-
only(fieldUid: string): EntryQueryable {
19-
this._queryParams['only[BASE][]'] = fieldUid;
20-
18+
only(fieldUid: string|string[]): EntryQueryable {
19+
if (Array.isArray(fieldUid)) {
20+
let i = 0;
21+
for (const uid of fieldUid) {
22+
this._queryParams[`only[BASE][${i}]`] = uid;
23+
i++;
24+
}
25+
} else {
26+
this._queryParams["only[BASE][]"] = fieldUid;
27+
}
2128
return this;
2229
}
2330

@@ -34,8 +41,16 @@ export class EntryQueryable extends BaseQuery {
3441
* @param {string} fieldUid - field uid to exclude
3542
* @returns {EntryQueryable} - returns EntryQueryable object for chaining method calls
3643
*/
37-
except(fieldUid: string): EntryQueryable {
38-
this._queryParams['except[BASE][]'] = fieldUid;
44+
except(fieldUid: string|string[]): EntryQueryable {
45+
if (Array.isArray(fieldUid)) {
46+
let i = 0;
47+
for (const uid of fieldUid) {
48+
this._queryParams[`except[BASE][${i}]`] = uid;
49+
i++;
50+
}
51+
} else {
52+
this._queryParams["except[BASE][]"] = fieldUid;
53+
}
3954

4055
return this;
4156
}

test/api/entry-queryables.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,28 @@ describe('Query Operators API test cases', () => {
258258

259259
}
260260
});
261+
262+
it('should check for projected fields after only filter is applied', async () => {
263+
const query = makeEntries('contenttype_uid2').only(['title', 'reference'])
264+
const result = await query.find<TEntry>();
265+
if (result.entries) {
266+
expect(result.entries.length).toBeGreaterThan(0);
267+
expect(result.entries[0].reference).toBeDefined();
268+
expect(result.entries[0].title).toBeDefined();
269+
expect(result.entries[0]._version).toBeUndefined();
270+
}
271+
});
272+
273+
it('should ignore fields after except filter is applied', async () => {
274+
const query = makeEntries('contenttype_uid2').except(['title', 'reference'])
275+
const result = await query.find<TEntry>();
276+
if (result.entries) {
277+
expect(result.entries.length).toBeGreaterThan(0);
278+
expect(result.entries[0].reference).toBeUndefined();
279+
expect(result.entries[0].title).toBeUndefined();
280+
expect(result.entries[0]._version).toBeDefined();
281+
}
282+
});
261283
});
262284

263285
function makeEntries(contentTypeUid = ''): Entries {

0 commit comments

Comments
 (0)