fastify-static
Advanced tools
Comparing version 2.6.0 to 2.7.0
@@ -27,2 +27,3 @@ // Definitions by: Jannik <https://github.com/jannikkeye> | ||
prefix?: string; | ||
prefixAvoidTrailingSlash?: boolean; | ||
serve?: boolean; | ||
@@ -29,0 +30,0 @@ decorateReply?: boolean; |
@@ -110,3 +110,8 @@ 'use strict' | ||
if (opts.prefix === undefined) opts.prefix = '/' | ||
const prefix = opts.prefix[opts.prefix.length - 1] === '/' ? opts.prefix : (opts.prefix + '/') | ||
let prefix = opts.prefix | ||
if (!opts.prefixAvoidTrailingSlash) { | ||
prefix = opts.prefix[opts.prefix.length - 1] === '/' ? opts.prefix : (opts.prefix + '/') | ||
} | ||
// Set the schema hide property if defined in opts or true by default | ||
@@ -113,0 +118,0 @@ const schema = { schema: { hide: typeof opts.schemaHide !== 'undefined' ? opts.schemaHide : true } } |
{ | ||
"name": "fastify-static", | ||
"version": "2.6.0", | ||
"version": "2.7.0", | ||
"description": "Plugin for serving static files as fast as possible.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -47,2 +47,8 @@ # fastify-static | ||
### `prefixAvoidTrailingSlash` | ||
Default: `false` | ||
If set to false prefix will get trailing "/" at the end. If set to true, prefix will not append "/" to prefix. | ||
#### `schemaHide` | ||
@@ -49,0 +55,0 @@ |
@@ -36,2 +36,150 @@ 'use strict' | ||
t.test('register /static prefixAvoidTrailingSlash', t => { | ||
t.plan(11) | ||
const pluginOptions = { | ||
root: path.join(__dirname, '/static'), | ||
prefix: '/static', | ||
prefixAvoidTrailingSlash: true | ||
} | ||
const fastify = Fastify() | ||
fastify.register(fastifyStatic, pluginOptions) | ||
t.tearDown(fastify.close.bind(fastify)) | ||
fastify.listen(0, err => { | ||
t.error(err) | ||
fastify.server.unref() | ||
t.test('/static/index.html', t => { | ||
t.plan(3 + GENERIC_RESPONSE_CHECK_COUNT) | ||
simple.concat({ | ||
method: 'GET', | ||
url: 'http://localhost:' + fastify.server.address().port + '/static/index.html' | ||
}, (err, response, body) => { | ||
t.error(err) | ||
t.strictEqual(response.statusCode, 200) | ||
t.strictEqual(body.toString(), indexContent) | ||
genericResponseChecks(t, response) | ||
}) | ||
}) | ||
t.test('/static/index.css', t => { | ||
t.plan(2 + GENERIC_RESPONSE_CHECK_COUNT) | ||
simple.concat({ | ||
method: 'GET', | ||
url: 'http://localhost:' + fastify.server.address().port + '/static/index.css' | ||
}, (err, response, body) => { | ||
t.error(err) | ||
t.strictEqual(response.statusCode, 200) | ||
genericResponseChecks(t, response) | ||
}) | ||
}) | ||
t.test('/static/', t => { | ||
t.plan(3 + GENERIC_RESPONSE_CHECK_COUNT) | ||
simple.concat({ | ||
method: 'GET', | ||
url: 'http://localhost:' + fastify.server.address().port + '/static/' | ||
}, (err, response, body) => { | ||
t.error(err) | ||
t.strictEqual(response.statusCode, 200) | ||
t.strictEqual(body.toString(), indexContent) | ||
genericResponseChecks(t, response) | ||
}) | ||
}) | ||
t.test('/static', t => { | ||
t.plan(3 + GENERIC_RESPONSE_CHECK_COUNT) | ||
simple.concat({ | ||
method: 'GET', | ||
url: 'http://localhost:' + fastify.server.address().port + '/static' | ||
}, (err, response, body) => { | ||
t.error(err) | ||
t.strictEqual(response.statusCode, 200) | ||
t.strictEqual(body.toString(), indexContent) | ||
genericResponseChecks(t, response) | ||
}) | ||
}) | ||
t.test('/static/deep/path/for/test/purpose/foo.html', t => { | ||
t.plan(3 + GENERIC_RESPONSE_CHECK_COUNT) | ||
simple.concat({ | ||
method: 'GET', | ||
url: 'http://localhost:' + fastify.server.address().port + '/static/deep/path/for/test/purpose/foo.html' | ||
}, (err, response, body) => { | ||
t.error(err) | ||
t.strictEqual(response.statusCode, 200) | ||
t.strictEqual(body.toString(), deepContent) | ||
genericResponseChecks(t, response) | ||
}) | ||
}) | ||
t.test('/static/deep/path/for/test/', t => { | ||
t.plan(3 + GENERIC_RESPONSE_CHECK_COUNT) | ||
simple.concat({ | ||
method: 'GET', | ||
url: 'http://localhost:' + fastify.server.address().port + '/static/deep/path/for/test/' | ||
}, (err, response, body) => { | ||
t.error(err) | ||
t.strictEqual(response.statusCode, 200) | ||
t.strictEqual(body.toString(), innerIndex) | ||
genericResponseChecks(t, response) | ||
}) | ||
}) | ||
t.test('/static/this/path/for/test', t => { | ||
t.plan(2 + GENERIC_ERROR_RESPONSE_CHECK_COUNT) | ||
simple.concat({ | ||
method: 'GET', | ||
url: 'http://localhost:' + fastify.server.address().port + '/static/this/path/for/test', | ||
followRedirect: false | ||
}, (err, response, body) => { | ||
t.error(err) | ||
t.strictEqual(response.statusCode, 404) | ||
genericErrorResponseChecks(t, response) | ||
}) | ||
}) | ||
t.test('/static/this/path/doesnt/exist.html', t => { | ||
t.plan(2 + GENERIC_ERROR_RESPONSE_CHECK_COUNT) | ||
simple.concat({ | ||
method: 'GET', | ||
url: 'http://localhost:' + fastify.server.address().port + '/static/this/path/doesnt/exist.html', | ||
followRedirect: false | ||
}, (err, response, body) => { | ||
t.error(err) | ||
t.strictEqual(response.statusCode, 404) | ||
genericErrorResponseChecks(t, response) | ||
}) | ||
}) | ||
t.test('/static/../index.js', t => { | ||
t.plan(2 + GENERIC_ERROR_RESPONSE_CHECK_COUNT) | ||
simple.concat({ | ||
method: 'GET', | ||
url: 'http://localhost:' + fastify.server.address().port + '/static/../index.js', | ||
followRedirect: false | ||
}, (err, response, body) => { | ||
t.error(err) | ||
t.strictEqual(response.statusCode, 403) | ||
genericErrorResponseChecks(t, response) | ||
}) | ||
}) | ||
t.test('file not exposed outside of the plugin', t => { | ||
t.plan(2) | ||
simple.concat({ | ||
method: 'GET', | ||
// foobar is in static | ||
url: 'http://localhost:' + fastify.server.address().port + '/foobar.html' | ||
}, (err, response, body) => { | ||
t.error(err) | ||
t.strictEqual(response.statusCode, 404) | ||
}) | ||
}) | ||
}) | ||
}) | ||
t.test('register /static', t => { | ||
@@ -38,0 +186,0 @@ t.plan(11) |
@@ -20,2 +20,3 @@ import * as fastify from 'fastify' | ||
prefix: '', | ||
prefixAvoidTrailingSlash: false, | ||
root: '', | ||
@@ -22,0 +23,0 @@ schemaHide: true, |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
80170
2133
151
2