Uploaded the base of the project the working demo of CH1 Multiplayer Game Development with HTML5
This commit is contained in:
+75
@@ -0,0 +1,75 @@
|
||||
2.1.7 / 2014-11-19
|
||||
==================
|
||||
|
||||
* Avoid errors from enumerables on `Object.prototype`
|
||||
|
||||
2.1.6 / 2014-10-16
|
||||
==================
|
||||
|
||||
* deps: etag@~1.5.0
|
||||
|
||||
2.1.5 / 2014-09-24
|
||||
==================
|
||||
|
||||
* deps: etag@~1.4.0
|
||||
|
||||
2.1.4 / 2014-09-15
|
||||
==================
|
||||
|
||||
* Fix content headers being sent in 304 response
|
||||
* deps: etag@~1.3.1
|
||||
- Improve ETag generation speed
|
||||
|
||||
2.1.3 / 2014-09-07
|
||||
==================
|
||||
|
||||
* deps: fresh@0.2.4
|
||||
|
||||
2.1.2 / 2014-09-05
|
||||
==================
|
||||
|
||||
* deps: etag@~1.3.0
|
||||
- Improve ETag generation speed
|
||||
|
||||
2.1.1 / 2014-08-25
|
||||
==================
|
||||
|
||||
* Fix `ms` to be listed as a dependency
|
||||
|
||||
2.1.0 / 2014-08-24
|
||||
==================
|
||||
|
||||
* Accept string for `maxAge` (converted by `ms`)
|
||||
* Use `etag` to generate `ETag` header
|
||||
|
||||
2.0.1 / 2014-06-05
|
||||
==================
|
||||
|
||||
* Reduce byte size of `ETag` header
|
||||
|
||||
2.0.0 / 2014-05-02
|
||||
==================
|
||||
|
||||
* `path` argument is required; there is no default icon.
|
||||
* Accept `Buffer` of icon as first argument.
|
||||
* Non-GET and HEAD requests are denied.
|
||||
* Send valid max-age value
|
||||
* Support conditional requests
|
||||
* Support max-age=0
|
||||
* Support OPTIONS method
|
||||
* Throw if `path` argument is directory.
|
||||
|
||||
1.0.2 / 2014-03-16
|
||||
==================
|
||||
|
||||
* Fixed content of default icon.
|
||||
|
||||
1.0.1 / 2014-03-11
|
||||
==================
|
||||
|
||||
* Fixed path to default icon.
|
||||
|
||||
1.0.0 / 2014-02-15
|
||||
==================
|
||||
|
||||
* Initial release
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2010 Sencha Inc.
|
||||
Copyright (c) 2011 LearnBoost
|
||||
Copyright (c) 2011 TJ Holowaychuk
|
||||
Copyright (c) 2014 Douglas Christopher Wilson
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
# serve-favicon
|
||||
|
||||
[![NPM Version][npm-image]][npm-url]
|
||||
[![NPM Downloads][downloads-image]][downloads-url]
|
||||
[![Build Status][travis-image]][travis-url]
|
||||
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||
[![Gittip][gittip-image]][gittip-url]
|
||||
|
||||
Node.js middleware for serving a favicon.
|
||||
|
||||
Why use this module?
|
||||
|
||||
- User agents request `favicon.ico` frequently and indiscriminately, so you
|
||||
may wish to exclude these requests from your logs by using this middleware
|
||||
before your logger middleware.
|
||||
- This module caches the icon in memory to improve performance by skipping
|
||||
disk access.
|
||||
- This module provides an `ETag` based on the contents of the icon, rather
|
||||
than file system properties.
|
||||
- This module will serve with the most compatible `Content-Type`.
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
npm install serve-favicon
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### favicon(path, options)
|
||||
|
||||
Create new middleware to serve a favicon from the given `path` to a favicon file.
|
||||
`path` may also be a `Buffer` of the icon to serve.
|
||||
|
||||
#### Options
|
||||
|
||||
Serve favicon accepts these properties in the options object.
|
||||
|
||||
##### maxAge
|
||||
|
||||
The `cache-control` `max-age` directive in `ms`, defaulting to 1 day. This can
|
||||
also be a string accepted by the [ms](https://www.npmjs.org/package/ms#readme)
|
||||
module.
|
||||
|
||||
## Examples
|
||||
|
||||
Typically this middleware will come very early in your stack (maybe even first)
|
||||
to avoid processing any other middleware if we already know the request is for
|
||||
`/favicon.ico`.
|
||||
|
||||
### express
|
||||
|
||||
```javascript
|
||||
var express = require('express');
|
||||
var favicon = require('serve-favicon');
|
||||
|
||||
var app = express();
|
||||
app.use(favicon(__dirname + '/public/favicon.ico'));
|
||||
|
||||
// Add your routes here, etc.
|
||||
|
||||
app.listen(3000);
|
||||
```
|
||||
|
||||
### connect
|
||||
|
||||
```javascript
|
||||
var connect = require('connect');
|
||||
var favicon = require('serve-favicon');
|
||||
|
||||
var app = connect();
|
||||
app.use(favicon(__dirname + '/public/favicon.ico'));
|
||||
|
||||
// Add your middleware here, etc.
|
||||
|
||||
app.listen(3000);
|
||||
```
|
||||
|
||||
### vanilla http server
|
||||
|
||||
This middleware can be used anywhere, even outside express/connect. It takes
|
||||
`req`, `res`, and `callback`.
|
||||
|
||||
```javascript
|
||||
var http = require('http');
|
||||
var favicon = require('serve-favicon');
|
||||
var finalhandler = require('finalhandler');
|
||||
|
||||
var _favicon = favicon(__dirname + '/public/favicon.ico');
|
||||
|
||||
var server = http.createServer(function onRequest(req, res) {
|
||||
var done = finalhandler(req, res);
|
||||
|
||||
_favicon(req, res, function onNext(err) {
|
||||
if (err) return done(err);
|
||||
|
||||
// continue to process the request here, etc.
|
||||
|
||||
res.statusCode = 404;
|
||||
res.end('oops');
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(3000);
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
|
||||
[npm-image]: https://img.shields.io/npm/v/serve-favicon.svg?style=flat
|
||||
[npm-url]: https://npmjs.org/package/serve-favicon
|
||||
[travis-image]: https://img.shields.io/travis/expressjs/serve-favicon.svg?style=flat
|
||||
[travis-url]: https://travis-ci.org/expressjs/serve-favicon
|
||||
[coveralls-image]: https://img.shields.io/coveralls/expressjs/serve-favicon.svg?style=flat
|
||||
[coveralls-url]: https://coveralls.io/r/expressjs/serve-favicon?branch=master
|
||||
[downloads-image]: https://img.shields.io/npm/dm/serve-favicon.svg?style=flat
|
||||
[downloads-url]: https://npmjs.org/package/serve-favicon
|
||||
[gittip-image]: https://img.shields.io/gittip/dougwilson.svg?style=flat
|
||||
[gittip-url]: https://www.gittip.com/dougwilson/
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
/*!
|
||||
* serve-favicon
|
||||
* Copyright(c) 2010 Sencha Inc.
|
||||
* Copyright(c) 2011 TJ Holowaychuk
|
||||
* Copyright(c) 2014 Douglas Christopher Wilson
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
* @private
|
||||
*/
|
||||
|
||||
var etag = require('etag');
|
||||
var fresh = require('fresh');
|
||||
var fs = require('fs');
|
||||
var ms = require('ms');
|
||||
var path = require('path');
|
||||
var resolve = path.resolve;
|
||||
|
||||
/**
|
||||
* Module variables.
|
||||
* @private
|
||||
*/
|
||||
|
||||
var maxMaxAge = 60 * 60 * 24 * 365 * 1000; // 1 year
|
||||
|
||||
/**
|
||||
* Serves the favicon located by the given `path`.
|
||||
*
|
||||
* @public
|
||||
* @param {String|Buffer} path
|
||||
* @param {Object} options
|
||||
* @return {Function} middleware
|
||||
*/
|
||||
|
||||
module.exports = function favicon(path, options){
|
||||
options = options || {};
|
||||
|
||||
var buf;
|
||||
var icon; // favicon cache
|
||||
var maxAge = calcMaxAge(options.maxAge);
|
||||
var stat;
|
||||
|
||||
if (!path) throw new TypeError('path to favicon.ico is required');
|
||||
|
||||
if (Buffer.isBuffer(path)) {
|
||||
buf = new Buffer(path.length);
|
||||
path.copy(buf);
|
||||
|
||||
icon = createIcon(buf, maxAge);
|
||||
} else if (typeof path === 'string') {
|
||||
path = resolve(path);
|
||||
stat = fs.statSync(path);
|
||||
if (stat.isDirectory()) throw createIsDirError(path);
|
||||
} else {
|
||||
throw new TypeError('path to favicon.ico must be string or buffer');
|
||||
}
|
||||
|
||||
return function favicon(req, res, next){
|
||||
if ('/favicon.ico' !== req.url) return next();
|
||||
|
||||
if ('GET' !== req.method && 'HEAD' !== req.method) {
|
||||
var status = 'OPTIONS' === req.method ? 200 : 405;
|
||||
res.writeHead(status, {'Allow': 'GET, HEAD, OPTIONS'});
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
if (icon) return send(req, res, icon);
|
||||
|
||||
fs.readFile(path, function(err, buf){
|
||||
if (err) return next(err);
|
||||
icon = createIcon(buf, maxAge);
|
||||
send(req, res, icon);
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculate the max-age from a configured value.
|
||||
*
|
||||
* @private
|
||||
* @param {string|number} val
|
||||
* @return {number}
|
||||
*/
|
||||
|
||||
function calcMaxAge(val) {
|
||||
var num = typeof val === 'string'
|
||||
? ms(val)
|
||||
: val;
|
||||
|
||||
return num != null
|
||||
? Math.min(Math.max(0, num), maxMaxAge)
|
||||
: maxMaxAge
|
||||
}
|
||||
|
||||
/**
|
||||
* Create icon data from Buffer and max-age.
|
||||
*
|
||||
* @private
|
||||
* @param {Buffer} buf
|
||||
* @param {number} maxAge
|
||||
* @return {object}
|
||||
*/
|
||||
|
||||
function createIcon(buf, maxAge) {
|
||||
return {
|
||||
body: buf,
|
||||
headers: {
|
||||
'Cache-Control': 'public, max-age=' + ~~(maxAge / 1000),
|
||||
'ETag': etag(buf)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Create EISDIR error.
|
||||
*
|
||||
* @private
|
||||
* @param {string} path
|
||||
* @return {Error}
|
||||
*/
|
||||
|
||||
function createIsDirError(path) {
|
||||
var error = new Error('EISDIR, illegal operation on directory \'' + path + '\'');
|
||||
error.code = 'EISDIR';
|
||||
error.errno = 28;
|
||||
error.path = path;
|
||||
error.syscall = 'open';
|
||||
return error;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send icon data in response to a request.
|
||||
*
|
||||
* @private
|
||||
* @param {IncomingMessage} req
|
||||
* @param {OutgoingMessage} res
|
||||
* @param {object} icon
|
||||
*/
|
||||
|
||||
function send(req, res, icon) {
|
||||
var headers = icon.headers;
|
||||
|
||||
// Set headers
|
||||
var keys = Object.keys(headers);
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var key = keys[i];
|
||||
res.setHeader(key, headers[key]);
|
||||
}
|
||||
|
||||
if (fresh(req.headers, res._headers)) {
|
||||
res.statusCode = 304;
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
res.statusCode = 200;
|
||||
res.setHeader('Content-Length', icon.body.length);
|
||||
res.setHeader('Content-Type', 'image/x-icon');
|
||||
res.end(icon.body);
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
1.5.1 / 2014-11-19
|
||||
==================
|
||||
|
||||
* deps: crc@3.2.1
|
||||
- Minor fixes
|
||||
|
||||
1.5.0 / 2014-10-14
|
||||
==================
|
||||
|
||||
* Improve string performance
|
||||
* Slightly improve speed for weak ETags over 1KB
|
||||
|
||||
1.4.0 / 2014-09-21
|
||||
==================
|
||||
|
||||
* Support "fake" stats objects
|
||||
* Support Node.js 0.6
|
||||
|
||||
1.3.1 / 2014-09-14
|
||||
==================
|
||||
|
||||
* Use the (new and improved) `crc` for crc32
|
||||
|
||||
1.3.0 / 2014-08-29
|
||||
==================
|
||||
|
||||
* Default strings to strong ETags
|
||||
* Improve speed for weak ETags over 1KB
|
||||
|
||||
1.2.1 / 2014-08-29
|
||||
==================
|
||||
|
||||
* Use the (much faster) `buffer-crc32` for crc32
|
||||
|
||||
1.2.0 / 2014-08-24
|
||||
==================
|
||||
|
||||
* Add support for file stat objects
|
||||
|
||||
1.1.0 / 2014-08-24
|
||||
==================
|
||||
|
||||
* Add fast-path for empty entity
|
||||
* Add weak ETag generation
|
||||
* Shrink size of generated ETags
|
||||
|
||||
1.0.1 / 2014-08-24
|
||||
==================
|
||||
|
||||
* Fix behavior of string containing Unicode
|
||||
|
||||
1.0.0 / 2014-05-18
|
||||
==================
|
||||
|
||||
* Initial release
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 Douglas Christopher Wilson
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
# etag
|
||||
|
||||
[![NPM Version][npm-image]][npm-url]
|
||||
[![NPM Downloads][downloads-image]][downloads-url]
|
||||
[![Node.js Version][node-version-image]][node-version-url]
|
||||
[![Build Status][travis-image]][travis-url]
|
||||
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||
|
||||
Create simple ETags
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
$ npm install etag
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
```js
|
||||
var etag = require('etag')
|
||||
```
|
||||
|
||||
### etag(entity, [options])
|
||||
|
||||
Generate a strong ETag for the given entity. This should be the complete
|
||||
body of the entity. Strings, `Buffer`s, and `fs.Stats` are accepted. By
|
||||
default, a strong ETag is generated except for `fs.Stats`, which will
|
||||
generate a weak ETag (this can be overwritten by `options.weak`).
|
||||
|
||||
```js
|
||||
res.setHeader('ETag', etag(body))
|
||||
```
|
||||
|
||||
#### Options
|
||||
|
||||
`etag` accepts these properties in the options object.
|
||||
|
||||
##### weak
|
||||
|
||||
Specifies if a "strong" or a "weak" ETag will be generated. The ETag can only
|
||||
really be a strong as the given input.
|
||||
|
||||
## Testing
|
||||
|
||||
```sh
|
||||
$ npm test
|
||||
```
|
||||
|
||||
## Benchmark
|
||||
|
||||
```bash
|
||||
$ npm run-script bench
|
||||
|
||||
> etag@1.5.1 bench nodejs-etag
|
||||
> node benchmark/index.js
|
||||
|
||||
> node benchmark/body0-100b.js
|
||||
|
||||
100B body
|
||||
|
||||
1 test completed.
|
||||
2 tests completed.
|
||||
3 tests completed.
|
||||
4 tests completed.
|
||||
|
||||
buffer - strong x 425,007 ops/sec ±1.47% (184 runs sampled)
|
||||
* buffer - weak x 1,009,859 ops/sec ±0.18% (197 runs sampled)
|
||||
string - strong x 442,096 ops/sec ±1.20% (181 runs sampled)
|
||||
string - weak x 325,063 ops/sec ±0.31% (192 runs sampled)
|
||||
|
||||
> node benchmark/body1-1kb.js
|
||||
|
||||
1KB body
|
||||
|
||||
1 test completed.
|
||||
2 tests completed.
|
||||
3 tests completed.
|
||||
4 tests completed.
|
||||
|
||||
buffer - strong x 263,069 ops/sec ±1.60% (190 runs sampled)
|
||||
* buffer - weak x 295,732 ops/sec ±0.43% (199 runs sampled)
|
||||
string - strong x 274,822 ops/sec ±1.15% (191 runs sampled)
|
||||
string - weak x 169,473 ops/sec ±1.59% (194 runs sampled)
|
||||
|
||||
> node benchmark/body2-5kb.js
|
||||
|
||||
5KB body
|
||||
|
||||
1 test completed.
|
||||
2 tests completed.
|
||||
3 tests completed.
|
||||
4 tests completed.
|
||||
|
||||
buffer - strong x 104,299 ops/sec ±0.60% (193 runs sampled)
|
||||
* buffer - weak x 108,126 ops/sec ±0.65% (196 runs sampled)
|
||||
string - strong x 101,736 ops/sec ±0.78% (194 runs sampled)
|
||||
string - weak x 101,266 ops/sec ±0.85% (192 runs sampled)
|
||||
|
||||
> node benchmark/body3-10kb.js
|
||||
|
||||
10KB body
|
||||
|
||||
1 test completed.
|
||||
2 tests completed.
|
||||
3 tests completed.
|
||||
4 tests completed.
|
||||
|
||||
buffer - strong x 59,007 ops/sec ±0.29% (198 runs sampled)
|
||||
* buffer - weak x 60,968 ops/sec ±0.48% (197 runs sampled)
|
||||
string - strong x 51,873 ops/sec ±1.78% (178 runs sampled)
|
||||
string - weak x 52,307 ops/sec ±2.63% (193 runs sampled)
|
||||
|
||||
> node benchmark/body4-100kb.js
|
||||
|
||||
100KB body
|
||||
|
||||
1 test completed.
|
||||
2 tests completed.
|
||||
3 tests completed.
|
||||
4 tests completed.
|
||||
|
||||
buffer - strong x 6,712 ops/sec ±0.11% (198 runs sampled)
|
||||
* buffer - weak x 6,716 ops/sec ±0.50% (196 runs sampled)
|
||||
string - strong x 6,397 ops/sec ±0.36% (196 runs sampled)
|
||||
string - weak x 6,635 ops/sec ±0.15% (198 runs sampled)
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
|
||||
[npm-image]: https://img.shields.io/npm/v/etag.svg?style=flat
|
||||
[npm-url]: https://npmjs.org/package/etag
|
||||
[node-version-image]: https://img.shields.io/node/v/etag.svg?style=flat
|
||||
[node-version-url]: http://nodejs.org/download/
|
||||
[travis-image]: https://img.shields.io/travis/jshttp/etag.svg?style=flat
|
||||
[travis-url]: https://travis-ci.org/jshttp/etag
|
||||
[coveralls-image]: https://img.shields.io/coveralls/jshttp/etag.svg?style=flat
|
||||
[coveralls-url]: https://coveralls.io/r/jshttp/etag?branch=master
|
||||
[downloads-image]: https://img.shields.io/npm/dm/etag.svg?style=flat
|
||||
[downloads-url]: https://npmjs.org/package/etag
|
||||
+171
@@ -0,0 +1,171 @@
|
||||
/*!
|
||||
* etag
|
||||
* Copyright(c) 2014 Douglas Christopher Wilson
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/**
|
||||
* Module exports.
|
||||
*/
|
||||
|
||||
module.exports = etag
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var crc = require('crc').crc32
|
||||
var crypto = require('crypto')
|
||||
var Stats = require('fs').Stats
|
||||
|
||||
/**
|
||||
* Module variables.
|
||||
*/
|
||||
|
||||
var crc32threshold = 1000 // 1KB
|
||||
var NULL = new Buffer([0])
|
||||
var toString = Object.prototype.toString
|
||||
|
||||
/**
|
||||
* Create a simple ETag.
|
||||
*
|
||||
* @param {string|Buffer|Stats} entity
|
||||
* @param {object} [options]
|
||||
* @param {boolean} [options.weak]
|
||||
* @return {String}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function etag(entity, options) {
|
||||
if (entity == null) {
|
||||
throw new TypeError('argument entity is required')
|
||||
}
|
||||
|
||||
var isStats = isstats(entity)
|
||||
var weak = options && typeof options.weak === 'boolean'
|
||||
? options.weak
|
||||
: isStats
|
||||
|
||||
// support fs.Stats object
|
||||
if (isStats) {
|
||||
return stattag(entity, weak)
|
||||
}
|
||||
|
||||
if (typeof entity !== 'string' && !Buffer.isBuffer(entity)) {
|
||||
throw new TypeError('argument entity must be string, Buffer, or fs.Stats')
|
||||
}
|
||||
|
||||
var hash = weak
|
||||
? weakhash(entity)
|
||||
: stronghash(entity)
|
||||
|
||||
return weak
|
||||
? 'W/"' + hash + '"'
|
||||
: '"' + hash + '"'
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if object is a Stats object.
|
||||
*
|
||||
* @param {object} obj
|
||||
* @return {boolean}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function isstats(obj) {
|
||||
// not even an object
|
||||
if (obj === null || typeof obj !== 'object') {
|
||||
return false
|
||||
}
|
||||
|
||||
// genuine fs.Stats
|
||||
if (obj instanceof Stats) {
|
||||
return true
|
||||
}
|
||||
|
||||
// quack quack
|
||||
return 'atime' in obj && toString.call(obj.atime) === '[object Date]'
|
||||
&& 'ctime' in obj && toString.call(obj.ctime) === '[object Date]'
|
||||
&& 'mtime' in obj && toString.call(obj.mtime) === '[object Date]'
|
||||
&& 'ino' in obj && typeof obj.ino === 'number'
|
||||
&& 'size' in obj && typeof obj.size === 'number'
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a tag for a stat.
|
||||
*
|
||||
* @param {Buffer} entity
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function stattag(stat, weak) {
|
||||
var mtime = stat.mtime.toISOString()
|
||||
var size = stat.size.toString(16)
|
||||
|
||||
if (weak) {
|
||||
return 'W/"' + size + '-' + crc(mtime) + '"'
|
||||
}
|
||||
|
||||
var hash = crypto
|
||||
.createHash('md5')
|
||||
.update('file', 'utf8')
|
||||
.update(NULL)
|
||||
.update(size, 'utf8')
|
||||
.update(NULL)
|
||||
.update(mtime, 'utf8')
|
||||
.digest('base64')
|
||||
|
||||
return '"' + hash + '"'
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a strong hash.
|
||||
*
|
||||
* @param {Buffer} entity
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function stronghash(entity) {
|
||||
if (entity.length === 0) {
|
||||
// fast-path empty
|
||||
return '1B2M2Y8AsgTpgAmY7PhCfg=='
|
||||
}
|
||||
|
||||
return crypto
|
||||
.createHash('md5')
|
||||
.update(entity, 'utf8')
|
||||
.digest('base64')
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a weak hash.
|
||||
*
|
||||
* @param {Buffer} entity
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function weakhash(entity) {
|
||||
if (entity.length === 0) {
|
||||
// fast-path empty
|
||||
return '0-0'
|
||||
}
|
||||
|
||||
var len = typeof entity === 'string'
|
||||
? Buffer.byteLength(entity, 'utf8')
|
||||
: entity.length
|
||||
|
||||
if (len <= crc32threshold) {
|
||||
// crc32 plus length when it's fast
|
||||
// crc(str) only accepts utf-8 encoding
|
||||
return len.toString(16) + '-' + crc(entity).toString(16)
|
||||
}
|
||||
|
||||
// use md4 for long strings
|
||||
return crypto
|
||||
.createHash('md4')
|
||||
.update(entity, 'utf8')
|
||||
.digest('base64')
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
benchmark
|
||||
src
|
||||
test
|
||||
.travis.yml
|
||||
bitcoin.png
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright 2014 Alex Gorbatchev
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
# crc
|
||||
|
||||
[](https://www.gittip.com/alexgorbatchev/)
|
||||
[](https://david-dm.org/alexgorbatchev/node-crc)
|
||||
[](https://david-dm.org/alexgorbatchev/node-crc#info=devDependencies)
|
||||
[](https://travis-ci.org/alexgorbatchev/node-crc)
|
||||
|
||||
[](https://npmjs.org/package/node-crc)
|
||||
|
||||
Module for calculating Cyclic Redundancy Check (CRC).
|
||||
|
||||
## Features
|
||||
|
||||
* Full test suite comparing values against reference `pycrc` implementation.
|
||||
* Version 3.x is 3x to 4x faster than version 2.x.
|
||||
* Pure JavaScript implementation, no dependencies.
|
||||
* Provides CRC Tables for optimized calculations.
|
||||
* Provides support for the following CRC algorithms:
|
||||
* CRC1 `crc.crc1(…)`
|
||||
* CRC8 `crc.crc8(…)`
|
||||
* CRC8 1-Wire `crc.crc81wire(…)`
|
||||
* CRC16 `crc.crc16(…)`
|
||||
* CRC16 CCITT `crc.crc16ccitt(…)`
|
||||
* CRC16 Modbus `crc.crc16modbus(…)`
|
||||
* CRC24 `crc.crc24(…)`
|
||||
* CRC32 `crc.crc32(…)`
|
||||
|
||||
## IMPORTANT
|
||||
|
||||
If you've used `crc` module prior to version 2.x, you might have some inconsistentcies with the current implementation because it relied on very old code and wasn't checked against reference implementation. If you upgrading from 1.x, please take special care.
|
||||
|
||||
## Support
|
||||
|
||||
<a href="https://blockchain.info/address/1CZyBREeHTmy8C5zVGHZHPwqBuWFmEuUCQ"><img src="bitcoin.png" width="150" align="right"/></a> Please support me on [GitTip](https://www.gittip.com/alexgorbatchev/). I've spend days developing and grooming this module and hope to spend more time. If you have bitcoin, please use the QR code or this wallet address [`1CZyBREeHTmy8C5zVGHZHPwqBuWFmEuUCQ`](https://blockchain.info/address/1CZyBREeHTmy8C5zVGHZHPwqBuWFmEuUCQ):
|
||||
|
||||
## Installation
|
||||
|
||||
npm install crc
|
||||
|
||||
## Running tests
|
||||
|
||||
$ npm install
|
||||
$ npm test
|
||||
|
||||
## Usage Example
|
||||
|
||||
Calculate a CRC32:
|
||||
|
||||
var crc = require('crc');
|
||||
|
||||
crc.crc32('hello').toString(16);
|
||||
# => "3610a686"
|
||||
|
||||
Calculate a CRC32 of a file:
|
||||
|
||||
crc.crc32(fs.readFileSync('README.md', 'utf8')).toString(16);
|
||||
# => "127ad531"
|
||||
|
||||
Or using a `Buffer`:
|
||||
|
||||
crc.crc32(fs.readFileSync('README.md')).toString(16);
|
||||
# => "127ad531"
|
||||
|
||||
Incrementally calculate a CRC32:
|
||||
|
||||
value = crc32('one');
|
||||
value = crc32('two', value);
|
||||
value = crc32('three', value);
|
||||
value.toString(16);
|
||||
# => "09e1c092"
|
||||
|
||||
## Thanks!
|
||||
|
||||
[pycrc](http://www.tty1.net/pycrc/) library is which the source of all of the CRC tables.
|
||||
|
||||
# License
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Alex Gorbatchev
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
var CRC, hex;
|
||||
|
||||
hex = require('./hex');
|
||||
|
||||
module.exports = CRC = (function() {
|
||||
CRC.prototype.INIT_CRC = 0x00;
|
||||
|
||||
CRC.prototype.XOR_MASK = 0x00;
|
||||
|
||||
CRC.prototype.WIDTH = 0;
|
||||
|
||||
CRC.prototype.pack = function(crc) {
|
||||
return '';
|
||||
};
|
||||
|
||||
CRC.prototype.each_byte = function(buf, cb) {
|
||||
var i, _i, _ref, _results;
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
buf = Buffer(buf);
|
||||
}
|
||||
_results = [];
|
||||
for (i = _i = 0, _ref = buf.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {
|
||||
_results.push(cb(buf[i]));
|
||||
}
|
||||
return _results;
|
||||
};
|
||||
|
||||
function CRC() {
|
||||
this.crc = this.INIT_CRC;
|
||||
}
|
||||
|
||||
CRC.prototype.digest_length = function() {
|
||||
return Math.ceil(this.WIDTH / 8.0);
|
||||
};
|
||||
|
||||
CRC.prototype.update = function(data) {};
|
||||
|
||||
CRC.prototype.reset = function() {
|
||||
return this.crc = this.INIT_CRC;
|
||||
};
|
||||
|
||||
CRC.prototype.checksum = function(signed) {
|
||||
var sum;
|
||||
if (signed == null) {
|
||||
signed = true;
|
||||
}
|
||||
sum = this.crc ^ this.XOR_MASK;
|
||||
if (signed) {
|
||||
sum = sum >>> 0;
|
||||
}
|
||||
return sum;
|
||||
};
|
||||
|
||||
CRC.prototype.finish = function() {
|
||||
return this.pack(this.checksum());
|
||||
};
|
||||
|
||||
CRC.prototype.hexdigest = function(value) {
|
||||
var result;
|
||||
if (value != null) {
|
||||
this.update(value);
|
||||
}
|
||||
result = this.finish();
|
||||
this.reset();
|
||||
return result;
|
||||
};
|
||||
|
||||
return CRC;
|
||||
|
||||
})();
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
var Buffer, create;
|
||||
|
||||
Buffer = require('buffer').Buffer;
|
||||
|
||||
create = require('./create');
|
||||
|
||||
module.exports = create('crc1', function(buf, previous) {
|
||||
var accum, byte, crc, _i, _len;
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
buf = Buffer(buf);
|
||||
}
|
||||
crc = ~~previous;
|
||||
accum = 0;
|
||||
for (_i = 0, _len = buf.length; _i < _len; _i++) {
|
||||
byte = buf[_i];
|
||||
accum += byte;
|
||||
}
|
||||
crc += accum % 256;
|
||||
return crc % 256;
|
||||
});
|
||||
Generated
Vendored
+25
@@ -0,0 +1,25 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
var Buffer, TABLE, create;
|
||||
|
||||
Buffer = require('buffer').Buffer;
|
||||
|
||||
create = require('./create');
|
||||
|
||||
TABLE = [0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040];
|
||||
|
||||
if (typeof Int32Array !== 'undefined') {
|
||||
TABLE = new Int32Array(TABLE);
|
||||
}
|
||||
|
||||
module.exports = create('crc-16', function(buf, previous) {
|
||||
var byte, crc, _i, _len;
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
buf = Buffer(buf);
|
||||
}
|
||||
crc = ~~previous;
|
||||
for (_i = 0, _len = buf.length; _i < _len; _i++) {
|
||||
byte = buf[_i];
|
||||
crc = (TABLE[(crc ^ byte) & 0xff] ^ (crc >> 8)) & 0xffff;
|
||||
}
|
||||
return crc;
|
||||
});
|
||||
Generated
Vendored
+25
@@ -0,0 +1,25 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
var Buffer, TABLE, create;
|
||||
|
||||
Buffer = require('buffer').Buffer;
|
||||
|
||||
create = require('./create');
|
||||
|
||||
TABLE = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0];
|
||||
|
||||
if (typeof Int32Array !== 'undefined') {
|
||||
TABLE = new Int32Array(TABLE);
|
||||
}
|
||||
|
||||
module.exports = create('ccitt', function(buf, previous) {
|
||||
var byte, crc, _i, _len;
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
buf = Buffer(buf);
|
||||
}
|
||||
crc = previous != null ? ~~previous : 0xffff;
|
||||
for (_i = 0, _len = buf.length; _i < _len; _i++) {
|
||||
byte = buf[_i];
|
||||
crc = (TABLE[((crc >> 8) ^ byte) & 0xff] ^ (crc << 8)) & 0xffff;
|
||||
}
|
||||
return crc;
|
||||
});
|
||||
Generated
Vendored
+25
@@ -0,0 +1,25 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
var Buffer, TABLE, create;
|
||||
|
||||
Buffer = require('buffer').Buffer;
|
||||
|
||||
create = require('./create');
|
||||
|
||||
TABLE = [0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040];
|
||||
|
||||
if (typeof Int32Array !== 'undefined') {
|
||||
TABLE = new Int32Array(TABLE);
|
||||
}
|
||||
|
||||
module.exports = create('crc-16-modbus', function(buf, previous) {
|
||||
var byte, crc, _i, _len;
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
buf = Buffer(buf);
|
||||
}
|
||||
crc = previous != null ? ~~previous : 0xffff;
|
||||
for (_i = 0, _len = buf.length; _i < _len; _i++) {
|
||||
byte = buf[_i];
|
||||
crc = (TABLE[(crc ^ byte) & 0xff] ^ (crc >> 8)) & 0xffff;
|
||||
}
|
||||
return crc;
|
||||
});
|
||||
Generated
Vendored
+25
@@ -0,0 +1,25 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
var Buffer, TABLE, create;
|
||||
|
||||
Buffer = require('buffer').Buffer;
|
||||
|
||||
create = require('./create');
|
||||
|
||||
TABLE = [0x000000, 0x864cfb, 0x8ad50d, 0x0c99f6, 0x93e6e1, 0x15aa1a, 0x1933ec, 0x9f7f17, 0xa18139, 0x27cdc2, 0x2b5434, 0xad18cf, 0x3267d8, 0xb42b23, 0xb8b2d5, 0x3efe2e, 0xc54e89, 0x430272, 0x4f9b84, 0xc9d77f, 0x56a868, 0xd0e493, 0xdc7d65, 0x5a319e, 0x64cfb0, 0xe2834b, 0xee1abd, 0x685646, 0xf72951, 0x7165aa, 0x7dfc5c, 0xfbb0a7, 0x0cd1e9, 0x8a9d12, 0x8604e4, 0x00481f, 0x9f3708, 0x197bf3, 0x15e205, 0x93aefe, 0xad50d0, 0x2b1c2b, 0x2785dd, 0xa1c926, 0x3eb631, 0xb8faca, 0xb4633c, 0x322fc7, 0xc99f60, 0x4fd39b, 0x434a6d, 0xc50696, 0x5a7981, 0xdc357a, 0xd0ac8c, 0x56e077, 0x681e59, 0xee52a2, 0xe2cb54, 0x6487af, 0xfbf8b8, 0x7db443, 0x712db5, 0xf7614e, 0x19a3d2, 0x9fef29, 0x9376df, 0x153a24, 0x8a4533, 0x0c09c8, 0x00903e, 0x86dcc5, 0xb822eb, 0x3e6e10, 0x32f7e6, 0xb4bb1d, 0x2bc40a, 0xad88f1, 0xa11107, 0x275dfc, 0xdced5b, 0x5aa1a0, 0x563856, 0xd074ad, 0x4f0bba, 0xc94741, 0xc5deb7, 0x43924c, 0x7d6c62, 0xfb2099, 0xf7b96f, 0x71f594, 0xee8a83, 0x68c678, 0x645f8e, 0xe21375, 0x15723b, 0x933ec0, 0x9fa736, 0x19ebcd, 0x8694da, 0x00d821, 0x0c41d7, 0x8a0d2c, 0xb4f302, 0x32bff9, 0x3e260f, 0xb86af4, 0x2715e3, 0xa15918, 0xadc0ee, 0x2b8c15, 0xd03cb2, 0x567049, 0x5ae9bf, 0xdca544, 0x43da53, 0xc596a8, 0xc90f5e, 0x4f43a5, 0x71bd8b, 0xf7f170, 0xfb6886, 0x7d247d, 0xe25b6a, 0x641791, 0x688e67, 0xeec29c, 0x3347a4, 0xb50b5f, 0xb992a9, 0x3fde52, 0xa0a145, 0x26edbe, 0x2a7448, 0xac38b3, 0x92c69d, 0x148a66, 0x181390, 0x9e5f6b, 0x01207c, 0x876c87, 0x8bf571, 0x0db98a, 0xf6092d, 0x7045d6, 0x7cdc20, 0xfa90db, 0x65efcc, 0xe3a337, 0xef3ac1, 0x69763a, 0x578814, 0xd1c4ef, 0xdd5d19, 0x5b11e2, 0xc46ef5, 0x42220e, 0x4ebbf8, 0xc8f703, 0x3f964d, 0xb9dab6, 0xb54340, 0x330fbb, 0xac70ac, 0x2a3c57, 0x26a5a1, 0xa0e95a, 0x9e1774, 0x185b8f, 0x14c279, 0x928e82, 0x0df195, 0x8bbd6e, 0x872498, 0x016863, 0xfad8c4, 0x7c943f, 0x700dc9, 0xf64132, 0x693e25, 0xef72de, 0xe3eb28, 0x65a7d3, 0x5b59fd, 0xdd1506, 0xd18cf0, 0x57c00b, 0xc8bf1c, 0x4ef3e7, 0x426a11, 0xc426ea, 0x2ae476, 0xaca88d, 0xa0317b, 0x267d80, 0xb90297, 0x3f4e6c, 0x33d79a, 0xb59b61, 0x8b654f, 0x0d29b4, 0x01b042, 0x87fcb9, 0x1883ae, 0x9ecf55, 0x9256a3, 0x141a58, 0xefaaff, 0x69e604, 0x657ff2, 0xe33309, 0x7c4c1e, 0xfa00e5, 0xf69913, 0x70d5e8, 0x4e2bc6, 0xc8673d, 0xc4fecb, 0x42b230, 0xddcd27, 0x5b81dc, 0x57182a, 0xd154d1, 0x26359f, 0xa07964, 0xace092, 0x2aac69, 0xb5d37e, 0x339f85, 0x3f0673, 0xb94a88, 0x87b4a6, 0x01f85d, 0x0d61ab, 0x8b2d50, 0x145247, 0x921ebc, 0x9e874a, 0x18cbb1, 0xe37b16, 0x6537ed, 0x69ae1b, 0xefe2e0, 0x709df7, 0xf6d10c, 0xfa48fa, 0x7c0401, 0x42fa2f, 0xc4b6d4, 0xc82f22, 0x4e63d9, 0xd11cce, 0x575035, 0x5bc9c3, 0xdd8538];
|
||||
|
||||
if (typeof Int32Array !== 'undefined') {
|
||||
TABLE = new Int32Array(TABLE);
|
||||
}
|
||||
|
||||
module.exports = create('crc-24', function(buf, previous) {
|
||||
var byte, crc, _i, _len;
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
buf = Buffer(buf);
|
||||
}
|
||||
crc = previous != null ? ~~previous : 0xb704ce;
|
||||
for (_i = 0, _len = buf.length; _i < _len; _i++) {
|
||||
byte = buf[_i];
|
||||
crc = (TABLE[((crc >> 16) ^ byte) & 0xff] ^ (crc << 8)) & 0xffffff;
|
||||
}
|
||||
return crc;
|
||||
});
|
||||
Generated
Vendored
+25
@@ -0,0 +1,25 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
var Buffer, TABLE, create;
|
||||
|
||||
Buffer = require('buffer').Buffer;
|
||||
|
||||
create = require('./create');
|
||||
|
||||
TABLE = [0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d];
|
||||
|
||||
if (typeof Int32Array !== 'undefined') {
|
||||
TABLE = new Int32Array(TABLE);
|
||||
}
|
||||
|
||||
module.exports = create('crc-32', function(buf, previous) {
|
||||
var byte, crc, _i, _len;
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
buf = Buffer(buf);
|
||||
}
|
||||
crc = previous === 0 ? 0 : ~~previous ^ -1;
|
||||
for (_i = 0, _len = buf.length; _i < _len; _i++) {
|
||||
byte = buf[_i];
|
||||
crc = TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8);
|
||||
}
|
||||
return crc ^ -1;
|
||||
});
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
var Buffer, TABLE, create;
|
||||
|
||||
Buffer = require('buffer').Buffer;
|
||||
|
||||
create = require('./create');
|
||||
|
||||
TABLE = [0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a, 0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4, 0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c, 0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34, 0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83, 0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3];
|
||||
|
||||
if (typeof Int32Array !== 'undefined') {
|
||||
TABLE = new Int32Array(TABLE);
|
||||
}
|
||||
|
||||
module.exports = create('crc-8', function(buf, previous) {
|
||||
var byte, crc, _i, _len;
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
buf = Buffer(buf);
|
||||
}
|
||||
crc = ~~previous;
|
||||
for (_i = 0, _len = buf.length; _i < _len; _i++) {
|
||||
byte = buf[_i];
|
||||
crc = TABLE[(crc ^ byte) & 0xff] & 0xff;
|
||||
}
|
||||
return crc;
|
||||
});
|
||||
Generated
Vendored
+25
@@ -0,0 +1,25 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
var Buffer, TABLE, create;
|
||||
|
||||
Buffer = require('buffer').Buffer;
|
||||
|
||||
create = require('./create');
|
||||
|
||||
TABLE = [0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41, 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0, 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62, 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d, 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff, 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5, 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07, 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58, 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a, 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6, 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24, 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b, 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9, 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f, 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92, 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50, 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c, 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee, 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73, 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b, 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16, 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8, 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35];
|
||||
|
||||
if (typeof Int32Array !== 'undefined') {
|
||||
TABLE = new Int32Array(TABLE);
|
||||
}
|
||||
|
||||
module.exports = create('dallas-1-wire', function(buf, previous) {
|
||||
var byte, crc, _i, _len;
|
||||
if (!Buffer.isBuffer(buf)) {
|
||||
buf = Buffer(buf);
|
||||
}
|
||||
crc = ~~previous;
|
||||
for (_i = 0, _len = buf.length; _i < _len; _i++) {
|
||||
byte = buf[_i];
|
||||
crc = TABLE[(crc ^ byte) & 0xff] & 0xff;
|
||||
}
|
||||
return crc;
|
||||
});
|
||||
Generated
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
module.exports = function(model, calc) {
|
||||
var fn;
|
||||
fn = function(buf, previous) {
|
||||
return calc(buf, previous) >>> 0;
|
||||
};
|
||||
fn.signed = calc;
|
||||
fn.unsigned = fn;
|
||||
fn.model = model;
|
||||
return fn;
|
||||
};
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
module.exports = function(number) {
|
||||
var result;
|
||||
result = number.toString(16);
|
||||
while (result.length % 2) {
|
||||
result = "0" + result;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
Generated
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
// Generated by CoffeeScript 1.7.1
|
||||
module.exports = {
|
||||
crc1: require('./crc1'),
|
||||
crc8: require('./crc8'),
|
||||
crc81wire: require('./crc8_1wire'),
|
||||
crc16: require('./crc16'),
|
||||
crc16ccitt: require('./crc16_ccitt'),
|
||||
crc16modbus: require('./crc16_modbus'),
|
||||
crc24: require('./crc24'),
|
||||
crc32: require('./crc32')
|
||||
};
|
||||
Generated
Vendored
+40
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "crc",
|
||||
"version": "3.2.1",
|
||||
"description": "Various CRC JavaScript implementations",
|
||||
"keywords": [
|
||||
"crc"
|
||||
],
|
||||
"main": "./lib/index.js",
|
||||
"scripts": {
|
||||
"test": "mocha test/*.spec.coffee",
|
||||
"pretest": "coffee --bare --output ./lib --compile ./src/*.coffee"
|
||||
},
|
||||
"author": {
|
||||
"name": "Alex Gorbatchev",
|
||||
"url": "https://github.com/alexgorbatchev"
|
||||
},
|
||||
"devDependencies": {
|
||||
"beautify-benchmark": "^0.2.4",
|
||||
"benchmark": "^1.0.0",
|
||||
"buffer-crc32": "^0.2.3",
|
||||
"chai": "~1.9.1",
|
||||
"coffee-errors": "~0.8.6",
|
||||
"coffee-script": "~1.7.1",
|
||||
"mocha": "*",
|
||||
"seedrandom": "^2.3.6"
|
||||
},
|
||||
"homepage": "https://github.com/alexgorbatchev/node-crc",
|
||||
"bugs": {
|
||||
"url": "https://github.com/alexgorbatchev/node-crc/issues"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/alexgorbatchev/node-crc.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"readme": "# crc\n\n[](https://www.gittip.com/alexgorbatchev/)\n[](https://david-dm.org/alexgorbatchev/node-crc)\n[](https://david-dm.org/alexgorbatchev/node-crc#info=devDependencies)\n[](https://travis-ci.org/alexgorbatchev/node-crc)\n\n[](https://npmjs.org/package/node-crc)\n\nModule for calculating Cyclic Redundancy Check (CRC).\n\n## Features\n\n* Full test suite comparing values against reference `pycrc` implementation.\n* Version 3.x is 3x to 4x faster than version 2.x.\n* Pure JavaScript implementation, no dependencies.\n* Provides CRC Tables for optimized calculations.\n* Provides support for the following CRC algorithms:\n * CRC1 `crc.crc1(…)`\n * CRC8 `crc.crc8(…)`\n * CRC8 1-Wire `crc.crc81wire(…)`\n * CRC16 `crc.crc16(…)`\n * CRC16 CCITT `crc.crc16ccitt(…)`\n * CRC16 Modbus `crc.crc16modbus(…)`\n * CRC24 `crc.crc24(…)`\n * CRC32 `crc.crc32(…)`\n\n## IMPORTANT\n\nIf you've used `crc` module prior to version 2.x, you might have some inconsistentcies with the current implementation because it relied on very old code and wasn't checked against reference implementation. If you upgrading from 1.x, please take special care.\n\n## Support\n\n<a href=\"https://blockchain.info/address/1CZyBREeHTmy8C5zVGHZHPwqBuWFmEuUCQ\"><img src=\"bitcoin.png\" width=\"150\" align=\"right\"/></a> Please support me on [GitTip](https://www.gittip.com/alexgorbatchev/). I've spend days developing and grooming this module and hope to spend more time. If you have bitcoin, please use the QR code or this wallet address [`1CZyBREeHTmy8C5zVGHZHPwqBuWFmEuUCQ`](https://blockchain.info/address/1CZyBREeHTmy8C5zVGHZHPwqBuWFmEuUCQ):\n\n## Installation\n\n npm install crc\n\n## Running tests\n\n $ npm install\n $ npm test\n\n## Usage Example\n\nCalculate a CRC32:\n\n var crc = require('crc');\n\n crc.crc32('hello').toString(16);\n # => \"3610a686\"\n\nCalculate a CRC32 of a file:\n\n crc.crc32(fs.readFileSync('README.md', 'utf8')).toString(16);\n # => \"127ad531\"\n\nOr using a `Buffer`:\n\n crc.crc32(fs.readFileSync('README.md')).toString(16);\n # => \"127ad531\"\n\nIncrementally calculate a CRC32:\n\n value = crc32('one');\n value = crc32('two', value);\n value = crc32('three', value);\n value.toString(16);\n # => \"09e1c092\"\n\n## Thanks!\n\n[pycrc](http://www.tty1.net/pycrc/) library is which the source of all of the CRC tables.\n\n# License\n\nThe MIT License (MIT)\n\nCopyright (c) 2014 Alex Gorbatchev\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n",
|
||||
"readmeFilename": "README.md",
|
||||
"_id": "crc@3.2.1",
|
||||
"_from": "crc@3.2.1"
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"name": "etag",
|
||||
"description": "Create simple ETags",
|
||||
"version": "1.5.1",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Douglas Christopher Wilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
{
|
||||
"name": "David Björklund",
|
||||
"email": "david.bjorklund@gmail.com"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"etag",
|
||||
"http",
|
||||
"res"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/jshttp/etag"
|
||||
},
|
||||
"dependencies": {
|
||||
"crc": "3.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"benchmark": "1.0.0",
|
||||
"beautify-benchmark": "0.2.4",
|
||||
"istanbul": "0.3.2",
|
||||
"mocha": "~1.21.4",
|
||||
"seedrandom": "~2.3.6"
|
||||
},
|
||||
"files": [
|
||||
"LICENSE",
|
||||
"HISTORY.md",
|
||||
"index.js"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
},
|
||||
"scripts": {
|
||||
"bench": "node benchmark/index.js",
|
||||
"test": "mocha --reporter spec --bail --check-leaks test/",
|
||||
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
|
||||
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
|
||||
},
|
||||
"readme": "# etag\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nCreate simple ETags\n\n## Installation\n\n```sh\n$ npm install etag\n```\n\n## API\n\n```js\nvar etag = require('etag')\n```\n\n### etag(entity, [options])\n\nGenerate a strong ETag for the given entity. This should be the complete\nbody of the entity. Strings, `Buffer`s, and `fs.Stats` are accepted. By\ndefault, a strong ETag is generated except for `fs.Stats`, which will\ngenerate a weak ETag (this can be overwritten by `options.weak`).\n\n```js\nres.setHeader('ETag', etag(body))\n```\n\n#### Options\n\n`etag` accepts these properties in the options object.\n\n##### weak\n\nSpecifies if a \"strong\" or a \"weak\" ETag will be generated. The ETag can only\nreally be a strong as the given input.\n\n## Testing\n\n```sh\n$ npm test\n```\n\n## Benchmark\n\n```bash\n$ npm run-script bench\n\n> etag@1.5.1 bench nodejs-etag\n> node benchmark/index.js\n\n> node benchmark/body0-100b.js\n\n 100B body\n\n 1 test completed.\n 2 tests completed.\n 3 tests completed.\n 4 tests completed.\n\n buffer - strong x 425,007 ops/sec ±1.47% (184 runs sampled)\n* buffer - weak x 1,009,859 ops/sec ±0.18% (197 runs sampled)\n string - strong x 442,096 ops/sec ±1.20% (181 runs sampled)\n string - weak x 325,063 ops/sec ±0.31% (192 runs sampled)\n\n> node benchmark/body1-1kb.js\n\n 1KB body\n\n 1 test completed.\n 2 tests completed.\n 3 tests completed.\n 4 tests completed.\n\n buffer - strong x 263,069 ops/sec ±1.60% (190 runs sampled)\n* buffer - weak x 295,732 ops/sec ±0.43% (199 runs sampled)\n string - strong x 274,822 ops/sec ±1.15% (191 runs sampled)\n string - weak x 169,473 ops/sec ±1.59% (194 runs sampled)\n\n> node benchmark/body2-5kb.js\n\n 5KB body\n\n 1 test completed.\n 2 tests completed.\n 3 tests completed.\n 4 tests completed.\n\n buffer - strong x 104,299 ops/sec ±0.60% (193 runs sampled)\n* buffer - weak x 108,126 ops/sec ±0.65% (196 runs sampled)\n string - strong x 101,736 ops/sec ±0.78% (194 runs sampled)\n string - weak x 101,266 ops/sec ±0.85% (192 runs sampled)\n\n> node benchmark/body3-10kb.js\n\n 10KB body\n\n 1 test completed.\n 2 tests completed.\n 3 tests completed.\n 4 tests completed.\n\n buffer - strong x 59,007 ops/sec ±0.29% (198 runs sampled)\n* buffer - weak x 60,968 ops/sec ±0.48% (197 runs sampled)\n string - strong x 51,873 ops/sec ±1.78% (178 runs sampled)\n string - weak x 52,307 ops/sec ±2.63% (193 runs sampled)\n\n> node benchmark/body4-100kb.js\n\n 100KB body\n\n 1 test completed.\n 2 tests completed.\n 3 tests completed.\n 4 tests completed.\n\n buffer - strong x 6,712 ops/sec ±0.11% (198 runs sampled)\n* buffer - weak x 6,716 ops/sec ±0.50% (196 runs sampled)\n string - strong x 6,397 ops/sec ±0.36% (196 runs sampled)\n string - weak x 6,635 ops/sec ±0.15% (198 runs sampled)\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/etag.svg?style=flat\n[npm-url]: https://npmjs.org/package/etag\n[node-version-image]: https://img.shields.io/node/v/etag.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/etag.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/etag\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/etag.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/etag?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/etag.svg?style=flat\n[downloads-url]: https://npmjs.org/package/etag\n",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jshttp/etag/issues"
|
||||
},
|
||||
"_id": "etag@1.5.1",
|
||||
"_from": "etag@~1.5.0"
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
0.2.4 / 2014-09-07
|
||||
==================
|
||||
|
||||
* Support Node.js 0.6
|
||||
|
||||
0.2.3 / 2014-09-07
|
||||
==================
|
||||
|
||||
* Move repository to jshttp
|
||||
|
||||
0.2.2 / 2014-02-19
|
||||
==================
|
||||
|
||||
* Revert "Fix for blank page on Safari reload"
|
||||
|
||||
0.2.1 / 2014-01-29
|
||||
==================
|
||||
|
||||
* fix: support max-age=0 for end-to-end revalidation
|
||||
|
||||
0.2.0 / 2013-08-11
|
||||
==================
|
||||
|
||||
* fix: return false for no-cache
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
# fresh
|
||||
|
||||
[![NPM Version][npm-image]][npm-url]
|
||||
[![NPM Downloads][downloads-image]][downloads-url]
|
||||
[![Node.js Version][node-version-image]][node-version-url]
|
||||
[![Build Status][travis-image]][travis-url]
|
||||
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||
|
||||
HTTP response freshness testing
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
$ npm install fresh
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
```js
|
||||
var fresh = require('fresh')
|
||||
```
|
||||
|
||||
### fresh(req, res)
|
||||
|
||||
Check freshness of `req` and `res` headers.
|
||||
|
||||
When the cache is "fresh" __true__ is returned,
|
||||
otherwise __false__ is returned to indicate that
|
||||
the cache is now stale.
|
||||
|
||||
## Example
|
||||
|
||||
```js
|
||||
var req = { 'if-none-match': 'tobi' };
|
||||
var res = { 'etag': 'luna' };
|
||||
fresh(req, res);
|
||||
// => false
|
||||
|
||||
var req = { 'if-none-match': 'tobi' };
|
||||
var res = { 'etag': 'tobi' };
|
||||
fresh(req, res);
|
||||
// => true
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
|
||||
[npm-image]: https://img.shields.io/npm/v/fresh.svg?style=flat
|
||||
[npm-url]: https://npmjs.org/package/fresh
|
||||
[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat
|
||||
[node-version-url]: http://nodejs.org/download/
|
||||
[travis-image]: https://img.shields.io/travis/jshttp/fresh.svg?style=flat
|
||||
[travis-url]: https://travis-ci.org/jshttp/fresh
|
||||
[coveralls-image]: https://img.shields.io/coveralls/jshttp/fresh.svg?style=flat
|
||||
[coveralls-url]: https://coveralls.io/r/jshttp/fresh?branch=master
|
||||
[downloads-image]: https://img.shields.io/npm/dm/fresh.svg?style=flat
|
||||
[downloads-url]: https://npmjs.org/package/fresh
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
|
||||
/**
|
||||
* Expose `fresh()`.
|
||||
*/
|
||||
|
||||
module.exports = fresh;
|
||||
|
||||
/**
|
||||
* Check freshness of `req` and `res` headers.
|
||||
*
|
||||
* When the cache is "fresh" __true__ is returned,
|
||||
* otherwise __false__ is returned to indicate that
|
||||
* the cache is now stale.
|
||||
*
|
||||
* @param {Object} req
|
||||
* @param {Object} res
|
||||
* @return {Boolean}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function fresh(req, res) {
|
||||
// defaults
|
||||
var etagMatches = true;
|
||||
var notModified = true;
|
||||
|
||||
// fields
|
||||
var modifiedSince = req['if-modified-since'];
|
||||
var noneMatch = req['if-none-match'];
|
||||
var lastModified = res['last-modified'];
|
||||
var etag = res['etag'];
|
||||
var cc = req['cache-control'];
|
||||
|
||||
// unconditional request
|
||||
if (!modifiedSince && !noneMatch) return false;
|
||||
|
||||
// check for no-cache cache request directive
|
||||
if (cc && cc.indexOf('no-cache') !== -1) return false;
|
||||
|
||||
// parse if-none-match
|
||||
if (noneMatch) noneMatch = noneMatch.split(/ *, */);
|
||||
|
||||
// if-none-match
|
||||
if (noneMatch) etagMatches = ~noneMatch.indexOf(etag) || '*' == noneMatch[0];
|
||||
|
||||
// if-modified-since
|
||||
if (modifiedSince) {
|
||||
modifiedSince = new Date(modifiedSince);
|
||||
lastModified = new Date(lastModified);
|
||||
notModified = lastModified <= modifiedSince;
|
||||
}
|
||||
|
||||
return !! (etagMatches && notModified);
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"name": "fresh",
|
||||
"description": "HTTP response freshness testing",
|
||||
"version": "0.2.4",
|
||||
"author": {
|
||||
"name": "TJ Holowaychuk",
|
||||
"email": "tj@vision-media.ca",
|
||||
"url": "http://tjholowaychuk.com"
|
||||
},
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"fresh",
|
||||
"http",
|
||||
"conditional",
|
||||
"cache"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/jshttp/fresh"
|
||||
},
|
||||
"devDependencies": {
|
||||
"istanbul": "0",
|
||||
"mocha": "1",
|
||||
"should": "3"
|
||||
},
|
||||
"files": [
|
||||
"HISTORY.md",
|
||||
"LICENSE",
|
||||
"index.js"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha --reporter spec --require should",
|
||||
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --require should",
|
||||
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot --require should"
|
||||
},
|
||||
"readme": "# fresh\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nHTTP response freshness testing\n\n## Installation\n\n```\n$ npm install fresh\n```\n\n## API\n\n```js\nvar fresh = require('fresh')\n```\n\n### fresh(req, res)\n\n Check freshness of `req` and `res` headers.\n\n When the cache is \"fresh\" __true__ is returned,\n otherwise __false__ is returned to indicate that\n the cache is now stale.\n\n## Example\n\n```js\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'luna' };\nfresh(req, res);\n// => false\n\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'tobi' };\nfresh(req, res);\n// => true\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/fresh.svg?style=flat\n[npm-url]: https://npmjs.org/package/fresh\n[node-version-image]: https://img.shields.io/badge/node.js-%3E%3D_0.6-brightgreen.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/fresh.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/fresh\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/fresh.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/fresh?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/fresh.svg?style=flat\n[downloads-url]: https://npmjs.org/package/fresh\n",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jshttp/fresh/issues"
|
||||
},
|
||||
"_id": "fresh@0.2.4",
|
||||
"_from": "fresh@0.2.4"
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
node_modules
|
||||
test
|
||||
History.md
|
||||
Makefile
|
||||
component.json
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
# ms.js: miliseconds conversion utility
|
||||
|
||||
```js
|
||||
ms('1d') // 86400000
|
||||
ms('10h') // 36000000
|
||||
ms('2h') // 7200000
|
||||
ms('1m') // 60000
|
||||
ms('5s') // 5000
|
||||
ms('100') // 100
|
||||
```
|
||||
|
||||
```js
|
||||
ms(60000) // "1m"
|
||||
ms(2 * 60000) // "2m"
|
||||
ms(ms('10 hours')) // "10h"
|
||||
```
|
||||
|
||||
```js
|
||||
ms(60000, { long: true }) // "1 minute"
|
||||
ms(2 * 60000, { long: true }) // "2 minutes"
|
||||
ms(ms('10 hours', { long: true })) // "10 hours"
|
||||
```
|
||||
|
||||
- Node/Browser compatible. Published as `ms` in NPM.
|
||||
- If a number is supplied to `ms`, a string with a unit is returned.
|
||||
- If a string that contains the number is supplied, it returns it as
|
||||
a number (e.g: it returns `100` for `'100'`).
|
||||
- If you pass a string with a number and a valid unit, the number of
|
||||
equivalent ms is returned.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
+111
@@ -0,0 +1,111 @@
|
||||
/**
|
||||
* Helpers.
|
||||
*/
|
||||
|
||||
var s = 1000;
|
||||
var m = s * 60;
|
||||
var h = m * 60;
|
||||
var d = h * 24;
|
||||
var y = d * 365.25;
|
||||
|
||||
/**
|
||||
* Parse or format the given `val`.
|
||||
*
|
||||
* Options:
|
||||
*
|
||||
* - `long` verbose formatting [false]
|
||||
*
|
||||
* @param {String|Number} val
|
||||
* @param {Object} options
|
||||
* @return {String|Number}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
module.exports = function(val, options){
|
||||
options = options || {};
|
||||
if ('string' == typeof val) return parse(val);
|
||||
return options.long
|
||||
? long(val)
|
||||
: short(val);
|
||||
};
|
||||
|
||||
/**
|
||||
* Parse the given `str` and return milliseconds.
|
||||
*
|
||||
* @param {String} str
|
||||
* @return {Number}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function parse(str) {
|
||||
var match = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str);
|
||||
if (!match) return;
|
||||
var n = parseFloat(match[1]);
|
||||
var type = (match[2] || 'ms').toLowerCase();
|
||||
switch (type) {
|
||||
case 'years':
|
||||
case 'year':
|
||||
case 'y':
|
||||
return n * y;
|
||||
case 'days':
|
||||
case 'day':
|
||||
case 'd':
|
||||
return n * d;
|
||||
case 'hours':
|
||||
case 'hour':
|
||||
case 'h':
|
||||
return n * h;
|
||||
case 'minutes':
|
||||
case 'minute':
|
||||
case 'm':
|
||||
return n * m;
|
||||
case 'seconds':
|
||||
case 'second':
|
||||
case 's':
|
||||
return n * s;
|
||||
case 'ms':
|
||||
return n;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Short format for `ms`.
|
||||
*
|
||||
* @param {Number} ms
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function short(ms) {
|
||||
if (ms >= d) return Math.round(ms / d) + 'd';
|
||||
if (ms >= h) return Math.round(ms / h) + 'h';
|
||||
if (ms >= m) return Math.round(ms / m) + 'm';
|
||||
if (ms >= s) return Math.round(ms / s) + 's';
|
||||
return ms + 'ms';
|
||||
}
|
||||
|
||||
/**
|
||||
* Long format for `ms`.
|
||||
*
|
||||
* @param {Number} ms
|
||||
* @return {String}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function long(ms) {
|
||||
return plural(ms, d, 'day')
|
||||
|| plural(ms, h, 'hour')
|
||||
|| plural(ms, m, 'minute')
|
||||
|| plural(ms, s, 'second')
|
||||
|| ms + ' ms';
|
||||
}
|
||||
|
||||
/**
|
||||
* Pluralization helper.
|
||||
*/
|
||||
|
||||
function plural(ms, n, name) {
|
||||
if (ms < n) return;
|
||||
if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;
|
||||
return Math.ceil(ms / n) + ' ' + name + 's';
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"name": "ms",
|
||||
"version": "0.6.2",
|
||||
"description": "Tiny ms conversion utility",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/guille/ms.js.git"
|
||||
},
|
||||
"main": "./index",
|
||||
"devDependencies": {
|
||||
"mocha": "*",
|
||||
"expect.js": "*",
|
||||
"serve": "*"
|
||||
},
|
||||
"component": {
|
||||
"scripts": {
|
||||
"ms/index.js": "index.js"
|
||||
}
|
||||
},
|
||||
"readme": "# ms.js: miliseconds conversion utility\n\n```js\nms('1d') // 86400000\nms('10h') // 36000000\nms('2h') // 7200000\nms('1m') // 60000\nms('5s') // 5000\nms('100') // 100\n```\n\n```js\nms(60000) // \"1m\"\nms(2 * 60000) // \"2m\"\nms(ms('10 hours')) // \"10h\"\n```\n\n```js\nms(60000, { long: true }) // \"1 minute\"\nms(2 * 60000, { long: true }) // \"2 minutes\"\nms(ms('10 hours', { long: true })) // \"10 hours\"\n```\n\n- Node/Browser compatible. Published as `ms` in NPM.\n- If a number is supplied to `ms`, a string with a unit is returned.\n- If a string that contains the number is supplied, it returns it as\na number (e.g: it returns `100` for `'100'`).\n- If you pass a string with a number and a valid unit, the number of\nequivalent ms is returned.\n\n## License\n\nMIT",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/guille/ms.js/issues"
|
||||
},
|
||||
"_id": "ms@0.6.2",
|
||||
"_from": "ms@0.6.2"
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"name": "serve-favicon",
|
||||
"description": "favicon serving middleware with caching",
|
||||
"version": "2.1.7",
|
||||
"author": {
|
||||
"name": "Douglas Christopher Wilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
},
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"express",
|
||||
"favicon",
|
||||
"middleware"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/expressjs/serve-favicon"
|
||||
},
|
||||
"dependencies": {
|
||||
"etag": "~1.5.0",
|
||||
"fresh": "0.2.4",
|
||||
"ms": "0.6.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"istanbul": "0.3.2",
|
||||
"mocha": "~2.0.1",
|
||||
"proxyquire": "~1.0.1",
|
||||
"supertest": "~0.15.0"
|
||||
},
|
||||
"files": [
|
||||
"LICENSE",
|
||||
"HISTORY.md",
|
||||
"index.js"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 0.8.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha --reporter spec --bail --check-leaks test/",
|
||||
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
|
||||
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
|
||||
},
|
||||
"readme": "# serve-favicon\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n[![Gittip][gittip-image]][gittip-url]\n\nNode.js middleware for serving a favicon.\n\nWhy use this module?\n\n - User agents request `favicon.ico` frequently and indiscriminately, so you\n may wish to exclude these requests from your logs by using this middleware\n before your logger middleware.\n - This module caches the icon in memory to improve performance by skipping\n disk access.\n - This module provides an `ETag` based on the contents of the icon, rather\n than file system properties.\n - This module will serve with the most compatible `Content-Type`.\n\n## Install\n\n```bash\nnpm install serve-favicon\n```\n\n## API\n\n### favicon(path, options)\n\nCreate new middleware to serve a favicon from the given `path` to a favicon file.\n`path` may also be a `Buffer` of the icon to serve.\n\n#### Options\n\nServe favicon accepts these properties in the options object.\n\n##### maxAge\n\nThe `cache-control` `max-age` directive in `ms`, defaulting to 1 day. This can\nalso be a string accepted by the [ms](https://www.npmjs.org/package/ms#readme)\nmodule.\n\n## Examples\n\nTypically this middleware will come very early in your stack (maybe even first)\nto avoid processing any other middleware if we already know the request is for\n`/favicon.ico`.\n\n### express\n\n```javascript\nvar express = require('express');\nvar favicon = require('serve-favicon');\n\nvar app = express();\napp.use(favicon(__dirname + '/public/favicon.ico'));\n\n// Add your routes here, etc.\n\napp.listen(3000);\n```\n\n### connect\n\n```javascript\nvar connect = require('connect');\nvar favicon = require('serve-favicon');\n\nvar app = connect();\napp.use(favicon(__dirname + '/public/favicon.ico'));\n\n// Add your middleware here, etc.\n\napp.listen(3000);\n```\n\n### vanilla http server\n\nThis middleware can be used anywhere, even outside express/connect. It takes\n`req`, `res`, and `callback`.\n\n```javascript\nvar http = require('http');\nvar favicon = require('serve-favicon');\nvar finalhandler = require('finalhandler');\n\nvar _favicon = favicon(__dirname + '/public/favicon.ico');\n\nvar server = http.createServer(function onRequest(req, res) {\n var done = finalhandler(req, res);\n\n _favicon(req, res, function onNext(err) {\n if (err) return done(err);\n\n // continue to process the request here, etc.\n\n res.statusCode = 404;\n res.end('oops');\n });\n});\n\nserver.listen(3000);\n```\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/serve-favicon.svg?style=flat\n[npm-url]: https://npmjs.org/package/serve-favicon\n[travis-image]: https://img.shields.io/travis/expressjs/serve-favicon.svg?style=flat\n[travis-url]: https://travis-ci.org/expressjs/serve-favicon\n[coveralls-image]: https://img.shields.io/coveralls/expressjs/serve-favicon.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/expressjs/serve-favicon?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/serve-favicon.svg?style=flat\n[downloads-url]: https://npmjs.org/package/serve-favicon\n[gittip-image]: https://img.shields.io/gittip/dougwilson.svg?style=flat\n[gittip-url]: https://www.gittip.com/dougwilson/\n",
|
||||
"readmeFilename": "README.md",
|
||||
"bugs": {
|
||||
"url": "https://github.com/expressjs/serve-favicon/issues"
|
||||
},
|
||||
"_id": "serve-favicon@2.1.7",
|
||||
"_from": "serve-favicon@~2.1.3"
|
||||
}
|
||||
Reference in New Issue
Block a user