diff --git a/src/utils/json-filter.js b/src/utils/json-filter.js index e7c082d8..4c69c576 100644 --- a/src/utils/json-filter.js +++ b/src/utils/json-filter.js @@ -36,12 +36,16 @@ export default function jsonFilter(state, res, query) { function filter(dataStruct) { const len = Math.min(limit, dataStruct.data.length - offset); const filtered = dataStruct.data.slice(offset, offset + len); - return { + const ret = { total: dataStruct.total, offset, limit: filtered.length, data: filtered, }; + if (dataStruct.columns) { + ret.columns = dataStruct.columns; + } + return ret; } const { data, sourceBus } = state.content; diff --git a/test/json-pipe.test.js b/test/json-pipe.test.js index a6760205..80156793 100644 --- a/test/json-pipe.test.js +++ b/test/json-pipe.test.js @@ -63,6 +63,7 @@ describe('JSON Pipe Test', () => { let TEST_DATA; let TEST_SINGLE_SHEET; let TEST_MULTI_SHEET; + const TEST_COLUMNS = ['col0', 'col1', 'col2', 'col3']; before(async () => { TEST_DATA = JSON.parse(await readFile(resolve(__testdir, 'fixtures', 'json', 'test-data.json'), 'utf-8')); @@ -71,6 +72,7 @@ describe('JSON Pipe Test', () => { limit: TEST_DATA.length, total: TEST_DATA.length, data: TEST_DATA, + columns: TEST_COLUMNS, }); TEST_MULTI_SHEET = (names = ['foo', 'bar']) => JSON.stringify( { @@ -80,6 +82,7 @@ describe('JSON Pipe Test', () => { limit: TEST_DATA.length, total: TEST_DATA.length, data: TEST_DATA, + columns: TEST_COLUMNS, }])), ), ':names': names, @@ -144,6 +147,7 @@ describe('JSON Pipe Test', () => { offset: 5, limit: 10, total: TEST_DATA.length, + columns: TEST_COLUMNS, data: TEST_DATA.slice(5, 15), }); assert.deepStrictEqual(Object.fromEntries(resp.headers.entries()), { @@ -160,6 +164,7 @@ describe('JSON Pipe Test', () => { offset: 5, limit: 10, total: TEST_DATA.length, + columns: TEST_COLUMNS, data: TEST_DATA.slice(5, 15), }); assert.deepStrictEqual(Object.fromEntries(resp.headers.entries()), { @@ -216,6 +221,7 @@ describe('JSON Pipe Test', () => { offset: 5, limit: 10, total: TEST_DATA.length, + columns: TEST_COLUMNS, data: TEST_DATA.slice(5, 15), }); assert.deepStrictEqual(Object.fromEntries(resp.headers.entries()), { @@ -234,6 +240,7 @@ describe('JSON Pipe Test', () => { offset: 5, limit: 10, total: TEST_DATA.length, + columns: TEST_COLUMNS, data: TEST_DATA.slice(5, 15), }); const headers = Object.fromEntries(resp.headers.entries()); @@ -341,6 +348,7 @@ describe('JSON Pipe Test', () => { offset: 5, limit: 10, total: TEST_DATA.length, + columns: TEST_COLUMNS, data: TEST_DATA.slice(5, 15), }); const headers = Object.fromEntries(resp.headers.entries()); @@ -373,6 +381,7 @@ describe('JSON Pipe Test', () => { offset: 5, limit: 10, total: TEST_DATA.length, + columns: TEST_COLUMNS, data: TEST_DATA.slice(5, 15), }); const headers = Object.fromEntries(resp.headers.entries()); @@ -409,6 +418,7 @@ describe('JSON Pipe Test', () => { offset: 5, limit: 10, total: TEST_DATA.length, + columns: TEST_COLUMNS, data: TEST_DATA.slice(5, 15), }); assert.deepStrictEqual(Object.fromEntries(resp.headers.entries()), { @@ -651,12 +661,14 @@ describe('JSON Pipe Test', () => { offset: 0, limit: TEST_DATA.length, total: TEST_DATA.length, + columns: TEST_COLUMNS, data: TEST_DATA, }, bar: { offset: 0, limit: TEST_DATA.length, total: TEST_DATA.length, + columns: TEST_COLUMNS, data: TEST_DATA, }, }); @@ -686,6 +698,7 @@ describe('JSON Pipe Test', () => { offset: 0, limit: TEST_DATA.length, total: TEST_DATA.length, + columns: TEST_COLUMNS, data: TEST_DATA, }, });