From 45b114722894ec2dec2dd3e1ec20d8cb216b16f3 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 10 Mar 2018 19:27:04 -0500 Subject: [PATCH] use devalue instead of serialize-javascript - fixes #112 --- package.json | 2 +- src/middleware/index.ts | 4 ++-- .../routes/preload-values/custom-class.html | 17 +++++++++++++ test/app/routes/preload-values/set.html | 11 +++++++++ test/common/test.js | 24 +++++++++++++++++++ 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 test/app/routes/preload-values/custom-class.html create mode 100644 test/app/routes/preload-values/set.html diff --git a/package.json b/package.json index af5c5f8..d4204d9 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "chalk": "^2.3.0", "cheerio": "^1.0.0-rc.2", "chokidar": "^1.7.0", + "devalue": "^1.0.1", "glob": "^7.1.2", "mkdirp": "^0.5.1", "node-fetch": "^1.7.3", @@ -32,7 +33,6 @@ "rimraf": "^2.6.2", "sade": "^1.4.0", "sander": "^0.6.0", - "serialize-javascript": "^1.4.0", "source-map-support": "^0.5.3", "tslib": "^1.9.0", "url-parse": "^1.2.0", diff --git a/src/middleware/index.ts b/src/middleware/index.ts index 0c95bbb..ebe0db3 100644 --- a/src/middleware/index.ts +++ b/src/middleware/index.ts @@ -3,7 +3,7 @@ import * as path from 'path'; import { ClientRequest, ServerResponse } from 'http'; import mkdirp from 'mkdirp'; import rimraf from 'rimraf'; -import serialize from 'serialize-javascript'; +import devalue from 'devalue'; import { lookup } from './mime'; import { create_routes, templates, create_compilers } from 'sapper/core.js'; import { dest, dev } from '../config'; @@ -331,7 +331,7 @@ function read_json(file: string) { function try_serialize(data: any) { try { - return serialize(data); + return devalue(data); } catch (err) { return null; } diff --git a/test/app/routes/preload-values/custom-class.html b/test/app/routes/preload-values/custom-class.html new file mode 100644 index 0000000..328e335 --- /dev/null +++ b/test/app/routes/preload-values/custom-class.html @@ -0,0 +1,17 @@ +

{{foo.bar()}}

+ + \ No newline at end of file diff --git a/test/app/routes/preload-values/set.html b/test/app/routes/preload-values/set.html new file mode 100644 index 0000000..b8c0df1 --- /dev/null +++ b/test/app/routes/preload-values/set.html @@ -0,0 +1,11 @@ +

{{set.has('x')}}

+ + \ No newline at end of file diff --git a/test/common/test.js b/test/common/test.js index 40d44a6..f825e84 100644 --- a/test/common/test.js +++ b/test/common/test.js @@ -487,6 +487,30 @@ function run(env) { assert.equal(title, `I'm afraid I just blue myself`); }); }); + + it('serializes Set objects returned from preload', () => { + return nightmare.goto(`${base}/preload-values/set`) + .page.title() + .then(title => { + assert.equal(title, 'true'); + return nightmare.init().page.title(); + }) + .then(title => { + assert.equal(title, 'true'); + }); + }); + + it('bails on custom classes returned from preload', () => { + return nightmare.goto(`${base}/preload-values/custom-class`) + .page.title() + .then(title => { + assert.equal(title, '42'); + return nightmare.init().page.title(); + }) + .then(title => { + assert.equal(title, '42'); + }); + }); }); describe('headers', () => {