From 2c435eeb4ea4df9475ba3ba20765060c4b637578 Mon Sep 17 00:00:00 2001
From: Jeremy
Date: Fri, 27 Jan 2017 19:01:28 -0500
Subject: [PATCH 001/418] doc(README): fix route param in custom routes (#460)
removed the :id in front of the category query param
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 1916c1aa2..1186e5b8f 100644
--- a/README.md
+++ b/README.md
@@ -304,7 +304,7 @@ Create a `routes.json` file. Pay attention to start every route with `/`.
{
"/api/": "/",
"/blog/:resource/:id/show": "/:resource/:id",
- "/blog/:category": "/posts/:id?category=:category"
+ "/blog/:category": "/posts?category=:category"
}
```
From 7ce02798782b1f69ccf69fc75b8f30ab85226adb Mon Sep 17 00:00:00 2001
From: Jacob Ward
Date: Mon, 6 Feb 2017 23:42:00 +0000
Subject: [PATCH 002/418] Fix duplicate query params error (Issue: #352) (#465)
---
src/server/router/plural.js | 4 ++++
test/server/plural.js | 8 ++++++++
2 files changed, 12 insertions(+)
diff --git a/src/server/router/plural.js b/src/server/router/plural.js
index 0c8b1173b..5ac910c36 100644
--- a/src/server/router/plural.js
+++ b/src/server/router/plural.js
@@ -92,6 +92,10 @@ module.exports = (db, name) => {
if (q) {
// Full-text search
+ if (Array.isArray(q)) {
+ q = q[0]
+ }
+
q = q.toLowerCase()
chain = chain.filter((obj) => {
diff --git a/test/server/plural.js b/test/server/plural.js
index 8e1c55f32..ca918bca6 100644
--- a/test/server/plural.js
+++ b/test/server/plural.js
@@ -198,6 +198,14 @@ describe('Server', () => {
.expect(200, done)
})
+ it('should ignore duplicate q query parameters', (done) => {
+ request(server)
+ .get('/comments?q=foo&q=bar')
+ .expect('Content-Type', /json/)
+ .expect([ db.comments[0] ])
+ .expect(200, done)
+ })
+
it('should support filtering by boolean value false', (done) => {
request(server)
.get('/comments?published=false')
From b11426b693904bf5d2b91d77fd1ca1d2841a841d Mon Sep 17 00:00:00 2001
From: typicode
Date: Tue, 7 Feb 2017 00:43:05 +0100
Subject: [PATCH 003/418] Update CHANGELOG.md
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b0090b7ab..106df07fe 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
## Unreleased
* Display custom routes on homepage
+* Fix duplicate query params error [#352](https://github.com/typicode/json-server/issues/352)
## [0.9.4][2016-12-08]
From 46c332db236a87e34006ccc5d3352068abb703b8 Mon Sep 17 00:00:00 2001
From: typicode
Date: Sat, 11 Feb 2017 00:04:01 +0100
Subject: [PATCH 004/418] Update CHANGELOG.md
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 106df07fe..adb9180d1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
# Change Log
-## Unreleased
+## [0.9.5][2016-02-11]
* Display custom routes on homepage
* Fix duplicate query params error [#352](https://github.com/typicode/json-server/issues/352)
From 697de0d121aeacf34b1408688404c3e269172829 Mon Sep 17 00:00:00 2001
From: typicode
Date: Sat, 11 Feb 2017 00:04:15 +0100
Subject: [PATCH 005/418] 0.9.5
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 428442416..1ed8f3d55 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "json-server",
- "version": "0.9.4",
+ "version": "0.9.5",
"description": "Serves JSON files through REST routes.",
"main": "./lib/server/index.js",
"bin": "./bin/index.js",
From 54e6d972fb33094a3e42046c2bd1f822e9076e69 Mon Sep 17 00:00:00 2001
From: typicode
Date: Mon, 13 Feb 2017 20:14:09 +0100
Subject: [PATCH 006/418] Update to lowdb 0.15
---
package.json | 4 ++--
src/cli/utils/load.js | 2 +-
src/server/router/index.js | 2 +-
src/server/router/plural.js | 15 ++++++++++-----
src/server/router/singular.js | 9 ++++++---
src/server/router/write.js | 6 ++++++
6 files changed, 26 insertions(+), 12 deletions(-)
create mode 100644 src/server/router/write.js
diff --git a/package.json b/package.json
index 1ed8f3d55..811a94494 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
"express": "^4.9.5",
"json-parse-helpfulerror": "^1.0.3",
"lodash": "^4.11.2",
- "lowdb": "^0.14.0",
+ "lowdb": "^0.15.0",
"method-override": "^2.1.2",
"morgan": "^1.3.1",
"object-assign": "^4.0.1",
@@ -34,7 +34,7 @@
"babel-preset-es2015": "^6.16.0",
"babel-register": "^6.16.3",
"cross-env": "^2.0.1",
- "husky": "^0.11.4",
+ "husky": "^0.13.0",
"markdown-toc": "^0.13.0",
"mkdirp": "^0.5.1",
"mocha": "^3.1.2",
diff --git a/src/cli/utils/load.js b/src/cli/utils/load.js
index e14a2a547..27d2767c4 100644
--- a/src/cli/utils/load.js
+++ b/src/cli/utils/load.js
@@ -1,7 +1,7 @@
const path = require('path')
const request = require('request')
const low = require('lowdb')
-const fileAsync = require('lowdb/lib/file-async')
+const fileAsync = require('lowdb/lib/storages/file-async')
const is = require('./is')
module.exports = function (source, cb) {
diff --git a/src/server/router/index.js b/src/server/router/index.js
index 7a7ad6eaf..1a3dd95e2 100644
--- a/src/server/router/index.js
+++ b/src/server/router/index.js
@@ -3,7 +3,7 @@ const methodOverride = require('method-override')
const _ = require('lodash')
const _db = require('underscore-db')
const low = require('lowdb')
-const fileAsync = require('lowdb/lib/file-async')
+const fileAsync = require('lowdb/lib/storages/file-async')
const bodyParser = require('../body-parser')
const validateData = require('./validate-data')
const plural = require('./plural')
diff --git a/src/server/router/plural.js b/src/server/router/plural.js
index 5ac910c36..c84143e43 100644
--- a/src/server/router/plural.js
+++ b/src/server/router/plural.js
@@ -2,6 +2,7 @@ const url = require('url')
const express = require('express')
const _ = require('lodash')
const pluralize = require('pluralize')
+const write = require('./write')
const utils = require('../utils')
module.exports = (db, name) => {
@@ -243,12 +244,14 @@ module.exports = (db, name) => {
// POST /name
function create (req, res, next) {
- const resource = db.get(name)
+ const resource = db
+ .get(name)
.insert(req.body)
.value()
res.status(201)
res.locals.data = resource
+
next()
}
@@ -293,15 +296,17 @@ module.exports = (db, name) => {
next()
}
+ const w = write(db)
+
router.route('/')
.get(list)
- .post(create)
+ .post(create, w)
router.route('/:id')
.get(show)
- .put(update)
- .patch(update)
- .delete(destroy)
+ .put(update, w)
+ .patch(update, w)
+ .delete(destroy, w)
return router
}
diff --git a/src/server/router/singular.js b/src/server/router/singular.js
index f33bbda09..34a6d2e53 100644
--- a/src/server/router/singular.js
+++ b/src/server/router/singular.js
@@ -1,4 +1,5 @@
const express = require('express')
+const write = require('./write')
module.exports = (db, name) => {
const router = express.Router()
@@ -29,11 +30,13 @@ module.exports = (db, name) => {
next()
}
+ const w = write(db)
+
router.route('/')
.get(show)
- .post(create)
- .put(update)
- .patch(update)
+ .post(create, w)
+ .put(update, w)
+ .patch(update, w)
return router
}
diff --git a/src/server/router/write.js b/src/server/router/write.js
new file mode 100644
index 000000000..19378b513
--- /dev/null
+++ b/src/server/router/write.js
@@ -0,0 +1,6 @@
+module.exports = function write (db) {
+ return (req, res, next) => {
+ db.write()
+ next()
+ }
+}
From 0827ed446675d7c64018443a52317cd7e0154b49 Mon Sep 17 00:00:00 2001
From: typicode
Date: Mon, 13 Feb 2017 20:15:09 +0100
Subject: [PATCH 007/418] Update CHANGELOG.md
---
CHANGELOG.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index adb9180d1..dda972551 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Change Log
+## Unreleased
+
+* Improve performances
+
## [0.9.5][2016-02-11]
* Display custom routes on homepage
From ffda7238dd0943791e1e4cba061b3774011845a9 Mon Sep 17 00:00:00 2001
From: Jonathan Gautheron
Date: Mon, 13 Feb 2017 20:25:10 +0100
Subject: [PATCH 008/418] Pass the link to the newly created resource in the
Location header (#473)
---
src/server/router/plural.js | 2 ++
test/server/plural.js | 1 +
2 files changed, 3 insertions(+)
diff --git a/src/server/router/plural.js b/src/server/router/plural.js
index c84143e43..138b455b8 100644
--- a/src/server/router/plural.js
+++ b/src/server/router/plural.js
@@ -249,6 +249,8 @@ module.exports = (db, name) => {
.insert(req.body)
.value()
+ res.setHeader('Access-Control-Expose-Headers', 'Location')
+ res.setHeader('Location', getFullURL(req) + '/' + resource.id)
res.status(201)
res.locals.data = resource
diff --git a/test/server/plural.js b/test/server/plural.js
index ca918bca6..3b7525314 100644
--- a/test/server/plural.js
+++ b/test/server/plural.js
@@ -506,6 +506,7 @@ describe('Server', () => {
request(server)
.post('/posts')
.send({body: 'foo', booleanValue: true, integerValue: 1})
+ .expect('Location', /3$/)
.expect('Content-Type', /json/)
.expect({id: 3, body: 'foo', booleanValue: true, integerValue: 1})
.expect(201)
From 2c6fbf35b037ddef78189e5528643e4238b44ac1 Mon Sep 17 00:00:00 2001
From: typicode
Date: Mon, 13 Feb 2017 20:42:20 +0100
Subject: [PATCH 009/418] Refactor
---
CHANGELOG.md | 5 +++--
src/server/router/get-full-url.js | 10 ++++++++++
src/server/router/plural.js | 14 +++-----------
src/server/router/singular.js | 5 +++++
test/server/plural.js | 3 ++-
5 files changed, 23 insertions(+), 14 deletions(-)
create mode 100644 src/server/router/get-full-url.js
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dda972551..004794aef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
## Unreleased
* Improve performances
+* Add `Location` header to newly created resources [#473](https://github.com/typicode/json-server/pull/473)
## [0.9.5][2016-02-11]
@@ -12,7 +13,7 @@
## [0.9.4][2016-12-08]
* Improve rewriter [#431](https://github.com/typicode/json-server/issues/431)
-* Improve watch mode [#427](https://github.com/typicode/json-server/pull/427)
+* Improve watch mode [#427](https://github.com/typicode/json-server/pull/427)
## [0.9.3][2016-12-07]
@@ -39,7 +40,7 @@
* [#363](https://github.com/typicode/json-server/issues/363) [#365](https://github.com/typicode/json-server/issues/365)
* [#374](https://github.com/typicode/json-server/issues/374)
* [#383](https://github.com/typicode/json-server/issues/383)
-* Updated dependencies and codebase to ES6
+* Updated dependencies and codebase to ES6
## [0.8.23][2016-11-03]
diff --git a/src/server/router/get-full-url.js b/src/server/router/get-full-url.js
new file mode 100644
index 000000000..19cd41b15
--- /dev/null
+++ b/src/server/router/get-full-url.js
@@ -0,0 +1,10 @@
+const url = require('url')
+
+module.exports = function getFullURL (req) {
+ const root = url.format({
+ protocol: req.protocol,
+ host: req.get('host')
+ })
+
+ return `${root}${req.originalUrl}`
+}
diff --git a/src/server/router/plural.js b/src/server/router/plural.js
index 138b455b8..309098931 100644
--- a/src/server/router/plural.js
+++ b/src/server/router/plural.js
@@ -1,8 +1,8 @@
-const url = require('url')
const express = require('express')
const _ = require('lodash')
const pluralize = require('pluralize')
const write = require('./write')
+const getFullURL = require('./get-full-url')
const utils = require('../utils')
module.exports = (db, name) => {
@@ -34,15 +34,6 @@ module.exports = (db, name) => {
})
}
- function getFullURL (req) {
- const root = url.format({
- protocol: req.protocol,
- host: req.get('host')
- })
-
- return `${root}${req.originalUrl}`
- }
-
// GET /name
// GET /name?q=
// GET /name?attr=&attr=
@@ -250,7 +241,8 @@ module.exports = (db, name) => {
.value()
res.setHeader('Access-Control-Expose-Headers', 'Location')
- res.setHeader('Location', getFullURL(req) + '/' + resource.id)
+ res.location(`${getFullURL(req)}/${resource.id}`)
+
res.status(201)
res.locals.data = resource
diff --git a/src/server/router/singular.js b/src/server/router/singular.js
index 34a6d2e53..0ef3356b1 100644
--- a/src/server/router/singular.js
+++ b/src/server/router/singular.js
@@ -1,5 +1,6 @@
const express = require('express')
const write = require('./write')
+const getFullURL = require('./get-full-url')
module.exports = (db, name) => {
const router = express.Router()
@@ -12,6 +13,10 @@ module.exports = (db, name) => {
function create (req, res, next) {
db.set(name, req.body).value()
res.locals.data = db.get(name).value()
+
+ res.setHeader('Access-Control-Expose-Headers', 'Location')
+ res.location(`${getFullURL(req)}`)
+
res.status(201)
next()
}
diff --git a/test/server/plural.js b/test/server/plural.js
index 3b7525314..5ed3386bb 100644
--- a/test/server/plural.js
+++ b/test/server/plural.js
@@ -506,7 +506,8 @@ describe('Server', () => {
request(server)
.post('/posts')
.send({body: 'foo', booleanValue: true, integerValue: 1})
- .expect('Location', /3$/)
+ .expect('Access-Control-Expose-Headers', 'Location')
+ .expect('Location', /posts\/3$/)
.expect('Content-Type', /json/)
.expect({id: 3, body: 'foo', booleanValue: true, integerValue: 1})
.expect(201)
From 4246a1cde638100c8e011d9ef6b9e095d510b46f Mon Sep 17 00:00:00 2001
From: typicode
Date: Mon, 13 Feb 2017 20:49:48 +0100
Subject: [PATCH 010/418] Update README.md
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index 1186e5b8f..1a6af6620 100644
--- a/README.md
+++ b/README.md
@@ -167,6 +167,8 @@ GET /posts/1/comments?_start=20&_end=30
GET /posts/1/comments?_start=20&_limit=10
```
+_Works exactly as [Array.slice](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) (i.e. `_start` is inclusive and `_end` exclusive)_
+
### Operators
Add `_gte` or `_lte` for getting a range
From 4e1c4c3e6eb8b2913207338ea69f6c3b26362a8a Mon Sep 17 00:00:00 2001
From: typicode
Date: Mon, 20 Feb 2017 23:08:49 +0100
Subject: [PATCH 011/418] Update README.md
---
README.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/README.md b/README.md
index 1a6af6620..d9f54b8ee 100644
--- a/README.md
+++ b/README.md
@@ -387,6 +387,10 @@ If you need to add authentication, validation, or __any behavior__, you can use
#### Simple example
+```sh
+$ npm install json-server --save-dev
+```
+
```js
// server.js
var jsonServer = require('json-server')
From fbdeb3179463faa321cef6f40db74eb8173a9e3b Mon Sep 17 00:00:00 2001
From: typicode
Date: Mon, 20 Feb 2017 23:53:54 +0100
Subject: [PATCH 012/418] Update prepublish
---
package.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 811a94494..fe1bd45b0 100644
--- a/package.json
+++ b/package.json
@@ -39,6 +39,7 @@
"mkdirp": "^0.5.1",
"mocha": "^3.1.2",
"os-tmpdir": "^1.0.1",
+ "pkg-ok": "^1.0.1",
"rimraf": "^2.5.2",
"server-ready": "^0.3.1",
"standard": "^8.3.0",
@@ -53,7 +54,7 @@
"prepush": "npm t",
"build": "babel src -d lib --copy-files",
"toc": "markdown-toc -i README.md",
- "prepublish": "npm run build"
+ "prepublish": "npm run build && pkg-ok"
},
"repository": {
"type": "git",
From 92532128da5ef7fd0bb936d84e5209db2fee8b14 Mon Sep 17 00:00:00 2001
From: typicode
Date: Mon, 20 Feb 2017 23:57:30 +0100
Subject: [PATCH 013/418] Use lodash-id
---
package.json | 2 +-
src/server/mixins.js | 2 +-
src/server/router/index.js | 6 +++---
test/server/mixins.js | 4 ++--
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/package.json b/package.json
index fe1bd45b0..41d5bd5cc 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
"express": "^4.9.5",
"json-parse-helpfulerror": "^1.0.3",
"lodash": "^4.11.2",
+ "lodash-id": "^0.13.0",
"lowdb": "^0.15.0",
"method-override": "^2.1.2",
"morgan": "^1.3.1",
@@ -25,7 +26,6 @@
"request": "^2.72.0",
"server-destroy": "^1.0.1",
"shortid": "^2.2.6",
- "underscore-db": "^0.12.2",
"update-notifier": "^1.0.2",
"yargs": "^6.0.0"
},
diff --git a/src/server/mixins.js b/src/server/mixins.js
index 1f980df73..7079efb10 100644
--- a/src/server/mixins.js
+++ b/src/server/mixins.js
@@ -34,7 +34,7 @@ function getRemovable (db) {
}
// Return incremented id or uuid
-// Used to override underscore-db's createId with utils.createId
+// Used to override lodash-id's createId with utils.createId
function createId (coll) {
const _ = this
const idProperty = _.__id()
diff --git a/src/server/router/index.js b/src/server/router/index.js
index 1a3dd95e2..272cd1fcc 100644
--- a/src/server/router/index.js
+++ b/src/server/router/index.js
@@ -1,7 +1,7 @@
const express = require('express')
const methodOverride = require('method-override')
const _ = require('lodash')
-const _db = require('underscore-db')
+const lodashId = require('lodash-id')
const low = require('lowdb')
const fileAsync = require('lowdb/lib/storages/file-async')
const bodyParser = require('../body-parser')
@@ -30,8 +30,8 @@ module.exports = (source) => {
validateData(db.getState())
- // Add underscore-db methods to db
- db._.mixin(_db)
+ // Add lodash-id methods to db
+ db._.mixin(lodashId)
// Add specific mixins
db._.mixin(mixins)
diff --git a/test/server/mixins.js b/test/server/mixins.js
index 8707fd0c0..639a27abc 100644
--- a/test/server/mixins.js
+++ b/test/server/mixins.js
@@ -1,13 +1,13 @@
const assert = require('assert')
const _ = require('lodash')
-const _db = require('underscore-db')
+const lodashId = require('lodash-id')
const mixins = require('../../src/server/mixins')
describe('mixins', () => {
let db
before(() => {
- _.mixin(_db)
+ _.mixin(lodashId)
_.mixin(mixins)
})
From 392175017fd845eff7617134c64015d5f532b57b Mon Sep 17 00:00:00 2001
From: typicode
Date: Fri, 3 Mar 2017 00:35:52 +0100
Subject: [PATCH 014/418] Refactor index.html
---
src/server/public/index.html | 33 +++--------------------------
src/server/public/main.js | 40 ++++++++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+), 30 deletions(-)
create mode 100644 src/server/public/main.js
diff --git a/src/server/public/index.html b/src/server/public/index.html
index 83a644b90..8c8470741 100644
--- a/src/server/public/index.html
+++ b/src/server/public/index.html
@@ -22,11 +22,10 @@
- Routes
Here are the resources that JSON Server has loaded:
-
+ loading, please wait...
@@ -63,33 +62,7 @@ Issues
-
-
+
+