diff options
| author | akiyamn | 2023-09-24 23:22:21 +1000 |
|---|---|---|
| committer | akiyamn | 2023-09-24 23:22:21 +1000 |
| commit | 4e87195739f2a5d9a05451b48773c8afdc680765 (patch) | |
| tree | 9cba501844a4a11dcbdffc4050ed8189561c55ed /node_modules/data-uri-to-buffer | |
| download | price-tracker-worker-4e87195739f2a5d9a05451b48773c8afdc680765.tar.gz price-tracker-worker-4e87195739f2a5d9a05451b48773c8afdc680765.zip | |
Initial commit (by create-cloudflare CLI)
Diffstat (limited to 'node_modules/data-uri-to-buffer')
| -rw-r--r-- | node_modules/data-uri-to-buffer/.travis.yml | 25 | ||||
| -rw-r--r-- | node_modules/data-uri-to-buffer/History.md | 55 | ||||
| -rw-r--r-- | node_modules/data-uri-to-buffer/README.md | 88 | ||||
| -rw-r--r-- | node_modules/data-uri-to-buffer/index.d.ts | 10 | ||||
| -rw-r--r-- | node_modules/data-uri-to-buffer/index.js | 70 | ||||
| -rw-r--r-- | node_modules/data-uri-to-buffer/package.json | 34 | ||||
| -rw-r--r-- | node_modules/data-uri-to-buffer/test/test.js | 175 |
7 files changed, 457 insertions, 0 deletions
diff --git a/node_modules/data-uri-to-buffer/.travis.yml b/node_modules/data-uri-to-buffer/.travis.yml new file mode 100644 index 0000000..4e1d070 --- /dev/null +++ b/node_modules/data-uri-to-buffer/.travis.yml @@ -0,0 +1,25 @@ +sudo: false + +language: node_js + +node_js: + - "1" + - "2" + - "3" + - "4" + - "5" + - "6" + - "7" + - "8" + +install: + - PATH="`npm bin`:`npm bin -g`:$PATH" + # Install dependencies and build + - npm install + +script: + # Output useful info for debugging + - node --version + - npm --version + # Run tests + - npm test diff --git a/node_modules/data-uri-to-buffer/History.md b/node_modules/data-uri-to-buffer/History.md new file mode 100644 index 0000000..170c709 --- /dev/null +++ b/node_modules/data-uri-to-buffer/History.md @@ -0,0 +1,55 @@ + +2.0.0 / 2017-07-18 +================== + + * More correct media type handling + * add typings for Typescript + +1.2.0 / 2017-07-18 +================== + + * Essentially identical to v1.0.0. Reverting changes from v1.1.0 because they are breaking changes and should be part of a major version bump + * Revert "More correct media type handling" + * Revert "add typings for Typescript" + +1.1.0 / 2017-07-17 +================== + + * More correct media type handling + * Add typings for Typescript + +1.0.0 / 2017-06-09 +================== + + * Bumping to v1.0.0 for semver semantics + * random updates for newer Node.js versions + * travis: test more node versions and fix v0.8 + +0.0.4 / 2015-06-29 +================== + + * package: update "mocha" to v2 + * package: add RFC to the "keywords" section + * travis: test node v0.8, v0.10, and v0.12 + * README: use SVG for Travis-CI badge + * test: more tests + +0.0.3 / 2014-01-08 +================== + + * index: fix a URI with a comma in the data portion + +0.0.2 / 2014-01-08 +================== + + * index: use unescape() instead of decodeURIComponent() + * test: add more tests from Mozilla + +0.0.1 / 2014-01-02 +================== + + * add `README.md` + * index: default the `charset` property to "US-ASCII" + * default encoding is "ascii" + * default `type` to "text/plain" when none is given + * initial commit diff --git a/node_modules/data-uri-to-buffer/README.md b/node_modules/data-uri-to-buffer/README.md new file mode 100644 index 0000000..2463f1f --- /dev/null +++ b/node_modules/data-uri-to-buffer/README.md @@ -0,0 +1,88 @@ +data-uri-to-buffer +================== +### Generate a Buffer instance from a [Data URI][rfc] string +[](https://travis-ci.org/TooTallNate/node-data-uri-to-buffer) + +This module accepts a ["data" URI][rfc] String of data, and returns a +node.js `Buffer` instance with the decoded data. + + +Installation +------------ + +Install with `npm`: + +``` bash +$ npm install data-uri-to-buffer +``` + + +Example +------- + +``` js +var dataUriToBuffer = require('data-uri-to-buffer'); + +// plain-text data is supported +var uri = 'data:,Hello%2C%20World!'; +var decoded = dataUriToBuffer(uri); +console.log(decoded.toString()); +// 'Hello, World!' + +// base64-encoded data is supported +uri = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D'; +decoded = dataUriToBuffer(uri); +console.log(decoded.toString()); +// 'Hello, World!' +``` + + +API +--- + +### dataUriToBuffer(String uri) → Buffer + +The `type` property on the Buffer instance gets set to the main type portion of +the "mediatype" portion of the "data" URI, or defaults to `"text/plain"` if not +specified. + +The `typeFull` property on the Buffer instance gets set to the entire +"mediatype" portion of the "data" URI (including all parameters), or defaults +to `"text/plain;charset=US-ASCII"` if not specified. + +The `charset` property on the Buffer instance gets set to the Charset portion of +the "mediatype" portion of the "data" URI, or defaults to `"US-ASCII"` if the +entire type is not specified, or defaults to `""` otherwise. + +*Note*: If the only the main type is specified but not the charset, e.g. +`"data:text/plain,abc"`, the charset is set to the empty string. The spec only +defaults to US-ASCII as charset if the entire type is not specified. + + +License +------- + +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net> + +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. + +[rfc]: http://tools.ietf.org/html/rfc2397 diff --git a/node_modules/data-uri-to-buffer/index.d.ts b/node_modules/data-uri-to-buffer/index.d.ts new file mode 100644 index 0000000..2401e25 --- /dev/null +++ b/node_modules/data-uri-to-buffer/index.d.ts @@ -0,0 +1,10 @@ +/// <reference types="node" /> + +declare class MimeBuffer extends Buffer { + type: string; + typeFull: string; + charset: string; +} + +declare function dataUriToBuffer(uri: string): MimeBuffer; +export = dataUriToBuffer; diff --git a/node_modules/data-uri-to-buffer/index.js b/node_modules/data-uri-to-buffer/index.js new file mode 100644 index 0000000..8f8ac76 --- /dev/null +++ b/node_modules/data-uri-to-buffer/index.js @@ -0,0 +1,70 @@ +'use strict'; + +/** + * Module exports. + */ + +module.exports = dataUriToBuffer; + +/** + * Returns a `Buffer` instance from the given data URI `uri`. + * + * @param {String} uri Data URI to turn into a Buffer instance + * @return {Buffer} Buffer instance from Data URI + * @api public + */ + +function dataUriToBuffer(uri) { + if (!/^data\:/i.test(uri)) { + throw new TypeError( + '`uri` does not appear to be a Data URI (must begin with "data:")' + ); + } + + // strip newlines + uri = uri.replace(/\r?\n/g, ''); + + // split the URI up into the "metadata" and the "data" portions + var firstComma = uri.indexOf(','); + if (-1 === firstComma || firstComma <= 4) { + throw new TypeError('malformed data: URI'); + } + + // remove the "data:" scheme and parse the metadata + var meta = uri.substring(5, firstComma).split(';'); + + var type = meta[0] || 'text/plain'; + var typeFull = type; + var base64 = false; + var charset = ''; + for (var i = 1; i < meta.length; i++) { + if ('base64' == meta[i]) { + base64 = true; + } else { + typeFull += ';' + meta[i]; + if (0 == meta[i].indexOf('charset=')) { + charset = meta[i].substring(8); + } + } + } + // defaults to US-ASCII only if type is not provided + if (!meta[0] && !charset.length) { + typeFull += ';charset=US-ASCII'; + charset = 'US-ASCII'; + } + + // get the encoded data portion and decode URI-encoded chars + var data = unescape(uri.substring(firstComma + 1)); + + var encoding = base64 ? 'base64' : 'ascii'; + var buffer = Buffer.from ? Buffer.from(data, encoding) : new Buffer(data, encoding); + + // set `.type` and `.typeFull` properties to MIME type + buffer.type = type; + buffer.typeFull = typeFull; + + // set the `.charset` property + buffer.charset = charset; + + return buffer; +} diff --git a/node_modules/data-uri-to-buffer/package.json b/node_modules/data-uri-to-buffer/package.json new file mode 100644 index 0000000..cbd53f5 --- /dev/null +++ b/node_modules/data-uri-to-buffer/package.json @@ -0,0 +1,34 @@ +{ + "name": "data-uri-to-buffer", + "version": "2.0.2", + "description": "Generate a Buffer instance from a Data URI string", + "main": "index.js", + "types": "index.d.ts", + "scripts": { + "test": "mocha --reporter spec" + }, + "repository": { + "type": "git", + "url": "git://github.com/TooTallNate/node-data-uri-to-buffer.git" + }, + "keywords": [ + "data", + "uri", + "datauri", + "data-uri", + "buffer", + "convert", + "rfc2397", + "2397" + ], + "author": "Nathan Rajlich <nathan@tootallnate.net> (http://n8.io/)", + "license": "MIT", + "bugs": { + "url": "https://github.com/TooTallNate/node-data-uri-to-buffer/issues" + }, + "homepage": "https://github.com/TooTallNate/node-data-uri-to-buffer", + "devDependencies": { + "@types/node": "^8.0.7", + "mocha": "^3.4.2" + } +} diff --git a/node_modules/data-uri-to-buffer/test/test.js b/node_modules/data-uri-to-buffer/test/test.js new file mode 100644 index 0000000..2975e36 --- /dev/null +++ b/node_modules/data-uri-to-buffer/test/test.js @@ -0,0 +1,175 @@ + +/** + * Module dependencies. + */ + +var assert = require('assert'); +var dataUriToBuffer = require('../'); + +describe('data-uri-to-buffer', function () { + + it('should decode bare-bones Data URIs', function () { + var uri = 'data:,Hello%2C%20World!'; + + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('text/plain;charset=US-ASCII', buf.typeFull); + assert.equal('US-ASCII', buf.charset); + assert.equal('Hello, World!', buf.toString()); + }); + + it('should decode bare-bones "base64" Data URIs', function () { + var uri = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D'; + + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('Hello, World!', buf.toString()); + }); + + it('should decode plain-text Data URIs', function () { + var html = '<!DOCTYPE html>'+ + '<html lang="en">'+ + '<head><title>Embedded Window</title></head>'+ + '<body><h1>42</h1></body>'+ + '</html>'; + + // Escape the HTML for URL formatting + var uri = 'data:text/html;charset=utf-8,' + encodeURIComponent(html); + + var buf = dataUriToBuffer(uri); + assert.equal('text/html', buf.type); + assert.equal('utf-8', buf.charset); + assert.equal(html, buf.toString()); + }); + + // the next 4 tests are from: + // https://bug161965.bugzilla.mozilla.org/attachment.cgi?id=94670&action=view + + it('should decode "ISO-8859-8 in Base64" URIs', function () { + var uri = 'data:text/plain;charset=iso-8859-8-i;base64,+ezl7Q=='; + + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('iso-8859-8-i', buf.charset); + assert.equal(4, buf.length); + assert.equal(0xf9, buf[0]); + assert.equal(0xec, buf[1]); + assert.equal(0xe5, buf[2]); + assert.equal(0xed, buf[3]); + }); + + it('should decode "ISO-8859-8 in URL-encoding" URIs', function () { + var uri = 'data:text/plain;charset=iso-8859-8-i,%f9%ec%e5%ed'; + + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('iso-8859-8-i', buf.charset); + assert.equal(4, buf.length); + assert.equal(0xf9, buf[0]); + assert.equal(0xec, buf[1]); + assert.equal(0xe5, buf[2]); + assert.equal(0xed, buf[3]); + }); + + it('should decode "UTF-8 in Base64" URIs', function () { + var uri = 'data:text/plain;charset=UTF-8;base64,16nXnNeV150='; + + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('UTF-8', buf.charset); + assert.equal(8, buf.length); + assert.equal('שלום', buf.toString('utf8')); + }); + + it('should decode "UTF-8 in URL-encoding" URIs', function () { + var uri = 'data:text/plain;charset=UTF-8,%d7%a9%d7%9c%d7%95%d7%9d'; + + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('UTF-8', buf.charset); + assert.equal(8, buf.length); + assert.equal('שלום', buf.toString('utf8')); + }); + + // this next one is from Wikipedia IIRC + + it('should decode "base64" Data URIs with newlines', function () { + var uri = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA\n' + + 'AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO\n' + + '9TXL0Y4OHwAAAABJRU5ErkJggg=='; + + var buf = dataUriToBuffer(uri); + assert.equal('image/png', buf.type); + assert.equal('iVBORw0KGgoAAAANSUhEUgAAAAUA' + + 'AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO' + + '9TXL0Y4OHwAAAABJRU5ErkJggg==', buf.toString('base64')); + }); + + it('should decode a plain-text URI with a space character in it', function () { + var uri = 'data:,foo bar'; + + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('foo bar', buf.toString()); + }); + + it('should decode data with a "," comma char', function () { + var uri = 'data:,a,b'; + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('a,b', buf.toString()); + }); + + it('should decode data with traditionally reserved characters like ";"', function () { + var uri = 'data:,;test'; + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal(';test', buf.toString()); + }); + + it('should not default to US-ASCII if main type is provided', function () { + var uri = 'data:text/plain,abc'; + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('text/plain', buf.typeFull); + assert.equal('', buf.charset); + assert.equal('abc', buf.toString()); + }); + + it('should default to text/plain if main type is not provided', function () { + var uri = 'data:;charset=UTF-8,abc'; + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('text/plain;charset=UTF-8', buf.typeFull); + assert.equal('UTF-8', buf.charset); + assert.equal('abc', buf.toString()); + }); + + it('should not allow charset without a leading ;', function () { + var uri = 'data:charset=UTF-8,abc'; + var buf = dataUriToBuffer(uri); + assert.equal('charset=UTF-8', buf.type); + assert.equal('charset=UTF-8', buf.typeFull); + assert.equal('', buf.charset); + assert.equal('abc', buf.toString()); + }); + + it('should allow custom media type parameters', function () { + var uri = 'data:application/javascript;version=1.8;charset=UTF-8,abc'; + var buf = dataUriToBuffer(uri); + assert.equal('application/javascript', buf.type); + assert.equal('application/javascript;version=1.8;charset=UTF-8', buf.typeFull); + assert.equal('UTF-8', buf.charset); + assert.equal('abc', buf.toString()); + }); + + it('should allow base64 annotation anywhere', function () { + var uri = 'data:text/plain;base64;charset=UTF-8,YWJj'; + var buf = dataUriToBuffer(uri); + assert.equal('text/plain', buf.type); + assert.equal('text/plain;charset=UTF-8', buf.typeFull); + assert.equal('UTF-8', buf.charset); + assert.equal('abc', buf.toString()); + }); + +}); |
