Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@coding-blocks/jsonapi-server

Package Overview
Dependencies
Maintainers
2
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@coding-blocks/jsonapi-server - npm Package Compare versions

Comparing version 5.0.0 to 5.1.0

2

CHANGELOG.md

@@ -0,1 +1,3 @@

- 2017-11-03 - v5.1.0
- 2017-11-03 - add pagination count to relations
- 2017-11-03 - v5.0.0

@@ -2,0 +4,0 @@ - 2017-11-03 - use node >= 8

4

lib/pagination.js

@@ -19,4 +19,4 @@ 'use strict'

pagination.generateMetaSummary = (request, handlerTotal) => ({
offset: request.params.page.offset,
limit: request.params.page.limit,
offset: request.params.page && request.params.page.offset,
limit: request.params.page && request.params.page.limit,
total: handlerTotal

@@ -23,0 +23,0 @@ })

@@ -26,3 +26,3 @@ 'use strict'

if (!dataItems) return callback(null, [ null ])
if (!dataItems) return callback(null, [ null ], null)

@@ -48,2 +48,3 @@ if (!(Array.isArray(dataItems))) dataItems = [ dataItems ]

let total = null
async.map(resourcesToFetch, (related, done) => {

@@ -64,3 +65,9 @@ debug.include(related)

let data = json.data
if (json.meta && json.meta.page) {
total = (total || 0) + json.meta.page.total
}
if (!(Array.isArray(data))) data = [ data ]
return done(null, data)

@@ -71,3 +78,3 @@ })

const relatedResources = [].concat.apply([], otherResources)
return callback(null, relatedResources)
return callback(null, relatedResources, total)
})

@@ -74,0 +81,0 @@ }

@@ -10,2 +10,3 @@ 'use strict'

const responseHelper = require('../responseHelper.js')
const pagination = require('../pagination.js')

@@ -46,2 +47,6 @@ relatedRoute.register = () => {

},
function validatePaginationParams (callback) {
pagination.validatePaginationParams(request)
return callback()
},
callback => {

@@ -54,5 +59,7 @@ resourceConfig.handlers.find(request, callback)

},
(newResources, callback) => {
(newResources, total, callback) => {
relatedResources = newResources
if (relation._settings.__one) {
// if this is a hasOne, then disable pagination meta data.
total = null
relatedResources = relatedResources[0]

@@ -63,3 +70,4 @@ }

})
response = responseHelper._generateResponse(request, resourceConfig, relatedResources)
response = responseHelper._generateResponse(request, resourceConfig, relatedResources, total)
if (relatedResources !== null) {

@@ -66,0 +74,0 @@ response.included = [ ]

{
"name": "@coding-blocks/jsonapi-server",
"version": "5.0.0",
"version": "5.1.0",
"description": "A config driven NodeJS framework implementing json:api",

@@ -5,0 +5,0 @@ "keywords": [

@@ -64,2 +64,3 @@ 'use strict'

assert.equal(json.data.type, 'people', 'Should be a people resource')
assert.strictEqual(json.meta.page, undefined, 'Pagination should be undefined')

@@ -70,2 +71,44 @@ done()

it('Lookup by id for 1:m', done => {
const url = 'http://localhost:16006/rest/articles/1be0913c-3c25-4261-98f1-e41174025ed5/photos'
helpers.request({
method: 'GET',
url
}, (err, res, json) => {
assert.equal(err, null)
json = helpers.validateJson(json)
assert.equal(res.statusCode, '200', 'Expecting 200 OK')
json.data.forEach(resource => helpers.validateResource(resource))
// technically, this should be 2... but it seems that the postProcess filtering does not correctly update the "total" as it filters records.
// wondering if that should be fixed... (i.e. shouldn't totals be calculated AFTER filtering).
assert.equal(json.meta.page && json.meta.page.total, 4, 'should include pagination')
helpers.validatePagination(json)
done()
})
})
it('Lookup by id for 1:m paginated', done => {
const url = 'http://localhost:16006/rest/articles/1be0913c-3c25-4261-98f1-e41174025ed5/photos?page[limit]=1'
helpers.request({
method: 'GET',
url
}, (err, res, json) => {
assert.equal(err, null)
json = helpers.validateJson(json)
assert.equal(res.statusCode, '200', 'Expecting 200 OK')
json.data.forEach(resource => helpers.validateResource(resource))
// technically, this should be 2... but it seems that the MemoryHandler is not set up to filter correctly for these tests.
// wondering if the postProcess filter should be updating the total as it applies its filters...
// see "WARNING: Pagination count doesn't match resource count." in unit test output.
assert.equal(json.meta.page && json.meta.page.total, 4, 'should include pagination')
assert.equal(json.data.length, 1, 'only one record should be returned')
helpers.validatePagination(json)
done()
})
})
it('with null data', done => {

@@ -72,0 +115,0 @@ const url = 'http://localhost:16006/rest/comments/2f716574-cef6-4238-8285-520911af86c1/author'

@@ -97,2 +97,10 @@ 'use strict'

swaggerValidator._validateObject = (model, payload, urlPath, validationPath) => {
// added this for relation test 'with two filters on same field against has-many relation', where an array of data was
// being returned, and loop of the payload properties below was throwing because it was not finding property '0' in
// the model. As a work around, if the payload is an array, we're validating each element in the array separately.
// todo: not sure this is the right thing to do here... is the error being bypassed here a legitamate swagger validation failure?
if (payload instanceof Array) {
payload.forEach(i => swaggerValidator._validateObject(model, i, urlPath, validationPath))
return
}
if (!model.properties) return

@@ -99,0 +107,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc