From 96c99a65cd42d77d34bced464baba8ccc1acc497 Mon Sep 17 00:00:00 2001 From: Tyler Hall Date: Tue, 10 Oct 2023 17:40:45 -0400 Subject: [PATCH] feat(port-data): add skip to queryDocuments port #609 --- packages/port-data/mod.test.ts | 89 +++++++++++++++++++++++++++++++++- packages/port-data/port.ts | 1 + 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/packages/port-data/mod.test.ts b/packages/port-data/mod.test.ts index 237c7052..faf92ca2 100644 --- a/packages/port-data/mod.test.ts +++ b/packages/port-data/mod.test.ts @@ -408,6 +408,7 @@ Deno.test('data', async (t) => { fields: ['name'], sort: ['name'], limit: 1000, + skip: 2, use_index: 'idx-name', }, }), @@ -577,6 +578,92 @@ Deno.test('data', async (t) => { }) }) + await t.step('skip', async (t) => { + await t.step('should parse to a number, if provided', async () => { + assert( + await adapter.queryDocuments({ + db: 'foo', + query: { + selector: { name: { $gt: 'mike' } }, + fields: ['name'], + sort: ['ASC' as const], + skip: 1000, + use_index: 'idx-name', + }, + }), + ) + + assert( + await adapter.queryDocuments({ + db: 'foo', + query: { + selector: { name: { $gt: 'mike' } }, + fields: ['name'], + sort: ['ASC' as const], + limit: '1000', + use_index: 'idx-name', + }, + }), + ) + + assert( + await adapter.queryDocuments({ + db: 'foo', + query: { + selector: { name: { $gt: 'mike' } }, + fields: ['name'], + sort: ['ASC' as const], + skip: ' 1000 ', + use_index: 'idx-name', + }, + }), + ) + + assert( + await adapter.queryDocuments({ + db: 'foo', + query: { + selector: { name: { $gt: 'mike' } }, + fields: ['name'], + sort: ['ASC' as const], + skip: undefined, + use_index: 'idx-name', + }, + }), + ) + }) + + await t.step('should reject the unparseable value', async () => { + await assertRejects(() => + adapter.queryDocuments({ + db: '123', + query: { + selector: { name: { $gt: 'mike' } }, + fields: ['name'], + sort: ['ASC' as const], + // @ts-ignore + skip: 'wut', + use_index: 'idx-name', + }, + }) + ) + + await assertRejects(() => + adapter.queryDocuments({ + db: '123', + query: { + selector: { name: { $gt: 'mike' } }, + fields: ['name'], + sort: ['ASC' as const], + // @ts-ignore + skip: [], + use_index: 'idx-name', + }, + }) + ) + }) + }) + await assertRejects(() => adapter.queryDocuments({ db: '123', @@ -680,11 +767,11 @@ Deno.test('data', async (t) => { ) await assertRejects(() => - // @ts-ignore adapter.indexDocuments({ db: 'foo', fields: ['name'], name: 'idx-name', + // @ts-ignore partialFilter: 123, }) ) diff --git a/packages/port-data/port.ts b/packages/port-data/port.ts index b34bd92f..9f2f1d42 100644 --- a/packages/port-data/port.ts +++ b/packages/port-data/port.ts @@ -111,6 +111,7 @@ export const port = z.object({ .union([z.array(z.string()), z.array(z.record(SortEnum))]) .optional(), limit: maybeNumber.optional(), + skip: maybeNumber.optional(), use_index: z.string().optional(), }), }),