Compare commits

...

10 Commits

Author SHA1 Message Date
Rich Harris
99e5a9601c -> v0.15.7 2018-08-09 20:14:37 -04:00
Rich Harris
4c9c1dccf5 Merge pull request #350 from sveltejs/gh-344
pass response object to store getter
2018-08-09 20:13:17 -04:00
Rich Harris
2cddd5afa0 Merge pull request #345 from sveltejs/fix/redirect
Fix Preload's Redirect
2018-08-09 20:08:51 -04:00
Rich Harris
8c6a0c4773 Merge branch 'master' into gh-344 2018-08-09 20:03:37 -04:00
Rich Harris
af5063552d Merge pull request #351 from sveltejs/argh-windows
doh
2018-08-09 20:02:51 -04:00
Rich Harris
419d154794 fffffuuuuu 2018-08-09 19:53:26 -04:00
Rich Harris
abda059be5 doh 2018-08-09 19:46:09 -04:00
Rich Harris
444908cac5 pass response object to store getter - fixes #344 2018-08-08 10:57:10 -04:00
Luke Edwards
c6da26e1a0 add redirect test to root (“/“) 2018-08-06 20:29:28 -07:00
Luke Edwards
aad87857ce fix: replace leading slash in preload’s redirect 2018-08-06 20:28:28 -07:00
7 changed files with 61 additions and 10 deletions

View File

@@ -1,5 +1,10 @@
# sapper changelog
## 0.15.7
* Strip leading slash from redirects ([#291](https://github.com/sveltejs/sapper/issues/291))
* Pass `(req, res)` to store getter ([#344](https://github.com/sveltejs/sapper/issues/344))
## 0.15.6
* Fix exporting with custom basepath ([#342](https://github.com/sveltejs/sapper/pull/342))

View File

@@ -1,6 +1,6 @@
{
"name": "sapper",
"version": "0.15.6",
"version": "0.15.7",
"description": "Military-grade apps, engineered by Svelte",
"main": "dist/middleware.ts.js",
"bin": {

View File

@@ -83,7 +83,7 @@ function toIgnore(uri: string, val: any) {
export default function middleware(opts: {
manifest: Manifest,
store: (req: Req) => Store,
store: (req: Req, res: ServerResponse) => Store,
ignore?: any,
routes?: any // legacy
}) {
@@ -276,7 +276,10 @@ function get_server_route_handler(routes: ServerRoute[]) {
};
}
function get_page_handler(manifest: Manifest, store_getter: (req: Req) => Store) {
function get_page_handler(
manifest: Manifest,
store_getter: (req: Req, res: ServerResponse) => Store
) {
const output = locations.dest();
const get_chunks = dev()
@@ -326,7 +329,7 @@ function get_page_handler(manifest: Manifest, store_getter: (req: Req) => Store)
res.setHeader('Link', link);
const store = store_getter ? store_getter(req) : null;
const store = store_getter ? store_getter(req, res) : null;
let redirect: { statusCode: number, location: string };
let preload_error: { statusCode: number, message: Error | string };
@@ -336,6 +339,7 @@ function get_page_handler(manifest: Manifest, store_getter: (req: Req) => Store)
if (redirect && (redirect.statusCode !== statusCode || redirect.location !== location)) {
throw new Error(`Conflicting redirects`);
}
location = location.replace(/^\//g, ''); // leading slash (only)
redirect = { statusCode, location };
},
error: (statusCode: number, message: Error | string) => {
@@ -582,4 +586,4 @@ function escape_html(html: string) {
};
return html.replace(/["'&<>]/g, c => `&${chars[c]};`);
}
}

View File

@@ -85,11 +85,18 @@ const middlewares = [
next();
},
// set up some values for the store
(req, res, next) => {
req.hello = 'hello';
res.locals = { name: 'world' };
next();
},
sapper({
manifest,
store: () => {
store: (req, res) => {
return new Store({
title: 'Stored title'
title: `${req.hello} ${res.locals.name}`
});
},
ignore: [

View File

@@ -8,6 +8,7 @@
<a href='about'>about</a>
<a href='slow-preload'>slow preload</a>
<a href='redirect-from'>redirect</a>
<a href='redirect-root'>redirect (root)</a>
<a href='blog/nope'>broken link</a>
<a href='blog/throw-an-error'>error link</a>
<a href='credentials?creds=include'>credentials</a>

View File

@@ -0,0 +1,7 @@
<script>
export default {
preload() {
this.redirect(301, '/');
}
};
</script>

View File

@@ -107,7 +107,7 @@ function testExport({ basepath = '' }) {
'svelte-logo-192.png',
'svelte-logo-512.png',
].map(file => {
return basepath ? path.join(basepath.replace(/^\//, ''), file) : file;
return basepath ? `${basepath.replace(/^[\/\\]/, '')}/${file}` : file;
});
// Client scripts that should show up in the extraction directory.
@@ -436,6 +436,33 @@ function run({ mode, basepath = '' }) {
});
});
it('redirects on server (root)', () => {
return nightmare.goto(`${base}/redirect-root`)
.path()
.then(path => {
assert.equal(path, `${basepath}/`);
})
.then(() => nightmare.page.title())
.then(title => {
assert.equal(title, 'Great success!');
});
});
it('redirects in client (root)', () => {
return nightmare.goto(base)
.wait('[href="redirect-root"]')
.click('[href="redirect-root"]')
.wait(200)
.path()
.then(path => {
assert.equal(path, `${basepath}/`);
})
.then(() => nightmare.page.title())
.then(title => {
assert.equal(title, 'Great success!');
});
});
it('handles 4xx error on server', () => {
return nightmare.goto(`${base}/blog/nope`)
.path()
@@ -581,11 +608,11 @@ function run({ mode, basepath = '' }) {
return nightmare.goto(`${base}/store`)
.page.title()
.then(title => {
assert.equal(title, 'Stored title');
assert.equal(title, 'hello world');
return nightmare.init().page.title();
})
.then(title => {
assert.equal(title, 'Stored title');
assert.equal(title, 'hello world');
});
});